xref: /aoo4110/main/sw/source/ui/table/tautofmt.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_sw.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #ifdef SW_DLLIMPLEMENTATION
28*b1cdbd2cSJim Jagielski #undef SW_DLLIMPLEMENTATION
29*b1cdbd2cSJim Jagielski #endif
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski 
32*b1cdbd2cSJim Jagielski 
33*b1cdbd2cSJim Jagielski 
34*b1cdbd2cSJim Jagielski #ifndef _EDIT_HXX //autogen
35*b1cdbd2cSJim Jagielski #include <vcl/edit.hxx>
36*b1cdbd2cSJim Jagielski #endif
37*b1cdbd2cSJim Jagielski #ifndef _MSGBOX_HXX //autogen
38*b1cdbd2cSJim Jagielski #include <vcl/msgbox.hxx>
39*b1cdbd2cSJim Jagielski #endif
40*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
41*b1cdbd2cSJim Jagielski #include <svl/zforlist.hxx>
42*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XMultiServiceFactory.hpp>
43*b1cdbd2cSJim Jagielski #include <com/sun/star/i18n/XBreakIterator.hpp>
44*b1cdbd2cSJim Jagielski #include <comphelper/processfactory.hxx>
45*b1cdbd2cSJim Jagielski #include <svtools/scriptedtext.hxx>
46*b1cdbd2cSJim Jagielski #include <svtools/accessibilityoptions.hxx>
47*b1cdbd2cSJim Jagielski #include <svx/framelinkarray.hxx>
48*b1cdbd2cSJim Jagielski #include "swmodule.hxx"
49*b1cdbd2cSJim Jagielski #include "swtypes.hxx"
50*b1cdbd2cSJim Jagielski #ifndef _VIEW_HXX
51*b1cdbd2cSJim Jagielski #include "view.hxx"
52*b1cdbd2cSJim Jagielski #endif
53*b1cdbd2cSJim Jagielski #include "wrtsh.hxx"
54*b1cdbd2cSJim Jagielski #include "tblafmt.hxx"
55*b1cdbd2cSJim Jagielski #ifndef _TAUTOFMT_HXX
56*b1cdbd2cSJim Jagielski #include "tautofmt.hxx"
57*b1cdbd2cSJim Jagielski #endif
58*b1cdbd2cSJim Jagielski #include "shellres.hxx"
59*b1cdbd2cSJim Jagielski #ifndef _TAUTOFMT_HRC
60*b1cdbd2cSJim Jagielski #include "tautofmt.hrc"
61*b1cdbd2cSJim Jagielski #endif
62*b1cdbd2cSJim Jagielski 
63*b1cdbd2cSJim Jagielski using namespace com::sun::star;
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski #define FRAME_OFFSET 4
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski //========================================================================
68*b1cdbd2cSJim Jagielski 
69*b1cdbd2cSJim Jagielski class AutoFmtPreview : public Window
70*b1cdbd2cSJim Jagielski {
71*b1cdbd2cSJim Jagielski public:
72*b1cdbd2cSJim Jagielski             AutoFmtPreview( Window* pParent, const ResId& rRes, SwWrtShell* pWrtShell );
73*b1cdbd2cSJim Jagielski 			~AutoFmtPreview();
74*b1cdbd2cSJim Jagielski 
75*b1cdbd2cSJim Jagielski 	void NotifyChange( const SwTableAutoFmt& rNewData );
76*b1cdbd2cSJim Jagielski 
77*b1cdbd2cSJim Jagielski protected:
78*b1cdbd2cSJim Jagielski 	virtual void Paint( const Rectangle& rRect );
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski private:
81*b1cdbd2cSJim Jagielski     SwTableAutoFmt          aCurData;
82*b1cdbd2cSJim Jagielski     VirtualDevice           aVD;
83*b1cdbd2cSJim Jagielski     SvtScriptedTextHelper   aScriptedText;
84*b1cdbd2cSJim Jagielski     svx::frame::Array       maArray;            /// Implementation to draw the frame borders.
85*b1cdbd2cSJim Jagielski     sal_Bool                    bFitWidth;
86*b1cdbd2cSJim Jagielski     bool                    mbRTL;
87*b1cdbd2cSJim Jagielski     Size                    aPrvSize;
88*b1cdbd2cSJim Jagielski     long                    nLabelColWidth;
89*b1cdbd2cSJim Jagielski     long                    nDataColWidth1;
90*b1cdbd2cSJim Jagielski     long                    nDataColWidth2;
91*b1cdbd2cSJim Jagielski     long                    nRowHeight;
92*b1cdbd2cSJim Jagielski     const String            aStrJan;
93*b1cdbd2cSJim Jagielski     const String            aStrFeb;
94*b1cdbd2cSJim Jagielski     const String            aStrMar;
95*b1cdbd2cSJim Jagielski     const String            aStrNorth;
96*b1cdbd2cSJim Jagielski     const String            aStrMid;
97*b1cdbd2cSJim Jagielski     const String            aStrSouth;
98*b1cdbd2cSJim Jagielski     const String            aStrSum;
99*b1cdbd2cSJim Jagielski     SvNumberFormatter*      pNumFmt;
100*b1cdbd2cSJim Jagielski 
101*b1cdbd2cSJim Jagielski     uno::Reference< lang::XMultiServiceFactory > m_xMSF;
102*b1cdbd2cSJim Jagielski     uno::Reference< i18n::XBreakIterator >       m_xBreak;
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski 	//-------------------------------------------
105*b1cdbd2cSJim Jagielski 	void	Init			();
106*b1cdbd2cSJim Jagielski 	void	DoPaint			( const Rectangle& rRect );
107*b1cdbd2cSJim Jagielski 	void	CalcCellArray	( sal_Bool bFitWidth );
108*b1cdbd2cSJim Jagielski 	void	CalcLineMap		();
109*b1cdbd2cSJim Jagielski 	void	PaintCells		();
110*b1cdbd2cSJim Jagielski 
111*b1cdbd2cSJim Jagielski     sal_uInt8                GetFormatIndex( size_t nCol, size_t nRow ) const;
112*b1cdbd2cSJim Jagielski     const SvxBoxItem&   GetBoxItem( size_t nCol, size_t nRow ) const;
113*b1cdbd2cSJim Jagielski 
114*b1cdbd2cSJim Jagielski     void                DrawString( size_t nCol, size_t nRow );
115*b1cdbd2cSJim Jagielski     void                DrawStrings();
116*b1cdbd2cSJim Jagielski     void                DrawBackground();
117*b1cdbd2cSJim Jagielski 
118*b1cdbd2cSJim Jagielski     void    MakeFonts       ( sal_uInt8 nIndex, Font& rFont, Font& rCJKFont, Font& rCTLFont );
119*b1cdbd2cSJim Jagielski 	String	MakeNumberString( String cellString, sal_Bool bAddDec );
120*b1cdbd2cSJim Jagielski };
121*b1cdbd2cSJim Jagielski 
122*b1cdbd2cSJim Jagielski //========================================================================
123*b1cdbd2cSJim Jagielski 
124*b1cdbd2cSJim Jagielski class SwStringInputDlg : public ModalDialog
125*b1cdbd2cSJim Jagielski {
126*b1cdbd2cSJim Jagielski public:
127*b1cdbd2cSJim Jagielski 			SwStringInputDlg( 	  Window* pParent,
128*b1cdbd2cSJim Jagielski 							const String& rTitle,
129*b1cdbd2cSJim Jagielski 							const String& rEditTitle,
130*b1cdbd2cSJim Jagielski 							const String& rDefault );
131*b1cdbd2cSJim Jagielski 			~SwStringInputDlg();
132*b1cdbd2cSJim Jagielski 
133*b1cdbd2cSJim Jagielski 	void GetInputString( String& rString ) const;
134*b1cdbd2cSJim Jagielski 
135*b1cdbd2cSJim Jagielski private:
136*b1cdbd2cSJim Jagielski 	Edit			aEdInput;	// Edit erhaelt so den Focus
137*b1cdbd2cSJim Jagielski 	FixedText		aFtEditTitle;
138*b1cdbd2cSJim Jagielski 	OKButton		aBtnOk;
139*b1cdbd2cSJim Jagielski 	CancelButton	aBtnCancel;
140*b1cdbd2cSJim Jagielski };
141*b1cdbd2cSJim Jagielski 
142*b1cdbd2cSJim Jagielski 
SwStringInputDlg(Window * pParent,const String & rTitle,const String & rEditTitle,const String & rDefault)143*b1cdbd2cSJim Jagielski SwStringInputDlg::SwStringInputDlg( Window* 		pParent,
144*b1cdbd2cSJim Jagielski 									const String&	rTitle,
145*b1cdbd2cSJim Jagielski 									const String&	rEditTitle,
146*b1cdbd2cSJim Jagielski 									const String&	rDefault	) :
147*b1cdbd2cSJim Jagielski 	ModalDialog 	( pParent, SW_RES( DLG_SWDLG_STRINPUT ) ),
148*b1cdbd2cSJim Jagielski 	//
149*b1cdbd2cSJim Jagielski 	aEdInput		( this, SW_RES( ED_INPUT ) ),
150*b1cdbd2cSJim Jagielski     aFtEditTitle    ( this, SW_RES( FT_LABEL ) ),
151*b1cdbd2cSJim Jagielski 	aBtnOk			( this, SW_RES( BTN_OK ) ),
152*b1cdbd2cSJim Jagielski     aBtnCancel      ( this, SW_RES( BTN_CANCEL ) )
153*b1cdbd2cSJim Jagielski {
154*b1cdbd2cSJim Jagielski 	SetText( rTitle );
155*b1cdbd2cSJim Jagielski 	aFtEditTitle.SetText( rEditTitle );
156*b1cdbd2cSJim Jagielski 	aEdInput.SetText( rDefault );
157*b1cdbd2cSJim Jagielski 	//-------------
158*b1cdbd2cSJim Jagielski 	FreeResource();
159*b1cdbd2cSJim Jagielski }
160*b1cdbd2cSJim Jagielski 
161*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
162*b1cdbd2cSJim Jagielski 
GetInputString(String & rString) const163*b1cdbd2cSJim Jagielski void SwStringInputDlg::GetInputString( String& rString ) const
164*b1cdbd2cSJim Jagielski {
165*b1cdbd2cSJim Jagielski 	rString = aEdInput.GetText();
166*b1cdbd2cSJim Jagielski }
167*b1cdbd2cSJim Jagielski 
168*b1cdbd2cSJim Jagielski 
~SwStringInputDlg()169*b1cdbd2cSJim Jagielski __EXPORT SwStringInputDlg::~SwStringInputDlg()
170*b1cdbd2cSJim Jagielski {
171*b1cdbd2cSJim Jagielski }
172*b1cdbd2cSJim Jagielski 
173*b1cdbd2cSJim Jagielski //========================================================================
174*b1cdbd2cSJim Jagielski // AutoFormat-Dialog:
175*b1cdbd2cSJim Jagielski 
176*b1cdbd2cSJim Jagielski 
SwAutoFormatDlg(Window * pParent,SwWrtShell * pWrtShell,sal_Bool bSetAutoFormat,const SwTableAutoFmt * pSelFmt)177*b1cdbd2cSJim Jagielski SwAutoFormatDlg::SwAutoFormatDlg( Window* pParent, SwWrtShell* pWrtShell,
178*b1cdbd2cSJim Jagielski 					sal_Bool bSetAutoFormat, const SwTableAutoFmt* pSelFmt )
179*b1cdbd2cSJim Jagielski 	: SfxModalDialog( pParent, SW_RES( DLG_AUTOFMT_TABLE ) ),
180*b1cdbd2cSJim Jagielski 	//
181*b1cdbd2cSJim Jagielski     aFlFormat       ( this, SW_RES( FL_FORMAT ) ),
182*b1cdbd2cSJim Jagielski 	aLbFormat		( this, SW_RES( LB_FORMAT ) ),
183*b1cdbd2cSJim Jagielski     aFlFormats       ( this, SW_RES( FL_FORMATS ) ),
184*b1cdbd2cSJim Jagielski 
185*b1cdbd2cSJim Jagielski 	aBtnNumFormat	( this, SW_RES( BTN_NUMFORMAT ) ),
186*b1cdbd2cSJim Jagielski 	aBtnBorder		( this, SW_RES( BTN_BORDER ) ),
187*b1cdbd2cSJim Jagielski 	aBtnFont		( this, SW_RES( BTN_FONT ) ),
188*b1cdbd2cSJim Jagielski 	aBtnPattern 	( this, SW_RES( BTN_PATTERN ) ),
189*b1cdbd2cSJim Jagielski 	aBtnAlignment	( this, SW_RES( BTN_ALIGNMENT ) ),
190*b1cdbd2cSJim Jagielski 	aBtnOk			( this, SW_RES( BTN_OK ) ),
191*b1cdbd2cSJim Jagielski 	aBtnCancel		( this, SW_RES( BTN_CANCEL ) ),
192*b1cdbd2cSJim Jagielski 	aBtnHelp		( this, SW_RES( BTN_HELP ) ),
193*b1cdbd2cSJim Jagielski 	aBtnAdd 		( this, SW_RES( BTN_ADD ) ),
194*b1cdbd2cSJim Jagielski 	aBtnRemove		( this, SW_RES( BTN_REMOVE ) ),
195*b1cdbd2cSJim Jagielski     aBtnRename      ( this, SW_RES( BTN_RENAME ) ),
196*b1cdbd2cSJim Jagielski     aBtnMore        ( this, SW_RES( BTN_MORE ) ),
197*b1cdbd2cSJim Jagielski 	aStrTitle		( SW_RES( STR_ADD_TITLE ) ),
198*b1cdbd2cSJim Jagielski 	aStrLabel		( SW_RES( STR_ADD_LABEL ) ),
199*b1cdbd2cSJim Jagielski 	aStrClose		( SW_RES( STR_BTN_CLOSE ) ),
200*b1cdbd2cSJim Jagielski 	aStrDelTitle	( SW_RES( STR_DEL_TITLE ) ),
201*b1cdbd2cSJim Jagielski 	aStrDelMsg		( SW_RES( STR_DEL_MSG ) ),
202*b1cdbd2cSJim Jagielski 	aStrRenameTitle	( SW_RES( STR_RENAME_TITLE ) ),
203*b1cdbd2cSJim Jagielski 	aStrInvalidFmt	( SW_RES( STR_INVALID_AFNAME )),
204*b1cdbd2cSJim Jagielski     pWndPreview     ( new AutoFmtPreview( this, SW_RES( WND_PREVIEW ), pWrtShell )),
205*b1cdbd2cSJim Jagielski 	//
206*b1cdbd2cSJim Jagielski     pShell          ( pWrtShell ),
207*b1cdbd2cSJim Jagielski 	nIndex			( 0 ),
208*b1cdbd2cSJim Jagielski 	nDfltStylePos	( 0 ),
209*b1cdbd2cSJim Jagielski 	bCoreDataChanged( sal_False ),
210*b1cdbd2cSJim Jagielski     bSetAutoFmt     ( bSetAutoFormat )
211*b1cdbd2cSJim Jagielski {
212*b1cdbd2cSJim Jagielski 	pTableTbl = new SwTableAutoFmtTbl;
213*b1cdbd2cSJim Jagielski 	pTableTbl->Load();
214*b1cdbd2cSJim Jagielski 
215*b1cdbd2cSJim Jagielski 	Init( pSelFmt );
216*b1cdbd2cSJim Jagielski 	//------------- >
217*b1cdbd2cSJim Jagielski 	FreeResource();
218*b1cdbd2cSJim Jagielski }
219*b1cdbd2cSJim Jagielski 
220*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
221*b1cdbd2cSJim Jagielski 
222*b1cdbd2cSJim Jagielski 
~SwAutoFormatDlg()223*b1cdbd2cSJim Jagielski __EXPORT SwAutoFormatDlg::~SwAutoFormatDlg()
224*b1cdbd2cSJim Jagielski {
225*b1cdbd2cSJim Jagielski 	delete pWndPreview;
226*b1cdbd2cSJim Jagielski 
227*b1cdbd2cSJim Jagielski 	if( bCoreDataChanged )
228*b1cdbd2cSJim Jagielski 		pTableTbl->Save();
229*b1cdbd2cSJim Jagielski 	delete pTableTbl;
230*b1cdbd2cSJim Jagielski }
231*b1cdbd2cSJim Jagielski 
232*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
233*b1cdbd2cSJim Jagielski 
234*b1cdbd2cSJim Jagielski 
Init(const SwTableAutoFmt * pSelFmt)235*b1cdbd2cSJim Jagielski void SwAutoFormatDlg::Init( const SwTableAutoFmt* pSelFmt )
236*b1cdbd2cSJim Jagielski {
237*b1cdbd2cSJim Jagielski 	Link aLk( LINK( this, SwAutoFormatDlg, CheckHdl ) );
238*b1cdbd2cSJim Jagielski 	aBtnBorder.SetClickHdl( aLk );
239*b1cdbd2cSJim Jagielski 	aBtnFont.SetClickHdl( aLk );
240*b1cdbd2cSJim Jagielski 	aBtnPattern.SetClickHdl( aLk );
241*b1cdbd2cSJim Jagielski 	aBtnAlignment.SetClickHdl( aLk );
242*b1cdbd2cSJim Jagielski 	aBtnNumFormat.SetClickHdl( aLk );
243*b1cdbd2cSJim Jagielski 
244*b1cdbd2cSJim Jagielski 	aBtnAdd.SetClickHdl ( LINK( this, SwAutoFormatDlg, AddHdl ) );
245*b1cdbd2cSJim Jagielski 	aBtnRemove.SetClickHdl ( LINK( this, SwAutoFormatDlg, RemoveHdl ) );
246*b1cdbd2cSJim Jagielski 	aBtnRename.SetClickHdl ( LINK( this, SwAutoFormatDlg, RenameHdl ) );
247*b1cdbd2cSJim Jagielski 	aBtnOk.SetClickHdl ( LINK( this, SwAutoFormatDlg, OkHdl ) );
248*b1cdbd2cSJim Jagielski 	aLbFormat.SetSelectHdl( LINK( this, SwAutoFormatDlg, SelFmtHdl ) );
249*b1cdbd2cSJim Jagielski 
250*b1cdbd2cSJim Jagielski 	aBtnMore.AddWindow( &aBtnNumFormat );
251*b1cdbd2cSJim Jagielski 	aBtnMore.AddWindow( &aBtnBorder );
252*b1cdbd2cSJim Jagielski 	aBtnMore.AddWindow( &aBtnFont );
253*b1cdbd2cSJim Jagielski 	aBtnMore.AddWindow( &aBtnPattern );
254*b1cdbd2cSJim Jagielski 	aBtnMore.AddWindow( &aBtnAlignment );
255*b1cdbd2cSJim Jagielski     aBtnMore.AddWindow( &aFlFormats );
256*b1cdbd2cSJim Jagielski 	aBtnMore.AddWindow( &aBtnRename );
257*b1cdbd2cSJim Jagielski 
258*b1cdbd2cSJim Jagielski 	aBtnAdd.Enable( bSetAutoFmt );
259*b1cdbd2cSJim Jagielski 
260*b1cdbd2cSJim Jagielski 	nIndex = 0;
261*b1cdbd2cSJim Jagielski 	if( !bSetAutoFmt )
262*b1cdbd2cSJim Jagielski 	{
263*b1cdbd2cSJim Jagielski 		// dann muss die Liste um den Eintrag <Keins> erweitert werden.
264*b1cdbd2cSJim Jagielski 		aLbFormat.InsertEntry( ViewShell::GetShellRes()->aStrNone );
265*b1cdbd2cSJim Jagielski 		nDfltStylePos = 1;
266*b1cdbd2cSJim Jagielski 		nIndex = 255;
267*b1cdbd2cSJim Jagielski 	}
268*b1cdbd2cSJim Jagielski 
269*b1cdbd2cSJim Jagielski 	for( sal_uInt8 i = 0, nCount = (sal_uInt8)pTableTbl->Count(); i < nCount; i++ )
270*b1cdbd2cSJim Jagielski 	{
271*b1cdbd2cSJim Jagielski 		SwTableAutoFmt* pFmt = (*pTableTbl)[ i ];
272*b1cdbd2cSJim Jagielski 		aLbFormat.InsertEntry( pFmt->GetName() );
273*b1cdbd2cSJim Jagielski 		if( pSelFmt && pFmt->GetName() == pSelFmt->GetName() )
274*b1cdbd2cSJim Jagielski 			nIndex = i;
275*b1cdbd2cSJim Jagielski 	}
276*b1cdbd2cSJim Jagielski 
277*b1cdbd2cSJim Jagielski 	aLbFormat.SelectEntryPos( 255 != nIndex ? (nDfltStylePos + nIndex) : 0 );
278*b1cdbd2cSJim Jagielski 	SelFmtHdl( 0 );
279*b1cdbd2cSJim Jagielski }
280*b1cdbd2cSJim Jagielski 
281*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
282*b1cdbd2cSJim Jagielski 
283*b1cdbd2cSJim Jagielski 
UpdateChecks(const SwTableAutoFmt & rFmt,sal_Bool bEnable)284*b1cdbd2cSJim Jagielski void SwAutoFormatDlg::UpdateChecks( const SwTableAutoFmt& rFmt, sal_Bool bEnable )
285*b1cdbd2cSJim Jagielski {
286*b1cdbd2cSJim Jagielski 	aBtnNumFormat.Enable( bEnable );
287*b1cdbd2cSJim Jagielski 	aBtnNumFormat.Check( rFmt.IsValueFormat() );
288*b1cdbd2cSJim Jagielski 
289*b1cdbd2cSJim Jagielski 	aBtnBorder.Enable( bEnable );
290*b1cdbd2cSJim Jagielski 	aBtnBorder.Check( rFmt.IsFrame() );
291*b1cdbd2cSJim Jagielski 
292*b1cdbd2cSJim Jagielski 	aBtnFont.Enable( bEnable );
293*b1cdbd2cSJim Jagielski 	aBtnFont.Check( rFmt.IsFont() );
294*b1cdbd2cSJim Jagielski 
295*b1cdbd2cSJim Jagielski 	aBtnPattern.Enable( bEnable );
296*b1cdbd2cSJim Jagielski 	aBtnPattern.Check( rFmt.IsBackground() );
297*b1cdbd2cSJim Jagielski 
298*b1cdbd2cSJim Jagielski 	aBtnAlignment.Enable( bEnable );
299*b1cdbd2cSJim Jagielski 	aBtnAlignment.Check( rFmt.IsJustify() );
300*b1cdbd2cSJim Jagielski }
301*b1cdbd2cSJim Jagielski 
FillAutoFmtOfIndex(SwTableAutoFmt * & rToFill) const302*b1cdbd2cSJim Jagielski void SwAutoFormatDlg::FillAutoFmtOfIndex( SwTableAutoFmt*& rToFill ) const
303*b1cdbd2cSJim Jagielski {
304*b1cdbd2cSJim Jagielski 	if( 255 != nIndex )
305*b1cdbd2cSJim Jagielski 	{
306*b1cdbd2cSJim Jagielski 		if( rToFill )
307*b1cdbd2cSJim Jagielski 			*rToFill = *(*pTableTbl)[ nIndex ];
308*b1cdbd2cSJim Jagielski 		else
309*b1cdbd2cSJim Jagielski 			rToFill = new SwTableAutoFmt( *(*pTableTbl)[ nIndex ] );
310*b1cdbd2cSJim Jagielski 	}
311*b1cdbd2cSJim Jagielski 	else if( rToFill )
312*b1cdbd2cSJim Jagielski 		delete rToFill, rToFill = 0;
313*b1cdbd2cSJim Jagielski }
314*b1cdbd2cSJim Jagielski 
315*b1cdbd2cSJim Jagielski 
316*b1cdbd2cSJim Jagielski /*------------------------------------------------------------------------
317*b1cdbd2cSJim Jagielski   Handler:
318*b1cdbd2cSJim Jagielski   ---------*/
319*b1cdbd2cSJim Jagielski 
320*b1cdbd2cSJim Jagielski 
IMPL_LINK(SwAutoFormatDlg,CheckHdl,Button *,pBtn)321*b1cdbd2cSJim Jagielski IMPL_LINK( SwAutoFormatDlg, CheckHdl, Button *, pBtn )
322*b1cdbd2cSJim Jagielski {
323*b1cdbd2cSJim Jagielski 	SwTableAutoFmtPtr pData  = (*pTableTbl)[nIndex];
324*b1cdbd2cSJim Jagielski 	sal_Bool bCheck = ((CheckBox*)pBtn)->IsChecked(), bDataChgd = sal_True;
325*b1cdbd2cSJim Jagielski 
326*b1cdbd2cSJim Jagielski 	if( pBtn == &aBtnNumFormat )
327*b1cdbd2cSJim Jagielski 		pData->SetValueFormat( bCheck );
328*b1cdbd2cSJim Jagielski 	else if ( pBtn == &aBtnBorder )
329*b1cdbd2cSJim Jagielski 		pData->SetFrame( bCheck );
330*b1cdbd2cSJim Jagielski 	else if ( pBtn == &aBtnFont )
331*b1cdbd2cSJim Jagielski 		pData->SetFont( bCheck );
332*b1cdbd2cSJim Jagielski 	else if ( pBtn == &aBtnPattern )
333*b1cdbd2cSJim Jagielski 		pData->SetBackground( bCheck );
334*b1cdbd2cSJim Jagielski 	else if ( pBtn == &aBtnAlignment )
335*b1cdbd2cSJim Jagielski 		pData->SetJustify( bCheck );
336*b1cdbd2cSJim Jagielski //	  else if ( pBtn == &aBtnAdjust )
337*b1cdbd2cSJim Jagielski //		  pData->SetIncludeWidthHeight( bCheck );
338*b1cdbd2cSJim Jagielski 	else
339*b1cdbd2cSJim Jagielski 		bDataChgd = sal_False;
340*b1cdbd2cSJim Jagielski 
341*b1cdbd2cSJim Jagielski 	if( bDataChgd )
342*b1cdbd2cSJim Jagielski 	{
343*b1cdbd2cSJim Jagielski 		if( !bCoreDataChanged )
344*b1cdbd2cSJim Jagielski 		{
345*b1cdbd2cSJim Jagielski 			aBtnCancel.SetText( aStrClose );
346*b1cdbd2cSJim Jagielski 			bCoreDataChanged = sal_True;
347*b1cdbd2cSJim Jagielski 		}
348*b1cdbd2cSJim Jagielski 
349*b1cdbd2cSJim Jagielski 		pWndPreview->NotifyChange( *pData );
350*b1cdbd2cSJim Jagielski 	}
351*b1cdbd2cSJim Jagielski 	return 0;
352*b1cdbd2cSJim Jagielski }
353*b1cdbd2cSJim Jagielski 
354*b1cdbd2cSJim Jagielski /*------------------------------------------------------------------------*/
355*b1cdbd2cSJim Jagielski 
356*b1cdbd2cSJim Jagielski 
IMPL_LINK(SwAutoFormatDlg,AddHdl,void *,EMPTYARG)357*b1cdbd2cSJim Jagielski IMPL_LINK( SwAutoFormatDlg, AddHdl, void *, EMPTYARG )
358*b1cdbd2cSJim Jagielski {
359*b1cdbd2cSJim Jagielski 	sal_Bool bOk = sal_False, bFmtInserted = sal_False;
360*b1cdbd2cSJim Jagielski 	while( !bOk )
361*b1cdbd2cSJim Jagielski 	{
362*b1cdbd2cSJim Jagielski 		SwStringInputDlg*	pDlg = new SwStringInputDlg( this,
363*b1cdbd2cSJim Jagielski 															aStrTitle,
364*b1cdbd2cSJim Jagielski 															aStrLabel,
365*b1cdbd2cSJim Jagielski 															aEmptyStr );
366*b1cdbd2cSJim Jagielski 		if( RET_OK == pDlg->Execute() )
367*b1cdbd2cSJim Jagielski 		{
368*b1cdbd2cSJim Jagielski 			String aFormatName;
369*b1cdbd2cSJim Jagielski 			pDlg->GetInputString( aFormatName );
370*b1cdbd2cSJim Jagielski 
371*b1cdbd2cSJim Jagielski 			if( aFormatName.Len() > 0 )
372*b1cdbd2cSJim Jagielski 			{
373*b1cdbd2cSJim Jagielski 				sal_uInt16 n;
374*b1cdbd2cSJim Jagielski 				for( n = 0; n < pTableTbl->Count(); ++n )
375*b1cdbd2cSJim Jagielski 					if( (*pTableTbl)[n]->GetName() == aFormatName )
376*b1cdbd2cSJim Jagielski 						break;
377*b1cdbd2cSJim Jagielski 
378*b1cdbd2cSJim Jagielski 				if( n >= pTableTbl->Count() )
379*b1cdbd2cSJim Jagielski 				{
380*b1cdbd2cSJim Jagielski 					// Format mit dem Namen noch nicht vorhanden, also
381*b1cdbd2cSJim Jagielski 					// aufnehmen
382*b1cdbd2cSJim Jagielski 					SwTableAutoFmtPtr pNewData = new
383*b1cdbd2cSJim Jagielski 										SwTableAutoFmt( aFormatName );
384*b1cdbd2cSJim Jagielski 					pShell->GetTableAutoFmt( *pNewData );
385*b1cdbd2cSJim Jagielski 
386*b1cdbd2cSJim Jagielski 					// Sortiert einfuegen!!
387*b1cdbd2cSJim Jagielski 					for( n = 1; n < pTableTbl->Count(); ++n )
388*b1cdbd2cSJim Jagielski 						if( (*pTableTbl)[ n ]->GetName() > aFormatName )
389*b1cdbd2cSJim Jagielski 							break;
390*b1cdbd2cSJim Jagielski 
391*b1cdbd2cSJim Jagielski 					pTableTbl->Insert( pNewData, n );
392*b1cdbd2cSJim Jagielski 					aLbFormat.InsertEntry( aFormatName, nDfltStylePos + n );
393*b1cdbd2cSJim Jagielski 					aLbFormat.SelectEntryPos( nDfltStylePos + n );
394*b1cdbd2cSJim Jagielski 					bFmtInserted = sal_True;
395*b1cdbd2cSJim Jagielski 					aBtnAdd.Enable( sal_False );
396*b1cdbd2cSJim Jagielski 					if ( !bCoreDataChanged )
397*b1cdbd2cSJim Jagielski 					{
398*b1cdbd2cSJim Jagielski 						aBtnCancel.SetText( aStrClose );
399*b1cdbd2cSJim Jagielski 						bCoreDataChanged = sal_True;
400*b1cdbd2cSJim Jagielski 					}
401*b1cdbd2cSJim Jagielski 
402*b1cdbd2cSJim Jagielski 					SelFmtHdl( 0 );
403*b1cdbd2cSJim Jagielski 					bOk = sal_True;
404*b1cdbd2cSJim Jagielski 				}
405*b1cdbd2cSJim Jagielski 			}
406*b1cdbd2cSJim Jagielski 
407*b1cdbd2cSJim Jagielski 			if( !bFmtInserted )
408*b1cdbd2cSJim Jagielski 			{
409*b1cdbd2cSJim Jagielski 				bOk = RET_CANCEL == ErrorBox( this,
410*b1cdbd2cSJim Jagielski 									WinBits( WB_OK_CANCEL | WB_DEF_OK),
411*b1cdbd2cSJim Jagielski 									aStrInvalidFmt
412*b1cdbd2cSJim Jagielski 									).Execute();
413*b1cdbd2cSJim Jagielski 			}
414*b1cdbd2cSJim Jagielski 		}
415*b1cdbd2cSJim Jagielski 		else
416*b1cdbd2cSJim Jagielski 			bOk = sal_True;
417*b1cdbd2cSJim Jagielski 		delete pDlg;
418*b1cdbd2cSJim Jagielski 	}
419*b1cdbd2cSJim Jagielski 	return 0;
420*b1cdbd2cSJim Jagielski }
421*b1cdbd2cSJim Jagielski 
422*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
423*b1cdbd2cSJim Jagielski 
IMPL_LINK(SwAutoFormatDlg,RemoveHdl,void *,EMPTYARG)424*b1cdbd2cSJim Jagielski IMPL_LINK( SwAutoFormatDlg, RemoveHdl, void *, EMPTYARG )
425*b1cdbd2cSJim Jagielski {
426*b1cdbd2cSJim Jagielski 	String aMessage	= aStrDelMsg ;
427*b1cdbd2cSJim Jagielski 	aMessage.AppendAscii("\n\n");
428*b1cdbd2cSJim Jagielski 	aMessage += aLbFormat.GetSelectEntry() ;
429*b1cdbd2cSJim Jagielski 	aMessage += '\n';
430*b1cdbd2cSJim Jagielski 
431*b1cdbd2cSJim Jagielski 	MessBox* pBox = new MessBox( this, WinBits( WB_OK_CANCEL ),
432*b1cdbd2cSJim Jagielski 									aStrDelTitle, aMessage);
433*b1cdbd2cSJim Jagielski 
434*b1cdbd2cSJim Jagielski 	if ( pBox->Execute() == RET_OK )
435*b1cdbd2cSJim Jagielski 	{
436*b1cdbd2cSJim Jagielski 		aLbFormat.RemoveEntry( nDfltStylePos + nIndex );
437*b1cdbd2cSJim Jagielski 		aLbFormat.SelectEntryPos( nDfltStylePos + nIndex-1 );
438*b1cdbd2cSJim Jagielski 
439*b1cdbd2cSJim Jagielski 		pTableTbl->DeleteAndDestroy( nIndex );
440*b1cdbd2cSJim Jagielski 		nIndex--;
441*b1cdbd2cSJim Jagielski 
442*b1cdbd2cSJim Jagielski 		if( !nIndex )
443*b1cdbd2cSJim Jagielski 		{
444*b1cdbd2cSJim Jagielski 			aBtnRemove.Enable(sal_False);
445*b1cdbd2cSJim Jagielski 			aBtnRename.Enable(sal_False);
446*b1cdbd2cSJim Jagielski 		}
447*b1cdbd2cSJim Jagielski 
448*b1cdbd2cSJim Jagielski 		if( !bCoreDataChanged )
449*b1cdbd2cSJim Jagielski 		{
450*b1cdbd2cSJim Jagielski 			aBtnCancel.SetText( aStrClose );
451*b1cdbd2cSJim Jagielski 			bCoreDataChanged = sal_True;
452*b1cdbd2cSJim Jagielski 		}
453*b1cdbd2cSJim Jagielski 	}
454*b1cdbd2cSJim Jagielski 	delete pBox;
455*b1cdbd2cSJim Jagielski 
456*b1cdbd2cSJim Jagielski 	SelFmtHdl( 0 );
457*b1cdbd2cSJim Jagielski 
458*b1cdbd2cSJim Jagielski 	return 0;
459*b1cdbd2cSJim Jagielski }
460*b1cdbd2cSJim Jagielski 
IMPL_LINK(SwAutoFormatDlg,RenameHdl,void *,EMPTYARG)461*b1cdbd2cSJim Jagielski IMPL_LINK( SwAutoFormatDlg, RenameHdl, void *, EMPTYARG )
462*b1cdbd2cSJim Jagielski {
463*b1cdbd2cSJim Jagielski 	sal_Bool bOk = sal_False;
464*b1cdbd2cSJim Jagielski 	while( !bOk )
465*b1cdbd2cSJim Jagielski 	{
466*b1cdbd2cSJim Jagielski 		SwStringInputDlg* pDlg = new SwStringInputDlg( this,
467*b1cdbd2cSJim Jagielski 						aStrRenameTitle, aLbFormat.GetSelectEntry(),
468*b1cdbd2cSJim Jagielski 														aEmptyStr );
469*b1cdbd2cSJim Jagielski 		if( pDlg->Execute() == RET_OK )
470*b1cdbd2cSJim Jagielski 		{
471*b1cdbd2cSJim Jagielski 			sal_Bool bFmtRenamed = sal_False;
472*b1cdbd2cSJim Jagielski 			String aFormatName;
473*b1cdbd2cSJim Jagielski 			pDlg->GetInputString( aFormatName );
474*b1cdbd2cSJim Jagielski 
475*b1cdbd2cSJim Jagielski 			if ( aFormatName.Len() > 0 )
476*b1cdbd2cSJim Jagielski 			{
477*b1cdbd2cSJim Jagielski 				sal_uInt16 n;
478*b1cdbd2cSJim Jagielski 				for( n = 0; n < pTableTbl->Count(); ++n )
479*b1cdbd2cSJim Jagielski 					if ((*pTableTbl)[n]->GetName() == aFormatName)
480*b1cdbd2cSJim Jagielski 						break;
481*b1cdbd2cSJim Jagielski 
482*b1cdbd2cSJim Jagielski 				if( n >= pTableTbl->Count() )
483*b1cdbd2cSJim Jagielski 				{
484*b1cdbd2cSJim Jagielski 					// Format mit dem Namen noch nicht vorhanden, also
485*b1cdbd2cSJim Jagielski 					// umbenennen
486*b1cdbd2cSJim Jagielski 
487*b1cdbd2cSJim Jagielski 					aLbFormat.RemoveEntry( nDfltStylePos + nIndex );
488*b1cdbd2cSJim Jagielski 					SwTableAutoFmtPtr p = (*pTableTbl)[ nIndex ];
489*b1cdbd2cSJim Jagielski 					pTableTbl->Remove( nIndex );
490*b1cdbd2cSJim Jagielski 
491*b1cdbd2cSJim Jagielski 					p->SetName( aFormatName );
492*b1cdbd2cSJim Jagielski 
493*b1cdbd2cSJim Jagielski 					// Sortiert einfuegen!!
494*b1cdbd2cSJim Jagielski 					for( n = 1; n < pTableTbl->Count(); ++n )
495*b1cdbd2cSJim Jagielski 						if( (*pTableTbl)[ n ]->GetName() > aFormatName )
496*b1cdbd2cSJim Jagielski 							break;
497*b1cdbd2cSJim Jagielski 
498*b1cdbd2cSJim Jagielski 					pTableTbl->Insert( p, n );
499*b1cdbd2cSJim Jagielski 					aLbFormat.InsertEntry( aFormatName, nDfltStylePos + n );
500*b1cdbd2cSJim Jagielski 					aLbFormat.SelectEntryPos( nDfltStylePos + n );
501*b1cdbd2cSJim Jagielski 
502*b1cdbd2cSJim Jagielski 					if ( !bCoreDataChanged )
503*b1cdbd2cSJim Jagielski 					{
504*b1cdbd2cSJim Jagielski 						aBtnCancel.SetText( aStrClose );
505*b1cdbd2cSJim Jagielski 						bCoreDataChanged = sal_True;
506*b1cdbd2cSJim Jagielski 					}
507*b1cdbd2cSJim Jagielski 
508*b1cdbd2cSJim Jagielski 					SelFmtHdl( 0 );
509*b1cdbd2cSJim Jagielski 					bOk = sal_True;
510*b1cdbd2cSJim Jagielski 					bFmtRenamed = sal_True;
511*b1cdbd2cSJim Jagielski 				}
512*b1cdbd2cSJim Jagielski 			}
513*b1cdbd2cSJim Jagielski 
514*b1cdbd2cSJim Jagielski 			if( !bFmtRenamed )
515*b1cdbd2cSJim Jagielski 			{
516*b1cdbd2cSJim Jagielski 				bOk = RET_CANCEL == ErrorBox( this,
517*b1cdbd2cSJim Jagielski 									WinBits( WB_OK_CANCEL | WB_DEF_OK),
518*b1cdbd2cSJim Jagielski 									aStrInvalidFmt
519*b1cdbd2cSJim Jagielski 									).Execute();
520*b1cdbd2cSJim Jagielski 			}
521*b1cdbd2cSJim Jagielski 		}
522*b1cdbd2cSJim Jagielski 		else
523*b1cdbd2cSJim Jagielski 			bOk = sal_True;
524*b1cdbd2cSJim Jagielski 		delete pDlg;
525*b1cdbd2cSJim Jagielski 	}
526*b1cdbd2cSJim Jagielski 	return 0;
527*b1cdbd2cSJim Jagielski }
528*b1cdbd2cSJim Jagielski 
529*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
530*b1cdbd2cSJim Jagielski 
IMPL_LINK(SwAutoFormatDlg,SelFmtHdl,void *,EMPTYARG)531*b1cdbd2cSJim Jagielski IMPL_LINK( SwAutoFormatDlg, SelFmtHdl, void *, EMPTYARG )
532*b1cdbd2cSJim Jagielski {
533*b1cdbd2cSJim Jagielski 	sal_Bool bBtnEnable = sal_False;
534*b1cdbd2cSJim Jagielski 	sal_uInt8 nSelPos = (sal_uInt8) aLbFormat.GetSelectEntryPos(), nOldIdx = nIndex;
535*b1cdbd2cSJim Jagielski 	if( nSelPos >= nDfltStylePos )
536*b1cdbd2cSJim Jagielski 	{
537*b1cdbd2cSJim Jagielski 		nIndex = nSelPos - nDfltStylePos;
538*b1cdbd2cSJim Jagielski 		pWndPreview->NotifyChange( *(*pTableTbl)[nIndex] );
539*b1cdbd2cSJim Jagielski 		bBtnEnable = 0 != nIndex;
540*b1cdbd2cSJim Jagielski 		UpdateChecks( *(*pTableTbl)[nIndex], sal_True );
541*b1cdbd2cSJim Jagielski 	}
542*b1cdbd2cSJim Jagielski 	else
543*b1cdbd2cSJim Jagielski 	{
544*b1cdbd2cSJim Jagielski 		nIndex = 255;
545*b1cdbd2cSJim Jagielski 
546*b1cdbd2cSJim Jagielski 		SwTableAutoFmt aTmp( ViewShell::GetShellRes()->aStrNone );
547*b1cdbd2cSJim Jagielski 		aTmp.SetFont( sal_False );
548*b1cdbd2cSJim Jagielski 		aTmp.SetJustify( sal_False );
549*b1cdbd2cSJim Jagielski 		aTmp.SetFrame( sal_False );
550*b1cdbd2cSJim Jagielski 		aTmp.SetBackground( sal_False );
551*b1cdbd2cSJim Jagielski 		aTmp.SetValueFormat( sal_False );
552*b1cdbd2cSJim Jagielski 		aTmp.SetWidthHeight( sal_False );
553*b1cdbd2cSJim Jagielski 
554*b1cdbd2cSJim Jagielski 		if( nOldIdx != nIndex )
555*b1cdbd2cSJim Jagielski 			pWndPreview->NotifyChange( aTmp );
556*b1cdbd2cSJim Jagielski 		UpdateChecks( aTmp, sal_False );
557*b1cdbd2cSJim Jagielski 	}
558*b1cdbd2cSJim Jagielski 
559*b1cdbd2cSJim Jagielski 	aBtnRemove.Enable( bBtnEnable );
560*b1cdbd2cSJim Jagielski 	aBtnRename.Enable( bBtnEnable );
561*b1cdbd2cSJim Jagielski 
562*b1cdbd2cSJim Jagielski 	return 0;
563*b1cdbd2cSJim Jagielski }
564*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
565*b1cdbd2cSJim Jagielski 
IMPL_LINK_INLINE_START(SwAutoFormatDlg,OkHdl,Button *,EMPTYARG)566*b1cdbd2cSJim Jagielski IMPL_LINK_INLINE_START( SwAutoFormatDlg, OkHdl, Button *, EMPTYARG )
567*b1cdbd2cSJim Jagielski {
568*b1cdbd2cSJim Jagielski 	if( bSetAutoFmt )
569*b1cdbd2cSJim Jagielski 		pShell->SetTableAutoFmt( *(*pTableTbl)[ nIndex ] );
570*b1cdbd2cSJim Jagielski 	EndDialog( RET_OK );
571*b1cdbd2cSJim Jagielski 	return sal_True;
572*b1cdbd2cSJim Jagielski }
IMPL_LINK_INLINE_END(SwAutoFormatDlg,OkHdl,Button *,EMPTYARG)573*b1cdbd2cSJim Jagielski IMPL_LINK_INLINE_END( SwAutoFormatDlg, OkHdl, Button *, EMPTYARG )
574*b1cdbd2cSJim Jagielski 
575*b1cdbd2cSJim Jagielski //========================================================================
576*b1cdbd2cSJim Jagielski // AutoFmtPreview
577*b1cdbd2cSJim Jagielski 
578*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
579*b1cdbd2cSJim Jagielski 
580*b1cdbd2cSJim Jagielski AutoFmtPreview::AutoFmtPreview( Window* pParent, const ResId& rRes, SwWrtShell* pWrtShell ) :
581*b1cdbd2cSJim Jagielski 		Window			( pParent, rRes ),
582*b1cdbd2cSJim Jagielski 
583*b1cdbd2cSJim Jagielski         aCurData        ( aEmptyStr ),
584*b1cdbd2cSJim Jagielski         aVD             ( *this ),
585*b1cdbd2cSJim Jagielski         aScriptedText   ( aVD ),
586*b1cdbd2cSJim Jagielski         bFitWidth       ( sal_False ),
587*b1cdbd2cSJim Jagielski         mbRTL           ( false ),
588*b1cdbd2cSJim Jagielski         aPrvSize        ( GetSizePixel().Width() - 6, GetSizePixel().Height() - 30 ),
589*b1cdbd2cSJim Jagielski         nLabelColWidth  ( (aPrvSize.Width() - 4) / 4 - 12 ),
590*b1cdbd2cSJim Jagielski         nDataColWidth1  ( (aPrvSize.Width() - 4 - 2 * nLabelColWidth) / 3 ),
591*b1cdbd2cSJim Jagielski         nDataColWidth2  ( (aPrvSize.Width() - 4 - 2 * nLabelColWidth) / 4 ),
592*b1cdbd2cSJim Jagielski         nRowHeight      ( (aPrvSize.Height() - 4) / 5 ),
593*b1cdbd2cSJim Jagielski         aStrJan         ( SW_RES( STR_JAN ) ),
594*b1cdbd2cSJim Jagielski 		aStrFeb 		( SW_RES( STR_FEB ) ),
595*b1cdbd2cSJim Jagielski 		aStrMar 		( SW_RES( STR_MAR ) ),
596*b1cdbd2cSJim Jagielski 		aStrNorth		( SW_RES( STR_NORTH ) ),
597*b1cdbd2cSJim Jagielski 		aStrMid 		( SW_RES( STR_MID ) ),
598*b1cdbd2cSJim Jagielski 		aStrSouth		( SW_RES( STR_SOUTH ) ),
599*b1cdbd2cSJim Jagielski 		aStrSum 		( SW_RES( STR_SUM ) ),
600*b1cdbd2cSJim Jagielski 		m_xMSF          ( comphelper::getProcessServiceFactory() )
601*b1cdbd2cSJim Jagielski {
602*b1cdbd2cSJim Jagielski     if (!pWrtShell->IsCrsrInTbl()) // We haven't created the table yet
603*b1cdbd2cSJim Jagielski         mbRTL = Application::GetSettings().GetLayoutRTL();
604*b1cdbd2cSJim Jagielski     else
605*b1cdbd2cSJim Jagielski         mbRTL = pWrtShell->IsTableRightToLeft();
606*b1cdbd2cSJim Jagielski 
607*b1cdbd2cSJim Jagielski     DBG_ASSERT( m_xMSF.is(), "AutoFmtPreview: no MultiServiceFactory");
608*b1cdbd2cSJim Jagielski 	if ( m_xMSF.is() )
609*b1cdbd2cSJim Jagielski 	{
610*b1cdbd2cSJim Jagielski         m_xBreak = uno::Reference< i18n::XBreakIterator >(
611*b1cdbd2cSJim Jagielski 			m_xMSF->createInstance (
612*b1cdbd2cSJim Jagielski 				rtl::OUString::createFromAscii( "com.sun.star.i18n.BreakIterator" ) ),
613*b1cdbd2cSJim Jagielski             uno::UNO_QUERY);
614*b1cdbd2cSJim Jagielski 	}
615*b1cdbd2cSJim Jagielski 	pNumFmt	= new SvNumberFormatter( m_xMSF, LANGUAGE_SYSTEM );
616*b1cdbd2cSJim Jagielski 
617*b1cdbd2cSJim Jagielski 	Init();
618*b1cdbd2cSJim Jagielski }
619*b1cdbd2cSJim Jagielski 
620*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
621*b1cdbd2cSJim Jagielski 
~AutoFmtPreview()622*b1cdbd2cSJim Jagielski __EXPORT AutoFmtPreview::~AutoFmtPreview()
623*b1cdbd2cSJim Jagielski {
624*b1cdbd2cSJim Jagielski 	delete pNumFmt;
625*b1cdbd2cSJim Jagielski }
626*b1cdbd2cSJim Jagielski 
627*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
628*b1cdbd2cSJim Jagielski 
lcl_SetFontProperties(Font & rFont,const SvxFontItem & rFontItem,const SvxWeightItem & rWeightItem,const SvxPostureItem & rPostureItem)629*b1cdbd2cSJim Jagielski static void lcl_SetFontProperties(
630*b1cdbd2cSJim Jagielski         Font& rFont,
631*b1cdbd2cSJim Jagielski         const SvxFontItem& rFontItem,
632*b1cdbd2cSJim Jagielski         const SvxWeightItem& rWeightItem,
633*b1cdbd2cSJim Jagielski         const SvxPostureItem& rPostureItem )
634*b1cdbd2cSJim Jagielski {
635*b1cdbd2cSJim Jagielski     rFont.SetFamily     ( rFontItem.GetFamily() );
636*b1cdbd2cSJim Jagielski     rFont.SetName       ( rFontItem.GetFamilyName() );
637*b1cdbd2cSJim Jagielski     rFont.SetStyleName  ( rFontItem.GetStyleName() );
638*b1cdbd2cSJim Jagielski     rFont.SetCharSet    ( rFontItem.GetCharSet() );
639*b1cdbd2cSJim Jagielski     rFont.SetPitch      ( rFontItem.GetPitch() );
640*b1cdbd2cSJim Jagielski     rFont.SetWeight     ( (FontWeight)rWeightItem.GetValue() );
641*b1cdbd2cSJim Jagielski     rFont.SetItalic     ( (FontItalic)rPostureItem.GetValue() );
642*b1cdbd2cSJim Jagielski }
643*b1cdbd2cSJim Jagielski 
644*b1cdbd2cSJim Jagielski #define SETONALLFONTS( MethodName, Value )                  \
645*b1cdbd2cSJim Jagielski rFont.MethodName( Value );                                  \
646*b1cdbd2cSJim Jagielski rCJKFont.MethodName( Value );                               \
647*b1cdbd2cSJim Jagielski rCTLFont.MethodName( Value );
648*b1cdbd2cSJim Jagielski 
MakeFonts(sal_uInt8 nIndex,Font & rFont,Font & rCJKFont,Font & rCTLFont)649*b1cdbd2cSJim Jagielski void AutoFmtPreview::MakeFonts( sal_uInt8 nIndex, Font& rFont, Font& rCJKFont, Font& rCTLFont )
650*b1cdbd2cSJim Jagielski {
651*b1cdbd2cSJim Jagielski 	const SwBoxAutoFmt& rBoxFmt = aCurData.GetBoxFmt( nIndex );
652*b1cdbd2cSJim Jagielski 
653*b1cdbd2cSJim Jagielski     rFont = rCJKFont = rCTLFont = GetFont();
654*b1cdbd2cSJim Jagielski     Size aFontSize( rFont.GetSize().Width(), 10 );
655*b1cdbd2cSJim Jagielski 
656*b1cdbd2cSJim Jagielski     lcl_SetFontProperties( rFont, rBoxFmt.GetFont(), rBoxFmt.GetWeight(), rBoxFmt.GetPosture() );
657*b1cdbd2cSJim Jagielski     lcl_SetFontProperties( rCJKFont, rBoxFmt.GetCJKFont(), rBoxFmt.GetCJKWeight(), rBoxFmt.GetCJKPosture() );
658*b1cdbd2cSJim Jagielski     lcl_SetFontProperties( rCTLFont, rBoxFmt.GetCTLFont(), rBoxFmt.GetCTLWeight(), rBoxFmt.GetCTLPosture() );
659*b1cdbd2cSJim Jagielski 
660*b1cdbd2cSJim Jagielski     SETONALLFONTS( SetUnderline,    (FontUnderline)rBoxFmt.GetUnderline().GetValue() );
661*b1cdbd2cSJim Jagielski     SETONALLFONTS( SetOverline,     (FontUnderline)rBoxFmt.GetOverline().GetValue() );
662*b1cdbd2cSJim Jagielski     SETONALLFONTS( SetStrikeout,    (FontStrikeout)rBoxFmt.GetCrossedOut().GetValue() );
663*b1cdbd2cSJim Jagielski     SETONALLFONTS( SetOutline,      rBoxFmt.GetContour().GetValue() );
664*b1cdbd2cSJim Jagielski     SETONALLFONTS( SetShadow,       rBoxFmt.GetShadowed().GetValue() );
665*b1cdbd2cSJim Jagielski     SETONALLFONTS( SetColor,        rBoxFmt.GetColor().GetValue() );
666*b1cdbd2cSJim Jagielski     SETONALLFONTS( SetSize,         aFontSize );
667*b1cdbd2cSJim Jagielski     SETONALLFONTS( SetTransparent,  sal_True );
668*b1cdbd2cSJim Jagielski }
669*b1cdbd2cSJim Jagielski 
670*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
671*b1cdbd2cSJim Jagielski 
GetFormatIndex(size_t nCol,size_t nRow) const672*b1cdbd2cSJim Jagielski sal_uInt8 AutoFmtPreview::GetFormatIndex( size_t nCol, size_t nRow ) const
673*b1cdbd2cSJim Jagielski {
674*b1cdbd2cSJim Jagielski     static const sal_uInt8 pnFmtMap[] =
675*b1cdbd2cSJim Jagielski     {
676*b1cdbd2cSJim Jagielski         0,  1,  2,  1,  3,
677*b1cdbd2cSJim Jagielski         4,  5,  6,  5,  7,
678*b1cdbd2cSJim Jagielski         8,  9,  10, 9,  11,
679*b1cdbd2cSJim Jagielski         4,  5,  6,  5,  7,
680*b1cdbd2cSJim Jagielski         12, 13, 14, 13, 15
681*b1cdbd2cSJim Jagielski     };
682*b1cdbd2cSJim Jagielski     return pnFmtMap[ maArray.GetCellIndex( nCol, nRow, mbRTL ) ];
683*b1cdbd2cSJim Jagielski }
684*b1cdbd2cSJim Jagielski 
GetBoxItem(size_t nCol,size_t nRow) const685*b1cdbd2cSJim Jagielski const SvxBoxItem& AutoFmtPreview::GetBoxItem( size_t nCol, size_t nRow ) const
686*b1cdbd2cSJim Jagielski {
687*b1cdbd2cSJim Jagielski     return aCurData.GetBoxFmt( GetFormatIndex( nCol, nRow ) ).GetBox();
688*b1cdbd2cSJim Jagielski }
689*b1cdbd2cSJim Jagielski 
690*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
691*b1cdbd2cSJim Jagielski 
DrawString(size_t nCol,size_t nRow)692*b1cdbd2cSJim Jagielski void AutoFmtPreview::DrawString( size_t nCol, size_t nRow )
693*b1cdbd2cSJim Jagielski {
694*b1cdbd2cSJim Jagielski 	//------------------------
695*b1cdbd2cSJim Jagielski 	// Ausgabe des Zelltextes:
696*b1cdbd2cSJim Jagielski 	//------------------------
697*b1cdbd2cSJim Jagielski 	sal_uLong   nNum;
698*b1cdbd2cSJim Jagielski 	double  nVal;
699*b1cdbd2cSJim Jagielski 	String cellString;
700*b1cdbd2cSJim Jagielski     sal_uInt8    nIndex = static_cast< sal_uInt8 >( maArray.GetCellIndex( nCol, nRow, mbRTL ) );
701*b1cdbd2cSJim Jagielski 
702*b1cdbd2cSJim Jagielski 	switch( nIndex )
703*b1cdbd2cSJim Jagielski 	{
704*b1cdbd2cSJim Jagielski 		case  1: cellString = aStrJan;			break;
705*b1cdbd2cSJim Jagielski 		case  2: cellString = aStrFeb;			break;
706*b1cdbd2cSJim Jagielski 		case  3: cellString = aStrMar;			break;
707*b1cdbd2cSJim Jagielski 		case  5: cellString = aStrNorth;		break;
708*b1cdbd2cSJim Jagielski 		case 10: cellString = aStrMid;			break;
709*b1cdbd2cSJim Jagielski 		case 15: cellString = aStrSouth;		break;
710*b1cdbd2cSJim Jagielski 		case  4:
711*b1cdbd2cSJim Jagielski 		case 20: cellString = aStrSum;			break;
712*b1cdbd2cSJim Jagielski 
713*b1cdbd2cSJim Jagielski 		case  6:
714*b1cdbd2cSJim Jagielski 		case  8:
715*b1cdbd2cSJim Jagielski 		case 16:
716*b1cdbd2cSJim Jagielski 		case 18:    nVal = nIndex;
717*b1cdbd2cSJim Jagielski 					nNum = 5;
718*b1cdbd2cSJim Jagielski 					goto MAKENUMSTR;
719*b1cdbd2cSJim Jagielski 		case 17:
720*b1cdbd2cSJim Jagielski 		case  7: 	nVal = nIndex;
721*b1cdbd2cSJim Jagielski 					nNum = 6;
722*b1cdbd2cSJim Jagielski 					goto MAKENUMSTR;
723*b1cdbd2cSJim Jagielski 		case 11:
724*b1cdbd2cSJim Jagielski 		case 12:
725*b1cdbd2cSJim Jagielski 		case 13: 	nVal = nIndex;
726*b1cdbd2cSJim Jagielski 					nNum = 12 == nIndex ? 10 : 9;
727*b1cdbd2cSJim Jagielski 					goto MAKENUMSTR;
728*b1cdbd2cSJim Jagielski 
729*b1cdbd2cSJim Jagielski 		case  9:	nVal = 21; nNum = 7; 	goto MAKENUMSTR;
730*b1cdbd2cSJim Jagielski 		case 14:	nVal = 36; nNum = 11; 	goto MAKENUMSTR;
731*b1cdbd2cSJim Jagielski 		case 19:	nVal = 51; nNum = 7;	goto MAKENUMSTR;
732*b1cdbd2cSJim Jagielski 		case 21:	nVal = 33; nNum = 13;	goto MAKENUMSTR;
733*b1cdbd2cSJim Jagielski 		case 22:	nVal = 36; nNum = 14;	goto MAKENUMSTR;
734*b1cdbd2cSJim Jagielski 		case 23:	nVal = 39; nNum = 13;	goto MAKENUMSTR;
735*b1cdbd2cSJim Jagielski 		case 24:	nVal = 108; nNum = 15;	goto MAKENUMSTR;
736*b1cdbd2cSJim Jagielski MAKENUMSTR:
737*b1cdbd2cSJim Jagielski 			if( aCurData.IsValueFormat() )
738*b1cdbd2cSJim Jagielski 			{
739*b1cdbd2cSJim Jagielski 				String sFmt; LanguageType eLng, eSys;
740*b1cdbd2cSJim Jagielski 				aCurData.GetBoxFmt( (sal_uInt8)nNum ).GetValueFormat( sFmt, eLng, eSys );
741*b1cdbd2cSJim Jagielski 
742*b1cdbd2cSJim Jagielski                 short nType;
743*b1cdbd2cSJim Jagielski                 sal_Bool bNew;
744*b1cdbd2cSJim Jagielski                 xub_StrLen nCheckPos;
745*b1cdbd2cSJim Jagielski                 sal_uInt32 nKey = pNumFmt->GetIndexPuttingAndConverting( sFmt, eLng,
746*b1cdbd2cSJim Jagielski                         eSys, nType, bNew, nCheckPos);
747*b1cdbd2cSJim Jagielski 				Color* pDummy;
748*b1cdbd2cSJim Jagielski 				pNumFmt->GetOutputString( nVal, nKey, cellString, &pDummy );
749*b1cdbd2cSJim Jagielski 			}
750*b1cdbd2cSJim Jagielski 			else
751*b1cdbd2cSJim Jagielski                 cellString = String::CreateFromInt32((sal_Int32)nVal);
752*b1cdbd2cSJim Jagielski 			break;
753*b1cdbd2cSJim Jagielski 
754*b1cdbd2cSJim Jagielski 	}
755*b1cdbd2cSJim Jagielski 
756*b1cdbd2cSJim Jagielski 	if( cellString.Len() )
757*b1cdbd2cSJim Jagielski 	{
758*b1cdbd2cSJim Jagielski 		Size				aStrSize;
759*b1cdbd2cSJim Jagielski         sal_uInt8                nFmtIndex       = GetFormatIndex( nCol, nRow );
760*b1cdbd2cSJim Jagielski         Rectangle           cellRect        = maArray.GetCellRect( nCol, nRow );
761*b1cdbd2cSJim Jagielski         Point               aPos            = cellRect.TopLeft();
762*b1cdbd2cSJim Jagielski 		sal_uInt16				nRightX 		= 0;
763*b1cdbd2cSJim Jagielski //			  sal_Bool				  bJustify		  = aCurData.IsJustify();
764*b1cdbd2cSJim Jagielski //			  ScHorJustifyAttr	  aHorJustifyItem;
765*b1cdbd2cSJim Jagielski //			CellHorJustify	  eJustification;
766*b1cdbd2cSJim Jagielski 
767*b1cdbd2cSJim Jagielski 		Size theMaxStrSize( cellRect.GetWidth() - FRAME_OFFSET,
768*b1cdbd2cSJim Jagielski 							cellRect.GetHeight() - FRAME_OFFSET );
769*b1cdbd2cSJim Jagielski 		if( aCurData.IsFont() )
770*b1cdbd2cSJim Jagielski 		{
771*b1cdbd2cSJim Jagielski             Font aFont, aCJKFont, aCTLFont;
772*b1cdbd2cSJim Jagielski             MakeFonts( nFmtIndex, aFont, aCJKFont, aCTLFont );
773*b1cdbd2cSJim Jagielski             aScriptedText.SetFonts( &aFont, &aCJKFont, &aCTLFont );
774*b1cdbd2cSJim Jagielski 		}
775*b1cdbd2cSJim Jagielski         else
776*b1cdbd2cSJim Jagielski             aScriptedText.SetDefaultFont();
777*b1cdbd2cSJim Jagielski 
778*b1cdbd2cSJim Jagielski 		aScriptedText.SetText( cellString, m_xBreak );
779*b1cdbd2cSJim Jagielski         aStrSize = aScriptedText.GetTextSize();
780*b1cdbd2cSJim Jagielski 
781*b1cdbd2cSJim Jagielski 		if( aCurData.IsFont() &&
782*b1cdbd2cSJim Jagielski 			theMaxStrSize.Height() < aStrSize.Height() )
783*b1cdbd2cSJim Jagielski 		{
784*b1cdbd2cSJim Jagielski 				// wenn der String in diesem Font nicht
785*b1cdbd2cSJim Jagielski 				// in die Zelle passt, wird wieder der
786*b1cdbd2cSJim Jagielski 				// Standard-Font genommen:
787*b1cdbd2cSJim Jagielski                 aScriptedText.SetDefaultFont();
788*b1cdbd2cSJim Jagielski                 aStrSize = aScriptedText.GetTextSize();
789*b1cdbd2cSJim Jagielski 		}
790*b1cdbd2cSJim Jagielski 
791*b1cdbd2cSJim Jagielski 		while( theMaxStrSize.Width() <= aStrSize.Width() &&
792*b1cdbd2cSJim Jagielski 				cellString.Len() > 1 )
793*b1cdbd2cSJim Jagielski 		{
794*b1cdbd2cSJim Jagielski //					if( eJustification == SVX_HOR_JUSTIFY_RIGHT )
795*b1cdbd2cSJim Jagielski //  						cellString.Erase( 0, 1 );
796*b1cdbd2cSJim Jagielski //					else
797*b1cdbd2cSJim Jagielski 			cellString.Erase( cellString.Len() - 1 );
798*b1cdbd2cSJim Jagielski 			aScriptedText.SetText( cellString, m_xBreak );
799*b1cdbd2cSJim Jagielski             aStrSize = aScriptedText.GetTextSize();
800*b1cdbd2cSJim Jagielski 		}
801*b1cdbd2cSJim Jagielski 
802*b1cdbd2cSJim Jagielski 		nRightX  = (sal_uInt16)(  cellRect.GetWidth()
803*b1cdbd2cSJim Jagielski 								- aStrSize.Width()
804*b1cdbd2cSJim Jagielski 								- FRAME_OFFSET );
805*b1cdbd2cSJim Jagielski 		//-------------
806*b1cdbd2cSJim Jagielski 		// Ausrichtung:
807*b1cdbd2cSJim Jagielski 		//-------------
808*b1cdbd2cSJim Jagielski 		/*   if ( bJustify )
809*b1cdbd2cSJim Jagielski 		{
810*b1cdbd2cSJim Jagielski 			aCurData.GetHorJustify( nFmtIndex, aHorJustifyItem );
811*b1cdbd2cSJim Jagielski 			eJustification = (CellHorJustify)aHorJustifyItem.GetValue();
812*b1cdbd2cSJim Jagielski 		}
813*b1cdbd2cSJim Jagielski 		else
814*b1cdbd2cSJim Jagielski 		{
815*b1cdbd2cSJim Jagielski 			eJustification = SC_HOR_JUSTIFY_STANDARD;
816*b1cdbd2cSJim Jagielski 		}*/
817*b1cdbd2cSJim Jagielski 
818*b1cdbd2cSJim Jagielski 		//-----------------------------
819*b1cdbd2cSJim Jagielski 		// vertikal (immer zentrieren):
820*b1cdbd2cSJim Jagielski 		//-----------------------------
821*b1cdbd2cSJim Jagielski 		aPos.Y() += (nRowHeight - (sal_uInt16)aStrSize.Height()) / 2;
822*b1cdbd2cSJim Jagielski 
823*b1cdbd2cSJim Jagielski 		//-----------
824*b1cdbd2cSJim Jagielski 		// horizontal
825*b1cdbd2cSJim Jagielski 		//-----------
826*b1cdbd2cSJim Jagielski /* 		  if ( eJustification != SC_HOR_JUSTIFY_STANDARD )*/
827*b1cdbd2cSJim Jagielski         if( mbRTL )
828*b1cdbd2cSJim Jagielski             aPos.X() += nRightX;
829*b1cdbd2cSJim Jagielski         else if (aCurData.IsJustify())
830*b1cdbd2cSJim Jagielski 		{
831*b1cdbd2cSJim Jagielski 			sal_uInt16 nHorPos = (sal_uInt16)
832*b1cdbd2cSJim Jagielski 					((cellRect.GetWidth()-aStrSize.Width())/2);
833*b1cdbd2cSJim Jagielski 			const SvxAdjustItem& rAdj = aCurData.GetBoxFmt(nFmtIndex).GetAdjust();
834*b1cdbd2cSJim Jagielski 			switch ( rAdj.GetAdjust() )
835*b1cdbd2cSJim Jagielski 			{
836*b1cdbd2cSJim Jagielski 				case SVX_ADJUST_LEFT:
837*b1cdbd2cSJim Jagielski 					aPos.X() += FRAME_OFFSET;
838*b1cdbd2cSJim Jagielski 					break;
839*b1cdbd2cSJim Jagielski 				case SVX_ADJUST_RIGHT:
840*b1cdbd2cSJim Jagielski 					aPos.X() += nRightX;
841*b1cdbd2cSJim Jagielski 					break;
842*b1cdbd2cSJim Jagielski 				default:
843*b1cdbd2cSJim Jagielski 					aPos.X() += nHorPos;
844*b1cdbd2cSJim Jagielski 					break;
845*b1cdbd2cSJim Jagielski 			}
846*b1cdbd2cSJim Jagielski 		}
847*b1cdbd2cSJim Jagielski 		else
848*b1cdbd2cSJim Jagielski 		{
849*b1cdbd2cSJim Jagielski 			//---------------------
850*b1cdbd2cSJim Jagielski 			// Standardausrichtung:
851*b1cdbd2cSJim Jagielski 			//---------------------
852*b1cdbd2cSJim Jagielski             if ( (nCol == 0) || (nIndex == 4) )
853*b1cdbd2cSJim Jagielski 			{
854*b1cdbd2cSJim Jagielski 				// Text-Label links oder Summe linksbuendig
855*b1cdbd2cSJim Jagielski 				aPos.X() += FRAME_OFFSET;
856*b1cdbd2cSJim Jagielski 			}
857*b1cdbd2cSJim Jagielski 			else
858*b1cdbd2cSJim Jagielski 			{
859*b1cdbd2cSJim Jagielski 					// Zahlen/Datum rechtsbuendig
860*b1cdbd2cSJim Jagielski 				aPos.X() += nRightX;
861*b1cdbd2cSJim Jagielski 			}
862*b1cdbd2cSJim Jagielski 		}
863*b1cdbd2cSJim Jagielski 
864*b1cdbd2cSJim Jagielski 		//-------------------------------
865*b1cdbd2cSJim Jagielski         aScriptedText.DrawText( aPos );
866*b1cdbd2cSJim Jagielski 		//-------------------------------
867*b1cdbd2cSJim Jagielski 	}
868*b1cdbd2cSJim Jagielski }
869*b1cdbd2cSJim Jagielski 
870*b1cdbd2cSJim Jagielski #undef FRAME_OFFSET
871*b1cdbd2cSJim Jagielski 
872*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
873*b1cdbd2cSJim Jagielski 
DrawStrings()874*b1cdbd2cSJim Jagielski void AutoFmtPreview::DrawStrings()
875*b1cdbd2cSJim Jagielski {
876*b1cdbd2cSJim Jagielski     for( size_t nRow = 0; nRow < 5; ++nRow )
877*b1cdbd2cSJim Jagielski         for( size_t nCol = 0; nCol < 5; ++nCol )
878*b1cdbd2cSJim Jagielski             DrawString( nCol, nRow );
879*b1cdbd2cSJim Jagielski }
880*b1cdbd2cSJim Jagielski 
881*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
882*b1cdbd2cSJim Jagielski 
883*b1cdbd2cSJim Jagielski 
DrawBackground()884*b1cdbd2cSJim Jagielski void AutoFmtPreview::DrawBackground()
885*b1cdbd2cSJim Jagielski {
886*b1cdbd2cSJim Jagielski     for( size_t nRow = 0; nRow < 5; ++nRow )
887*b1cdbd2cSJim Jagielski     {
888*b1cdbd2cSJim Jagielski         for( size_t nCol = 0; nCol < 5; ++nCol )
889*b1cdbd2cSJim Jagielski         {
890*b1cdbd2cSJim Jagielski             SvxBrushItem aBrushItem( aCurData.GetBoxFmt( GetFormatIndex( nCol, nRow ) ).GetBackground() );
891*b1cdbd2cSJim Jagielski 
892*b1cdbd2cSJim Jagielski             aVD.Push( PUSH_LINECOLOR | PUSH_FILLCOLOR );
893*b1cdbd2cSJim Jagielski             aVD.SetLineColor();
894*b1cdbd2cSJim Jagielski             aVD.SetFillColor( aBrushItem.GetColor() );
895*b1cdbd2cSJim Jagielski             aVD.DrawRect( maArray.GetCellRect( nCol, nRow ) );
896*b1cdbd2cSJim Jagielski             aVD.Pop();
897*b1cdbd2cSJim Jagielski         }
898*b1cdbd2cSJim Jagielski     }
899*b1cdbd2cSJim Jagielski }
900*b1cdbd2cSJim Jagielski 
901*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
902*b1cdbd2cSJim Jagielski 
903*b1cdbd2cSJim Jagielski 
PaintCells()904*b1cdbd2cSJim Jagielski void AutoFmtPreview::PaintCells()
905*b1cdbd2cSJim Jagielski {
906*b1cdbd2cSJim Jagielski     // 1) background
907*b1cdbd2cSJim Jagielski     if ( aCurData.IsBackground() )
908*b1cdbd2cSJim Jagielski         DrawBackground();
909*b1cdbd2cSJim Jagielski 
910*b1cdbd2cSJim Jagielski     // 2) values
911*b1cdbd2cSJim Jagielski     DrawStrings();
912*b1cdbd2cSJim Jagielski 
913*b1cdbd2cSJim Jagielski     // 3) border
914*b1cdbd2cSJim Jagielski     if ( aCurData.IsFrame() )
915*b1cdbd2cSJim Jagielski         maArray.DrawArray( aVD );
916*b1cdbd2cSJim Jagielski }
917*b1cdbd2cSJim Jagielski 
918*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
919*b1cdbd2cSJim Jagielski 
920*b1cdbd2cSJim Jagielski 
Init()921*b1cdbd2cSJim Jagielski void __EXPORT AutoFmtPreview::Init()
922*b1cdbd2cSJim Jagielski {
923*b1cdbd2cSJim Jagielski     SetBorderStyle( GetBorderStyle() | WINDOW_BORDER_MONO );
924*b1cdbd2cSJim Jagielski     maArray.Initialize( 5, 5 );
925*b1cdbd2cSJim Jagielski     maArray.SetUseDiagDoubleClipping( false );
926*b1cdbd2cSJim Jagielski 	CalcCellArray( sal_False );
927*b1cdbd2cSJim Jagielski 	CalcLineMap();
928*b1cdbd2cSJim Jagielski }
929*b1cdbd2cSJim Jagielski 
930*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
931*b1cdbd2cSJim Jagielski 
932*b1cdbd2cSJim Jagielski 
CalcCellArray(sal_Bool _bFitWidth)933*b1cdbd2cSJim Jagielski void AutoFmtPreview::CalcCellArray( sal_Bool _bFitWidth )
934*b1cdbd2cSJim Jagielski {
935*b1cdbd2cSJim Jagielski     maArray.SetXOffset( 2 );
936*b1cdbd2cSJim Jagielski     maArray.SetAllColWidths( _bFitWidth ? nDataColWidth2 : nDataColWidth1 );
937*b1cdbd2cSJim Jagielski     maArray.SetColWidth( 0, nLabelColWidth );
938*b1cdbd2cSJim Jagielski     maArray.SetColWidth( 4, nLabelColWidth );
939*b1cdbd2cSJim Jagielski 
940*b1cdbd2cSJim Jagielski     maArray.SetYOffset( 2 );
941*b1cdbd2cSJim Jagielski     maArray.SetAllRowHeights( nRowHeight );
942*b1cdbd2cSJim Jagielski 
943*b1cdbd2cSJim Jagielski     aPrvSize.Width() = maArray.GetWidth() + 4;
944*b1cdbd2cSJim Jagielski     aPrvSize.Height() = maArray.GetHeight() + 4;
945*b1cdbd2cSJim Jagielski }
946*b1cdbd2cSJim Jagielski 
947*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
948*b1cdbd2cSJim Jagielski 
lclSetStyleFromBorder(svx::frame::Style & rStyle,const SvxBorderLine * pBorder)949*b1cdbd2cSJim Jagielski inline void lclSetStyleFromBorder( svx::frame::Style& rStyle, const SvxBorderLine* pBorder )
950*b1cdbd2cSJim Jagielski {
951*b1cdbd2cSJim Jagielski     rStyle.Set( pBorder, 0.05, 5 );
952*b1cdbd2cSJim Jagielski }
953*b1cdbd2cSJim Jagielski 
CalcLineMap()954*b1cdbd2cSJim Jagielski void AutoFmtPreview::CalcLineMap()
955*b1cdbd2cSJim Jagielski {
956*b1cdbd2cSJim Jagielski     for( size_t nRow = 0; nRow < 5; ++nRow )
957*b1cdbd2cSJim Jagielski     {
958*b1cdbd2cSJim Jagielski         for( size_t nCol = 0; nCol < 5; ++nCol )
959*b1cdbd2cSJim Jagielski         {
960*b1cdbd2cSJim Jagielski             svx::frame::Style aStyle;
961*b1cdbd2cSJim Jagielski 
962*b1cdbd2cSJim Jagielski             const SvxBoxItem& rItem = GetBoxItem( nCol, nRow );
963*b1cdbd2cSJim Jagielski             lclSetStyleFromBorder( aStyle, rItem.GetLeft() );
964*b1cdbd2cSJim Jagielski             maArray.SetCellStyleLeft( nCol, nRow, aStyle );
965*b1cdbd2cSJim Jagielski             lclSetStyleFromBorder( aStyle, rItem.GetRight() );
966*b1cdbd2cSJim Jagielski             maArray.SetCellStyleRight( nCol, nRow, aStyle );
967*b1cdbd2cSJim Jagielski             lclSetStyleFromBorder( aStyle, rItem.GetTop() );
968*b1cdbd2cSJim Jagielski             maArray.SetCellStyleTop( nCol, nRow, aStyle );
969*b1cdbd2cSJim Jagielski             lclSetStyleFromBorder( aStyle, rItem.GetBottom() );
970*b1cdbd2cSJim Jagielski             maArray.SetCellStyleBottom( nCol, nRow, aStyle );
971*b1cdbd2cSJim Jagielski 
972*b1cdbd2cSJim Jagielski // FIXME - uncomment to draw diagonal borders
973*b1cdbd2cSJim Jagielski //            lclSetStyleFromBorder( aStyle, GetDiagItem( nCol, nRow, true ).GetLine() );
974*b1cdbd2cSJim Jagielski //            maArray.SetCellStyleTLBR( nCol, nRow, aStyle );
975*b1cdbd2cSJim Jagielski //            lclSetStyleFromBorder( aStyle, GetDiagItem( nCol, nRow, false ).GetLine() );
976*b1cdbd2cSJim Jagielski //            maArray.SetCellStyleBLTR( nCol, nRow, aStyle );
977*b1cdbd2cSJim Jagielski         }
978*b1cdbd2cSJim Jagielski     }
979*b1cdbd2cSJim Jagielski }
980*b1cdbd2cSJim Jagielski 
981*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
982*b1cdbd2cSJim Jagielski 
983*b1cdbd2cSJim Jagielski 
NotifyChange(const SwTableAutoFmt & rNewData)984*b1cdbd2cSJim Jagielski void AutoFmtPreview::NotifyChange( const SwTableAutoFmt& rNewData )
985*b1cdbd2cSJim Jagielski {
986*b1cdbd2cSJim Jagielski 	aCurData  = rNewData;
987*b1cdbd2cSJim Jagielski 	bFitWidth = aCurData.IsJustify();//sal_True;  //???
988*b1cdbd2cSJim Jagielski 	CalcCellArray( bFitWidth );
989*b1cdbd2cSJim Jagielski 	CalcLineMap();
990*b1cdbd2cSJim Jagielski 	DoPaint( Rectangle( Point(0,0), GetSizePixel() ) );
991*b1cdbd2cSJim Jagielski }
992*b1cdbd2cSJim Jagielski 
993*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
994*b1cdbd2cSJim Jagielski 
995*b1cdbd2cSJim Jagielski 
DoPaint(const Rectangle &)996*b1cdbd2cSJim Jagielski void AutoFmtPreview::DoPaint( const Rectangle& /*rRect*/ )
997*b1cdbd2cSJim Jagielski {
998*b1cdbd2cSJim Jagielski     sal_uInt32 nOldDrawMode = aVD.GetDrawMode();
999*b1cdbd2cSJim Jagielski     if( GetSettings().GetStyleSettings().GetHighContrastMode() &&
1000*b1cdbd2cSJim Jagielski             SW_MOD()->GetAccessibilityOptions().GetIsForBorders() )
1001*b1cdbd2cSJim Jagielski         aVD.SetDrawMode( DRAWMODE_SETTINGSLINE | DRAWMODE_SETTINGSFILL | DRAWMODE_SETTINGSTEXT | DRAWMODE_SETTINGSGRADIENT );
1002*b1cdbd2cSJim Jagielski 
1003*b1cdbd2cSJim Jagielski 	Bitmap	thePreview;
1004*b1cdbd2cSJim Jagielski 	Point	aCenterPos;
1005*b1cdbd2cSJim Jagielski 	Size	theWndSize = GetSizePixel();
1006*b1cdbd2cSJim Jagielski 	Size	thePrevSize;
1007*b1cdbd2cSJim Jagielski 	Color 	oldColor;
1008*b1cdbd2cSJim Jagielski 	Font	aFont;
1009*b1cdbd2cSJim Jagielski 
1010*b1cdbd2cSJim Jagielski 	aFont = aVD.GetFont();
1011*b1cdbd2cSJim Jagielski 	aFont.SetTransparent( sal_True );
1012*b1cdbd2cSJim Jagielski 
1013*b1cdbd2cSJim Jagielski 	aVD.SetFont 		 ( aFont );
1014*b1cdbd2cSJim Jagielski     aVD.SetLineColor     ();
1015*b1cdbd2cSJim Jagielski     const Color& rWinColor = GetSettings().GetStyleSettings().GetWindowColor();
1016*b1cdbd2cSJim Jagielski     aVD.SetBackground    ( Wallpaper(rWinColor) );
1017*b1cdbd2cSJim Jagielski     aVD.SetFillColor     ( rWinColor );
1018*b1cdbd2cSJim Jagielski 	aVD.SetOutputSizePixel	( aPrvSize );
1019*b1cdbd2cSJim Jagielski 
1020*b1cdbd2cSJim Jagielski 	//--------------------------------
1021*b1cdbd2cSJim Jagielski 	// Zellen auf virtual Device malen
1022*b1cdbd2cSJim Jagielski 	// und Ergebnis sichern
1023*b1cdbd2cSJim Jagielski 	//--------------------------------
1024*b1cdbd2cSJim Jagielski 	PaintCells();
1025*b1cdbd2cSJim Jagielski 	thePreview = aVD.GetBitmap( Point(0,0), aPrvSize );
1026*b1cdbd2cSJim Jagielski 
1027*b1cdbd2cSJim Jagielski 	//--------------------------------------
1028*b1cdbd2cSJim Jagielski 	// Rahmen malen und Vorschau zentrieren:
1029*b1cdbd2cSJim Jagielski 	// (virtual Device fuer Fensterausgabe)
1030*b1cdbd2cSJim Jagielski 	//--------------------------------------
1031*b1cdbd2cSJim Jagielski 	aVD.SetOutputSizePixel( theWndSize );
1032*b1cdbd2cSJim Jagielski 	oldColor = aVD.GetLineColor();
1033*b1cdbd2cSJim Jagielski     aVD.SetLineColor();
1034*b1cdbd2cSJim Jagielski 	aVD.DrawRect( Rectangle( Point(0,0), theWndSize ) );
1035*b1cdbd2cSJim Jagielski 	SetLineColor( oldColor );
1036*b1cdbd2cSJim Jagielski 	aCenterPos	= Point( (theWndSize.Width()  - aPrvSize.Width() ) / 2,
1037*b1cdbd2cSJim Jagielski 						 (theWndSize.Height() - aPrvSize.Height()) / 2 );
1038*b1cdbd2cSJim Jagielski 	aVD.DrawBitmap( aCenterPos, thePreview );
1039*b1cdbd2cSJim Jagielski 
1040*b1cdbd2cSJim Jagielski 	//----------------------------
1041*b1cdbd2cSJim Jagielski 	// Ausgabe im Vorschaufenster:
1042*b1cdbd2cSJim Jagielski 	//----------------------------
1043*b1cdbd2cSJim Jagielski 	DrawBitmap( Point(0,0), aVD.GetBitmap( Point(0,0), theWndSize ) );
1044*b1cdbd2cSJim Jagielski 
1045*b1cdbd2cSJim Jagielski     aVD.SetDrawMode( nOldDrawMode );
1046*b1cdbd2cSJim Jagielski }
1047*b1cdbd2cSJim Jagielski 
1048*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
1049*b1cdbd2cSJim Jagielski 
Paint(const Rectangle & rRect)1050*b1cdbd2cSJim Jagielski void __EXPORT AutoFmtPreview::Paint( const Rectangle& rRect )
1051*b1cdbd2cSJim Jagielski {
1052*b1cdbd2cSJim Jagielski 	DoPaint( rRect );
1053*b1cdbd2cSJim Jagielski }
1054