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_extensions.hxx"
26*b1cdbd2cSJim Jagielski #include <sfx2/sfxsids.hrc>
27*b1cdbd2cSJim Jagielski #include "fontdialog.hxx"
28*b1cdbd2cSJim Jagielski #ifndef EXTENSIONS_PROPRESID_HRC
29*b1cdbd2cSJim Jagielski #include "formresid.hrc"
30*b1cdbd2cSJim Jagielski #endif
31*b1cdbd2cSJim Jagielski #ifndef _EXTENSIONS_PROPCTRLR_MODULEPRC_HXX_
32*b1cdbd2cSJim Jagielski #include "modulepcr.hxx"
33*b1cdbd2cSJim Jagielski #endif
34*b1cdbd2cSJim Jagielski #ifndef _EXTENSIONS_PROPCTRLR_FORMLOCALID_HRC_
35*b1cdbd2cSJim Jagielski #include "formlocalid.hrc"
36*b1cdbd2cSJim Jagielski #endif
37*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
38*b1cdbd2cSJim Jagielski #ifndef _TOOLKIT_HELPER_VCLUNOHELPER_HXX_
39*b1cdbd2cSJim Jagielski #include <toolkit/unohlp.hxx>
40*b1cdbd2cSJim Jagielski #endif
41*b1cdbd2cSJim Jagielski #include <comphelper/types.hxx>
42*b1cdbd2cSJim Jagielski #include <comphelper/extract.hxx>
43*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/FontDescriptor.hpp>
44*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/FontWeight.hpp>
45*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/FontSlant.hpp>
46*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/FontUnderline.hpp>
47*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/FontStrikeout.hpp>
48*b1cdbd2cSJim Jagielski #include "formstrings.hxx"
49*b1cdbd2cSJim Jagielski #include "fontitemids.hxx"
50*b1cdbd2cSJim Jagielski #include <editeng/charreliefitem.hxx>
51*b1cdbd2cSJim Jagielski #ifndef _SVX_EMPHITEM_HXX
52*b1cdbd2cSJim Jagielski #include <editeng/emphitem.hxx>
53*b1cdbd2cSJim Jagielski #endif
54*b1cdbd2cSJim Jagielski #include <editeng/fontitem.hxx>
55*b1cdbd2cSJim Jagielski #include <editeng/fhgtitem.hxx>
56*b1cdbd2cSJim Jagielski #include <editeng/postitem.hxx>
57*b1cdbd2cSJim Jagielski #include <editeng/wghtitem.hxx>
58*b1cdbd2cSJim Jagielski #include <editeng/udlnitem.hxx>
59*b1cdbd2cSJim Jagielski #include <editeng/crsditem.hxx>
60*b1cdbd2cSJim Jagielski #include <editeng/colritem.hxx>
61*b1cdbd2cSJim Jagielski #include <editeng/flstitem.hxx>
62*b1cdbd2cSJim Jagielski #include <editeng/langitem.hxx>
63*b1cdbd2cSJim Jagielski #include <editeng/wrlmitem.hxx>
64*b1cdbd2cSJim Jagielski #include <editeng/cmapitem.hxx>
65*b1cdbd2cSJim Jagielski #include <editeng/cntritem.hxx>
66*b1cdbd2cSJim Jagielski #include <editeng/shdditem.hxx>
67*b1cdbd2cSJim Jagielski #include <editeng/flstitem.hxx>
68*b1cdbd2cSJim Jagielski #include <svtools/ctrltool.hxx>
69*b1cdbd2cSJim Jagielski #include <tools/diagnose_ex.h>
70*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertyState.hpp>
71*b1cdbd2cSJim Jagielski #ifndef _SVX_SVXIDS_HRC
72*b1cdbd2cSJim Jagielski #include <svx/svxids.hrc> //CHINA001
73*b1cdbd2cSJim Jagielski #endif
74*b1cdbd2cSJim Jagielski #include <svx/svxdlg.hxx> //CHINA001
75*b1cdbd2cSJim Jagielski #include <svx/dialogs.hrc> //CHINA001
76*b1cdbd2cSJim Jagielski #include <svx/flagsdef.hxx>
77*b1cdbd2cSJim Jagielski //............................................................................
78*b1cdbd2cSJim Jagielski namespace pcr
79*b1cdbd2cSJim Jagielski {
80*b1cdbd2cSJim Jagielski //............................................................................
81*b1cdbd2cSJim Jagielski 
82*b1cdbd2cSJim Jagielski 	using namespace ::com::sun::star::uno;
83*b1cdbd2cSJim Jagielski 	using namespace ::com::sun::star::beans;
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski 	//========================================================================
86*b1cdbd2cSJim Jagielski 	//= OFontPropertyExtractor
87*b1cdbd2cSJim Jagielski 	//========================================================================
88*b1cdbd2cSJim Jagielski 	class OFontPropertyExtractor
89*b1cdbd2cSJim Jagielski 	{
90*b1cdbd2cSJim Jagielski 	protected:
91*b1cdbd2cSJim Jagielski 		::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >
92*b1cdbd2cSJim Jagielski 					m_xPropValueAccess;
93*b1cdbd2cSJim Jagielski 		::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyState >
94*b1cdbd2cSJim Jagielski 					m_xPropStateAccess;
95*b1cdbd2cSJim Jagielski 
96*b1cdbd2cSJim Jagielski 	public:
97*b1cdbd2cSJim Jagielski 		OFontPropertyExtractor( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >&
98*b1cdbd2cSJim Jagielski 			_rxProps );
99*b1cdbd2cSJim Jagielski 
100*b1cdbd2cSJim Jagielski 	public:
101*b1cdbd2cSJim Jagielski 		sal_Bool		getCheckFontProperty(const ::rtl::OUString& _rPropName, ::com::sun::star::uno::Any& _rValue);
102*b1cdbd2cSJim Jagielski 		::rtl::OUString	getStringFontProperty(const ::rtl::OUString& _rPropName, const ::rtl::OUString& _rDefault);
103*b1cdbd2cSJim Jagielski 		sal_Int16		getInt16FontProperty(const ::rtl::OUString& _rPropName, const sal_Int16 _nDefault);
104*b1cdbd2cSJim Jagielski 		sal_Int32		getInt32FontProperty(const ::rtl::OUString& _rPropName, const sal_Int32 _nDefault);
105*b1cdbd2cSJim Jagielski 		float			getFloatFontProperty(const ::rtl::OUString& _rPropName, const float _nDefault);
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski 		void			invalidateItem(
108*b1cdbd2cSJim Jagielski 							const ::rtl::OUString& _rPropName,
109*b1cdbd2cSJim Jagielski 							sal_uInt16 _nItemId,
110*b1cdbd2cSJim Jagielski 							SfxItemSet& _rSet,
111*b1cdbd2cSJim Jagielski 							sal_Bool _bForceInvalidation = sal_False);
112*b1cdbd2cSJim Jagielski 	};
113*b1cdbd2cSJim Jagielski 
114*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
OFontPropertyExtractor(const Reference<XPropertySet> & _rxProps)115*b1cdbd2cSJim Jagielski 	OFontPropertyExtractor::OFontPropertyExtractor(const Reference< XPropertySet >& _rxProps)
116*b1cdbd2cSJim Jagielski 		:m_xPropValueAccess(_rxProps)
117*b1cdbd2cSJim Jagielski 		,m_xPropStateAccess(_rxProps, UNO_QUERY)
118*b1cdbd2cSJim Jagielski 	{
119*b1cdbd2cSJim Jagielski 		OSL_ENSURE(m_xPropValueAccess.is(), "OFontPropertyExtractor::OFontPropertyExtractor: invalid property set!");
120*b1cdbd2cSJim Jagielski 	}
121*b1cdbd2cSJim Jagielski 
122*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
getCheckFontProperty(const::rtl::OUString & _rPropName,Any & _rValue)123*b1cdbd2cSJim Jagielski 	sal_Bool OFontPropertyExtractor::getCheckFontProperty(const ::rtl::OUString& _rPropName, Any& _rValue)
124*b1cdbd2cSJim Jagielski 	{
125*b1cdbd2cSJim Jagielski 		_rValue = m_xPropValueAccess->getPropertyValue(_rPropName);
126*b1cdbd2cSJim Jagielski 		if (m_xPropStateAccess.is())
127*b1cdbd2cSJim Jagielski 			return PropertyState_DEFAULT_VALUE == m_xPropStateAccess->getPropertyState(_rPropName);
128*b1cdbd2cSJim Jagielski 
129*b1cdbd2cSJim Jagielski 		return sal_False;
130*b1cdbd2cSJim Jagielski 	}
131*b1cdbd2cSJim Jagielski 
132*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
getStringFontProperty(const::rtl::OUString & _rPropName,const::rtl::OUString & _rDefault)133*b1cdbd2cSJim Jagielski 	::rtl::OUString	OFontPropertyExtractor::getStringFontProperty(const ::rtl::OUString& _rPropName, const ::rtl::OUString& _rDefault)
134*b1cdbd2cSJim Jagielski 	{
135*b1cdbd2cSJim Jagielski 		Any aValue;
136*b1cdbd2cSJim Jagielski 		if (getCheckFontProperty(_rPropName, aValue))
137*b1cdbd2cSJim Jagielski 			return _rDefault;
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski 		return ::comphelper::getString(aValue);
140*b1cdbd2cSJim Jagielski 	}
141*b1cdbd2cSJim Jagielski 
142*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
getInt16FontProperty(const::rtl::OUString & _rPropName,const sal_Int16 _nDefault)143*b1cdbd2cSJim Jagielski 	sal_Int16 OFontPropertyExtractor::getInt16FontProperty(const ::rtl::OUString& _rPropName, const sal_Int16 _nDefault)
144*b1cdbd2cSJim Jagielski 	{
145*b1cdbd2cSJim Jagielski 		Any aValue;
146*b1cdbd2cSJim Jagielski 		if (getCheckFontProperty(_rPropName, aValue))
147*b1cdbd2cSJim Jagielski 			return _nDefault;
148*b1cdbd2cSJim Jagielski 
149*b1cdbd2cSJim Jagielski 		sal_Int32 nValue(_nDefault);
150*b1cdbd2cSJim Jagielski 		::cppu::enum2int(nValue, aValue);
151*b1cdbd2cSJim Jagielski 		return (sal_Int16)nValue;
152*b1cdbd2cSJim Jagielski 	}
153*b1cdbd2cSJim Jagielski 
154*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
getInt32FontProperty(const::rtl::OUString & _rPropName,const sal_Int32 _nDefault)155*b1cdbd2cSJim Jagielski 	sal_Int32 OFontPropertyExtractor::getInt32FontProperty(const ::rtl::OUString& _rPropName, const sal_Int32 _nDefault)
156*b1cdbd2cSJim Jagielski 	{
157*b1cdbd2cSJim Jagielski 		Any aValue;
158*b1cdbd2cSJim Jagielski 		if (getCheckFontProperty(_rPropName, aValue))
159*b1cdbd2cSJim Jagielski 			return _nDefault;
160*b1cdbd2cSJim Jagielski 
161*b1cdbd2cSJim Jagielski 		sal_Int32 nValue(_nDefault);
162*b1cdbd2cSJim Jagielski 		::cppu::enum2int(nValue, aValue);
163*b1cdbd2cSJim Jagielski 		return nValue;
164*b1cdbd2cSJim Jagielski 	}
165*b1cdbd2cSJim Jagielski 
166*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
getFloatFontProperty(const::rtl::OUString & _rPropName,const float _nDefault)167*b1cdbd2cSJim Jagielski 	float OFontPropertyExtractor::getFloatFontProperty(const ::rtl::OUString& _rPropName, const float _nDefault)
168*b1cdbd2cSJim Jagielski 	{
169*b1cdbd2cSJim Jagielski 		Any aValue;
170*b1cdbd2cSJim Jagielski 		if (getCheckFontProperty(_rPropName, aValue))
171*b1cdbd2cSJim Jagielski 			return _nDefault;
172*b1cdbd2cSJim Jagielski 
173*b1cdbd2cSJim Jagielski 		return ::comphelper::getFloat(aValue);
174*b1cdbd2cSJim Jagielski 	}
175*b1cdbd2cSJim Jagielski 
176*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
invalidateItem(const::rtl::OUString & _rPropName,sal_uInt16 _nItemId,SfxItemSet & _rSet,sal_Bool _bForceInvalidation)177*b1cdbd2cSJim Jagielski 	void OFontPropertyExtractor::invalidateItem(const ::rtl::OUString& _rPropName, sal_uInt16 _nItemId, SfxItemSet& _rSet, sal_Bool _bForceInvalidation)
178*b1cdbd2cSJim Jagielski 	{
179*b1cdbd2cSJim Jagielski 		if	(	_bForceInvalidation
180*b1cdbd2cSJim Jagielski 			||	(	m_xPropStateAccess.is()
181*b1cdbd2cSJim Jagielski 				&& (PropertyState_AMBIGUOUS_VALUE == m_xPropStateAccess->getPropertyState(_rPropName))
182*b1cdbd2cSJim Jagielski 				)
183*b1cdbd2cSJim Jagielski 			)
184*b1cdbd2cSJim Jagielski 			_rSet.InvalidateItem(_nItemId);
185*b1cdbd2cSJim Jagielski 	}
186*b1cdbd2cSJim Jagielski 
187*b1cdbd2cSJim Jagielski 	//========================================================================
188*b1cdbd2cSJim Jagielski 	//= ControlCharacterDialog
189*b1cdbd2cSJim Jagielski 	//========================================================================
190*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
ControlCharacterDialog(Window * _pParent,const SfxItemSet & _rCoreSet)191*b1cdbd2cSJim Jagielski 	ControlCharacterDialog::ControlCharacterDialog(Window* _pParent, const SfxItemSet& _rCoreSet)
192*b1cdbd2cSJim Jagielski 		:SfxTabDialog(_pParent, PcrRes(RID_TABDLG_FONTDIALOG), &_rCoreSet)
193*b1cdbd2cSJim Jagielski 	{
194*b1cdbd2cSJim Jagielski 		FreeResource();
195*b1cdbd2cSJim Jagielski 		SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
196*b1cdbd2cSJim Jagielski 		DBG_ASSERT(pFact, "CreateFactory fail!");
197*b1cdbd2cSJim Jagielski 		AddTabPage(TABPAGE_CHARACTERS, pFact->GetTabPageCreatorFunc(RID_SVXPAGE_CHAR_NAME), 0 );
198*b1cdbd2cSJim Jagielski 		AddTabPage(TABPAGE_CHARACTERS_EXT, pFact->GetTabPageCreatorFunc(RID_SVXPAGE_CHAR_EFFECTS), 0 );
199*b1cdbd2cSJim Jagielski 	}
200*b1cdbd2cSJim Jagielski 
201*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
~ControlCharacterDialog()202*b1cdbd2cSJim Jagielski 	ControlCharacterDialog::~ControlCharacterDialog()
203*b1cdbd2cSJim Jagielski 	{
204*b1cdbd2cSJim Jagielski 	}
205*b1cdbd2cSJim Jagielski 
206*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
translatePropertiesToItems(const Reference<XPropertySet> & _rxModel,SfxItemSet * _pSet)207*b1cdbd2cSJim Jagielski 	void ControlCharacterDialog::translatePropertiesToItems(const Reference< XPropertySet >& _rxModel, SfxItemSet* _pSet)
208*b1cdbd2cSJim Jagielski 	{
209*b1cdbd2cSJim Jagielski 		OSL_ENSURE(_pSet && _rxModel.is(), "ControlCharacterDialog::translatePropertiesToItems: invalid arguments!");
210*b1cdbd2cSJim Jagielski 		if (!_pSet || !_rxModel.is())
211*b1cdbd2cSJim Jagielski 			return;
212*b1cdbd2cSJim Jagielski 
213*b1cdbd2cSJim Jagielski 		try
214*b1cdbd2cSJim Jagielski 		{
215*b1cdbd2cSJim Jagielski 			OFontPropertyExtractor aPropExtractor(_rxModel);
216*b1cdbd2cSJim Jagielski 
217*b1cdbd2cSJim Jagielski 			// some items, which may be in default state, have to be filled with non-void information
218*b1cdbd2cSJim Jagielski 			Font aDefaultVCLFont = Application::GetDefaultDevice()->GetSettings().GetStyleSettings().GetAppFont();
219*b1cdbd2cSJim Jagielski 			::com::sun::star::awt::FontDescriptor aDefaultFont = VCLUnoHelper::CreateFontDescriptor(aDefaultVCLFont);
220*b1cdbd2cSJim Jagielski 
221*b1cdbd2cSJim Jagielski 			// get the current properties
222*b1cdbd2cSJim Jagielski 			::rtl::OUString aFontName		= aPropExtractor.getStringFontProperty(PROPERTY_FONT_NAME, aDefaultFont.Name);
223*b1cdbd2cSJim Jagielski 			::rtl::OUString aFontStyleName	= aPropExtractor.getStringFontProperty(PROPERTY_FONT_STYLENAME, aDefaultFont.StyleName);
224*b1cdbd2cSJim Jagielski 			sal_Int16	nFontFamily			= aPropExtractor.getInt16FontProperty(PROPERTY_FONT_FAMILY, aDefaultFont.Family);
225*b1cdbd2cSJim Jagielski 			sal_Int16	nFontCharset		= aPropExtractor.getInt16FontProperty(PROPERTY_FONT_CHARSET, aDefaultFont.CharSet);
226*b1cdbd2cSJim Jagielski 			float	nFontHeight				= aPropExtractor.getFloatFontProperty(PROPERTY_FONT_HEIGHT, (float)aDefaultFont.Height);
227*b1cdbd2cSJim Jagielski 			float	nFontWeight				= aPropExtractor.getFloatFontProperty(PROPERTY_FONT_WEIGHT, aDefaultFont.Weight);
228*b1cdbd2cSJim Jagielski 			sal_Int16 nFontSlant			= aPropExtractor.getInt16FontProperty(PROPERTY_FONT_SLANT, (sal_Int16)aDefaultFont.Slant);
229*b1cdbd2cSJim Jagielski 			sal_Int16 nFontUnderline		= aPropExtractor.getInt16FontProperty(PROPERTY_FONT_UNDERLINE, aDefaultFont.Underline);
230*b1cdbd2cSJim Jagielski 			sal_Int16 nFontStrikeout		= aPropExtractor.getInt16FontProperty(PROPERTY_FONT_STRIKEOUT, aDefaultFont.Strikeout);
231*b1cdbd2cSJim Jagielski 
232*b1cdbd2cSJim Jagielski 			sal_Int32 nTextLineColor		= aPropExtractor.getInt32FontProperty(PROPERTY_TEXTLINECOLOR, COL_AUTO);
233*b1cdbd2cSJim Jagielski 			sal_Int16 nFontRelief			= aPropExtractor.getInt16FontProperty(PROPERTY_FONT_RELIEF, (sal_Int16)aDefaultVCLFont.GetRelief());
234*b1cdbd2cSJim Jagielski 			sal_Int16 nFontEmphasisMark		= aPropExtractor.getInt16FontProperty(PROPERTY_FONT_EMPHASIS_MARK, aDefaultVCLFont.GetEmphasisMark());
235*b1cdbd2cSJim Jagielski 
236*b1cdbd2cSJim Jagielski 			Any aValue;
237*b1cdbd2cSJim Jagielski 			sal_Bool bWordLineMode			= aPropExtractor.getCheckFontProperty(PROPERTY_WORDLINEMODE, aValue) ? aDefaultFont.WordLineMode : ::cppu::any2bool(aValue);
238*b1cdbd2cSJim Jagielski 			sal_Int32 nColor32				= aPropExtractor.getInt32FontProperty(PROPERTY_TEXTCOLOR, 0);
239*b1cdbd2cSJim Jagielski 
240*b1cdbd2cSJim Jagielski 			// build SfxItems with the values
241*b1cdbd2cSJim Jagielski 			SvxFontItem aFontItem((FontFamily)nFontFamily, aFontName, aFontStyleName, PITCH_DONTKNOW, nFontCharset, CFID_FONT);
242*b1cdbd2cSJim Jagielski 
243*b1cdbd2cSJim Jagielski 			nFontHeight = (float)OutputDevice::LogicToLogic(Size(0, (sal_Int32)nFontHeight), MAP_POINT, MAP_TWIP).Height();
244*b1cdbd2cSJim Jagielski 			SvxFontHeightItem aSvxFontHeightItem((sal_uInt32)nFontHeight,100,CFID_HEIGHT);
245*b1cdbd2cSJim Jagielski 
246*b1cdbd2cSJim Jagielski 			FontWeight		eWeight=VCLUnoHelper::ConvertFontWeight(nFontWeight);
247*b1cdbd2cSJim Jagielski 			FontItalic		eItalic=(FontItalic)nFontSlant;
248*b1cdbd2cSJim Jagielski 			FontUnderline	eUnderline=(FontUnderline)nFontUnderline;
249*b1cdbd2cSJim Jagielski 			FontStrikeout	eStrikeout=(FontStrikeout)nFontStrikeout;
250*b1cdbd2cSJim Jagielski 
251*b1cdbd2cSJim Jagielski 			SvxWeightItem		aWeightItem(eWeight,CFID_WEIGHT);
252*b1cdbd2cSJim Jagielski 			SvxPostureItem		aPostureItem(eItalic,CFID_POSTURE);
253*b1cdbd2cSJim Jagielski 
254*b1cdbd2cSJim Jagielski 			SvxCrossedOutItem	aCrossedOutItem(eStrikeout,CFID_STRIKEOUT);
255*b1cdbd2cSJim Jagielski 			SvxWordLineModeItem aWordLineModeItem(bWordLineMode, CFID_WORDLINEMODE);
256*b1cdbd2cSJim Jagielski 
257*b1cdbd2cSJim Jagielski 			SvxUnderlineItem 	aUnderlineItem(eUnderline,CFID_UNDERLINE);
258*b1cdbd2cSJim Jagielski 			aUnderlineItem.SetColor(Color(nTextLineColor));
259*b1cdbd2cSJim Jagielski 
260*b1cdbd2cSJim Jagielski 			SvxColorItem aSvxColorItem(nColor32,CFID_CHARCOLOR);
261*b1cdbd2cSJim Jagielski 			SvxLanguageItem aLanguageItem(Application::GetSettings().GetUILanguage(), CFID_LANGUAGE);
262*b1cdbd2cSJim Jagielski 
263*b1cdbd2cSJim Jagielski 			// the 2 CJK props
264*b1cdbd2cSJim Jagielski             SvxCharReliefItem aFontReliefItem((FontRelief)nFontRelief, CFID_RELIEF);
265*b1cdbd2cSJim Jagielski             SvxEmphasisMarkItem aEmphasisMarkitem((FontEmphasisMark)nFontEmphasisMark, CFID_EMPHASIS);
266*b1cdbd2cSJim Jagielski 
267*b1cdbd2cSJim Jagielski 			_pSet->Put(aFontItem, CFID_FONT);
268*b1cdbd2cSJim Jagielski 			_pSet->Put(aSvxFontHeightItem,CFID_HEIGHT);
269*b1cdbd2cSJim Jagielski 			_pSet->Put(aWeightItem, CFID_WEIGHT);
270*b1cdbd2cSJim Jagielski 			_pSet->Put(aPostureItem, CFID_POSTURE);
271*b1cdbd2cSJim Jagielski 			_pSet->Put(aLanguageItem, CFID_LANGUAGE);
272*b1cdbd2cSJim Jagielski 			_pSet->Put(aUnderlineItem,CFID_UNDERLINE);
273*b1cdbd2cSJim Jagielski 			_pSet->Put(aCrossedOutItem,CFID_STRIKEOUT);
274*b1cdbd2cSJim Jagielski 			_pSet->Put(aWordLineModeItem, CFID_WORDLINEMODE);
275*b1cdbd2cSJim Jagielski 			_pSet->Put(aSvxColorItem, CFID_CHARCOLOR);
276*b1cdbd2cSJim Jagielski 			_pSet->Put(aFontReliefItem, CFID_RELIEF);
277*b1cdbd2cSJim Jagielski 			_pSet->Put(aEmphasisMarkitem, CFID_EMPHASIS);
278*b1cdbd2cSJim Jagielski 
279*b1cdbd2cSJim Jagielski 			aPropExtractor.invalidateItem(PROPERTY_FONT_NAME, CFID_FONT, *_pSet);
280*b1cdbd2cSJim Jagielski 			aPropExtractor.invalidateItem(PROPERTY_FONT_HEIGHT, CFID_HEIGHT, *_pSet);
281*b1cdbd2cSJim Jagielski 			aPropExtractor.invalidateItem(PROPERTY_FONT_WEIGHT, CFID_WEIGHT, *_pSet, ::com::sun::star::awt::FontWeight::DONTKNOW == nFontWeight);
282*b1cdbd2cSJim Jagielski 			aPropExtractor.invalidateItem(PROPERTY_FONT_SLANT, CFID_POSTURE, *_pSet, ::com::sun::star::awt::FontSlant_DONTKNOW == nFontSlant);
283*b1cdbd2cSJim Jagielski 			aPropExtractor.invalidateItem(PROPERTY_FONT_UNDERLINE, CFID_UNDERLINE, *_pSet, ::com::sun::star::awt::FontUnderline::DONTKNOW == nFontUnderline);
284*b1cdbd2cSJim Jagielski 			aPropExtractor.invalidateItem(PROPERTY_FONT_STRIKEOUT, CFID_STRIKEOUT, *_pSet, ::com::sun::star::awt::FontStrikeout::DONTKNOW == nFontStrikeout);
285*b1cdbd2cSJim Jagielski 			aPropExtractor.invalidateItem(PROPERTY_WORDLINEMODE, CFID_WORDLINEMODE, *_pSet);
286*b1cdbd2cSJim Jagielski 			aPropExtractor.invalidateItem(PROPERTY_TEXTCOLOR, CFID_CHARCOLOR, *_pSet);
287*b1cdbd2cSJim Jagielski 			aPropExtractor.invalidateItem(PROPERTY_FONT_RELIEF, CFID_RELIEF, *_pSet);
288*b1cdbd2cSJim Jagielski 			aPropExtractor.invalidateItem(PROPERTY_FONT_EMPHASIS_MARK, CFID_EMPHASIS, *_pSet);
289*b1cdbd2cSJim Jagielski 		}
290*b1cdbd2cSJim Jagielski 		catch (Exception&)
291*b1cdbd2cSJim Jagielski 		{
292*b1cdbd2cSJim Jagielski 			DBG_ERROR("ControlCharacterDialog::translatePropertiesToItems: caught an exception!");
293*b1cdbd2cSJim Jagielski 		}
294*b1cdbd2cSJim Jagielski 
295*b1cdbd2cSJim Jagielski 		_pSet->DisableItem(SID_ATTR_CHAR_CJK_FONT);
296*b1cdbd2cSJim Jagielski 		_pSet->DisableItem(SID_ATTR_CHAR_CJK_FONTHEIGHT);
297*b1cdbd2cSJim Jagielski 		_pSet->DisableItem(SID_ATTR_CHAR_CJK_LANGUAGE);
298*b1cdbd2cSJim Jagielski 		_pSet->DisableItem(SID_ATTR_CHAR_CJK_POSTURE);
299*b1cdbd2cSJim Jagielski 		_pSet->DisableItem(SID_ATTR_CHAR_CJK_WEIGHT);
300*b1cdbd2cSJim Jagielski 
301*b1cdbd2cSJim Jagielski 		_pSet->DisableItem(SID_ATTR_CHAR_CASEMAP);
302*b1cdbd2cSJim Jagielski 		_pSet->DisableItem(SID_ATTR_CHAR_CONTOUR);
303*b1cdbd2cSJim Jagielski 		_pSet->DisableItem(SID_ATTR_CHAR_SHADOWED);
304*b1cdbd2cSJim Jagielski 
305*b1cdbd2cSJim Jagielski 	}
306*b1cdbd2cSJim Jagielski 
307*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
308*b1cdbd2cSJim Jagielski     namespace
309*b1cdbd2cSJim Jagielski     {
lcl_pushBackPropertyValue(Sequence<NamedValue> & _out_properties,const::rtl::OUString & _name,const Any & _value)310*b1cdbd2cSJim Jagielski         void lcl_pushBackPropertyValue( Sequence< NamedValue >& _out_properties, const ::rtl::OUString& _name, const Any& _value )
311*b1cdbd2cSJim Jagielski         {
312*b1cdbd2cSJim Jagielski             _out_properties.realloc( _out_properties.getLength() + 1 );
313*b1cdbd2cSJim Jagielski             _out_properties[ _out_properties.getLength() - 1 ] = NamedValue( _name, _value );
314*b1cdbd2cSJim Jagielski         }
315*b1cdbd2cSJim Jagielski     }
316*b1cdbd2cSJim Jagielski 
317*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
translateItemsToProperties(const SfxItemSet & _rSet,Sequence<NamedValue> & _out_properties)318*b1cdbd2cSJim Jagielski     void ControlCharacterDialog::translateItemsToProperties( const SfxItemSet& _rSet, Sequence< NamedValue >& _out_properties )
319*b1cdbd2cSJim Jagielski     {
320*b1cdbd2cSJim Jagielski         _out_properties.realloc( 0 );
321*b1cdbd2cSJim Jagielski 
322*b1cdbd2cSJim Jagielski 		try
323*b1cdbd2cSJim Jagielski 		{
324*b1cdbd2cSJim Jagielski 			// --------------------------
325*b1cdbd2cSJim Jagielski 			// font name
326*b1cdbd2cSJim Jagielski 			SfxItemState eState = _rSet.GetItemState(CFID_FONT);
327*b1cdbd2cSJim Jagielski 
328*b1cdbd2cSJim Jagielski 			if ( eState == SFX_ITEM_SET )
329*b1cdbd2cSJim Jagielski 			{
330*b1cdbd2cSJim Jagielski 				const SvxFontItem& rFontItem =
331*b1cdbd2cSJim Jagielski 					static_cast<const SvxFontItem&>(_rSet.Get(CFID_FONT));
332*b1cdbd2cSJim Jagielski 
333*b1cdbd2cSJim Jagielski 				lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_NAME     , makeAny(::rtl::OUString(rFontItem.GetFamilyName())));
334*b1cdbd2cSJim Jagielski 				lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_STYLENAME, makeAny(::rtl::OUString(rFontItem.GetStyleName())));
335*b1cdbd2cSJim Jagielski 				lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_FAMILY   , makeAny((sal_Int16)rFontItem.GetFamily()));
336*b1cdbd2cSJim Jagielski 				lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_CHARSET  , makeAny((sal_Int16)rFontItem.GetCharSet()));
337*b1cdbd2cSJim Jagielski 			}
338*b1cdbd2cSJim Jagielski 
339*b1cdbd2cSJim Jagielski 			// --------------------------
340*b1cdbd2cSJim Jagielski 			// font height
341*b1cdbd2cSJim Jagielski 			eState = _rSet.GetItemState(CFID_HEIGHT);
342*b1cdbd2cSJim Jagielski 
343*b1cdbd2cSJim Jagielski 			if ( eState == SFX_ITEM_SET )
344*b1cdbd2cSJim Jagielski 			{
345*b1cdbd2cSJim Jagielski 				const SvxFontHeightItem& rSvxFontHeightItem =
346*b1cdbd2cSJim Jagielski 					static_cast<const SvxFontHeightItem&>(_rSet.Get(CFID_HEIGHT));
347*b1cdbd2cSJim Jagielski 
348*b1cdbd2cSJim Jagielski 				float nHeight = (float)OutputDevice::LogicToLogic(Size(0, rSvxFontHeightItem.GetHeight()), MAP_TWIP, MAP_POINT).Height();
349*b1cdbd2cSJim Jagielski 				lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_HEIGHT,makeAny(nHeight));
350*b1cdbd2cSJim Jagielski 
351*b1cdbd2cSJim Jagielski 			}
352*b1cdbd2cSJim Jagielski 
353*b1cdbd2cSJim Jagielski 			// --------------------------
354*b1cdbd2cSJim Jagielski 			// font weight
355*b1cdbd2cSJim Jagielski 			eState = _rSet.GetItemState(CFID_WEIGHT);
356*b1cdbd2cSJim Jagielski 
357*b1cdbd2cSJim Jagielski 			if ( eState == SFX_ITEM_SET )
358*b1cdbd2cSJim Jagielski 			{
359*b1cdbd2cSJim Jagielski 				const SvxWeightItem& rWeightItem =
360*b1cdbd2cSJim Jagielski 					static_cast<const SvxWeightItem&>(_rSet.Get(CFID_WEIGHT));
361*b1cdbd2cSJim Jagielski 
362*b1cdbd2cSJim Jagielski 				float nWeight = VCLUnoHelper::ConvertFontWeight( rWeightItem.GetWeight());
363*b1cdbd2cSJim Jagielski 				lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_WEIGHT,makeAny(nWeight));
364*b1cdbd2cSJim Jagielski 			}
365*b1cdbd2cSJim Jagielski 
366*b1cdbd2cSJim Jagielski 			// --------------------------
367*b1cdbd2cSJim Jagielski 			// font slant
368*b1cdbd2cSJim Jagielski 			eState = _rSet.GetItemState(CFID_POSTURE);
369*b1cdbd2cSJim Jagielski 
370*b1cdbd2cSJim Jagielski 			if ( eState == SFX_ITEM_SET )
371*b1cdbd2cSJim Jagielski 			{
372*b1cdbd2cSJim Jagielski 				const SvxPostureItem& rPostureItem =
373*b1cdbd2cSJim Jagielski 					static_cast<const SvxPostureItem&>(_rSet.Get(CFID_POSTURE));
374*b1cdbd2cSJim Jagielski 
375*b1cdbd2cSJim Jagielski 				::com::sun::star::awt::FontSlant eSlant = (::com::sun::star::awt::FontSlant)rPostureItem.GetPosture();
376*b1cdbd2cSJim Jagielski 				lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_SLANT, makeAny((sal_Int16)eSlant));
377*b1cdbd2cSJim Jagielski 			}
378*b1cdbd2cSJim Jagielski 
379*b1cdbd2cSJim Jagielski 			// --------------------------
380*b1cdbd2cSJim Jagielski 			// font underline
381*b1cdbd2cSJim Jagielski 			eState = _rSet.GetItemState(CFID_UNDERLINE);
382*b1cdbd2cSJim Jagielski 
383*b1cdbd2cSJim Jagielski 			if ( eState == SFX_ITEM_SET )
384*b1cdbd2cSJim Jagielski 			{
385*b1cdbd2cSJim Jagielski 				const SvxUnderlineItem& rUnderlineItem =
386*b1cdbd2cSJim Jagielski 					static_cast<const SvxUnderlineItem&>(_rSet.Get(CFID_UNDERLINE));
387*b1cdbd2cSJim Jagielski 
388*b1cdbd2cSJim Jagielski 				sal_Int16 nUnderline = (sal_Int16)rUnderlineItem.GetLineStyle();
389*b1cdbd2cSJim Jagielski 				lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_UNDERLINE,makeAny(nUnderline));
390*b1cdbd2cSJim Jagielski 
391*b1cdbd2cSJim Jagielski 				// the text line color is transported in this item, too
392*b1cdbd2cSJim Jagielski 				sal_Int32 nColor = rUnderlineItem.GetColor().GetColor();
393*b1cdbd2cSJim Jagielski 
394*b1cdbd2cSJim Jagielski 				Any aUnoColor;
395*b1cdbd2cSJim Jagielski 				if (COL_AUTO != (sal_uInt32)nColor)
396*b1cdbd2cSJim Jagielski 					aUnoColor <<= nColor;
397*b1cdbd2cSJim Jagielski 
398*b1cdbd2cSJim Jagielski 				lcl_pushBackPropertyValue( _out_properties, PROPERTY_TEXTLINECOLOR, aUnoColor );
399*b1cdbd2cSJim Jagielski 			}
400*b1cdbd2cSJim Jagielski 
401*b1cdbd2cSJim Jagielski 			// --------------------------
402*b1cdbd2cSJim Jagielski 			// font strikeout
403*b1cdbd2cSJim Jagielski 			eState = _rSet.GetItemState(CFID_STRIKEOUT);
404*b1cdbd2cSJim Jagielski 
405*b1cdbd2cSJim Jagielski 			if ( eState == SFX_ITEM_SET )
406*b1cdbd2cSJim Jagielski 			{
407*b1cdbd2cSJim Jagielski 				const SvxCrossedOutItem& rCrossedOutItem =
408*b1cdbd2cSJim Jagielski 					static_cast<const SvxCrossedOutItem&>(_rSet.Get(CFID_STRIKEOUT));
409*b1cdbd2cSJim Jagielski 
410*b1cdbd2cSJim Jagielski 				sal_Int16 nStrikeout = (sal_Int16)rCrossedOutItem.GetStrikeout();
411*b1cdbd2cSJim Jagielski 				lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_STRIKEOUT,makeAny(nStrikeout));
412*b1cdbd2cSJim Jagielski 			}
413*b1cdbd2cSJim Jagielski 
414*b1cdbd2cSJim Jagielski 
415*b1cdbd2cSJim Jagielski 			// --------------------------
416*b1cdbd2cSJim Jagielski 			// font wordline mode
417*b1cdbd2cSJim Jagielski 			eState = _rSet.GetItemState(CFID_WORDLINEMODE);
418*b1cdbd2cSJim Jagielski 
419*b1cdbd2cSJim Jagielski 			if ( eState == SFX_ITEM_SET )
420*b1cdbd2cSJim Jagielski 			{
421*b1cdbd2cSJim Jagielski 				const SvxWordLineModeItem& rWordLineModeItem =
422*b1cdbd2cSJim Jagielski 					static_cast<const SvxWordLineModeItem&>(_rSet.Get(CFID_WORDLINEMODE));
423*b1cdbd2cSJim Jagielski 
424*b1cdbd2cSJim Jagielski 				lcl_pushBackPropertyValue( _out_properties, PROPERTY_WORDLINEMODE, ::cppu::bool2any(rWordLineModeItem.GetValue()));
425*b1cdbd2cSJim Jagielski 			}
426*b1cdbd2cSJim Jagielski 
427*b1cdbd2cSJim Jagielski 
428*b1cdbd2cSJim Jagielski 			// --------------------------
429*b1cdbd2cSJim Jagielski 			// text color
430*b1cdbd2cSJim Jagielski 			eState = _rSet.GetItemState(CFID_CHARCOLOR);
431*b1cdbd2cSJim Jagielski 
432*b1cdbd2cSJim Jagielski 			if ( eState == SFX_ITEM_SET )
433*b1cdbd2cSJim Jagielski 			{
434*b1cdbd2cSJim Jagielski 				const SvxColorItem& rColorItem =
435*b1cdbd2cSJim Jagielski 					static_cast<const SvxColorItem&>(_rSet.Get(CFID_CHARCOLOR));
436*b1cdbd2cSJim Jagielski 
437*b1cdbd2cSJim Jagielski 				sal_Int32 nColor = rColorItem.GetValue().GetColor();
438*b1cdbd2cSJim Jagielski 
439*b1cdbd2cSJim Jagielski 				Any aUnoColor;
440*b1cdbd2cSJim Jagielski 				if (COL_AUTO != (sal_uInt32)nColor)
441*b1cdbd2cSJim Jagielski 					aUnoColor <<= nColor;
442*b1cdbd2cSJim Jagielski 
443*b1cdbd2cSJim Jagielski 				lcl_pushBackPropertyValue( _out_properties, PROPERTY_TEXTCOLOR, aUnoColor );
444*b1cdbd2cSJim Jagielski 			}
445*b1cdbd2cSJim Jagielski 
446*b1cdbd2cSJim Jagielski 			// --------------------------
447*b1cdbd2cSJim Jagielski 			// font relief
448*b1cdbd2cSJim Jagielski 			eState = _rSet.GetItemState(CFID_RELIEF);
449*b1cdbd2cSJim Jagielski 
450*b1cdbd2cSJim Jagielski 			if ( eState == SFX_ITEM_SET )
451*b1cdbd2cSJim Jagielski 			{
452*b1cdbd2cSJim Jagielski 				const SvxCharReliefItem& rReliefItem =
453*b1cdbd2cSJim Jagielski 					static_cast<const SvxCharReliefItem&>(_rSet.Get(CFID_RELIEF));
454*b1cdbd2cSJim Jagielski 
455*b1cdbd2cSJim Jagielski 				lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_RELIEF, makeAny((sal_Int16)rReliefItem.GetValue()) );
456*b1cdbd2cSJim Jagielski 			}
457*b1cdbd2cSJim Jagielski 
458*b1cdbd2cSJim Jagielski 			// --------------------------
459*b1cdbd2cSJim Jagielski 			// font emphasis mark
460*b1cdbd2cSJim Jagielski 			eState = _rSet.GetItemState(CFID_EMPHASIS);
461*b1cdbd2cSJim Jagielski 
462*b1cdbd2cSJim Jagielski 			if ( eState == SFX_ITEM_SET )
463*b1cdbd2cSJim Jagielski 			{
464*b1cdbd2cSJim Jagielski 				const SvxEmphasisMarkItem& rEmphMarkItem =
465*b1cdbd2cSJim Jagielski 					static_cast<const SvxEmphasisMarkItem&>(_rSet.Get(CFID_EMPHASIS));
466*b1cdbd2cSJim Jagielski 
467*b1cdbd2cSJim Jagielski 				lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_EMPHASIS_MARK, makeAny((sal_Int16)rEmphMarkItem.GetEmphasisMark()) );
468*b1cdbd2cSJim Jagielski 			}
469*b1cdbd2cSJim Jagielski 		}
470*b1cdbd2cSJim Jagielski 		catch (const Exception& )
471*b1cdbd2cSJim Jagielski 		{
472*b1cdbd2cSJim Jagielski         	DBG_UNHANDLED_EXCEPTION();
473*b1cdbd2cSJim Jagielski 		}
474*b1cdbd2cSJim Jagielski     }
475*b1cdbd2cSJim Jagielski 
476*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
translateItemsToProperties(const SfxItemSet & _rSet,const Reference<XPropertySet> & _rxModel)477*b1cdbd2cSJim Jagielski 	void ControlCharacterDialog::translateItemsToProperties( const SfxItemSet& _rSet, const Reference< XPropertySet >& _rxModel)
478*b1cdbd2cSJim Jagielski 	{
479*b1cdbd2cSJim Jagielski 		OSL_ENSURE( _rxModel.is(), "ControlCharacterDialog::translateItemsToProperties: invalid arguments!" );
480*b1cdbd2cSJim Jagielski 		if ( !_rxModel.is())
481*b1cdbd2cSJim Jagielski 			return;
482*b1cdbd2cSJim Jagielski 
483*b1cdbd2cSJim Jagielski         Sequence< NamedValue > aPropertyValues;
484*b1cdbd2cSJim Jagielski         translateItemsToProperties( _rSet, aPropertyValues );
485*b1cdbd2cSJim Jagielski         try
486*b1cdbd2cSJim Jagielski         {
487*b1cdbd2cSJim Jagielski             const NamedValue* propertyValue = aPropertyValues.getConstArray();
488*b1cdbd2cSJim Jagielski             const NamedValue* propertyValueEnd = propertyValue + aPropertyValues.getLength();
489*b1cdbd2cSJim Jagielski             for ( ; propertyValue != propertyValueEnd; ++propertyValue )
490*b1cdbd2cSJim Jagielski                 _rxModel->setPropertyValue( propertyValue->Name, propertyValue->Value );
491*b1cdbd2cSJim Jagielski         }
492*b1cdbd2cSJim Jagielski         catch( const Exception& )
493*b1cdbd2cSJim Jagielski         {
494*b1cdbd2cSJim Jagielski         	DBG_UNHANDLED_EXCEPTION();
495*b1cdbd2cSJim Jagielski         }
496*b1cdbd2cSJim Jagielski 	}
497*b1cdbd2cSJim Jagielski 
498*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
createItemSet(SfxItemSet * & _rpSet,SfxItemPool * & _rpPool,SfxPoolItem ** & _rppDefaults)499*b1cdbd2cSJim Jagielski 	SfxItemSet*	ControlCharacterDialog::createItemSet(SfxItemSet*& _rpSet, SfxItemPool*& _rpPool, SfxPoolItem**& _rppDefaults)
500*b1cdbd2cSJim Jagielski 	{
501*b1cdbd2cSJim Jagielski 		// just to be sure ....
502*b1cdbd2cSJim Jagielski 		_rpSet = NULL;
503*b1cdbd2cSJim Jagielski 		_rpPool = NULL;
504*b1cdbd2cSJim Jagielski 		_rppDefaults = NULL;
505*b1cdbd2cSJim Jagielski 
506*b1cdbd2cSJim Jagielski 		// create and initialize the defaults
507*b1cdbd2cSJim Jagielski 		_rppDefaults = new SfxPoolItem*[CFID_LAST_ITEM_ID - CFID_FIRST_ITEM_ID + 1];
508*b1cdbd2cSJim Jagielski 
509*b1cdbd2cSJim Jagielski 		Font aDefaultVCLFont = Application::GetDefaultDevice()->GetSettings().GetStyleSettings().GetAppFont();
510*b1cdbd2cSJim Jagielski 
511*b1cdbd2cSJim Jagielski 		SfxPoolItem** pCounter = _rppDefaults;	// want to modify this without affecting the out param _rppDefaults
512*b1cdbd2cSJim Jagielski 		*pCounter++ = new SvxFontItem(aDefaultVCLFont.GetFamily(), aDefaultVCLFont.GetName(), aDefaultVCLFont.GetStyleName(), aDefaultVCLFont.GetPitch(), aDefaultVCLFont.GetCharSet(), CFID_FONT);
513*b1cdbd2cSJim Jagielski 		*pCounter++ = new SvxFontHeightItem(aDefaultVCLFont.GetHeight(), 100, CFID_HEIGHT);
514*b1cdbd2cSJim Jagielski 		*pCounter++ = new SvxWeightItem(aDefaultVCLFont.GetWeight(), CFID_WEIGHT);
515*b1cdbd2cSJim Jagielski 		*pCounter++ = new SvxPostureItem(aDefaultVCLFont.GetItalic(), CFID_POSTURE);
516*b1cdbd2cSJim Jagielski 		*pCounter++ = new SvxLanguageItem(Application::GetSettings().GetUILanguage(), CFID_LANGUAGE);
517*b1cdbd2cSJim Jagielski 		*pCounter++ = new SvxUnderlineItem(aDefaultVCLFont.GetUnderline(), CFID_UNDERLINE);
518*b1cdbd2cSJim Jagielski 		*pCounter++ = new SvxCrossedOutItem(aDefaultVCLFont.GetStrikeout(), CFID_STRIKEOUT);
519*b1cdbd2cSJim Jagielski 		*pCounter++ = new SvxWordLineModeItem(aDefaultVCLFont.IsWordLineMode(), CFID_WORDLINEMODE);
520*b1cdbd2cSJim Jagielski 		*pCounter++ = new SvxColorItem(aDefaultVCLFont.GetColor(), CFID_CHARCOLOR);
521*b1cdbd2cSJim Jagielski 		*pCounter++ = new SvxCharReliefItem(aDefaultVCLFont.GetRelief(), CFID_RELIEF);
522*b1cdbd2cSJim Jagielski 		*pCounter++ = new SvxEmphasisMarkItem(aDefaultVCLFont.GetEmphasisMark(), CFID_EMPHASIS);
523*b1cdbd2cSJim Jagielski 
524*b1cdbd2cSJim Jagielski 		*pCounter++ = new SvxFontItem(aDefaultVCLFont.GetFamily(), aDefaultVCLFont.GetName(), aDefaultVCLFont.GetStyleName(), aDefaultVCLFont.GetPitch(), aDefaultVCLFont.GetCharSet(), CFID_CJK_FONT);
525*b1cdbd2cSJim Jagielski 		*pCounter++ = new SvxFontHeightItem(aDefaultVCLFont.GetHeight(), 100, CFID_CJK_HEIGHT);
526*b1cdbd2cSJim Jagielski 		*pCounter++ = new SvxWeightItem(aDefaultVCLFont.GetWeight(), CFID_CJK_WEIGHT);
527*b1cdbd2cSJim Jagielski 		*pCounter++ = new SvxPostureItem(aDefaultVCLFont.GetItalic(), CFID_CJK_POSTURE);
528*b1cdbd2cSJim Jagielski 		*pCounter++ = new SvxLanguageItem(Application::GetSettings().GetUILanguage(), CFID_CJK_LANGUAGE);
529*b1cdbd2cSJim Jagielski 
530*b1cdbd2cSJim Jagielski 		*pCounter++ = new SvxCaseMapItem(SVX_CASEMAP_NOT_MAPPED, CFID_CASEMAP);
531*b1cdbd2cSJim Jagielski 		*pCounter++ = new SvxContourItem(sal_False, CFID_CONTOUR);
532*b1cdbd2cSJim Jagielski 		*pCounter++ = new SvxShadowedItem(sal_False, CFID_SHADOWED);
533*b1cdbd2cSJim Jagielski 
534*b1cdbd2cSJim Jagielski 		*pCounter++ = new SvxFontListItem (new FontList(Application::GetDefaultDevice()), CFID_FONTLIST);
535*b1cdbd2cSJim Jagielski 
536*b1cdbd2cSJim Jagielski 		// create the pool
537*b1cdbd2cSJim Jagielski 		static SfxItemInfo __READONLY_DATA aItemInfos[CFID_LAST_ITEM_ID - CFID_FIRST_ITEM_ID + 1] =
538*b1cdbd2cSJim Jagielski 		{
539*b1cdbd2cSJim Jagielski 			{ SID_ATTR_CHAR_FONT,				0 },
540*b1cdbd2cSJim Jagielski 			{ SID_ATTR_CHAR_FONTHEIGHT,			0 },
541*b1cdbd2cSJim Jagielski 			{ SID_ATTR_CHAR_WEIGHT,				0 },
542*b1cdbd2cSJim Jagielski 			{ SID_ATTR_CHAR_POSTURE,			0 },
543*b1cdbd2cSJim Jagielski 			{ SID_ATTR_CHAR_LANGUAGE,			0 },
544*b1cdbd2cSJim Jagielski 			{ SID_ATTR_CHAR_UNDERLINE,			0 },
545*b1cdbd2cSJim Jagielski 			{ SID_ATTR_CHAR_STRIKEOUT,			0 },
546*b1cdbd2cSJim Jagielski 			{ SID_ATTR_CHAR_WORDLINEMODE,		0 },
547*b1cdbd2cSJim Jagielski 			{ SID_ATTR_CHAR_COLOR,				0 },
548*b1cdbd2cSJim Jagielski 			{ SID_ATTR_CHAR_RELIEF,				0 },
549*b1cdbd2cSJim Jagielski 			{ SID_ATTR_CHAR_EMPHASISMARK,		0 },
550*b1cdbd2cSJim Jagielski 			{ 0,								0 },
551*b1cdbd2cSJim Jagielski 			{ 0,								0 },
552*b1cdbd2cSJim Jagielski 			{ 0,								0 },
553*b1cdbd2cSJim Jagielski 			{ 0,								0 },
554*b1cdbd2cSJim Jagielski 			{ 0,								0 },
555*b1cdbd2cSJim Jagielski 			{ 0,								0 },
556*b1cdbd2cSJim Jagielski 			{ 0,								0 },
557*b1cdbd2cSJim Jagielski 			{ 0,								0 },
558*b1cdbd2cSJim Jagielski 			{ SID_ATTR_CHAR_FONTLIST,			0 }
559*b1cdbd2cSJim Jagielski 		};
560*b1cdbd2cSJim Jagielski 
561*b1cdbd2cSJim Jagielski 		_rpPool = new SfxItemPool(String::CreateFromAscii("PCRControlFontItemPool"), CFID_FIRST_ITEM_ID, CFID_LAST_ITEM_ID,
562*b1cdbd2cSJim Jagielski 			aItemInfos, _rppDefaults);
563*b1cdbd2cSJim Jagielski 		_rpPool->FreezeIdRanges();
564*b1cdbd2cSJim Jagielski 
565*b1cdbd2cSJim Jagielski 		// and, finally, the set
566*b1cdbd2cSJim Jagielski 		_rpSet = new SfxItemSet(*_rpPool, sal_True);
567*b1cdbd2cSJim Jagielski 
568*b1cdbd2cSJim Jagielski 		return _rpSet;
569*b1cdbd2cSJim Jagielski 	}
570*b1cdbd2cSJim Jagielski 
571*b1cdbd2cSJim Jagielski 	//-------------------------------------------------------------------------
destroyItemSet(SfxItemSet * & _rpSet,SfxItemPool * & _rpPool,SfxPoolItem ** & _rppDefaults)572*b1cdbd2cSJim Jagielski 	void ControlCharacterDialog::destroyItemSet(SfxItemSet*& _rpSet, SfxItemPool*& _rpPool, SfxPoolItem**& _rppDefaults)
573*b1cdbd2cSJim Jagielski 	{
574*b1cdbd2cSJim Jagielski 		// from the pool, get and remember the font list (needs to be deleted)
575*b1cdbd2cSJim Jagielski 		const SvxFontListItem& rFontListItem = static_cast<const SvxFontListItem&>(_rpPool->GetDefaultItem(CFID_FONTLIST));
576*b1cdbd2cSJim Jagielski 		const FontList* pFontList = rFontListItem.GetFontList();
577*b1cdbd2cSJim Jagielski 
578*b1cdbd2cSJim Jagielski 		// _first_ delete the set (refering the pool)
579*b1cdbd2cSJim Jagielski 		if (_rpSet)
580*b1cdbd2cSJim Jagielski 		{
581*b1cdbd2cSJim Jagielski 			delete _rpSet;
582*b1cdbd2cSJim Jagielski 			_rpSet = NULL;
583*b1cdbd2cSJim Jagielski 		}
584*b1cdbd2cSJim Jagielski 
585*b1cdbd2cSJim Jagielski 		// delete the pool
586*b1cdbd2cSJim Jagielski 		if (_rpPool)
587*b1cdbd2cSJim Jagielski 		{
588*b1cdbd2cSJim Jagielski 			_rpPool->ReleaseDefaults(sal_True);
589*b1cdbd2cSJim Jagielski 				// the "true" means delete the items, too
590*b1cdbd2cSJim Jagielski             SfxItemPool::Free(_rpPool);
591*b1cdbd2cSJim Jagielski 			_rpPool = NULL;
592*b1cdbd2cSJim Jagielski 		}
593*b1cdbd2cSJim Jagielski 
594*b1cdbd2cSJim Jagielski 		// reset the defaults ptr
595*b1cdbd2cSJim Jagielski 		_rppDefaults = NULL;
596*b1cdbd2cSJim Jagielski 			// no need to explicitly delete the defaults, this has been done by the ReleaseDefaults
597*b1cdbd2cSJim Jagielski 
598*b1cdbd2cSJim Jagielski 		delete pFontList;
599*b1cdbd2cSJim Jagielski 	}
600*b1cdbd2cSJim Jagielski 
601*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
PageCreated(sal_uInt16 _nId,SfxTabPage & _rPage)602*b1cdbd2cSJim Jagielski 	void ControlCharacterDialog::PageCreated( sal_uInt16 _nId, SfxTabPage& _rPage )
603*b1cdbd2cSJim Jagielski 	{
604*b1cdbd2cSJim Jagielski 		SfxAllItemSet aSet(*(GetInputSetImpl()->GetPool()));
605*b1cdbd2cSJim Jagielski 		switch ( _nId )
606*b1cdbd2cSJim Jagielski 		{
607*b1cdbd2cSJim Jagielski 			case TABPAGE_CHARACTERS:
608*b1cdbd2cSJim Jagielski //CHINA001				static_cast<SvxCharNamePage&>(_rPage).SetFontList(
609*b1cdbd2cSJim Jagielski //CHINA001				static_cast<const SvxFontListItem&>(GetInputSetImpl()->Get(CFID_FONTLIST))
610*b1cdbd2cSJim Jagielski //CHINA001				);
611*b1cdbd2cSJim Jagielski //CHINA001				static_cast<SvxCharNamePage&>(_rPage).DisableControls( DISABLE_HIDE_LANGUAGE );
612*b1cdbd2cSJim Jagielski 
613*b1cdbd2cSJim Jagielski //CHINA001 				SvxFontListItem aFontListItem( static_cast<const SvxFontListItem&>(GetInputSetImpl()->Get(CFID_FONTLIST) ));
614*b1cdbd2cSJim Jagielski //CHINA001 				aSet.Put ( SvxFontListItem( aFontListItem.GetFontList(), SID_ATTR_CHAR_FONTLIST));
615*b1cdbd2cSJim Jagielski 
616*b1cdbd2cSJim Jagielski //				aSet.Put (SfxUInt16Item(SID_CFID_FONTLIST,CFID_FONTLIST));
617*b1cdbd2cSJim Jagielski 				aSet.Put (SvxFontListItem(static_cast<const SvxFontListItem&>(GetInputSetImpl()->Get(CFID_FONTLIST))));
618*b1cdbd2cSJim Jagielski 				aSet.Put (SfxUInt16Item(SID_DISABLE_CTL,DISABLE_HIDE_LANGUAGE));
619*b1cdbd2cSJim Jagielski 				_rPage.PageCreated(aSet);
620*b1cdbd2cSJim Jagielski 				break;
621*b1cdbd2cSJim Jagielski 		}
622*b1cdbd2cSJim Jagielski 	}
623*b1cdbd2cSJim Jagielski 
624*b1cdbd2cSJim Jagielski //............................................................................
625*b1cdbd2cSJim Jagielski }	// namespace pcr
626*b1cdbd2cSJim Jagielski //............................................................................
627*b1cdbd2cSJim Jagielski 
628