1*cde9e8dcSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*cde9e8dcSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*cde9e8dcSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*cde9e8dcSAndrew Rist  * distributed with this work for additional information
6*cde9e8dcSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*cde9e8dcSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*cde9e8dcSAndrew Rist  * "License"); you may not use this file except in compliance
9*cde9e8dcSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*cde9e8dcSAndrew Rist  *
11*cde9e8dcSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*cde9e8dcSAndrew Rist  *
13*cde9e8dcSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*cde9e8dcSAndrew Rist  * software distributed under the License is distributed on an
15*cde9e8dcSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*cde9e8dcSAndrew Rist  * KIND, either express or implied.  See the License for the
17*cde9e8dcSAndrew Rist  * specific language governing permissions and limitations
18*cde9e8dcSAndrew Rist  * under the License.
19*cde9e8dcSAndrew Rist  *
20*cde9e8dcSAndrew Rist  *************************************************************/
21*cde9e8dcSAndrew Rist 
22*cde9e8dcSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_chart2.hxx"
26cdf0e10cSrcweir #include "CharacterPropertyItemConverter.hxx"
27cdf0e10cSrcweir #include "SchWhichPairs.hxx"
28cdf0e10cSrcweir #include "macros.hxx"
29cdf0e10cSrcweir #include "ItemPropertyMap.hxx"
30cdf0e10cSrcweir #include "RelativeSizeHelper.hxx"
31cdf0e10cSrcweir #include <editeng/memberids.hrc>
32cdf0e10cSrcweir #include <editeng/eeitem.hxx>
33cdf0e10cSrcweir #include <editeng/udlnitem.hxx>
34cdf0e10cSrcweir #include <editeng/fontitem.hxx>
35cdf0e10cSrcweir #include <editeng/crsditem.hxx>
36cdf0e10cSrcweir #include <editeng/postitem.hxx>
37cdf0e10cSrcweir #include <editeng/wghtitem.hxx>
38cdf0e10cSrcweir #include <editeng/fhgtitem.hxx>
39cdf0e10cSrcweir #include <svl/stritem.hxx>
40cdf0e10cSrcweir 
41cdf0e10cSrcweir #include <com/sun/star/beans/XPropertyState.hpp>
42cdf0e10cSrcweir #include <com/sun/star/chart2/XFormattedString.hpp>
43cdf0e10cSrcweir 
44cdf0e10cSrcweir using namespace ::com::sun::star;
45cdf0e10cSrcweir 
46cdf0e10cSrcweir namespace
47cdf0e10cSrcweir {
lcl_GetCharacterPropertyPropertyMap()48cdf0e10cSrcweir ::comphelper::ItemPropertyMapType & lcl_GetCharacterPropertyPropertyMap()
49cdf0e10cSrcweir {
50cdf0e10cSrcweir     static ::comphelper::ItemPropertyMapType aCharacterPropertyMap(
51cdf0e10cSrcweir         ::comphelper::MakeItemPropertyMap
52cdf0e10cSrcweir         IPM_MAP_ENTRY( EE_CHAR_COLOR, "CharColor", 0 )
53cdf0e10cSrcweir         IPM_MAP_ENTRY( EE_CHAR_LANGUAGE, "CharLocale", MID_LANG_LOCALE )
54cdf0e10cSrcweir         IPM_MAP_ENTRY( EE_CHAR_LANGUAGE_CJK, "CharLocaleAsian", MID_LANG_LOCALE )
55cdf0e10cSrcweir         IPM_MAP_ENTRY( EE_CHAR_LANGUAGE_CTL, "CharLocaleComplex", MID_LANG_LOCALE )
56cdf0e10cSrcweir //         IPM_MAP_ENTRY( EE_CHAR_FONTHEIGHT, "CharHeight", 0 )
57cdf0e10cSrcweir //         IPM_MAP_ENTRY( EE_CHAR_ITALIC, "CharPosture", 0 )
58cdf0e10cSrcweir //         IPM_MAP_ENTRY( EE_CHAR_WEIGHT, "CharWeight", 0 )
59cdf0e10cSrcweir 
60cdf0e10cSrcweir         IPM_MAP_ENTRY( EE_CHAR_STRIKEOUT, "CharStrikeout", MID_CROSS_OUT )
61cdf0e10cSrcweir         IPM_MAP_ENTRY( EE_CHAR_WLM, "CharWordMode", 0 )
62cdf0e10cSrcweir         IPM_MAP_ENTRY( EE_CHAR_SHADOW, "CharShadowed", 0 )
63cdf0e10cSrcweir         IPM_MAP_ENTRY( EE_CHAR_RELIEF, "CharRelief", 0 )
64cdf0e10cSrcweir         IPM_MAP_ENTRY( EE_CHAR_OUTLINE, "CharContoured", 0 )
65cdf0e10cSrcweir         IPM_MAP_ENTRY( EE_CHAR_EMPHASISMARK, "CharEmphasis", 0 )
66cdf0e10cSrcweir 
67cdf0e10cSrcweir         IPM_MAP_ENTRY( EE_PARA_WRITINGDIR, "WritingMode", 0 )
68cdf0e10cSrcweir 
69cdf0e10cSrcweir //         IPM_MAP_ENTRY( EE_CHAR_FONTHEIGHT_CJK, "CharHeightAsian", 0 )
70cdf0e10cSrcweir //         IPM_MAP_ENTRY( EE_CHAR_FONTHEIGHT_CTL, "CharHeightComplex", 0 )
71cdf0e10cSrcweir //         IPM_MAP_ENTRY( EE_CHAR_WEIGHT_CJK, "CharWeightAsian", 0 )
72cdf0e10cSrcweir //         IPM_MAP_ENTRY( EE_CHAR_WEIGHT_CTL, "CharWeightComplex", 0 )
73cdf0e10cSrcweir //         IPM_MAP_ENTRY( EE_CHAR_ITALIC_CJK, "CharPostureAsian", 0 )
74cdf0e10cSrcweir //         IPM_MAP_ENTRY( EE_CHAR_ITALIC_CTL, "CharPostureComplex", 0 )
75cdf0e10cSrcweir         IPM_MAP_ENTRY( EE_PARA_ASIANCJKSPACING, "ParaIsCharacterDistance", 0 )
76cdf0e10cSrcweir         );
77cdf0e10cSrcweir 
78cdf0e10cSrcweir     return aCharacterPropertyMap;
79cdf0e10cSrcweir }
80cdf0e10cSrcweir } // anonymous namespace
81cdf0e10cSrcweir 
82cdf0e10cSrcweir // ========================================
83cdf0e10cSrcweir 
84cdf0e10cSrcweir namespace chart
85cdf0e10cSrcweir {
86cdf0e10cSrcweir namespace wrapper
87cdf0e10cSrcweir {
88cdf0e10cSrcweir 
CharacterPropertyItemConverter(const uno::Reference<beans::XPropertySet> & rPropertySet,SfxItemPool & rItemPool)89cdf0e10cSrcweir CharacterPropertyItemConverter::CharacterPropertyItemConverter(
90cdf0e10cSrcweir     const uno::Reference< beans::XPropertySet > & rPropertySet,
91cdf0e10cSrcweir     SfxItemPool& rItemPool ) :
92cdf0e10cSrcweir         ItemConverter( rPropertySet, rItemPool )
93cdf0e10cSrcweir {}
94cdf0e10cSrcweir 
CharacterPropertyItemConverter(const uno::Reference<beans::XPropertySet> & rPropertySet,SfxItemPool & rItemPool,::std::auto_ptr<awt::Size> pRefSize,const::rtl::OUString & rRefSizePropertyName,const uno::Reference<beans::XPropertySet> & rRefSizePropSet)95cdf0e10cSrcweir CharacterPropertyItemConverter::CharacterPropertyItemConverter(
96cdf0e10cSrcweir     const uno::Reference< beans::XPropertySet > & rPropertySet,
97cdf0e10cSrcweir     SfxItemPool& rItemPool,
98cdf0e10cSrcweir     ::std::auto_ptr< awt::Size > pRefSize,
99cdf0e10cSrcweir     const ::rtl::OUString & rRefSizePropertyName,
100cdf0e10cSrcweir     const uno::Reference< beans::XPropertySet > & rRefSizePropSet ) :
101cdf0e10cSrcweir         ItemConverter( rPropertySet, rItemPool ),
102cdf0e10cSrcweir         m_pRefSize( pRefSize ),
103cdf0e10cSrcweir         m_aRefSizePropertyName( rRefSizePropertyName ),
104cdf0e10cSrcweir         m_xRefSizePropSet( rRefSizePropSet.is() ? rRefSizePropSet : rPropertySet )
105cdf0e10cSrcweir {}
106cdf0e10cSrcweir 
~CharacterPropertyItemConverter()107cdf0e10cSrcweir CharacterPropertyItemConverter::~CharacterPropertyItemConverter()
108cdf0e10cSrcweir {}
109cdf0e10cSrcweir 
GetWhichPairs() const110cdf0e10cSrcweir const sal_uInt16 * CharacterPropertyItemConverter::GetWhichPairs() const
111cdf0e10cSrcweir {
112cdf0e10cSrcweir     return nCharacterPropertyWhichPairs;
113cdf0e10cSrcweir }
114cdf0e10cSrcweir 
GetItemProperty(tWhichIdType nWhichId,tPropertyNameWithMemberId & rOutProperty) const115cdf0e10cSrcweir bool CharacterPropertyItemConverter::GetItemProperty( tWhichIdType nWhichId, tPropertyNameWithMemberId & rOutProperty ) const
116cdf0e10cSrcweir {
117cdf0e10cSrcweir     ::comphelper::ItemPropertyMapType & rMap( lcl_GetCharacterPropertyPropertyMap());
118cdf0e10cSrcweir     ::comphelper::ItemPropertyMapType::const_iterator aIt( rMap.find( nWhichId ));
119cdf0e10cSrcweir 
120cdf0e10cSrcweir     if( aIt == rMap.end())
121cdf0e10cSrcweir         return false;
122cdf0e10cSrcweir 
123cdf0e10cSrcweir     rOutProperty =(*aIt).second;
124cdf0e10cSrcweir     return true;
125cdf0e10cSrcweir }
126cdf0e10cSrcweir 
FillSpecialItem(sal_uInt16 nWhichId,SfxItemSet & rOutItemSet) const127cdf0e10cSrcweir void CharacterPropertyItemConverter::FillSpecialItem(
128cdf0e10cSrcweir     sal_uInt16 nWhichId, SfxItemSet & rOutItemSet ) const
129cdf0e10cSrcweir     throw( uno::Exception )
130cdf0e10cSrcweir {
131cdf0e10cSrcweir     switch( nWhichId )
132cdf0e10cSrcweir     {
133cdf0e10cSrcweir         case EE_CHAR_FONTINFO:
134cdf0e10cSrcweir         case EE_CHAR_FONTINFO_CJK:
135cdf0e10cSrcweir         case EE_CHAR_FONTINFO_CTL:
136cdf0e10cSrcweir         {
137cdf0e10cSrcweir             ::rtl::OUString aPostfix;
138cdf0e10cSrcweir             if( nWhichId == EE_CHAR_FONTINFO_CJK )
139cdf0e10cSrcweir                 aPostfix = C2U( "Asian" );
140cdf0e10cSrcweir             else if( nWhichId == EE_CHAR_FONTINFO_CTL )
141cdf0e10cSrcweir                 aPostfix = C2U( "Complex" );
142cdf0e10cSrcweir 
143cdf0e10cSrcweir             SvxFontItem aItem( nWhichId );
144cdf0e10cSrcweir 
145cdf0e10cSrcweir             aItem.PutValue( GetPropertySet()->getPropertyValue( C2U( "CharFontName" ) + aPostfix),
146cdf0e10cSrcweir                             MID_FONT_FAMILY_NAME );
147cdf0e10cSrcweir             aItem.PutValue( GetPropertySet()->getPropertyValue( C2U( "CharFontFamily" ) + aPostfix),
148cdf0e10cSrcweir                             MID_FONT_FAMILY );
149cdf0e10cSrcweir             aItem.PutValue( GetPropertySet()->getPropertyValue( C2U( "CharFontStyleName" ) + aPostfix),
150cdf0e10cSrcweir                             MID_FONT_STYLE_NAME );
151cdf0e10cSrcweir             aItem.PutValue( GetPropertySet()->getPropertyValue( C2U( "CharFontCharSet" ) + aPostfix),
152cdf0e10cSrcweir                             MID_FONT_CHAR_SET );
153cdf0e10cSrcweir             aItem.PutValue( GetPropertySet()->getPropertyValue( C2U( "CharFontPitch" ) + aPostfix),
154cdf0e10cSrcweir                             MID_FONT_PITCH );
155cdf0e10cSrcweir 
156cdf0e10cSrcweir             rOutItemSet.Put( aItem );
157cdf0e10cSrcweir         }
158cdf0e10cSrcweir         break;
159cdf0e10cSrcweir 
160cdf0e10cSrcweir         case EE_CHAR_UNDERLINE:
161cdf0e10cSrcweir         {
162cdf0e10cSrcweir             SvxUnderlineItem aItem(UNDERLINE_NONE, EE_CHAR_UNDERLINE);
163cdf0e10cSrcweir             bool bModified = false;
164cdf0e10cSrcweir 
165cdf0e10cSrcweir             uno::Any aValue( GetPropertySet()->getPropertyValue( C2U( "CharUnderline" )));
166cdf0e10cSrcweir             if( aValue.hasValue())
167cdf0e10cSrcweir             {
168cdf0e10cSrcweir                 aItem.PutValue( aValue, MID_TL_STYLE );
169cdf0e10cSrcweir                 bModified = true;
170cdf0e10cSrcweir             }
171cdf0e10cSrcweir 
172cdf0e10cSrcweir             aValue = GetPropertySet()->getPropertyValue( C2U( "CharUnderlineHasColor" ));
173cdf0e10cSrcweir             if( aValue.hasValue() &&
174cdf0e10cSrcweir                 ( *reinterpret_cast< const sal_Bool * >( aValue.getValue()) != sal_False ))
175cdf0e10cSrcweir             {
176cdf0e10cSrcweir                 aItem.PutValue( aValue, MID_TL_HASCOLOR );
177cdf0e10cSrcweir                 bModified = true;
178cdf0e10cSrcweir             }
179cdf0e10cSrcweir 
180cdf0e10cSrcweir             aValue = GetPropertySet()->getPropertyValue( C2U( "CharUnderlineColor" ));
181cdf0e10cSrcweir             if( aValue.hasValue())
182cdf0e10cSrcweir             {
183cdf0e10cSrcweir                 aItem.PutValue( aValue, MID_TL_COLOR );
184cdf0e10cSrcweir                 bModified = true;
185cdf0e10cSrcweir             }
186cdf0e10cSrcweir 
187cdf0e10cSrcweir             if( bModified )
188cdf0e10cSrcweir                 rOutItemSet.Put( aItem );
189cdf0e10cSrcweir         }
190cdf0e10cSrcweir         break;
191cdf0e10cSrcweir 
192cdf0e10cSrcweir         case EE_CHAR_OVERLINE:
193cdf0e10cSrcweir         {
194cdf0e10cSrcweir             SvxOverlineItem aItem( UNDERLINE_NONE, EE_CHAR_OVERLINE );
195cdf0e10cSrcweir             bool bModified = false;
196cdf0e10cSrcweir 
197cdf0e10cSrcweir             uno::Any aValue( GetPropertySet()->getPropertyValue( C2U( "CharOverline" ) ) );
198cdf0e10cSrcweir             if ( aValue.hasValue() )
199cdf0e10cSrcweir             {
200cdf0e10cSrcweir                 aItem.PutValue( aValue, MID_TL_STYLE );
201cdf0e10cSrcweir                 bModified = true;
202cdf0e10cSrcweir             }
203cdf0e10cSrcweir 
204cdf0e10cSrcweir             aValue = GetPropertySet()->getPropertyValue( C2U( "CharOverlineHasColor" ) );
205cdf0e10cSrcweir             if ( aValue.hasValue() &&
206cdf0e10cSrcweir                  ( *reinterpret_cast< const sal_Bool* >( aValue.getValue() ) != sal_False ) )
207cdf0e10cSrcweir             {
208cdf0e10cSrcweir                 aItem.PutValue( aValue, MID_TL_HASCOLOR );
209cdf0e10cSrcweir                 bModified = true;
210cdf0e10cSrcweir             }
211cdf0e10cSrcweir 
212cdf0e10cSrcweir             aValue = GetPropertySet()->getPropertyValue( C2U( "CharOverlineColor" ) );
213cdf0e10cSrcweir             if ( aValue.hasValue() )
214cdf0e10cSrcweir             {
215cdf0e10cSrcweir                 aItem.PutValue( aValue, MID_TL_COLOR );
216cdf0e10cSrcweir                 bModified = true;
217cdf0e10cSrcweir             }
218cdf0e10cSrcweir 
219cdf0e10cSrcweir             if ( bModified )
220cdf0e10cSrcweir             {
221cdf0e10cSrcweir                 rOutItemSet.Put( aItem );
222cdf0e10cSrcweir             }
223cdf0e10cSrcweir         }
224cdf0e10cSrcweir         break;
225cdf0e10cSrcweir 
226cdf0e10cSrcweir         case EE_CHAR_ITALIC:
227cdf0e10cSrcweir         case EE_CHAR_ITALIC_CJK:
228cdf0e10cSrcweir         case EE_CHAR_ITALIC_CTL:
229cdf0e10cSrcweir         {
230cdf0e10cSrcweir             ::rtl::OUString aPostfix;
231cdf0e10cSrcweir             if( nWhichId == EE_CHAR_ITALIC_CJK )
232cdf0e10cSrcweir                 aPostfix = C2U( "Asian" );
233cdf0e10cSrcweir             else if( nWhichId == EE_CHAR_ITALIC_CTL )
234cdf0e10cSrcweir                 aPostfix = C2U( "Complex" );
235cdf0e10cSrcweir 
236cdf0e10cSrcweir             SvxPostureItem aItem( ITALIC_NONE, nWhichId );
237cdf0e10cSrcweir 
238cdf0e10cSrcweir             uno::Any aValue( GetPropertySet()->getPropertyValue( C2U( "CharPosture" ) + aPostfix));
239cdf0e10cSrcweir             if( aValue.hasValue())
240cdf0e10cSrcweir             {
241cdf0e10cSrcweir                 aItem.PutValue( aValue, MID_POSTURE );
242cdf0e10cSrcweir                 rOutItemSet.Put( aItem );
243cdf0e10cSrcweir             }
244cdf0e10cSrcweir         }
245cdf0e10cSrcweir         break;
246cdf0e10cSrcweir 
247cdf0e10cSrcweir         case EE_CHAR_WEIGHT:
248cdf0e10cSrcweir         case EE_CHAR_WEIGHT_CJK:
249cdf0e10cSrcweir         case EE_CHAR_WEIGHT_CTL:
250cdf0e10cSrcweir         {
251cdf0e10cSrcweir             ::rtl::OUString aPostfix;
252cdf0e10cSrcweir             if( nWhichId == EE_CHAR_WEIGHT_CJK )
253cdf0e10cSrcweir                 aPostfix = C2U( "Asian" );
254cdf0e10cSrcweir             else if( nWhichId == EE_CHAR_WEIGHT_CTL )
255cdf0e10cSrcweir                 aPostfix = C2U( "Complex" );
256cdf0e10cSrcweir 
257cdf0e10cSrcweir             SvxWeightItem aItem( WEIGHT_NORMAL, nWhichId );
258cdf0e10cSrcweir 
259cdf0e10cSrcweir             uno::Any aValue( GetPropertySet()->getPropertyValue( C2U( "CharWeight" ) + aPostfix));
260cdf0e10cSrcweir             if( aValue.hasValue())
261cdf0e10cSrcweir             {
262cdf0e10cSrcweir                 aItem.PutValue( aValue, MID_WEIGHT );
263cdf0e10cSrcweir                 rOutItemSet.Put( aItem );
264cdf0e10cSrcweir             }
265cdf0e10cSrcweir         }
266cdf0e10cSrcweir         break;
267cdf0e10cSrcweir 
268cdf0e10cSrcweir         case EE_CHAR_FONTHEIGHT:
269cdf0e10cSrcweir         case EE_CHAR_FONTHEIGHT_CJK:
270cdf0e10cSrcweir         case EE_CHAR_FONTHEIGHT_CTL:
271cdf0e10cSrcweir         {
272cdf0e10cSrcweir             ::rtl::OUString aPostfix;
273cdf0e10cSrcweir             if( nWhichId == EE_CHAR_FONTHEIGHT_CJK )
274cdf0e10cSrcweir                 aPostfix = C2U( "Asian" );
275cdf0e10cSrcweir             else if( nWhichId == EE_CHAR_FONTHEIGHT_CTL )
276cdf0e10cSrcweir                 aPostfix = C2U( "Complex" );
277cdf0e10cSrcweir 
278cdf0e10cSrcweir             SvxFontHeightItem aItem( 240, 100, nWhichId );
279cdf0e10cSrcweir 
280cdf0e10cSrcweir             try
281cdf0e10cSrcweir             {
282cdf0e10cSrcweir                 uno::Any aValue( GetPropertySet()->getPropertyValue( C2U( "CharHeight" ) + aPostfix ));
283cdf0e10cSrcweir                 float fHeight;
284cdf0e10cSrcweir                 if( aValue >>= fHeight )
285cdf0e10cSrcweir                 {
286cdf0e10cSrcweir                     if( m_pRefSize.get())
287cdf0e10cSrcweir                     {
288cdf0e10cSrcweir                         awt::Size aOldRefSize;
289cdf0e10cSrcweir                         if( GetRefSizePropertySet()->getPropertyValue( m_aRefSizePropertyName ) >>= aOldRefSize )
290cdf0e10cSrcweir                         {
291cdf0e10cSrcweir                             // calculate font height in view
292cdf0e10cSrcweir                             fHeight = static_cast< float >(
293cdf0e10cSrcweir                                 RelativeSizeHelper::calculate( fHeight, aOldRefSize, *m_pRefSize ));
294cdf0e10cSrcweir                             aValue <<= fHeight;
295cdf0e10cSrcweir                         }
296cdf0e10cSrcweir                     }
297cdf0e10cSrcweir 
298cdf0e10cSrcweir                     aItem.PutValue( aValue, MID_FONTHEIGHT );
299cdf0e10cSrcweir                     rOutItemSet.Put( aItem );
300cdf0e10cSrcweir                 }
301cdf0e10cSrcweir             }
302cdf0e10cSrcweir             catch( uno::Exception & ex )
303cdf0e10cSrcweir             {
304cdf0e10cSrcweir                 ASSERT_EXCEPTION( ex );
305cdf0e10cSrcweir             }
306cdf0e10cSrcweir         }
307cdf0e10cSrcweir         break;
308cdf0e10cSrcweir 
309cdf0e10cSrcweir         case SID_CHAR_DLG_PREVIEW_STRING:
310cdf0e10cSrcweir         {
311cdf0e10cSrcweir             uno::Reference< chart2::XFormattedString > xFormattedString( GetPropertySet(), uno::UNO_QUERY );
312cdf0e10cSrcweir             if( xFormattedString.is() )
313cdf0e10cSrcweir             {
314cdf0e10cSrcweir                 ::rtl::OUString aString = xFormattedString->getString();
315cdf0e10cSrcweir                 rOutItemSet.Put( SfxStringItem( nWhichId, aString ) );
316cdf0e10cSrcweir             }
317cdf0e10cSrcweir             else
318cdf0e10cSrcweir                 rOutItemSet.Put( SfxStringItem( nWhichId, C2U( "" ) ) );
319cdf0e10cSrcweir         }
320cdf0e10cSrcweir         break;
321cdf0e10cSrcweir 
322cdf0e10cSrcweir         case EE_PARA_FORBIDDENRULES:
323cdf0e10cSrcweir         case EE_PARA_HANGINGPUNCTUATION:
324cdf0e10cSrcweir             rOutItemSet.DisableItem( nWhichId );
325cdf0e10cSrcweir             break;
326cdf0e10cSrcweir     }
327cdf0e10cSrcweir }
328cdf0e10cSrcweir 
ApplySpecialItem(sal_uInt16 nWhichId,const SfxItemSet & rItemSet)329cdf0e10cSrcweir bool CharacterPropertyItemConverter::ApplySpecialItem(
330cdf0e10cSrcweir     sal_uInt16 nWhichId, const SfxItemSet & rItemSet )
331cdf0e10cSrcweir     throw( uno::Exception )
332cdf0e10cSrcweir {
333cdf0e10cSrcweir     bool bChanged = false;
334cdf0e10cSrcweir     uno::Any aValue;
335cdf0e10cSrcweir 
336cdf0e10cSrcweir     switch( nWhichId )
337cdf0e10cSrcweir     {
338cdf0e10cSrcweir         case EE_CHAR_FONTINFO:
339cdf0e10cSrcweir         case EE_CHAR_FONTINFO_CJK:
340cdf0e10cSrcweir         case EE_CHAR_FONTINFO_CTL:
341cdf0e10cSrcweir         {
342cdf0e10cSrcweir             ::rtl::OUString aPostfix;
343cdf0e10cSrcweir             if( nWhichId == EE_CHAR_FONTINFO_CJK )
344cdf0e10cSrcweir                 aPostfix = C2U( "Asian" );
345cdf0e10cSrcweir             else if( nWhichId == EE_CHAR_FONTINFO_CTL )
346cdf0e10cSrcweir                 aPostfix = C2U( "Complex" );
347cdf0e10cSrcweir 
348cdf0e10cSrcweir             const SvxFontItem & rItem =
349cdf0e10cSrcweir                 static_cast< const SvxFontItem & >(
350cdf0e10cSrcweir                     rItemSet.Get( nWhichId ));
351cdf0e10cSrcweir 
352cdf0e10cSrcweir             if( rItem.QueryValue( aValue, MID_FONT_FAMILY_NAME ))
353cdf0e10cSrcweir             {
354cdf0e10cSrcweir                 if( aValue != GetPropertySet()->getPropertyValue( C2U( "CharFontName" ) + aPostfix ))
355cdf0e10cSrcweir                 {
356cdf0e10cSrcweir                     GetPropertySet()->setPropertyValue( C2U( "CharFontName" ) + aPostfix, aValue );
357cdf0e10cSrcweir                     bChanged = true;
358cdf0e10cSrcweir                 }
359cdf0e10cSrcweir             }
360cdf0e10cSrcweir             if( rItem.QueryValue( aValue, MID_FONT_FAMILY ))
361cdf0e10cSrcweir             {
362cdf0e10cSrcweir                 if( aValue != GetPropertySet()->getPropertyValue( C2U( "CharFontFamily" ) + aPostfix ))
363cdf0e10cSrcweir                 {
364cdf0e10cSrcweir                     GetPropertySet()->setPropertyValue( C2U( "CharFontFamily" ) + aPostfix, aValue );
365cdf0e10cSrcweir                     bChanged = true;
366cdf0e10cSrcweir                 }
367cdf0e10cSrcweir             }
368cdf0e10cSrcweir             if( rItem.QueryValue( aValue, MID_FONT_STYLE_NAME ))
369cdf0e10cSrcweir             {
370cdf0e10cSrcweir                 if( aValue != GetPropertySet()->getPropertyValue( C2U( "CharFontStyleName" ) + aPostfix ))
371cdf0e10cSrcweir                 {
372cdf0e10cSrcweir                     GetPropertySet()->setPropertyValue( C2U( "CharFontStyleName" ) + aPostfix, aValue );
373cdf0e10cSrcweir                     bChanged = true;
374cdf0e10cSrcweir                 }
375cdf0e10cSrcweir             }
376cdf0e10cSrcweir             if( rItem.QueryValue( aValue, MID_FONT_CHAR_SET ))
377cdf0e10cSrcweir             {
378cdf0e10cSrcweir                 if( aValue != GetPropertySet()->getPropertyValue( C2U( "CharFontCharSet" ) + aPostfix ))
379cdf0e10cSrcweir                 {
380cdf0e10cSrcweir                     GetPropertySet()->setPropertyValue( C2U( "CharFontCharSet" ) + aPostfix, aValue );
381cdf0e10cSrcweir                     bChanged = true;
382cdf0e10cSrcweir                 }
383cdf0e10cSrcweir             }
384cdf0e10cSrcweir             if( rItem.QueryValue( aValue, MID_FONT_PITCH ))
385cdf0e10cSrcweir             {
386cdf0e10cSrcweir                 if( aValue != GetPropertySet()->getPropertyValue( C2U( "CharFontPitch" ) + aPostfix ))
387cdf0e10cSrcweir                 {
388cdf0e10cSrcweir                     GetPropertySet()->setPropertyValue( C2U( "CharFontPitch" ) + aPostfix, aValue );
389cdf0e10cSrcweir                     bChanged = true;
390cdf0e10cSrcweir                 }
391cdf0e10cSrcweir             }
392cdf0e10cSrcweir         }
393cdf0e10cSrcweir         break;
394cdf0e10cSrcweir 
395cdf0e10cSrcweir         case EE_CHAR_UNDERLINE:
396cdf0e10cSrcweir         {
397cdf0e10cSrcweir             const SvxUnderlineItem & rItem =
398cdf0e10cSrcweir                static_cast< const SvxUnderlineItem & >(
399cdf0e10cSrcweir                     rItemSet.Get( nWhichId ));
400cdf0e10cSrcweir 
401cdf0e10cSrcweir             if( rItem.QueryValue( aValue, MID_TL_STYLE ))
402cdf0e10cSrcweir             {
403cdf0e10cSrcweir                 if( aValue != GetPropertySet()->getPropertyValue( C2U( "CharUnderline" ) ))
404cdf0e10cSrcweir                 {
405cdf0e10cSrcweir                     GetPropertySet()->setPropertyValue( C2U( "CharUnderline" ), aValue );
406cdf0e10cSrcweir                     bChanged = true;
407cdf0e10cSrcweir                 }
408cdf0e10cSrcweir             }
409cdf0e10cSrcweir 
410cdf0e10cSrcweir             if( rItem.QueryValue( aValue, MID_TL_COLOR ))
411cdf0e10cSrcweir             {
412cdf0e10cSrcweir                 if( aValue != GetPropertySet()->getPropertyValue( C2U( "CharUnderlineColor" ) ))
413cdf0e10cSrcweir                 {
414cdf0e10cSrcweir                     GetPropertySet()->setPropertyValue( C2U( "CharUnderlineColor" ), aValue );
415cdf0e10cSrcweir                     bChanged = true;
416cdf0e10cSrcweir                 }
417cdf0e10cSrcweir             }
418cdf0e10cSrcweir 
419cdf0e10cSrcweir             if( rItem.QueryValue( aValue, MID_TL_HASCOLOR ))
420cdf0e10cSrcweir             {
421cdf0e10cSrcweir                 if( aValue != GetPropertySet()->getPropertyValue( C2U( "CharUnderlineHasColor" ) ))
422cdf0e10cSrcweir                 {
423cdf0e10cSrcweir                     GetPropertySet()->setPropertyValue( C2U( "CharUnderlineHasColor" ), aValue );
424cdf0e10cSrcweir                     bChanged = true;
425cdf0e10cSrcweir                 }
426cdf0e10cSrcweir             }
427cdf0e10cSrcweir         }
428cdf0e10cSrcweir         break;
429cdf0e10cSrcweir 
430cdf0e10cSrcweir         case EE_CHAR_OVERLINE:
431cdf0e10cSrcweir         {
432cdf0e10cSrcweir             const SvxOverlineItem& rItem = static_cast< const SvxOverlineItem & >( rItemSet.Get( nWhichId ) );
433cdf0e10cSrcweir 
434cdf0e10cSrcweir             if ( rItem.QueryValue( aValue, MID_TL_STYLE ) )
435cdf0e10cSrcweir             {
436cdf0e10cSrcweir                 if ( aValue != GetPropertySet()->getPropertyValue( C2U( "CharOverline" ) ) )
437cdf0e10cSrcweir                 {
438cdf0e10cSrcweir                     GetPropertySet()->setPropertyValue( C2U( "CharOverline" ), aValue );
439cdf0e10cSrcweir                     bChanged = true;
440cdf0e10cSrcweir                 }
441cdf0e10cSrcweir             }
442cdf0e10cSrcweir 
443cdf0e10cSrcweir             if ( rItem.QueryValue( aValue, MID_TL_COLOR ) )
444cdf0e10cSrcweir             {
445cdf0e10cSrcweir                 if ( aValue != GetPropertySet()->getPropertyValue( C2U( "CharOverlineColor" ) ) )
446cdf0e10cSrcweir                 {
447cdf0e10cSrcweir                     GetPropertySet()->setPropertyValue( C2U( "CharOverlineColor" ), aValue );
448cdf0e10cSrcweir                     bChanged = true;
449cdf0e10cSrcweir                 }
450cdf0e10cSrcweir             }
451cdf0e10cSrcweir 
452cdf0e10cSrcweir             if ( rItem.QueryValue( aValue, MID_TL_HASCOLOR ) )
453cdf0e10cSrcweir             {
454cdf0e10cSrcweir                 if ( aValue != GetPropertySet()->getPropertyValue( C2U( "CharOverlineHasColor" ) ) )
455cdf0e10cSrcweir                 {
456cdf0e10cSrcweir                     GetPropertySet()->setPropertyValue( C2U( "CharOverlineHasColor" ), aValue );
457cdf0e10cSrcweir                     bChanged = true;
458cdf0e10cSrcweir                 }
459cdf0e10cSrcweir             }
460cdf0e10cSrcweir         }
461cdf0e10cSrcweir         break;
462cdf0e10cSrcweir 
463cdf0e10cSrcweir         case EE_CHAR_ITALIC:
464cdf0e10cSrcweir         case EE_CHAR_ITALIC_CJK:
465cdf0e10cSrcweir         case EE_CHAR_ITALIC_CTL:
466cdf0e10cSrcweir         {
467cdf0e10cSrcweir             ::rtl::OUString aPostfix;
468cdf0e10cSrcweir             if( nWhichId == EE_CHAR_ITALIC_CJK )
469cdf0e10cSrcweir                 aPostfix = C2U( "Asian" );
470cdf0e10cSrcweir             else if( nWhichId == EE_CHAR_ITALIC_CTL )
471cdf0e10cSrcweir                 aPostfix = C2U( "Complex" );
472cdf0e10cSrcweir 
473cdf0e10cSrcweir             const SvxPostureItem & rItem =
474cdf0e10cSrcweir                 static_cast< const SvxPostureItem & >(
475cdf0e10cSrcweir                     rItemSet.Get( nWhichId ));
476cdf0e10cSrcweir 
477cdf0e10cSrcweir             if( rItem.QueryValue( aValue, MID_POSTURE ))
478cdf0e10cSrcweir             {
479cdf0e10cSrcweir                 if( aValue != GetPropertySet()->getPropertyValue( C2U( "CharPosture" ) + aPostfix))
480cdf0e10cSrcweir                 {
481cdf0e10cSrcweir                     GetPropertySet()->setPropertyValue( C2U( "CharPosture" ) + aPostfix, aValue );
482cdf0e10cSrcweir                     bChanged = true;
483cdf0e10cSrcweir                 }
484cdf0e10cSrcweir             }
485cdf0e10cSrcweir         }
486cdf0e10cSrcweir         break;
487cdf0e10cSrcweir 
488cdf0e10cSrcweir         case EE_CHAR_WEIGHT:
489cdf0e10cSrcweir         case EE_CHAR_WEIGHT_CJK:
490cdf0e10cSrcweir         case EE_CHAR_WEIGHT_CTL:
491cdf0e10cSrcweir         {
492cdf0e10cSrcweir             ::rtl::OUString aPostfix;
493cdf0e10cSrcweir             if( nWhichId == EE_CHAR_WEIGHT_CJK )
494cdf0e10cSrcweir                 aPostfix = C2U( "Asian" );
495cdf0e10cSrcweir             else if( nWhichId == EE_CHAR_WEIGHT_CTL )
496cdf0e10cSrcweir                 aPostfix = C2U( "Complex" );
497cdf0e10cSrcweir 
498cdf0e10cSrcweir             const SvxWeightItem & rItem =
499cdf0e10cSrcweir                 static_cast< const SvxWeightItem & >(
500cdf0e10cSrcweir                     rItemSet.Get( nWhichId ));
501cdf0e10cSrcweir 
502cdf0e10cSrcweir             if( rItem.QueryValue( aValue, MID_WEIGHT ))
503cdf0e10cSrcweir             {
504cdf0e10cSrcweir                 if( aValue != GetPropertySet()->getPropertyValue( C2U( "CharWeight" ) + aPostfix))
505cdf0e10cSrcweir                 {
506cdf0e10cSrcweir                     GetPropertySet()->setPropertyValue( C2U( "CharWeight" ) + aPostfix, aValue );
507cdf0e10cSrcweir                     bChanged = true;
508cdf0e10cSrcweir                 }
509cdf0e10cSrcweir             }
510cdf0e10cSrcweir         }
511cdf0e10cSrcweir         break;
512cdf0e10cSrcweir 
513cdf0e10cSrcweir         case EE_CHAR_FONTHEIGHT:
514cdf0e10cSrcweir         case EE_CHAR_FONTHEIGHT_CJK:
515cdf0e10cSrcweir         case EE_CHAR_FONTHEIGHT_CTL:
516cdf0e10cSrcweir         {
517cdf0e10cSrcweir             ::rtl::OUString aPostfix;
518cdf0e10cSrcweir             if( nWhichId == EE_CHAR_FONTHEIGHT_CJK )
519cdf0e10cSrcweir                 aPostfix = C2U( "Asian" );
520cdf0e10cSrcweir             else if( nWhichId == EE_CHAR_FONTHEIGHT_CTL )
521cdf0e10cSrcweir                 aPostfix = C2U( "Complex" );
522cdf0e10cSrcweir 
523cdf0e10cSrcweir             const SvxFontHeightItem & rItem =
524cdf0e10cSrcweir                 static_cast< const SvxFontHeightItem & >(
525cdf0e10cSrcweir                     rItemSet.Get( nWhichId ));
526cdf0e10cSrcweir 
527cdf0e10cSrcweir             try
528cdf0e10cSrcweir             {
529cdf0e10cSrcweir                 if( rItem.QueryValue( aValue, MID_FONTHEIGHT ) )
530cdf0e10cSrcweir                 {
531cdf0e10cSrcweir                     bool bSetValue = false;
532cdf0e10cSrcweir                     if( aValue != GetPropertySet()->getPropertyValue( C2U( "CharHeight" ) + aPostfix ))
533cdf0e10cSrcweir                         bSetValue = true;
534cdf0e10cSrcweir                     else
535cdf0e10cSrcweir                     {
536cdf0e10cSrcweir                         if( m_pRefSize.get() )
537cdf0e10cSrcweir                         {
538cdf0e10cSrcweir                             awt::Size aNewRefSize = *m_pRefSize;
539cdf0e10cSrcweir                             awt::Size aOldRefSize;
540cdf0e10cSrcweir                             if( GetRefSizePropertySet()->getPropertyValue( m_aRefSizePropertyName ) >>= aOldRefSize )
541cdf0e10cSrcweir                             {
542cdf0e10cSrcweir                                 if( aNewRefSize.Width != aOldRefSize.Width
543cdf0e10cSrcweir                                     || aNewRefSize.Height != aOldRefSize.Height )
544cdf0e10cSrcweir                                     bSetValue = true;
545cdf0e10cSrcweir                             }
546cdf0e10cSrcweir                         }
547cdf0e10cSrcweir                     }
548cdf0e10cSrcweir                     if( bSetValue )
549cdf0e10cSrcweir                     {
550cdf0e10cSrcweir                         // set new reference size only if there was a reference size before (auto-scaling on)
551cdf0e10cSrcweir                         if( m_pRefSize.get() &&
552cdf0e10cSrcweir                             GetRefSizePropertySet()->getPropertyValue( m_aRefSizePropertyName ).hasValue())
553cdf0e10cSrcweir                         {
554cdf0e10cSrcweir                             GetRefSizePropertySet()->setPropertyValue( m_aRefSizePropertyName,
555cdf0e10cSrcweir                                                                     uno::makeAny( *m_pRefSize ));
556cdf0e10cSrcweir                         }
557cdf0e10cSrcweir 
558cdf0e10cSrcweir                         GetPropertySet()->setPropertyValue( C2U( "CharHeight" ) + aPostfix, aValue );
559cdf0e10cSrcweir                         bChanged = true;
560cdf0e10cSrcweir                     }
561cdf0e10cSrcweir                 }
562cdf0e10cSrcweir             }
563cdf0e10cSrcweir             catch( uno::Exception & ex )
564cdf0e10cSrcweir             {
565cdf0e10cSrcweir                 ASSERT_EXCEPTION( ex );
566cdf0e10cSrcweir             }
567cdf0e10cSrcweir         }
568cdf0e10cSrcweir         break;
569cdf0e10cSrcweir     }
570cdf0e10cSrcweir 
571cdf0e10cSrcweir     return bChanged;
572cdf0e10cSrcweir }
573cdf0e10cSrcweir 
574cdf0e10cSrcweir uno::Reference< beans::XPropertySet >
GetRefSizePropertySet() const575cdf0e10cSrcweir     CharacterPropertyItemConverter::GetRefSizePropertySet() const
576cdf0e10cSrcweir {
577cdf0e10cSrcweir     return m_xRefSizePropSet;
578cdf0e10cSrcweir }
579cdf0e10cSrcweir 
580cdf0e10cSrcweir } //  namespace wrapper
581cdf0e10cSrcweir } //  namespace chart
582