xref: /aoo4110/main/cui/source/tabpages/chardlg.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_cui.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski // include ---------------------------------------------------------------
28*b1cdbd2cSJim Jagielski #include <editeng/unolingu.hxx>
29*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
30*b1cdbd2cSJim Jagielski #include <unotools/pathoptions.hxx>
31*b1cdbd2cSJim Jagielski #include <svtools/ctrltool.hxx>
32*b1cdbd2cSJim Jagielski #include <svl/sfontitm.hxx>
33*b1cdbd2cSJim Jagielski #include <sfx2/printer.hxx>
34*b1cdbd2cSJim Jagielski #include <sfx2/objsh.hxx>
35*b1cdbd2cSJim Jagielski #include <sfx2/viewsh.hxx>
36*b1cdbd2cSJim Jagielski #include <sfx2/bindings.hxx>
37*b1cdbd2cSJim Jagielski #include <sfx2/viewfrm.hxx>
38*b1cdbd2cSJim Jagielski #include <vcl/msgbox.hxx>
39*b1cdbd2cSJim Jagielski #include <svx/dialmgr.hxx>
40*b1cdbd2cSJim Jagielski #include <svx/dialogs.hrc>
41*b1cdbd2cSJim Jagielski #include <svtools/unitconv.hxx>
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski #define _SVX_CHARDLG_CXX
44*b1cdbd2cSJim Jagielski #include <svl/languageoptions.hxx>
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski #include <cuires.hrc>
47*b1cdbd2cSJim Jagielski #include "chardlg.hrc"
48*b1cdbd2cSJim Jagielski 
49*b1cdbd2cSJim Jagielski #include <svx/xtable.hxx>		// XColorList
50*b1cdbd2cSJim Jagielski #include "chardlg.hxx"
51*b1cdbd2cSJim Jagielski #include "editeng/fontitem.hxx"
52*b1cdbd2cSJim Jagielski #include <editeng/postitem.hxx>
53*b1cdbd2cSJim Jagielski #include <editeng/udlnitem.hxx>
54*b1cdbd2cSJim Jagielski #include <editeng/crsditem.hxx>
55*b1cdbd2cSJim Jagielski #include <editeng/cntritem.hxx>
56*b1cdbd2cSJim Jagielski #include <editeng/langitem.hxx>
57*b1cdbd2cSJim Jagielski #include <editeng/wghtitem.hxx>
58*b1cdbd2cSJim Jagielski #include <editeng/fhgtitem.hxx>
59*b1cdbd2cSJim Jagielski #include <editeng/shdditem.hxx>
60*b1cdbd2cSJim Jagielski #include <editeng/escpitem.hxx>
61*b1cdbd2cSJim Jagielski #include <editeng/prszitem.hxx>
62*b1cdbd2cSJim Jagielski #include <editeng/wrlmitem.hxx>
63*b1cdbd2cSJim Jagielski #include <editeng/cmapitem.hxx>
64*b1cdbd2cSJim Jagielski #include <editeng/kernitem.hxx>
65*b1cdbd2cSJim Jagielski #include <editeng/blnkitem.hxx>
66*b1cdbd2cSJim Jagielski #include "editeng/flstitem.hxx"
67*b1cdbd2cSJim Jagielski #include <editeng/akrnitem.hxx>
68*b1cdbd2cSJim Jagielski #include <editeng/brshitem.hxx>
69*b1cdbd2cSJim Jagielski #include <editeng/colritem.hxx>
70*b1cdbd2cSJim Jagielski #include "svx/drawitem.hxx"
71*b1cdbd2cSJim Jagielski #include "svx/dlgutil.hxx"
72*b1cdbd2cSJim Jagielski #include <dialmgr.hxx>
73*b1cdbd2cSJim Jagielski #include "svx/htmlmode.hxx"
74*b1cdbd2cSJim Jagielski #include "cuicharmap.hxx"
75*b1cdbd2cSJim Jagielski #include "chardlg.h"
76*b1cdbd2cSJim Jagielski #include <editeng/emphitem.hxx>
77*b1cdbd2cSJim Jagielski #include <editeng/charreliefitem.hxx>
78*b1cdbd2cSJim Jagielski #include <editeng/twolinesitem.hxx>
79*b1cdbd2cSJim Jagielski #include <editeng/charhiddenitem.hxx>
80*b1cdbd2cSJim Jagielski #include <svl/stritem.hxx>
81*b1cdbd2cSJim Jagielski #include <editeng/charscaleitem.hxx>
82*b1cdbd2cSJim Jagielski #include <editeng/charrotateitem.hxx>
83*b1cdbd2cSJim Jagielski #include <svx/svxdlg.hxx> //CHINA001
84*b1cdbd2cSJim Jagielski #include <cuires.hrc> //CHINA001
85*b1cdbd2cSJim Jagielski #include <svl/intitem.hxx> //CHINA001
86*b1cdbd2cSJim Jagielski #include <sfx2/request.hxx> //CHINA001
87*b1cdbd2cSJim Jagielski #include "svx/flagsdef.hxx" //CHINA001
88*b1cdbd2cSJim Jagielski 
89*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski // define ----------------------------------------------------------------
92*b1cdbd2cSJim Jagielski 
93*b1cdbd2cSJim Jagielski #define ISITEMSET	rSet.GetItemState(nWhich)>=SFX_ITEM_DEFAULT
94*b1cdbd2cSJim Jagielski 
95*b1cdbd2cSJim Jagielski #define CLEARTITEM	rSet.InvalidateItem(nWhich)
96*b1cdbd2cSJim Jagielski 
97*b1cdbd2cSJim Jagielski #define LW_NORMAL	0
98*b1cdbd2cSJim Jagielski #define LW_GESPERRT 1
99*b1cdbd2cSJim Jagielski #define LW_SCHMAL	2
100*b1cdbd2cSJim Jagielski 
101*b1cdbd2cSJim Jagielski // static ----------------------------------------------------------------
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski static sal_uInt16 pNameRanges[] =
104*b1cdbd2cSJim Jagielski {
105*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_FONT,
106*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_WEIGHT,
107*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_FONTHEIGHT,
108*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_FONTHEIGHT,
109*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_COLOR,
110*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_COLOR,
111*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_LANGUAGE,
112*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_LANGUAGE,
113*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_CJK_FONT,
114*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_CJK_WEIGHT,
115*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_CTL_FONT,
116*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_CTL_WEIGHT,
117*b1cdbd2cSJim Jagielski 	0
118*b1cdbd2cSJim Jagielski };
119*b1cdbd2cSJim Jagielski 
120*b1cdbd2cSJim Jagielski static sal_uInt16 pEffectsRanges[] =
121*b1cdbd2cSJim Jagielski {
122*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_SHADOWED,
123*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_UNDERLINE,
124*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_COLOR,
125*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_COLOR,
126*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_CASEMAP,
127*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_CASEMAP,
128*b1cdbd2cSJim Jagielski 	SID_ATTR_FLASH,
129*b1cdbd2cSJim Jagielski 	SID_ATTR_FLASH,
130*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_EMPHASISMARK,
131*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_EMPHASISMARK,
132*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_RELIEF,
133*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_RELIEF,
134*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_HIDDEN,
135*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_HIDDEN,
136*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_OVERLINE,
137*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_OVERLINE,
138*b1cdbd2cSJim Jagielski 	0
139*b1cdbd2cSJim Jagielski };
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski static sal_uInt16 pPositionRanges[] =
142*b1cdbd2cSJim Jagielski {
143*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_KERNING,
144*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_KERNING,
145*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_ESCAPEMENT,
146*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_ESCAPEMENT,
147*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_AUTOKERN,
148*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_AUTOKERN,
149*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_ROTATED,
150*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_SCALEWIDTH,
151*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_WIDTH_FIT_TO_LINE,
152*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_WIDTH_FIT_TO_LINE,
153*b1cdbd2cSJim Jagielski 	0
154*b1cdbd2cSJim Jagielski };
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski static sal_uInt16 pTwoLinesRanges[] =
157*b1cdbd2cSJim Jagielski {
158*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_TWO_LINES,
159*b1cdbd2cSJim Jagielski 	SID_ATTR_CHAR_TWO_LINES,
160*b1cdbd2cSJim Jagielski 	0
161*b1cdbd2cSJim Jagielski };
162*b1cdbd2cSJim Jagielski 
163*b1cdbd2cSJim Jagielski // C-Funktion ------------------------------------------------------------
164*b1cdbd2cSJim Jagielski 
StateToAttr(TriState aState)165*b1cdbd2cSJim Jagielski inline sal_Bool StateToAttr( TriState aState )
166*b1cdbd2cSJim Jagielski {
167*b1cdbd2cSJim Jagielski 	return ( STATE_CHECK == aState );
168*b1cdbd2cSJim Jagielski }
169*b1cdbd2cSJim Jagielski 
170*b1cdbd2cSJim Jagielski // class SvxCharBasePage -------------------------------------------------
171*b1cdbd2cSJim Jagielski 
GetPreviewFont()172*b1cdbd2cSJim Jagielski inline SvxFont& SvxCharBasePage::GetPreviewFont()
173*b1cdbd2cSJim Jagielski {
174*b1cdbd2cSJim Jagielski 	return m_aPreviewWin.GetFont();
175*b1cdbd2cSJim Jagielski }
176*b1cdbd2cSJim Jagielski 
177*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
178*b1cdbd2cSJim Jagielski 
GetPreviewCJKFont()179*b1cdbd2cSJim Jagielski inline SvxFont& SvxCharBasePage::GetPreviewCJKFont()
180*b1cdbd2cSJim Jagielski {
181*b1cdbd2cSJim Jagielski 	return m_aPreviewWin.GetCJKFont();
182*b1cdbd2cSJim Jagielski }
183*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
184*b1cdbd2cSJim Jagielski 
GetPreviewCTLFont()185*b1cdbd2cSJim Jagielski inline SvxFont& SvxCharBasePage::GetPreviewCTLFont()
186*b1cdbd2cSJim Jagielski {
187*b1cdbd2cSJim Jagielski 	return m_aPreviewWin.GetCTLFont();
188*b1cdbd2cSJim Jagielski }
189*b1cdbd2cSJim Jagielski 
190*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
191*b1cdbd2cSJim Jagielski 
SvxCharBasePage(Window * pParent,const ResId & rResId,const SfxItemSet & rItemset,sal_uInt16 nResIdPrewievWin,sal_uInt16 nResIdFontTypeFT)192*b1cdbd2cSJim Jagielski SvxCharBasePage::SvxCharBasePage( Window* pParent, const ResId& rResId, const SfxItemSet& rItemset,
193*b1cdbd2cSJim Jagielski 								 sal_uInt16 nResIdPrewievWin, sal_uInt16 nResIdFontTypeFT ):
194*b1cdbd2cSJim Jagielski 	SfxTabPage( pParent, rResId, rItemset ),
195*b1cdbd2cSJim Jagielski     m_aPreviewWin( this, ResId( nResIdPrewievWin, *rResId.GetResMgr() ) ),
196*b1cdbd2cSJim Jagielski     m_aFontTypeFT( this, ResId( nResIdFontTypeFT, *rResId.GetResMgr() ) ),
197*b1cdbd2cSJim Jagielski 	m_bPreviewBackgroundToCharacter( sal_False )
198*b1cdbd2cSJim Jagielski {
199*b1cdbd2cSJim Jagielski }
200*b1cdbd2cSJim Jagielski 
201*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
202*b1cdbd2cSJim Jagielski 
~SvxCharBasePage()203*b1cdbd2cSJim Jagielski SvxCharBasePage::~SvxCharBasePage()
204*b1cdbd2cSJim Jagielski {
205*b1cdbd2cSJim Jagielski }
206*b1cdbd2cSJim Jagielski 
207*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
208*b1cdbd2cSJim Jagielski 
209*b1cdbd2cSJim Jagielski //void SvxCharBasePage::SetPrevFontAttributes( const SfxItemSet& rSet )
ActivatePage(const SfxItemSet & rSet)210*b1cdbd2cSJim Jagielski void SvxCharBasePage::ActivatePage( const SfxItemSet& rSet )
211*b1cdbd2cSJim Jagielski {
212*b1cdbd2cSJim Jagielski 	SvxFont&		rFont = GetPreviewFont();
213*b1cdbd2cSJim Jagielski     SvxFont&		rCJKFont = GetPreviewCJKFont();
214*b1cdbd2cSJim Jagielski 	SvxFont&		rCTLFont = GetPreviewCTLFont();
215*b1cdbd2cSJim Jagielski 	sal_uInt16			nWhich;
216*b1cdbd2cSJim Jagielski 
217*b1cdbd2cSJim Jagielski     nWhich = GetWhich( SID_CHAR_DLG_PREVIEW_STRING );
218*b1cdbd2cSJim Jagielski     if( ISITEMSET )
219*b1cdbd2cSJim Jagielski     {
220*b1cdbd2cSJim Jagielski         const SfxStringItem& rItem = ( SfxStringItem& ) rSet.Get( nWhich );
221*b1cdbd2cSJim Jagielski         ::rtl::OUString aString = rItem.GetValue();
222*b1cdbd2cSJim Jagielski         if( aString.getLength() != 0 )
223*b1cdbd2cSJim Jagielski             m_aPreviewWin.SetPreviewText( aString );
224*b1cdbd2cSJim Jagielski         else
225*b1cdbd2cSJim Jagielski             m_aPreviewWin.SetFontNameAsPreviewText();
226*b1cdbd2cSJim Jagielski     }
227*b1cdbd2cSJim Jagielski 
228*b1cdbd2cSJim Jagielski 	// Underline
229*b1cdbd2cSJim Jagielski 	FontUnderline eUnderline;
230*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_UNDERLINE );
231*b1cdbd2cSJim Jagielski 	if( ISITEMSET )
232*b1cdbd2cSJim Jagielski 	{
233*b1cdbd2cSJim Jagielski 		const SvxUnderlineItem& rItem = ( SvxUnderlineItem& ) rSet.Get( nWhich );
234*b1cdbd2cSJim Jagielski 		eUnderline = ( FontUnderline ) rItem.GetValue();
235*b1cdbd2cSJim Jagielski 		m_aPreviewWin.SetTextLineColor( rItem.GetColor() );
236*b1cdbd2cSJim Jagielski 	}
237*b1cdbd2cSJim Jagielski 	else
238*b1cdbd2cSJim Jagielski 		eUnderline = UNDERLINE_NONE;
239*b1cdbd2cSJim Jagielski 
240*b1cdbd2cSJim Jagielski 	rFont.SetUnderline( eUnderline );
241*b1cdbd2cSJim Jagielski     rCJKFont.SetUnderline( eUnderline );
242*b1cdbd2cSJim Jagielski 	rCTLFont.SetUnderline( eUnderline );
243*b1cdbd2cSJim Jagielski 
244*b1cdbd2cSJim Jagielski 	// Overline
245*b1cdbd2cSJim Jagielski 	FontUnderline eOverline;
246*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_OVERLINE );
247*b1cdbd2cSJim Jagielski 	if( ISITEMSET )
248*b1cdbd2cSJim Jagielski 	{
249*b1cdbd2cSJim Jagielski 		const SvxOverlineItem& rItem = ( SvxOverlineItem& ) rSet.Get( nWhich );
250*b1cdbd2cSJim Jagielski 		eOverline = ( FontUnderline ) rItem.GetValue();
251*b1cdbd2cSJim Jagielski 		m_aPreviewWin.SetOverlineColor( rItem.GetColor() );
252*b1cdbd2cSJim Jagielski 	}
253*b1cdbd2cSJim Jagielski 	else
254*b1cdbd2cSJim Jagielski 		eOverline = UNDERLINE_NONE;
255*b1cdbd2cSJim Jagielski 
256*b1cdbd2cSJim Jagielski 	rFont.SetOverline( eOverline );
257*b1cdbd2cSJim Jagielski     rCJKFont.SetOverline( eOverline );
258*b1cdbd2cSJim Jagielski 	rCTLFont.SetOverline( eOverline );
259*b1cdbd2cSJim Jagielski 
260*b1cdbd2cSJim Jagielski 	//	Strikeout
261*b1cdbd2cSJim Jagielski 	FontStrikeout eStrikeout;
262*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_STRIKEOUT );
263*b1cdbd2cSJim Jagielski 	if( ISITEMSET )
264*b1cdbd2cSJim Jagielski 	{
265*b1cdbd2cSJim Jagielski 		const SvxCrossedOutItem& rItem = ( SvxCrossedOutItem& ) rSet.Get( nWhich );
266*b1cdbd2cSJim Jagielski 		eStrikeout = ( FontStrikeout ) rItem.GetValue();
267*b1cdbd2cSJim Jagielski 	}
268*b1cdbd2cSJim Jagielski 	else
269*b1cdbd2cSJim Jagielski 		eStrikeout = STRIKEOUT_NONE;
270*b1cdbd2cSJim Jagielski 
271*b1cdbd2cSJim Jagielski 	rFont.SetStrikeout( eStrikeout );
272*b1cdbd2cSJim Jagielski     rCJKFont.SetStrikeout( eStrikeout );
273*b1cdbd2cSJim Jagielski 	rCTLFont.SetStrikeout( eStrikeout );
274*b1cdbd2cSJim Jagielski 
275*b1cdbd2cSJim Jagielski 	// WordLineMode
276*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_WORDLINEMODE );
277*b1cdbd2cSJim Jagielski 	if( ISITEMSET )
278*b1cdbd2cSJim Jagielski 	{
279*b1cdbd2cSJim Jagielski 		const SvxWordLineModeItem& rItem = ( SvxWordLineModeItem& ) rSet.Get( nWhich );
280*b1cdbd2cSJim Jagielski 		rFont.SetWordLineMode( rItem.GetValue() );
281*b1cdbd2cSJim Jagielski         rCJKFont.SetWordLineMode( rItem.GetValue() );
282*b1cdbd2cSJim Jagielski 		rCTLFont.SetWordLineMode( rItem.GetValue() );
283*b1cdbd2cSJim Jagielski 	}
284*b1cdbd2cSJim Jagielski 
285*b1cdbd2cSJim Jagielski 	// Emphasis
286*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_EMPHASISMARK );
287*b1cdbd2cSJim Jagielski 	if( ISITEMSET )
288*b1cdbd2cSJim Jagielski 	{
289*b1cdbd2cSJim Jagielski 		const SvxEmphasisMarkItem& rItem = ( SvxEmphasisMarkItem& ) rSet.Get( nWhich );
290*b1cdbd2cSJim Jagielski 		FontEmphasisMark eMark = rItem.GetEmphasisMark();
291*b1cdbd2cSJim Jagielski 		rFont.SetEmphasisMark( eMark );
292*b1cdbd2cSJim Jagielski         rCJKFont.SetEmphasisMark( eMark );
293*b1cdbd2cSJim Jagielski 		rCTLFont.SetEmphasisMark( eMark );
294*b1cdbd2cSJim Jagielski 	}
295*b1cdbd2cSJim Jagielski 
296*b1cdbd2cSJim Jagielski     // Relief
297*b1cdbd2cSJim Jagielski     nWhich = GetWhich( SID_ATTR_CHAR_RELIEF );
298*b1cdbd2cSJim Jagielski     if( ISITEMSET )
299*b1cdbd2cSJim Jagielski 	{
300*b1cdbd2cSJim Jagielski         const SvxCharReliefItem& rItem = ( SvxCharReliefItem& ) rSet.Get( nWhich );
301*b1cdbd2cSJim Jagielski 		FontRelief eFontRelief = ( FontRelief ) rItem.GetValue();
302*b1cdbd2cSJim Jagielski         rFont.SetRelief( eFontRelief );
303*b1cdbd2cSJim Jagielski         rCJKFont.SetRelief( eFontRelief );
304*b1cdbd2cSJim Jagielski 		rCTLFont.SetRelief( eFontRelief );
305*b1cdbd2cSJim Jagielski     }
306*b1cdbd2cSJim Jagielski 
307*b1cdbd2cSJim Jagielski 	// Effects
308*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_CASEMAP );
309*b1cdbd2cSJim Jagielski 	if( ISITEMSET )
310*b1cdbd2cSJim Jagielski 	{
311*b1cdbd2cSJim Jagielski 		const SvxCaseMapItem& rItem = ( SvxCaseMapItem& ) rSet.Get( nWhich );
312*b1cdbd2cSJim Jagielski 		SvxCaseMap eCaseMap = ( SvxCaseMap ) rItem.GetValue();
313*b1cdbd2cSJim Jagielski 		rFont.SetCaseMap( eCaseMap );
314*b1cdbd2cSJim Jagielski         rCJKFont.SetCaseMap( eCaseMap );
315*b1cdbd2cSJim Jagielski         // #i78474# small caps do not exist in CTL fonts
316*b1cdbd2cSJim Jagielski         rCTLFont.SetCaseMap( eCaseMap == SVX_CASEMAP_KAPITAELCHEN ? SVX_CASEMAP_NOT_MAPPED : eCaseMap );
317*b1cdbd2cSJim Jagielski 	}
318*b1cdbd2cSJim Jagielski 
319*b1cdbd2cSJim Jagielski 	// Outline
320*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_CONTOUR );
321*b1cdbd2cSJim Jagielski 	if( ISITEMSET )
322*b1cdbd2cSJim Jagielski 	{
323*b1cdbd2cSJim Jagielski 		const SvxContourItem& rItem = ( SvxContourItem& ) rSet.Get( nWhich );
324*b1cdbd2cSJim Jagielski 		sal_Bool bOutline = rItem.GetValue();
325*b1cdbd2cSJim Jagielski 		rFont.SetOutline( bOutline );
326*b1cdbd2cSJim Jagielski         rCJKFont.SetOutline( bOutline );
327*b1cdbd2cSJim Jagielski 		rCTLFont.SetOutline( bOutline );
328*b1cdbd2cSJim Jagielski 	}
329*b1cdbd2cSJim Jagielski 
330*b1cdbd2cSJim Jagielski 	// Shadow
331*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_SHADOWED );
332*b1cdbd2cSJim Jagielski 	if( ISITEMSET )
333*b1cdbd2cSJim Jagielski 	{
334*b1cdbd2cSJim Jagielski 		const SvxShadowedItem& rItem = ( SvxShadowedItem& ) rSet.Get( nWhich );
335*b1cdbd2cSJim Jagielski 		sal_Bool bShadow = rItem.GetValue();
336*b1cdbd2cSJim Jagielski 		rFont.SetShadow( bShadow );
337*b1cdbd2cSJim Jagielski         rCJKFont.SetShadow( bShadow );
338*b1cdbd2cSJim Jagielski 		rCTLFont.SetShadow( bShadow );
339*b1cdbd2cSJim Jagielski 	}
340*b1cdbd2cSJim Jagielski 
341*b1cdbd2cSJim Jagielski 	// Background
342*b1cdbd2cSJim Jagielski 	sal_Bool bTransparent;
343*b1cdbd2cSJim Jagielski     nWhich = GetWhich( m_bPreviewBackgroundToCharacter ? SID_ATTR_BRUSH : SID_ATTR_BRUSH_CHAR );
344*b1cdbd2cSJim Jagielski     if( ISITEMSET )
345*b1cdbd2cSJim Jagielski     {
346*b1cdbd2cSJim Jagielski          const SvxBrushItem& rBrush = ( SvxBrushItem& ) rSet.Get( nWhich );
347*b1cdbd2cSJim Jagielski          const Color& rColor = rBrush.GetColor();
348*b1cdbd2cSJim Jagielski 		 bTransparent = rColor.GetTransparency() > 0;
349*b1cdbd2cSJim Jagielski          rFont.SetFillColor( rColor );
350*b1cdbd2cSJim Jagielski          rCJKFont.SetFillColor( rColor );
351*b1cdbd2cSJim Jagielski 		 rCTLFont.SetFillColor( rColor );
352*b1cdbd2cSJim Jagielski     }
353*b1cdbd2cSJim Jagielski     else
354*b1cdbd2cSJim Jagielski         bTransparent = sal_True;
355*b1cdbd2cSJim Jagielski 
356*b1cdbd2cSJim Jagielski     rFont.SetTransparent( bTransparent );
357*b1cdbd2cSJim Jagielski     rCJKFont.SetTransparent( bTransparent );
358*b1cdbd2cSJim Jagielski 	rCTLFont.SetTransparent( bTransparent );
359*b1cdbd2cSJim Jagielski 
360*b1cdbd2cSJim Jagielski 	Color aBackCol( COL_TRANSPARENT );
361*b1cdbd2cSJim Jagielski 	if( !m_bPreviewBackgroundToCharacter )
362*b1cdbd2cSJim Jagielski 	{
363*b1cdbd2cSJim Jagielski 		nWhich = GetWhich( SID_ATTR_BRUSH );
364*b1cdbd2cSJim Jagielski 		if( ISITEMSET )
365*b1cdbd2cSJim Jagielski 		{
366*b1cdbd2cSJim Jagielski 			const SvxBrushItem& rBrush = ( SvxBrushItem& ) rSet.Get( nWhich );
367*b1cdbd2cSJim Jagielski 			if( GPOS_NONE == rBrush.GetGraphicPos() )
368*b1cdbd2cSJim Jagielski 				aBackCol = rBrush.GetColor();
369*b1cdbd2cSJim Jagielski 		}
370*b1cdbd2cSJim Jagielski 	}
371*b1cdbd2cSJim Jagielski 	m_aPreviewWin.SetBackColor( aBackCol );
372*b1cdbd2cSJim Jagielski 
373*b1cdbd2cSJim Jagielski 	// Font
374*b1cdbd2cSJim Jagielski 	SetPrevFont( rSet, SID_ATTR_CHAR_FONT, rFont );
375*b1cdbd2cSJim Jagielski 	SetPrevFont( rSet, SID_ATTR_CHAR_CJK_FONT, rCJKFont );
376*b1cdbd2cSJim Jagielski 	SetPrevFont( rSet, SID_ATTR_CHAR_CTL_FONT, rCTLFont );
377*b1cdbd2cSJim Jagielski 
378*b1cdbd2cSJim Jagielski 	// Style
379*b1cdbd2cSJim Jagielski 	SetPrevFontStyle( rSet, SID_ATTR_CHAR_POSTURE, SID_ATTR_CHAR_WEIGHT, rFont );
380*b1cdbd2cSJim Jagielski 	SetPrevFontStyle( rSet, SID_ATTR_CHAR_CJK_POSTURE, SID_ATTR_CHAR_CJK_WEIGHT, rCJKFont );
381*b1cdbd2cSJim Jagielski 	SetPrevFontStyle( rSet, SID_ATTR_CHAR_CTL_POSTURE, SID_ATTR_CHAR_CTL_WEIGHT, rCTLFont );
382*b1cdbd2cSJim Jagielski 
383*b1cdbd2cSJim Jagielski 	// Size
384*b1cdbd2cSJim Jagielski 	SetPrevFontSize( rSet, SID_ATTR_CHAR_FONTHEIGHT, rFont );
385*b1cdbd2cSJim Jagielski 	SetPrevFontSize( rSet, SID_ATTR_CHAR_CJK_FONTHEIGHT, rCJKFont );
386*b1cdbd2cSJim Jagielski 	SetPrevFontSize( rSet, SID_ATTR_CHAR_CTL_FONTHEIGHT, rCTLFont );
387*b1cdbd2cSJim Jagielski 
388*b1cdbd2cSJim Jagielski 	// Color
389*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_COLOR );
390*b1cdbd2cSJim Jagielski 	if( ISITEMSET )
391*b1cdbd2cSJim Jagielski 	{
392*b1cdbd2cSJim Jagielski 		const SvxColorItem& rItem = ( SvxColorItem& ) rSet.Get( nWhich );
393*b1cdbd2cSJim Jagielski 		Color aCol( rItem.GetValue() );
394*b1cdbd2cSJim Jagielski 		rFont.SetColor( aCol );
395*b1cdbd2cSJim Jagielski         rCJKFont.SetColor( aCol );
396*b1cdbd2cSJim Jagielski 		rCTLFont.SetColor( aCol );
397*b1cdbd2cSJim Jagielski 
398*b1cdbd2cSJim Jagielski 		m_aPreviewWin.AutoCorrectFontColor();	// handle color COL_AUTO
399*b1cdbd2cSJim Jagielski 	}
400*b1cdbd2cSJim Jagielski 
401*b1cdbd2cSJim Jagielski 	// Kerning
402*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_KERNING );
403*b1cdbd2cSJim Jagielski 	if( ISITEMSET )
404*b1cdbd2cSJim Jagielski 	{
405*b1cdbd2cSJim Jagielski 		const SvxKerningItem& rItem = ( SvxKerningItem& ) rSet.Get( nWhich );
406*b1cdbd2cSJim Jagielski 		short nKern = ( short )
407*b1cdbd2cSJim Jagielski 						LogicToLogic( rItem.GetValue(), ( MapUnit ) rSet.GetPool()->GetMetric( nWhich ), MAP_TWIP );
408*b1cdbd2cSJim Jagielski 		rFont.SetFixKerning( nKern );
409*b1cdbd2cSJim Jagielski         rCJKFont.SetFixKerning( nKern );
410*b1cdbd2cSJim Jagielski 		rCTLFont.SetFixKerning( nKern );
411*b1cdbd2cSJim Jagielski 	}
412*b1cdbd2cSJim Jagielski 
413*b1cdbd2cSJim Jagielski 	// Escapement
414*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_ESCAPEMENT );
415*b1cdbd2cSJim Jagielski 	const sal_uInt8 nProp = 100;
416*b1cdbd2cSJim Jagielski 	short nEsc;
417*b1cdbd2cSJim Jagielski 	sal_uInt8 nEscProp;
418*b1cdbd2cSJim Jagielski 	if( ISITEMSET )
419*b1cdbd2cSJim Jagielski 	{
420*b1cdbd2cSJim Jagielski 		const SvxEscapementItem& rItem = ( SvxEscapementItem& ) rSet.Get( nWhich );
421*b1cdbd2cSJim Jagielski 		nEsc = rItem.GetEsc();
422*b1cdbd2cSJim Jagielski 		nEscProp = rItem.GetProp();
423*b1cdbd2cSJim Jagielski 
424*b1cdbd2cSJim Jagielski 		if( nEsc == DFLT_ESC_AUTO_SUPER )
425*b1cdbd2cSJim Jagielski 			nEsc = DFLT_ESC_SUPER;
426*b1cdbd2cSJim Jagielski 		else if( nEsc == DFLT_ESC_AUTO_SUB )
427*b1cdbd2cSJim Jagielski 			nEsc = DFLT_ESC_SUB;
428*b1cdbd2cSJim Jagielski 	}
429*b1cdbd2cSJim Jagielski 	else
430*b1cdbd2cSJim Jagielski 	{
431*b1cdbd2cSJim Jagielski 		nEsc  = 0;
432*b1cdbd2cSJim Jagielski 		nEscProp = 100;
433*b1cdbd2cSJim Jagielski 	}
434*b1cdbd2cSJim Jagielski 
435*b1cdbd2cSJim Jagielski 	SetPrevFontEscapement( nProp, nEscProp, nEsc );
436*b1cdbd2cSJim Jagielski 
437*b1cdbd2cSJim Jagielski 	// Font width scale
438*b1cdbd2cSJim Jagielski 	SetPrevFontWidthScale( rSet );
439*b1cdbd2cSJim Jagielski 
440*b1cdbd2cSJim Jagielski     m_aPreviewWin.Invalidate();
441*b1cdbd2cSJim Jagielski }
442*b1cdbd2cSJim Jagielski 
443*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
444*b1cdbd2cSJim Jagielski 
SetPrevFontSize(const SfxItemSet & rSet,sal_uInt16 nSlot,SvxFont & rFont)445*b1cdbd2cSJim Jagielski void SvxCharBasePage::SetPrevFontSize( const SfxItemSet& rSet, sal_uInt16 nSlot, SvxFont& rFont )
446*b1cdbd2cSJim Jagielski {
447*b1cdbd2cSJim Jagielski 	sal_uInt16 nWhich = GetWhich( nSlot );
448*b1cdbd2cSJim Jagielski 	long nH;
449*b1cdbd2cSJim Jagielski 	if( rSet.GetItemState( nWhich ) >= SFX_ITEM_SET )
450*b1cdbd2cSJim Jagielski 	{
451*b1cdbd2cSJim Jagielski 		nH = LogicToLogic(	( ( SvxFontHeightItem& ) rSet.Get( nWhich ) ).GetHeight(),
452*b1cdbd2cSJim Jagielski 							( MapUnit ) rSet.GetPool()->GetMetric( nWhich ),
453*b1cdbd2cSJim Jagielski 							MAP_TWIP );
454*b1cdbd2cSJim Jagielski 	}
455*b1cdbd2cSJim Jagielski 	else
456*b1cdbd2cSJim Jagielski 		nH = 240;	// as default 12pt
457*b1cdbd2cSJim Jagielski 
458*b1cdbd2cSJim Jagielski 	rFont.SetSize( Size( 0, nH ) );
459*b1cdbd2cSJim Jagielski }
460*b1cdbd2cSJim Jagielski 
461*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
462*b1cdbd2cSJim Jagielski 
SetPrevFont(const SfxItemSet & rSet,sal_uInt16 nSlot,SvxFont & rFont)463*b1cdbd2cSJim Jagielski void SvxCharBasePage::SetPrevFont( const SfxItemSet& rSet, sal_uInt16 nSlot, SvxFont& rFont )
464*b1cdbd2cSJim Jagielski {
465*b1cdbd2cSJim Jagielski 	sal_uInt16 nWhich = GetWhich( nSlot );
466*b1cdbd2cSJim Jagielski 	if( ISITEMSET )
467*b1cdbd2cSJim Jagielski 	{
468*b1cdbd2cSJim Jagielski 		const SvxFontItem& rFontItem = ( SvxFontItem& ) rSet.Get( nWhich );
469*b1cdbd2cSJim Jagielski 		rFont.SetFamily( rFontItem.GetFamily() );
470*b1cdbd2cSJim Jagielski 		rFont.SetName( rFontItem.GetFamilyName() );
471*b1cdbd2cSJim Jagielski 		rFont.SetPitch( rFontItem.GetPitch() );
472*b1cdbd2cSJim Jagielski 		rFont.SetCharSet( rFontItem.GetCharSet() );
473*b1cdbd2cSJim Jagielski 		rFont.SetStyleName( rFontItem.GetStyleName() );
474*b1cdbd2cSJim Jagielski 	}
475*b1cdbd2cSJim Jagielski }
476*b1cdbd2cSJim Jagielski 
477*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
478*b1cdbd2cSJim Jagielski 
SetPrevFontStyle(const SfxItemSet & rSet,sal_uInt16 nPosture,sal_uInt16 nWeight,SvxFont & rFont)479*b1cdbd2cSJim Jagielski void SvxCharBasePage::SetPrevFontStyle( const SfxItemSet& rSet, sal_uInt16 nPosture, sal_uInt16 nWeight, SvxFont& rFont )
480*b1cdbd2cSJim Jagielski {
481*b1cdbd2cSJim Jagielski 	sal_uInt16 nWhich = GetWhich( nPosture );
482*b1cdbd2cSJim Jagielski 	if( ISITEMSET )
483*b1cdbd2cSJim Jagielski 	{
484*b1cdbd2cSJim Jagielski 		const SvxPostureItem& rItem = ( SvxPostureItem& ) rSet.Get( nWhich );
485*b1cdbd2cSJim Jagielski 		rFont.SetItalic( ( FontItalic ) rItem.GetValue() != ITALIC_NONE ? ITALIC_NORMAL : ITALIC_NONE );
486*b1cdbd2cSJim Jagielski 	}
487*b1cdbd2cSJim Jagielski 
488*b1cdbd2cSJim Jagielski     nWhich = GetWhich( nWeight );
489*b1cdbd2cSJim Jagielski 	if( ISITEMSET )
490*b1cdbd2cSJim Jagielski 	{
491*b1cdbd2cSJim Jagielski 		SvxWeightItem& rItem = ( SvxWeightItem& ) rSet.Get( nWhich );
492*b1cdbd2cSJim Jagielski 		rFont.SetWeight( ( FontWeight ) rItem.GetValue() != WEIGHT_NORMAL ? WEIGHT_BOLD : WEIGHT_NORMAL );
493*b1cdbd2cSJim Jagielski 	}
494*b1cdbd2cSJim Jagielski }
495*b1cdbd2cSJim Jagielski 
496*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
497*b1cdbd2cSJim Jagielski 
SetPrevFontWidthScale(const SfxItemSet & rSet)498*b1cdbd2cSJim Jagielski void SvxCharBasePage::SetPrevFontWidthScale( const SfxItemSet& rSet )
499*b1cdbd2cSJim Jagielski {
500*b1cdbd2cSJim Jagielski 	sal_uInt16	nWhich = GetWhich( SID_ATTR_CHAR_SCALEWIDTH );
501*b1cdbd2cSJim Jagielski 	if( ISITEMSET )
502*b1cdbd2cSJim Jagielski 	{
503*b1cdbd2cSJim Jagielski 		const SvxCharScaleWidthItem&	rItem = ( SvxCharScaleWidthItem& ) rSet.Get( nWhich );
504*b1cdbd2cSJim Jagielski 
505*b1cdbd2cSJim Jagielski 		m_aPreviewWin.SetFontWidthScale( rItem.GetValue() );
506*b1cdbd2cSJim Jagielski 	}
507*b1cdbd2cSJim Jagielski }
508*b1cdbd2cSJim Jagielski 
509*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
510*b1cdbd2cSJim Jagielski namespace
511*b1cdbd2cSJim Jagielski {
512*b1cdbd2cSJim Jagielski 	// -----------------------------------------------------------------------
setPrevFontEscapement(SvxFont & _rFont,sal_uInt8 nProp,sal_uInt8 nEscProp,short nEsc)513*b1cdbd2cSJim Jagielski 	void setPrevFontEscapement(SvxFont& _rFont,sal_uInt8 nProp, sal_uInt8 nEscProp, short nEsc )
514*b1cdbd2cSJim Jagielski 	{
515*b1cdbd2cSJim Jagielski 		_rFont.SetPropr( nProp );
516*b1cdbd2cSJim Jagielski 		_rFont.SetProprRel( nEscProp );
517*b1cdbd2cSJim Jagielski 		_rFont.SetEscapement( nEsc );
518*b1cdbd2cSJim Jagielski 	}
519*b1cdbd2cSJim Jagielski 	// -----------------------------------------------------------------------
520*b1cdbd2cSJim Jagielski 	// -----------------------------------------------------------------------
521*b1cdbd2cSJim Jagielski }
522*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
523*b1cdbd2cSJim Jagielski 
SetPrevFontEscapement(sal_uInt8 nProp,sal_uInt8 nEscProp,short nEsc)524*b1cdbd2cSJim Jagielski void SvxCharBasePage::SetPrevFontEscapement( sal_uInt8 nProp, sal_uInt8 nEscProp, short nEsc )
525*b1cdbd2cSJim Jagielski {
526*b1cdbd2cSJim Jagielski 	setPrevFontEscapement(GetPreviewFont(),nProp,nEscProp,nEsc);
527*b1cdbd2cSJim Jagielski 	setPrevFontEscapement(GetPreviewCJKFont(),nProp,nEscProp,nEsc);
528*b1cdbd2cSJim Jagielski 	setPrevFontEscapement(GetPreviewCTLFont(),nProp,nEscProp,nEsc);
529*b1cdbd2cSJim Jagielski     m_aPreviewWin.Invalidate();
530*b1cdbd2cSJim Jagielski }
531*b1cdbd2cSJim Jagielski 
532*b1cdbd2cSJim Jagielski // SvxCharNamePage_Impl --------------------------------------------------
533*b1cdbd2cSJim Jagielski 
534*b1cdbd2cSJim Jagielski struct SvxCharNamePage_Impl
535*b1cdbd2cSJim Jagielski {
536*b1cdbd2cSJim Jagielski 	Timer			m_aUpdateTimer;
537*b1cdbd2cSJim Jagielski 	String			m_aNoStyleText;
538*b1cdbd2cSJim Jagielski 	String			m_aTransparentText;
539*b1cdbd2cSJim Jagielski 	const FontList*	m_pFontList;
540*b1cdbd2cSJim Jagielski 	sal_uInt16			m_nExtraEntryPos;
541*b1cdbd2cSJim Jagielski 	sal_Bool			m_bMustDelete;
542*b1cdbd2cSJim Jagielski 	sal_Bool			m_bInSearchMode;
543*b1cdbd2cSJim Jagielski 
SvxCharNamePage_ImplSvxCharNamePage_Impl544*b1cdbd2cSJim Jagielski 	SvxCharNamePage_Impl() :
545*b1cdbd2cSJim Jagielski 
546*b1cdbd2cSJim Jagielski 		m_pFontList		( NULL ),
547*b1cdbd2cSJim Jagielski 		m_nExtraEntryPos( LISTBOX_ENTRY_NOTFOUND ),
548*b1cdbd2cSJim Jagielski 		m_bMustDelete	( sal_False ),
549*b1cdbd2cSJim Jagielski         m_bInSearchMode ( sal_False )
550*b1cdbd2cSJim Jagielski 
551*b1cdbd2cSJim Jagielski 	{
552*b1cdbd2cSJim Jagielski 		m_aUpdateTimer.SetTimeout( 350 );
553*b1cdbd2cSJim Jagielski 	}
554*b1cdbd2cSJim Jagielski 
~SvxCharNamePage_ImplSvxCharNamePage_Impl555*b1cdbd2cSJim Jagielski 	~SvxCharNamePage_Impl()
556*b1cdbd2cSJim Jagielski 	{
557*b1cdbd2cSJim Jagielski 		if ( m_bMustDelete )
558*b1cdbd2cSJim Jagielski 			delete m_pFontList;
559*b1cdbd2cSJim Jagielski 	}
560*b1cdbd2cSJim Jagielski };
561*b1cdbd2cSJim Jagielski 
562*b1cdbd2cSJim Jagielski // class SvxCharNamePage -------------------------------------------------
563*b1cdbd2cSJim Jagielski 
SvxCharNamePage(Window * pParent,const SfxItemSet & rInSet)564*b1cdbd2cSJim Jagielski SvxCharNamePage::SvxCharNamePage( Window* pParent, const SfxItemSet& rInSet ) :
565*b1cdbd2cSJim Jagielski 
566*b1cdbd2cSJim Jagielski 	SvxCharBasePage( pParent, CUI_RES( RID_SVXPAGE_CHAR_NAME ), rInSet, WIN_CHAR_PREVIEW, FT_CHAR_FONTTYPE ),
567*b1cdbd2cSJim Jagielski     m_pImpl                 ( new SvxCharNamePage_Impl )
568*b1cdbd2cSJim Jagielski {
569*b1cdbd2cSJim Jagielski 	m_pImpl->m_aNoStyleText = String( CUI_RES( STR_CHARNAME_NOSTYLE ) );
570*b1cdbd2cSJim Jagielski 	m_pImpl->m_aTransparentText = String( CUI_RES( STR_CHARNAME_TRANSPARENT ) );
571*b1cdbd2cSJim Jagielski 
572*b1cdbd2cSJim Jagielski 	SvtLanguageOptions aLanguageOptions;
573*b1cdbd2cSJim Jagielski     sal_Bool bCJK = ( aLanguageOptions.IsCJKFontEnabled() || aLanguageOptions.IsCTLFontEnabled() );
574*b1cdbd2cSJim Jagielski 
575*b1cdbd2cSJim Jagielski     m_pWestLine         = new FixedLine( this, CUI_RES( FL_WEST ) );
576*b1cdbd2cSJim Jagielski     m_pWestFontNameFT   = new FixedText( this, CUI_RES( bCJK ? FT_WEST_NAME : FT_WEST_NAME_NOCJK ) );
577*b1cdbd2cSJim Jagielski     m_pWestFontNameLB   = new FontNameBox( this, CUI_RES( bCJK ? LB_WEST_NAME : LB_WEST_NAME_NOCJK ) );
578*b1cdbd2cSJim Jagielski     m_pWestFontStyleFT  = new FixedText( this, CUI_RES( bCJK ? FT_WEST_STYLE : FT_WEST_STYLE_NOCJK ) );
579*b1cdbd2cSJim Jagielski     m_pWestFontStyleLB  = new FontStyleBox( this, CUI_RES( bCJK ? LB_WEST_STYLE : LB_WEST_STYLE_NOCJK ) );
580*b1cdbd2cSJim Jagielski     m_pWestFontSizeFT   = new FixedText( this, CUI_RES( bCJK ? FT_WEST_SIZE : FT_WEST_SIZE_NOCJK ) );
581*b1cdbd2cSJim Jagielski     m_pWestFontSizeLB   = new FontSizeBox( this, CUI_RES( bCJK ? LB_WEST_SIZE : LB_WEST_SIZE_NOCJK ) );
582*b1cdbd2cSJim Jagielski 
583*b1cdbd2cSJim Jagielski     if( !bCJK )
584*b1cdbd2cSJim Jagielski     {
585*b1cdbd2cSJim Jagielski         m_pColorFL  = new FixedLine( this, CUI_RES( FL_COLOR2 ) );
586*b1cdbd2cSJim Jagielski         m_pColorFT  = new FixedText( this, CUI_RES( FT_COLOR2 ) );
587*b1cdbd2cSJim Jagielski         m_pColorLB  = new ColorListBox( this, CUI_RES( LB_COLOR2 ) );
588*b1cdbd2cSJim Jagielski     }
589*b1cdbd2cSJim Jagielski 
590*b1cdbd2cSJim Jagielski     m_pWestFontLanguageFT   = new FixedText( this, CUI_RES( bCJK ? FT_WEST_LANG : FT_WEST_LANG_NOCJK ) );
591*b1cdbd2cSJim Jagielski     m_pWestFontLanguageLB   = new SvxLanguageBox( this, CUI_RES( bCJK ? LB_WEST_LANG : LB_WEST_LANG_NOCJK ) );
592*b1cdbd2cSJim Jagielski 
593*b1cdbd2cSJim Jagielski     m_pEastLine             = new FixedLine( this, CUI_RES( FL_EAST ) );
594*b1cdbd2cSJim Jagielski     m_pEastFontNameFT       = new FixedText( this, CUI_RES( FT_EAST_NAME ) );
595*b1cdbd2cSJim Jagielski     m_pEastFontNameLB       = new FontNameBox( this, CUI_RES( LB_EAST_NAME ) );
596*b1cdbd2cSJim Jagielski     m_pEastFontStyleFT      = new FixedText( this, CUI_RES( FT_EAST_STYLE ) );
597*b1cdbd2cSJim Jagielski     m_pEastFontStyleLB      = new FontStyleBox( this, CUI_RES( LB_EAST_STYLE ) );
598*b1cdbd2cSJim Jagielski     m_pEastFontSizeFT       = new FixedText( this, CUI_RES( FT_EAST_SIZE ) );
599*b1cdbd2cSJim Jagielski     m_pEastFontSizeLB       = new FontSizeBox( this, CUI_RES( LB_EAST_SIZE ) );
600*b1cdbd2cSJim Jagielski     m_pEastFontLanguageFT   = new FixedText( this, CUI_RES( FT_EAST_LANG ) );
601*b1cdbd2cSJim Jagielski     m_pEastFontLanguageLB   = new SvxLanguageBox( this, CUI_RES( LB_EAST_LANG ) );
602*b1cdbd2cSJim Jagielski 
603*b1cdbd2cSJim Jagielski     m_pCTLLine              = new FixedLine( this, CUI_RES( FL_CTL ) );
604*b1cdbd2cSJim Jagielski     m_pCTLFontNameFT        = new FixedText( this, CUI_RES( FT_CTL_NAME ) );
605*b1cdbd2cSJim Jagielski     m_pCTLFontNameLB        = new FontNameBox( this, CUI_RES( LB_CTL_NAME ) );
606*b1cdbd2cSJim Jagielski     m_pCTLFontStyleFT		= new FixedText( this, CUI_RES( FT_CTL_STYLE ) );
607*b1cdbd2cSJim Jagielski     m_pCTLFontStyleLB		= new FontStyleBox( this, CUI_RES( LB_CTL_STYLE ) );
608*b1cdbd2cSJim Jagielski     m_pCTLFontSizeFT		= new FixedText( this, CUI_RES( FT_CTL_SIZE ) );
609*b1cdbd2cSJim Jagielski     m_pCTLFontSizeLB		= new FontSizeBox( this, CUI_RES( LB_CTL_SIZE ) );
610*b1cdbd2cSJim Jagielski     m_pCTLFontLanguageFT	= new FixedText( this, CUI_RES( FT_CTL_LANG ) );
611*b1cdbd2cSJim Jagielski     m_pCTLFontLanguageLB	= new SvxLanguageBox( this, CUI_RES( LB_CTL_LANG ) );
612*b1cdbd2cSJim Jagielski 
613*b1cdbd2cSJim Jagielski     if( bCJK )
614*b1cdbd2cSJim Jagielski     {
615*b1cdbd2cSJim Jagielski         m_pColorFL  = new FixedLine( this, CUI_RES( FL_COLOR2 ) );
616*b1cdbd2cSJim Jagielski         m_pColorFT  = new FixedText( this, CUI_RES( FT_COLOR2 ) );
617*b1cdbd2cSJim Jagielski         m_pColorLB  = new ColorListBox( this, CUI_RES( LB_COLOR2 ) );
618*b1cdbd2cSJim Jagielski     }
619*b1cdbd2cSJim Jagielski 
620*b1cdbd2cSJim Jagielski     m_pWestLine             ->Show( bCJK );
621*b1cdbd2cSJim Jagielski     m_pColorFL              ->Show( bCJK );
622*b1cdbd2cSJim Jagielski 
623*b1cdbd2cSJim Jagielski 	bCJK = aLanguageOptions.IsCJKFontEnabled();
624*b1cdbd2cSJim Jagielski 	m_pEastLine             ->Show( bCJK );
625*b1cdbd2cSJim Jagielski     m_pEastFontNameFT       ->Show( bCJK );
626*b1cdbd2cSJim Jagielski     m_pEastFontNameLB       ->Show( bCJK );
627*b1cdbd2cSJim Jagielski     m_pEastFontStyleFT      ->Show( bCJK );
628*b1cdbd2cSJim Jagielski     m_pEastFontStyleLB      ->Show( bCJK );
629*b1cdbd2cSJim Jagielski     m_pEastFontSizeFT       ->Show( bCJK );
630*b1cdbd2cSJim Jagielski     m_pEastFontSizeLB       ->Show( bCJK );
631*b1cdbd2cSJim Jagielski     m_pEastFontLanguageFT   ->Show( bCJK );
632*b1cdbd2cSJim Jagielski     m_pEastFontLanguageLB   ->Show( bCJK );
633*b1cdbd2cSJim Jagielski 
634*b1cdbd2cSJim Jagielski 	sal_Bool bShowCTL = aLanguageOptions.IsCTLFontEnabled();
635*b1cdbd2cSJim Jagielski 	if ( bShowCTL && !bCJK )
636*b1cdbd2cSJim Jagielski 	{
637*b1cdbd2cSJim Jagielski 		// move CTL controls to the places of the CJK controls, if these controls aren't visible
638*b1cdbd2cSJim Jagielski 		m_pCTLLine             ->SetPosPixel( m_pEastLine->GetPosPixel() );
639*b1cdbd2cSJim Jagielski     	m_pCTLFontNameFT       ->SetPosPixel( m_pEastFontNameFT->GetPosPixel() );
640*b1cdbd2cSJim Jagielski     	m_pCTLFontNameLB       ->SetPosPixel( m_pEastFontNameLB->GetPosPixel() );
641*b1cdbd2cSJim Jagielski     	m_pCTLFontStyleFT      ->SetPosPixel( m_pEastFontStyleFT->GetPosPixel() );
642*b1cdbd2cSJim Jagielski     	m_pCTLFontStyleLB      ->SetPosPixel( m_pEastFontStyleLB->GetPosPixel() );
643*b1cdbd2cSJim Jagielski     	m_pCTLFontSizeFT       ->SetPosPixel( m_pEastFontSizeFT->GetPosPixel() );
644*b1cdbd2cSJim Jagielski     	m_pCTLFontSizeLB       ->SetPosPixel( m_pEastFontSizeLB->GetPosPixel() );
645*b1cdbd2cSJim Jagielski     	m_pCTLFontLanguageFT   ->SetPosPixel( m_pEastFontLanguageFT->GetPosPixel() );
646*b1cdbd2cSJim Jagielski     	m_pCTLFontLanguageLB   ->SetPosPixel( m_pEastFontLanguageLB->GetPosPixel() );
647*b1cdbd2cSJim Jagielski 	}
648*b1cdbd2cSJim Jagielski 	m_pCTLLine             ->Show( bShowCTL );
649*b1cdbd2cSJim Jagielski     m_pCTLFontNameFT       ->Show( bShowCTL );
650*b1cdbd2cSJim Jagielski     m_pCTLFontNameLB       ->Show( bShowCTL );
651*b1cdbd2cSJim Jagielski     m_pCTLFontStyleFT      ->Show( bShowCTL );
652*b1cdbd2cSJim Jagielski     m_pCTLFontStyleLB      ->Show( bShowCTL );
653*b1cdbd2cSJim Jagielski     m_pCTLFontSizeFT       ->Show( bShowCTL );
654*b1cdbd2cSJim Jagielski     m_pCTLFontSizeLB       ->Show( bShowCTL );
655*b1cdbd2cSJim Jagielski     m_pCTLFontLanguageFT   ->Show( bShowCTL );
656*b1cdbd2cSJim Jagielski     m_pCTLFontLanguageLB   ->Show( bShowCTL );
657*b1cdbd2cSJim Jagielski 
658*b1cdbd2cSJim Jagielski     FreeResource();
659*b1cdbd2cSJim Jagielski 
660*b1cdbd2cSJim Jagielski     m_pWestFontLanguageLB->SetLanguageList( LANG_LIST_WESTERN,	sal_True, sal_False, sal_True );
661*b1cdbd2cSJim Jagielski     m_pEastFontLanguageLB->SetLanguageList( LANG_LIST_CJK,		sal_True, sal_False, sal_True );
662*b1cdbd2cSJim Jagielski     m_pCTLFontLanguageLB->SetLanguageList( LANG_LIST_CTL,		sal_True, sal_False, sal_True );
663*b1cdbd2cSJim Jagielski 
664*b1cdbd2cSJim Jagielski 	Initialize();
665*b1cdbd2cSJim Jagielski }
666*b1cdbd2cSJim Jagielski 
667*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
668*b1cdbd2cSJim Jagielski 
~SvxCharNamePage()669*b1cdbd2cSJim Jagielski SvxCharNamePage::~SvxCharNamePage()
670*b1cdbd2cSJim Jagielski {
671*b1cdbd2cSJim Jagielski 	delete m_pImpl;
672*b1cdbd2cSJim Jagielski 
673*b1cdbd2cSJim Jagielski     delete m_pWestLine;
674*b1cdbd2cSJim Jagielski     delete m_pWestFontNameFT;
675*b1cdbd2cSJim Jagielski     delete m_pWestFontNameLB;
676*b1cdbd2cSJim Jagielski     delete m_pWestFontStyleFT;
677*b1cdbd2cSJim Jagielski     delete m_pWestFontStyleLB;
678*b1cdbd2cSJim Jagielski     delete m_pWestFontSizeFT;
679*b1cdbd2cSJim Jagielski     delete m_pWestFontSizeLB;
680*b1cdbd2cSJim Jagielski     delete m_pWestFontLanguageFT;
681*b1cdbd2cSJim Jagielski     delete m_pWestFontLanguageLB;
682*b1cdbd2cSJim Jagielski 
683*b1cdbd2cSJim Jagielski     delete m_pEastLine;
684*b1cdbd2cSJim Jagielski     delete m_pEastFontNameFT;
685*b1cdbd2cSJim Jagielski     delete m_pEastFontNameLB;
686*b1cdbd2cSJim Jagielski     delete m_pEastFontStyleFT;
687*b1cdbd2cSJim Jagielski     delete m_pEastFontStyleLB;
688*b1cdbd2cSJim Jagielski     delete m_pEastFontSizeFT;
689*b1cdbd2cSJim Jagielski     delete m_pEastFontSizeLB;
690*b1cdbd2cSJim Jagielski     delete m_pEastFontLanguageFT;
691*b1cdbd2cSJim Jagielski     delete m_pEastFontLanguageLB;
692*b1cdbd2cSJim Jagielski 
693*b1cdbd2cSJim Jagielski     delete m_pCTLLine;
694*b1cdbd2cSJim Jagielski     delete m_pCTLFontNameFT;
695*b1cdbd2cSJim Jagielski     delete m_pCTLFontNameLB;
696*b1cdbd2cSJim Jagielski     delete m_pCTLFontStyleFT;
697*b1cdbd2cSJim Jagielski     delete m_pCTLFontStyleLB;
698*b1cdbd2cSJim Jagielski     delete m_pCTLFontSizeFT;
699*b1cdbd2cSJim Jagielski     delete m_pCTLFontSizeLB;
700*b1cdbd2cSJim Jagielski     delete m_pCTLFontLanguageFT;
701*b1cdbd2cSJim Jagielski     delete m_pCTLFontLanguageLB;
702*b1cdbd2cSJim Jagielski 
703*b1cdbd2cSJim Jagielski     delete m_pColorFL;
704*b1cdbd2cSJim Jagielski     delete m_pColorFT;
705*b1cdbd2cSJim Jagielski     delete m_pColorLB;
706*b1cdbd2cSJim Jagielski }
707*b1cdbd2cSJim Jagielski 
708*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
709*b1cdbd2cSJim Jagielski 
Initialize()710*b1cdbd2cSJim Jagielski void SvxCharNamePage::Initialize()
711*b1cdbd2cSJim Jagielski {
712*b1cdbd2cSJim Jagielski 	// to handle the changes of the other pages
713*b1cdbd2cSJim Jagielski 	SetExchangeSupport();
714*b1cdbd2cSJim Jagielski 
715*b1cdbd2cSJim Jagielski 	// fill the color box
716*b1cdbd2cSJim Jagielski 	SfxObjectShell* pDocSh = SfxObjectShell::Current();
717*b1cdbd2cSJim Jagielski 	//DBG_ASSERT( pDocSh, "DocShell not found!" );
718*b1cdbd2cSJim Jagielski 	XColorListSharedPtr aColorTable;
719*b1cdbd2cSJim Jagielski 	const SfxPoolItem* pItem = NULL;
720*b1cdbd2cSJim Jagielski 
721*b1cdbd2cSJim Jagielski 	if ( pDocSh )
722*b1cdbd2cSJim Jagielski     {
723*b1cdbd2cSJim Jagielski         pItem = pDocSh->GetItem( SID_COLOR_TABLE );
724*b1cdbd2cSJim Jagielski         if ( pItem != NULL )
725*b1cdbd2cSJim Jagielski             aColorTable = static_cast< const SvxColorTableItem* >(pItem)->GetColorTable();
726*b1cdbd2cSJim Jagielski     }
727*b1cdbd2cSJim Jagielski 
728*b1cdbd2cSJim Jagielski 	if ( !aColorTable.get() )
729*b1cdbd2cSJim Jagielski 	{
730*b1cdbd2cSJim Jagielski 		aColorTable = XPropertyListFactory::CreateSharedXColorList(SvtPathOptions().GetPalettePath());
731*b1cdbd2cSJim Jagielski 	}
732*b1cdbd2cSJim Jagielski 
733*b1cdbd2cSJim Jagielski     m_pColorLB->SetUpdateMode( sal_False );
734*b1cdbd2cSJim Jagielski 
735*b1cdbd2cSJim Jagielski 	{
736*b1cdbd2cSJim Jagielski 		SfxPoolItem* pDummy;
737*b1cdbd2cSJim Jagielski 		SfxViewFrame* pFrame = SfxViewFrame::GetFirst( pDocSh );
738*b1cdbd2cSJim Jagielski 		if( !pFrame || SFX_ITEM_DEFAULT > pFrame->GetBindings().QueryState(
739*b1cdbd2cSJim Jagielski 									SID_ATTR_AUTO_COLOR_INVALID, pDummy ))
740*b1cdbd2cSJim Jagielski 	    	m_pColorLB->InsertEntry( Color( COL_AUTO ),
741*b1cdbd2cSJim Jagielski 								 	SVX_RESSTR( RID_SVXSTR_AUTOMATIC ));
742*b1cdbd2cSJim Jagielski 	}
743*b1cdbd2cSJim Jagielski 
744*b1cdbd2cSJim Jagielski     for ( long i = 0; i < aColorTable->Count(); i++ )
745*b1cdbd2cSJim Jagielski 	{
746*b1cdbd2cSJim Jagielski         XColorEntry* pEntry = aColorTable->GetColor(i);
747*b1cdbd2cSJim Jagielski         m_pColorLB->InsertEntry( pEntry->GetColor(), pEntry->GetName() );
748*b1cdbd2cSJim Jagielski 	}
749*b1cdbd2cSJim Jagielski 
750*b1cdbd2cSJim Jagielski     m_pColorLB->SetUpdateMode( sal_True );
751*b1cdbd2cSJim Jagielski     m_pColorLB->SetSelectHdl( LINK( this, SvxCharNamePage, ColorBoxSelectHdl_Impl ) );
752*b1cdbd2cSJim Jagielski 
753*b1cdbd2cSJim Jagielski 	Link aLink = LINK( this, SvxCharNamePage, FontModifyHdl_Impl );
754*b1cdbd2cSJim Jagielski     m_pWestFontNameLB->SetModifyHdl( aLink );
755*b1cdbd2cSJim Jagielski     m_pWestFontStyleLB->SetModifyHdl( aLink );
756*b1cdbd2cSJim Jagielski     m_pWestFontSizeLB->SetModifyHdl( aLink );
757*b1cdbd2cSJim Jagielski     m_pEastFontNameLB->SetModifyHdl( aLink );
758*b1cdbd2cSJim Jagielski     m_pEastFontStyleLB->SetModifyHdl( aLink );
759*b1cdbd2cSJim Jagielski     m_pEastFontSizeLB->SetModifyHdl( aLink );
760*b1cdbd2cSJim Jagielski     m_pCTLFontNameLB->SetModifyHdl( aLink );
761*b1cdbd2cSJim Jagielski     m_pCTLFontStyleLB->SetModifyHdl( aLink );
762*b1cdbd2cSJim Jagielski     m_pCTLFontSizeLB->SetModifyHdl( aLink );
763*b1cdbd2cSJim Jagielski 
764*b1cdbd2cSJim Jagielski 	m_pImpl->m_aUpdateTimer.SetTimeoutHdl( LINK( this, SvxCharNamePage, UpdateHdl_Impl ) );
765*b1cdbd2cSJim Jagielski 
766*b1cdbd2cSJim Jagielski     m_pColorFL->Hide();
767*b1cdbd2cSJim Jagielski     m_pColorFT->Hide();
768*b1cdbd2cSJim Jagielski     m_pColorLB->Hide();
769*b1cdbd2cSJim Jagielski }
770*b1cdbd2cSJim Jagielski 
771*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
772*b1cdbd2cSJim Jagielski 
GetFontList() const773*b1cdbd2cSJim Jagielski const FontList* SvxCharNamePage::GetFontList() const
774*b1cdbd2cSJim Jagielski {
775*b1cdbd2cSJim Jagielski     if ( !m_pImpl->m_pFontList )
776*b1cdbd2cSJim Jagielski     {
777*b1cdbd2cSJim Jagielski         SfxObjectShell* pDocSh = SfxObjectShell::Current();
778*b1cdbd2cSJim Jagielski         const SfxPoolItem* pItem;
779*b1cdbd2cSJim Jagielski 
780*b1cdbd2cSJim Jagielski         /* #110771# SvxFontListItem::GetFontList can return NULL */
781*b1cdbd2cSJim Jagielski         if ( pDocSh )
782*b1cdbd2cSJim Jagielski         {
783*b1cdbd2cSJim Jagielski             pItem = pDocSh->GetItem( SID_ATTR_CHAR_FONTLIST );
784*b1cdbd2cSJim Jagielski             if ( pItem != NULL )
785*b1cdbd2cSJim Jagielski             {
786*b1cdbd2cSJim Jagielski                 DBG_ASSERT(NULL != ( (SvxFontListItem*)pItem )->GetFontList(),
787*b1cdbd2cSJim Jagielski                            "Where is the font list?");
788*b1cdbd2cSJim Jagielski                     m_pImpl->m_pFontList =  static_cast<const SvxFontListItem*>(pItem )->GetFontList()->Clone();
789*b1cdbd2cSJim Jagielski                 m_pImpl->m_bMustDelete = sal_True;
790*b1cdbd2cSJim Jagielski             }
791*b1cdbd2cSJim Jagielski         }
792*b1cdbd2cSJim Jagielski         if(!m_pImpl->m_pFontList)
793*b1cdbd2cSJim Jagielski         {
794*b1cdbd2cSJim Jagielski             m_pImpl->m_pFontList =
795*b1cdbd2cSJim Jagielski                 new FontList( Application::GetDefaultDevice() );
796*b1cdbd2cSJim Jagielski             m_pImpl->m_bMustDelete = sal_True;
797*b1cdbd2cSJim Jagielski         }
798*b1cdbd2cSJim Jagielski     }
799*b1cdbd2cSJim Jagielski 
800*b1cdbd2cSJim Jagielski     return m_pImpl->m_pFontList;
801*b1cdbd2cSJim Jagielski }
802*b1cdbd2cSJim Jagielski 
803*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
804*b1cdbd2cSJim Jagielski namespace
805*b1cdbd2cSJim Jagielski {
calcFontInfo(SvxFont & _rFont,SvxCharNamePage * _pPage,const FontNameBox * _pFontNameLB,const FontStyleBox * _pFontStyleLB,const FontSizeBox * _pFontSizeLB,const FontList * _pFontList,sal_uInt16 _nFontWhich,sal_uInt16 _nFontHeightWhich)806*b1cdbd2cSJim Jagielski 	FontInfo calcFontInfo(	SvxFont& _rFont,
807*b1cdbd2cSJim Jagielski 					SvxCharNamePage* _pPage,
808*b1cdbd2cSJim Jagielski 					const FontNameBox* _pFontNameLB,
809*b1cdbd2cSJim Jagielski 					const FontStyleBox* _pFontStyleLB,
810*b1cdbd2cSJim Jagielski 					const FontSizeBox* _pFontSizeLB,
811*b1cdbd2cSJim Jagielski 					const FontList* _pFontList,
812*b1cdbd2cSJim Jagielski 					sal_uInt16 _nFontWhich,
813*b1cdbd2cSJim Jagielski 					sal_uInt16 _nFontHeightWhich)
814*b1cdbd2cSJim Jagielski 	{
815*b1cdbd2cSJim Jagielski 		Size aSize = _rFont.GetSize();
816*b1cdbd2cSJim Jagielski 		aSize.Width() = 0;
817*b1cdbd2cSJim Jagielski 		FontInfo aFontInfo;
818*b1cdbd2cSJim Jagielski 		String sFontName(_pFontNameLB->GetText());
819*b1cdbd2cSJim Jagielski 		sal_Bool bFontAvailable = _pFontList->IsAvailable( sFontName );
820*b1cdbd2cSJim Jagielski 		if(bFontAvailable  || _pFontNameLB->GetSavedValue() != sFontName)
821*b1cdbd2cSJim Jagielski 			aFontInfo = _pFontList->Get( sFontName, _pFontStyleLB->GetText() );
822*b1cdbd2cSJim Jagielski 		else
823*b1cdbd2cSJim Jagielski 		{
824*b1cdbd2cSJim Jagielski 			//get the font from itemset
825*b1cdbd2cSJim Jagielski 			SfxItemState eState = _pPage->GetItemSet().GetItemState( _nFontWhich );
826*b1cdbd2cSJim Jagielski 			if ( eState >= SFX_ITEM_DEFAULT )
827*b1cdbd2cSJim Jagielski 			{
828*b1cdbd2cSJim Jagielski 				const SvxFontItem* pFontItem = (const SvxFontItem*)&( _pPage->GetItemSet().Get( _nFontWhich ) );
829*b1cdbd2cSJim Jagielski 				aFontInfo.SetName(pFontItem->GetFamilyName());
830*b1cdbd2cSJim Jagielski 				aFontInfo.SetStyleName(pFontItem->GetStyleName());
831*b1cdbd2cSJim Jagielski 				aFontInfo.SetFamily(pFontItem->GetFamily());
832*b1cdbd2cSJim Jagielski 				aFontInfo.SetPitch(pFontItem->GetPitch());
833*b1cdbd2cSJim Jagielski 				aFontInfo.SetCharSet(pFontItem->GetCharSet());
834*b1cdbd2cSJim Jagielski 			}
835*b1cdbd2cSJim Jagielski 		}
836*b1cdbd2cSJim Jagielski 		if ( _pFontSizeLB->IsRelative() )
837*b1cdbd2cSJim Jagielski 		{
838*b1cdbd2cSJim Jagielski 			DBG_ASSERT( _pPage->GetItemSet().GetParent(), "No parent set" );
839*b1cdbd2cSJim Jagielski 			const SvxFontHeightItem& rOldItem = (SvxFontHeightItem&)_pPage->GetItemSet().GetParent()->Get( _nFontHeightWhich );
840*b1cdbd2cSJim Jagielski 
841*b1cdbd2cSJim Jagielski 			// alter Wert, skaliert
842*b1cdbd2cSJim Jagielski 			long nHeight;
843*b1cdbd2cSJim Jagielski 			if ( _pFontSizeLB->IsPtRelative() )
844*b1cdbd2cSJim Jagielski 				nHeight = rOldItem.GetHeight() + PointToTwips( static_cast<long>(_pFontSizeLB->GetValue() / 10) );
845*b1cdbd2cSJim Jagielski 			else
846*b1cdbd2cSJim Jagielski 				nHeight = static_cast<long>(rOldItem.GetHeight() * _pFontSizeLB->GetValue() / 100);
847*b1cdbd2cSJim Jagielski 
848*b1cdbd2cSJim Jagielski 			// Umrechnung in twips fuer das Beispiel-Window
849*b1cdbd2cSJim Jagielski 			aSize.Height() =
850*b1cdbd2cSJim Jagielski 				ItemToControl( nHeight, _pPage->GetItemSet().GetPool()->GetMetric( _nFontHeightWhich ), SFX_FUNIT_TWIP );
851*b1cdbd2cSJim Jagielski 		}
852*b1cdbd2cSJim Jagielski 		else if ( _pFontSizeLB->GetText().Len() )
853*b1cdbd2cSJim Jagielski 			aSize.Height() = PointToTwips( static_cast<long>(_pFontSizeLB->GetValue() / 10) );
854*b1cdbd2cSJim Jagielski 		else
855*b1cdbd2cSJim Jagielski 			aSize.Height() = 200;	// default 10pt
856*b1cdbd2cSJim Jagielski 		aFontInfo.SetSize( aSize );
857*b1cdbd2cSJim Jagielski 
858*b1cdbd2cSJim Jagielski 		_rFont.SetFamily( aFontInfo.GetFamily() );
859*b1cdbd2cSJim Jagielski 		_rFont.SetName( aFontInfo.GetName() );
860*b1cdbd2cSJim Jagielski 		_rFont.SetStyleName( aFontInfo.GetStyleName() );
861*b1cdbd2cSJim Jagielski 		_rFont.SetPitch( aFontInfo.GetPitch() );
862*b1cdbd2cSJim Jagielski 		_rFont.SetCharSet( aFontInfo.GetCharSet() );
863*b1cdbd2cSJim Jagielski 		_rFont.SetWeight( aFontInfo.GetWeight() );
864*b1cdbd2cSJim Jagielski 		_rFont.SetItalic( aFontInfo.GetItalic() );
865*b1cdbd2cSJim Jagielski 		_rFont.SetSize( aFontInfo.GetSize() );
866*b1cdbd2cSJim Jagielski 
867*b1cdbd2cSJim Jagielski 		return aFontInfo;
868*b1cdbd2cSJim Jagielski 	}
869*b1cdbd2cSJim Jagielski }
870*b1cdbd2cSJim Jagielski 
871*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
872*b1cdbd2cSJim Jagielski 
UpdatePreview_Impl()873*b1cdbd2cSJim Jagielski void SvxCharNamePage::UpdatePreview_Impl()
874*b1cdbd2cSJim Jagielski {
875*b1cdbd2cSJim Jagielski 	SvxFont& rFont = GetPreviewFont();
876*b1cdbd2cSJim Jagielski     SvxFont& rCJKFont = GetPreviewCJKFont();
877*b1cdbd2cSJim Jagielski 	SvxFont& rCTLFont = GetPreviewCTLFont();
878*b1cdbd2cSJim Jagielski 	// Size
879*b1cdbd2cSJim Jagielski 	Size aSize = rFont.GetSize();
880*b1cdbd2cSJim Jagielski 	aSize.Width() = 0;
881*b1cdbd2cSJim Jagielski     Size aCJKSize = rCJKFont.GetSize();
882*b1cdbd2cSJim Jagielski     aCJKSize.Width() = 0;
883*b1cdbd2cSJim Jagielski 	Size aCTLSize = rCTLFont.GetSize();
884*b1cdbd2cSJim Jagielski     aCTLSize.Width() = 0;
885*b1cdbd2cSJim Jagielski 	// Font
886*b1cdbd2cSJim Jagielski 	const FontList* pFontList = GetFontList();
887*b1cdbd2cSJim Jagielski 	FontInfo aFontInfo =
888*b1cdbd2cSJim Jagielski 		calcFontInfo(rFont,this,m_pWestFontNameLB,m_pWestFontStyleLB,m_pWestFontSizeLB,pFontList,GetWhich( SID_ATTR_CHAR_FONT ),GetWhich( SID_ATTR_CHAR_FONTHEIGHT ));
889*b1cdbd2cSJim Jagielski 
890*b1cdbd2cSJim Jagielski 	calcFontInfo(rCJKFont,this,m_pEastFontNameLB,m_pEastFontStyleLB,m_pEastFontSizeLB,pFontList,GetWhich( SID_ATTR_CHAR_CJK_FONT ),GetWhich( SID_ATTR_CHAR_CJK_FONTHEIGHT ));
891*b1cdbd2cSJim Jagielski 
892*b1cdbd2cSJim Jagielski 	calcFontInfo(rCTLFont,this,m_pCTLFontNameLB,m_pCTLFontStyleLB,m_pCTLFontSizeLB,pFontList,GetWhich( SID_ATTR_CHAR_CTL_FONT ),GetWhich( SID_ATTR_CHAR_CTL_FONTHEIGHT ));
893*b1cdbd2cSJim Jagielski 
894*b1cdbd2cSJim Jagielski     m_aPreviewWin.Invalidate();
895*b1cdbd2cSJim Jagielski     m_aFontTypeFT.SetText( pFontList->GetFontMapText( aFontInfo ) );
896*b1cdbd2cSJim Jagielski }
897*b1cdbd2cSJim Jagielski 
898*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
899*b1cdbd2cSJim Jagielski 
FillStyleBox_Impl(const FontNameBox * pNameBox)900*b1cdbd2cSJim Jagielski void SvxCharNamePage::FillStyleBox_Impl( const FontNameBox* pNameBox )
901*b1cdbd2cSJim Jagielski {
902*b1cdbd2cSJim Jagielski 	const FontList* pFontList = GetFontList();
903*b1cdbd2cSJim Jagielski 	DBG_ASSERT( pFontList, "no fontlist" );
904*b1cdbd2cSJim Jagielski 
905*b1cdbd2cSJim Jagielski 	FontStyleBox* pStyleBox = NULL;
906*b1cdbd2cSJim Jagielski 
907*b1cdbd2cSJim Jagielski     if ( m_pWestFontNameLB == pNameBox )
908*b1cdbd2cSJim Jagielski 		pStyleBox = m_pWestFontStyleLB;
909*b1cdbd2cSJim Jagielski     else if ( m_pEastFontNameLB == pNameBox )
910*b1cdbd2cSJim Jagielski 		pStyleBox = m_pEastFontStyleLB;
911*b1cdbd2cSJim Jagielski     else if ( m_pCTLFontNameLB == pNameBox )
912*b1cdbd2cSJim Jagielski         pStyleBox = m_pCTLFontStyleLB;
913*b1cdbd2cSJim Jagielski 	else
914*b1cdbd2cSJim Jagielski 	{
915*b1cdbd2cSJim Jagielski 		DBG_ERRORFILE( "invalid font name box" );
916*b1cdbd2cSJim Jagielski 	}
917*b1cdbd2cSJim Jagielski 
918*b1cdbd2cSJim Jagielski 	pStyleBox->Fill( pNameBox->GetText(), pFontList );
919*b1cdbd2cSJim Jagielski 
920*b1cdbd2cSJim Jagielski 	if ( m_pImpl->m_bInSearchMode )
921*b1cdbd2cSJim Jagielski 	{
922*b1cdbd2cSJim Jagielski 		// Bei der Suche zus"atzliche Eintr"age:
923*b1cdbd2cSJim Jagielski 		// "Nicht Fett" und "Nicht Kursiv"
924*b1cdbd2cSJim Jagielski 		String aEntry = m_pImpl->m_aNoStyleText;
925*b1cdbd2cSJim Jagielski 		const sal_Char sS[] = "%1";
926*b1cdbd2cSJim Jagielski 		aEntry.SearchAndReplaceAscii( sS, pFontList->GetBoldStr() );
927*b1cdbd2cSJim Jagielski         m_pImpl->m_nExtraEntryPos = pStyleBox->InsertEntry( aEntry );
928*b1cdbd2cSJim Jagielski 		aEntry = m_pImpl->m_aNoStyleText;
929*b1cdbd2cSJim Jagielski 		aEntry.SearchAndReplaceAscii( sS, pFontList->GetItalicStr() );
930*b1cdbd2cSJim Jagielski         pStyleBox->InsertEntry( aEntry );
931*b1cdbd2cSJim Jagielski 	}
932*b1cdbd2cSJim Jagielski }
933*b1cdbd2cSJim Jagielski 
934*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
935*b1cdbd2cSJim Jagielski 
FillSizeBox_Impl(const FontNameBox * pNameBox)936*b1cdbd2cSJim Jagielski void SvxCharNamePage::FillSizeBox_Impl( const FontNameBox* pNameBox )
937*b1cdbd2cSJim Jagielski {
938*b1cdbd2cSJim Jagielski 	const FontList* pFontList = GetFontList();
939*b1cdbd2cSJim Jagielski 	DBG_ASSERT( pFontList, "no fontlist" );
940*b1cdbd2cSJim Jagielski 
941*b1cdbd2cSJim Jagielski 	FontStyleBox* pStyleBox = NULL;
942*b1cdbd2cSJim Jagielski 	FontSizeBox* pSizeBox = NULL;
943*b1cdbd2cSJim Jagielski 
944*b1cdbd2cSJim Jagielski     if ( m_pWestFontNameLB == pNameBox )
945*b1cdbd2cSJim Jagielski 	{
946*b1cdbd2cSJim Jagielski 		pStyleBox = m_pWestFontStyleLB;
947*b1cdbd2cSJim Jagielski 		pSizeBox = m_pWestFontSizeLB;
948*b1cdbd2cSJim Jagielski 	}
949*b1cdbd2cSJim Jagielski     else if ( m_pEastFontNameLB == pNameBox )
950*b1cdbd2cSJim Jagielski 	{
951*b1cdbd2cSJim Jagielski 		pStyleBox = m_pEastFontStyleLB;
952*b1cdbd2cSJim Jagielski 		pSizeBox = m_pEastFontSizeLB;
953*b1cdbd2cSJim Jagielski 	}
954*b1cdbd2cSJim Jagielski     else if ( m_pCTLFontNameLB == pNameBox )
955*b1cdbd2cSJim Jagielski 	{
956*b1cdbd2cSJim Jagielski         pStyleBox = m_pCTLFontStyleLB;
957*b1cdbd2cSJim Jagielski 		pSizeBox = m_pCTLFontSizeLB;
958*b1cdbd2cSJim Jagielski 	}
959*b1cdbd2cSJim Jagielski 	else
960*b1cdbd2cSJim Jagielski 	{
961*b1cdbd2cSJim Jagielski 		DBG_ERRORFILE( "invalid font name box" );
962*b1cdbd2cSJim Jagielski 	}
963*b1cdbd2cSJim Jagielski 
964*b1cdbd2cSJim Jagielski 	FontInfo _aFontInfo( pFontList->Get( pNameBox->GetText(), pStyleBox->GetText() ) );
965*b1cdbd2cSJim Jagielski 	pSizeBox->Fill( &_aFontInfo, pFontList );
966*b1cdbd2cSJim Jagielski }
967*b1cdbd2cSJim Jagielski 
968*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
969*b1cdbd2cSJim Jagielski 
Reset_Impl(const SfxItemSet & rSet,LanguageGroup eLangGrp)970*b1cdbd2cSJim Jagielski void SvxCharNamePage::Reset_Impl( const SfxItemSet& rSet, LanguageGroup eLangGrp )
971*b1cdbd2cSJim Jagielski {
972*b1cdbd2cSJim Jagielski     FixedText* pNameLabel = NULL;
973*b1cdbd2cSJim Jagielski     FontNameBox* pNameBox = NULL;
974*b1cdbd2cSJim Jagielski     FixedText* pStyleLabel = NULL;
975*b1cdbd2cSJim Jagielski     FontStyleBox* pStyleBox = NULL;
976*b1cdbd2cSJim Jagielski     FixedText* pSizeLabel = NULL;
977*b1cdbd2cSJim Jagielski     FontSizeBox* pSizeBox = NULL;
978*b1cdbd2cSJim Jagielski     FixedText* pLangFT = NULL;
979*b1cdbd2cSJim Jagielski     SvxLanguageBox* pLangBox = NULL;
980*b1cdbd2cSJim Jagielski 	sal_uInt16 nWhich = 0;
981*b1cdbd2cSJim Jagielski 
982*b1cdbd2cSJim Jagielski 	switch ( eLangGrp )
983*b1cdbd2cSJim Jagielski 	{
984*b1cdbd2cSJim Jagielski 		case Western :
985*b1cdbd2cSJim Jagielski 			pNameLabel = m_pWestFontNameFT;
986*b1cdbd2cSJim Jagielski 			pNameBox = m_pWestFontNameLB;
987*b1cdbd2cSJim Jagielski 			pStyleLabel = m_pWestFontStyleFT;
988*b1cdbd2cSJim Jagielski 			pStyleBox = m_pWestFontStyleLB;
989*b1cdbd2cSJim Jagielski 			pSizeLabel = m_pWestFontSizeFT;
990*b1cdbd2cSJim Jagielski 			pSizeBox = m_pWestFontSizeLB;
991*b1cdbd2cSJim Jagielski 			pLangFT = m_pWestFontLanguageFT;
992*b1cdbd2cSJim Jagielski 			pLangBox = m_pWestFontLanguageLB;
993*b1cdbd2cSJim Jagielski 			nWhich = GetWhich( SID_ATTR_CHAR_FONT );
994*b1cdbd2cSJim Jagielski 			break;
995*b1cdbd2cSJim Jagielski 
996*b1cdbd2cSJim Jagielski 		case Asian :
997*b1cdbd2cSJim Jagielski 			pNameLabel = m_pEastFontNameFT;
998*b1cdbd2cSJim Jagielski 			pNameBox = m_pEastFontNameLB;
999*b1cdbd2cSJim Jagielski 			pStyleLabel = m_pEastFontStyleFT;
1000*b1cdbd2cSJim Jagielski 			pStyleBox = m_pEastFontStyleLB;
1001*b1cdbd2cSJim Jagielski 			pSizeLabel = m_pEastFontSizeFT;
1002*b1cdbd2cSJim Jagielski 			pSizeBox = m_pEastFontSizeLB;
1003*b1cdbd2cSJim Jagielski 			pLangFT = m_pEastFontLanguageFT;
1004*b1cdbd2cSJim Jagielski 			pLangBox = m_pEastFontLanguageLB;
1005*b1cdbd2cSJim Jagielski 			nWhich = GetWhich( SID_ATTR_CHAR_CJK_FONT );
1006*b1cdbd2cSJim Jagielski 			break;
1007*b1cdbd2cSJim Jagielski 
1008*b1cdbd2cSJim Jagielski 		case Ctl :
1009*b1cdbd2cSJim Jagielski 			pNameLabel = m_pCTLFontNameFT;
1010*b1cdbd2cSJim Jagielski 			pNameBox = m_pCTLFontNameLB;
1011*b1cdbd2cSJim Jagielski 			pStyleLabel = m_pCTLFontStyleFT;
1012*b1cdbd2cSJim Jagielski 			pStyleBox = m_pCTLFontStyleLB;
1013*b1cdbd2cSJim Jagielski 			pSizeLabel = m_pCTLFontSizeFT;
1014*b1cdbd2cSJim Jagielski 			pSizeBox = m_pCTLFontSizeLB;
1015*b1cdbd2cSJim Jagielski 			pLangFT = m_pCTLFontLanguageFT;
1016*b1cdbd2cSJim Jagielski 			pLangBox = m_pCTLFontLanguageLB;
1017*b1cdbd2cSJim Jagielski 			nWhich = GetWhich( SID_ATTR_CHAR_CTL_FONT );
1018*b1cdbd2cSJim Jagielski 			break;
1019*b1cdbd2cSJim Jagielski 	}
1020*b1cdbd2cSJim Jagielski 
1021*b1cdbd2cSJim Jagielski 	// die FontListBox fuellen
1022*b1cdbd2cSJim Jagielski 	const FontList* pFontList = GetFontList();
1023*b1cdbd2cSJim Jagielski 	pNameBox->Fill( pFontList );
1024*b1cdbd2cSJim Jagielski 
1025*b1cdbd2cSJim Jagielski 	// Font ermitteln
1026*b1cdbd2cSJim Jagielski 	const SvxFontItem* pFontItem = NULL;
1027*b1cdbd2cSJim Jagielski 	SfxItemState eState = rSet.GetItemState( nWhich );
1028*b1cdbd2cSJim Jagielski 
1029*b1cdbd2cSJim Jagielski 	if ( eState >= SFX_ITEM_DEFAULT )
1030*b1cdbd2cSJim Jagielski 	{
1031*b1cdbd2cSJim Jagielski 		pFontItem = (const SvxFontItem*)&( rSet.Get( nWhich ) );
1032*b1cdbd2cSJim Jagielski 		pNameBox->SetText( pFontItem->GetFamilyName() );
1033*b1cdbd2cSJim Jagielski 	}
1034*b1cdbd2cSJim Jagielski 	else
1035*b1cdbd2cSJim Jagielski 	{
1036*b1cdbd2cSJim Jagielski 		pNameBox->SetText( String() );
1037*b1cdbd2cSJim Jagielski 	}
1038*b1cdbd2cSJim Jagielski 
1039*b1cdbd2cSJim Jagielski 	FillStyleBox_Impl( pNameBox );
1040*b1cdbd2cSJim Jagielski 
1041*b1cdbd2cSJim Jagielski 	FASTBOOL bStyle = sal_False;
1042*b1cdbd2cSJim Jagielski 	FASTBOOL bStyleAvailable = sal_True;
1043*b1cdbd2cSJim Jagielski 	FontItalic eItalic = ITALIC_NONE;
1044*b1cdbd2cSJim Jagielski 	FontWeight eWeight = WEIGHT_NORMAL;
1045*b1cdbd2cSJim Jagielski 	switch ( eLangGrp )
1046*b1cdbd2cSJim Jagielski 	{
1047*b1cdbd2cSJim Jagielski 		case Western : nWhich = GetWhich( SID_ATTR_CHAR_POSTURE ); break;
1048*b1cdbd2cSJim Jagielski 		case Asian : nWhich = GetWhich( SID_ATTR_CHAR_CJK_POSTURE ); break;
1049*b1cdbd2cSJim Jagielski 		case Ctl : nWhich = GetWhich( SID_ATTR_CHAR_CTL_POSTURE ); break;
1050*b1cdbd2cSJim Jagielski 	}
1051*b1cdbd2cSJim Jagielski 	eState = rSet.GetItemState( nWhich );
1052*b1cdbd2cSJim Jagielski 
1053*b1cdbd2cSJim Jagielski 	if ( eState >= SFX_ITEM_DEFAULT )
1054*b1cdbd2cSJim Jagielski 	{
1055*b1cdbd2cSJim Jagielski 		const SvxPostureItem& rItem = (SvxPostureItem&)rSet.Get( nWhich );
1056*b1cdbd2cSJim Jagielski 		eItalic = (FontItalic)rItem.GetValue();
1057*b1cdbd2cSJim Jagielski 		bStyle = sal_True;
1058*b1cdbd2cSJim Jagielski 	}
1059*b1cdbd2cSJim Jagielski 	bStyleAvailable = bStyleAvailable && (eState >= SFX_ITEM_DONTCARE);
1060*b1cdbd2cSJim Jagielski 
1061*b1cdbd2cSJim Jagielski 	switch ( eLangGrp )
1062*b1cdbd2cSJim Jagielski 	{
1063*b1cdbd2cSJim Jagielski 		case Western : nWhich = GetWhich( SID_ATTR_CHAR_WEIGHT ); break;
1064*b1cdbd2cSJim Jagielski 		case Asian : nWhich = GetWhich( SID_ATTR_CHAR_CJK_WEIGHT ); break;
1065*b1cdbd2cSJim Jagielski 		case Ctl : nWhich = GetWhich( SID_ATTR_CHAR_CTL_WEIGHT ); break;
1066*b1cdbd2cSJim Jagielski 	}
1067*b1cdbd2cSJim Jagielski 	eState = rSet.GetItemState( nWhich );
1068*b1cdbd2cSJim Jagielski 
1069*b1cdbd2cSJim Jagielski 	if ( eState >= SFX_ITEM_DEFAULT )
1070*b1cdbd2cSJim Jagielski 	{
1071*b1cdbd2cSJim Jagielski 		SvxWeightItem& rItem = (SvxWeightItem&)rSet.Get( nWhich );
1072*b1cdbd2cSJim Jagielski 		eWeight = (FontWeight)rItem.GetValue();
1073*b1cdbd2cSJim Jagielski 	}
1074*b1cdbd2cSJim Jagielski 	else
1075*b1cdbd2cSJim Jagielski 		bStyle = sal_False;
1076*b1cdbd2cSJim Jagielski 	bStyleAvailable = bStyleAvailable && (eState >= SFX_ITEM_DONTCARE);
1077*b1cdbd2cSJim Jagielski 
1078*b1cdbd2cSJim Jagielski 	// Aktuell eingestellter Font
1079*b1cdbd2cSJim Jagielski 	if ( bStyle && pFontItem )
1080*b1cdbd2cSJim Jagielski 	{
1081*b1cdbd2cSJim Jagielski 		FontInfo aInfo = pFontList->Get( pFontItem->GetFamilyName(), eWeight, eItalic );
1082*b1cdbd2cSJim Jagielski 		pStyleBox->SetText( pFontList->GetStyleName( aInfo ) );
1083*b1cdbd2cSJim Jagielski 	}
1084*b1cdbd2cSJim Jagielski 	else if ( !m_pImpl->m_bInSearchMode || !bStyle )
1085*b1cdbd2cSJim Jagielski 	{
1086*b1cdbd2cSJim Jagielski 		pStyleBox->SetText( String() );
1087*b1cdbd2cSJim Jagielski 	}
1088*b1cdbd2cSJim Jagielski 	else if ( bStyle )
1089*b1cdbd2cSJim Jagielski 	{
1090*b1cdbd2cSJim Jagielski 		FontInfo aInfo = pFontList->Get( String(), eWeight, eItalic );
1091*b1cdbd2cSJim Jagielski 		pStyleBox->SetText( pFontList->GetStyleName( aInfo ) );
1092*b1cdbd2cSJim Jagielski 	}
1093*b1cdbd2cSJim Jagielski 	if (!bStyleAvailable)
1094*b1cdbd2cSJim Jagielski 	{
1095*b1cdbd2cSJim Jagielski 		pStyleBox->Disable( );
1096*b1cdbd2cSJim Jagielski 		pStyleLabel->Disable( );
1097*b1cdbd2cSJim Jagielski 	}
1098*b1cdbd2cSJim Jagielski 
1099*b1cdbd2cSJim Jagielski 	// SizeBox fuellen
1100*b1cdbd2cSJim Jagielski 	FillSizeBox_Impl( pNameBox );
1101*b1cdbd2cSJim Jagielski 	switch ( eLangGrp )
1102*b1cdbd2cSJim Jagielski 	{
1103*b1cdbd2cSJim Jagielski 		case Western : nWhich = GetWhich( SID_ATTR_CHAR_FONTHEIGHT ); break;
1104*b1cdbd2cSJim Jagielski 		case Asian : nWhich = GetWhich( SID_ATTR_CHAR_CJK_FONTHEIGHT ); break;
1105*b1cdbd2cSJim Jagielski 		case Ctl : nWhich = GetWhich( SID_ATTR_CHAR_CTL_FONTHEIGHT ); break;
1106*b1cdbd2cSJim Jagielski 	}
1107*b1cdbd2cSJim Jagielski 	eState = rSet.GetItemState( nWhich );
1108*b1cdbd2cSJim Jagielski 
1109*b1cdbd2cSJim Jagielski 	if ( pSizeBox->IsRelativeMode() )
1110*b1cdbd2cSJim Jagielski 	{
1111*b1cdbd2cSJim Jagielski 		SfxMapUnit eUnit = rSet.GetPool()->GetMetric( nWhich );
1112*b1cdbd2cSJim Jagielski 		const SvxFontHeightItem& rItem = (SvxFontHeightItem&)rSet.Get( nWhich );
1113*b1cdbd2cSJim Jagielski 
1114*b1cdbd2cSJim Jagielski 		if( rItem.GetProp() != 100 || SFX_MAPUNIT_RELATIVE != rItem.GetPropUnit() )
1115*b1cdbd2cSJim Jagielski 		{
1116*b1cdbd2cSJim Jagielski 			sal_Bool bPtRel = SFX_MAPUNIT_POINT == rItem.GetPropUnit();
1117*b1cdbd2cSJim Jagielski 			pSizeBox->SetPtRelative( bPtRel );
1118*b1cdbd2cSJim Jagielski 			pSizeBox->SetValue( bPtRel ? ((short)rItem.GetProp()) * 10 : rItem.GetProp() );
1119*b1cdbd2cSJim Jagielski 		}
1120*b1cdbd2cSJim Jagielski 		else
1121*b1cdbd2cSJim Jagielski 		{
1122*b1cdbd2cSJim Jagielski 			pSizeBox->SetRelative();
1123*b1cdbd2cSJim Jagielski 			pSizeBox->SetValue( (long)CalcToPoint( rItem.GetHeight(), eUnit, 10 ) );
1124*b1cdbd2cSJim Jagielski 		}
1125*b1cdbd2cSJim Jagielski 	}
1126*b1cdbd2cSJim Jagielski 	else if ( eState >= SFX_ITEM_DEFAULT )
1127*b1cdbd2cSJim Jagielski 	{
1128*b1cdbd2cSJim Jagielski 		SfxMapUnit eUnit = rSet.GetPool()->GetMetric( nWhich );
1129*b1cdbd2cSJim Jagielski 		const SvxFontHeightItem& rItem = (SvxFontHeightItem&)rSet.Get( nWhich );
1130*b1cdbd2cSJim Jagielski 		pSizeBox->SetValue( (long)CalcToPoint( rItem.GetHeight(), eUnit, 10 ) );
1131*b1cdbd2cSJim Jagielski 	}
1132*b1cdbd2cSJim Jagielski 	else
1133*b1cdbd2cSJim Jagielski 	{
1134*b1cdbd2cSJim Jagielski 		pSizeBox->SetText( String() );
1135*b1cdbd2cSJim Jagielski 		if ( eState <= SFX_ITEM_READONLY )
1136*b1cdbd2cSJim Jagielski 		{
1137*b1cdbd2cSJim Jagielski 			pSizeBox->Disable( );
1138*b1cdbd2cSJim Jagielski 			pSizeLabel->Disable( );
1139*b1cdbd2cSJim Jagielski 		}
1140*b1cdbd2cSJim Jagielski 	}
1141*b1cdbd2cSJim Jagielski 
1142*b1cdbd2cSJim Jagielski 	switch ( eLangGrp )
1143*b1cdbd2cSJim Jagielski 	{
1144*b1cdbd2cSJim Jagielski 		case Western : nWhich = GetWhich( SID_ATTR_CHAR_LANGUAGE ); break;
1145*b1cdbd2cSJim Jagielski 		case Asian : nWhich = GetWhich( SID_ATTR_CHAR_CJK_LANGUAGE ); break;
1146*b1cdbd2cSJim Jagielski 		case Ctl : nWhich = GetWhich( SID_ATTR_CHAR_CTL_LANGUAGE ); break;
1147*b1cdbd2cSJim Jagielski 	}
1148*b1cdbd2cSJim Jagielski 	pLangBox->SetNoSelection();
1149*b1cdbd2cSJim Jagielski 	eState = rSet.GetItemState( nWhich );
1150*b1cdbd2cSJim Jagielski 
1151*b1cdbd2cSJim Jagielski 	switch ( eState )
1152*b1cdbd2cSJim Jagielski 	{
1153*b1cdbd2cSJim Jagielski 		case SFX_ITEM_UNKNOWN:
1154*b1cdbd2cSJim Jagielski 			pLangFT->Hide();
1155*b1cdbd2cSJim Jagielski 			pLangBox->Hide();
1156*b1cdbd2cSJim Jagielski 			break;
1157*b1cdbd2cSJim Jagielski 
1158*b1cdbd2cSJim Jagielski 		case SFX_ITEM_DISABLED:
1159*b1cdbd2cSJim Jagielski 		case SFX_ITEM_READONLY:
1160*b1cdbd2cSJim Jagielski 			pLangFT->Disable();
1161*b1cdbd2cSJim Jagielski 			pLangBox->Disable();
1162*b1cdbd2cSJim Jagielski 			break;
1163*b1cdbd2cSJim Jagielski 
1164*b1cdbd2cSJim Jagielski 		case SFX_ITEM_DEFAULT:
1165*b1cdbd2cSJim Jagielski 		case SFX_ITEM_SET:
1166*b1cdbd2cSJim Jagielski 		{
1167*b1cdbd2cSJim Jagielski 			const SvxLanguageItem& rItem = (SvxLanguageItem&)rSet.Get( nWhich );
1168*b1cdbd2cSJim Jagielski 			LanguageType eLangType = (LanguageType)rItem.GetValue();
1169*b1cdbd2cSJim Jagielski 			DBG_ASSERT( eLangType != LANGUAGE_SYSTEM, "LANGUAGE_SYSTEM not allowed" );
1170*b1cdbd2cSJim Jagielski 			if ( eLangType != LANGUAGE_DONTKNOW )
1171*b1cdbd2cSJim Jagielski                 pLangBox->SelectLanguage( eLangType );
1172*b1cdbd2cSJim Jagielski 			break;
1173*b1cdbd2cSJim Jagielski 		}
1174*b1cdbd2cSJim Jagielski 	}
1175*b1cdbd2cSJim Jagielski 
1176*b1cdbd2cSJim Jagielski 	if ( Western == eLangGrp )
1177*b1cdbd2cSJim Jagielski         m_aFontTypeFT.SetText( pFontList->GetFontMapText(
1178*b1cdbd2cSJim Jagielski 			pFontList->Get( pNameBox->GetText(), pStyleBox->GetText() ) ) );
1179*b1cdbd2cSJim Jagielski 
1180*b1cdbd2cSJim Jagielski 	// save these settings
1181*b1cdbd2cSJim Jagielski 	pNameBox->SaveValue();
1182*b1cdbd2cSJim Jagielski 	pStyleBox->SaveValue();
1183*b1cdbd2cSJim Jagielski 	pSizeBox->SaveValue();
1184*b1cdbd2cSJim Jagielski 	pLangBox->SaveValue();
1185*b1cdbd2cSJim Jagielski }
1186*b1cdbd2cSJim Jagielski 
1187*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1188*b1cdbd2cSJim Jagielski 
FillItemSet_Impl(SfxItemSet & rSet,LanguageGroup eLangGrp)1189*b1cdbd2cSJim Jagielski sal_Bool SvxCharNamePage::FillItemSet_Impl( SfxItemSet& rSet, LanguageGroup eLangGrp )
1190*b1cdbd2cSJim Jagielski {
1191*b1cdbd2cSJim Jagielski 	sal_Bool bModified = sal_False;
1192*b1cdbd2cSJim Jagielski 
1193*b1cdbd2cSJim Jagielski     FontNameBox* pNameBox = NULL;
1194*b1cdbd2cSJim Jagielski     FontStyleBox* pStyleBox = NULL;
1195*b1cdbd2cSJim Jagielski     FontSizeBox* pSizeBox = NULL;
1196*b1cdbd2cSJim Jagielski     SvxLanguageBox* pLangBox = NULL;
1197*b1cdbd2cSJim Jagielski 	sal_uInt16 nWhich = 0;
1198*b1cdbd2cSJim Jagielski 	sal_uInt16 nSlot = 0;
1199*b1cdbd2cSJim Jagielski 
1200*b1cdbd2cSJim Jagielski 	switch ( eLangGrp )
1201*b1cdbd2cSJim Jagielski 	{
1202*b1cdbd2cSJim Jagielski 		case Western :
1203*b1cdbd2cSJim Jagielski 			pNameBox = m_pWestFontNameLB;
1204*b1cdbd2cSJim Jagielski 			pStyleBox = m_pWestFontStyleLB;
1205*b1cdbd2cSJim Jagielski 			pSizeBox = m_pWestFontSizeLB;
1206*b1cdbd2cSJim Jagielski 			pLangBox = m_pWestFontLanguageLB;
1207*b1cdbd2cSJim Jagielski 			nSlot = SID_ATTR_CHAR_FONT;
1208*b1cdbd2cSJim Jagielski 			break;
1209*b1cdbd2cSJim Jagielski 
1210*b1cdbd2cSJim Jagielski 		case Asian :
1211*b1cdbd2cSJim Jagielski 			pNameBox = m_pEastFontNameLB;
1212*b1cdbd2cSJim Jagielski 			pStyleBox = m_pEastFontStyleLB;
1213*b1cdbd2cSJim Jagielski 			pSizeBox = m_pEastFontSizeLB;
1214*b1cdbd2cSJim Jagielski 			pLangBox = m_pEastFontLanguageLB;
1215*b1cdbd2cSJim Jagielski 			nSlot = SID_ATTR_CHAR_CJK_FONT;
1216*b1cdbd2cSJim Jagielski 			break;
1217*b1cdbd2cSJim Jagielski 
1218*b1cdbd2cSJim Jagielski 		case Ctl :
1219*b1cdbd2cSJim Jagielski 			pNameBox = m_pCTLFontNameLB;
1220*b1cdbd2cSJim Jagielski 			pStyleBox = m_pCTLFontStyleLB;
1221*b1cdbd2cSJim Jagielski 			pSizeBox = m_pCTLFontSizeLB;
1222*b1cdbd2cSJim Jagielski 			pLangBox = m_pCTLFontLanguageLB;
1223*b1cdbd2cSJim Jagielski 			nSlot = SID_ATTR_CHAR_CTL_FONT;
1224*b1cdbd2cSJim Jagielski 			break;
1225*b1cdbd2cSJim Jagielski 	}
1226*b1cdbd2cSJim Jagielski 
1227*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( nSlot );
1228*b1cdbd2cSJim Jagielski 	const SfxPoolItem* pItem = NULL;
1229*b1cdbd2cSJim Jagielski 	const SfxItemSet& rOldSet = GetItemSet();
1230*b1cdbd2cSJim Jagielski 	const SfxPoolItem* pOld = NULL;
1231*b1cdbd2cSJim Jagielski 
1232*b1cdbd2cSJim Jagielski 	const SfxItemSet* pExampleSet = GetTabDialog() ? GetTabDialog()->GetExampleSet() : NULL;
1233*b1cdbd2cSJim Jagielski 
1234*b1cdbd2cSJim Jagielski 	FASTBOOL bChanged = sal_True;
1235*b1cdbd2cSJim Jagielski 	const String& rFontName  = pNameBox->GetText();
1236*b1cdbd2cSJim Jagielski 	const FontList* pFontList = GetFontList();
1237*b1cdbd2cSJim Jagielski 	String aStyleBoxText =pStyleBox->GetText();
1238*b1cdbd2cSJim Jagielski 	sal_uInt16 nEntryPos = pStyleBox->GetEntryPos( aStyleBoxText );
1239*b1cdbd2cSJim Jagielski 	if ( nEntryPos >= m_pImpl->m_nExtraEntryPos )
1240*b1cdbd2cSJim Jagielski 		aStyleBoxText.Erase();
1241*b1cdbd2cSJim Jagielski 	FontInfo aInfo( pFontList->Get( rFontName, aStyleBoxText ) );
1242*b1cdbd2cSJim Jagielski 	SvxFontItem aFontItem( aInfo.GetFamily(), aInfo.GetName(), aInfo.GetStyleName(),
1243*b1cdbd2cSJim Jagielski 						   aInfo.GetPitch(), aInfo.GetCharSet(), nWhich );
1244*b1cdbd2cSJim Jagielski 	pOld = GetOldItem( rSet, nSlot );
1245*b1cdbd2cSJim Jagielski 
1246*b1cdbd2cSJim Jagielski 	if ( pOld )
1247*b1cdbd2cSJim Jagielski 	{
1248*b1cdbd2cSJim Jagielski 		const SvxFontItem& rItem = *( (const SvxFontItem*)pOld );
1249*b1cdbd2cSJim Jagielski 
1250*b1cdbd2cSJim Jagielski 		if ( rItem.GetFamilyName() == aFontItem.GetFamilyName() )
1251*b1cdbd2cSJim Jagielski 			bChanged = sal_False;
1252*b1cdbd2cSJim Jagielski 	}
1253*b1cdbd2cSJim Jagielski 
1254*b1cdbd2cSJim Jagielski 	if ( !bChanged )
1255*b1cdbd2cSJim Jagielski 		bChanged = !pNameBox->GetSavedValue().Len();
1256*b1cdbd2cSJim Jagielski 
1257*b1cdbd2cSJim Jagielski 	if ( !bChanged && pExampleSet &&
1258*b1cdbd2cSJim Jagielski 		 pExampleSet->GetItemState( nWhich, sal_False, &pItem ) == SFX_ITEM_SET &&
1259*b1cdbd2cSJim Jagielski 		 ( (SvxFontItem*)pItem )->GetFamilyName() != aFontItem.GetFamilyName() )
1260*b1cdbd2cSJim Jagielski 		bChanged = sal_True;
1261*b1cdbd2cSJim Jagielski 
1262*b1cdbd2cSJim Jagielski 	if ( bChanged && rFontName.Len() )
1263*b1cdbd2cSJim Jagielski 	{
1264*b1cdbd2cSJim Jagielski 		rSet.Put( aFontItem );
1265*b1cdbd2cSJim Jagielski 		bModified |= sal_True;
1266*b1cdbd2cSJim Jagielski 	}
1267*b1cdbd2cSJim Jagielski 	else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
1268*b1cdbd2cSJim Jagielski 		rSet.ClearItem( nWhich );
1269*b1cdbd2cSJim Jagielski 
1270*b1cdbd2cSJim Jagielski 
1271*b1cdbd2cSJim Jagielski 	bChanged = sal_True;
1272*b1cdbd2cSJim Jagielski 	switch ( eLangGrp )
1273*b1cdbd2cSJim Jagielski 	{
1274*b1cdbd2cSJim Jagielski 		case Western : nSlot = SID_ATTR_CHAR_WEIGHT; break;
1275*b1cdbd2cSJim Jagielski 		case Asian : nSlot = SID_ATTR_CHAR_CJK_WEIGHT; break;
1276*b1cdbd2cSJim Jagielski 		case Ctl : nSlot = SID_ATTR_CHAR_CTL_WEIGHT; break;
1277*b1cdbd2cSJim Jagielski 	}
1278*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( nSlot );
1279*b1cdbd2cSJim Jagielski 	FontWeight eWeight = aInfo.GetWeight();
1280*b1cdbd2cSJim Jagielski 	if ( nEntryPos >= m_pImpl->m_nExtraEntryPos )
1281*b1cdbd2cSJim Jagielski 		eWeight = WEIGHT_NORMAL;
1282*b1cdbd2cSJim Jagielski 	SvxWeightItem aWeightItem( eWeight, nWhich );
1283*b1cdbd2cSJim Jagielski 	pOld = GetOldItem( rSet, nSlot );
1284*b1cdbd2cSJim Jagielski 
1285*b1cdbd2cSJim Jagielski 	if ( pOld )
1286*b1cdbd2cSJim Jagielski 	{
1287*b1cdbd2cSJim Jagielski 		const SvxWeightItem& rItem = *( (const SvxWeightItem*)pOld );
1288*b1cdbd2cSJim Jagielski 
1289*b1cdbd2cSJim Jagielski 		if ( rItem.GetValue() == aWeightItem.GetValue() )
1290*b1cdbd2cSJim Jagielski 			bChanged = sal_False;
1291*b1cdbd2cSJim Jagielski 	}
1292*b1cdbd2cSJim Jagielski 
1293*b1cdbd2cSJim Jagielski 	if ( !bChanged )
1294*b1cdbd2cSJim Jagielski 	{
1295*b1cdbd2cSJim Jagielski 		bChanged = !pStyleBox->GetSavedValue().Len();
1296*b1cdbd2cSJim Jagielski 
1297*b1cdbd2cSJim Jagielski 		if ( m_pImpl->m_bInSearchMode && bChanged &&
1298*b1cdbd2cSJim Jagielski 			 aInfo.GetWeight() == WEIGHT_NORMAL && aInfo.GetItalic() != ITALIC_NONE )
1299*b1cdbd2cSJim Jagielski 			bChanged = sal_False;
1300*b1cdbd2cSJim Jagielski 	}
1301*b1cdbd2cSJim Jagielski 
1302*b1cdbd2cSJim Jagielski 	if ( !bChanged && pExampleSet &&
1303*b1cdbd2cSJim Jagielski 		 pExampleSet->GetItemState( nWhich, sal_False, &pItem ) == SFX_ITEM_SET &&
1304*b1cdbd2cSJim Jagielski 		 ( (SvxWeightItem*)pItem )->GetValue() != aWeightItem.GetValue() )
1305*b1cdbd2cSJim Jagielski 		bChanged = sal_True;
1306*b1cdbd2cSJim Jagielski 
1307*b1cdbd2cSJim Jagielski 	if ( nEntryPos >= m_pImpl->m_nExtraEntryPos )
1308*b1cdbd2cSJim Jagielski 		bChanged = ( nEntryPos == m_pImpl->m_nExtraEntryPos );
1309*b1cdbd2cSJim Jagielski 
1310*b1cdbd2cSJim Jagielski 	String aText( pStyleBox->GetText() ); // Tristate, dann Text leer
1311*b1cdbd2cSJim Jagielski 
1312*b1cdbd2cSJim Jagielski 	if ( bChanged && aText.Len() )
1313*b1cdbd2cSJim Jagielski 	{
1314*b1cdbd2cSJim Jagielski 		rSet.Put( aWeightItem );
1315*b1cdbd2cSJim Jagielski 		bModified |= sal_True;
1316*b1cdbd2cSJim Jagielski 	}
1317*b1cdbd2cSJim Jagielski 	else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
1318*b1cdbd2cSJim Jagielski 		CLEARTITEM;
1319*b1cdbd2cSJim Jagielski 
1320*b1cdbd2cSJim Jagielski 	bChanged = sal_True;
1321*b1cdbd2cSJim Jagielski 	switch ( eLangGrp )
1322*b1cdbd2cSJim Jagielski 	{
1323*b1cdbd2cSJim Jagielski 		case Western : nSlot = SID_ATTR_CHAR_POSTURE; break;
1324*b1cdbd2cSJim Jagielski 		case Asian : nSlot = SID_ATTR_CHAR_CJK_POSTURE; break;
1325*b1cdbd2cSJim Jagielski 		case Ctl : nSlot = SID_ATTR_CHAR_CTL_POSTURE; break;
1326*b1cdbd2cSJim Jagielski 	}
1327*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( nSlot );
1328*b1cdbd2cSJim Jagielski 	FontItalic eItalic = aInfo.GetItalic();
1329*b1cdbd2cSJim Jagielski 	if ( nEntryPos >= m_pImpl->m_nExtraEntryPos )
1330*b1cdbd2cSJim Jagielski 		eItalic = ITALIC_NONE;
1331*b1cdbd2cSJim Jagielski 	SvxPostureItem aPostureItem( eItalic, nWhich );
1332*b1cdbd2cSJim Jagielski 	pOld = GetOldItem( rSet, nSlot );
1333*b1cdbd2cSJim Jagielski 
1334*b1cdbd2cSJim Jagielski 	if ( pOld )
1335*b1cdbd2cSJim Jagielski 	{
1336*b1cdbd2cSJim Jagielski 		const SvxPostureItem& rItem = *( (const SvxPostureItem*)pOld );
1337*b1cdbd2cSJim Jagielski 
1338*b1cdbd2cSJim Jagielski 		if ( rItem.GetValue() == aPostureItem.GetValue() )
1339*b1cdbd2cSJim Jagielski 			bChanged = sal_False;
1340*b1cdbd2cSJim Jagielski 	}
1341*b1cdbd2cSJim Jagielski 
1342*b1cdbd2cSJim Jagielski 	if ( !bChanged )
1343*b1cdbd2cSJim Jagielski 	{
1344*b1cdbd2cSJim Jagielski 		bChanged = !pStyleBox->GetSavedValue().Len();
1345*b1cdbd2cSJim Jagielski 
1346*b1cdbd2cSJim Jagielski 		if ( m_pImpl->m_bInSearchMode && bChanged &&
1347*b1cdbd2cSJim Jagielski 			 aInfo.GetItalic() == ITALIC_NONE && aInfo.GetWeight() != WEIGHT_NORMAL )
1348*b1cdbd2cSJim Jagielski 			bChanged = sal_False;
1349*b1cdbd2cSJim Jagielski 	}
1350*b1cdbd2cSJim Jagielski 
1351*b1cdbd2cSJim Jagielski 	if ( !bChanged && pExampleSet &&
1352*b1cdbd2cSJim Jagielski 		 pExampleSet->GetItemState( nWhich, sal_False, &pItem ) == SFX_ITEM_SET &&
1353*b1cdbd2cSJim Jagielski 		 ( (SvxPostureItem*)pItem )->GetValue() != aPostureItem.GetValue() )
1354*b1cdbd2cSJim Jagielski 		bChanged = sal_True;
1355*b1cdbd2cSJim Jagielski 
1356*b1cdbd2cSJim Jagielski 	if ( nEntryPos >= m_pImpl->m_nExtraEntryPos )
1357*b1cdbd2cSJim Jagielski 		bChanged = ( nEntryPos == ( m_pImpl->m_nExtraEntryPos + 1 ) );
1358*b1cdbd2cSJim Jagielski 
1359*b1cdbd2cSJim Jagielski 	if ( bChanged && aText.Len() )
1360*b1cdbd2cSJim Jagielski 	{
1361*b1cdbd2cSJim Jagielski 		rSet.Put( aPostureItem );
1362*b1cdbd2cSJim Jagielski 		bModified |= sal_True;
1363*b1cdbd2cSJim Jagielski 	}
1364*b1cdbd2cSJim Jagielski 	else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
1365*b1cdbd2cSJim Jagielski 		CLEARTITEM;
1366*b1cdbd2cSJim Jagielski 
1367*b1cdbd2cSJim Jagielski 	// FontSize
1368*b1cdbd2cSJim Jagielski 	long nSize = static_cast<long>(pSizeBox->GetValue());
1369*b1cdbd2cSJim Jagielski 
1370*b1cdbd2cSJim Jagielski 	if ( !pSizeBox->GetText().Len() )	// GetValue() gibt dann Min-Wert zurueck
1371*b1cdbd2cSJim Jagielski 		nSize = 0;
1372*b1cdbd2cSJim Jagielski 	long nSavedSize = pSizeBox->GetSavedValue().ToInt32();
1373*b1cdbd2cSJim Jagielski 	FASTBOOL bRel = sal_True;
1374*b1cdbd2cSJim Jagielski 
1375*b1cdbd2cSJim Jagielski 	if ( !pSizeBox->IsRelative() )
1376*b1cdbd2cSJim Jagielski 	{
1377*b1cdbd2cSJim Jagielski 		nSavedSize *= 10;
1378*b1cdbd2cSJim Jagielski 		bRel = sal_False;
1379*b1cdbd2cSJim Jagielski 	}
1380*b1cdbd2cSJim Jagielski 
1381*b1cdbd2cSJim Jagielski 	switch ( eLangGrp )
1382*b1cdbd2cSJim Jagielski 	{
1383*b1cdbd2cSJim Jagielski 		case Western : nSlot = SID_ATTR_CHAR_FONTHEIGHT; break;
1384*b1cdbd2cSJim Jagielski 		case Asian : nSlot = SID_ATTR_CHAR_CJK_FONTHEIGHT; break;
1385*b1cdbd2cSJim Jagielski 		case Ctl : nSlot = SID_ATTR_CHAR_CTL_FONTHEIGHT; break;
1386*b1cdbd2cSJim Jagielski 	}
1387*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( nSlot );
1388*b1cdbd2cSJim Jagielski 	const SvxFontHeightItem* pOldHeight = (const SvxFontHeightItem*)GetOldItem( rSet, nSlot );
1389*b1cdbd2cSJim Jagielski 	bChanged = ( nSize != nSavedSize );
1390*b1cdbd2cSJim Jagielski 
1391*b1cdbd2cSJim Jagielski 	if ( !bChanged && pExampleSet &&
1392*b1cdbd2cSJim Jagielski 		 pExampleSet->GetItemState( nWhich, sal_False, &pItem ) == SFX_ITEM_SET )
1393*b1cdbd2cSJim Jagielski 	{
1394*b1cdbd2cSJim Jagielski 		float fSize = (float)nSize / 10;
1395*b1cdbd2cSJim Jagielski 		long nVal = CalcToUnit( fSize, rSet.GetPool()->GetMetric( nWhich ) );
1396*b1cdbd2cSJim Jagielski 		if ( ( (SvxFontHeightItem*)pItem )->GetHeight() != (sal_uInt32)nVal )
1397*b1cdbd2cSJim Jagielski 			bChanged = sal_True;
1398*b1cdbd2cSJim Jagielski 	}
1399*b1cdbd2cSJim Jagielski 
1400*b1cdbd2cSJim Jagielski 	if ( bChanged || !pOldHeight ||
1401*b1cdbd2cSJim Jagielski 		 bRel != ( SFX_MAPUNIT_RELATIVE != pOldHeight->GetPropUnit() || 100 != pOldHeight->GetProp() ) )
1402*b1cdbd2cSJim Jagielski 	{
1403*b1cdbd2cSJim Jagielski 		SfxMapUnit eUnit = rSet.GetPool()->GetMetric( nWhich );
1404*b1cdbd2cSJim Jagielski 		if ( pSizeBox->IsRelative() )
1405*b1cdbd2cSJim Jagielski 		{
1406*b1cdbd2cSJim Jagielski 			DBG_ASSERT( GetItemSet().GetParent(), "No parent set" );
1407*b1cdbd2cSJim Jagielski 			const SvxFontHeightItem& rOldItem =
1408*b1cdbd2cSJim Jagielski 				(const SvxFontHeightItem&)GetItemSet().GetParent()->Get( nWhich );
1409*b1cdbd2cSJim Jagielski 
1410*b1cdbd2cSJim Jagielski 			SvxFontHeightItem aHeight( 240, 100, nWhich );
1411*b1cdbd2cSJim Jagielski 			if ( pSizeBox->IsPtRelative() )
1412*b1cdbd2cSJim Jagielski 				aHeight.SetHeight( rOldItem.GetHeight(), (sal_uInt16)( nSize / 10 ), SFX_MAPUNIT_POINT, eUnit );
1413*b1cdbd2cSJim Jagielski 			else
1414*b1cdbd2cSJim Jagielski 				aHeight.SetHeight( rOldItem.GetHeight(), (sal_uInt16)nSize, SFX_MAPUNIT_RELATIVE );
1415*b1cdbd2cSJim Jagielski 			rSet.Put( aHeight );
1416*b1cdbd2cSJim Jagielski 		}
1417*b1cdbd2cSJim Jagielski 		else
1418*b1cdbd2cSJim Jagielski 		{
1419*b1cdbd2cSJim Jagielski 			float fSize = (float)nSize / 10;
1420*b1cdbd2cSJim Jagielski 			rSet.Put( SvxFontHeightItem( CalcToUnit( fSize, eUnit ), 100, nWhich ) );
1421*b1cdbd2cSJim Jagielski 		}
1422*b1cdbd2cSJim Jagielski 		bModified |= sal_True;
1423*b1cdbd2cSJim Jagielski 	}
1424*b1cdbd2cSJim Jagielski 	else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
1425*b1cdbd2cSJim Jagielski 		CLEARTITEM;
1426*b1cdbd2cSJim Jagielski 
1427*b1cdbd2cSJim Jagielski 	bChanged = sal_True;
1428*b1cdbd2cSJim Jagielski 	switch ( eLangGrp )
1429*b1cdbd2cSJim Jagielski 	{
1430*b1cdbd2cSJim Jagielski 		case Western : nSlot = SID_ATTR_CHAR_LANGUAGE; break;
1431*b1cdbd2cSJim Jagielski 		case Asian : nSlot = SID_ATTR_CHAR_CJK_LANGUAGE; break;
1432*b1cdbd2cSJim Jagielski 		case Ctl : nSlot = SID_ATTR_CHAR_CTL_LANGUAGE; break;
1433*b1cdbd2cSJim Jagielski 	}
1434*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( nSlot );
1435*b1cdbd2cSJim Jagielski 	pOld = GetOldItem( rSet, nSlot );
1436*b1cdbd2cSJim Jagielski 	sal_uInt16 nLangPos = pLangBox->GetSelectEntryPos();
1437*b1cdbd2cSJim Jagielski 	LanguageType eLangType = (LanguageType)(sal_uLong)pLangBox->GetEntryData( nLangPos );
1438*b1cdbd2cSJim Jagielski 
1439*b1cdbd2cSJim Jagielski 	if ( pOld )
1440*b1cdbd2cSJim Jagielski 	{
1441*b1cdbd2cSJim Jagielski 		const SvxLanguageItem& rItem = *( (const SvxLanguageItem*)pOld );
1442*b1cdbd2cSJim Jagielski 
1443*b1cdbd2cSJim Jagielski 		if ( nLangPos == LISTBOX_ENTRY_NOTFOUND || eLangType == (LanguageType)rItem.GetValue() )
1444*b1cdbd2cSJim Jagielski 			bChanged = sal_False;
1445*b1cdbd2cSJim Jagielski 	}
1446*b1cdbd2cSJim Jagielski 
1447*b1cdbd2cSJim Jagielski 	if ( !bChanged )
1448*b1cdbd2cSJim Jagielski 		bChanged = ( pLangBox->GetSavedValue() == LISTBOX_ENTRY_NOTFOUND );
1449*b1cdbd2cSJim Jagielski 
1450*b1cdbd2cSJim Jagielski 	if ( bChanged && nLangPos != LISTBOX_ENTRY_NOTFOUND )
1451*b1cdbd2cSJim Jagielski 	{
1452*b1cdbd2cSJim Jagielski 		rSet.Put( SvxLanguageItem( eLangType, nWhich ) );
1453*b1cdbd2cSJim Jagielski 		bModified |= sal_True;
1454*b1cdbd2cSJim Jagielski 	}
1455*b1cdbd2cSJim Jagielski 	else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
1456*b1cdbd2cSJim Jagielski 		CLEARTITEM;
1457*b1cdbd2cSJim Jagielski 
1458*b1cdbd2cSJim Jagielski 	return bModified;
1459*b1cdbd2cSJim Jagielski }
1460*b1cdbd2cSJim Jagielski 
1461*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1462*b1cdbd2cSJim Jagielski 
ResetColor_Impl(const SfxItemSet & rSet)1463*b1cdbd2cSJim Jagielski void SvxCharNamePage::ResetColor_Impl( const SfxItemSet& rSet )
1464*b1cdbd2cSJim Jagielski {
1465*b1cdbd2cSJim Jagielski 	sal_uInt16 nWhich = GetWhich( SID_ATTR_CHAR_COLOR );
1466*b1cdbd2cSJim Jagielski 	SfxItemState eState = rSet.GetItemState( nWhich );
1467*b1cdbd2cSJim Jagielski 
1468*b1cdbd2cSJim Jagielski 	switch ( eState )
1469*b1cdbd2cSJim Jagielski 	{
1470*b1cdbd2cSJim Jagielski 		case SFX_ITEM_UNKNOWN:
1471*b1cdbd2cSJim Jagielski             m_pColorLB->Hide();
1472*b1cdbd2cSJim Jagielski 			break;
1473*b1cdbd2cSJim Jagielski 
1474*b1cdbd2cSJim Jagielski 		case SFX_ITEM_DISABLED:
1475*b1cdbd2cSJim Jagielski 		case SFX_ITEM_READONLY:
1476*b1cdbd2cSJim Jagielski             m_pColorLB->Disable();
1477*b1cdbd2cSJim Jagielski 			break;
1478*b1cdbd2cSJim Jagielski 
1479*b1cdbd2cSJim Jagielski 		case SFX_ITEM_DONTCARE:
1480*b1cdbd2cSJim Jagielski             m_pColorLB->SetNoSelection();
1481*b1cdbd2cSJim Jagielski 			break;
1482*b1cdbd2cSJim Jagielski 
1483*b1cdbd2cSJim Jagielski 		case SFX_ITEM_DEFAULT:
1484*b1cdbd2cSJim Jagielski 		case SFX_ITEM_SET:
1485*b1cdbd2cSJim Jagielski 		{
1486*b1cdbd2cSJim Jagielski 			SvxFont& rFont = GetPreviewFont();
1487*b1cdbd2cSJim Jagielski             SvxFont& rCJKFont = GetPreviewCJKFont();
1488*b1cdbd2cSJim Jagielski 			SvxFont& rCTLFont = GetPreviewCTLFont();
1489*b1cdbd2cSJim Jagielski 			const SvxColorItem& rItem = (SvxColorItem&)rSet.Get( nWhich );
1490*b1cdbd2cSJim Jagielski 			Color aColor = rItem.GetValue();
1491*b1cdbd2cSJim Jagielski             rFont.SetColor( aColor.GetColor() == COL_AUTO ? Color(COL_BLACK) : aColor );
1492*b1cdbd2cSJim Jagielski             rCJKFont.SetColor( aColor.GetColor() == COL_AUTO ? Color(COL_BLACK) : aColor );
1493*b1cdbd2cSJim Jagielski 			rCTLFont.SetColor( aColor.GetColor() == COL_AUTO ? Color(COL_BLACK) : aColor );
1494*b1cdbd2cSJim Jagielski 			m_aPreviewWin.Invalidate();
1495*b1cdbd2cSJim Jagielski             sal_uInt16 nSelPos = m_pColorLB->GetEntryPos( aColor );
1496*b1cdbd2cSJim Jagielski 			if ( nSelPos == LISTBOX_ENTRY_NOTFOUND && aColor == Color( COL_TRANSPARENT ) )
1497*b1cdbd2cSJim Jagielski                 nSelPos = m_pColorLB->GetEntryPos( m_pImpl->m_aTransparentText );
1498*b1cdbd2cSJim Jagielski 
1499*b1cdbd2cSJim Jagielski 			if ( LISTBOX_ENTRY_NOTFOUND != nSelPos )
1500*b1cdbd2cSJim Jagielski                 m_pColorLB->SelectEntryPos( nSelPos );
1501*b1cdbd2cSJim Jagielski 			else
1502*b1cdbd2cSJim Jagielski 			{
1503*b1cdbd2cSJim Jagielski                 nSelPos = m_pColorLB->GetEntryPos( aColor );
1504*b1cdbd2cSJim Jagielski 				if ( LISTBOX_ENTRY_NOTFOUND != nSelPos )
1505*b1cdbd2cSJim Jagielski                     m_pColorLB->SelectEntryPos( nSelPos );
1506*b1cdbd2cSJim Jagielski 				else
1507*b1cdbd2cSJim Jagielski                     m_pColorLB->SelectEntryPos(
1508*b1cdbd2cSJim Jagielski                         m_pColorLB->InsertEntry( aColor, String( SVX_RES( RID_SVXSTR_COLOR_USER ) ) ) );
1509*b1cdbd2cSJim Jagielski 			}
1510*b1cdbd2cSJim Jagielski 			break;
1511*b1cdbd2cSJim Jagielski 		}
1512*b1cdbd2cSJim Jagielski 	}
1513*b1cdbd2cSJim Jagielski }
1514*b1cdbd2cSJim Jagielski 
1515*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1516*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxCharNamePage,UpdateHdl_Impl,Timer *,EMPTYARG)1517*b1cdbd2cSJim Jagielski IMPL_LINK( SvxCharNamePage, UpdateHdl_Impl, Timer*, EMPTYARG )
1518*b1cdbd2cSJim Jagielski {
1519*b1cdbd2cSJim Jagielski 	UpdatePreview_Impl();
1520*b1cdbd2cSJim Jagielski 	return 0;
1521*b1cdbd2cSJim Jagielski }
1522*b1cdbd2cSJim Jagielski 
1523*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1524*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxCharNamePage,FontModifyHdl_Impl,void *,pNameBox)1525*b1cdbd2cSJim Jagielski IMPL_LINK( SvxCharNamePage, FontModifyHdl_Impl, void*, pNameBox )
1526*b1cdbd2cSJim Jagielski {
1527*b1cdbd2cSJim Jagielski 	m_pImpl->m_aUpdateTimer.Start();
1528*b1cdbd2cSJim Jagielski 
1529*b1cdbd2cSJim Jagielski     if ( m_pWestFontNameLB == pNameBox || m_pEastFontNameLB == pNameBox || m_pCTLFontNameLB == pNameBox )
1530*b1cdbd2cSJim Jagielski 	{
1531*b1cdbd2cSJim Jagielski 		FillStyleBox_Impl( (FontNameBox*)pNameBox );
1532*b1cdbd2cSJim Jagielski 		FillSizeBox_Impl( (FontNameBox*)pNameBox );
1533*b1cdbd2cSJim Jagielski 	}
1534*b1cdbd2cSJim Jagielski 	return 0;
1535*b1cdbd2cSJim Jagielski }
1536*b1cdbd2cSJim Jagielski 
1537*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1538*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxCharNamePage,ColorBoxSelectHdl_Impl,ColorListBox *,pBox)1539*b1cdbd2cSJim Jagielski IMPL_LINK( SvxCharNamePage, ColorBoxSelectHdl_Impl, ColorListBox*, pBox )
1540*b1cdbd2cSJim Jagielski {
1541*b1cdbd2cSJim Jagielski 	SvxFont& rFont = GetPreviewFont();
1542*b1cdbd2cSJim Jagielski     SvxFont& rCJKFont = GetPreviewCJKFont();
1543*b1cdbd2cSJim Jagielski 	SvxFont& rCTLFont = GetPreviewCTLFont();
1544*b1cdbd2cSJim Jagielski 	Color aSelectedColor;
1545*b1cdbd2cSJim Jagielski 	if ( pBox->GetSelectEntry() == m_pImpl->m_aTransparentText )
1546*b1cdbd2cSJim Jagielski 		aSelectedColor = Color( COL_TRANSPARENT );
1547*b1cdbd2cSJim Jagielski 	else
1548*b1cdbd2cSJim Jagielski 		aSelectedColor = pBox->GetSelectEntryColor();
1549*b1cdbd2cSJim Jagielski     rFont.SetColor( aSelectedColor.GetColor() == COL_AUTO ? Color(COL_BLACK) : aSelectedColor );
1550*b1cdbd2cSJim Jagielski     rCJKFont.SetColor( aSelectedColor.GetColor() == COL_AUTO ? Color(COL_BLACK) : aSelectedColor );
1551*b1cdbd2cSJim Jagielski 	rCTLFont.SetColor( aSelectedColor.GetColor() == COL_AUTO ? Color(COL_BLACK) : aSelectedColor );
1552*b1cdbd2cSJim Jagielski     m_aPreviewWin.Invalidate();
1553*b1cdbd2cSJim Jagielski 	return 0;
1554*b1cdbd2cSJim Jagielski }
1555*b1cdbd2cSJim Jagielski 
1556*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1557*b1cdbd2cSJim Jagielski 
ActivatePage(const SfxItemSet & rSet)1558*b1cdbd2cSJim Jagielski void SvxCharNamePage::ActivatePage( const SfxItemSet& rSet )
1559*b1cdbd2cSJim Jagielski {
1560*b1cdbd2cSJim Jagielski 	SvxCharBasePage::ActivatePage( rSet );
1561*b1cdbd2cSJim Jagielski 
1562*b1cdbd2cSJim Jagielski 	UpdatePreview_Impl();		// instead of asynchronous calling in ctor
1563*b1cdbd2cSJim Jagielski }
1564*b1cdbd2cSJim Jagielski 
1565*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1566*b1cdbd2cSJim Jagielski 
DeactivatePage(SfxItemSet * _pSet)1567*b1cdbd2cSJim Jagielski int SvxCharNamePage::DeactivatePage( SfxItemSet* _pSet )
1568*b1cdbd2cSJim Jagielski {
1569*b1cdbd2cSJim Jagielski     if ( _pSet )
1570*b1cdbd2cSJim Jagielski         FillItemSet( *_pSet );
1571*b1cdbd2cSJim Jagielski 	return LEAVE_PAGE;
1572*b1cdbd2cSJim Jagielski }
1573*b1cdbd2cSJim Jagielski 
1574*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1575*b1cdbd2cSJim Jagielski 
Create(Window * pParent,const SfxItemSet & rSet)1576*b1cdbd2cSJim Jagielski SfxTabPage* SvxCharNamePage::Create( Window* pParent, const SfxItemSet& rSet )
1577*b1cdbd2cSJim Jagielski {
1578*b1cdbd2cSJim Jagielski 	return new SvxCharNamePage( pParent, rSet );
1579*b1cdbd2cSJim Jagielski }
1580*b1cdbd2cSJim Jagielski 
1581*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1582*b1cdbd2cSJim Jagielski 
GetRanges()1583*b1cdbd2cSJim Jagielski sal_uInt16* SvxCharNamePage::GetRanges()
1584*b1cdbd2cSJim Jagielski {
1585*b1cdbd2cSJim Jagielski 	return pNameRanges;
1586*b1cdbd2cSJim Jagielski }
1587*b1cdbd2cSJim Jagielski 
1588*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1589*b1cdbd2cSJim Jagielski 
Reset(const SfxItemSet & rSet)1590*b1cdbd2cSJim Jagielski void SvxCharNamePage::Reset( const SfxItemSet& rSet )
1591*b1cdbd2cSJim Jagielski {
1592*b1cdbd2cSJim Jagielski 	Reset_Impl( rSet, Western );
1593*b1cdbd2cSJim Jagielski 	Reset_Impl( rSet, Asian );
1594*b1cdbd2cSJim Jagielski 	Reset_Impl( rSet, Ctl );
1595*b1cdbd2cSJim Jagielski 	ResetColor_Impl( rSet );
1596*b1cdbd2cSJim Jagielski     m_pColorLB->SaveValue();
1597*b1cdbd2cSJim Jagielski 
1598*b1cdbd2cSJim Jagielski 	SetPrevFontWidthScale( rSet );
1599*b1cdbd2cSJim Jagielski 	UpdatePreview_Impl();
1600*b1cdbd2cSJim Jagielski }
1601*b1cdbd2cSJim Jagielski 
1602*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1603*b1cdbd2cSJim Jagielski 
FillItemSet(SfxItemSet & rSet)1604*b1cdbd2cSJim Jagielski sal_Bool SvxCharNamePage::FillItemSet( SfxItemSet& rSet )
1605*b1cdbd2cSJim Jagielski {
1606*b1cdbd2cSJim Jagielski 	sal_Bool bModified = FillItemSet_Impl( rSet, Western );
1607*b1cdbd2cSJim Jagielski 	bModified |= FillItemSet_Impl( rSet, Asian );
1608*b1cdbd2cSJim Jagielski 	bModified |= FillItemSet_Impl( rSet, Ctl );
1609*b1cdbd2cSJim Jagielski 	return bModified;
1610*b1cdbd2cSJim Jagielski }
1611*b1cdbd2cSJim Jagielski 
1612*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1613*b1cdbd2cSJim Jagielski 
SetFontList(const SvxFontListItem & rItem)1614*b1cdbd2cSJim Jagielski void SvxCharNamePage::SetFontList( const SvxFontListItem& rItem )
1615*b1cdbd2cSJim Jagielski {
1616*b1cdbd2cSJim Jagielski 	if ( m_pImpl->m_bMustDelete )
1617*b1cdbd2cSJim Jagielski 	{
1618*b1cdbd2cSJim Jagielski 		delete m_pImpl->m_pFontList;
1619*b1cdbd2cSJim Jagielski 	}
1620*b1cdbd2cSJim Jagielski     m_pImpl->m_pFontList = rItem.GetFontList()->Clone();
1621*b1cdbd2cSJim Jagielski     m_pImpl->m_bMustDelete = sal_True;
1622*b1cdbd2cSJim Jagielski }
1623*b1cdbd2cSJim Jagielski 
1624*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1625*b1cdbd2cSJim Jagielski namespace
1626*b1cdbd2cSJim Jagielski {
enableRelativeMode(SvxCharNamePage * _pPage,FontSizeBox * _pFontSizeLB,sal_uInt16 _nHeightWhich)1627*b1cdbd2cSJim Jagielski 	void enableRelativeMode( SvxCharNamePage* _pPage, FontSizeBox* _pFontSizeLB, sal_uInt16 _nHeightWhich )
1628*b1cdbd2cSJim Jagielski 	{
1629*b1cdbd2cSJim Jagielski 		_pFontSizeLB->EnableRelativeMode( 5, 995, 5 ); // min 5%, max 995%, step 5
1630*b1cdbd2cSJim Jagielski 
1631*b1cdbd2cSJim Jagielski 		const SvxFontHeightItem& rHeightItem =
1632*b1cdbd2cSJim Jagielski 			(SvxFontHeightItem&)_pPage->GetItemSet().GetParent()->Get( _nHeightWhich );
1633*b1cdbd2cSJim Jagielski 		SfxMapUnit eUnit = _pPage->GetItemSet().GetPool()->GetMetric( _nHeightWhich );
1634*b1cdbd2cSJim Jagielski 		short nCurHeight =
1635*b1cdbd2cSJim Jagielski 			static_cast< short >( CalcToPoint( rHeightItem.GetHeight(), eUnit, 1 ) * 10 );
1636*b1cdbd2cSJim Jagielski 
1637*b1cdbd2cSJim Jagielski 		// ausgehend von der akt. Hoehe:
1638*b1cdbd2cSJim Jagielski 		//		- negativ bis minimal 2 pt
1639*b1cdbd2cSJim Jagielski 		//		- positiv bis maximal 999 pt
1640*b1cdbd2cSJim Jagielski 		_pFontSizeLB->EnablePtRelativeMode( sal::static_int_cast< short >(-(nCurHeight - 20)), (9999 - nCurHeight), 10 );
1641*b1cdbd2cSJim Jagielski 	}
1642*b1cdbd2cSJim Jagielski }
1643*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
1644*b1cdbd2cSJim Jagielski 
EnableRelativeMode()1645*b1cdbd2cSJim Jagielski void SvxCharNamePage::EnableRelativeMode()
1646*b1cdbd2cSJim Jagielski {
1647*b1cdbd2cSJim Jagielski 	DBG_ASSERT( GetItemSet().GetParent(), "RelativeMode, but no ParentSet!" );
1648*b1cdbd2cSJim Jagielski 	enableRelativeMode(this,m_pWestFontSizeLB,GetWhich( SID_ATTR_CHAR_FONTHEIGHT ));
1649*b1cdbd2cSJim Jagielski 	enableRelativeMode(this,m_pEastFontSizeLB,GetWhich( SID_ATTR_CHAR_CJK_FONTHEIGHT ));
1650*b1cdbd2cSJim Jagielski 	enableRelativeMode(this,m_pCTLFontSizeLB,GetWhich( SID_ATTR_CHAR_CTL_FONTHEIGHT ));
1651*b1cdbd2cSJim Jagielski }
1652*b1cdbd2cSJim Jagielski 
1653*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1654*b1cdbd2cSJim Jagielski 
EnableSearchMode()1655*b1cdbd2cSJim Jagielski void SvxCharNamePage::EnableSearchMode()
1656*b1cdbd2cSJim Jagielski {
1657*b1cdbd2cSJim Jagielski 	m_pImpl->m_bInSearchMode = sal_True;
1658*b1cdbd2cSJim Jagielski }
1659*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
DisableControls(sal_uInt16 nDisable)1660*b1cdbd2cSJim Jagielski void SvxCharNamePage::DisableControls( sal_uInt16 nDisable )
1661*b1cdbd2cSJim Jagielski {
1662*b1cdbd2cSJim Jagielski 	if ( DISABLE_LANGUAGE & nDisable )
1663*b1cdbd2cSJim Jagielski 	{
1664*b1cdbd2cSJim Jagielski 		if ( m_pWestFontLanguageFT ) m_pWestFontLanguageFT->Disable();
1665*b1cdbd2cSJim Jagielski 		if ( m_pWestFontLanguageLB ) m_pWestFontLanguageLB->Disable();
1666*b1cdbd2cSJim Jagielski 		if ( m_pEastFontLanguageFT ) m_pEastFontLanguageFT->Disable();
1667*b1cdbd2cSJim Jagielski 		if ( m_pEastFontLanguageLB ) m_pEastFontLanguageLB->Disable();
1668*b1cdbd2cSJim Jagielski 		if ( m_pCTLFontLanguageFT ) m_pCTLFontLanguageFT->Disable();
1669*b1cdbd2cSJim Jagielski 		if ( m_pCTLFontLanguageLB ) m_pCTLFontLanguageLB->Disable();
1670*b1cdbd2cSJim Jagielski 	}
1671*b1cdbd2cSJim Jagielski 
1672*b1cdbd2cSJim Jagielski 	if ( DISABLE_HIDE_LANGUAGE & nDisable )
1673*b1cdbd2cSJim Jagielski 	{
1674*b1cdbd2cSJim Jagielski 		if ( m_pWestFontLanguageFT ) m_pWestFontLanguageFT->Hide();
1675*b1cdbd2cSJim Jagielski 		if ( m_pWestFontLanguageLB ) m_pWestFontLanguageLB->Hide();
1676*b1cdbd2cSJim Jagielski 		if ( m_pEastFontLanguageFT ) m_pEastFontLanguageFT->Hide();
1677*b1cdbd2cSJim Jagielski 		if ( m_pEastFontLanguageLB ) m_pEastFontLanguageLB->Hide();
1678*b1cdbd2cSJim Jagielski 		if ( m_pCTLFontLanguageFT ) m_pCTLFontLanguageFT->Hide();
1679*b1cdbd2cSJim Jagielski 		if ( m_pCTLFontLanguageLB ) m_pCTLFontLanguageLB->Hide();
1680*b1cdbd2cSJim Jagielski 	}
1681*b1cdbd2cSJim Jagielski }
1682*b1cdbd2cSJim Jagielski 
1683*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
SetPreviewBackgroundToCharacter()1684*b1cdbd2cSJim Jagielski void SvxCharNamePage::SetPreviewBackgroundToCharacter()
1685*b1cdbd2cSJim Jagielski {
1686*b1cdbd2cSJim Jagielski     m_bPreviewBackgroundToCharacter = sal_True;
1687*b1cdbd2cSJim Jagielski }
1688*b1cdbd2cSJim Jagielski 
1689*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
PageCreated(SfxAllItemSet aSet)1690*b1cdbd2cSJim Jagielski void SvxCharNamePage::PageCreated (SfxAllItemSet aSet) //add CHINA001
1691*b1cdbd2cSJim Jagielski {
1692*b1cdbd2cSJim Jagielski 	SFX_ITEMSET_ARG (&aSet,pFontListItem,SvxFontListItem,SID_ATTR_CHAR_FONTLIST,sal_False);
1693*b1cdbd2cSJim Jagielski 	SFX_ITEMSET_ARG (&aSet,pFlagItem,SfxUInt32Item,SID_FLAG_TYPE,sal_False);
1694*b1cdbd2cSJim Jagielski 	SFX_ITEMSET_ARG (&aSet,pDisalbeItem,SfxUInt16Item,SID_DISABLE_CTL,sal_False);
1695*b1cdbd2cSJim Jagielski 	if (pFontListItem)
1696*b1cdbd2cSJim Jagielski 		SetFontList(*pFontListItem);
1697*b1cdbd2cSJim Jagielski 		//CHINA001 SetFontList(pFontListItem->GetFontList());
1698*b1cdbd2cSJim Jagielski 
1699*b1cdbd2cSJim Jagielski 	if (pFlagItem)
1700*b1cdbd2cSJim Jagielski 	{
1701*b1cdbd2cSJim Jagielski 		sal_uInt32 nFlags=pFlagItem->GetValue();
1702*b1cdbd2cSJim Jagielski 		if ( ( nFlags & SVX_RELATIVE_MODE ) == SVX_RELATIVE_MODE )
1703*b1cdbd2cSJim Jagielski 			EnableRelativeMode();
1704*b1cdbd2cSJim Jagielski 		if ( ( nFlags & SVX_PREVIEW_CHARACTER ) == SVX_PREVIEW_CHARACTER )
1705*b1cdbd2cSJim Jagielski 			SetPreviewBackgroundToCharacter();
1706*b1cdbd2cSJim Jagielski 	}
1707*b1cdbd2cSJim Jagielski 	if (pDisalbeItem)
1708*b1cdbd2cSJim Jagielski 		DisableControls(pDisalbeItem->GetValue());
1709*b1cdbd2cSJim Jagielski }
1710*b1cdbd2cSJim Jagielski // class SvxCharEffectsPage ----------------------------------------------
1711*b1cdbd2cSJim Jagielski 
SvxCharEffectsPage(Window * pParent,const SfxItemSet & rInSet)1712*b1cdbd2cSJim Jagielski SvxCharEffectsPage::SvxCharEffectsPage( Window* pParent, const SfxItemSet& rInSet ) :
1713*b1cdbd2cSJim Jagielski 
1714*b1cdbd2cSJim Jagielski 	SvxCharBasePage( pParent, CUI_RES( RID_SVXPAGE_CHAR_EFFECTS ), rInSet, WIN_EFFECTS_PREVIEW, FT_EFFECTS_FONTTYPE ),
1715*b1cdbd2cSJim Jagielski 
1716*b1cdbd2cSJim Jagielski     m_aFontColorFT          ( this, CUI_RES( FT_FONTCOLOR ) ),
1717*b1cdbd2cSJim Jagielski     m_aFontColorLB          ( this, CUI_RES( LB_FONTCOLOR ) ),
1718*b1cdbd2cSJim Jagielski 
1719*b1cdbd2cSJim Jagielski 	m_aEffectsFT			( this, CUI_RES( FT_EFFECTS ) ),
1720*b1cdbd2cSJim Jagielski 	m_aEffectsLB			( this, 0 ),
1721*b1cdbd2cSJim Jagielski 
1722*b1cdbd2cSJim Jagielski 	m_aEffects2LB			( this, CUI_RES( LB_EFFECTS2 ) ),
1723*b1cdbd2cSJim Jagielski 
1724*b1cdbd2cSJim Jagielski     m_aReliefFT             ( this, CUI_RES( FT_RELIEF ) ),
1725*b1cdbd2cSJim Jagielski     m_aReliefLB             ( this, CUI_RES( LB_RELIEF ) ),
1726*b1cdbd2cSJim Jagielski 
1727*b1cdbd2cSJim Jagielski 	m_aOutlineBtn			( this, CUI_RES( CB_OUTLINE ) ),
1728*b1cdbd2cSJim Jagielski 	m_aShadowBtn			( this, CUI_RES( CB_SHADOW ) ),
1729*b1cdbd2cSJim Jagielski 	m_aBlinkingBtn			( this, CUI_RES( CB_BLINKING ) ),
1730*b1cdbd2cSJim Jagielski     m_aHiddenBtn            ( this, CUI_RES( CB_CHARHIDDEN ) ),
1731*b1cdbd2cSJim Jagielski 
1732*b1cdbd2cSJim Jagielski 	m_aVerticalLine			( this, CUI_RES( FL_EFFECTS_VERTICAL ) ),
1733*b1cdbd2cSJim Jagielski 
1734*b1cdbd2cSJim Jagielski 	m_aOverlineFT			( this, CUI_RES( FT_OVERLINE ) ),
1735*b1cdbd2cSJim Jagielski 	m_aOverlineLB			( this, CUI_RES( LB_OVERLINE ) ),
1736*b1cdbd2cSJim Jagielski 	m_aOverlineColorFT		( this, CUI_RES( FT_OVERLINE_COLOR ) ),
1737*b1cdbd2cSJim Jagielski 	m_aOverlineColorLB		( this, CUI_RES( LB_OVERLINE_COLOR ) ),
1738*b1cdbd2cSJim Jagielski 	m_aStrikeoutFT			( this, CUI_RES( FT_STRIKEOUT ) ),
1739*b1cdbd2cSJim Jagielski 	m_aStrikeoutLB			( this, CUI_RES( LB_STRIKEOUT ) ),
1740*b1cdbd2cSJim Jagielski 	m_aUnderlineFT			( this, CUI_RES( FT_UNDERLINE ) ),
1741*b1cdbd2cSJim Jagielski 	m_aUnderlineLB			( this, CUI_RES( LB_UNDERLINE ) ),
1742*b1cdbd2cSJim Jagielski 	m_aUnderlineColorFT		( this, CUI_RES( FT_UNDERLINE_COLOR ) ),
1743*b1cdbd2cSJim Jagielski 	m_aUnderlineColorLB		( this, CUI_RES( LB_UNDERLINE_COLOR ) ),
1744*b1cdbd2cSJim Jagielski 	m_aIndividualWordsBtn	( this, CUI_RES( CB_INDIVIDUALWORDS ) ),
1745*b1cdbd2cSJim Jagielski 
1746*b1cdbd2cSJim Jagielski 	m_aAsianLine			( this, CUI_RES( FL_EFFECTS_ASIAN ) ),
1747*b1cdbd2cSJim Jagielski 
1748*b1cdbd2cSJim Jagielski 	m_aEmphasisFT			( this, CUI_RES( FT_EMPHASIS ) ),
1749*b1cdbd2cSJim Jagielski 	m_aEmphasisLB			( this, CUI_RES( LB_EMPHASIS ) ),
1750*b1cdbd2cSJim Jagielski 	m_aPositionFT			( this, CUI_RES( FT_POSITION ) ),
1751*b1cdbd2cSJim Jagielski 	m_aPositionLB			( this, CUI_RES( LB_POSITION ) ),
1752*b1cdbd2cSJim Jagielski 
1753*b1cdbd2cSJim Jagielski 	m_aTransparentColorName	( CUI_RES( STR_CHARNAME_TRANSPARENT ) )
1754*b1cdbd2cSJim Jagielski 
1755*b1cdbd2cSJim Jagielski {
1756*b1cdbd2cSJim Jagielski 	m_aEffectsLB.Hide();
1757*b1cdbd2cSJim Jagielski 	FreeResource();
1758*b1cdbd2cSJim Jagielski 	Initialize();
1759*b1cdbd2cSJim Jagielski }
1760*b1cdbd2cSJim Jagielski 
1761*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1762*b1cdbd2cSJim Jagielski 
Initialize()1763*b1cdbd2cSJim Jagielski void SvxCharEffectsPage::Initialize()
1764*b1cdbd2cSJim Jagielski {
1765*b1cdbd2cSJim Jagielski 	// to handle the changes of the other pages
1766*b1cdbd2cSJim Jagielski 	SetExchangeSupport();
1767*b1cdbd2cSJim Jagielski 
1768*b1cdbd2cSJim Jagielski 	// HTML-Mode
1769*b1cdbd2cSJim Jagielski 	const SfxPoolItem* pItem;
1770*b1cdbd2cSJim Jagielski 	SfxObjectShell* pShell;
1771*b1cdbd2cSJim Jagielski 	if ( SFX_ITEM_SET == GetItemSet().GetItemState( SID_HTML_MODE, sal_False, &pItem ) ||
1772*b1cdbd2cSJim Jagielski 		 ( NULL != ( pShell = SfxObjectShell::Current() ) &&
1773*b1cdbd2cSJim Jagielski 		   NULL != ( pItem = pShell->GetItem( SID_HTML_MODE ) ) ) )
1774*b1cdbd2cSJim Jagielski 	{
1775*b1cdbd2cSJim Jagielski 		m_nHtmlMode = ( (const SfxUInt16Item*)pItem )->GetValue();
1776*b1cdbd2cSJim Jagielski 		if ( ( m_nHtmlMode & HTMLMODE_ON ) == HTMLMODE_ON )
1777*b1cdbd2cSJim Jagielski 		{
1778*b1cdbd2cSJim Jagielski 			//!!! hide some controls please
1779*b1cdbd2cSJim Jagielski 		}
1780*b1cdbd2cSJim Jagielski 	}
1781*b1cdbd2cSJim Jagielski 
1782*b1cdbd2cSJim Jagielski 	// fill the color box
1783*b1cdbd2cSJim Jagielski 	SfxObjectShell* pDocSh = SfxObjectShell::Current();
1784*b1cdbd2cSJim Jagielski 	DBG_ASSERT( pDocSh, "DocShell not found!" );
1785*b1cdbd2cSJim Jagielski 	XColorListSharedPtr aColorTable;
1786*b1cdbd2cSJim Jagielski 
1787*b1cdbd2cSJim Jagielski 	if ( pDocSh )
1788*b1cdbd2cSJim Jagielski     {
1789*b1cdbd2cSJim Jagielski         pItem = pDocSh->GetItem( SID_COLOR_TABLE );
1790*b1cdbd2cSJim Jagielski         if ( pItem != NULL )
1791*b1cdbd2cSJim Jagielski             aColorTable = static_cast< const SvxColorTableItem* >(pItem)->GetColorTable();
1792*b1cdbd2cSJim Jagielski     }
1793*b1cdbd2cSJim Jagielski 
1794*b1cdbd2cSJim Jagielski 	if ( !aColorTable.get() )
1795*b1cdbd2cSJim Jagielski 	{
1796*b1cdbd2cSJim Jagielski 		aColorTable = XPropertyListFactory::CreateSharedXColorList(SvtPathOptions().GetPalettePath());
1797*b1cdbd2cSJim Jagielski 	}
1798*b1cdbd2cSJim Jagielski 
1799*b1cdbd2cSJim Jagielski 	m_aUnderlineColorLB.SetUpdateMode( sal_False );
1800*b1cdbd2cSJim Jagielski 	m_aOverlineColorLB.SetUpdateMode( sal_False );
1801*b1cdbd2cSJim Jagielski 	m_aFontColorLB.SetUpdateMode( sal_False );
1802*b1cdbd2cSJim Jagielski 
1803*b1cdbd2cSJim Jagielski 	{
1804*b1cdbd2cSJim Jagielski 		SfxPoolItem* pDummy;
1805*b1cdbd2cSJim Jagielski 		SfxViewFrame* pFrame = SfxViewFrame::GetFirst( pDocSh );
1806*b1cdbd2cSJim Jagielski 		if ( !pFrame ||
1807*b1cdbd2cSJim Jagielski 			 SFX_ITEM_DEFAULT > pFrame->GetBindings().QueryState( SID_ATTR_AUTO_COLOR_INVALID, pDummy ) )
1808*b1cdbd2cSJim Jagielski 		{
1809*b1cdbd2cSJim Jagielski 			m_aUnderlineColorLB.InsertAutomaticEntry();
1810*b1cdbd2cSJim Jagielski 			m_aOverlineColorLB.InsertAutomaticEntry();
1811*b1cdbd2cSJim Jagielski 			m_aFontColorLB.InsertAutomaticEntry();
1812*b1cdbd2cSJim Jagielski 		}
1813*b1cdbd2cSJim Jagielski 	}
1814*b1cdbd2cSJim Jagielski 	for ( long i = 0; i < aColorTable->Count(); i++ )
1815*b1cdbd2cSJim Jagielski 	{
1816*b1cdbd2cSJim Jagielski         XColorEntry* pEntry = aColorTable->GetColor(i);
1817*b1cdbd2cSJim Jagielski 		m_aUnderlineColorLB.InsertEntry( pEntry->GetColor(), pEntry->GetName() );
1818*b1cdbd2cSJim Jagielski 		m_aOverlineColorLB.InsertEntry( pEntry->GetColor(), pEntry->GetName() );
1819*b1cdbd2cSJim Jagielski 		m_aFontColorLB.InsertEntry( pEntry->GetColor(), pEntry->GetName() );
1820*b1cdbd2cSJim Jagielski 	}
1821*b1cdbd2cSJim Jagielski 
1822*b1cdbd2cSJim Jagielski 	m_aUnderlineColorLB.SetUpdateMode( sal_True );
1823*b1cdbd2cSJim Jagielski 	m_aOverlineColorLB.SetUpdateMode( sal_True );
1824*b1cdbd2cSJim Jagielski 	m_aFontColorLB.SetUpdateMode( sal_True );
1825*b1cdbd2cSJim Jagielski     m_aFontColorLB.SetSelectHdl( LINK( this, SvxCharEffectsPage, ColorBoxSelectHdl_Impl ) );
1826*b1cdbd2cSJim Jagielski 
1827*b1cdbd2cSJim Jagielski 	// handler
1828*b1cdbd2cSJim Jagielski 	Link aLink = LINK( this, SvxCharEffectsPage, SelectHdl_Impl );
1829*b1cdbd2cSJim Jagielski 	m_aUnderlineLB.SetSelectHdl( aLink );
1830*b1cdbd2cSJim Jagielski     m_aUnderlineColorLB.SetSelectHdl( aLink );
1831*b1cdbd2cSJim Jagielski 	m_aOverlineLB.SetSelectHdl( aLink );
1832*b1cdbd2cSJim Jagielski     m_aOverlineColorLB.SetSelectHdl( aLink );
1833*b1cdbd2cSJim Jagielski 	m_aStrikeoutLB.SetSelectHdl( aLink );
1834*b1cdbd2cSJim Jagielski 	m_aEmphasisLB.SetSelectHdl( aLink );
1835*b1cdbd2cSJim Jagielski 	m_aPositionLB.SetSelectHdl( aLink );
1836*b1cdbd2cSJim Jagielski 	m_aEffects2LB.SetSelectHdl( aLink );
1837*b1cdbd2cSJim Jagielski     m_aReliefLB.SetSelectHdl( aLink );
1838*b1cdbd2cSJim Jagielski 
1839*b1cdbd2cSJim Jagielski 	m_aUnderlineLB.SelectEntryPos( 0 );
1840*b1cdbd2cSJim Jagielski 	m_aUnderlineColorLB.SelectEntryPos( 0 );
1841*b1cdbd2cSJim Jagielski 	m_aOverlineLB.SelectEntryPos( 0 );
1842*b1cdbd2cSJim Jagielski 	m_aOverlineColorLB.SelectEntryPos( 0 );
1843*b1cdbd2cSJim Jagielski 	m_aStrikeoutLB.SelectEntryPos( 0 );
1844*b1cdbd2cSJim Jagielski 	m_aEmphasisLB.SelectEntryPos( 0 );
1845*b1cdbd2cSJim Jagielski 	m_aPositionLB.SelectEntryPos( 0 );
1846*b1cdbd2cSJim Jagielski 	SelectHdl_Impl( NULL );
1847*b1cdbd2cSJim Jagielski 	SelectHdl_Impl( &m_aEmphasisLB );
1848*b1cdbd2cSJim Jagielski 
1849*b1cdbd2cSJim Jagielski 	m_aEffects2LB.SelectEntryPos( 0 );
1850*b1cdbd2cSJim Jagielski 
1851*b1cdbd2cSJim Jagielski     m_aIndividualWordsBtn.SetClickHdl( LINK( this, SvxCharEffectsPage, CbClickHdl_Impl ) );
1852*b1cdbd2cSJim Jagielski     aLink = LINK( this, SvxCharEffectsPage, TristClickHdl_Impl );
1853*b1cdbd2cSJim Jagielski 	m_aOutlineBtn.SetClickHdl( aLink );
1854*b1cdbd2cSJim Jagielski 	m_aShadowBtn.SetClickHdl( aLink );
1855*b1cdbd2cSJim Jagielski 
1856*b1cdbd2cSJim Jagielski     if ( !SvtLanguageOptions().IsAsianTypographyEnabled() )
1857*b1cdbd2cSJim Jagielski     {
1858*b1cdbd2cSJim Jagielski 		m_aAsianLine.Hide();
1859*b1cdbd2cSJim Jagielski         m_aEmphasisFT.Hide();
1860*b1cdbd2cSJim Jagielski         m_aEmphasisLB.Hide();
1861*b1cdbd2cSJim Jagielski         m_aPositionFT.Hide();
1862*b1cdbd2cSJim Jagielski         m_aPositionLB.Hide();
1863*b1cdbd2cSJim Jagielski 	}
1864*b1cdbd2cSJim Jagielski }
1865*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1866*b1cdbd2cSJim Jagielski 
UpdatePreview_Impl()1867*b1cdbd2cSJim Jagielski void SvxCharEffectsPage::UpdatePreview_Impl()
1868*b1cdbd2cSJim Jagielski {
1869*b1cdbd2cSJim Jagielski 	SvxFont& rFont = GetPreviewFont();
1870*b1cdbd2cSJim Jagielski     SvxFont& rCJKFont = GetPreviewCJKFont();
1871*b1cdbd2cSJim Jagielski 	SvxFont& rCTLFont = GetPreviewCTLFont();
1872*b1cdbd2cSJim Jagielski 
1873*b1cdbd2cSJim Jagielski 	sal_uInt16 nPos = m_aUnderlineLB.GetSelectEntryPos();
1874*b1cdbd2cSJim Jagielski 	FontUnderline eUnderline = (FontUnderline)(sal_uLong)m_aUnderlineLB.GetEntryData( nPos );
1875*b1cdbd2cSJim Jagielski 	nPos = m_aOverlineLB.GetSelectEntryPos();
1876*b1cdbd2cSJim Jagielski 	FontUnderline eOverline = (FontUnderline)(sal_uLong)m_aOverlineLB.GetEntryData( nPos );
1877*b1cdbd2cSJim Jagielski 	nPos = m_aStrikeoutLB.GetSelectEntryPos();
1878*b1cdbd2cSJim Jagielski 	FontStrikeout eStrikeout = (FontStrikeout)(sal_uLong)m_aStrikeoutLB.GetEntryData( nPos );
1879*b1cdbd2cSJim Jagielski 	rFont.SetUnderline( eUnderline );
1880*b1cdbd2cSJim Jagielski     rCJKFont.SetUnderline( eUnderline );
1881*b1cdbd2cSJim Jagielski 	rCTLFont.SetUnderline( eUnderline );
1882*b1cdbd2cSJim Jagielski 	m_aPreviewWin.SetTextLineColor( m_aUnderlineColorLB.GetSelectEntryColor() );
1883*b1cdbd2cSJim Jagielski 	rFont.SetOverline( eOverline );
1884*b1cdbd2cSJim Jagielski     rCJKFont.SetOverline( eOverline );
1885*b1cdbd2cSJim Jagielski 	rCTLFont.SetOverline( eOverline );
1886*b1cdbd2cSJim Jagielski 	m_aPreviewWin.SetOverlineColor( m_aOverlineColorLB.GetSelectEntryColor() );
1887*b1cdbd2cSJim Jagielski 	rFont.SetStrikeout( eStrikeout );
1888*b1cdbd2cSJim Jagielski     rCJKFont.SetStrikeout( eStrikeout );
1889*b1cdbd2cSJim Jagielski 	rCTLFont.SetStrikeout( eStrikeout );
1890*b1cdbd2cSJim Jagielski 
1891*b1cdbd2cSJim Jagielski 	nPos = m_aPositionLB.GetSelectEntryPos();
1892*b1cdbd2cSJim Jagielski 	sal_Bool bUnder = ( CHRDLG_POSITION_UNDER == (sal_uLong)m_aPositionLB.GetEntryData( nPos ) );
1893*b1cdbd2cSJim Jagielski 	FontEmphasisMark eMark = (FontEmphasisMark)m_aEmphasisLB.GetSelectEntryPos();
1894*b1cdbd2cSJim Jagielski 	eMark |= bUnder ? EMPHASISMARK_POS_BELOW : EMPHASISMARK_POS_ABOVE;
1895*b1cdbd2cSJim Jagielski 	rFont.SetEmphasisMark( eMark );
1896*b1cdbd2cSJim Jagielski     rCJKFont.SetEmphasisMark( eMark );
1897*b1cdbd2cSJim Jagielski 	rCTLFont.SetEmphasisMark( eMark );
1898*b1cdbd2cSJim Jagielski 
1899*b1cdbd2cSJim Jagielski     sal_uInt16 nRelief = m_aReliefLB.GetSelectEntryPos();
1900*b1cdbd2cSJim Jagielski     if(LISTBOX_ENTRY_NOTFOUND != nRelief)
1901*b1cdbd2cSJim Jagielski     {
1902*b1cdbd2cSJim Jagielski         rFont.SetRelief( (FontRelief)nRelief );
1903*b1cdbd2cSJim Jagielski         rCJKFont.SetRelief( (FontRelief)nRelief );
1904*b1cdbd2cSJim Jagielski 		rCTLFont.SetRelief( (FontRelief)nRelief );
1905*b1cdbd2cSJim Jagielski     }
1906*b1cdbd2cSJim Jagielski 
1907*b1cdbd2cSJim Jagielski     rFont.SetOutline( StateToAttr( m_aOutlineBtn.GetState() ) );
1908*b1cdbd2cSJim Jagielski     rCJKFont.SetOutline( rFont.IsOutline() );
1909*b1cdbd2cSJim Jagielski 	rCTLFont.SetOutline( rFont.IsOutline() );
1910*b1cdbd2cSJim Jagielski 
1911*b1cdbd2cSJim Jagielski     rFont.SetShadow( StateToAttr( m_aShadowBtn.GetState() ) );
1912*b1cdbd2cSJim Jagielski     rCJKFont.SetShadow( rFont.IsShadow() );
1913*b1cdbd2cSJim Jagielski 	rCTLFont.SetShadow( rFont.IsShadow() );
1914*b1cdbd2cSJim Jagielski 
1915*b1cdbd2cSJim Jagielski 	sal_uInt16 nCapsPos = m_aEffects2LB.GetSelectEntryPos();
1916*b1cdbd2cSJim Jagielski 	if ( nCapsPos != LISTBOX_ENTRY_NOTFOUND )
1917*b1cdbd2cSJim Jagielski     {
1918*b1cdbd2cSJim Jagielski 		rFont.SetCaseMap( (SvxCaseMap)nCapsPos );
1919*b1cdbd2cSJim Jagielski         rCJKFont.SetCaseMap( (SvxCaseMap)nCapsPos );
1920*b1cdbd2cSJim Jagielski         // #i78474# small caps do not exist in CTL fonts
1921*b1cdbd2cSJim Jagielski         rCTLFont.SetCaseMap( static_cast<SvxCaseMap>( nCapsPos == SVX_CASEMAP_KAPITAELCHEN ? SVX_CASEMAP_NOT_MAPPED : (SvxCaseMap)nCapsPos) );
1922*b1cdbd2cSJim Jagielski     }
1923*b1cdbd2cSJim Jagielski 
1924*b1cdbd2cSJim Jagielski     sal_Bool bWordLine = m_aIndividualWordsBtn.IsChecked();
1925*b1cdbd2cSJim Jagielski     rFont.SetWordLineMode( bWordLine );
1926*b1cdbd2cSJim Jagielski     rCJKFont.SetWordLineMode( bWordLine );
1927*b1cdbd2cSJim Jagielski 	rCTLFont.SetWordLineMode( bWordLine );
1928*b1cdbd2cSJim Jagielski 
1929*b1cdbd2cSJim Jagielski     m_aPreviewWin.Invalidate();
1930*b1cdbd2cSJim Jagielski }
1931*b1cdbd2cSJim Jagielski 
1932*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1933*b1cdbd2cSJim Jagielski 
SetCaseMap_Impl(SvxCaseMap eCaseMap)1934*b1cdbd2cSJim Jagielski void SvxCharEffectsPage::SetCaseMap_Impl( SvxCaseMap eCaseMap )
1935*b1cdbd2cSJim Jagielski {
1936*b1cdbd2cSJim Jagielski 	if ( SVX_CASEMAP_END > eCaseMap )
1937*b1cdbd2cSJim Jagielski 		m_aEffects2LB.SelectEntryPos(
1938*b1cdbd2cSJim Jagielski             sal::static_int_cast< sal_uInt16 >( eCaseMap ) );
1939*b1cdbd2cSJim Jagielski 	else
1940*b1cdbd2cSJim Jagielski 	{
1941*b1cdbd2cSJim Jagielski 		m_aEffects2LB.SetNoSelection();
1942*b1cdbd2cSJim Jagielski 		eCaseMap = SVX_CASEMAP_NOT_MAPPED;
1943*b1cdbd2cSJim Jagielski 	}
1944*b1cdbd2cSJim Jagielski 
1945*b1cdbd2cSJim Jagielski 	UpdatePreview_Impl();
1946*b1cdbd2cSJim Jagielski }
1947*b1cdbd2cSJim Jagielski 
1948*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1949*b1cdbd2cSJim Jagielski 
ResetColor_Impl(const SfxItemSet & rSet)1950*b1cdbd2cSJim Jagielski void SvxCharEffectsPage::ResetColor_Impl( const SfxItemSet& rSet )
1951*b1cdbd2cSJim Jagielski {
1952*b1cdbd2cSJim Jagielski 	sal_uInt16 nWhich = GetWhich( SID_ATTR_CHAR_COLOR );
1953*b1cdbd2cSJim Jagielski 	SfxItemState eState = rSet.GetItemState( nWhich );
1954*b1cdbd2cSJim Jagielski 
1955*b1cdbd2cSJim Jagielski 	switch ( eState )
1956*b1cdbd2cSJim Jagielski 	{
1957*b1cdbd2cSJim Jagielski 		case SFX_ITEM_UNKNOWN:
1958*b1cdbd2cSJim Jagielski             m_aFontColorFT.Hide();
1959*b1cdbd2cSJim Jagielski             m_aFontColorLB.Hide();
1960*b1cdbd2cSJim Jagielski 			break;
1961*b1cdbd2cSJim Jagielski 
1962*b1cdbd2cSJim Jagielski 		case SFX_ITEM_DISABLED:
1963*b1cdbd2cSJim Jagielski 		case SFX_ITEM_READONLY:
1964*b1cdbd2cSJim Jagielski             m_aFontColorFT.Disable();
1965*b1cdbd2cSJim Jagielski             m_aFontColorLB.Disable();
1966*b1cdbd2cSJim Jagielski 			break;
1967*b1cdbd2cSJim Jagielski 
1968*b1cdbd2cSJim Jagielski 		case SFX_ITEM_DONTCARE:
1969*b1cdbd2cSJim Jagielski             m_aFontColorLB.SetNoSelection();
1970*b1cdbd2cSJim Jagielski 			break;
1971*b1cdbd2cSJim Jagielski 
1972*b1cdbd2cSJim Jagielski 		case SFX_ITEM_DEFAULT:
1973*b1cdbd2cSJim Jagielski 		case SFX_ITEM_SET:
1974*b1cdbd2cSJim Jagielski 		{
1975*b1cdbd2cSJim Jagielski 			SvxFont& rFont = GetPreviewFont();
1976*b1cdbd2cSJim Jagielski             SvxFont& rCJKFont = GetPreviewCJKFont();
1977*b1cdbd2cSJim Jagielski 			SvxFont& rCTLFont = GetPreviewCTLFont();
1978*b1cdbd2cSJim Jagielski 
1979*b1cdbd2cSJim Jagielski 			const SvxColorItem& rItem = (SvxColorItem&)rSet.Get( nWhich );
1980*b1cdbd2cSJim Jagielski 			Color aColor = rItem.GetValue();
1981*b1cdbd2cSJim Jagielski             rFont.SetColor( aColor.GetColor() == COL_AUTO ? Color(COL_BLACK) : aColor );
1982*b1cdbd2cSJim Jagielski             rCJKFont.SetColor( aColor.GetColor() == COL_AUTO ? Color(COL_BLACK) : aColor );
1983*b1cdbd2cSJim Jagielski 			rCTLFont.SetColor( aColor.GetColor() == COL_AUTO ? Color(COL_BLACK) : aColor );
1984*b1cdbd2cSJim Jagielski 
1985*b1cdbd2cSJim Jagielski 			m_aPreviewWin.Invalidate();
1986*b1cdbd2cSJim Jagielski             sal_uInt16 nSelPos = m_aFontColorLB.GetEntryPos( aColor );
1987*b1cdbd2cSJim Jagielski 			if ( nSelPos == LISTBOX_ENTRY_NOTFOUND && aColor == Color( COL_TRANSPARENT ) )
1988*b1cdbd2cSJim Jagielski 				nSelPos = m_aFontColorLB.GetEntryPos( m_aTransparentColorName );
1989*b1cdbd2cSJim Jagielski 
1990*b1cdbd2cSJim Jagielski 			if ( LISTBOX_ENTRY_NOTFOUND != nSelPos )
1991*b1cdbd2cSJim Jagielski                 m_aFontColorLB.SelectEntryPos( nSelPos );
1992*b1cdbd2cSJim Jagielski 			else
1993*b1cdbd2cSJim Jagielski 			{
1994*b1cdbd2cSJim Jagielski                 nSelPos = m_aFontColorLB.GetEntryPos( aColor );
1995*b1cdbd2cSJim Jagielski 				if ( LISTBOX_ENTRY_NOTFOUND != nSelPos )
1996*b1cdbd2cSJim Jagielski                     m_aFontColorLB.SelectEntryPos( nSelPos );
1997*b1cdbd2cSJim Jagielski 				else
1998*b1cdbd2cSJim Jagielski                     m_aFontColorLB.SelectEntryPos(
1999*b1cdbd2cSJim Jagielski                         m_aFontColorLB.InsertEntry( aColor, String( SVX_RES( RID_SVXSTR_COLOR_USER ) ) ) );
2000*b1cdbd2cSJim Jagielski 			}
2001*b1cdbd2cSJim Jagielski 			break;
2002*b1cdbd2cSJim Jagielski 		}
2003*b1cdbd2cSJim Jagielski 	}
2004*b1cdbd2cSJim Jagielski }
2005*b1cdbd2cSJim Jagielski 
2006*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2007*b1cdbd2cSJim Jagielski 
FillItemSetColor_Impl(SfxItemSet & rSet)2008*b1cdbd2cSJim Jagielski sal_Bool SvxCharEffectsPage::FillItemSetColor_Impl( SfxItemSet& rSet )
2009*b1cdbd2cSJim Jagielski {
2010*b1cdbd2cSJim Jagielski 	sal_uInt16 nWhich = GetWhich( SID_ATTR_CHAR_COLOR );
2011*b1cdbd2cSJim Jagielski 	const SvxColorItem* pOld = (const SvxColorItem*)GetOldItem( rSet, SID_ATTR_CHAR_COLOR );
2012*b1cdbd2cSJim Jagielski 	const SvxColorItem* pItem = NULL;
2013*b1cdbd2cSJim Jagielski 	sal_Bool bChanged = sal_True;
2014*b1cdbd2cSJim Jagielski 	const SfxItemSet* pExampleSet = GetTabDialog() ? GetTabDialog()->GetExampleSet() : NULL;
2015*b1cdbd2cSJim Jagielski 	const SfxItemSet& rOldSet = GetItemSet();
2016*b1cdbd2cSJim Jagielski 
2017*b1cdbd2cSJim Jagielski 	Color aSelectedColor;
2018*b1cdbd2cSJim Jagielski     if ( m_aFontColorLB.GetSelectEntry() == m_aTransparentColorName )
2019*b1cdbd2cSJim Jagielski 		aSelectedColor = Color( COL_TRANSPARENT );
2020*b1cdbd2cSJim Jagielski 	else
2021*b1cdbd2cSJim Jagielski         aSelectedColor = m_aFontColorLB.GetSelectEntryColor();
2022*b1cdbd2cSJim Jagielski 
2023*b1cdbd2cSJim Jagielski 	if ( pOld && pOld->GetValue() == aSelectedColor )
2024*b1cdbd2cSJim Jagielski 		bChanged = sal_False;
2025*b1cdbd2cSJim Jagielski 
2026*b1cdbd2cSJim Jagielski 	if ( !bChanged )
2027*b1cdbd2cSJim Jagielski         bChanged = ( m_aFontColorLB.GetSavedValue() == LISTBOX_ENTRY_NOTFOUND );
2028*b1cdbd2cSJim Jagielski 
2029*b1cdbd2cSJim Jagielski 	if ( !bChanged && pExampleSet &&
2030*b1cdbd2cSJim Jagielski 		 pExampleSet->GetItemState( nWhich, sal_False, (const SfxPoolItem**)&pItem ) == SFX_ITEM_SET &&
2031*b1cdbd2cSJim Jagielski 		 ( (SvxColorItem*)pItem )->GetValue() != aSelectedColor )
2032*b1cdbd2cSJim Jagielski 		bChanged = sal_True;
2033*b1cdbd2cSJim Jagielski 
2034*b1cdbd2cSJim Jagielski 	sal_Bool bModified = sal_False;
2035*b1cdbd2cSJim Jagielski 
2036*b1cdbd2cSJim Jagielski     if ( bChanged && m_aFontColorLB.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND )
2037*b1cdbd2cSJim Jagielski 	{
2038*b1cdbd2cSJim Jagielski 		rSet.Put( SvxColorItem( aSelectedColor, nWhich ) );
2039*b1cdbd2cSJim Jagielski 		bModified = sal_True;
2040*b1cdbd2cSJim Jagielski 	}
2041*b1cdbd2cSJim Jagielski 	else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
2042*b1cdbd2cSJim Jagielski 		CLEARTITEM;
2043*b1cdbd2cSJim Jagielski 
2044*b1cdbd2cSJim Jagielski 	return bModified;
2045*b1cdbd2cSJim Jagielski }
2046*b1cdbd2cSJim Jagielski 
2047*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2048*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxCharEffectsPage,SelectHdl_Impl,ListBox *,pBox)2049*b1cdbd2cSJim Jagielski IMPL_LINK( SvxCharEffectsPage, SelectHdl_Impl, ListBox*, pBox )
2050*b1cdbd2cSJim Jagielski {
2051*b1cdbd2cSJim Jagielski 	if ( &m_aEmphasisLB == pBox )
2052*b1cdbd2cSJim Jagielski 	{
2053*b1cdbd2cSJim Jagielski 		sal_uInt16 nEPos = m_aEmphasisLB.GetSelectEntryPos();
2054*b1cdbd2cSJim Jagielski 		sal_Bool bEnable = ( nEPos > 0 && nEPos != LISTBOX_ENTRY_NOTFOUND );
2055*b1cdbd2cSJim Jagielski 		m_aPositionFT.Enable( bEnable );
2056*b1cdbd2cSJim Jagielski 		m_aPositionLB.Enable( bEnable );
2057*b1cdbd2cSJim Jagielski 	}
2058*b1cdbd2cSJim Jagielski     else if( &m_aReliefLB == pBox)
2059*b1cdbd2cSJim Jagielski     {
2060*b1cdbd2cSJim Jagielski         sal_Bool bEnable = ( pBox->GetSelectEntryPos() == 0 );
2061*b1cdbd2cSJim Jagielski         m_aOutlineBtn.Enable( bEnable );
2062*b1cdbd2cSJim Jagielski         m_aShadowBtn.Enable( bEnable );
2063*b1cdbd2cSJim Jagielski     }
2064*b1cdbd2cSJim Jagielski     else if ( &m_aPositionLB != pBox )
2065*b1cdbd2cSJim Jagielski 	{
2066*b1cdbd2cSJim Jagielski 		sal_uInt16 nUPos = m_aUnderlineLB.GetSelectEntryPos(),
2067*b1cdbd2cSJim Jagielski                nOPos = m_aOverlineLB.GetSelectEntryPos(),
2068*b1cdbd2cSJim Jagielski                nSPos = m_aStrikeoutLB.GetSelectEntryPos();
2069*b1cdbd2cSJim Jagielski         sal_Bool bUEnable = ( nUPos > 0 && nUPos != LISTBOX_ENTRY_NOTFOUND );
2070*b1cdbd2cSJim Jagielski         sal_Bool bOEnable = ( nOPos > 0 && nOPos != LISTBOX_ENTRY_NOTFOUND );
2071*b1cdbd2cSJim Jagielski 		m_aUnderlineColorFT.Enable( bUEnable );
2072*b1cdbd2cSJim Jagielski 		m_aUnderlineColorLB.Enable( bUEnable );
2073*b1cdbd2cSJim Jagielski 		m_aOverlineColorFT.Enable( bOEnable );
2074*b1cdbd2cSJim Jagielski 		m_aOverlineColorLB.Enable( bOEnable );
2075*b1cdbd2cSJim Jagielski         m_aIndividualWordsBtn.Enable( bUEnable || bOEnable || ( nSPos > 0 && nSPos != LISTBOX_ENTRY_NOTFOUND ) );
2076*b1cdbd2cSJim Jagielski 	}
2077*b1cdbd2cSJim Jagielski     UpdatePreview_Impl();
2078*b1cdbd2cSJim Jagielski 	return 0;
2079*b1cdbd2cSJim Jagielski }
2080*b1cdbd2cSJim Jagielski 
2081*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2082*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxCharEffectsPage,UpdatePreview_Impl,ListBox *,EMPTYARG)2083*b1cdbd2cSJim Jagielski IMPL_LINK( SvxCharEffectsPage, UpdatePreview_Impl, ListBox*, EMPTYARG )
2084*b1cdbd2cSJim Jagielski {
2085*b1cdbd2cSJim Jagielski 	bool bEnable = ( ( m_aUnderlineLB.GetSelectEntryPos() > 0 ) ||
2086*b1cdbd2cSJim Jagielski 					 ( m_aOverlineLB.GetSelectEntryPos()  > 0 ) ||
2087*b1cdbd2cSJim Jagielski 					 ( m_aStrikeoutLB.GetSelectEntryPos() > 0 ) );
2088*b1cdbd2cSJim Jagielski 	m_aIndividualWordsBtn.Enable( bEnable );
2089*b1cdbd2cSJim Jagielski 
2090*b1cdbd2cSJim Jagielski     UpdatePreview_Impl();
2091*b1cdbd2cSJim Jagielski 	return 0;
2092*b1cdbd2cSJim Jagielski }
2093*b1cdbd2cSJim Jagielski 
2094*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2095*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxCharEffectsPage,CbClickHdl_Impl,CheckBox *,EMPTYARG)2096*b1cdbd2cSJim Jagielski IMPL_LINK( SvxCharEffectsPage, CbClickHdl_Impl, CheckBox*, EMPTYARG )
2097*b1cdbd2cSJim Jagielski {
2098*b1cdbd2cSJim Jagielski 	UpdatePreview_Impl();
2099*b1cdbd2cSJim Jagielski 	return 0;
2100*b1cdbd2cSJim Jagielski }
2101*b1cdbd2cSJim Jagielski 
2102*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2103*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxCharEffectsPage,TristClickHdl_Impl,TriStateBox *,EMPTYARG)2104*b1cdbd2cSJim Jagielski IMPL_LINK( SvxCharEffectsPage, TristClickHdl_Impl, TriStateBox*, EMPTYARG )
2105*b1cdbd2cSJim Jagielski {
2106*b1cdbd2cSJim Jagielski 	UpdatePreview_Impl();
2107*b1cdbd2cSJim Jagielski 	return 0;
2108*b1cdbd2cSJim Jagielski }
2109*b1cdbd2cSJim Jagielski 
2110*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2111*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxCharEffectsPage,ColorBoxSelectHdl_Impl,ColorListBox *,pBox)2112*b1cdbd2cSJim Jagielski IMPL_LINK( SvxCharEffectsPage, ColorBoxSelectHdl_Impl, ColorListBox*, pBox )
2113*b1cdbd2cSJim Jagielski {
2114*b1cdbd2cSJim Jagielski 	SvxFont& rFont = GetPreviewFont();
2115*b1cdbd2cSJim Jagielski     SvxFont& rCJKFont = GetPreviewCJKFont();
2116*b1cdbd2cSJim Jagielski 	SvxFont& rCTLFont = GetPreviewCTLFont();
2117*b1cdbd2cSJim Jagielski 
2118*b1cdbd2cSJim Jagielski 	Color aSelectedColor;
2119*b1cdbd2cSJim Jagielski 	if ( pBox->GetSelectEntry() == m_aTransparentColorName )
2120*b1cdbd2cSJim Jagielski 		aSelectedColor = Color( COL_TRANSPARENT );
2121*b1cdbd2cSJim Jagielski 	else
2122*b1cdbd2cSJim Jagielski 		aSelectedColor = pBox->GetSelectEntryColor();
2123*b1cdbd2cSJim Jagielski     rFont.SetColor( aSelectedColor.GetColor() == COL_AUTO ? Color(COL_BLACK) : aSelectedColor );
2124*b1cdbd2cSJim Jagielski     rCJKFont.SetColor( aSelectedColor.GetColor() == COL_AUTO ? Color(COL_BLACK) : aSelectedColor );
2125*b1cdbd2cSJim Jagielski 	rCTLFont.SetColor( aSelectedColor.GetColor() == COL_AUTO ? Color(COL_BLACK) : aSelectedColor );
2126*b1cdbd2cSJim Jagielski 
2127*b1cdbd2cSJim Jagielski     m_aPreviewWin.Invalidate();
2128*b1cdbd2cSJim Jagielski 	return 0;
2129*b1cdbd2cSJim Jagielski }
2130*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2131*b1cdbd2cSJim Jagielski 
DeactivatePage(SfxItemSet * _pSet)2132*b1cdbd2cSJim Jagielski int SvxCharEffectsPage::DeactivatePage( SfxItemSet* _pSet )
2133*b1cdbd2cSJim Jagielski {
2134*b1cdbd2cSJim Jagielski     if ( _pSet )
2135*b1cdbd2cSJim Jagielski         FillItemSet( *_pSet );
2136*b1cdbd2cSJim Jagielski 	return LEAVE_PAGE;
2137*b1cdbd2cSJim Jagielski }
2138*b1cdbd2cSJim Jagielski 
2139*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2140*b1cdbd2cSJim Jagielski 
Create(Window * pParent,const SfxItemSet & rSet)2141*b1cdbd2cSJim Jagielski SfxTabPage* SvxCharEffectsPage::Create( Window* pParent, const SfxItemSet& rSet )
2142*b1cdbd2cSJim Jagielski {
2143*b1cdbd2cSJim Jagielski 	return new SvxCharEffectsPage( pParent, rSet );
2144*b1cdbd2cSJim Jagielski }
2145*b1cdbd2cSJim Jagielski 
2146*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2147*b1cdbd2cSJim Jagielski 
GetRanges()2148*b1cdbd2cSJim Jagielski sal_uInt16* SvxCharEffectsPage::GetRanges()
2149*b1cdbd2cSJim Jagielski {
2150*b1cdbd2cSJim Jagielski 	return pEffectsRanges;
2151*b1cdbd2cSJim Jagielski }
2152*b1cdbd2cSJim Jagielski 
2153*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2154*b1cdbd2cSJim Jagielski 
Reset(const SfxItemSet & rSet)2155*b1cdbd2cSJim Jagielski void SvxCharEffectsPage::Reset( const SfxItemSet& rSet )
2156*b1cdbd2cSJim Jagielski {
2157*b1cdbd2cSJim Jagielski 	SvxFont& rFont = GetPreviewFont();
2158*b1cdbd2cSJim Jagielski     SvxFont& rCJKFont = GetPreviewCJKFont();
2159*b1cdbd2cSJim Jagielski 	SvxFont& rCTLFont = GetPreviewCTLFont();
2160*b1cdbd2cSJim Jagielski 
2161*b1cdbd2cSJim Jagielski 	sal_Bool bEnable = sal_False;
2162*b1cdbd2cSJim Jagielski 
2163*b1cdbd2cSJim Jagielski 	// Underline
2164*b1cdbd2cSJim Jagielski 	sal_uInt16 nWhich = GetWhich( SID_ATTR_CHAR_UNDERLINE );
2165*b1cdbd2cSJim Jagielski 	rFont.SetUnderline( UNDERLINE_NONE );
2166*b1cdbd2cSJim Jagielski     rCJKFont.SetUnderline( UNDERLINE_NONE );
2167*b1cdbd2cSJim Jagielski 	rCTLFont.SetUnderline( UNDERLINE_NONE );
2168*b1cdbd2cSJim Jagielski 
2169*b1cdbd2cSJim Jagielski 	m_aUnderlineLB.SelectEntryPos( 0 );
2170*b1cdbd2cSJim Jagielski 	SfxItemState eState = rSet.GetItemState( nWhich );
2171*b1cdbd2cSJim Jagielski 
2172*b1cdbd2cSJim Jagielski 	if ( eState >= SFX_ITEM_DONTCARE )
2173*b1cdbd2cSJim Jagielski 	{
2174*b1cdbd2cSJim Jagielski 		if ( eState == SFX_ITEM_DONTCARE )
2175*b1cdbd2cSJim Jagielski 			m_aUnderlineLB.SetNoSelection();
2176*b1cdbd2cSJim Jagielski 		else
2177*b1cdbd2cSJim Jagielski 		{
2178*b1cdbd2cSJim Jagielski 			const SvxUnderlineItem& rItem = (SvxUnderlineItem&)rSet.Get( nWhich );
2179*b1cdbd2cSJim Jagielski 			FontUnderline eUnderline = (FontUnderline)rItem.GetValue();
2180*b1cdbd2cSJim Jagielski 			rFont.SetUnderline( eUnderline );
2181*b1cdbd2cSJim Jagielski             rCJKFont.SetUnderline( eUnderline );
2182*b1cdbd2cSJim Jagielski 			rCTLFont.SetUnderline( eUnderline );
2183*b1cdbd2cSJim Jagielski 
2184*b1cdbd2cSJim Jagielski 			if ( eUnderline != UNDERLINE_NONE )
2185*b1cdbd2cSJim Jagielski 			{
2186*b1cdbd2cSJim Jagielski 				for ( sal_uInt16 i = 0; i < m_aUnderlineLB.GetEntryCount(); ++i )
2187*b1cdbd2cSJim Jagielski 				{
2188*b1cdbd2cSJim Jagielski 					if ( (FontUnderline)(sal_uLong)m_aUnderlineLB.GetEntryData(i) == eUnderline )
2189*b1cdbd2cSJim Jagielski 					{
2190*b1cdbd2cSJim Jagielski 						m_aUnderlineLB.SelectEntryPos(i);
2191*b1cdbd2cSJim Jagielski 						bEnable |= sal_True;
2192*b1cdbd2cSJim Jagielski 						break;
2193*b1cdbd2cSJim Jagielski 					}
2194*b1cdbd2cSJim Jagielski 				}
2195*b1cdbd2cSJim Jagielski 
2196*b1cdbd2cSJim Jagielski 				Color aColor = rItem.GetColor();
2197*b1cdbd2cSJim Jagielski 				sal_uInt16 nPos = m_aUnderlineColorLB.GetEntryPos( aColor );
2198*b1cdbd2cSJim Jagielski 
2199*b1cdbd2cSJim Jagielski 				if ( LISTBOX_ENTRY_NOTFOUND != nPos )
2200*b1cdbd2cSJim Jagielski 					m_aUnderlineColorLB.SelectEntryPos( nPos );
2201*b1cdbd2cSJim Jagielski 				else
2202*b1cdbd2cSJim Jagielski 				{
2203*b1cdbd2cSJim Jagielski 					nPos = m_aUnderlineColorLB.GetEntryPos( aColor );
2204*b1cdbd2cSJim Jagielski 					if ( LISTBOX_ENTRY_NOTFOUND != nPos )
2205*b1cdbd2cSJim Jagielski 						m_aUnderlineColorLB.SelectEntryPos( nPos );
2206*b1cdbd2cSJim Jagielski 					else
2207*b1cdbd2cSJim Jagielski 						m_aUnderlineColorLB.SelectEntryPos(
2208*b1cdbd2cSJim Jagielski 							m_aUnderlineColorLB.InsertEntry( aColor,
2209*b1cdbd2cSJim Jagielski 								String( SVX_RES( RID_SVXSTR_COLOR_USER ) ) ) );
2210*b1cdbd2cSJim Jagielski 				}
2211*b1cdbd2cSJim Jagielski 			}
2212*b1cdbd2cSJim Jagielski 			else
2213*b1cdbd2cSJim Jagielski 			{
2214*b1cdbd2cSJim Jagielski 				m_aUnderlineColorLB.SelectEntry( Color( COL_AUTO ));
2215*b1cdbd2cSJim Jagielski 				m_aUnderlineColorLB.Disable();
2216*b1cdbd2cSJim Jagielski 			}
2217*b1cdbd2cSJim Jagielski 		}
2218*b1cdbd2cSJim Jagielski 	}
2219*b1cdbd2cSJim Jagielski 
2220*b1cdbd2cSJim Jagielski 	// Overline
2221*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_OVERLINE );
2222*b1cdbd2cSJim Jagielski 	rFont.SetOverline( UNDERLINE_NONE );
2223*b1cdbd2cSJim Jagielski     rCJKFont.SetOverline( UNDERLINE_NONE );
2224*b1cdbd2cSJim Jagielski 	rCTLFont.SetOverline( UNDERLINE_NONE );
2225*b1cdbd2cSJim Jagielski 
2226*b1cdbd2cSJim Jagielski 	m_aOverlineLB.SelectEntryPos( 0 );
2227*b1cdbd2cSJim Jagielski 	eState = rSet.GetItemState( nWhich );
2228*b1cdbd2cSJim Jagielski 
2229*b1cdbd2cSJim Jagielski 	if ( eState >= SFX_ITEM_DONTCARE )
2230*b1cdbd2cSJim Jagielski 	{
2231*b1cdbd2cSJim Jagielski 		if ( eState == SFX_ITEM_DONTCARE )
2232*b1cdbd2cSJim Jagielski 			m_aOverlineLB.SetNoSelection();
2233*b1cdbd2cSJim Jagielski 		else
2234*b1cdbd2cSJim Jagielski 		{
2235*b1cdbd2cSJim Jagielski 			const SvxOverlineItem& rItem = (SvxOverlineItem&)rSet.Get( nWhich );
2236*b1cdbd2cSJim Jagielski 			FontUnderline eOverline = (FontUnderline)rItem.GetValue();
2237*b1cdbd2cSJim Jagielski 			rFont.SetOverline( eOverline );
2238*b1cdbd2cSJim Jagielski             rCJKFont.SetOverline( eOverline );
2239*b1cdbd2cSJim Jagielski 			rCTLFont.SetOverline( eOverline );
2240*b1cdbd2cSJim Jagielski 
2241*b1cdbd2cSJim Jagielski 			if ( eOverline != UNDERLINE_NONE )
2242*b1cdbd2cSJim Jagielski 			{
2243*b1cdbd2cSJim Jagielski 				for ( sal_uInt16 i = 0; i < m_aOverlineLB.GetEntryCount(); ++i )
2244*b1cdbd2cSJim Jagielski 				{
2245*b1cdbd2cSJim Jagielski 					if ( (FontUnderline)(sal_uLong)m_aOverlineLB.GetEntryData(i) == eOverline )
2246*b1cdbd2cSJim Jagielski 					{
2247*b1cdbd2cSJim Jagielski 						m_aOverlineLB.SelectEntryPos(i);
2248*b1cdbd2cSJim Jagielski 						bEnable |= sal_True;
2249*b1cdbd2cSJim Jagielski 						break;
2250*b1cdbd2cSJim Jagielski 					}
2251*b1cdbd2cSJim Jagielski 				}
2252*b1cdbd2cSJim Jagielski 
2253*b1cdbd2cSJim Jagielski 				Color aColor = rItem.GetColor();
2254*b1cdbd2cSJim Jagielski 				sal_uInt16 nPos = m_aOverlineColorLB.GetEntryPos( aColor );
2255*b1cdbd2cSJim Jagielski 
2256*b1cdbd2cSJim Jagielski 				if ( LISTBOX_ENTRY_NOTFOUND != nPos )
2257*b1cdbd2cSJim Jagielski 					m_aOverlineColorLB.SelectEntryPos( nPos );
2258*b1cdbd2cSJim Jagielski 				else
2259*b1cdbd2cSJim Jagielski 				{
2260*b1cdbd2cSJim Jagielski 					nPos = m_aOverlineColorLB.GetEntryPos( aColor );
2261*b1cdbd2cSJim Jagielski 					if ( LISTBOX_ENTRY_NOTFOUND != nPos )
2262*b1cdbd2cSJim Jagielski 						m_aOverlineColorLB.SelectEntryPos( nPos );
2263*b1cdbd2cSJim Jagielski 					else
2264*b1cdbd2cSJim Jagielski 						m_aOverlineColorLB.SelectEntryPos(
2265*b1cdbd2cSJim Jagielski 							m_aOverlineColorLB.InsertEntry( aColor,
2266*b1cdbd2cSJim Jagielski 								String( SVX_RES( RID_SVXSTR_COLOR_USER ) ) ) );
2267*b1cdbd2cSJim Jagielski 				}
2268*b1cdbd2cSJim Jagielski 			}
2269*b1cdbd2cSJim Jagielski 			else
2270*b1cdbd2cSJim Jagielski 			{
2271*b1cdbd2cSJim Jagielski 				m_aOverlineColorLB.SelectEntry( Color( COL_AUTO ));
2272*b1cdbd2cSJim Jagielski 				m_aOverlineColorLB.Disable();
2273*b1cdbd2cSJim Jagielski 			}
2274*b1cdbd2cSJim Jagielski 		}
2275*b1cdbd2cSJim Jagielski 	}
2276*b1cdbd2cSJim Jagielski 
2277*b1cdbd2cSJim Jagielski 	//	Strikeout
2278*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_STRIKEOUT );
2279*b1cdbd2cSJim Jagielski 	rFont.SetStrikeout( STRIKEOUT_NONE );
2280*b1cdbd2cSJim Jagielski     rCJKFont.SetStrikeout( STRIKEOUT_NONE );
2281*b1cdbd2cSJim Jagielski 	rCTLFont.SetStrikeout( STRIKEOUT_NONE );
2282*b1cdbd2cSJim Jagielski 
2283*b1cdbd2cSJim Jagielski 	m_aStrikeoutLB.SelectEntryPos( 0 );
2284*b1cdbd2cSJim Jagielski 	eState = rSet.GetItemState( nWhich );
2285*b1cdbd2cSJim Jagielski 
2286*b1cdbd2cSJim Jagielski 	if ( eState >= SFX_ITEM_DONTCARE )
2287*b1cdbd2cSJim Jagielski 	{
2288*b1cdbd2cSJim Jagielski 		if ( eState == SFX_ITEM_DONTCARE )
2289*b1cdbd2cSJim Jagielski 			m_aStrikeoutLB.SetNoSelection();
2290*b1cdbd2cSJim Jagielski 		else
2291*b1cdbd2cSJim Jagielski 		{
2292*b1cdbd2cSJim Jagielski 			const SvxCrossedOutItem& rItem = (SvxCrossedOutItem&)rSet.Get( nWhich );
2293*b1cdbd2cSJim Jagielski 			FontStrikeout eStrikeout = (FontStrikeout)rItem.GetValue();
2294*b1cdbd2cSJim Jagielski 			rFont.SetStrikeout( eStrikeout );
2295*b1cdbd2cSJim Jagielski             rCJKFont.SetStrikeout( eStrikeout );
2296*b1cdbd2cSJim Jagielski 			rCTLFont.SetStrikeout( eStrikeout );
2297*b1cdbd2cSJim Jagielski 
2298*b1cdbd2cSJim Jagielski 			if ( eStrikeout != STRIKEOUT_NONE )
2299*b1cdbd2cSJim Jagielski 			{
2300*b1cdbd2cSJim Jagielski 				for ( sal_uInt16 i = 0; i < m_aStrikeoutLB.GetEntryCount(); ++i )
2301*b1cdbd2cSJim Jagielski 				{
2302*b1cdbd2cSJim Jagielski 					if ( (FontStrikeout)(sal_uLong)m_aStrikeoutLB.GetEntryData(i) == eStrikeout )
2303*b1cdbd2cSJim Jagielski 					{
2304*b1cdbd2cSJim Jagielski 						m_aStrikeoutLB.SelectEntryPos(i);
2305*b1cdbd2cSJim Jagielski 						bEnable |= sal_True;
2306*b1cdbd2cSJim Jagielski 						break;
2307*b1cdbd2cSJim Jagielski 					}
2308*b1cdbd2cSJim Jagielski 				}
2309*b1cdbd2cSJim Jagielski 			}
2310*b1cdbd2cSJim Jagielski 		}
2311*b1cdbd2cSJim Jagielski 	}
2312*b1cdbd2cSJim Jagielski 
2313*b1cdbd2cSJim Jagielski 	// WordLineMode
2314*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_WORDLINEMODE );
2315*b1cdbd2cSJim Jagielski 	switch ( eState )
2316*b1cdbd2cSJim Jagielski 	{
2317*b1cdbd2cSJim Jagielski 		case SFX_ITEM_UNKNOWN:
2318*b1cdbd2cSJim Jagielski 			m_aIndividualWordsBtn.Hide();
2319*b1cdbd2cSJim Jagielski 			break;
2320*b1cdbd2cSJim Jagielski 
2321*b1cdbd2cSJim Jagielski 		case SFX_ITEM_DISABLED:
2322*b1cdbd2cSJim Jagielski 		case SFX_ITEM_READONLY:
2323*b1cdbd2cSJim Jagielski 			m_aIndividualWordsBtn.Disable();
2324*b1cdbd2cSJim Jagielski 			break;
2325*b1cdbd2cSJim Jagielski 
2326*b1cdbd2cSJim Jagielski 		case SFX_ITEM_DONTCARE:
2327*b1cdbd2cSJim Jagielski 			m_aIndividualWordsBtn.SetState( STATE_DONTKNOW );
2328*b1cdbd2cSJim Jagielski 			break;
2329*b1cdbd2cSJim Jagielski 
2330*b1cdbd2cSJim Jagielski 		case SFX_ITEM_DEFAULT:
2331*b1cdbd2cSJim Jagielski 		case SFX_ITEM_SET:
2332*b1cdbd2cSJim Jagielski 		{
2333*b1cdbd2cSJim Jagielski 			const SvxWordLineModeItem& rItem = (SvxWordLineModeItem&)rSet.Get( nWhich );
2334*b1cdbd2cSJim Jagielski 			rFont.SetWordLineMode( rItem.GetValue() );
2335*b1cdbd2cSJim Jagielski         	rCJKFont.SetWordLineMode( rItem.GetValue() );
2336*b1cdbd2cSJim Jagielski 			rCTLFont.SetWordLineMode( rItem.GetValue() );
2337*b1cdbd2cSJim Jagielski 
2338*b1cdbd2cSJim Jagielski 			m_aIndividualWordsBtn.Check( rItem.GetValue() );
2339*b1cdbd2cSJim Jagielski 			m_aIndividualWordsBtn.Enable( bEnable );
2340*b1cdbd2cSJim Jagielski 			break;
2341*b1cdbd2cSJim Jagielski 		}
2342*b1cdbd2cSJim Jagielski 	}
2343*b1cdbd2cSJim Jagielski 
2344*b1cdbd2cSJim Jagielski 	// Emphasis
2345*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_EMPHASISMARK );
2346*b1cdbd2cSJim Jagielski 	eState = rSet.GetItemState( nWhich );
2347*b1cdbd2cSJim Jagielski 
2348*b1cdbd2cSJim Jagielski 	if ( eState >= SFX_ITEM_DEFAULT )
2349*b1cdbd2cSJim Jagielski 	{
2350*b1cdbd2cSJim Jagielski 		const SvxEmphasisMarkItem& rItem = (SvxEmphasisMarkItem&)rSet.Get( nWhich );
2351*b1cdbd2cSJim Jagielski 		FontEmphasisMark eMark = rItem.GetEmphasisMark();
2352*b1cdbd2cSJim Jagielski 		rFont.SetEmphasisMark( eMark );
2353*b1cdbd2cSJim Jagielski         rCJKFont.SetEmphasisMark( eMark );
2354*b1cdbd2cSJim Jagielski 		rCTLFont.SetEmphasisMark( eMark );
2355*b1cdbd2cSJim Jagielski 
2356*b1cdbd2cSJim Jagielski 		m_aEmphasisLB.SelectEntryPos( (sal_uInt16)( eMark & EMPHASISMARK_STYLE ) );
2357*b1cdbd2cSJim Jagielski         eMark &= ~EMPHASISMARK_STYLE;
2358*b1cdbd2cSJim Jagielski         sal_uLong nEntryData = ( eMark == EMPHASISMARK_POS_ABOVE )
2359*b1cdbd2cSJim Jagielski 			? CHRDLG_POSITION_OVER
2360*b1cdbd2cSJim Jagielski 			: ( eMark == EMPHASISMARK_POS_BELOW ) ? CHRDLG_POSITION_UNDER : 0;
2361*b1cdbd2cSJim Jagielski 
2362*b1cdbd2cSJim Jagielski         for ( sal_uInt16 i = 0; i < m_aPositionLB.GetEntryCount(); i++ )
2363*b1cdbd2cSJim Jagielski         {
2364*b1cdbd2cSJim Jagielski             if ( nEntryData == (sal_uLong)m_aPositionLB.GetEntryData(i) )
2365*b1cdbd2cSJim Jagielski             {
2366*b1cdbd2cSJim Jagielski                 m_aPositionLB.SelectEntryPos(i);
2367*b1cdbd2cSJim Jagielski                 break;
2368*b1cdbd2cSJim Jagielski             }
2369*b1cdbd2cSJim Jagielski         }
2370*b1cdbd2cSJim Jagielski 	}
2371*b1cdbd2cSJim Jagielski 	else if ( eState == SFX_ITEM_DONTCARE )
2372*b1cdbd2cSJim Jagielski 		m_aEmphasisLB.SetNoSelection( );
2373*b1cdbd2cSJim Jagielski 	else if ( eState == SFX_ITEM_UNKNOWN )
2374*b1cdbd2cSJim Jagielski 	{
2375*b1cdbd2cSJim Jagielski 		m_aEmphasisFT.Hide();
2376*b1cdbd2cSJim Jagielski 		m_aEmphasisLB.Hide();
2377*b1cdbd2cSJim Jagielski 	}
2378*b1cdbd2cSJim Jagielski 	else // SFX_ITEM_DISABLED or SFX_ITEM_READONLY
2379*b1cdbd2cSJim Jagielski 	{
2380*b1cdbd2cSJim Jagielski 		m_aEmphasisFT.Disable();
2381*b1cdbd2cSJim Jagielski 		m_aEmphasisLB.Disable();
2382*b1cdbd2cSJim Jagielski 	}
2383*b1cdbd2cSJim Jagielski 
2384*b1cdbd2cSJim Jagielski 	// the select handler for the underline/overline/strikeout list boxes
2385*b1cdbd2cSJim Jagielski //	SelectHdl_Impl( NULL );
2386*b1cdbd2cSJim Jagielski 	DBG_ASSERT(m_aUnderlineLB.GetSelectHdl() == m_aOverlineLB.GetSelectHdl(),
2387*b1cdbd2cSJim Jagielski 		"SvxCharEffectsPage::Reset: inconsistence (1)!");
2388*b1cdbd2cSJim Jagielski 	DBG_ASSERT(m_aUnderlineLB.GetSelectHdl() == m_aStrikeoutLB.GetSelectHdl(),
2389*b1cdbd2cSJim Jagielski 		"SvxCharEffectsPage::Reset: inconsistence (1)!");
2390*b1cdbd2cSJim Jagielski 	m_aUnderlineLB.GetSelectHdl().Call(NULL);
2391*b1cdbd2cSJim Jagielski 		// don't call SelectHdl_Impl directly!
2392*b1cdbd2cSJim Jagielski 		// in DisableControls, we may have re-reouted the select handler
2393*b1cdbd2cSJim Jagielski 		// 30.05.2001 - 86262 - frank.schoenheit@germany.sun.com
2394*b1cdbd2cSJim Jagielski 
2395*b1cdbd2cSJim Jagielski 	// the select handler for the emphasis listbox
2396*b1cdbd2cSJim Jagielski //	SelectHdl_Impl( &m_aEmphasisLB );
2397*b1cdbd2cSJim Jagielski 	DBG_ASSERT(m_aEmphasisLB.GetSelectHdl() == LINK(this, SvxCharEffectsPage, SelectHdl_Impl),
2398*b1cdbd2cSJim Jagielski 		"SvxCharEffectsPage::Reset: inconsistence (2)!");
2399*b1cdbd2cSJim Jagielski 	m_aEmphasisLB.GetSelectHdl().Call( &m_aEmphasisLB );
2400*b1cdbd2cSJim Jagielski 		// this is for consistency only. Here it would be allowed to call SelectHdl_Impl directly ...
2401*b1cdbd2cSJim Jagielski 
2402*b1cdbd2cSJim Jagielski 	// Effects
2403*b1cdbd2cSJim Jagielski 	SvxCaseMap eCaseMap = SVX_CASEMAP_END;
2404*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_CASEMAP );
2405*b1cdbd2cSJim Jagielski 	eState = rSet.GetItemState( nWhich );
2406*b1cdbd2cSJim Jagielski 	switch ( eState )
2407*b1cdbd2cSJim Jagielski 	{
2408*b1cdbd2cSJim Jagielski 		case SFX_ITEM_UNKNOWN:
2409*b1cdbd2cSJim Jagielski 			m_aEffectsFT.Hide();
2410*b1cdbd2cSJim Jagielski 			m_aEffects2LB.Hide();
2411*b1cdbd2cSJim Jagielski 			break;
2412*b1cdbd2cSJim Jagielski 
2413*b1cdbd2cSJim Jagielski 		case SFX_ITEM_DISABLED:
2414*b1cdbd2cSJim Jagielski 		case SFX_ITEM_READONLY:
2415*b1cdbd2cSJim Jagielski 			m_aEffectsFT.Disable();
2416*b1cdbd2cSJim Jagielski 			m_aEffects2LB.Disable();
2417*b1cdbd2cSJim Jagielski 			break;
2418*b1cdbd2cSJim Jagielski 
2419*b1cdbd2cSJim Jagielski 		case SFX_ITEM_DONTCARE:
2420*b1cdbd2cSJim Jagielski 			m_aEffects2LB.SetNoSelection();
2421*b1cdbd2cSJim Jagielski 			break;
2422*b1cdbd2cSJim Jagielski 
2423*b1cdbd2cSJim Jagielski 		case SFX_ITEM_DEFAULT:
2424*b1cdbd2cSJim Jagielski 		case SFX_ITEM_SET:
2425*b1cdbd2cSJim Jagielski 		{
2426*b1cdbd2cSJim Jagielski 			const SvxCaseMapItem& rItem = (const SvxCaseMapItem&)rSet.Get( nWhich );
2427*b1cdbd2cSJim Jagielski 			eCaseMap = (SvxCaseMap)rItem.GetValue();
2428*b1cdbd2cSJim Jagielski 			break;
2429*b1cdbd2cSJim Jagielski 		}
2430*b1cdbd2cSJim Jagielski 	}
2431*b1cdbd2cSJim Jagielski 	SetCaseMap_Impl( eCaseMap );
2432*b1cdbd2cSJim Jagielski 
2433*b1cdbd2cSJim Jagielski     //Relief
2434*b1cdbd2cSJim Jagielski     nWhich = GetWhich(SID_ATTR_CHAR_RELIEF);
2435*b1cdbd2cSJim Jagielski 	eState = rSet.GetItemState( nWhich );
2436*b1cdbd2cSJim Jagielski 	switch ( eState )
2437*b1cdbd2cSJim Jagielski 	{
2438*b1cdbd2cSJim Jagielski 		case SFX_ITEM_UNKNOWN:
2439*b1cdbd2cSJim Jagielski 			m_aReliefFT.Hide();
2440*b1cdbd2cSJim Jagielski 			m_aReliefLB.Hide();
2441*b1cdbd2cSJim Jagielski 			break;
2442*b1cdbd2cSJim Jagielski 
2443*b1cdbd2cSJim Jagielski 		case SFX_ITEM_DISABLED:
2444*b1cdbd2cSJim Jagielski 		case SFX_ITEM_READONLY:
2445*b1cdbd2cSJim Jagielski 			m_aReliefFT.Disable();
2446*b1cdbd2cSJim Jagielski 			m_aReliefLB.Disable();
2447*b1cdbd2cSJim Jagielski 			break;
2448*b1cdbd2cSJim Jagielski 
2449*b1cdbd2cSJim Jagielski 		case SFX_ITEM_DONTCARE:
2450*b1cdbd2cSJim Jagielski 			m_aReliefLB.SetNoSelection();
2451*b1cdbd2cSJim Jagielski 			break;
2452*b1cdbd2cSJim Jagielski 
2453*b1cdbd2cSJim Jagielski 		case SFX_ITEM_DEFAULT:
2454*b1cdbd2cSJim Jagielski 		case SFX_ITEM_SET:
2455*b1cdbd2cSJim Jagielski 		{
2456*b1cdbd2cSJim Jagielski         	const SvxCharReliefItem& rItem = (const SvxCharReliefItem&)rSet.Get( nWhich );
2457*b1cdbd2cSJim Jagielski         	m_aReliefLB.SelectEntryPos(rItem.GetValue());
2458*b1cdbd2cSJim Jagielski         	SelectHdl_Impl(&m_aReliefLB);
2459*b1cdbd2cSJim Jagielski 			break;
2460*b1cdbd2cSJim Jagielski 		}
2461*b1cdbd2cSJim Jagielski 	}
2462*b1cdbd2cSJim Jagielski 
2463*b1cdbd2cSJim Jagielski     // Outline
2464*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_CONTOUR );
2465*b1cdbd2cSJim Jagielski 	eState = rSet.GetItemState( nWhich );
2466*b1cdbd2cSJim Jagielski 	switch ( eState )
2467*b1cdbd2cSJim Jagielski 	{
2468*b1cdbd2cSJim Jagielski 		case SFX_ITEM_UNKNOWN:
2469*b1cdbd2cSJim Jagielski 			m_aOutlineBtn.Hide();
2470*b1cdbd2cSJim Jagielski 			break;
2471*b1cdbd2cSJim Jagielski 
2472*b1cdbd2cSJim Jagielski 		case SFX_ITEM_DISABLED:
2473*b1cdbd2cSJim Jagielski 		case SFX_ITEM_READONLY:
2474*b1cdbd2cSJim Jagielski 			m_aOutlineBtn.Disable();
2475*b1cdbd2cSJim Jagielski 			break;
2476*b1cdbd2cSJim Jagielski 
2477*b1cdbd2cSJim Jagielski 		case SFX_ITEM_DONTCARE:
2478*b1cdbd2cSJim Jagielski 			m_aOutlineBtn.SetState( STATE_DONTKNOW );
2479*b1cdbd2cSJim Jagielski 			break;
2480*b1cdbd2cSJim Jagielski 
2481*b1cdbd2cSJim Jagielski 		case SFX_ITEM_DEFAULT:
2482*b1cdbd2cSJim Jagielski 		case SFX_ITEM_SET:
2483*b1cdbd2cSJim Jagielski 		{
2484*b1cdbd2cSJim Jagielski 			const SvxContourItem& rItem = (SvxContourItem&)rSet.Get( nWhich );
2485*b1cdbd2cSJim Jagielski 			m_aOutlineBtn.SetState( (TriState)rItem.GetValue() );
2486*b1cdbd2cSJim Jagielski 			m_aOutlineBtn.EnableTriState( sal_False );
2487*b1cdbd2cSJim Jagielski 			break;
2488*b1cdbd2cSJim Jagielski 		}
2489*b1cdbd2cSJim Jagielski 	}
2490*b1cdbd2cSJim Jagielski 
2491*b1cdbd2cSJim Jagielski 	// Shadow
2492*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_SHADOWED );
2493*b1cdbd2cSJim Jagielski 	eState = rSet.GetItemState( nWhich );
2494*b1cdbd2cSJim Jagielski 
2495*b1cdbd2cSJim Jagielski 	switch ( eState )
2496*b1cdbd2cSJim Jagielski 	{
2497*b1cdbd2cSJim Jagielski 		case SFX_ITEM_UNKNOWN:
2498*b1cdbd2cSJim Jagielski 			m_aShadowBtn.Hide();
2499*b1cdbd2cSJim Jagielski 			break;
2500*b1cdbd2cSJim Jagielski 
2501*b1cdbd2cSJim Jagielski 		case SFX_ITEM_DISABLED:
2502*b1cdbd2cSJim Jagielski 		case SFX_ITEM_READONLY:
2503*b1cdbd2cSJim Jagielski 			m_aShadowBtn.Disable();
2504*b1cdbd2cSJim Jagielski 			break;
2505*b1cdbd2cSJim Jagielski 
2506*b1cdbd2cSJim Jagielski 		case SFX_ITEM_DONTCARE:
2507*b1cdbd2cSJim Jagielski 			m_aShadowBtn.SetState( STATE_DONTKNOW );
2508*b1cdbd2cSJim Jagielski 			break;
2509*b1cdbd2cSJim Jagielski 
2510*b1cdbd2cSJim Jagielski 		case SFX_ITEM_DEFAULT:
2511*b1cdbd2cSJim Jagielski 		case SFX_ITEM_SET:
2512*b1cdbd2cSJim Jagielski 		{
2513*b1cdbd2cSJim Jagielski 			const SvxShadowedItem& rItem = (SvxShadowedItem&)rSet.Get( nWhich );
2514*b1cdbd2cSJim Jagielski 			m_aShadowBtn.SetState( (TriState)rItem.GetValue() );
2515*b1cdbd2cSJim Jagielski 			m_aShadowBtn.EnableTriState( sal_False );
2516*b1cdbd2cSJim Jagielski 			break;
2517*b1cdbd2cSJim Jagielski 		}
2518*b1cdbd2cSJim Jagielski 	}
2519*b1cdbd2cSJim Jagielski 
2520*b1cdbd2cSJim Jagielski 	// Blinking
2521*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_FLASH );
2522*b1cdbd2cSJim Jagielski 	eState = rSet.GetItemState( nWhich );
2523*b1cdbd2cSJim Jagielski 
2524*b1cdbd2cSJim Jagielski 	switch ( eState )
2525*b1cdbd2cSJim Jagielski 	{
2526*b1cdbd2cSJim Jagielski 		case SFX_ITEM_UNKNOWN:
2527*b1cdbd2cSJim Jagielski 			m_aBlinkingBtn.Hide();
2528*b1cdbd2cSJim Jagielski 			break;
2529*b1cdbd2cSJim Jagielski 
2530*b1cdbd2cSJim Jagielski 		case SFX_ITEM_DISABLED:
2531*b1cdbd2cSJim Jagielski 		case SFX_ITEM_READONLY:
2532*b1cdbd2cSJim Jagielski 			m_aBlinkingBtn.Disable();
2533*b1cdbd2cSJim Jagielski 			break;
2534*b1cdbd2cSJim Jagielski 
2535*b1cdbd2cSJim Jagielski 		case SFX_ITEM_DONTCARE:
2536*b1cdbd2cSJim Jagielski 			m_aBlinkingBtn.SetState( STATE_DONTKNOW );
2537*b1cdbd2cSJim Jagielski 			break;
2538*b1cdbd2cSJim Jagielski 
2539*b1cdbd2cSJim Jagielski 		case SFX_ITEM_DEFAULT:
2540*b1cdbd2cSJim Jagielski 		case SFX_ITEM_SET:
2541*b1cdbd2cSJim Jagielski 		{
2542*b1cdbd2cSJim Jagielski 			const SvxBlinkItem& rItem = (SvxBlinkItem&)rSet.Get( nWhich );
2543*b1cdbd2cSJim Jagielski 			m_aBlinkingBtn.SetState( (TriState)rItem.GetValue() );
2544*b1cdbd2cSJim Jagielski 			m_aBlinkingBtn.EnableTriState( sal_False );
2545*b1cdbd2cSJim Jagielski 			break;
2546*b1cdbd2cSJim Jagielski 		}
2547*b1cdbd2cSJim Jagielski 	}
2548*b1cdbd2cSJim Jagielski     // Hidden
2549*b1cdbd2cSJim Jagielski     nWhich = GetWhich( SID_ATTR_CHAR_HIDDEN );
2550*b1cdbd2cSJim Jagielski     eState = rSet.GetItemState( nWhich );
2551*b1cdbd2cSJim Jagielski 
2552*b1cdbd2cSJim Jagielski     switch ( eState )
2553*b1cdbd2cSJim Jagielski     {
2554*b1cdbd2cSJim Jagielski         case SFX_ITEM_UNKNOWN:
2555*b1cdbd2cSJim Jagielski             m_aHiddenBtn.Hide();
2556*b1cdbd2cSJim Jagielski             break;
2557*b1cdbd2cSJim Jagielski 
2558*b1cdbd2cSJim Jagielski         case SFX_ITEM_DISABLED:
2559*b1cdbd2cSJim Jagielski         case SFX_ITEM_READONLY:
2560*b1cdbd2cSJim Jagielski             m_aHiddenBtn.Disable();
2561*b1cdbd2cSJim Jagielski             break;
2562*b1cdbd2cSJim Jagielski 
2563*b1cdbd2cSJim Jagielski         case SFX_ITEM_DONTCARE:
2564*b1cdbd2cSJim Jagielski             m_aHiddenBtn.SetState( STATE_DONTKNOW );
2565*b1cdbd2cSJim Jagielski             break;
2566*b1cdbd2cSJim Jagielski 
2567*b1cdbd2cSJim Jagielski         case SFX_ITEM_DEFAULT:
2568*b1cdbd2cSJim Jagielski         case SFX_ITEM_SET:
2569*b1cdbd2cSJim Jagielski         {
2570*b1cdbd2cSJim Jagielski             const SvxCharHiddenItem& rItem = (SvxCharHiddenItem&)rSet.Get( nWhich );
2571*b1cdbd2cSJim Jagielski             m_aHiddenBtn.SetState( (TriState)rItem.GetValue() );
2572*b1cdbd2cSJim Jagielski             m_aHiddenBtn.EnableTriState( sal_False );
2573*b1cdbd2cSJim Jagielski             break;
2574*b1cdbd2cSJim Jagielski         }
2575*b1cdbd2cSJim Jagielski     }
2576*b1cdbd2cSJim Jagielski 
2577*b1cdbd2cSJim Jagielski 	SetPrevFontWidthScale( rSet );
2578*b1cdbd2cSJim Jagielski 	ResetColor_Impl( rSet );
2579*b1cdbd2cSJim Jagielski 
2580*b1cdbd2cSJim Jagielski 	// preview update
2581*b1cdbd2cSJim Jagielski 	m_aPreviewWin.Invalidate();
2582*b1cdbd2cSJim Jagielski 
2583*b1cdbd2cSJim Jagielski 	// save this settings
2584*b1cdbd2cSJim Jagielski 	m_aUnderlineLB.SaveValue();
2585*b1cdbd2cSJim Jagielski 	m_aUnderlineColorLB.SaveValue();
2586*b1cdbd2cSJim Jagielski 	m_aOverlineLB.SaveValue();
2587*b1cdbd2cSJim Jagielski 	m_aOverlineColorLB.SaveValue();
2588*b1cdbd2cSJim Jagielski 	m_aStrikeoutLB.SaveValue();
2589*b1cdbd2cSJim Jagielski 	m_aIndividualWordsBtn.SaveValue();
2590*b1cdbd2cSJim Jagielski 	m_aEmphasisLB.SaveValue();
2591*b1cdbd2cSJim Jagielski 	m_aPositionLB.SaveValue();
2592*b1cdbd2cSJim Jagielski 	m_aEffects2LB.SaveValue();
2593*b1cdbd2cSJim Jagielski     m_aReliefLB.SaveValue();
2594*b1cdbd2cSJim Jagielski     m_aOutlineBtn.SaveValue();
2595*b1cdbd2cSJim Jagielski 	m_aShadowBtn.SaveValue();
2596*b1cdbd2cSJim Jagielski 	m_aBlinkingBtn.SaveValue();
2597*b1cdbd2cSJim Jagielski     m_aHiddenBtn.SaveValue();
2598*b1cdbd2cSJim Jagielski 	m_aFontColorLB.SaveValue();
2599*b1cdbd2cSJim Jagielski }
2600*b1cdbd2cSJim Jagielski 
2601*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2602*b1cdbd2cSJim Jagielski 
FillItemSet(SfxItemSet & rSet)2603*b1cdbd2cSJim Jagielski sal_Bool SvxCharEffectsPage::FillItemSet( SfxItemSet& rSet )
2604*b1cdbd2cSJim Jagielski {
2605*b1cdbd2cSJim Jagielski 	const SfxPoolItem* pOld = 0;
2606*b1cdbd2cSJim Jagielski 	const SfxItemSet& rOldSet = GetItemSet();
2607*b1cdbd2cSJim Jagielski 	sal_Bool bModified = sal_False;
2608*b1cdbd2cSJim Jagielski 	FASTBOOL bChanged = sal_True;
2609*b1cdbd2cSJim Jagielski 
2610*b1cdbd2cSJim Jagielski 	// Underline
2611*b1cdbd2cSJim Jagielski 	sal_uInt16 nWhich = GetWhich( SID_ATTR_CHAR_UNDERLINE );
2612*b1cdbd2cSJim Jagielski 	pOld = GetOldItem( rSet, SID_ATTR_CHAR_UNDERLINE );
2613*b1cdbd2cSJim Jagielski 	sal_uInt16 nPos = m_aUnderlineLB.GetSelectEntryPos();
2614*b1cdbd2cSJim Jagielski 	FontUnderline eUnder = (FontUnderline)(sal_uLong)m_aUnderlineLB.GetEntryData( nPos );
2615*b1cdbd2cSJim Jagielski 
2616*b1cdbd2cSJim Jagielski 	if ( pOld )
2617*b1cdbd2cSJim Jagielski 	{
2618*b1cdbd2cSJim Jagielski         //! if there are different underline styles in the selection the
2619*b1cdbd2cSJim Jagielski         //! item-state in the 'rOldSet' will be invalid. In this case
2620*b1cdbd2cSJim Jagielski         //! changing the underline style will be allowed if a style is
2621*b1cdbd2cSJim Jagielski         //! selected in the listbox.
2622*b1cdbd2cSJim Jagielski         sal_Bool bAllowChg = LISTBOX_ENTRY_NOTFOUND != nPos  &&
2623*b1cdbd2cSJim Jagielski                          SFX_ITEM_DEFAULT > rOldSet.GetItemState( nWhich, sal_True );
2624*b1cdbd2cSJim Jagielski 
2625*b1cdbd2cSJim Jagielski 		const SvxUnderlineItem& rItem = *( (const SvxUnderlineItem*)pOld );
2626*b1cdbd2cSJim Jagielski 		if ( (FontUnderline)rItem.GetValue() == eUnder &&
2627*b1cdbd2cSJim Jagielski              ( UNDERLINE_NONE == eUnder || rItem.GetColor() == m_aUnderlineColorLB.GetSelectEntryColor() ) &&
2628*b1cdbd2cSJim Jagielski              ! bAllowChg )
2629*b1cdbd2cSJim Jagielski 			bChanged = sal_False;
2630*b1cdbd2cSJim Jagielski 	}
2631*b1cdbd2cSJim Jagielski 
2632*b1cdbd2cSJim Jagielski 	if ( bChanged )
2633*b1cdbd2cSJim Jagielski 	{
2634*b1cdbd2cSJim Jagielski 		SvxUnderlineItem aNewItem( eUnder, nWhich );
2635*b1cdbd2cSJim Jagielski 		aNewItem.SetColor( m_aUnderlineColorLB.GetSelectEntryColor() );
2636*b1cdbd2cSJim Jagielski 		rSet.Put( aNewItem );
2637*b1cdbd2cSJim Jagielski 		bModified |= sal_True;
2638*b1cdbd2cSJim Jagielski 	}
2639*b1cdbd2cSJim Jagielski  	else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
2640*b1cdbd2cSJim Jagielski 		CLEARTITEM;
2641*b1cdbd2cSJim Jagielski 
2642*b1cdbd2cSJim Jagielski 	bChanged = sal_True;
2643*b1cdbd2cSJim Jagielski 
2644*b1cdbd2cSJim Jagielski 	// Overline
2645*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_OVERLINE );
2646*b1cdbd2cSJim Jagielski 	pOld = GetOldItem( rSet, SID_ATTR_CHAR_OVERLINE );
2647*b1cdbd2cSJim Jagielski 	nPos = m_aOverlineLB.GetSelectEntryPos();
2648*b1cdbd2cSJim Jagielski 	FontUnderline eOver = (FontUnderline)(sal_uLong)m_aOverlineLB.GetEntryData( nPos );
2649*b1cdbd2cSJim Jagielski 
2650*b1cdbd2cSJim Jagielski 	if ( pOld )
2651*b1cdbd2cSJim Jagielski 	{
2652*b1cdbd2cSJim Jagielski         //! if there are different underline styles in the selection the
2653*b1cdbd2cSJim Jagielski         //! item-state in the 'rOldSet' will be invalid. In this case
2654*b1cdbd2cSJim Jagielski         //! changing the underline style will be allowed if a style is
2655*b1cdbd2cSJim Jagielski         //! selected in the listbox.
2656*b1cdbd2cSJim Jagielski         sal_Bool bAllowChg = LISTBOX_ENTRY_NOTFOUND != nPos  &&
2657*b1cdbd2cSJim Jagielski                          SFX_ITEM_DEFAULT > rOldSet.GetItemState( nWhich, sal_True );
2658*b1cdbd2cSJim Jagielski 
2659*b1cdbd2cSJim Jagielski 		const SvxOverlineItem& rItem = *( (const SvxOverlineItem*)pOld );
2660*b1cdbd2cSJim Jagielski 		if ( (FontUnderline)rItem.GetValue() == eOver &&
2661*b1cdbd2cSJim Jagielski              ( UNDERLINE_NONE == eOver || rItem.GetColor() == m_aOverlineColorLB.GetSelectEntryColor() ) &&
2662*b1cdbd2cSJim Jagielski              ! bAllowChg )
2663*b1cdbd2cSJim Jagielski 			bChanged = sal_False;
2664*b1cdbd2cSJim Jagielski 	}
2665*b1cdbd2cSJim Jagielski 
2666*b1cdbd2cSJim Jagielski 	if ( bChanged )
2667*b1cdbd2cSJim Jagielski 	{
2668*b1cdbd2cSJim Jagielski 		SvxOverlineItem aNewItem( eOver, nWhich );
2669*b1cdbd2cSJim Jagielski 		aNewItem.SetColor( m_aOverlineColorLB.GetSelectEntryColor() );
2670*b1cdbd2cSJim Jagielski 		rSet.Put( aNewItem );
2671*b1cdbd2cSJim Jagielski 		bModified |= sal_True;
2672*b1cdbd2cSJim Jagielski 	}
2673*b1cdbd2cSJim Jagielski  	else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
2674*b1cdbd2cSJim Jagielski 		CLEARTITEM;
2675*b1cdbd2cSJim Jagielski 
2676*b1cdbd2cSJim Jagielski 	bChanged = sal_True;
2677*b1cdbd2cSJim Jagielski 
2678*b1cdbd2cSJim Jagielski 	// Strikeout
2679*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_STRIKEOUT );
2680*b1cdbd2cSJim Jagielski 	pOld = GetOldItem( rSet, SID_ATTR_CHAR_STRIKEOUT );
2681*b1cdbd2cSJim Jagielski 	nPos = m_aStrikeoutLB.GetSelectEntryPos();
2682*b1cdbd2cSJim Jagielski 	FontStrikeout eStrike = (FontStrikeout)(sal_uLong)m_aStrikeoutLB.GetEntryData( nPos );
2683*b1cdbd2cSJim Jagielski 
2684*b1cdbd2cSJim Jagielski 	if ( pOld )
2685*b1cdbd2cSJim Jagielski 	{
2686*b1cdbd2cSJim Jagielski         //! if there are different strikeout styles in the selection the
2687*b1cdbd2cSJim Jagielski         //! item-state in the 'rOldSet' will be invalid. In this case
2688*b1cdbd2cSJim Jagielski         //! changing the strikeout style will be allowed if a style is
2689*b1cdbd2cSJim Jagielski         //! selected in the listbox.
2690*b1cdbd2cSJim Jagielski         sal_Bool bAllowChg = LISTBOX_ENTRY_NOTFOUND != nPos  &&
2691*b1cdbd2cSJim Jagielski                          SFX_ITEM_DEFAULT > rOldSet.GetItemState( nWhich, sal_True );
2692*b1cdbd2cSJim Jagielski 
2693*b1cdbd2cSJim Jagielski 		const SvxCrossedOutItem& rItem = *( (const SvxCrossedOutItem*)pOld );
2694*b1cdbd2cSJim Jagielski         if ( !m_aStrikeoutLB.IsEnabled()
2695*b1cdbd2cSJim Jagielski             || ((FontStrikeout)rItem.GetValue() == eStrike  && !bAllowChg) )
2696*b1cdbd2cSJim Jagielski 			bChanged = sal_False;
2697*b1cdbd2cSJim Jagielski 	}
2698*b1cdbd2cSJim Jagielski 
2699*b1cdbd2cSJim Jagielski 	if ( bChanged )
2700*b1cdbd2cSJim Jagielski 	{
2701*b1cdbd2cSJim Jagielski 		rSet.Put( SvxCrossedOutItem( eStrike, nWhich ) );
2702*b1cdbd2cSJim Jagielski 		bModified |= sal_True;
2703*b1cdbd2cSJim Jagielski 	}
2704*b1cdbd2cSJim Jagielski 	else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
2705*b1cdbd2cSJim Jagielski 		CLEARTITEM;
2706*b1cdbd2cSJim Jagielski 
2707*b1cdbd2cSJim Jagielski 	bChanged = sal_True;
2708*b1cdbd2cSJim Jagielski 
2709*b1cdbd2cSJim Jagielski 	// Individual words
2710*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_WORDLINEMODE );
2711*b1cdbd2cSJim Jagielski 	pOld = GetOldItem( rSet, SID_ATTR_CHAR_WORDLINEMODE );
2712*b1cdbd2cSJim Jagielski 
2713*b1cdbd2cSJim Jagielski 	if ( pOld )
2714*b1cdbd2cSJim Jagielski 	{
2715*b1cdbd2cSJim Jagielski 		const SvxWordLineModeItem& rItem = *( (const SvxWordLineModeItem*)pOld );
2716*b1cdbd2cSJim Jagielski 		if ( rItem.GetValue() == m_aIndividualWordsBtn.IsChecked() )
2717*b1cdbd2cSJim Jagielski 			bChanged = sal_False;
2718*b1cdbd2cSJim Jagielski 	}
2719*b1cdbd2cSJim Jagielski 
2720*b1cdbd2cSJim Jagielski 	if ( rOldSet.GetItemState( nWhich ) == SFX_ITEM_DONTCARE &&
2721*b1cdbd2cSJim Jagielski 		 m_aIndividualWordsBtn.IsChecked() == m_aIndividualWordsBtn.GetSavedValue() )
2722*b1cdbd2cSJim Jagielski 		bChanged = sal_False;
2723*b1cdbd2cSJim Jagielski 
2724*b1cdbd2cSJim Jagielski 	if ( bChanged )
2725*b1cdbd2cSJim Jagielski 	{
2726*b1cdbd2cSJim Jagielski 		rSet.Put( SvxWordLineModeItem( m_aIndividualWordsBtn.IsChecked(), nWhich ) );
2727*b1cdbd2cSJim Jagielski 		bModified |= sal_True;
2728*b1cdbd2cSJim Jagielski 	}
2729*b1cdbd2cSJim Jagielski 	else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
2730*b1cdbd2cSJim Jagielski 		CLEARTITEM;
2731*b1cdbd2cSJim Jagielski 
2732*b1cdbd2cSJim Jagielski 	bChanged = sal_True;
2733*b1cdbd2cSJim Jagielski 
2734*b1cdbd2cSJim Jagielski 	// Emphasis
2735*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_EMPHASISMARK );
2736*b1cdbd2cSJim Jagielski 	pOld = GetOldItem( rSet, SID_ATTR_CHAR_EMPHASISMARK );
2737*b1cdbd2cSJim Jagielski 	sal_uInt16 nMarkPos = m_aEmphasisLB.GetSelectEntryPos();
2738*b1cdbd2cSJim Jagielski 	sal_uInt16 nPosPos = m_aPositionLB.GetSelectEntryPos();
2739*b1cdbd2cSJim Jagielski 	FontEmphasisMark eMark = (FontEmphasisMark)nMarkPos;
2740*b1cdbd2cSJim Jagielski 	if ( m_aPositionLB.IsEnabled() )
2741*b1cdbd2cSJim Jagielski 	{
2742*b1cdbd2cSJim Jagielski 		eMark |= ( CHRDLG_POSITION_UNDER == (sal_uLong)m_aPositionLB.GetEntryData( nPosPos ) )
2743*b1cdbd2cSJim Jagielski 			? EMPHASISMARK_POS_BELOW : EMPHASISMARK_POS_ABOVE;
2744*b1cdbd2cSJim Jagielski 	}
2745*b1cdbd2cSJim Jagielski 
2746*b1cdbd2cSJim Jagielski 	if ( pOld )
2747*b1cdbd2cSJim Jagielski 	{
2748*b1cdbd2cSJim Jagielski     	if( rOldSet.GetItemState( nWhich ) != SFX_ITEM_DONTCARE )
2749*b1cdbd2cSJim Jagielski         {
2750*b1cdbd2cSJim Jagielski 		    const SvxEmphasisMarkItem& rItem = *( (const SvxEmphasisMarkItem*)pOld );
2751*b1cdbd2cSJim Jagielski 		    if ( rItem.GetEmphasisMark() == eMark )
2752*b1cdbd2cSJim Jagielski 			    bChanged = sal_False;
2753*b1cdbd2cSJim Jagielski         }
2754*b1cdbd2cSJim Jagielski 	}
2755*b1cdbd2cSJim Jagielski 
2756*b1cdbd2cSJim Jagielski 	if ( rOldSet.GetItemState( nWhich ) == SFX_ITEM_DONTCARE &&
2757*b1cdbd2cSJim Jagielski 		 m_aEmphasisLB.GetSavedValue() == nMarkPos && m_aPositionLB.GetSavedValue() == nPosPos )
2758*b1cdbd2cSJim Jagielski 		bChanged = sal_False;
2759*b1cdbd2cSJim Jagielski 
2760*b1cdbd2cSJim Jagielski 	if ( bChanged )
2761*b1cdbd2cSJim Jagielski 	{
2762*b1cdbd2cSJim Jagielski 		rSet.Put( SvxEmphasisMarkItem( eMark, nWhich ) );
2763*b1cdbd2cSJim Jagielski 		bModified |= sal_True;
2764*b1cdbd2cSJim Jagielski 	}
2765*b1cdbd2cSJim Jagielski 	else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
2766*b1cdbd2cSJim Jagielski 		CLEARTITEM;
2767*b1cdbd2cSJim Jagielski 
2768*b1cdbd2cSJim Jagielski 	bChanged = sal_True;
2769*b1cdbd2cSJim Jagielski 
2770*b1cdbd2cSJim Jagielski 	// Effects
2771*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_CASEMAP );
2772*b1cdbd2cSJim Jagielski 	pOld = GetOldItem( rSet, SID_ATTR_CHAR_CASEMAP );
2773*b1cdbd2cSJim Jagielski 	SvxCaseMap eCaseMap = SVX_CASEMAP_NOT_MAPPED;
2774*b1cdbd2cSJim Jagielski 	FASTBOOL bChecked = sal_False;
2775*b1cdbd2cSJim Jagielski 	sal_uInt16 nCapsPos = m_aEffects2LB.GetSelectEntryPos();
2776*b1cdbd2cSJim Jagielski 	if ( nCapsPos != LISTBOX_ENTRY_NOTFOUND )
2777*b1cdbd2cSJim Jagielski 	{
2778*b1cdbd2cSJim Jagielski 		eCaseMap = (SvxCaseMap)nCapsPos;
2779*b1cdbd2cSJim Jagielski 		bChecked = sal_True;
2780*b1cdbd2cSJim Jagielski 	}
2781*b1cdbd2cSJim Jagielski 
2782*b1cdbd2cSJim Jagielski 	if ( pOld )
2783*b1cdbd2cSJim Jagielski 	{
2784*b1cdbd2cSJim Jagielski         //! if there are different effect styles in the selection the
2785*b1cdbd2cSJim Jagielski         //! item-state in the 'rOldSet' will be invalid. In this case
2786*b1cdbd2cSJim Jagielski         //! changing the effect style will be allowed if a style is
2787*b1cdbd2cSJim Jagielski         //! selected in the listbox.
2788*b1cdbd2cSJim Jagielski         sal_Bool bAllowChg = LISTBOX_ENTRY_NOTFOUND != nPos  &&
2789*b1cdbd2cSJim Jagielski                          SFX_ITEM_DEFAULT > rOldSet.GetItemState( nWhich, sal_True );
2790*b1cdbd2cSJim Jagielski 
2791*b1cdbd2cSJim Jagielski         const SvxCaseMapItem& rItem = *( (const SvxCaseMapItem*)pOld );
2792*b1cdbd2cSJim Jagielski         if ( (SvxCaseMap)rItem.GetValue() == eCaseMap  &&  !bAllowChg )
2793*b1cdbd2cSJim Jagielski 			bChanged = sal_False;
2794*b1cdbd2cSJim Jagielski 	}
2795*b1cdbd2cSJim Jagielski 
2796*b1cdbd2cSJim Jagielski 	if ( bChanged && bChecked )
2797*b1cdbd2cSJim Jagielski 	{
2798*b1cdbd2cSJim Jagielski 		rSet.Put( SvxCaseMapItem( eCaseMap, nWhich ) );
2799*b1cdbd2cSJim Jagielski 		bModified |= sal_True;
2800*b1cdbd2cSJim Jagielski 	}
2801*b1cdbd2cSJim Jagielski 	else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
2802*b1cdbd2cSJim Jagielski 		CLEARTITEM;
2803*b1cdbd2cSJim Jagielski 
2804*b1cdbd2cSJim Jagielski 	bChanged = sal_True;
2805*b1cdbd2cSJim Jagielski 
2806*b1cdbd2cSJim Jagielski     //Relief
2807*b1cdbd2cSJim Jagielski     nWhich = GetWhich(SID_ATTR_CHAR_RELIEF);
2808*b1cdbd2cSJim Jagielski     if(m_aReliefLB.GetSelectEntryPos() != m_aReliefLB.GetSavedValue())
2809*b1cdbd2cSJim Jagielski     {
2810*b1cdbd2cSJim Jagielski         m_aReliefLB.SaveValue();
2811*b1cdbd2cSJim Jagielski         SvxCharReliefItem aRelief((FontRelief)m_aReliefLB.GetSelectEntryPos(), nWhich);
2812*b1cdbd2cSJim Jagielski         rSet.Put(aRelief);
2813*b1cdbd2cSJim Jagielski     }
2814*b1cdbd2cSJim Jagielski 
2815*b1cdbd2cSJim Jagielski     // Outline
2816*b1cdbd2cSJim Jagielski 	const SfxItemSet* pExampleSet = GetTabDialog() ? GetTabDialog()->GetExampleSet() : NULL;
2817*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_CONTOUR );
2818*b1cdbd2cSJim Jagielski 	pOld = GetOldItem( rSet, SID_ATTR_CHAR_CONTOUR );
2819*b1cdbd2cSJim Jagielski 	TriState eState = m_aOutlineBtn.GetState();
2820*b1cdbd2cSJim Jagielski 	const SfxPoolItem* pItem;
2821*b1cdbd2cSJim Jagielski 
2822*b1cdbd2cSJim Jagielski 	if ( pOld )
2823*b1cdbd2cSJim Jagielski 	{
2824*b1cdbd2cSJim Jagielski 		const SvxContourItem& rItem = *( (const SvxContourItem*)pOld );
2825*b1cdbd2cSJim Jagielski 		if ( rItem.GetValue() == StateToAttr( eState ) && m_aOutlineBtn.GetSavedValue() == eState )
2826*b1cdbd2cSJim Jagielski 			bChanged = sal_False;
2827*b1cdbd2cSJim Jagielski 	}
2828*b1cdbd2cSJim Jagielski 
2829*b1cdbd2cSJim Jagielski 	if ( !bChanged && pExampleSet && pExampleSet->GetItemState( nWhich, sal_False, &pItem ) == SFX_ITEM_SET &&
2830*b1cdbd2cSJim Jagielski 		 !StateToAttr( eState ) && ( (SvxContourItem*)pItem )->GetValue() )
2831*b1cdbd2cSJim Jagielski 		bChanged = sal_True;
2832*b1cdbd2cSJim Jagielski 
2833*b1cdbd2cSJim Jagielski 	if ( bChanged && eState != STATE_DONTKNOW )
2834*b1cdbd2cSJim Jagielski 	{
2835*b1cdbd2cSJim Jagielski 		rSet.Put( SvxContourItem( StateToAttr( eState ), nWhich ) );
2836*b1cdbd2cSJim Jagielski 		bModified |= sal_True;
2837*b1cdbd2cSJim Jagielski 	}
2838*b1cdbd2cSJim Jagielski 	else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
2839*b1cdbd2cSJim Jagielski 		CLEARTITEM;
2840*b1cdbd2cSJim Jagielski 
2841*b1cdbd2cSJim Jagielski 	bChanged = sal_True;
2842*b1cdbd2cSJim Jagielski 
2843*b1cdbd2cSJim Jagielski 	// Shadow
2844*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_SHADOWED );
2845*b1cdbd2cSJim Jagielski 	pOld = GetOldItem( rSet, SID_ATTR_CHAR_SHADOWED );
2846*b1cdbd2cSJim Jagielski 	eState = m_aShadowBtn.GetState();
2847*b1cdbd2cSJim Jagielski 
2848*b1cdbd2cSJim Jagielski 	if ( pOld )
2849*b1cdbd2cSJim Jagielski 	{
2850*b1cdbd2cSJim Jagielski 		const SvxShadowedItem& rItem = *( (const SvxShadowedItem*)pOld );
2851*b1cdbd2cSJim Jagielski 		if ( rItem.GetValue() == StateToAttr( eState ) && m_aShadowBtn.GetSavedValue() == eState )
2852*b1cdbd2cSJim Jagielski 			bChanged = sal_False;
2853*b1cdbd2cSJim Jagielski 	}
2854*b1cdbd2cSJim Jagielski 
2855*b1cdbd2cSJim Jagielski 	if ( !bChanged && pExampleSet && pExampleSet->GetItemState( nWhich, sal_False, &pItem ) == SFX_ITEM_SET &&
2856*b1cdbd2cSJim Jagielski 		 !StateToAttr( eState ) && ( (SvxShadowedItem*)pItem )->GetValue() )
2857*b1cdbd2cSJim Jagielski 		bChanged = sal_True;
2858*b1cdbd2cSJim Jagielski 
2859*b1cdbd2cSJim Jagielski 	if ( bChanged && eState != STATE_DONTKNOW )
2860*b1cdbd2cSJim Jagielski 	{
2861*b1cdbd2cSJim Jagielski 		rSet.Put( SvxShadowedItem( StateToAttr( eState ), nWhich ) );
2862*b1cdbd2cSJim Jagielski 		bModified = sal_True;
2863*b1cdbd2cSJim Jagielski 	}
2864*b1cdbd2cSJim Jagielski 	else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
2865*b1cdbd2cSJim Jagielski 		CLEARTITEM;
2866*b1cdbd2cSJim Jagielski 
2867*b1cdbd2cSJim Jagielski 	bChanged = sal_True;
2868*b1cdbd2cSJim Jagielski 
2869*b1cdbd2cSJim Jagielski 	// Blinking
2870*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_FLASH );
2871*b1cdbd2cSJim Jagielski 	pOld = GetOldItem( rSet, SID_ATTR_FLASH );
2872*b1cdbd2cSJim Jagielski 	eState = m_aBlinkingBtn.GetState();
2873*b1cdbd2cSJim Jagielski 
2874*b1cdbd2cSJim Jagielski 	if ( pOld )
2875*b1cdbd2cSJim Jagielski 	{
2876*b1cdbd2cSJim Jagielski 		const SvxBlinkItem& rItem = *( (const SvxBlinkItem*)pOld );
2877*b1cdbd2cSJim Jagielski 		if ( rItem.GetValue() == StateToAttr( eState ) && m_aBlinkingBtn.GetSavedValue() == eState )
2878*b1cdbd2cSJim Jagielski 			bChanged = sal_False;
2879*b1cdbd2cSJim Jagielski 	}
2880*b1cdbd2cSJim Jagielski 
2881*b1cdbd2cSJim Jagielski 	if ( !bChanged && pExampleSet && pExampleSet->GetItemState( nWhich, sal_False, &pItem ) == SFX_ITEM_SET &&
2882*b1cdbd2cSJim Jagielski 		 !StateToAttr( eState ) && ( (SvxBlinkItem*)pItem )->GetValue() )
2883*b1cdbd2cSJim Jagielski 		bChanged = sal_True;
2884*b1cdbd2cSJim Jagielski 
2885*b1cdbd2cSJim Jagielski 	if ( bChanged && eState != STATE_DONTKNOW )
2886*b1cdbd2cSJim Jagielski 	{
2887*b1cdbd2cSJim Jagielski 		rSet.Put( SvxBlinkItem( StateToAttr( eState ), nWhich ) );
2888*b1cdbd2cSJim Jagielski 		bModified = sal_True;
2889*b1cdbd2cSJim Jagielski 	}
2890*b1cdbd2cSJim Jagielski 	else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
2891*b1cdbd2cSJim Jagielski 		CLEARTITEM;
2892*b1cdbd2cSJim Jagielski 
2893*b1cdbd2cSJim Jagielski     // Hidden
2894*b1cdbd2cSJim Jagielski     nWhich = GetWhich( SID_ATTR_CHAR_HIDDEN );
2895*b1cdbd2cSJim Jagielski     pOld = GetOldItem( rSet, SID_ATTR_CHAR_HIDDEN );
2896*b1cdbd2cSJim Jagielski     eState = m_aHiddenBtn.GetState();
2897*b1cdbd2cSJim Jagielski 	bChanged = sal_True;
2898*b1cdbd2cSJim Jagielski 
2899*b1cdbd2cSJim Jagielski     if ( pOld )
2900*b1cdbd2cSJim Jagielski     {
2901*b1cdbd2cSJim Jagielski         const SvxCharHiddenItem& rItem = *( (const SvxCharHiddenItem*)pOld );
2902*b1cdbd2cSJim Jagielski         if ( rItem.GetValue() == StateToAttr( eState ) && m_aHiddenBtn.GetSavedValue() == eState )
2903*b1cdbd2cSJim Jagielski             bChanged = sal_False;
2904*b1cdbd2cSJim Jagielski     }
2905*b1cdbd2cSJim Jagielski 
2906*b1cdbd2cSJim Jagielski     if ( !bChanged && pExampleSet && pExampleSet->GetItemState( nWhich, sal_False, &pItem ) == SFX_ITEM_SET &&
2907*b1cdbd2cSJim Jagielski          !StateToAttr( eState ) && ( (SvxCharHiddenItem*)pItem )->GetValue() )
2908*b1cdbd2cSJim Jagielski         bChanged = sal_True;
2909*b1cdbd2cSJim Jagielski 
2910*b1cdbd2cSJim Jagielski     if ( bChanged && eState != STATE_DONTKNOW )
2911*b1cdbd2cSJim Jagielski     {
2912*b1cdbd2cSJim Jagielski         rSet.Put( SvxCharHiddenItem( StateToAttr( eState ), nWhich ) );
2913*b1cdbd2cSJim Jagielski         bModified = sal_True;
2914*b1cdbd2cSJim Jagielski     }
2915*b1cdbd2cSJim Jagielski     else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
2916*b1cdbd2cSJim Jagielski         CLEARTITEM;
2917*b1cdbd2cSJim Jagielski 
2918*b1cdbd2cSJim Jagielski 	bModified |= FillItemSetColor_Impl( rSet );
2919*b1cdbd2cSJim Jagielski 
2920*b1cdbd2cSJim Jagielski 	return bModified;
2921*b1cdbd2cSJim Jagielski }
2922*b1cdbd2cSJim Jagielski 
DisableControls(sal_uInt16 nDisable)2923*b1cdbd2cSJim Jagielski void SvxCharEffectsPage::DisableControls( sal_uInt16 nDisable )
2924*b1cdbd2cSJim Jagielski {
2925*b1cdbd2cSJim Jagielski 	if ( ( DISABLE_CASEMAP & nDisable ) == DISABLE_CASEMAP )
2926*b1cdbd2cSJim Jagielski 	{
2927*b1cdbd2cSJim Jagielski 		m_aEffectsFT.Disable();
2928*b1cdbd2cSJim Jagielski 		m_aEffects2LB.Disable();
2929*b1cdbd2cSJim Jagielski 	}
2930*b1cdbd2cSJim Jagielski 
2931*b1cdbd2cSJim Jagielski 	if ( ( DISABLE_WORDLINE & nDisable ) == DISABLE_WORDLINE )
2932*b1cdbd2cSJim Jagielski 		m_aIndividualWordsBtn.Disable();
2933*b1cdbd2cSJim Jagielski 
2934*b1cdbd2cSJim Jagielski 	if ( ( DISABLE_BLINK & nDisable ) == DISABLE_BLINK )
2935*b1cdbd2cSJim Jagielski 		m_aBlinkingBtn.Disable();
2936*b1cdbd2cSJim Jagielski 
2937*b1cdbd2cSJim Jagielski 	if ( ( DISABLE_UNDERLINE_COLOR & nDisable ) == DISABLE_UNDERLINE_COLOR )
2938*b1cdbd2cSJim Jagielski 	{
2939*b1cdbd2cSJim Jagielski 		// disable the controls
2940*b1cdbd2cSJim Jagielski 		m_aUnderlineColorFT.Disable( );
2941*b1cdbd2cSJim Jagielski 		m_aUnderlineColorLB.Disable( );
2942*b1cdbd2cSJim Jagielski 		// and reroute the selection handler of the controls which normally would affect the color box dis-/enabling
2943*b1cdbd2cSJim Jagielski 		m_aUnderlineLB.SetSelectHdl(LINK(this, SvxCharEffectsPage, UpdatePreview_Impl));
2944*b1cdbd2cSJim Jagielski 		m_aStrikeoutLB.SetSelectHdl(LINK(this, SvxCharEffectsPage, UpdatePreview_Impl));
2945*b1cdbd2cSJim Jagielski     }
2946*b1cdbd2cSJim Jagielski }
2947*b1cdbd2cSJim Jagielski 
EnableFlash()2948*b1cdbd2cSJim Jagielski void SvxCharEffectsPage::EnableFlash()
2949*b1cdbd2cSJim Jagielski {
2950*b1cdbd2cSJim Jagielski 	if ( !( ( m_nHtmlMode & HTMLMODE_ON ) && !( m_nHtmlMode & HTMLMODE_BLINK ) ) )
2951*b1cdbd2cSJim Jagielski 		m_aBlinkingBtn.Show();
2952*b1cdbd2cSJim Jagielski }
2953*b1cdbd2cSJim Jagielski 
2954*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
SetPreviewBackgroundToCharacter()2955*b1cdbd2cSJim Jagielski void SvxCharEffectsPage::SetPreviewBackgroundToCharacter()
2956*b1cdbd2cSJim Jagielski {
2957*b1cdbd2cSJim Jagielski     m_bPreviewBackgroundToCharacter = sal_True;
2958*b1cdbd2cSJim Jagielski }
2959*b1cdbd2cSJim Jagielski 
2960*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
PageCreated(SfxAllItemSet aSet)2961*b1cdbd2cSJim Jagielski void SvxCharEffectsPage::PageCreated (SfxAllItemSet aSet) //add CHINA001
2962*b1cdbd2cSJim Jagielski {
2963*b1cdbd2cSJim Jagielski 	SFX_ITEMSET_ARG (&aSet,pDisableCtlItem,SfxUInt16Item,SID_DISABLE_CTL,sal_False);
2964*b1cdbd2cSJim Jagielski 	SFX_ITEMSET_ARG (&aSet,pFlagItem,SfxUInt32Item,SID_FLAG_TYPE,sal_False);
2965*b1cdbd2cSJim Jagielski 	if (pDisableCtlItem)
2966*b1cdbd2cSJim Jagielski 		DisableControls(pDisableCtlItem->GetValue());
2967*b1cdbd2cSJim Jagielski 
2968*b1cdbd2cSJim Jagielski 	if (pFlagItem)
2969*b1cdbd2cSJim Jagielski 	{
2970*b1cdbd2cSJim Jagielski 		sal_uInt32 nFlags=pFlagItem->GetValue();
2971*b1cdbd2cSJim Jagielski 		if ( ( nFlags & SVX_ENABLE_FLASH ) == SVX_ENABLE_FLASH )
2972*b1cdbd2cSJim Jagielski 			EnableFlash();
2973*b1cdbd2cSJim Jagielski 		if ( ( nFlags & SVX_PREVIEW_CHARACTER ) == SVX_PREVIEW_CHARACTER )
2974*b1cdbd2cSJim Jagielski 			SetPreviewBackgroundToCharacter();
2975*b1cdbd2cSJim Jagielski 	}
2976*b1cdbd2cSJim Jagielski }
2977*b1cdbd2cSJim Jagielski 
2978*b1cdbd2cSJim Jagielski // class SvxCharPositionPage ---------------------------------------------
2979*b1cdbd2cSJim Jagielski 
SvxCharPositionPage(Window * pParent,const SfxItemSet & rInSet)2980*b1cdbd2cSJim Jagielski SvxCharPositionPage::SvxCharPositionPage( Window* pParent, const SfxItemSet& rInSet ) :
2981*b1cdbd2cSJim Jagielski 
2982*b1cdbd2cSJim Jagielski 	SvxCharBasePage( pParent, CUI_RES( RID_SVXPAGE_CHAR_POSITION ), rInSet, WIN_POS_PREVIEW, FT_POS_FONTTYPE ),
2983*b1cdbd2cSJim Jagielski 
2984*b1cdbd2cSJim Jagielski 	m_aPositionLine		( this, CUI_RES( FL_POSITION ) ),
2985*b1cdbd2cSJim Jagielski 	m_aHighPosBtn		( this, CUI_RES( RB_HIGHPOS ) ),
2986*b1cdbd2cSJim Jagielski 	m_aNormalPosBtn		( this, CUI_RES( RB_NORMALPOS ) ),
2987*b1cdbd2cSJim Jagielski 	m_aLowPosBtn		( this, CUI_RES( RB_LOWPOS ) ),
2988*b1cdbd2cSJim Jagielski 	m_aHighLowFT		( this, CUI_RES( FT_HIGHLOW ) ),
2989*b1cdbd2cSJim Jagielski 	m_aHighLowEdit		( this, CUI_RES( ED_HIGHLOW ) ),
2990*b1cdbd2cSJim Jagielski 	m_aHighLowRB		( this, CUI_RES( CB_HIGHLOW ) ),
2991*b1cdbd2cSJim Jagielski 	m_aFontSizeFT		( this, CUI_RES( FT_FONTSIZE ) ),
2992*b1cdbd2cSJim Jagielski 	m_aFontSizeEdit		( this, CUI_RES( ED_FONTSIZE ) ),
2993*b1cdbd2cSJim Jagielski 	m_aRotationScalingFL( this, CUI_RES( FL_ROTATION_SCALING ) ),
2994*b1cdbd2cSJim Jagielski 	m_aScalingFL		( this, CUI_RES( FL_SCALING ) ),
2995*b1cdbd2cSJim Jagielski 	m_a0degRB			( this, CUI_RES( RB_0_DEG ) ),
2996*b1cdbd2cSJim Jagielski 	m_a90degRB			( this, CUI_RES( RB_90_DEG ) ),
2997*b1cdbd2cSJim Jagielski 	m_a270degRB			( this, CUI_RES( RB_270_DEG ) ),
2998*b1cdbd2cSJim Jagielski 	m_aFitToLineCB		( this, CUI_RES( CB_FIT_TO_LINE ) ),
2999*b1cdbd2cSJim Jagielski 	m_aScaleWidthFT		( this, CUI_RES( FT_SCALE_WIDTH ) ),
3000*b1cdbd2cSJim Jagielski 	m_aScaleWidthMF		( this, CUI_RES( MF_SCALE_WIDTH ) ),
3001*b1cdbd2cSJim Jagielski 
3002*b1cdbd2cSJim Jagielski 	m_aKerningLine		( this, CUI_RES( FL_KERNING2 ) ),
3003*b1cdbd2cSJim Jagielski 	m_aKerningLB		( this, CUI_RES( LB_KERNING2 ) ),
3004*b1cdbd2cSJim Jagielski 	m_aKerningFT		( this, CUI_RES( FT_KERNING2 ) ),
3005*b1cdbd2cSJim Jagielski 	m_aKerningEdit		( this, CUI_RES( ED_KERNING2 ) ),
3006*b1cdbd2cSJim Jagielski 	m_aPairKerningBtn	( this, CUI_RES( CB_PAIRKERNING ) ),
3007*b1cdbd2cSJim Jagielski 
3008*b1cdbd2cSJim Jagielski 	m_nSuperEsc			( (short)DFLT_ESC_SUPER ),
3009*b1cdbd2cSJim Jagielski 	m_nSubEsc			( (short)DFLT_ESC_SUB ),
3010*b1cdbd2cSJim Jagielski 	m_nScaleWidthItemSetVal	( 100 ),
3011*b1cdbd2cSJim Jagielski 	m_nScaleWidthInitialVal	( 100 ),
3012*b1cdbd2cSJim Jagielski 	m_nSuperProp		( (sal_uInt8)DFLT_ESC_PROP ),
3013*b1cdbd2cSJim Jagielski     m_nSubProp          ( (sal_uInt8)DFLT_ESC_PROP )
3014*b1cdbd2cSJim Jagielski {
3015*b1cdbd2cSJim Jagielski 	FreeResource();
3016*b1cdbd2cSJim Jagielski 	Initialize();
3017*b1cdbd2cSJim Jagielski }
3018*b1cdbd2cSJim Jagielski 
3019*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3020*b1cdbd2cSJim Jagielski 
Initialize()3021*b1cdbd2cSJim Jagielski void SvxCharPositionPage::Initialize()
3022*b1cdbd2cSJim Jagielski {
3023*b1cdbd2cSJim Jagielski 	// to handle the changes of the other pages
3024*b1cdbd2cSJim Jagielski 	SetExchangeSupport();
3025*b1cdbd2cSJim Jagielski 
3026*b1cdbd2cSJim Jagielski 	GetPreviewFont().SetSize( Size( 0, 240 ) );
3027*b1cdbd2cSJim Jagielski     GetPreviewCJKFont().SetSize( Size( 0, 240 ) );
3028*b1cdbd2cSJim Jagielski 	GetPreviewCTLFont().SetSize( Size( 0, 240 ) );
3029*b1cdbd2cSJim Jagielski 
3030*b1cdbd2cSJim Jagielski 	m_aNormalPosBtn.Check();
3031*b1cdbd2cSJim Jagielski 	PositionHdl_Impl( &m_aNormalPosBtn );
3032*b1cdbd2cSJim Jagielski 	m_aKerningLB.SelectEntryPos( 0 );
3033*b1cdbd2cSJim Jagielski 	KerningSelectHdl_Impl( NULL );
3034*b1cdbd2cSJim Jagielski 
3035*b1cdbd2cSJim Jagielski 	Link aLink = LINK( this, SvxCharPositionPage, PositionHdl_Impl );
3036*b1cdbd2cSJim Jagielski 	m_aHighPosBtn.SetClickHdl( aLink );
3037*b1cdbd2cSJim Jagielski 	m_aNormalPosBtn.SetClickHdl( aLink );
3038*b1cdbd2cSJim Jagielski 	m_aLowPosBtn.SetClickHdl( aLink );
3039*b1cdbd2cSJim Jagielski 
3040*b1cdbd2cSJim Jagielski 	aLink = LINK( this, SvxCharPositionPage, RotationHdl_Impl );
3041*b1cdbd2cSJim Jagielski 	m_a0degRB  .SetClickHdl( aLink );
3042*b1cdbd2cSJim Jagielski 	m_a90degRB .SetClickHdl( aLink );
3043*b1cdbd2cSJim Jagielski 	m_a270degRB.SetClickHdl( aLink );
3044*b1cdbd2cSJim Jagielski 
3045*b1cdbd2cSJim Jagielski 	aLink = LINK( this, SvxCharPositionPage, FontModifyHdl_Impl );
3046*b1cdbd2cSJim Jagielski 	m_aHighLowEdit.SetModifyHdl( aLink );
3047*b1cdbd2cSJim Jagielski 	m_aFontSizeEdit.SetModifyHdl( aLink );
3048*b1cdbd2cSJim Jagielski 
3049*b1cdbd2cSJim Jagielski 	aLink = LINK( this, SvxCharPositionPage, LoseFocusHdl_Impl );
3050*b1cdbd2cSJim Jagielski 	m_aHighLowEdit.SetLoseFocusHdl( aLink );
3051*b1cdbd2cSJim Jagielski 	m_aFontSizeEdit.SetLoseFocusHdl( aLink );
3052*b1cdbd2cSJim Jagielski 
3053*b1cdbd2cSJim Jagielski 	m_aHighLowRB.SetClickHdl( LINK( this, SvxCharPositionPage, AutoPositionHdl_Impl ) );
3054*b1cdbd2cSJim Jagielski 	m_aFitToLineCB.SetClickHdl( LINK( this, SvxCharPositionPage, FitToLineHdl_Impl ) );
3055*b1cdbd2cSJim Jagielski 	m_aKerningLB.SetSelectHdl( LINK( this, SvxCharPositionPage, KerningSelectHdl_Impl ) );
3056*b1cdbd2cSJim Jagielski 	m_aKerningEdit.SetModifyHdl( LINK( this, SvxCharPositionPage, KerningModifyHdl_Impl ) );
3057*b1cdbd2cSJim Jagielski 	m_aPairKerningBtn.SetClickHdl( LINK( this, SvxCharPositionPage, PairKerningHdl_Impl ) );
3058*b1cdbd2cSJim Jagielski 	m_aScaleWidthMF.SetModifyHdl( LINK( this, SvxCharPositionPage, ScaleWidthModifyHdl_Impl ) );
3059*b1cdbd2cSJim Jagielski }
3060*b1cdbd2cSJim Jagielski 
3061*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3062*b1cdbd2cSJim Jagielski 
UpdatePreview_Impl(sal_uInt8 nProp,sal_uInt8 nEscProp,short nEsc)3063*b1cdbd2cSJim Jagielski void SvxCharPositionPage::UpdatePreview_Impl( sal_uInt8 nProp, sal_uInt8 nEscProp, short nEsc )
3064*b1cdbd2cSJim Jagielski {
3065*b1cdbd2cSJim Jagielski 	SetPrevFontEscapement( nProp, nEscProp, nEsc );
3066*b1cdbd2cSJim Jagielski }
3067*b1cdbd2cSJim Jagielski 
3068*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3069*b1cdbd2cSJim Jagielski 
SetEscapement_Impl(sal_uInt16 nEsc)3070*b1cdbd2cSJim Jagielski void SvxCharPositionPage::SetEscapement_Impl( sal_uInt16 nEsc )
3071*b1cdbd2cSJim Jagielski {
3072*b1cdbd2cSJim Jagielski     SvxEscapementItem aEscItm( (SvxEscapement)nEsc, SID_ATTR_CHAR_ESCAPEMENT );
3073*b1cdbd2cSJim Jagielski 
3074*b1cdbd2cSJim Jagielski 	if ( SVX_ESCAPEMENT_SUPERSCRIPT == nEsc )
3075*b1cdbd2cSJim Jagielski 	{
3076*b1cdbd2cSJim Jagielski 		aEscItm.GetEsc() = m_nSuperEsc;
3077*b1cdbd2cSJim Jagielski 		aEscItm.GetProp() = m_nSuperProp;
3078*b1cdbd2cSJim Jagielski 	}
3079*b1cdbd2cSJim Jagielski 	else if ( SVX_ESCAPEMENT_SUBSCRIPT == nEsc )
3080*b1cdbd2cSJim Jagielski 	{
3081*b1cdbd2cSJim Jagielski 		aEscItm.GetEsc() = m_nSubEsc;
3082*b1cdbd2cSJim Jagielski 		aEscItm.GetProp() = m_nSubProp;
3083*b1cdbd2cSJim Jagielski 	}
3084*b1cdbd2cSJim Jagielski 
3085*b1cdbd2cSJim Jagielski 	short nFac = aEscItm.GetEsc() < 0 ? -1 : 1;
3086*b1cdbd2cSJim Jagielski 
3087*b1cdbd2cSJim Jagielski 	m_aHighLowEdit.SetValue( aEscItm.GetEsc() * nFac );
3088*b1cdbd2cSJim Jagielski 	m_aFontSizeEdit.SetValue( aEscItm.GetProp() );
3089*b1cdbd2cSJim Jagielski 
3090*b1cdbd2cSJim Jagielski 	if ( SVX_ESCAPEMENT_OFF == nEsc )
3091*b1cdbd2cSJim Jagielski 	{
3092*b1cdbd2cSJim Jagielski 		m_aHighLowFT.Disable();
3093*b1cdbd2cSJim Jagielski 		m_aHighLowEdit.Disable();
3094*b1cdbd2cSJim Jagielski 		m_aFontSizeFT.Disable();
3095*b1cdbd2cSJim Jagielski 		m_aFontSizeEdit.Disable();
3096*b1cdbd2cSJim Jagielski 		m_aHighLowRB.Disable();
3097*b1cdbd2cSJim Jagielski 	}
3098*b1cdbd2cSJim Jagielski 	else
3099*b1cdbd2cSJim Jagielski 	{
3100*b1cdbd2cSJim Jagielski 		m_aFontSizeFT.Enable();
3101*b1cdbd2cSJim Jagielski 		m_aFontSizeEdit.Enable();
3102*b1cdbd2cSJim Jagielski 		m_aHighLowRB.Enable();
3103*b1cdbd2cSJim Jagielski 
3104*b1cdbd2cSJim Jagielski 		if ( !m_aHighLowRB.IsChecked() )
3105*b1cdbd2cSJim Jagielski 		{
3106*b1cdbd2cSJim Jagielski 			m_aHighLowFT.Enable();
3107*b1cdbd2cSJim Jagielski 			m_aHighLowEdit.Enable();
3108*b1cdbd2cSJim Jagielski 		}
3109*b1cdbd2cSJim Jagielski 		else
3110*b1cdbd2cSJim Jagielski 			AutoPositionHdl_Impl( &m_aHighLowRB );
3111*b1cdbd2cSJim Jagielski 	}
3112*b1cdbd2cSJim Jagielski 
3113*b1cdbd2cSJim Jagielski 	UpdatePreview_Impl( 100, aEscItm.GetProp(), aEscItm.GetEsc() );
3114*b1cdbd2cSJim Jagielski }
3115*b1cdbd2cSJim Jagielski 
3116*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3117*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxCharPositionPage,PositionHdl_Impl,RadioButton *,pBtn)3118*b1cdbd2cSJim Jagielski IMPL_LINK( SvxCharPositionPage, PositionHdl_Impl, RadioButton*, pBtn )
3119*b1cdbd2cSJim Jagielski {
3120*b1cdbd2cSJim Jagielski 	sal_uInt16 nEsc = SVX_ESCAPEMENT_OFF;	// also when pBtn == NULL
3121*b1cdbd2cSJim Jagielski 
3122*b1cdbd2cSJim Jagielski 	if ( &m_aHighPosBtn == pBtn )
3123*b1cdbd2cSJim Jagielski 		nEsc = SVX_ESCAPEMENT_SUPERSCRIPT;
3124*b1cdbd2cSJim Jagielski 	else if ( &m_aLowPosBtn == pBtn )
3125*b1cdbd2cSJim Jagielski 		nEsc = SVX_ESCAPEMENT_SUBSCRIPT;
3126*b1cdbd2cSJim Jagielski 
3127*b1cdbd2cSJim Jagielski 	SetEscapement_Impl( nEsc );
3128*b1cdbd2cSJim Jagielski 	return 0;
3129*b1cdbd2cSJim Jagielski }
3130*b1cdbd2cSJim Jagielski 
3131*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3132*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxCharPositionPage,RotationHdl_Impl,RadioButton *,pBtn)3133*b1cdbd2cSJim Jagielski IMPL_LINK( SvxCharPositionPage, RotationHdl_Impl, RadioButton*, pBtn )
3134*b1cdbd2cSJim Jagielski {
3135*b1cdbd2cSJim Jagielski 	sal_Bool bEnable = sal_False;
3136*b1cdbd2cSJim Jagielski 	if (&m_a90degRB == pBtn  ||  &m_a270degRB == pBtn)
3137*b1cdbd2cSJim Jagielski 		bEnable = sal_True;
3138*b1cdbd2cSJim Jagielski 	else
3139*b1cdbd2cSJim Jagielski 		OSL_ENSURE( &m_a0degRB == pBtn, "unexpected button" );
3140*b1cdbd2cSJim Jagielski 	m_aFitToLineCB.Enable( bEnable );
3141*b1cdbd2cSJim Jagielski 	return 0;
3142*b1cdbd2cSJim Jagielski }
3143*b1cdbd2cSJim Jagielski 
3144*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3145*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxCharPositionPage,FontModifyHdl_Impl,MetricField *,EMPTYARG)3146*b1cdbd2cSJim Jagielski IMPL_LINK( SvxCharPositionPage, FontModifyHdl_Impl, MetricField*, EMPTYARG )
3147*b1cdbd2cSJim Jagielski {
3148*b1cdbd2cSJim Jagielski 	sal_uInt8 nEscProp = (sal_uInt8)m_aFontSizeEdit.GetValue();
3149*b1cdbd2cSJim Jagielski 	short nEsc	= (short)m_aHighLowEdit.GetValue();
3150*b1cdbd2cSJim Jagielski 	nEsc *= m_aLowPosBtn.IsChecked() ? -1 : 1;
3151*b1cdbd2cSJim Jagielski 	UpdatePreview_Impl( 100, nEscProp, nEsc );
3152*b1cdbd2cSJim Jagielski 	return 0;
3153*b1cdbd2cSJim Jagielski }
3154*b1cdbd2cSJim Jagielski 
3155*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3156*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxCharPositionPage,AutoPositionHdl_Impl,CheckBox *,pBox)3157*b1cdbd2cSJim Jagielski IMPL_LINK( SvxCharPositionPage, AutoPositionHdl_Impl, CheckBox*, pBox )
3158*b1cdbd2cSJim Jagielski {
3159*b1cdbd2cSJim Jagielski 	if ( pBox->IsChecked() )
3160*b1cdbd2cSJim Jagielski 	{
3161*b1cdbd2cSJim Jagielski 		m_aHighLowFT.Disable();
3162*b1cdbd2cSJim Jagielski 		m_aHighLowEdit.Disable();
3163*b1cdbd2cSJim Jagielski 	}
3164*b1cdbd2cSJim Jagielski 	else
3165*b1cdbd2cSJim Jagielski 		PositionHdl_Impl( m_aHighPosBtn.IsChecked() ? &m_aHighPosBtn
3166*b1cdbd2cSJim Jagielski 													  : m_aLowPosBtn.IsChecked() ? &m_aLowPosBtn
3167*b1cdbd2cSJim Jagielski 													  							 : &m_aNormalPosBtn );
3168*b1cdbd2cSJim Jagielski 	return 0;
3169*b1cdbd2cSJim Jagielski }
3170*b1cdbd2cSJim Jagielski 
3171*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3172*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxCharPositionPage,FitToLineHdl_Impl,CheckBox *,pBox)3173*b1cdbd2cSJim Jagielski IMPL_LINK( SvxCharPositionPage, FitToLineHdl_Impl, CheckBox*, pBox )
3174*b1cdbd2cSJim Jagielski {
3175*b1cdbd2cSJim Jagielski 	if ( &m_aFitToLineCB == pBox)
3176*b1cdbd2cSJim Jagielski 	{
3177*b1cdbd2cSJim Jagielski 		sal_uInt16 nVal = m_nScaleWidthInitialVal;
3178*b1cdbd2cSJim Jagielski 		if (m_aFitToLineCB.IsChecked())
3179*b1cdbd2cSJim Jagielski 			nVal = m_nScaleWidthItemSetVal;
3180*b1cdbd2cSJim Jagielski 		m_aScaleWidthMF.SetValue( nVal );
3181*b1cdbd2cSJim Jagielski 
3182*b1cdbd2cSJim Jagielski 		m_aPreviewWin.SetFontWidthScale( nVal );
3183*b1cdbd2cSJim Jagielski 	}
3184*b1cdbd2cSJim Jagielski 	return 0;
3185*b1cdbd2cSJim Jagielski }
3186*b1cdbd2cSJim Jagielski 
3187*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3188*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxCharPositionPage,KerningSelectHdl_Impl,ListBox *,EMPTYARG)3189*b1cdbd2cSJim Jagielski IMPL_LINK( SvxCharPositionPage, KerningSelectHdl_Impl, ListBox*, EMPTYARG )
3190*b1cdbd2cSJim Jagielski {
3191*b1cdbd2cSJim Jagielski 	if ( m_aKerningLB.GetSelectEntryPos() > 0 )
3192*b1cdbd2cSJim Jagielski 	{
3193*b1cdbd2cSJim Jagielski 		m_aKerningFT.Enable();
3194*b1cdbd2cSJim Jagielski 		m_aKerningEdit.Enable();
3195*b1cdbd2cSJim Jagielski 
3196*b1cdbd2cSJim Jagielski 		if ( m_aKerningLB.GetSelectEntryPos() == 2 )
3197*b1cdbd2cSJim Jagielski 		{
3198*b1cdbd2cSJim Jagielski 			// Condensed -> max value == 1/6 of the current font height
3199*b1cdbd2cSJim Jagielski 			SvxFont& rFont = GetPreviewFont();
3200*b1cdbd2cSJim Jagielski 			long nMax = rFont.GetSize().Height() / 6;
3201*b1cdbd2cSJim Jagielski 			m_aKerningEdit.SetMax( m_aKerningEdit.Normalize( nMax ), FUNIT_TWIP );
3202*b1cdbd2cSJim Jagielski 			m_aKerningEdit.SetLast( m_aKerningEdit.GetMax( m_aKerningEdit.GetUnit() ) );
3203*b1cdbd2cSJim Jagielski 		}
3204*b1cdbd2cSJim Jagielski 		else
3205*b1cdbd2cSJim Jagielski 		{
3206*b1cdbd2cSJim Jagielski             m_aKerningEdit.SetMax( 9999 );
3207*b1cdbd2cSJim Jagielski 			m_aKerningEdit.SetLast( 9999 );
3208*b1cdbd2cSJim Jagielski 		}
3209*b1cdbd2cSJim Jagielski 	}
3210*b1cdbd2cSJim Jagielski 	else
3211*b1cdbd2cSJim Jagielski 	{
3212*b1cdbd2cSJim Jagielski 		m_aKerningEdit.SetValue( 0 );
3213*b1cdbd2cSJim Jagielski 		m_aKerningFT.Disable();
3214*b1cdbd2cSJim Jagielski 		m_aKerningEdit.Disable();
3215*b1cdbd2cSJim Jagielski 	}
3216*b1cdbd2cSJim Jagielski 
3217*b1cdbd2cSJim Jagielski 	KerningModifyHdl_Impl( NULL );
3218*b1cdbd2cSJim Jagielski 
3219*b1cdbd2cSJim Jagielski 	return 0;
3220*b1cdbd2cSJim Jagielski }
3221*b1cdbd2cSJim Jagielski 
3222*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3223*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxCharPositionPage,KerningModifyHdl_Impl,MetricField *,EMPTYARG)3224*b1cdbd2cSJim Jagielski IMPL_LINK( SvxCharPositionPage, KerningModifyHdl_Impl, MetricField*, EMPTYARG )
3225*b1cdbd2cSJim Jagielski {
3226*b1cdbd2cSJim Jagielski 	long nVal = static_cast<long>(m_aKerningEdit.GetValue());
3227*b1cdbd2cSJim Jagielski 	nVal = LogicToLogic( nVal, MAP_POINT, MAP_TWIP );
3228*b1cdbd2cSJim Jagielski 	long nKern = (short)m_aKerningEdit.Denormalize( nVal );
3229*b1cdbd2cSJim Jagielski 
3230*b1cdbd2cSJim Jagielski 	// Condensed? -> then negative
3231*b1cdbd2cSJim Jagielski 	if ( m_aKerningLB.GetSelectEntryPos() == 2 )
3232*b1cdbd2cSJim Jagielski 		nKern *= -1;
3233*b1cdbd2cSJim Jagielski 
3234*b1cdbd2cSJim Jagielski 	SvxFont& rFont = GetPreviewFont();
3235*b1cdbd2cSJim Jagielski     SvxFont& rCJKFont = GetPreviewCJKFont();
3236*b1cdbd2cSJim Jagielski 	SvxFont& rCTLFont = GetPreviewCTLFont();
3237*b1cdbd2cSJim Jagielski 
3238*b1cdbd2cSJim Jagielski 	rFont.SetFixKerning( (short)nKern );
3239*b1cdbd2cSJim Jagielski     rCJKFont.SetFixKerning( (short)nKern );
3240*b1cdbd2cSJim Jagielski 	rCTLFont.SetFixKerning( (short)nKern );
3241*b1cdbd2cSJim Jagielski 	m_aPreviewWin.Invalidate();
3242*b1cdbd2cSJim Jagielski 	return 0;
3243*b1cdbd2cSJim Jagielski }
3244*b1cdbd2cSJim Jagielski 
3245*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3246*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxCharPositionPage,PairKerningHdl_Impl,CheckBox *,EMPTYARG)3247*b1cdbd2cSJim Jagielski IMPL_LINK( SvxCharPositionPage, PairKerningHdl_Impl, CheckBox*, EMPTYARG )
3248*b1cdbd2cSJim Jagielski {
3249*b1cdbd2cSJim Jagielski 	return 0;
3250*b1cdbd2cSJim Jagielski }
3251*b1cdbd2cSJim Jagielski 
3252*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3253*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxCharPositionPage,LoseFocusHdl_Impl,MetricField *,pField)3254*b1cdbd2cSJim Jagielski IMPL_LINK( SvxCharPositionPage, LoseFocusHdl_Impl, MetricField*, pField )
3255*b1cdbd2cSJim Jagielski {
3256*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
3257*b1cdbd2cSJim Jagielski 	sal_Bool bHigh = m_aHighPosBtn.IsChecked();
3258*b1cdbd2cSJim Jagielski #endif
3259*b1cdbd2cSJim Jagielski 	sal_Bool bLow = m_aLowPosBtn.IsChecked();
3260*b1cdbd2cSJim Jagielski 	DBG_ASSERT( bHigh || bLow, "normal position is not valid" );
3261*b1cdbd2cSJim Jagielski 
3262*b1cdbd2cSJim Jagielski 	if ( &m_aHighLowEdit == pField )
3263*b1cdbd2cSJim Jagielski 	{
3264*b1cdbd2cSJim Jagielski 		if ( bLow )
3265*b1cdbd2cSJim Jagielski 			m_nSubEsc = (short)m_aHighLowEdit.GetValue() * -1;
3266*b1cdbd2cSJim Jagielski 		else
3267*b1cdbd2cSJim Jagielski 			m_nSuperEsc = (short)m_aHighLowEdit.GetValue();
3268*b1cdbd2cSJim Jagielski 	}
3269*b1cdbd2cSJim Jagielski 	else if ( &m_aFontSizeEdit == pField )
3270*b1cdbd2cSJim Jagielski 	{
3271*b1cdbd2cSJim Jagielski 		if ( bLow )
3272*b1cdbd2cSJim Jagielski 			m_nSubProp = (sal_uInt8)m_aFontSizeEdit.GetValue();
3273*b1cdbd2cSJim Jagielski 		else
3274*b1cdbd2cSJim Jagielski 			m_nSuperProp = (sal_uInt8)m_aFontSizeEdit.GetValue();
3275*b1cdbd2cSJim Jagielski 	}
3276*b1cdbd2cSJim Jagielski 	return 0;
3277*b1cdbd2cSJim Jagielski }
3278*b1cdbd2cSJim Jagielski 
3279*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3280*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxCharPositionPage,ScaleWidthModifyHdl_Impl,MetricField *,EMPTYARG)3281*b1cdbd2cSJim Jagielski IMPL_LINK( SvxCharPositionPage, ScaleWidthModifyHdl_Impl, MetricField*, EMPTYARG )
3282*b1cdbd2cSJim Jagielski {
3283*b1cdbd2cSJim Jagielski 	m_aPreviewWin.SetFontWidthScale( sal_uInt16( m_aScaleWidthMF.GetValue() ) );
3284*b1cdbd2cSJim Jagielski 
3285*b1cdbd2cSJim Jagielski 	return 0;
3286*b1cdbd2cSJim Jagielski }
3287*b1cdbd2cSJim Jagielski 
3288*b1cdbd2cSJim Jagielski /* -----------------28.08.2003 12:12-----------------
3289*b1cdbd2cSJim Jagielski 
3290*b1cdbd2cSJim Jagielski  --------------------------------------------------*/
ActivatePage(const SfxItemSet & rSet)3291*b1cdbd2cSJim Jagielski void  SvxCharPositionPage::ActivatePage( const SfxItemSet& rSet )
3292*b1cdbd2cSJim Jagielski {
3293*b1cdbd2cSJim Jagielski     //update the preview
3294*b1cdbd2cSJim Jagielski     SvxCharBasePage::ActivatePage( rSet );
3295*b1cdbd2cSJim Jagielski 
3296*b1cdbd2cSJim Jagielski     //the only thing that has to be checked is the max. allowed value for the
3297*b1cdbd2cSJim Jagielski     //condense edit field
3298*b1cdbd2cSJim Jagielski     if ( m_aKerningLB.GetSelectEntryPos() == 2 )
3299*b1cdbd2cSJim Jagielski     {
3300*b1cdbd2cSJim Jagielski         // Condensed -> max value == 1/6 of the current font height
3301*b1cdbd2cSJim Jagielski         SvxFont& rFont = GetPreviewFont();
3302*b1cdbd2cSJim Jagielski         long nMax = rFont.GetSize().Height() / 6;
3303*b1cdbd2cSJim Jagielski         long nKern = (short)m_aKerningEdit.Denormalize( LogicToLogic( static_cast<long>(m_aKerningEdit.GetValue()), MAP_POINT, MAP_TWIP ) );
3304*b1cdbd2cSJim Jagielski         m_aKerningEdit.SetMax( m_aKerningEdit.Normalize( nKern > nMax ? nKern : nMax ), FUNIT_TWIP );
3305*b1cdbd2cSJim Jagielski         m_aKerningEdit.SetLast( m_aKerningEdit.GetMax( m_aKerningEdit.GetUnit() ) );
3306*b1cdbd2cSJim Jagielski     }
3307*b1cdbd2cSJim Jagielski }
3308*b1cdbd2cSJim Jagielski 
3309*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3310*b1cdbd2cSJim Jagielski 
DeactivatePage(SfxItemSet * _pSet)3311*b1cdbd2cSJim Jagielski int SvxCharPositionPage::DeactivatePage( SfxItemSet* _pSet )
3312*b1cdbd2cSJim Jagielski {
3313*b1cdbd2cSJim Jagielski     if ( _pSet )
3314*b1cdbd2cSJim Jagielski         FillItemSet( *_pSet );
3315*b1cdbd2cSJim Jagielski 	return LEAVE_PAGE;
3316*b1cdbd2cSJim Jagielski }
3317*b1cdbd2cSJim Jagielski 
3318*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3319*b1cdbd2cSJim Jagielski 
Create(Window * pParent,const SfxItemSet & rSet)3320*b1cdbd2cSJim Jagielski SfxTabPage* SvxCharPositionPage::Create( Window* pParent, const SfxItemSet& rSet )
3321*b1cdbd2cSJim Jagielski {
3322*b1cdbd2cSJim Jagielski 	return new SvxCharPositionPage( pParent, rSet );
3323*b1cdbd2cSJim Jagielski }
3324*b1cdbd2cSJim Jagielski 
3325*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3326*b1cdbd2cSJim Jagielski 
GetRanges()3327*b1cdbd2cSJim Jagielski sal_uInt16* SvxCharPositionPage::GetRanges()
3328*b1cdbd2cSJim Jagielski {
3329*b1cdbd2cSJim Jagielski 	return pPositionRanges;
3330*b1cdbd2cSJim Jagielski }
3331*b1cdbd2cSJim Jagielski 
3332*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
Reset(const SfxItemSet & rSet)3333*b1cdbd2cSJim Jagielski void SvxCharPositionPage::Reset( const SfxItemSet& rSet )
3334*b1cdbd2cSJim Jagielski {
3335*b1cdbd2cSJim Jagielski 	String sUser = GetUserData();
3336*b1cdbd2cSJim Jagielski 
3337*b1cdbd2cSJim Jagielski 	if ( sUser.Len() )
3338*b1cdbd2cSJim Jagielski 	{
3339*b1cdbd2cSJim Jagielski 		m_nSuperEsc = (short)sUser.GetToken( 0 ).ToInt32();
3340*b1cdbd2cSJim Jagielski 		m_nSubEsc = (short)sUser.GetToken( 1 ).ToInt32();
3341*b1cdbd2cSJim Jagielski 		m_nSuperProp = (sal_uInt8)sUser.GetToken( 2 ).ToInt32();
3342*b1cdbd2cSJim Jagielski 		m_nSubProp = (sal_uInt8)sUser.GetToken( 3 ).ToInt32();
3343*b1cdbd2cSJim Jagielski 	}
3344*b1cdbd2cSJim Jagielski 
3345*b1cdbd2cSJim Jagielski 	short nEsc = 0;
3346*b1cdbd2cSJim Jagielski 	sal_uInt8 nEscProp = 100;
3347*b1cdbd2cSJim Jagielski 	sal_uInt8 nProp = 100;
3348*b1cdbd2cSJim Jagielski 
3349*b1cdbd2cSJim Jagielski 	m_aHighLowFT.Disable();
3350*b1cdbd2cSJim Jagielski 	m_aHighLowEdit.Disable();
3351*b1cdbd2cSJim Jagielski 	m_aFontSizeFT.Disable();
3352*b1cdbd2cSJim Jagielski 	m_aFontSizeEdit.Disable();
3353*b1cdbd2cSJim Jagielski 
3354*b1cdbd2cSJim Jagielski 	SvxFont& rFont = GetPreviewFont();
3355*b1cdbd2cSJim Jagielski     SvxFont& rCJKFont = GetPreviewCJKFont();
3356*b1cdbd2cSJim Jagielski 	SvxFont& rCTLFont = GetPreviewCTLFont();
3357*b1cdbd2cSJim Jagielski 	sal_uInt16 nWhich = GetWhich( SID_ATTR_CHAR_ESCAPEMENT );
3358*b1cdbd2cSJim Jagielski 
3359*b1cdbd2cSJim Jagielski 	if ( rSet.GetItemState( nWhich ) >= SFX_ITEM_DEFAULT )
3360*b1cdbd2cSJim Jagielski 	{
3361*b1cdbd2cSJim Jagielski 		const SvxEscapementItem& rItem = (SvxEscapementItem&)rSet.Get( nWhich );
3362*b1cdbd2cSJim Jagielski 		nEsc = rItem.GetEsc();
3363*b1cdbd2cSJim Jagielski 		nEscProp = rItem.GetProp();
3364*b1cdbd2cSJim Jagielski 
3365*b1cdbd2cSJim Jagielski 		if ( nEsc != 0 )
3366*b1cdbd2cSJim Jagielski 		{
3367*b1cdbd2cSJim Jagielski 			m_aHighLowFT.Enable();
3368*b1cdbd2cSJim Jagielski 			m_aHighLowEdit.Enable();
3369*b1cdbd2cSJim Jagielski 			m_aFontSizeFT.Enable();
3370*b1cdbd2cSJim Jagielski 			m_aFontSizeEdit.Enable();
3371*b1cdbd2cSJim Jagielski 
3372*b1cdbd2cSJim Jagielski 			short nFac;
3373*b1cdbd2cSJim Jagielski             sal_Bool bAutomatic(sal_False);
3374*b1cdbd2cSJim Jagielski 
3375*b1cdbd2cSJim Jagielski 			if ( nEsc > 0 )
3376*b1cdbd2cSJim Jagielski 			{
3377*b1cdbd2cSJim Jagielski 				nFac = 1;
3378*b1cdbd2cSJim Jagielski 				m_aHighPosBtn.Check( sal_True );
3379*b1cdbd2cSJim Jagielski 				if ( nEsc == DFLT_ESC_AUTO_SUPER )
3380*b1cdbd2cSJim Jagielski 				{
3381*b1cdbd2cSJim Jagielski 					nEsc = DFLT_ESC_SUPER;
3382*b1cdbd2cSJim Jagielski                     bAutomatic = sal_True;
3383*b1cdbd2cSJim Jagielski 				}
3384*b1cdbd2cSJim Jagielski 			}
3385*b1cdbd2cSJim Jagielski 			else
3386*b1cdbd2cSJim Jagielski 			{
3387*b1cdbd2cSJim Jagielski 				nFac = -1;
3388*b1cdbd2cSJim Jagielski 				m_aLowPosBtn.Check( sal_True );
3389*b1cdbd2cSJim Jagielski 				if ( nEsc == DFLT_ESC_AUTO_SUB )
3390*b1cdbd2cSJim Jagielski 				{
3391*b1cdbd2cSJim Jagielski 					nEsc = DFLT_ESC_SUB;
3392*b1cdbd2cSJim Jagielski                     bAutomatic = sal_True;
3393*b1cdbd2cSJim Jagielski 				}
3394*b1cdbd2cSJim Jagielski 			}
3395*b1cdbd2cSJim Jagielski             if (!m_aHighLowRB.IsEnabled())
3396*b1cdbd2cSJim Jagielski             {
3397*b1cdbd2cSJim Jagielski                 m_aHighLowRB.Enable();
3398*b1cdbd2cSJim Jagielski             }
3399*b1cdbd2cSJim Jagielski             m_aHighLowRB.Check(bAutomatic);
3400*b1cdbd2cSJim Jagielski 
3401*b1cdbd2cSJim Jagielski 			if ( m_aHighLowRB.IsChecked() )
3402*b1cdbd2cSJim Jagielski 			{
3403*b1cdbd2cSJim Jagielski 				m_aHighLowFT.Disable();
3404*b1cdbd2cSJim Jagielski 				m_aHighLowEdit.Disable();
3405*b1cdbd2cSJim Jagielski 			}
3406*b1cdbd2cSJim Jagielski 			m_aHighLowEdit.SetValue( m_aHighLowEdit.Normalize( nFac * nEsc ) );
3407*b1cdbd2cSJim Jagielski 		}
3408*b1cdbd2cSJim Jagielski 		else
3409*b1cdbd2cSJim Jagielski 		{
3410*b1cdbd2cSJim Jagielski 			m_aNormalPosBtn.Check( sal_True );
3411*b1cdbd2cSJim Jagielski 			m_aHighLowRB.Check( sal_True );
3412*b1cdbd2cSJim Jagielski 			PositionHdl_Impl( NULL );
3413*b1cdbd2cSJim Jagielski 		}
3414*b1cdbd2cSJim Jagielski 	    //the height has to be set after the handler is called to keep the value also if the escapement is zero
3415*b1cdbd2cSJim Jagielski         m_aFontSizeEdit.SetValue( m_aFontSizeEdit.Normalize( nEscProp ) );
3416*b1cdbd2cSJim Jagielski 	}
3417*b1cdbd2cSJim Jagielski 	else
3418*b1cdbd2cSJim Jagielski 	{
3419*b1cdbd2cSJim Jagielski 		m_aHighPosBtn.Check( sal_False );
3420*b1cdbd2cSJim Jagielski 		m_aNormalPosBtn.Check( sal_False );
3421*b1cdbd2cSJim Jagielski 		m_aLowPosBtn.Check( sal_False );
3422*b1cdbd2cSJim Jagielski 	}
3423*b1cdbd2cSJim Jagielski 
3424*b1cdbd2cSJim Jagielski 	// BspFont setzen
3425*b1cdbd2cSJim Jagielski 	SetPrevFontEscapement( nProp, nEscProp, nEsc );
3426*b1cdbd2cSJim Jagielski 
3427*b1cdbd2cSJim Jagielski 	// Kerning
3428*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_KERNING );
3429*b1cdbd2cSJim Jagielski 
3430*b1cdbd2cSJim Jagielski 	if ( rSet.GetItemState( nWhich ) >= SFX_ITEM_DEFAULT )
3431*b1cdbd2cSJim Jagielski 	{
3432*b1cdbd2cSJim Jagielski 		const SvxKerningItem& rItem = (SvxKerningItem&)rSet.Get( nWhich );
3433*b1cdbd2cSJim Jagielski 		SfxMapUnit eUnit = rSet.GetPool()->GetMetric( nWhich );
3434*b1cdbd2cSJim Jagielski 		MapUnit eOrgUnit = (MapUnit)eUnit;
3435*b1cdbd2cSJim Jagielski 		MapUnit ePntUnit( MAP_POINT );
3436*b1cdbd2cSJim Jagielski 		long nBig = static_cast<long>(m_aKerningEdit.Normalize( static_cast<long>(rItem.GetValue()) ));
3437*b1cdbd2cSJim Jagielski 		long nKerning = LogicToLogic( nBig, eOrgUnit, ePntUnit );
3438*b1cdbd2cSJim Jagielski 
3439*b1cdbd2cSJim Jagielski 		// Kerning am Font setzen, vorher in Twips umrechnen
3440*b1cdbd2cSJim Jagielski 		long nKern = LogicToLogic( rItem.GetValue(), (MapUnit)eUnit, MAP_TWIP );
3441*b1cdbd2cSJim Jagielski 		rFont.SetFixKerning( (short)nKern );
3442*b1cdbd2cSJim Jagielski         rCJKFont.SetFixKerning( (short)nKern );
3443*b1cdbd2cSJim Jagielski 		rCTLFont.SetFixKerning( (short)nKern );
3444*b1cdbd2cSJim Jagielski 
3445*b1cdbd2cSJim Jagielski 		if ( nKerning > 0 )
3446*b1cdbd2cSJim Jagielski 		{
3447*b1cdbd2cSJim Jagielski 			m_aKerningLB.SelectEntryPos( LW_GESPERRT );
3448*b1cdbd2cSJim Jagielski 		}
3449*b1cdbd2cSJim Jagielski 		else if ( nKerning < 0 )
3450*b1cdbd2cSJim Jagielski 		{
3451*b1cdbd2cSJim Jagielski 			m_aKerningLB.SelectEntryPos( LW_SCHMAL );
3452*b1cdbd2cSJim Jagielski 			nKerning = -nKerning;
3453*b1cdbd2cSJim Jagielski 		}
3454*b1cdbd2cSJim Jagielski 		else
3455*b1cdbd2cSJim Jagielski 		{
3456*b1cdbd2cSJim Jagielski 			nKerning = 0;
3457*b1cdbd2cSJim Jagielski 			m_aKerningLB.SelectEntryPos( LW_NORMAL );
3458*b1cdbd2cSJim Jagielski 		}
3459*b1cdbd2cSJim Jagielski         //enable/disable and set min/max of the Edit
3460*b1cdbd2cSJim Jagielski         KerningSelectHdl_Impl(&m_aKerningLB);
3461*b1cdbd2cSJim Jagielski         //the attribute value must be displayed also if it's above the maximum allowed value
3462*b1cdbd2cSJim Jagielski         long nVal = static_cast<long>(m_aKerningEdit.GetMax());
3463*b1cdbd2cSJim Jagielski         if(nVal < nKerning)
3464*b1cdbd2cSJim Jagielski             m_aKerningEdit.SetMax( nKerning );
3465*b1cdbd2cSJim Jagielski         m_aKerningEdit.SetValue( nKerning );
3466*b1cdbd2cSJim Jagielski 	}
3467*b1cdbd2cSJim Jagielski 	else
3468*b1cdbd2cSJim Jagielski 		m_aKerningEdit.SetText( String() );
3469*b1cdbd2cSJim Jagielski 
3470*b1cdbd2cSJim Jagielski 	// Pair kerning
3471*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_AUTOKERN );
3472*b1cdbd2cSJim Jagielski 
3473*b1cdbd2cSJim Jagielski 	if ( rSet.GetItemState( nWhich ) >= SFX_ITEM_DEFAULT )
3474*b1cdbd2cSJim Jagielski 	{
3475*b1cdbd2cSJim Jagielski 		const SvxAutoKernItem& rItem = (SvxAutoKernItem&)rSet.Get( nWhich );
3476*b1cdbd2cSJim Jagielski 		m_aPairKerningBtn.Check( rItem.GetValue() );
3477*b1cdbd2cSJim Jagielski 	}
3478*b1cdbd2cSJim Jagielski 	else
3479*b1cdbd2cSJim Jagielski 		m_aPairKerningBtn.Check( sal_False );
3480*b1cdbd2cSJim Jagielski 
3481*b1cdbd2cSJim Jagielski 	// Scale Width
3482*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_SCALEWIDTH );
3483*b1cdbd2cSJim Jagielski 	if ( rSet.GetItemState( nWhich ) >= SFX_ITEM_DEFAULT )
3484*b1cdbd2cSJim Jagielski 	{
3485*b1cdbd2cSJim Jagielski 		const SvxCharScaleWidthItem& rItem = ( SvxCharScaleWidthItem& ) rSet.Get( nWhich );
3486*b1cdbd2cSJim Jagielski 		m_nScaleWidthInitialVal = rItem.GetValue();
3487*b1cdbd2cSJim Jagielski 		m_aScaleWidthMF.SetValue( m_nScaleWidthInitialVal );
3488*b1cdbd2cSJim Jagielski 	}
3489*b1cdbd2cSJim Jagielski 	else
3490*b1cdbd2cSJim Jagielski 		m_aScaleWidthMF.SetValue( 100 );
3491*b1cdbd2cSJim Jagielski 
3492*b1cdbd2cSJim Jagielski     nWhich = GetWhich( SID_ATTR_CHAR_WIDTH_FIT_TO_LINE );
3493*b1cdbd2cSJim Jagielski 	if ( rSet.GetItemState( nWhich ) >= SFX_ITEM_DEFAULT )
3494*b1cdbd2cSJim Jagielski 		m_nScaleWidthItemSetVal = ((SfxUInt16Item&) rSet.Get( nWhich )).GetValue();
3495*b1cdbd2cSJim Jagielski 
3496*b1cdbd2cSJim Jagielski 	// Rotation
3497*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_ROTATED );
3498*b1cdbd2cSJim Jagielski 	SfxItemState eState = rSet.GetItemState( nWhich );
3499*b1cdbd2cSJim Jagielski 	if( SFX_ITEM_UNKNOWN == eState )
3500*b1cdbd2cSJim Jagielski 	{
3501*b1cdbd2cSJim Jagielski 		m_aRotationScalingFL.Hide();
3502*b1cdbd2cSJim Jagielski 		m_aScalingFL.Show();
3503*b1cdbd2cSJim Jagielski 		m_a0degRB.Hide();
3504*b1cdbd2cSJim Jagielski 		m_a90degRB.Hide();
3505*b1cdbd2cSJim Jagielski 		m_a270degRB.Hide();
3506*b1cdbd2cSJim Jagielski 		m_aFitToLineCB.Hide();
3507*b1cdbd2cSJim Jagielski         m_aFitToLineCB .Hide();
3508*b1cdbd2cSJim Jagielski 
3509*b1cdbd2cSJim Jagielski 
3510*b1cdbd2cSJim Jagielski         // move the following controls upwards
3511*b1cdbd2cSJim Jagielski 		Window* aCntrlArr[] = {
3512*b1cdbd2cSJim Jagielski 			&m_aScaleWidthFT, &m_aScaleWidthMF, &m_aKerningLine,
3513*b1cdbd2cSJim Jagielski 			&m_aKerningLB, &m_aKerningFT, &m_aKerningEdit, &m_aPairKerningBtn,
3514*b1cdbd2cSJim Jagielski 			0 };
3515*b1cdbd2cSJim Jagielski 
3516*b1cdbd2cSJim Jagielski         long nDiff = m_aScaleWidthMF.GetPosPixel().Y() -
3517*b1cdbd2cSJim Jagielski                         m_a0degRB.GetPosPixel().Y();
3518*b1cdbd2cSJim Jagielski 
3519*b1cdbd2cSJim Jagielski 		for( Window** ppW = aCntrlArr; *ppW; ++ppW )
3520*b1cdbd2cSJim Jagielski 		{
3521*b1cdbd2cSJim Jagielski 			Point aPnt( (*ppW)->GetPosPixel() );
3522*b1cdbd2cSJim Jagielski 			aPnt.Y() -= nDiff;
3523*b1cdbd2cSJim Jagielski 			(*ppW)->SetPosPixel( aPnt );
3524*b1cdbd2cSJim Jagielski 		}
3525*b1cdbd2cSJim Jagielski 	}
3526*b1cdbd2cSJim Jagielski 	else
3527*b1cdbd2cSJim Jagielski 	{
3528*b1cdbd2cSJim Jagielski 		m_aScalingFL.Hide();
3529*b1cdbd2cSJim Jagielski 
3530*b1cdbd2cSJim Jagielski 		Link aOldLink( m_aFitToLineCB.GetClickHdl() );
3531*b1cdbd2cSJim Jagielski 		m_aFitToLineCB.SetClickHdl( Link() );
3532*b1cdbd2cSJim Jagielski 		if( eState >= SFX_ITEM_DEFAULT )
3533*b1cdbd2cSJim Jagielski 		{
3534*b1cdbd2cSJim Jagielski 			const SvxCharRotateItem& rItem =
3535*b1cdbd2cSJim Jagielski 					(SvxCharRotateItem&) rSet.Get( nWhich );
3536*b1cdbd2cSJim Jagielski 			if (rItem.IsBottomToTop())
3537*b1cdbd2cSJim Jagielski 				m_a90degRB.Check( sal_True );
3538*b1cdbd2cSJim Jagielski 			else if (rItem.IsTopToBotton())
3539*b1cdbd2cSJim Jagielski 				m_a270degRB.Check( sal_True );
3540*b1cdbd2cSJim Jagielski 			else
3541*b1cdbd2cSJim Jagielski 			{
3542*b1cdbd2cSJim Jagielski 				DBG_ASSERT( 0 == rItem.GetValue(), "incorrect value" );
3543*b1cdbd2cSJim Jagielski 				m_a0degRB.Check( sal_True );
3544*b1cdbd2cSJim Jagielski 			}
3545*b1cdbd2cSJim Jagielski 			m_aFitToLineCB.Check( rItem.IsFitToLine() );
3546*b1cdbd2cSJim Jagielski 		}
3547*b1cdbd2cSJim Jagielski 		else
3548*b1cdbd2cSJim Jagielski 		{
3549*b1cdbd2cSJim Jagielski 			if( eState == SFX_ITEM_DONTCARE )
3550*b1cdbd2cSJim Jagielski 			{
3551*b1cdbd2cSJim Jagielski 				m_a0degRB.Check( sal_False );
3552*b1cdbd2cSJim Jagielski 				m_a90degRB.Check( sal_False );
3553*b1cdbd2cSJim Jagielski 				m_a270degRB.Check( sal_False );
3554*b1cdbd2cSJim Jagielski 			}
3555*b1cdbd2cSJim Jagielski 			else
3556*b1cdbd2cSJim Jagielski 				m_a0degRB.Check( sal_True );
3557*b1cdbd2cSJim Jagielski 
3558*b1cdbd2cSJim Jagielski 			m_aFitToLineCB.Check( sal_False );
3559*b1cdbd2cSJim Jagielski 		}
3560*b1cdbd2cSJim Jagielski 		m_aFitToLineCB.SetClickHdl( aOldLink );
3561*b1cdbd2cSJim Jagielski 		m_aFitToLineCB.Enable( !m_a0degRB.IsChecked() );
3562*b1cdbd2cSJim Jagielski 
3563*b1cdbd2cSJim Jagielski 		// is this value set?
3564*b1cdbd2cSJim Jagielski 		if( SFX_ITEM_UNKNOWN == rSet.GetItemState( GetWhich(
3565*b1cdbd2cSJim Jagielski 										SID_ATTR_CHAR_WIDTH_FIT_TO_LINE ) ))
3566*b1cdbd2cSJim Jagielski 			m_aFitToLineCB.Hide();
3567*b1cdbd2cSJim Jagielski 	}
3568*b1cdbd2cSJim Jagielski 
3569*b1cdbd2cSJim Jagielski 	m_aHighPosBtn.SaveValue();
3570*b1cdbd2cSJim Jagielski 	m_aNormalPosBtn.SaveValue();
3571*b1cdbd2cSJim Jagielski 	m_aLowPosBtn.SaveValue();
3572*b1cdbd2cSJim Jagielski 	m_a0degRB.SaveValue();
3573*b1cdbd2cSJim Jagielski 	m_a90degRB.SaveValue();
3574*b1cdbd2cSJim Jagielski 	m_a270degRB.SaveValue();
3575*b1cdbd2cSJim Jagielski 	m_aFitToLineCB.SaveValue();
3576*b1cdbd2cSJim Jagielski 	m_aScaleWidthMF.SaveValue();
3577*b1cdbd2cSJim Jagielski 	m_aKerningLB.SaveValue();
3578*b1cdbd2cSJim Jagielski 	m_aKerningEdit.SaveValue();
3579*b1cdbd2cSJim Jagielski 	m_aPairKerningBtn.SaveValue();
3580*b1cdbd2cSJim Jagielski }
3581*b1cdbd2cSJim Jagielski 
3582*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3583*b1cdbd2cSJim Jagielski 
FillItemSet(SfxItemSet & rSet)3584*b1cdbd2cSJim Jagielski sal_Bool SvxCharPositionPage::FillItemSet( SfxItemSet& rSet )
3585*b1cdbd2cSJim Jagielski {
3586*b1cdbd2cSJim Jagielski 	//	Position (hoch, normal oder tief)
3587*b1cdbd2cSJim Jagielski 	const SfxItemSet& rOldSet = GetItemSet();
3588*b1cdbd2cSJim Jagielski 	sal_Bool bModified = sal_False, bChanged = sal_True;
3589*b1cdbd2cSJim Jagielski 	sal_uInt16 nWhich = GetWhich( SID_ATTR_CHAR_ESCAPEMENT );
3590*b1cdbd2cSJim Jagielski 	const SfxPoolItem* pOld = GetOldItem( rSet, SID_ATTR_CHAR_ESCAPEMENT );
3591*b1cdbd2cSJim Jagielski 	const FASTBOOL bHigh = m_aHighPosBtn.IsChecked();
3592*b1cdbd2cSJim Jagielski 	short nEsc;
3593*b1cdbd2cSJim Jagielski 	sal_uInt8  nEscProp;
3594*b1cdbd2cSJim Jagielski 
3595*b1cdbd2cSJim Jagielski 	if ( bHigh || m_aLowPosBtn.IsChecked() )
3596*b1cdbd2cSJim Jagielski 	{
3597*b1cdbd2cSJim Jagielski 		if ( m_aHighLowRB.IsChecked() )
3598*b1cdbd2cSJim Jagielski 			nEsc = bHigh ? DFLT_ESC_AUTO_SUPER : DFLT_ESC_AUTO_SUB;
3599*b1cdbd2cSJim Jagielski 		else
3600*b1cdbd2cSJim Jagielski 		{
3601*b1cdbd2cSJim Jagielski 			nEsc = (short)m_aHighLowEdit.Denormalize( m_aHighLowEdit.GetValue() );
3602*b1cdbd2cSJim Jagielski 			nEsc *= bHigh ? 1 : -1;
3603*b1cdbd2cSJim Jagielski 		}
3604*b1cdbd2cSJim Jagielski 		nEscProp = (sal_uInt8)m_aFontSizeEdit.Denormalize( m_aFontSizeEdit.GetValue() );
3605*b1cdbd2cSJim Jagielski 	}
3606*b1cdbd2cSJim Jagielski 	else
3607*b1cdbd2cSJim Jagielski 	{
3608*b1cdbd2cSJim Jagielski 		nEsc  = 0;
3609*b1cdbd2cSJim Jagielski 		nEscProp = 100;
3610*b1cdbd2cSJim Jagielski 	}
3611*b1cdbd2cSJim Jagielski 
3612*b1cdbd2cSJim Jagielski 	if ( pOld )
3613*b1cdbd2cSJim Jagielski 	{
3614*b1cdbd2cSJim Jagielski 		const SvxEscapementItem& rItem = *( (const SvxEscapementItem*)pOld );
3615*b1cdbd2cSJim Jagielski 		if ( rItem.GetEsc() == nEsc && rItem.GetProp() == nEscProp	)
3616*b1cdbd2cSJim Jagielski 			bChanged = sal_False;
3617*b1cdbd2cSJim Jagielski 	}
3618*b1cdbd2cSJim Jagielski 
3619*b1cdbd2cSJim Jagielski 	if ( !bChanged && !m_aHighPosBtn.GetSavedValue() &&
3620*b1cdbd2cSJim Jagielski 		 !m_aNormalPosBtn.GetSavedValue() && !m_aLowPosBtn.GetSavedValue() )
3621*b1cdbd2cSJim Jagielski 		bChanged = sal_True;
3622*b1cdbd2cSJim Jagielski 
3623*b1cdbd2cSJim Jagielski 	if ( bChanged &&
3624*b1cdbd2cSJim Jagielski 		 ( m_aHighPosBtn.IsChecked() || m_aNormalPosBtn.IsChecked() || m_aLowPosBtn.IsChecked() ) )
3625*b1cdbd2cSJim Jagielski 	{
3626*b1cdbd2cSJim Jagielski 		rSet.Put( SvxEscapementItem( nEsc, nEscProp, nWhich ) );
3627*b1cdbd2cSJim Jagielski 		bModified = sal_True;
3628*b1cdbd2cSJim Jagielski 	}
3629*b1cdbd2cSJim Jagielski 	else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
3630*b1cdbd2cSJim Jagielski 		CLEARTITEM;
3631*b1cdbd2cSJim Jagielski 
3632*b1cdbd2cSJim Jagielski 	bChanged = sal_True;
3633*b1cdbd2cSJim Jagielski 
3634*b1cdbd2cSJim Jagielski 	// Kerning
3635*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_KERNING );
3636*b1cdbd2cSJim Jagielski 	pOld = GetOldItem( rSet, SID_ATTR_CHAR_KERNING );
3637*b1cdbd2cSJim Jagielski 	sal_uInt16 nPos = m_aKerningLB.GetSelectEntryPos();
3638*b1cdbd2cSJim Jagielski 	short nKerning = 0;
3639*b1cdbd2cSJim Jagielski 	SfxMapUnit eUnit = rSet.GetPool()->GetMetric( nWhich );
3640*b1cdbd2cSJim Jagielski 
3641*b1cdbd2cSJim Jagielski 	if ( nPos == LW_GESPERRT || nPos == LW_SCHMAL )
3642*b1cdbd2cSJim Jagielski 	{
3643*b1cdbd2cSJim Jagielski 		long nTmp = static_cast<long>(m_aKerningEdit.GetValue());
3644*b1cdbd2cSJim Jagielski 		long nVal = LogicToLogic( nTmp, MAP_POINT, (MapUnit)eUnit );
3645*b1cdbd2cSJim Jagielski 		nKerning = (short)m_aKerningEdit.Denormalize( nVal );
3646*b1cdbd2cSJim Jagielski 
3647*b1cdbd2cSJim Jagielski 		if ( nPos == LW_SCHMAL )
3648*b1cdbd2cSJim Jagielski 			nKerning *= - 1;
3649*b1cdbd2cSJim Jagielski 	}
3650*b1cdbd2cSJim Jagielski 
3651*b1cdbd2cSJim Jagielski 	if ( pOld )
3652*b1cdbd2cSJim Jagielski 	{
3653*b1cdbd2cSJim Jagielski 		const SvxKerningItem& rItem = *( (const SvxKerningItem*)pOld );
3654*b1cdbd2cSJim Jagielski 		if ( rItem.GetValue() == nKerning )
3655*b1cdbd2cSJim Jagielski 			bChanged = sal_False;
3656*b1cdbd2cSJim Jagielski 	}
3657*b1cdbd2cSJim Jagielski 
3658*b1cdbd2cSJim Jagielski 	if ( !bChanged &&
3659*b1cdbd2cSJim Jagielski 		 ( m_aKerningLB.GetSavedValue() == LISTBOX_ENTRY_NOTFOUND ||
3660*b1cdbd2cSJim Jagielski 		   ( !m_aKerningEdit.GetSavedValue().Len() && m_aKerningEdit.IsEnabled() ) ) )
3661*b1cdbd2cSJim Jagielski 		bChanged = sal_True;
3662*b1cdbd2cSJim Jagielski 
3663*b1cdbd2cSJim Jagielski 	if ( bChanged && nPos != LISTBOX_ENTRY_NOTFOUND )
3664*b1cdbd2cSJim Jagielski 	{
3665*b1cdbd2cSJim Jagielski 		rSet.Put( SvxKerningItem( nKerning, nWhich ) );
3666*b1cdbd2cSJim Jagielski 		bModified |= sal_True;
3667*b1cdbd2cSJim Jagielski 	}
3668*b1cdbd2cSJim Jagielski 	else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
3669*b1cdbd2cSJim Jagielski 		CLEARTITEM;
3670*b1cdbd2cSJim Jagielski 
3671*b1cdbd2cSJim Jagielski 	bChanged = sal_True;
3672*b1cdbd2cSJim Jagielski 
3673*b1cdbd2cSJim Jagielski 	// Pair-Kerning
3674*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_AUTOKERN );
3675*b1cdbd2cSJim Jagielski 
3676*b1cdbd2cSJim Jagielski 	if ( m_aPairKerningBtn.IsChecked() != m_aPairKerningBtn.GetSavedValue() )
3677*b1cdbd2cSJim Jagielski 	{
3678*b1cdbd2cSJim Jagielski 		rSet.Put( SvxAutoKernItem( m_aPairKerningBtn.IsChecked(), nWhich ) );
3679*b1cdbd2cSJim Jagielski 		bModified |= sal_True;
3680*b1cdbd2cSJim Jagielski 	}
3681*b1cdbd2cSJim Jagielski 	else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
3682*b1cdbd2cSJim Jagielski 		CLEARTITEM;
3683*b1cdbd2cSJim Jagielski 
3684*b1cdbd2cSJim Jagielski 	// Scale Width
3685*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_SCALEWIDTH );
3686*b1cdbd2cSJim Jagielski 	if ( m_aScaleWidthMF.GetText() != m_aScaleWidthMF.GetSavedValue() )
3687*b1cdbd2cSJim Jagielski 	{
3688*b1cdbd2cSJim Jagielski 		rSet.Put( SvxCharScaleWidthItem( (sal_uInt16)m_aScaleWidthMF.GetValue(), nWhich ) );
3689*b1cdbd2cSJim Jagielski 		bModified |= sal_True;
3690*b1cdbd2cSJim Jagielski 	}
3691*b1cdbd2cSJim Jagielski 	else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
3692*b1cdbd2cSJim Jagielski 		CLEARTITEM;
3693*b1cdbd2cSJim Jagielski 
3694*b1cdbd2cSJim Jagielski 	// Rotation
3695*b1cdbd2cSJim Jagielski 	nWhich = GetWhich( SID_ATTR_CHAR_ROTATED );
3696*b1cdbd2cSJim Jagielski 	if ( m_a0degRB     .IsChecked() != m_a0degRB     .GetSavedValue()  ||
3697*b1cdbd2cSJim Jagielski 		 m_a90degRB    .IsChecked() != m_a90degRB    .GetSavedValue()  ||
3698*b1cdbd2cSJim Jagielski 		 m_a270degRB   .IsChecked() != m_a270degRB   .GetSavedValue()  ||
3699*b1cdbd2cSJim Jagielski 		 m_aFitToLineCB.IsChecked() != m_aFitToLineCB.GetSavedValue() )
3700*b1cdbd2cSJim Jagielski 	{
3701*b1cdbd2cSJim Jagielski 		SvxCharRotateItem aItem( 0, m_aFitToLineCB.IsChecked(), nWhich );
3702*b1cdbd2cSJim Jagielski 		if (m_a90degRB.IsChecked())
3703*b1cdbd2cSJim Jagielski 			aItem.SetBottomToTop();
3704*b1cdbd2cSJim Jagielski 		else if (m_a270degRB.IsChecked())
3705*b1cdbd2cSJim Jagielski 			aItem.SetTopToBotton();
3706*b1cdbd2cSJim Jagielski 		rSet.Put( aItem );
3707*b1cdbd2cSJim Jagielski 		bModified |= sal_True;
3708*b1cdbd2cSJim Jagielski 	}
3709*b1cdbd2cSJim Jagielski 	else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
3710*b1cdbd2cSJim Jagielski 		CLEARTITEM;
3711*b1cdbd2cSJim Jagielski 
3712*b1cdbd2cSJim Jagielski 	return bModified;
3713*b1cdbd2cSJim Jagielski }
3714*b1cdbd2cSJim Jagielski 
3715*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3716*b1cdbd2cSJim Jagielski 
FillUserData()3717*b1cdbd2cSJim Jagielski void SvxCharPositionPage::FillUserData()
3718*b1cdbd2cSJim Jagielski {
3719*b1cdbd2cSJim Jagielski 	const sal_Unicode cTok = ';';
3720*b1cdbd2cSJim Jagielski 
3721*b1cdbd2cSJim Jagielski 	String sUser( UniString::CreateFromInt32( m_nSuperEsc ) );
3722*b1cdbd2cSJim Jagielski 	sUser.Append( cTok );
3723*b1cdbd2cSJim Jagielski 	sUser.Append( UniString::CreateFromInt32( m_nSubEsc ) );
3724*b1cdbd2cSJim Jagielski 	sUser.Append( cTok );
3725*b1cdbd2cSJim Jagielski 	sUser.Append( UniString::CreateFromInt32( m_nSuperProp ) );
3726*b1cdbd2cSJim Jagielski 	sUser.Append( cTok );
3727*b1cdbd2cSJim Jagielski 	sUser.Append( UniString::CreateFromInt32( m_nSubProp ) );
3728*b1cdbd2cSJim Jagielski 	SetUserData( sUser );
3729*b1cdbd2cSJim Jagielski }
3730*b1cdbd2cSJim Jagielski 
3731*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
SetPreviewBackgroundToCharacter()3732*b1cdbd2cSJim Jagielski void SvxCharPositionPage::SetPreviewBackgroundToCharacter()
3733*b1cdbd2cSJim Jagielski {
3734*b1cdbd2cSJim Jagielski     m_bPreviewBackgroundToCharacter = sal_True;
3735*b1cdbd2cSJim Jagielski }
3736*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
PageCreated(SfxAllItemSet aSet)3737*b1cdbd2cSJim Jagielski void SvxCharPositionPage::PageCreated (SfxAllItemSet aSet) //add CHINA001
3738*b1cdbd2cSJim Jagielski {
3739*b1cdbd2cSJim Jagielski 	SFX_ITEMSET_ARG (&aSet,pFlagItem,SfxUInt32Item,SID_FLAG_TYPE,sal_False);
3740*b1cdbd2cSJim Jagielski 	if (pFlagItem)
3741*b1cdbd2cSJim Jagielski 	{
3742*b1cdbd2cSJim Jagielski 		sal_uInt32 nFlags=pFlagItem->GetValue();
3743*b1cdbd2cSJim Jagielski 		if ( ( nFlags & SVX_PREVIEW_CHARACTER ) == SVX_PREVIEW_CHARACTER )
3744*b1cdbd2cSJim Jagielski 			SetPreviewBackgroundToCharacter();
3745*b1cdbd2cSJim Jagielski 	}
3746*b1cdbd2cSJim Jagielski }
3747*b1cdbd2cSJim Jagielski // class SvxCharTwoLinesPage ------------------------------------------------
3748*b1cdbd2cSJim Jagielski 
SvxCharTwoLinesPage(Window * pParent,const SfxItemSet & rInSet)3749*b1cdbd2cSJim Jagielski SvxCharTwoLinesPage::SvxCharTwoLinesPage( Window* pParent, const SfxItemSet& rInSet ) :
3750*b1cdbd2cSJim Jagielski 
3751*b1cdbd2cSJim Jagielski 	SvxCharBasePage( pParent, CUI_RES( RID_SVXPAGE_CHAR_TWOLINES ), rInSet, WIN_TWOLINES_PREVIEW, FT_TWOLINES_FONTTYPE ),
3752*b1cdbd2cSJim Jagielski 
3753*b1cdbd2cSJim Jagielski 	m_aSwitchOnLine		( this, CUI_RES( FL_SWITCHON ) ),
3754*b1cdbd2cSJim Jagielski 	m_aTwoLinesBtn		( this, CUI_RES( CB_TWOLINES ) ),
3755*b1cdbd2cSJim Jagielski 
3756*b1cdbd2cSJim Jagielski 	m_aEncloseLine		( this, CUI_RES( FL_ENCLOSE ) ),
3757*b1cdbd2cSJim Jagielski 	m_aStartBracketFT	( this, CUI_RES( FT_STARTBRACKET ) ),
3758*b1cdbd2cSJim Jagielski 	m_aStartBracketLB	( this, CUI_RES( ED_STARTBRACKET ) ),
3759*b1cdbd2cSJim Jagielski 	m_aEndBracketFT		( this, CUI_RES( FT_ENDBRACKET ) ),
3760*b1cdbd2cSJim Jagielski 	m_aEndBracketLB		( this, CUI_RES( ED_ENDBRACKET ) ),
3761*b1cdbd2cSJim Jagielski 	m_nStartBracketPosition( 0 ),
3762*b1cdbd2cSJim Jagielski 	m_nEndBracketPosition( 0 )
3763*b1cdbd2cSJim Jagielski {
3764*b1cdbd2cSJim Jagielski 	FreeResource();
3765*b1cdbd2cSJim Jagielski 	Initialize();
3766*b1cdbd2cSJim Jagielski }
3767*b1cdbd2cSJim Jagielski 
3768*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3769*b1cdbd2cSJim Jagielski 
Initialize()3770*b1cdbd2cSJim Jagielski void SvxCharTwoLinesPage::Initialize()
3771*b1cdbd2cSJim Jagielski {
3772*b1cdbd2cSJim Jagielski 	Size aSize = m_aStartBracketLB.GetSizePixel();
3773*b1cdbd2cSJim Jagielski     aSize.Height() = m_aStartBracketLB.CalcSize( 1, 6 ).Height();
3774*b1cdbd2cSJim Jagielski 	m_aStartBracketLB.SetSizePixel( aSize );
3775*b1cdbd2cSJim Jagielski 	aSize = m_aEndBracketLB.GetSizePixel();
3776*b1cdbd2cSJim Jagielski     aSize.Height() = m_aEndBracketLB.CalcSize( 1, 6 ).Height();
3777*b1cdbd2cSJim Jagielski 	m_aEndBracketLB.SetSizePixel( aSize );
3778*b1cdbd2cSJim Jagielski 
3779*b1cdbd2cSJim Jagielski 	m_aTwoLinesBtn.Check( sal_False );
3780*b1cdbd2cSJim Jagielski 	TwoLinesHdl_Impl( NULL );
3781*b1cdbd2cSJim Jagielski 
3782*b1cdbd2cSJim Jagielski 	m_aTwoLinesBtn.SetClickHdl( LINK( this, SvxCharTwoLinesPage, TwoLinesHdl_Impl ) );
3783*b1cdbd2cSJim Jagielski 
3784*b1cdbd2cSJim Jagielski 	Link aLink = LINK( this, SvxCharTwoLinesPage, CharacterMapHdl_Impl );
3785*b1cdbd2cSJim Jagielski 	m_aStartBracketLB.SetSelectHdl( aLink );
3786*b1cdbd2cSJim Jagielski 	m_aEndBracketLB.SetSelectHdl( aLink );
3787*b1cdbd2cSJim Jagielski 
3788*b1cdbd2cSJim Jagielski 	SvxFont& rFont = GetPreviewFont();
3789*b1cdbd2cSJim Jagielski     SvxFont& rCJKFont = GetPreviewCJKFont();
3790*b1cdbd2cSJim Jagielski 	SvxFont& rCTLFont = GetPreviewCTLFont();
3791*b1cdbd2cSJim Jagielski 	rFont.SetSize( Size( 0, 220 ) );
3792*b1cdbd2cSJim Jagielski     rCJKFont.SetSize( Size( 0, 220 ) );
3793*b1cdbd2cSJim Jagielski 	rCTLFont.SetSize( Size( 0, 220 ) );
3794*b1cdbd2cSJim Jagielski }
3795*b1cdbd2cSJim Jagielski 
3796*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3797*b1cdbd2cSJim Jagielski 
SelectCharacter(ListBox * pBox)3798*b1cdbd2cSJim Jagielski void SvxCharTwoLinesPage::SelectCharacter( ListBox* pBox )
3799*b1cdbd2cSJim Jagielski {
3800*b1cdbd2cSJim Jagielski 	//CHINA001 SvxCharacterMap aDlg( this );
3801*b1cdbd2cSJim Jagielski     bool bStart = pBox == &m_aStartBracketLB;
3802*b1cdbd2cSJim Jagielski 	//SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
3803*b1cdbd2cSJim Jagielski 	//if(pFact)
3804*b1cdbd2cSJim Jagielski 	{
3805*b1cdbd2cSJim Jagielski 		//AbstractSvxCharacterMap* aDlg = pFact->CreateSvxCharacterMap( this,  RID_SVXDLG_CHARMAP );
3806*b1cdbd2cSJim Jagielski 		SvxCharacterMap* aDlg = new SvxCharacterMap( this );
3807*b1cdbd2cSJim Jagielski 		aDlg->DisableFontSelection();//CHINA001 aDlg.DisableFontSelection();
3808*b1cdbd2cSJim Jagielski 
3809*b1cdbd2cSJim Jagielski 		if ( aDlg->Execute() == RET_OK )//CHINA001 ( aDlg.Execute() == RET_OK )
3810*b1cdbd2cSJim Jagielski 		{
3811*b1cdbd2cSJim Jagielski 			sal_Unicode cChar = (sal_Unicode) aDlg->GetChar();//CHINA001 aDlg.GetChar();
3812*b1cdbd2cSJim Jagielski 			SetBracket( cChar, bStart );
3813*b1cdbd2cSJim Jagielski 		}
3814*b1cdbd2cSJim Jagielski         else
3815*b1cdbd2cSJim Jagielski         {
3816*b1cdbd2cSJim Jagielski             pBox->SelectEntryPos( bStart ? m_nStartBracketPosition : m_nEndBracketPosition );
3817*b1cdbd2cSJim Jagielski         }
3818*b1cdbd2cSJim Jagielski 		delete aDlg; //add CHINA001
3819*b1cdbd2cSJim Jagielski 	}
3820*b1cdbd2cSJim Jagielski }
3821*b1cdbd2cSJim Jagielski 
3822*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3823*b1cdbd2cSJim Jagielski 
SetBracket(sal_Unicode cBracket,sal_Bool bStart)3824*b1cdbd2cSJim Jagielski void SvxCharTwoLinesPage::SetBracket( sal_Unicode cBracket, sal_Bool bStart )
3825*b1cdbd2cSJim Jagielski {
3826*b1cdbd2cSJim Jagielski     sal_uInt16 nEntryPos = 0;
3827*b1cdbd2cSJim Jagielski 	ListBox* pBox = bStart ? &m_aStartBracketLB : &m_aEndBracketLB;
3828*b1cdbd2cSJim Jagielski 	if ( 0 == cBracket )
3829*b1cdbd2cSJim Jagielski 		pBox->SelectEntryPos(0);
3830*b1cdbd2cSJim Jagielski 	else
3831*b1cdbd2cSJim Jagielski 	{
3832*b1cdbd2cSJim Jagielski 		FASTBOOL bFound = sal_False;
3833*b1cdbd2cSJim Jagielski 		for ( sal_uInt16 i = 1; i < pBox->GetEntryCount(); ++i )
3834*b1cdbd2cSJim Jagielski 		{
3835*b1cdbd2cSJim Jagielski 			if ( (sal_uLong)pBox->GetEntryData(i) != CHRDLG_ENCLOSE_SPECIAL_CHAR )
3836*b1cdbd2cSJim Jagielski 			{
3837*b1cdbd2cSJim Jagielski 				const sal_Unicode cChar = pBox->GetEntry(i).GetChar(0);
3838*b1cdbd2cSJim Jagielski 				if ( cChar == cBracket )
3839*b1cdbd2cSJim Jagielski 				{
3840*b1cdbd2cSJim Jagielski 					pBox->SelectEntryPos(i);
3841*b1cdbd2cSJim Jagielski                     nEntryPos = i;
3842*b1cdbd2cSJim Jagielski 					bFound = sal_True;
3843*b1cdbd2cSJim Jagielski 					break;
3844*b1cdbd2cSJim Jagielski 				}
3845*b1cdbd2cSJim Jagielski 			}
3846*b1cdbd2cSJim Jagielski 		}
3847*b1cdbd2cSJim Jagielski 
3848*b1cdbd2cSJim Jagielski 		if ( !bFound )
3849*b1cdbd2cSJim Jagielski 		{
3850*b1cdbd2cSJim Jagielski             nEntryPos = pBox->InsertEntry( String( cBracket ) );
3851*b1cdbd2cSJim Jagielski 			pBox->SelectEntryPos( nEntryPos );
3852*b1cdbd2cSJim Jagielski 		}
3853*b1cdbd2cSJim Jagielski 	}
3854*b1cdbd2cSJim Jagielski     if( bStart )
3855*b1cdbd2cSJim Jagielski         m_nStartBracketPosition = nEntryPos;
3856*b1cdbd2cSJim Jagielski     else
3857*b1cdbd2cSJim Jagielski         m_nEndBracketPosition = nEntryPos;
3858*b1cdbd2cSJim Jagielski }
3859*b1cdbd2cSJim Jagielski 
3860*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3861*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxCharTwoLinesPage,TwoLinesHdl_Impl,CheckBox *,EMPTYARG)3862*b1cdbd2cSJim Jagielski IMPL_LINK( SvxCharTwoLinesPage, TwoLinesHdl_Impl, CheckBox*, EMPTYARG )
3863*b1cdbd2cSJim Jagielski {
3864*b1cdbd2cSJim Jagielski 	sal_Bool bChecked = m_aTwoLinesBtn.IsChecked();
3865*b1cdbd2cSJim Jagielski 	m_aStartBracketFT.Enable( bChecked );
3866*b1cdbd2cSJim Jagielski 	m_aStartBracketLB.Enable( bChecked );
3867*b1cdbd2cSJim Jagielski 	m_aEndBracketFT.Enable( bChecked );
3868*b1cdbd2cSJim Jagielski 	m_aEndBracketLB.Enable( bChecked );
3869*b1cdbd2cSJim Jagielski 
3870*b1cdbd2cSJim Jagielski 	UpdatePreview_Impl();
3871*b1cdbd2cSJim Jagielski 	return 0;
3872*b1cdbd2cSJim Jagielski }
3873*b1cdbd2cSJim Jagielski 
3874*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3875*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxCharTwoLinesPage,CharacterMapHdl_Impl,ListBox *,pBox)3876*b1cdbd2cSJim Jagielski IMPL_LINK( SvxCharTwoLinesPage, CharacterMapHdl_Impl, ListBox*, pBox )
3877*b1cdbd2cSJim Jagielski {
3878*b1cdbd2cSJim Jagielski 	sal_uInt16 nPos = pBox->GetSelectEntryPos();
3879*b1cdbd2cSJim Jagielski 	if ( CHRDLG_ENCLOSE_SPECIAL_CHAR == (sal_uLong)pBox->GetEntryData( nPos ) )
3880*b1cdbd2cSJim Jagielski 		SelectCharacter( pBox );
3881*b1cdbd2cSJim Jagielski     else
3882*b1cdbd2cSJim Jagielski     {
3883*b1cdbd2cSJim Jagielski         bool bStart = pBox == &m_aStartBracketLB;
3884*b1cdbd2cSJim Jagielski         if( bStart )
3885*b1cdbd2cSJim Jagielski             m_nStartBracketPosition = nPos;
3886*b1cdbd2cSJim Jagielski         else
3887*b1cdbd2cSJim Jagielski             m_nEndBracketPosition = nPos;
3888*b1cdbd2cSJim Jagielski     }
3889*b1cdbd2cSJim Jagielski 	UpdatePreview_Impl();
3890*b1cdbd2cSJim Jagielski 	return 0;
3891*b1cdbd2cSJim Jagielski }
3892*b1cdbd2cSJim Jagielski 
3893*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3894*b1cdbd2cSJim Jagielski 
ActivatePage(const SfxItemSet & rSet)3895*b1cdbd2cSJim Jagielski void SvxCharTwoLinesPage::ActivatePage( const SfxItemSet& rSet )
3896*b1cdbd2cSJim Jagielski {
3897*b1cdbd2cSJim Jagielski 	SvxCharBasePage::ActivatePage( rSet );
3898*b1cdbd2cSJim Jagielski }
3899*b1cdbd2cSJim Jagielski 
3900*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3901*b1cdbd2cSJim Jagielski 
DeactivatePage(SfxItemSet * _pSet)3902*b1cdbd2cSJim Jagielski int SvxCharTwoLinesPage::DeactivatePage( SfxItemSet* _pSet )
3903*b1cdbd2cSJim Jagielski {
3904*b1cdbd2cSJim Jagielski     if ( _pSet )
3905*b1cdbd2cSJim Jagielski         FillItemSet( *_pSet );
3906*b1cdbd2cSJim Jagielski 	return LEAVE_PAGE;
3907*b1cdbd2cSJim Jagielski }
3908*b1cdbd2cSJim Jagielski 
3909*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3910*b1cdbd2cSJim Jagielski 
Create(Window * pParent,const SfxItemSet & rSet)3911*b1cdbd2cSJim Jagielski SfxTabPage* SvxCharTwoLinesPage::Create( Window* pParent, const SfxItemSet& rSet )
3912*b1cdbd2cSJim Jagielski {
3913*b1cdbd2cSJim Jagielski 	return new SvxCharTwoLinesPage( pParent, rSet );
3914*b1cdbd2cSJim Jagielski }
3915*b1cdbd2cSJim Jagielski 
3916*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3917*b1cdbd2cSJim Jagielski 
GetRanges()3918*b1cdbd2cSJim Jagielski sal_uInt16* SvxCharTwoLinesPage::GetRanges()
3919*b1cdbd2cSJim Jagielski {
3920*b1cdbd2cSJim Jagielski 	return pTwoLinesRanges;
3921*b1cdbd2cSJim Jagielski }
3922*b1cdbd2cSJim Jagielski 
3923*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3924*b1cdbd2cSJim Jagielski 
Reset(const SfxItemSet & rSet)3925*b1cdbd2cSJim Jagielski void SvxCharTwoLinesPage::Reset( const SfxItemSet& rSet )
3926*b1cdbd2cSJim Jagielski {
3927*b1cdbd2cSJim Jagielski 	m_aTwoLinesBtn.Check( sal_False );
3928*b1cdbd2cSJim Jagielski 	sal_uInt16 nWhich = GetWhich( SID_ATTR_CHAR_TWO_LINES );
3929*b1cdbd2cSJim Jagielski 	SfxItemState eState = rSet.GetItemState( nWhich );
3930*b1cdbd2cSJim Jagielski 
3931*b1cdbd2cSJim Jagielski 	if ( eState >= SFX_ITEM_DONTCARE )
3932*b1cdbd2cSJim Jagielski 	{
3933*b1cdbd2cSJim Jagielski 		const SvxTwoLinesItem& rItem = (SvxTwoLinesItem&)rSet.Get( nWhich );
3934*b1cdbd2cSJim Jagielski 		m_aTwoLinesBtn.Check( rItem.GetValue() );
3935*b1cdbd2cSJim Jagielski 
3936*b1cdbd2cSJim Jagielski 		if ( rItem.GetValue() )
3937*b1cdbd2cSJim Jagielski 		{
3938*b1cdbd2cSJim Jagielski 			SetBracket( rItem.GetStartBracket(), sal_True );
3939*b1cdbd2cSJim Jagielski 			SetBracket( rItem.GetEndBracket(), sal_False );
3940*b1cdbd2cSJim Jagielski 		}
3941*b1cdbd2cSJim Jagielski 	}
3942*b1cdbd2cSJim Jagielski 	TwoLinesHdl_Impl( NULL );
3943*b1cdbd2cSJim Jagielski 
3944*b1cdbd2cSJim Jagielski 	SetPrevFontWidthScale( rSet );
3945*b1cdbd2cSJim Jagielski }
3946*b1cdbd2cSJim Jagielski 
3947*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3948*b1cdbd2cSJim Jagielski 
FillItemSet(SfxItemSet & rSet)3949*b1cdbd2cSJim Jagielski sal_Bool SvxCharTwoLinesPage::FillItemSet( SfxItemSet& rSet )
3950*b1cdbd2cSJim Jagielski {
3951*b1cdbd2cSJim Jagielski 	const SfxItemSet& rOldSet = GetItemSet();
3952*b1cdbd2cSJim Jagielski 	sal_Bool bModified = sal_False, bChanged = sal_True;
3953*b1cdbd2cSJim Jagielski 	sal_uInt16 nWhich = GetWhich( SID_ATTR_CHAR_TWO_LINES );
3954*b1cdbd2cSJim Jagielski 	const SfxPoolItem* pOld = GetOldItem( rSet, SID_ATTR_CHAR_TWO_LINES );
3955*b1cdbd2cSJim Jagielski 	sal_Bool bOn = m_aTwoLinesBtn.IsChecked();
3956*b1cdbd2cSJim Jagielski 	sal_Unicode cStart = ( bOn && m_aStartBracketLB.GetSelectEntryPos() > 0 )
3957*b1cdbd2cSJim Jagielski 		? m_aStartBracketLB.GetSelectEntry().GetChar(0) : 0;
3958*b1cdbd2cSJim Jagielski 	sal_Unicode cEnd = ( bOn && m_aEndBracketLB.GetSelectEntryPos() > 0 )
3959*b1cdbd2cSJim Jagielski 		? m_aEndBracketLB.GetSelectEntry().GetChar(0) : 0;
3960*b1cdbd2cSJim Jagielski 
3961*b1cdbd2cSJim Jagielski 	if ( pOld )
3962*b1cdbd2cSJim Jagielski 	{
3963*b1cdbd2cSJim Jagielski 		const SvxTwoLinesItem& rItem = *( (const SvxTwoLinesItem*)pOld );
3964*b1cdbd2cSJim Jagielski 		if ( rItem.GetValue() ==  bOn &&
3965*b1cdbd2cSJim Jagielski 			 ( !bOn || ( rItem.GetStartBracket() == cStart && rItem.GetEndBracket() == cEnd ) ) )
3966*b1cdbd2cSJim Jagielski 			bChanged = sal_False;
3967*b1cdbd2cSJim Jagielski 	}
3968*b1cdbd2cSJim Jagielski 
3969*b1cdbd2cSJim Jagielski 	if ( bChanged )
3970*b1cdbd2cSJim Jagielski 	{
3971*b1cdbd2cSJim Jagielski 		rSet.Put( SvxTwoLinesItem( bOn, cStart, cEnd, nWhich ) );
3972*b1cdbd2cSJim Jagielski 		bModified |= sal_True;
3973*b1cdbd2cSJim Jagielski 	}
3974*b1cdbd2cSJim Jagielski 	else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
3975*b1cdbd2cSJim Jagielski 		CLEARTITEM;
3976*b1cdbd2cSJim Jagielski 
3977*b1cdbd2cSJim Jagielski 	return bModified;
3978*b1cdbd2cSJim Jagielski }
3979*b1cdbd2cSJim Jagielski /* -----------------------------04.12.00 09:48--------------------------------
3980*b1cdbd2cSJim Jagielski 
3981*b1cdbd2cSJim Jagielski  ---------------------------------------------------------------------------*/
UpdatePreview_Impl()3982*b1cdbd2cSJim Jagielski void	SvxCharTwoLinesPage::UpdatePreview_Impl()
3983*b1cdbd2cSJim Jagielski {
3984*b1cdbd2cSJim Jagielski 	sal_Unicode cStart = m_aStartBracketLB.GetSelectEntryPos() > 0
3985*b1cdbd2cSJim Jagielski 		? m_aStartBracketLB.GetSelectEntry().GetChar(0) : 0;
3986*b1cdbd2cSJim Jagielski 	sal_Unicode cEnd = m_aEndBracketLB.GetSelectEntryPos() > 0
3987*b1cdbd2cSJim Jagielski 		? m_aEndBracketLB.GetSelectEntry().GetChar(0) : 0;
3988*b1cdbd2cSJim Jagielski 	m_aPreviewWin.SetBrackets(cStart, cEnd);
3989*b1cdbd2cSJim Jagielski 	m_aPreviewWin.SetTwoLines(m_aTwoLinesBtn.IsChecked());
3990*b1cdbd2cSJim Jagielski     m_aPreviewWin.Invalidate();
3991*b1cdbd2cSJim Jagielski }
3992*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
SetPreviewBackgroundToCharacter()3993*b1cdbd2cSJim Jagielski void SvxCharTwoLinesPage::SetPreviewBackgroundToCharacter()
3994*b1cdbd2cSJim Jagielski {
3995*b1cdbd2cSJim Jagielski     m_bPreviewBackgroundToCharacter = sal_True;
3996*b1cdbd2cSJim Jagielski }
3997*b1cdbd2cSJim Jagielski 
3998*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
PageCreated(SfxAllItemSet aSet)3999*b1cdbd2cSJim Jagielski void SvxCharTwoLinesPage::PageCreated (SfxAllItemSet aSet) //add CHINA001
4000*b1cdbd2cSJim Jagielski {
4001*b1cdbd2cSJim Jagielski 	SFX_ITEMSET_ARG (&aSet,pFlagItem,SfxUInt32Item,SID_FLAG_TYPE,sal_False);
4002*b1cdbd2cSJim Jagielski 	if (pFlagItem)
4003*b1cdbd2cSJim Jagielski 	{
4004*b1cdbd2cSJim Jagielski 		sal_uInt32 nFlags=pFlagItem->GetValue();
4005*b1cdbd2cSJim Jagielski 		if ( ( nFlags & SVX_PREVIEW_CHARACTER ) == SVX_PREVIEW_CHARACTER )
4006*b1cdbd2cSJim Jagielski 			SetPreviewBackgroundToCharacter();
4007*b1cdbd2cSJim Jagielski 	}
4008*b1cdbd2cSJim Jagielski }
4009