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_unotools.hxx"
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski
28*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/Locale.hpp>
29*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XMultiServiceFactory.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XSingleServiceFactory.hpp>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XNameAccess.hpp>
32*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XNameContainer.hpp>
33*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XNameReplace.hpp>
34*b1cdbd2cSJim Jagielski #include "com/sun/star/util/XMacroExpander.hpp"
35*b1cdbd2cSJim Jagielski #include "com/sun/star/beans/XPropertySet.hpp"
36*b1cdbd2cSJim Jagielski #include <rtl/uri.hxx>
37*b1cdbd2cSJim Jagielski #include <vos/mutex.hxx>
38*b1cdbd2cSJim Jagielski #include <i18npool/mslangid.hxx>
39*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
40*b1cdbd2cSJim Jagielski #include <tools/string.hxx>
41*b1cdbd2cSJim Jagielski #include <unotools/lingucfg.hxx>
42*b1cdbd2cSJim Jagielski #include <unotools/linguprops.hxx>
43*b1cdbd2cSJim Jagielski
44*b1cdbd2cSJim Jagielski #include <comphelper/processfactory.hxx>
45*b1cdbd2cSJim Jagielski
46*b1cdbd2cSJim Jagielski #include <itemholder1.hxx>
47*b1cdbd2cSJim Jagielski
48*b1cdbd2cSJim Jagielski using namespace rtl;
49*b1cdbd2cSJim Jagielski using namespace com::sun::star;
50*b1cdbd2cSJim Jagielski
51*b1cdbd2cSJim Jagielski #define A2OU(x) ::rtl::OUString::createFromAscii( x )
52*b1cdbd2cSJim Jagielski #define EXPAND_PROTOCOL "vnd.sun.star.expand:"
53*b1cdbd2cSJim Jagielski #define FILE_PROTOCOL "file:///"
54*b1cdbd2cSJim Jagielski
55*b1cdbd2cSJim Jagielski ///////////////////////////////////////////////////////////////////////////
56*b1cdbd2cSJim Jagielski
57*b1cdbd2cSJim Jagielski
GetOwnMutex()58*b1cdbd2cSJim Jagielski static osl::Mutex & GetOwnMutex()
59*b1cdbd2cSJim Jagielski {
60*b1cdbd2cSJim Jagielski static osl::Mutex aMutex;
61*b1cdbd2cSJim Jagielski return aMutex;
62*b1cdbd2cSJim Jagielski }
63*b1cdbd2cSJim Jagielski
64*b1cdbd2cSJim Jagielski
65*b1cdbd2cSJim Jagielski ///////////////////////////////////////////////////////////////////////////
66*b1cdbd2cSJim Jagielski
67*b1cdbd2cSJim Jagielski
lcl_SetLocale(sal_Int16 & rLanguage,const uno::Any & rVal)68*b1cdbd2cSJim Jagielski static sal_Bool lcl_SetLocale( sal_Int16 &rLanguage, const uno::Any &rVal )
69*b1cdbd2cSJim Jagielski {
70*b1cdbd2cSJim Jagielski sal_Bool bSucc = sal_False;
71*b1cdbd2cSJim Jagielski
72*b1cdbd2cSJim Jagielski lang::Locale aNew;
73*b1cdbd2cSJim Jagielski if (rVal >>= aNew) // conversion successful?
74*b1cdbd2cSJim Jagielski {
75*b1cdbd2cSJim Jagielski sal_Int16 nNew = MsLangId::convertLocaleToLanguage( aNew );
76*b1cdbd2cSJim Jagielski if (nNew != rLanguage)
77*b1cdbd2cSJim Jagielski {
78*b1cdbd2cSJim Jagielski rLanguage = nNew;
79*b1cdbd2cSJim Jagielski bSucc = sal_True;
80*b1cdbd2cSJim Jagielski }
81*b1cdbd2cSJim Jagielski }
82*b1cdbd2cSJim Jagielski return bSucc;
83*b1cdbd2cSJim Jagielski }
84*b1cdbd2cSJim Jagielski
85*b1cdbd2cSJim Jagielski
lcl_LanguageToCfgLocaleStr(sal_Int16 nLanguage)86*b1cdbd2cSJim Jagielski static inline const OUString lcl_LanguageToCfgLocaleStr( sal_Int16 nLanguage )
87*b1cdbd2cSJim Jagielski {
88*b1cdbd2cSJim Jagielski OUString aRes;
89*b1cdbd2cSJim Jagielski if (LANGUAGE_SYSTEM != nLanguage)
90*b1cdbd2cSJim Jagielski aRes = MsLangId::convertLanguageToIsoString( nLanguage );
91*b1cdbd2cSJim Jagielski return aRes;
92*b1cdbd2cSJim Jagielski }
93*b1cdbd2cSJim Jagielski
94*b1cdbd2cSJim Jagielski
lcl_CfgAnyToLanguage(const uno::Any & rVal)95*b1cdbd2cSJim Jagielski static sal_Int16 lcl_CfgAnyToLanguage( const uno::Any &rVal )
96*b1cdbd2cSJim Jagielski {
97*b1cdbd2cSJim Jagielski OUString aTmp;
98*b1cdbd2cSJim Jagielski rVal >>= aTmp;
99*b1cdbd2cSJim Jagielski return (aTmp.getLength() == 0) ? LANGUAGE_SYSTEM : MsLangId::convertIsoStringToLanguage( aTmp );
100*b1cdbd2cSJim Jagielski }
101*b1cdbd2cSJim Jagielski
102*b1cdbd2cSJim Jagielski
103*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
104*b1cdbd2cSJim Jagielski
SvtLinguOptions()105*b1cdbd2cSJim Jagielski SvtLinguOptions::SvtLinguOptions()
106*b1cdbd2cSJim Jagielski {
107*b1cdbd2cSJim Jagielski nDefaultLanguage = LANGUAGE_NONE;
108*b1cdbd2cSJim Jagielski nDefaultLanguage_CJK = LANGUAGE_NONE;
109*b1cdbd2cSJim Jagielski nDefaultLanguage_CTL = LANGUAGE_NONE;
110*b1cdbd2cSJim Jagielski
111*b1cdbd2cSJim Jagielski // general options
112*b1cdbd2cSJim Jagielski bIsUseDictionaryList =
113*b1cdbd2cSJim Jagielski bIsIgnoreControlCharacters = sal_True;
114*b1cdbd2cSJim Jagielski
115*b1cdbd2cSJim Jagielski // spelling options
116*b1cdbd2cSJim Jagielski bIsSpellCapitalization =
117*b1cdbd2cSJim Jagielski bIsSpellSpecial = sal_True;
118*b1cdbd2cSJim Jagielski bIsSpellAuto =
119*b1cdbd2cSJim Jagielski bIsSpellReverse =
120*b1cdbd2cSJim Jagielski bIsSpellWithDigits =
121*b1cdbd2cSJim Jagielski bIsSpellUpperCase = sal_False;
122*b1cdbd2cSJim Jagielski
123*b1cdbd2cSJim Jagielski // text conversion options
124*b1cdbd2cSJim Jagielski bIsIgnorePostPositionalWord = sal_True;
125*b1cdbd2cSJim Jagielski bIsAutoCloseDialog =
126*b1cdbd2cSJim Jagielski bIsShowEntriesRecentlyUsedFirst =
127*b1cdbd2cSJim Jagielski bIsAutoReplaceUniqueEntries = sal_False;
128*b1cdbd2cSJim Jagielski bIsDirectionToSimplified = sal_True;
129*b1cdbd2cSJim Jagielski bIsUseCharacterVariants =
130*b1cdbd2cSJim Jagielski bIsTranslateCommonTerms =
131*b1cdbd2cSJim Jagielski bIsReverseMapping = sal_False;
132*b1cdbd2cSJim Jagielski
133*b1cdbd2cSJim Jagielski bROIsDirectionToSimplified =
134*b1cdbd2cSJim Jagielski bROIsUseCharacterVariants =
135*b1cdbd2cSJim Jagielski bROIsTranslateCommonTerms =
136*b1cdbd2cSJim Jagielski bROIsReverseMapping = sal_False;
137*b1cdbd2cSJim Jagielski
138*b1cdbd2cSJim Jagielski // hyphenation options
139*b1cdbd2cSJim Jagielski bIsHyphSpecial = sal_True;
140*b1cdbd2cSJim Jagielski bIsHyphAuto = sal_False;
141*b1cdbd2cSJim Jagielski nHyphMinLeading =
142*b1cdbd2cSJim Jagielski nHyphMinTrailing = 2;
143*b1cdbd2cSJim Jagielski nHyphMinWordLength = 0;
144*b1cdbd2cSJim Jagielski
145*b1cdbd2cSJim Jagielski nDataFilesChangedCheckValue = 0;
146*b1cdbd2cSJim Jagielski
147*b1cdbd2cSJim Jagielski //grammar options
148*b1cdbd2cSJim Jagielski bIsGrammarAuto = sal_False,
149*b1cdbd2cSJim Jagielski bIsGrammarInteractive = sal_False;
150*b1cdbd2cSJim Jagielski
151*b1cdbd2cSJim Jagielski }
152*b1cdbd2cSJim Jagielski
153*b1cdbd2cSJim Jagielski
154*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
155*b1cdbd2cSJim Jagielski
156*b1cdbd2cSJim Jagielski
157*b1cdbd2cSJim Jagielski class SvtLinguConfigItem : public utl::ConfigItem
158*b1cdbd2cSJim Jagielski {
159*b1cdbd2cSJim Jagielski SvtLinguOptions aOpt;
160*b1cdbd2cSJim Jagielski
161*b1cdbd2cSJim Jagielski // disallow copy-constructor and assignment-operator for now
162*b1cdbd2cSJim Jagielski SvtLinguConfigItem( const SvtLinguConfigItem & );
163*b1cdbd2cSJim Jagielski SvtLinguConfigItem & operator = ( const SvtLinguConfigItem & );
164*b1cdbd2cSJim Jagielski
165*b1cdbd2cSJim Jagielski static sal_Bool GetHdlByName( sal_Int32 &rnHdl, const OUString &rPropertyName, sal_Bool bFullPropName = sal_False );
166*b1cdbd2cSJim Jagielski static const uno::Sequence< OUString > & GetPropertyNames();
167*b1cdbd2cSJim Jagielski sal_Bool LoadOptions( const uno::Sequence< OUString > &rProperyNames );
168*b1cdbd2cSJim Jagielski sal_Bool SaveOptions( const uno::Sequence< OUString > &rProperyNames );
169*b1cdbd2cSJim Jagielski
170*b1cdbd2cSJim Jagielski public:
171*b1cdbd2cSJim Jagielski SvtLinguConfigItem();
172*b1cdbd2cSJim Jagielski virtual ~SvtLinguConfigItem();
173*b1cdbd2cSJim Jagielski
174*b1cdbd2cSJim Jagielski // utl::ConfigItem
175*b1cdbd2cSJim Jagielski virtual void Notify( const com::sun::star::uno::Sequence< rtl::OUString > &rPropertyNames );
176*b1cdbd2cSJim Jagielski virtual void Commit();
177*b1cdbd2cSJim Jagielski
178*b1cdbd2cSJim Jagielski // make some protected functions of utl::ConfigItem public
179*b1cdbd2cSJim Jagielski using utl::ConfigItem::GetNodeNames;
180*b1cdbd2cSJim Jagielski using utl::ConfigItem::GetProperties;
181*b1cdbd2cSJim Jagielski //using utl::ConfigItem::PutProperties;
182*b1cdbd2cSJim Jagielski //using utl::ConfigItem::SetSetProperties;
183*b1cdbd2cSJim Jagielski using utl::ConfigItem::ReplaceSetProperties;
184*b1cdbd2cSJim Jagielski //using utl::ConfigItem::GetReadOnlyStates;
185*b1cdbd2cSJim Jagielski
186*b1cdbd2cSJim Jagielski
187*b1cdbd2cSJim Jagielski com::sun::star::uno::Any
188*b1cdbd2cSJim Jagielski GetProperty( const rtl::OUString &rPropertyName ) const;
189*b1cdbd2cSJim Jagielski com::sun::star::uno::Any
190*b1cdbd2cSJim Jagielski GetProperty( sal_Int32 nPropertyHandle ) const;
191*b1cdbd2cSJim Jagielski
192*b1cdbd2cSJim Jagielski sal_Bool SetProperty( const rtl::OUString &rPropertyName,
193*b1cdbd2cSJim Jagielski const com::sun::star::uno::Any &rValue );
194*b1cdbd2cSJim Jagielski sal_Bool SetProperty( sal_Int32 nPropertyHandle,
195*b1cdbd2cSJim Jagielski const com::sun::star::uno::Any &rValue );
196*b1cdbd2cSJim Jagielski
197*b1cdbd2cSJim Jagielski sal_Bool GetOptions( SvtLinguOptions &rOptions ) const;
198*b1cdbd2cSJim Jagielski sal_Bool SetOptions( const SvtLinguOptions &rOptions );
199*b1cdbd2cSJim Jagielski
200*b1cdbd2cSJim Jagielski sal_Bool IsReadOnly( const rtl::OUString &rPropertyName ) const;
201*b1cdbd2cSJim Jagielski sal_Bool IsReadOnly( sal_Int32 nPropertyHandle ) const;
202*b1cdbd2cSJim Jagielski };
203*b1cdbd2cSJim Jagielski
204*b1cdbd2cSJim Jagielski
SvtLinguConfigItem()205*b1cdbd2cSJim Jagielski SvtLinguConfigItem::SvtLinguConfigItem() :
206*b1cdbd2cSJim Jagielski utl::ConfigItem( String::CreateFromAscii( "Office.Linguistic" ) )
207*b1cdbd2cSJim Jagielski {
208*b1cdbd2cSJim Jagielski LoadOptions( GetPropertyNames() );
209*b1cdbd2cSJim Jagielski ClearModified();
210*b1cdbd2cSJim Jagielski
211*b1cdbd2cSJim Jagielski // request notify events when properties change
212*b1cdbd2cSJim Jagielski EnableNotification( GetPropertyNames() );
213*b1cdbd2cSJim Jagielski }
214*b1cdbd2cSJim Jagielski
215*b1cdbd2cSJim Jagielski
~SvtLinguConfigItem()216*b1cdbd2cSJim Jagielski SvtLinguConfigItem::~SvtLinguConfigItem()
217*b1cdbd2cSJim Jagielski {
218*b1cdbd2cSJim Jagielski //! Commit (SaveOptions) will be called by the d-tor of the base called !
219*b1cdbd2cSJim Jagielski }
220*b1cdbd2cSJim Jagielski
221*b1cdbd2cSJim Jagielski
Notify(const uno::Sequence<OUString> & rPropertyNames)222*b1cdbd2cSJim Jagielski void SvtLinguConfigItem::Notify( const uno::Sequence< OUString > &rPropertyNames )
223*b1cdbd2cSJim Jagielski {
224*b1cdbd2cSJim Jagielski LoadOptions( rPropertyNames );
225*b1cdbd2cSJim Jagielski NotifyListeners(0);
226*b1cdbd2cSJim Jagielski }
227*b1cdbd2cSJim Jagielski
228*b1cdbd2cSJim Jagielski
Commit()229*b1cdbd2cSJim Jagielski void SvtLinguConfigItem::Commit()
230*b1cdbd2cSJim Jagielski {
231*b1cdbd2cSJim Jagielski SaveOptions( GetPropertyNames() );
232*b1cdbd2cSJim Jagielski }
233*b1cdbd2cSJim Jagielski
234*b1cdbd2cSJim Jagielski
235*b1cdbd2cSJim Jagielski static struct NamesToHdl
236*b1cdbd2cSJim Jagielski {
237*b1cdbd2cSJim Jagielski const char *pFullPropName; // full qualified name as used in configuration
238*b1cdbd2cSJim Jagielski const char *pPropName; // property name only (atom) of above
239*b1cdbd2cSJim Jagielski sal_Int32 nHdl; // numeric handle representing the property
240*b1cdbd2cSJim Jagielski }aNamesToHdl[] =
241*b1cdbd2cSJim Jagielski {
242*b1cdbd2cSJim Jagielski {/* 0 */ "General/DefaultLocale", UPN_DEFAULT_LOCALE, UPH_DEFAULT_LOCALE},
243*b1cdbd2cSJim Jagielski {/* 1 */ "General/DictionaryList/ActiveDictionaries", UPN_ACTIVE_DICTIONARIES, UPH_ACTIVE_DICTIONARIES},
244*b1cdbd2cSJim Jagielski {/* 2 */ "General/DictionaryList/IsUseDictionaryList", UPN_IS_USE_DICTIONARY_LIST, UPH_IS_USE_DICTIONARY_LIST},
245*b1cdbd2cSJim Jagielski {/* 3 */ "General/IsIgnoreControlCharacters", UPN_IS_IGNORE_CONTROL_CHARACTERS, UPH_IS_IGNORE_CONTROL_CHARACTERS},
246*b1cdbd2cSJim Jagielski {/* 5 */ "General/DefaultLocale_CJK", UPN_DEFAULT_LOCALE_CJK, UPH_DEFAULT_LOCALE_CJK},
247*b1cdbd2cSJim Jagielski {/* 6 */ "General/DefaultLocale_CTL", UPN_DEFAULT_LOCALE_CTL, UPH_DEFAULT_LOCALE_CTL},
248*b1cdbd2cSJim Jagielski
249*b1cdbd2cSJim Jagielski {/* 7 */ "SpellChecking/IsSpellUpperCase", UPN_IS_SPELL_UPPER_CASE, UPH_IS_SPELL_UPPER_CASE},
250*b1cdbd2cSJim Jagielski {/* 8 */ "SpellChecking/IsSpellWithDigits", UPN_IS_SPELL_WITH_DIGITS, UPH_IS_SPELL_WITH_DIGITS},
251*b1cdbd2cSJim Jagielski {/* 9 */ "SpellChecking/IsSpellCapitalization", UPN_IS_SPELL_CAPITALIZATION, UPH_IS_SPELL_CAPITALIZATION},
252*b1cdbd2cSJim Jagielski {/* 10 */ "SpellChecking/IsSpellAuto", UPN_IS_SPELL_AUTO, UPH_IS_SPELL_AUTO},
253*b1cdbd2cSJim Jagielski {/* 11 */ "SpellChecking/IsSpellSpecial", UPN_IS_SPELL_SPECIAL, UPH_IS_SPELL_SPECIAL},
254*b1cdbd2cSJim Jagielski {/* 14 */ "SpellChecking/IsReverseDirection", UPN_IS_WRAP_REVERSE, UPH_IS_WRAP_REVERSE},
255*b1cdbd2cSJim Jagielski
256*b1cdbd2cSJim Jagielski {/* 15 */ "Hyphenation/MinLeading", UPN_HYPH_MIN_LEADING, UPH_HYPH_MIN_LEADING},
257*b1cdbd2cSJim Jagielski {/* 16 */ "Hyphenation/MinTrailing", UPN_HYPH_MIN_TRAILING, UPH_HYPH_MIN_TRAILING},
258*b1cdbd2cSJim Jagielski {/* 17 */ "Hyphenation/MinWordLength", UPN_HYPH_MIN_WORD_LENGTH, UPH_HYPH_MIN_WORD_LENGTH},
259*b1cdbd2cSJim Jagielski {/* 18 */ "Hyphenation/IsHyphSpecial", UPN_IS_HYPH_SPECIAL, UPH_IS_HYPH_SPECIAL},
260*b1cdbd2cSJim Jagielski {/* 19 */ "Hyphenation/IsHyphAuto", UPN_IS_HYPH_AUTO, UPH_IS_HYPH_AUTO},
261*b1cdbd2cSJim Jagielski
262*b1cdbd2cSJim Jagielski {/* 20 */ "TextConversion/ActiveConversionDictionaries", UPN_ACTIVE_CONVERSION_DICTIONARIES, UPH_ACTIVE_CONVERSION_DICTIONARIES},
263*b1cdbd2cSJim Jagielski {/* 21 */ "TextConversion/IsIgnorePostPositionalWord", UPN_IS_IGNORE_POST_POSITIONAL_WORD, UPH_IS_IGNORE_POST_POSITIONAL_WORD},
264*b1cdbd2cSJim Jagielski {/* 22 */ "TextConversion/IsAutoCloseDialog", UPN_IS_AUTO_CLOSE_DIALOG, UPH_IS_AUTO_CLOSE_DIALOG},
265*b1cdbd2cSJim Jagielski {/* 23 */ "TextConversion/IsShowEntriesRecentlyUsedFirst", UPN_IS_SHOW_ENTRIES_RECENTLY_USED_FIRST, UPH_IS_SHOW_ENTRIES_RECENTLY_USED_FIRST},
266*b1cdbd2cSJim Jagielski {/* 24 */ "TextConversion/IsAutoReplaceUniqueEntries", UPN_IS_AUTO_REPLACE_UNIQUE_ENTRIES, UPH_IS_AUTO_REPLACE_UNIQUE_ENTRIES},
267*b1cdbd2cSJim Jagielski {/* 25 */ "TextConversion/IsDirectionToSimplified", UPN_IS_DIRECTION_TO_SIMPLIFIED, UPH_IS_DIRECTION_TO_SIMPLIFIED},
268*b1cdbd2cSJim Jagielski {/* 26 */ "TextConversion/IsUseCharacterVariants", UPN_IS_USE_CHARACTER_VARIANTS, UPH_IS_USE_CHARACTER_VARIANTS},
269*b1cdbd2cSJim Jagielski {/* 27 */ "TextConversion/IsTranslateCommonTerms", UPN_IS_TRANSLATE_COMMON_TERMS, UPH_IS_TRANSLATE_COMMON_TERMS},
270*b1cdbd2cSJim Jagielski {/* 28 */ "TextConversion/IsReverseMapping", UPN_IS_REVERSE_MAPPING, UPH_IS_REVERSE_MAPPING},
271*b1cdbd2cSJim Jagielski
272*b1cdbd2cSJim Jagielski {/* 29 */ "ServiceManager/DataFilesChangedCheckValue", UPN_DATA_FILES_CHANGED_CHECK_VALUE, UPH_DATA_FILES_CHANGED_CHECK_VALUE},
273*b1cdbd2cSJim Jagielski
274*b1cdbd2cSJim Jagielski {/* 30 */ "GrammarChecking/IsAutoCheck", UPN_IS_GRAMMAR_AUTO, UPH_IS_GRAMMAR_AUTO},
275*b1cdbd2cSJim Jagielski {/* 31 */ "GrammarChecking/IsInteractiveCheck", UPN_IS_GRAMMAR_INTERACTIVE, UPH_IS_GRAMMAR_INTERACTIVE},
276*b1cdbd2cSJim Jagielski
277*b1cdbd2cSJim Jagielski /* similar to entry 0 (thus no own configuration entry) but with different property name and type */
278*b1cdbd2cSJim Jagielski { NULL, UPN_DEFAULT_LANGUAGE, UPH_DEFAULT_LANGUAGE},
279*b1cdbd2cSJim Jagielski
280*b1cdbd2cSJim Jagielski { NULL, NULL, -1}
281*b1cdbd2cSJim Jagielski };
282*b1cdbd2cSJim Jagielski
283*b1cdbd2cSJim Jagielski
GetPropertyNames()284*b1cdbd2cSJim Jagielski const uno::Sequence< OUString > & SvtLinguConfigItem::GetPropertyNames()
285*b1cdbd2cSJim Jagielski {
286*b1cdbd2cSJim Jagielski static uno::Sequence< OUString > aNames;
287*b1cdbd2cSJim Jagielski static sal_Bool bInitialized = sal_False;
288*b1cdbd2cSJim Jagielski
289*b1cdbd2cSJim Jagielski if (!bInitialized)
290*b1cdbd2cSJim Jagielski {
291*b1cdbd2cSJim Jagielski sal_Int32 nMax = sizeof(aNamesToHdl) / sizeof(aNamesToHdl[0]);
292*b1cdbd2cSJim Jagielski
293*b1cdbd2cSJim Jagielski aNames.realloc( nMax );
294*b1cdbd2cSJim Jagielski OUString *pNames = aNames.getArray();
295*b1cdbd2cSJim Jagielski sal_Int32 nIdx = 0;
296*b1cdbd2cSJim Jagielski for (sal_Int32 i = 0; i < nMax; ++i)
297*b1cdbd2cSJim Jagielski {
298*b1cdbd2cSJim Jagielski const sal_Char *pFullPropName = aNamesToHdl[i].pFullPropName;
299*b1cdbd2cSJim Jagielski if (pFullPropName)
300*b1cdbd2cSJim Jagielski pNames[ nIdx++ ] = A2OU( pFullPropName );
301*b1cdbd2cSJim Jagielski }
302*b1cdbd2cSJim Jagielski aNames.realloc( nIdx );
303*b1cdbd2cSJim Jagielski bInitialized = sal_True;
304*b1cdbd2cSJim Jagielski }
305*b1cdbd2cSJim Jagielski return aNames;
306*b1cdbd2cSJim Jagielski }
307*b1cdbd2cSJim Jagielski
308*b1cdbd2cSJim Jagielski
GetHdlByName(sal_Int32 & rnHdl,const OUString & rPropertyName,sal_Bool bFullPropName)309*b1cdbd2cSJim Jagielski sal_Bool SvtLinguConfigItem::GetHdlByName(
310*b1cdbd2cSJim Jagielski sal_Int32 &rnHdl,
311*b1cdbd2cSJim Jagielski const OUString &rPropertyName,
312*b1cdbd2cSJim Jagielski sal_Bool bFullPropName )
313*b1cdbd2cSJim Jagielski {
314*b1cdbd2cSJim Jagielski NamesToHdl *pEntry = &aNamesToHdl[0];
315*b1cdbd2cSJim Jagielski
316*b1cdbd2cSJim Jagielski if (bFullPropName)
317*b1cdbd2cSJim Jagielski {
318*b1cdbd2cSJim Jagielski while (pEntry && pEntry->pFullPropName != NULL)
319*b1cdbd2cSJim Jagielski {
320*b1cdbd2cSJim Jagielski if (0 == rPropertyName.compareToAscii( pEntry->pFullPropName ))
321*b1cdbd2cSJim Jagielski {
322*b1cdbd2cSJim Jagielski rnHdl = pEntry->nHdl;
323*b1cdbd2cSJim Jagielski break;
324*b1cdbd2cSJim Jagielski }
325*b1cdbd2cSJim Jagielski ++pEntry;
326*b1cdbd2cSJim Jagielski }
327*b1cdbd2cSJim Jagielski return pEntry && pEntry->pFullPropName != NULL;
328*b1cdbd2cSJim Jagielski }
329*b1cdbd2cSJim Jagielski else
330*b1cdbd2cSJim Jagielski {
331*b1cdbd2cSJim Jagielski while (pEntry && pEntry->pPropName != NULL)
332*b1cdbd2cSJim Jagielski {
333*b1cdbd2cSJim Jagielski if (0 == rPropertyName.compareToAscii( pEntry->pPropName ))
334*b1cdbd2cSJim Jagielski {
335*b1cdbd2cSJim Jagielski rnHdl = pEntry->nHdl;
336*b1cdbd2cSJim Jagielski break;
337*b1cdbd2cSJim Jagielski }
338*b1cdbd2cSJim Jagielski ++pEntry;
339*b1cdbd2cSJim Jagielski }
340*b1cdbd2cSJim Jagielski return pEntry && pEntry->pPropName != NULL;
341*b1cdbd2cSJim Jagielski }
342*b1cdbd2cSJim Jagielski }
343*b1cdbd2cSJim Jagielski
344*b1cdbd2cSJim Jagielski
GetProperty(const OUString & rPropertyName) const345*b1cdbd2cSJim Jagielski uno::Any SvtLinguConfigItem::GetProperty( const OUString &rPropertyName ) const
346*b1cdbd2cSJim Jagielski {
347*b1cdbd2cSJim Jagielski osl::MutexGuard aGuard( GetOwnMutex() );
348*b1cdbd2cSJim Jagielski
349*b1cdbd2cSJim Jagielski sal_Int32 nHdl;
350*b1cdbd2cSJim Jagielski return GetHdlByName( nHdl, rPropertyName ) ? GetProperty( nHdl ) : uno::Any();
351*b1cdbd2cSJim Jagielski }
352*b1cdbd2cSJim Jagielski
353*b1cdbd2cSJim Jagielski
GetProperty(sal_Int32 nPropertyHandle) const354*b1cdbd2cSJim Jagielski uno::Any SvtLinguConfigItem::GetProperty( sal_Int32 nPropertyHandle ) const
355*b1cdbd2cSJim Jagielski {
356*b1cdbd2cSJim Jagielski osl::MutexGuard aGuard( GetOwnMutex() );
357*b1cdbd2cSJim Jagielski
358*b1cdbd2cSJim Jagielski uno::Any aRes;
359*b1cdbd2cSJim Jagielski
360*b1cdbd2cSJim Jagielski const sal_Int16 *pnVal = 0;
361*b1cdbd2cSJim Jagielski const sal_Bool *pbVal = 0;
362*b1cdbd2cSJim Jagielski const sal_Int32 *pnInt32Val = 0;
363*b1cdbd2cSJim Jagielski
364*b1cdbd2cSJim Jagielski const SvtLinguOptions &rOpt = const_cast< SvtLinguConfigItem * >(this)->aOpt;
365*b1cdbd2cSJim Jagielski switch (nPropertyHandle)
366*b1cdbd2cSJim Jagielski {
367*b1cdbd2cSJim Jagielski case UPH_IS_USE_DICTIONARY_LIST : pbVal = &rOpt.bIsUseDictionaryList; break;
368*b1cdbd2cSJim Jagielski case UPH_IS_IGNORE_CONTROL_CHARACTERS : pbVal = &rOpt.bIsIgnoreControlCharacters; break;
369*b1cdbd2cSJim Jagielski case UPH_IS_HYPH_AUTO : pbVal = &rOpt.bIsHyphAuto; break;
370*b1cdbd2cSJim Jagielski case UPH_IS_HYPH_SPECIAL : pbVal = &rOpt.bIsHyphSpecial; break;
371*b1cdbd2cSJim Jagielski case UPH_IS_SPELL_AUTO : pbVal = &rOpt.bIsSpellAuto; break;
372*b1cdbd2cSJim Jagielski case UPH_IS_SPELL_SPECIAL : pbVal = &rOpt.bIsSpellSpecial; break;
373*b1cdbd2cSJim Jagielski case UPH_IS_WRAP_REVERSE : pbVal = &rOpt.bIsSpellReverse; break;
374*b1cdbd2cSJim Jagielski case UPH_DEFAULT_LANGUAGE : pnVal = &rOpt.nDefaultLanguage; break;
375*b1cdbd2cSJim Jagielski case UPH_IS_SPELL_CAPITALIZATION : pbVal = &rOpt.bIsSpellCapitalization; break;
376*b1cdbd2cSJim Jagielski case UPH_IS_SPELL_WITH_DIGITS : pbVal = &rOpt.bIsSpellWithDigits; break;
377*b1cdbd2cSJim Jagielski case UPH_IS_SPELL_UPPER_CASE : pbVal = &rOpt.bIsSpellUpperCase; break;
378*b1cdbd2cSJim Jagielski case UPH_HYPH_MIN_LEADING : pnVal = &rOpt.nHyphMinLeading; break;
379*b1cdbd2cSJim Jagielski case UPH_HYPH_MIN_TRAILING : pnVal = &rOpt.nHyphMinTrailing; break;
380*b1cdbd2cSJim Jagielski case UPH_HYPH_MIN_WORD_LENGTH : pnVal = &rOpt.nHyphMinWordLength; break;
381*b1cdbd2cSJim Jagielski case UPH_ACTIVE_DICTIONARIES :
382*b1cdbd2cSJim Jagielski {
383*b1cdbd2cSJim Jagielski aRes <<= rOpt.aActiveDics;
384*b1cdbd2cSJim Jagielski break;
385*b1cdbd2cSJim Jagielski }
386*b1cdbd2cSJim Jagielski case UPH_ACTIVE_CONVERSION_DICTIONARIES :
387*b1cdbd2cSJim Jagielski {
388*b1cdbd2cSJim Jagielski aRes <<= rOpt.aActiveConvDics;
389*b1cdbd2cSJim Jagielski break;
390*b1cdbd2cSJim Jagielski }
391*b1cdbd2cSJim Jagielski case UPH_DEFAULT_LOCALE :
392*b1cdbd2cSJim Jagielski {
393*b1cdbd2cSJim Jagielski lang::Locale aLocale( MsLangId::convertLanguageToLocale( rOpt.nDefaultLanguage, false ) );
394*b1cdbd2cSJim Jagielski aRes.setValue( &aLocale, ::getCppuType((lang::Locale*)0 ));
395*b1cdbd2cSJim Jagielski break;
396*b1cdbd2cSJim Jagielski }
397*b1cdbd2cSJim Jagielski case UPH_DEFAULT_LOCALE_CJK :
398*b1cdbd2cSJim Jagielski {
399*b1cdbd2cSJim Jagielski lang::Locale aLocale( MsLangId::convertLanguageToLocale( rOpt.nDefaultLanguage_CJK, false ) );
400*b1cdbd2cSJim Jagielski aRes.setValue( &aLocale, ::getCppuType((lang::Locale*)0 ));
401*b1cdbd2cSJim Jagielski break;
402*b1cdbd2cSJim Jagielski }
403*b1cdbd2cSJim Jagielski case UPH_DEFAULT_LOCALE_CTL :
404*b1cdbd2cSJim Jagielski {
405*b1cdbd2cSJim Jagielski lang::Locale aLocale( MsLangId::convertLanguageToLocale( rOpt.nDefaultLanguage_CTL, false ) );
406*b1cdbd2cSJim Jagielski aRes.setValue( &aLocale, ::getCppuType((lang::Locale*)0 ));
407*b1cdbd2cSJim Jagielski break;
408*b1cdbd2cSJim Jagielski }
409*b1cdbd2cSJim Jagielski case UPH_IS_IGNORE_POST_POSITIONAL_WORD : pbVal = &rOpt.bIsIgnorePostPositionalWord; break;
410*b1cdbd2cSJim Jagielski case UPH_IS_AUTO_CLOSE_DIALOG : pbVal = &rOpt.bIsAutoCloseDialog; break;
411*b1cdbd2cSJim Jagielski case UPH_IS_SHOW_ENTRIES_RECENTLY_USED_FIRST : pbVal = &rOpt.bIsShowEntriesRecentlyUsedFirst; break;
412*b1cdbd2cSJim Jagielski case UPH_IS_AUTO_REPLACE_UNIQUE_ENTRIES : pbVal = &rOpt.bIsAutoReplaceUniqueEntries; break;
413*b1cdbd2cSJim Jagielski
414*b1cdbd2cSJim Jagielski case UPH_IS_DIRECTION_TO_SIMPLIFIED: pbVal = &rOpt.bIsDirectionToSimplified; break;
415*b1cdbd2cSJim Jagielski case UPH_IS_USE_CHARACTER_VARIANTS : pbVal = &rOpt.bIsUseCharacterVariants; break;
416*b1cdbd2cSJim Jagielski case UPH_IS_TRANSLATE_COMMON_TERMS : pbVal = &rOpt.bIsTranslateCommonTerms; break;
417*b1cdbd2cSJim Jagielski case UPH_IS_REVERSE_MAPPING : pbVal = &rOpt.bIsReverseMapping; break;
418*b1cdbd2cSJim Jagielski
419*b1cdbd2cSJim Jagielski case UPH_DATA_FILES_CHANGED_CHECK_VALUE : pnInt32Val = &rOpt.nDataFilesChangedCheckValue; break;
420*b1cdbd2cSJim Jagielski case UPH_IS_GRAMMAR_AUTO: pbVal = &rOpt.bIsGrammarAuto; break;
421*b1cdbd2cSJim Jagielski case UPH_IS_GRAMMAR_INTERACTIVE: pbVal = &rOpt.bIsGrammarInteractive; break;
422*b1cdbd2cSJim Jagielski default :
423*b1cdbd2cSJim Jagielski DBG_ASSERT( 0, "unexpected property handle" );
424*b1cdbd2cSJim Jagielski }
425*b1cdbd2cSJim Jagielski
426*b1cdbd2cSJim Jagielski if (pbVal)
427*b1cdbd2cSJim Jagielski aRes <<= *pbVal;
428*b1cdbd2cSJim Jagielski else if (pnVal)
429*b1cdbd2cSJim Jagielski aRes <<= *pnVal;
430*b1cdbd2cSJim Jagielski else if (pnInt32Val)
431*b1cdbd2cSJim Jagielski aRes <<= *pnInt32Val;
432*b1cdbd2cSJim Jagielski
433*b1cdbd2cSJim Jagielski return aRes;
434*b1cdbd2cSJim Jagielski }
435*b1cdbd2cSJim Jagielski
436*b1cdbd2cSJim Jagielski
SetProperty(const OUString & rPropertyName,const uno::Any & rValue)437*b1cdbd2cSJim Jagielski sal_Bool SvtLinguConfigItem::SetProperty( const OUString &rPropertyName, const uno::Any &rValue )
438*b1cdbd2cSJim Jagielski {
439*b1cdbd2cSJim Jagielski osl::MutexGuard aGuard( GetOwnMutex() );
440*b1cdbd2cSJim Jagielski
441*b1cdbd2cSJim Jagielski sal_Bool bSucc = sal_False;
442*b1cdbd2cSJim Jagielski sal_Int32 nHdl;
443*b1cdbd2cSJim Jagielski if (GetHdlByName( nHdl, rPropertyName ))
444*b1cdbd2cSJim Jagielski bSucc = SetProperty( nHdl, rValue );
445*b1cdbd2cSJim Jagielski return bSucc;
446*b1cdbd2cSJim Jagielski }
447*b1cdbd2cSJim Jagielski
448*b1cdbd2cSJim Jagielski
SetProperty(sal_Int32 nPropertyHandle,const uno::Any & rValue)449*b1cdbd2cSJim Jagielski sal_Bool SvtLinguConfigItem::SetProperty( sal_Int32 nPropertyHandle, const uno::Any &rValue )
450*b1cdbd2cSJim Jagielski {
451*b1cdbd2cSJim Jagielski osl::MutexGuard aGuard( GetOwnMutex() );
452*b1cdbd2cSJim Jagielski
453*b1cdbd2cSJim Jagielski sal_Bool bSucc = sal_False;
454*b1cdbd2cSJim Jagielski if (!rValue.hasValue())
455*b1cdbd2cSJim Jagielski return bSucc;
456*b1cdbd2cSJim Jagielski
457*b1cdbd2cSJim Jagielski sal_Bool bMod = sal_False;
458*b1cdbd2cSJim Jagielski
459*b1cdbd2cSJim Jagielski sal_Int16 *pnVal = 0;
460*b1cdbd2cSJim Jagielski sal_Bool *pbVal = 0;
461*b1cdbd2cSJim Jagielski sal_Int32 *pnInt32Val = 0;
462*b1cdbd2cSJim Jagielski
463*b1cdbd2cSJim Jagielski SvtLinguOptions &rOpt = aOpt;
464*b1cdbd2cSJim Jagielski switch (nPropertyHandle)
465*b1cdbd2cSJim Jagielski {
466*b1cdbd2cSJim Jagielski case UPH_IS_USE_DICTIONARY_LIST : pbVal = &rOpt.bIsUseDictionaryList; break;
467*b1cdbd2cSJim Jagielski case UPH_IS_IGNORE_CONTROL_CHARACTERS : pbVal = &rOpt.bIsIgnoreControlCharacters; break;
468*b1cdbd2cSJim Jagielski case UPH_IS_HYPH_AUTO : pbVal = &rOpt.bIsHyphAuto; break;
469*b1cdbd2cSJim Jagielski case UPH_IS_HYPH_SPECIAL : pbVal = &rOpt.bIsHyphSpecial; break;
470*b1cdbd2cSJim Jagielski case UPH_IS_SPELL_AUTO : pbVal = &rOpt.bIsSpellAuto; break;
471*b1cdbd2cSJim Jagielski case UPH_IS_SPELL_SPECIAL : pbVal = &rOpt.bIsSpellSpecial; break;
472*b1cdbd2cSJim Jagielski case UPH_IS_WRAP_REVERSE : pbVal = &rOpt.bIsSpellReverse; break;
473*b1cdbd2cSJim Jagielski case UPH_DEFAULT_LANGUAGE : pnVal = &rOpt.nDefaultLanguage; break;
474*b1cdbd2cSJim Jagielski case UPH_IS_SPELL_CAPITALIZATION : pbVal = &rOpt.bIsSpellCapitalization; break;
475*b1cdbd2cSJim Jagielski case UPH_IS_SPELL_WITH_DIGITS : pbVal = &rOpt.bIsSpellWithDigits; break;
476*b1cdbd2cSJim Jagielski case UPH_IS_SPELL_UPPER_CASE : pbVal = &rOpt.bIsSpellUpperCase; break;
477*b1cdbd2cSJim Jagielski case UPH_HYPH_MIN_LEADING : pnVal = &rOpt.nHyphMinLeading; break;
478*b1cdbd2cSJim Jagielski case UPH_HYPH_MIN_TRAILING : pnVal = &rOpt.nHyphMinTrailing; break;
479*b1cdbd2cSJim Jagielski case UPH_HYPH_MIN_WORD_LENGTH : pnVal = &rOpt.nHyphMinWordLength; break;
480*b1cdbd2cSJim Jagielski case UPH_ACTIVE_DICTIONARIES :
481*b1cdbd2cSJim Jagielski {
482*b1cdbd2cSJim Jagielski rValue >>= rOpt.aActiveDics;
483*b1cdbd2cSJim Jagielski bMod = sal_True;
484*b1cdbd2cSJim Jagielski break;
485*b1cdbd2cSJim Jagielski }
486*b1cdbd2cSJim Jagielski case UPH_ACTIVE_CONVERSION_DICTIONARIES :
487*b1cdbd2cSJim Jagielski {
488*b1cdbd2cSJim Jagielski rValue >>= rOpt.aActiveConvDics;
489*b1cdbd2cSJim Jagielski bMod = sal_True;
490*b1cdbd2cSJim Jagielski break;
491*b1cdbd2cSJim Jagielski }
492*b1cdbd2cSJim Jagielski case UPH_DEFAULT_LOCALE :
493*b1cdbd2cSJim Jagielski {
494*b1cdbd2cSJim Jagielski bSucc = lcl_SetLocale( rOpt.nDefaultLanguage, rValue );
495*b1cdbd2cSJim Jagielski bMod = bSucc;
496*b1cdbd2cSJim Jagielski break;
497*b1cdbd2cSJim Jagielski }
498*b1cdbd2cSJim Jagielski case UPH_DEFAULT_LOCALE_CJK :
499*b1cdbd2cSJim Jagielski {
500*b1cdbd2cSJim Jagielski bSucc = lcl_SetLocale( rOpt.nDefaultLanguage_CJK, rValue );
501*b1cdbd2cSJim Jagielski bMod = bSucc;
502*b1cdbd2cSJim Jagielski break;
503*b1cdbd2cSJim Jagielski }
504*b1cdbd2cSJim Jagielski case UPH_DEFAULT_LOCALE_CTL :
505*b1cdbd2cSJim Jagielski {
506*b1cdbd2cSJim Jagielski bSucc = lcl_SetLocale( rOpt.nDefaultLanguage_CTL, rValue );
507*b1cdbd2cSJim Jagielski bMod = bSucc;
508*b1cdbd2cSJim Jagielski break;
509*b1cdbd2cSJim Jagielski }
510*b1cdbd2cSJim Jagielski case UPH_IS_IGNORE_POST_POSITIONAL_WORD : pbVal = &rOpt.bIsIgnorePostPositionalWord; break;
511*b1cdbd2cSJim Jagielski case UPH_IS_AUTO_CLOSE_DIALOG : pbVal = &rOpt.bIsAutoCloseDialog; break;
512*b1cdbd2cSJim Jagielski case UPH_IS_SHOW_ENTRIES_RECENTLY_USED_FIRST : pbVal = &rOpt.bIsShowEntriesRecentlyUsedFirst; break;
513*b1cdbd2cSJim Jagielski case UPH_IS_AUTO_REPLACE_UNIQUE_ENTRIES : pbVal = &rOpt.bIsAutoReplaceUniqueEntries; break;
514*b1cdbd2cSJim Jagielski
515*b1cdbd2cSJim Jagielski case UPH_IS_DIRECTION_TO_SIMPLIFIED : pbVal = &rOpt.bIsDirectionToSimplified; break;
516*b1cdbd2cSJim Jagielski case UPH_IS_USE_CHARACTER_VARIANTS : pbVal = &rOpt.bIsUseCharacterVariants; break;
517*b1cdbd2cSJim Jagielski case UPH_IS_TRANSLATE_COMMON_TERMS : pbVal = &rOpt.bIsTranslateCommonTerms; break;
518*b1cdbd2cSJim Jagielski case UPH_IS_REVERSE_MAPPING : pbVal = &rOpt.bIsReverseMapping; break;
519*b1cdbd2cSJim Jagielski
520*b1cdbd2cSJim Jagielski case UPH_DATA_FILES_CHANGED_CHECK_VALUE : pnInt32Val = &rOpt.nDataFilesChangedCheckValue; break;
521*b1cdbd2cSJim Jagielski case UPH_IS_GRAMMAR_AUTO: pbVal = &rOpt.bIsGrammarAuto; break;
522*b1cdbd2cSJim Jagielski case UPH_IS_GRAMMAR_INTERACTIVE: pbVal = &rOpt.bIsGrammarInteractive; break;
523*b1cdbd2cSJim Jagielski default :
524*b1cdbd2cSJim Jagielski DBG_ASSERT( 0, "unexpected property handle" );
525*b1cdbd2cSJim Jagielski }
526*b1cdbd2cSJim Jagielski
527*b1cdbd2cSJim Jagielski if (pbVal)
528*b1cdbd2cSJim Jagielski {
529*b1cdbd2cSJim Jagielski sal_Bool bNew = sal_Bool();
530*b1cdbd2cSJim Jagielski if (rValue >>= bNew)
531*b1cdbd2cSJim Jagielski {
532*b1cdbd2cSJim Jagielski if (bNew != *pbVal)
533*b1cdbd2cSJim Jagielski {
534*b1cdbd2cSJim Jagielski *pbVal = bNew;
535*b1cdbd2cSJim Jagielski bMod = sal_True;
536*b1cdbd2cSJim Jagielski }
537*b1cdbd2cSJim Jagielski bSucc = sal_True;
538*b1cdbd2cSJim Jagielski }
539*b1cdbd2cSJim Jagielski }
540*b1cdbd2cSJim Jagielski else if (pnVal)
541*b1cdbd2cSJim Jagielski {
542*b1cdbd2cSJim Jagielski sal_Int16 nNew = sal_Int16();
543*b1cdbd2cSJim Jagielski if (rValue >>= nNew)
544*b1cdbd2cSJim Jagielski {
545*b1cdbd2cSJim Jagielski if (nNew != *pnVal)
546*b1cdbd2cSJim Jagielski {
547*b1cdbd2cSJim Jagielski *pnVal = nNew;
548*b1cdbd2cSJim Jagielski bMod = sal_True;
549*b1cdbd2cSJim Jagielski }
550*b1cdbd2cSJim Jagielski bSucc = sal_True;
551*b1cdbd2cSJim Jagielski }
552*b1cdbd2cSJim Jagielski }
553*b1cdbd2cSJim Jagielski else if (pnInt32Val)
554*b1cdbd2cSJim Jagielski {
555*b1cdbd2cSJim Jagielski sal_Int32 nNew = sal_Int32();
556*b1cdbd2cSJim Jagielski if (rValue >>= nNew)
557*b1cdbd2cSJim Jagielski {
558*b1cdbd2cSJim Jagielski if (nNew != *pnInt32Val)
559*b1cdbd2cSJim Jagielski {
560*b1cdbd2cSJim Jagielski *pnInt32Val = nNew;
561*b1cdbd2cSJim Jagielski bMod = sal_True;
562*b1cdbd2cSJim Jagielski }
563*b1cdbd2cSJim Jagielski bSucc = sal_True;
564*b1cdbd2cSJim Jagielski }
565*b1cdbd2cSJim Jagielski }
566*b1cdbd2cSJim Jagielski
567*b1cdbd2cSJim Jagielski if (bMod)
568*b1cdbd2cSJim Jagielski SetModified();
569*b1cdbd2cSJim Jagielski
570*b1cdbd2cSJim Jagielski NotifyListeners(0);
571*b1cdbd2cSJim Jagielski return bSucc;
572*b1cdbd2cSJim Jagielski }
573*b1cdbd2cSJim Jagielski
574*b1cdbd2cSJim Jagielski
GetOptions(SvtLinguOptions & rOptions) const575*b1cdbd2cSJim Jagielski sal_Bool SvtLinguConfigItem::GetOptions( SvtLinguOptions &rOptions ) const
576*b1cdbd2cSJim Jagielski {
577*b1cdbd2cSJim Jagielski osl::MutexGuard aGuard( GetOwnMutex() );
578*b1cdbd2cSJim Jagielski
579*b1cdbd2cSJim Jagielski rOptions = aOpt;
580*b1cdbd2cSJim Jagielski return sal_True;
581*b1cdbd2cSJim Jagielski }
582*b1cdbd2cSJim Jagielski
583*b1cdbd2cSJim Jagielski
SetOptions(const SvtLinguOptions & rOptions)584*b1cdbd2cSJim Jagielski sal_Bool SvtLinguConfigItem::SetOptions( const SvtLinguOptions &rOptions )
585*b1cdbd2cSJim Jagielski {
586*b1cdbd2cSJim Jagielski osl::MutexGuard aGuard( GetOwnMutex() );
587*b1cdbd2cSJim Jagielski
588*b1cdbd2cSJim Jagielski aOpt = rOptions;
589*b1cdbd2cSJim Jagielski SetModified();
590*b1cdbd2cSJim Jagielski NotifyListeners(0);
591*b1cdbd2cSJim Jagielski return sal_True;
592*b1cdbd2cSJim Jagielski }
593*b1cdbd2cSJim Jagielski
594*b1cdbd2cSJim Jagielski
LoadOptions(const uno::Sequence<OUString> & rProperyNames)595*b1cdbd2cSJim Jagielski sal_Bool SvtLinguConfigItem::LoadOptions( const uno::Sequence< OUString > &rProperyNames )
596*b1cdbd2cSJim Jagielski {
597*b1cdbd2cSJim Jagielski osl::MutexGuard aGuard( GetOwnMutex() );
598*b1cdbd2cSJim Jagielski
599*b1cdbd2cSJim Jagielski sal_Bool bRes = sal_False;
600*b1cdbd2cSJim Jagielski
601*b1cdbd2cSJim Jagielski const OUString *pProperyNames = rProperyNames.getConstArray();
602*b1cdbd2cSJim Jagielski sal_Int32 nProps = rProperyNames.getLength();
603*b1cdbd2cSJim Jagielski
604*b1cdbd2cSJim Jagielski const uno::Sequence< uno::Any > aValues = GetProperties( rProperyNames );
605*b1cdbd2cSJim Jagielski const uno::Sequence< sal_Bool > aROStates = GetReadOnlyStates( rProperyNames );
606*b1cdbd2cSJim Jagielski
607*b1cdbd2cSJim Jagielski if (nProps && aValues.getLength() == nProps && aROStates.getLength() == nProps)
608*b1cdbd2cSJim Jagielski {
609*b1cdbd2cSJim Jagielski SvtLinguOptions &rOpt = aOpt;
610*b1cdbd2cSJim Jagielski
611*b1cdbd2cSJim Jagielski const uno::Any *pValue = aValues.getConstArray();
612*b1cdbd2cSJim Jagielski const sal_Bool *pROStates = aROStates.getConstArray();
613*b1cdbd2cSJim Jagielski for (sal_Int32 i = 0; i < nProps; ++i)
614*b1cdbd2cSJim Jagielski {
615*b1cdbd2cSJim Jagielski const uno::Any &rVal = pValue[i];
616*b1cdbd2cSJim Jagielski sal_Int32 nPropertyHandle;
617*b1cdbd2cSJim Jagielski GetHdlByName( nPropertyHandle, pProperyNames[i], sal_True );
618*b1cdbd2cSJim Jagielski switch ( nPropertyHandle )
619*b1cdbd2cSJim Jagielski {
620*b1cdbd2cSJim Jagielski case UPH_DEFAULT_LOCALE :
621*b1cdbd2cSJim Jagielski { rOpt.bRODefaultLanguage = pROStates[i]; rOpt.nDefaultLanguage = lcl_CfgAnyToLanguage( rVal ); } break;
622*b1cdbd2cSJim Jagielski case UPH_ACTIVE_DICTIONARIES :
623*b1cdbd2cSJim Jagielski { rOpt.bROActiveDics = pROStates[i]; rVal >>= rOpt.aActiveDics; } break;
624*b1cdbd2cSJim Jagielski case UPH_IS_USE_DICTIONARY_LIST :
625*b1cdbd2cSJim Jagielski { rOpt.bROIsUseDictionaryList = pROStates[i]; rVal >>= rOpt.bIsUseDictionaryList; } break;
626*b1cdbd2cSJim Jagielski case UPH_IS_IGNORE_CONTROL_CHARACTERS :
627*b1cdbd2cSJim Jagielski { rOpt.bROIsIgnoreControlCharacters = pROStates[i]; rVal >>= rOpt.bIsIgnoreControlCharacters; } break;
628*b1cdbd2cSJim Jagielski case UPH_DEFAULT_LOCALE_CJK :
629*b1cdbd2cSJim Jagielski { rOpt.bRODefaultLanguage_CJK = pROStates[i]; rOpt.nDefaultLanguage_CJK = lcl_CfgAnyToLanguage( rVal ); } break;
630*b1cdbd2cSJim Jagielski case UPH_DEFAULT_LOCALE_CTL :
631*b1cdbd2cSJim Jagielski { rOpt.bRODefaultLanguage_CTL = pROStates[i]; rOpt.nDefaultLanguage_CTL = lcl_CfgAnyToLanguage( rVal ); } break;
632*b1cdbd2cSJim Jagielski
633*b1cdbd2cSJim Jagielski case UPH_IS_SPELL_UPPER_CASE :
634*b1cdbd2cSJim Jagielski { rOpt.bROIsSpellUpperCase = pROStates[i]; rVal >>= rOpt.bIsSpellUpperCase; } break;
635*b1cdbd2cSJim Jagielski case UPH_IS_SPELL_WITH_DIGITS :
636*b1cdbd2cSJim Jagielski { rOpt.bROIsSpellWithDigits = pROStates[i]; rVal >>= rOpt.bIsSpellWithDigits; } break;
637*b1cdbd2cSJim Jagielski case UPH_IS_SPELL_CAPITALIZATION :
638*b1cdbd2cSJim Jagielski { rOpt.bROIsSpellCapitalization = pROStates[i]; rVal >>= rOpt.bIsSpellCapitalization; } break;
639*b1cdbd2cSJim Jagielski case UPH_IS_SPELL_AUTO :
640*b1cdbd2cSJim Jagielski { rOpt.bROIsSpellAuto = pROStates[i]; rVal >>= rOpt.bIsSpellAuto; } break;
641*b1cdbd2cSJim Jagielski case UPH_IS_SPELL_SPECIAL :
642*b1cdbd2cSJim Jagielski { rOpt.bROIsSpellSpecial = pROStates[i]; rVal >>= rOpt.bIsSpellSpecial; } break;
643*b1cdbd2cSJim Jagielski case UPH_IS_WRAP_REVERSE :
644*b1cdbd2cSJim Jagielski { rOpt.bROIsSpellReverse = pROStates[i]; rVal >>= rOpt.bIsSpellReverse; } break;
645*b1cdbd2cSJim Jagielski
646*b1cdbd2cSJim Jagielski case UPH_HYPH_MIN_LEADING :
647*b1cdbd2cSJim Jagielski { rOpt.bROHyphMinLeading = pROStates[i]; rVal >>= rOpt.nHyphMinLeading; } break;
648*b1cdbd2cSJim Jagielski case UPH_HYPH_MIN_TRAILING :
649*b1cdbd2cSJim Jagielski { rOpt.bROHyphMinTrailing = pROStates[i]; rVal >>= rOpt.nHyphMinTrailing; } break;
650*b1cdbd2cSJim Jagielski case UPH_HYPH_MIN_WORD_LENGTH :
651*b1cdbd2cSJim Jagielski { rOpt.bROHyphMinWordLength = pROStates[i]; rVal >>= rOpt.nHyphMinWordLength; } break;
652*b1cdbd2cSJim Jagielski case UPH_IS_HYPH_SPECIAL :
653*b1cdbd2cSJim Jagielski { rOpt.bROIsHyphSpecial = pROStates[i]; rVal >>= rOpt.bIsHyphSpecial; } break;
654*b1cdbd2cSJim Jagielski case UPH_IS_HYPH_AUTO :
655*b1cdbd2cSJim Jagielski { rOpt.bROIsHyphAuto = pROStates[i]; rVal >>= rOpt.bIsHyphAuto; } break;
656*b1cdbd2cSJim Jagielski
657*b1cdbd2cSJim Jagielski case UPH_ACTIVE_CONVERSION_DICTIONARIES : { rOpt.bROActiveConvDics = pROStates[i]; rVal >>= rOpt.aActiveConvDics; } break;
658*b1cdbd2cSJim Jagielski
659*b1cdbd2cSJim Jagielski case UPH_IS_IGNORE_POST_POSITIONAL_WORD :
660*b1cdbd2cSJim Jagielski { rOpt.bROIsIgnorePostPositionalWord = pROStates[i]; rVal >>= rOpt.bIsIgnorePostPositionalWord; } break;
661*b1cdbd2cSJim Jagielski case UPH_IS_AUTO_CLOSE_DIALOG :
662*b1cdbd2cSJim Jagielski { rOpt.bROIsAutoCloseDialog = pROStates[i]; rVal >>= rOpt.bIsAutoCloseDialog; } break;
663*b1cdbd2cSJim Jagielski case UPH_IS_SHOW_ENTRIES_RECENTLY_USED_FIRST :
664*b1cdbd2cSJim Jagielski { rOpt.bROIsShowEntriesRecentlyUsedFirst = pROStates[i]; rVal >>= rOpt.bIsShowEntriesRecentlyUsedFirst; } break;
665*b1cdbd2cSJim Jagielski case UPH_IS_AUTO_REPLACE_UNIQUE_ENTRIES :
666*b1cdbd2cSJim Jagielski { rOpt.bROIsAutoReplaceUniqueEntries = pROStates[i]; rVal >>= rOpt.bIsAutoReplaceUniqueEntries; } break;
667*b1cdbd2cSJim Jagielski
668*b1cdbd2cSJim Jagielski case UPH_IS_DIRECTION_TO_SIMPLIFIED :
669*b1cdbd2cSJim Jagielski { rOpt.bROIsDirectionToSimplified = pROStates[i];
670*b1cdbd2cSJim Jagielski if( ! (rVal >>= rOpt.bIsDirectionToSimplified) )
671*b1cdbd2cSJim Jagielski {
672*b1cdbd2cSJim Jagielski //default is locale dependent:
673*b1cdbd2cSJim Jagielski if( rOpt.nDefaultLanguage_CJK == LANGUAGE_CHINESE_HONGKONG
674*b1cdbd2cSJim Jagielski || rOpt.nDefaultLanguage_CJK == LANGUAGE_CHINESE_MACAU
675*b1cdbd2cSJim Jagielski || rOpt.nDefaultLanguage_CJK == LANGUAGE_CHINESE_TRADITIONAL )
676*b1cdbd2cSJim Jagielski {
677*b1cdbd2cSJim Jagielski rOpt.bIsDirectionToSimplified = sal_False;
678*b1cdbd2cSJim Jagielski }
679*b1cdbd2cSJim Jagielski else
680*b1cdbd2cSJim Jagielski {
681*b1cdbd2cSJim Jagielski rOpt.bIsDirectionToSimplified = sal_True;
682*b1cdbd2cSJim Jagielski }
683*b1cdbd2cSJim Jagielski }
684*b1cdbd2cSJim Jagielski } break;
685*b1cdbd2cSJim Jagielski case UPH_IS_USE_CHARACTER_VARIANTS :
686*b1cdbd2cSJim Jagielski { rOpt.bROIsUseCharacterVariants = pROStates[i]; rVal >>= rOpt.bIsUseCharacterVariants; } break;
687*b1cdbd2cSJim Jagielski case UPH_IS_TRANSLATE_COMMON_TERMS :
688*b1cdbd2cSJim Jagielski { rOpt.bROIsTranslateCommonTerms = pROStates[i]; rVal >>= rOpt.bIsTranslateCommonTerms; } break;
689*b1cdbd2cSJim Jagielski case UPH_IS_REVERSE_MAPPING :
690*b1cdbd2cSJim Jagielski { rOpt.bROIsReverseMapping = pROStates[i]; rVal >>= rOpt.bIsReverseMapping; } break;
691*b1cdbd2cSJim Jagielski
692*b1cdbd2cSJim Jagielski case UPH_DATA_FILES_CHANGED_CHECK_VALUE :
693*b1cdbd2cSJim Jagielski { rOpt.bRODataFilesChangedCheckValue = pROStates[i]; rVal >>= rOpt.nDataFilesChangedCheckValue; } break;
694*b1cdbd2cSJim Jagielski
695*b1cdbd2cSJim Jagielski case UPH_IS_GRAMMAR_AUTO:
696*b1cdbd2cSJim Jagielski { rOpt.bROIsGrammarAuto = pROStates[i]; rVal >>= rOpt.bIsGrammarAuto; }
697*b1cdbd2cSJim Jagielski break;
698*b1cdbd2cSJim Jagielski case UPH_IS_GRAMMAR_INTERACTIVE:
699*b1cdbd2cSJim Jagielski { rOpt.bROIsGrammarInteractive = pROStates[i]; rVal >>= rOpt.bIsGrammarInteractive; }
700*b1cdbd2cSJim Jagielski break;
701*b1cdbd2cSJim Jagielski
702*b1cdbd2cSJim Jagielski default:
703*b1cdbd2cSJim Jagielski DBG_ASSERT( 0, "unexpected case" );
704*b1cdbd2cSJim Jagielski }
705*b1cdbd2cSJim Jagielski }
706*b1cdbd2cSJim Jagielski
707*b1cdbd2cSJim Jagielski bRes = sal_True;
708*b1cdbd2cSJim Jagielski }
709*b1cdbd2cSJim Jagielski DBG_ASSERT( bRes, "LoadOptions failed" );
710*b1cdbd2cSJim Jagielski
711*b1cdbd2cSJim Jagielski return bRes;
712*b1cdbd2cSJim Jagielski }
713*b1cdbd2cSJim Jagielski
714*b1cdbd2cSJim Jagielski
SaveOptions(const uno::Sequence<OUString> & rProperyNames)715*b1cdbd2cSJim Jagielski sal_Bool SvtLinguConfigItem::SaveOptions( const uno::Sequence< OUString > &rProperyNames )
716*b1cdbd2cSJim Jagielski {
717*b1cdbd2cSJim Jagielski if (!IsModified())
718*b1cdbd2cSJim Jagielski return sal_True;
719*b1cdbd2cSJim Jagielski
720*b1cdbd2cSJim Jagielski osl::MutexGuard aGuard( GetOwnMutex() );
721*b1cdbd2cSJim Jagielski
722*b1cdbd2cSJim Jagielski sal_Bool bRet = sal_False;
723*b1cdbd2cSJim Jagielski const uno::Type &rBOOL = ::getBooleanCppuType();
724*b1cdbd2cSJim Jagielski const uno::Type &rINT16 = ::getCppuType( (sal_Int16 *) NULL );
725*b1cdbd2cSJim Jagielski const uno::Type &rINT32 = ::getCppuType( (sal_Int32 *) NULL );
726*b1cdbd2cSJim Jagielski
727*b1cdbd2cSJim Jagielski sal_Int32 nProps = rProperyNames.getLength();
728*b1cdbd2cSJim Jagielski uno::Sequence< uno::Any > aValues( nProps );
729*b1cdbd2cSJim Jagielski uno::Any *pValue = aValues.getArray();
730*b1cdbd2cSJim Jagielski
731*b1cdbd2cSJim Jagielski if (nProps && aValues.getLength() == nProps)
732*b1cdbd2cSJim Jagielski {
733*b1cdbd2cSJim Jagielski const SvtLinguOptions &rOpt = aOpt;
734*b1cdbd2cSJim Jagielski
735*b1cdbd2cSJim Jagielski OUString aTmp( lcl_LanguageToCfgLocaleStr( rOpt.nDefaultLanguage ) );
736*b1cdbd2cSJim Jagielski *pValue++ = uno::makeAny( aTmp ); // 0
737*b1cdbd2cSJim Jagielski *pValue++ = uno::makeAny( rOpt.aActiveDics ); // 1
738*b1cdbd2cSJim Jagielski pValue++->setValue( &rOpt.bIsUseDictionaryList, rBOOL ); // 2
739*b1cdbd2cSJim Jagielski pValue++->setValue( &rOpt.bIsIgnoreControlCharacters, rBOOL ); // 3
740*b1cdbd2cSJim Jagielski aTmp = lcl_LanguageToCfgLocaleStr( rOpt.nDefaultLanguage_CJK );
741*b1cdbd2cSJim Jagielski *pValue++ = uno::makeAny( aTmp ); // 5
742*b1cdbd2cSJim Jagielski aTmp = lcl_LanguageToCfgLocaleStr( rOpt.nDefaultLanguage_CTL );
743*b1cdbd2cSJim Jagielski *pValue++ = uno::makeAny( aTmp ); // 6
744*b1cdbd2cSJim Jagielski
745*b1cdbd2cSJim Jagielski pValue++->setValue( &rOpt.bIsSpellUpperCase, rBOOL ); // 7
746*b1cdbd2cSJim Jagielski pValue++->setValue( &rOpt.bIsSpellWithDigits, rBOOL ); // 8
747*b1cdbd2cSJim Jagielski pValue++->setValue( &rOpt.bIsSpellCapitalization, rBOOL ); // 9
748*b1cdbd2cSJim Jagielski pValue++->setValue( &rOpt.bIsSpellAuto, rBOOL ); // 10
749*b1cdbd2cSJim Jagielski pValue++->setValue( &rOpt.bIsSpellSpecial, rBOOL ); // 11
750*b1cdbd2cSJim Jagielski pValue++->setValue( &rOpt.bIsSpellReverse, rBOOL ); // 14
751*b1cdbd2cSJim Jagielski
752*b1cdbd2cSJim Jagielski pValue++->setValue( &rOpt.nHyphMinLeading, rINT16 ); // 15
753*b1cdbd2cSJim Jagielski pValue++->setValue( &rOpt.nHyphMinTrailing, rINT16 ); // 16
754*b1cdbd2cSJim Jagielski pValue++->setValue( &rOpt.nHyphMinWordLength, rINT16 ); // 17
755*b1cdbd2cSJim Jagielski pValue++->setValue( &rOpt.bIsHyphSpecial, rBOOL ); // 18
756*b1cdbd2cSJim Jagielski pValue++->setValue( &rOpt.bIsHyphAuto, rBOOL ); // 19
757*b1cdbd2cSJim Jagielski
758*b1cdbd2cSJim Jagielski *pValue++ = uno::makeAny( rOpt.aActiveConvDics ); // 20
759*b1cdbd2cSJim Jagielski
760*b1cdbd2cSJim Jagielski pValue++->setValue( &rOpt.bIsIgnorePostPositionalWord, rBOOL ); // 21
761*b1cdbd2cSJim Jagielski pValue++->setValue( &rOpt.bIsAutoCloseDialog, rBOOL ); // 22
762*b1cdbd2cSJim Jagielski pValue++->setValue( &rOpt.bIsShowEntriesRecentlyUsedFirst, rBOOL ); // 23
763*b1cdbd2cSJim Jagielski pValue++->setValue( &rOpt.bIsAutoReplaceUniqueEntries, rBOOL ); // 24
764*b1cdbd2cSJim Jagielski
765*b1cdbd2cSJim Jagielski pValue++->setValue( &rOpt.bIsDirectionToSimplified, rBOOL ); // 25
766*b1cdbd2cSJim Jagielski pValue++->setValue( &rOpt.bIsUseCharacterVariants, rBOOL ); // 26
767*b1cdbd2cSJim Jagielski pValue++->setValue( &rOpt.bIsTranslateCommonTerms, rBOOL ); // 27
768*b1cdbd2cSJim Jagielski pValue++->setValue( &rOpt.bIsReverseMapping, rBOOL ); // 28
769*b1cdbd2cSJim Jagielski
770*b1cdbd2cSJim Jagielski pValue++->setValue( &rOpt.nDataFilesChangedCheckValue, rINT32 ); // 29
771*b1cdbd2cSJim Jagielski pValue++->setValue( &rOpt.bIsGrammarAuto, rBOOL ); // 30
772*b1cdbd2cSJim Jagielski pValue++->setValue( &rOpt.bIsGrammarInteractive, rBOOL ); // 31
773*b1cdbd2cSJim Jagielski
774*b1cdbd2cSJim Jagielski bRet |= PutProperties( rProperyNames, aValues );
775*b1cdbd2cSJim Jagielski }
776*b1cdbd2cSJim Jagielski
777*b1cdbd2cSJim Jagielski if (bRet)
778*b1cdbd2cSJim Jagielski ClearModified();
779*b1cdbd2cSJim Jagielski
780*b1cdbd2cSJim Jagielski return bRet;
781*b1cdbd2cSJim Jagielski }
782*b1cdbd2cSJim Jagielski
IsReadOnly(const rtl::OUString & rPropertyName) const783*b1cdbd2cSJim Jagielski sal_Bool SvtLinguConfigItem::IsReadOnly( const rtl::OUString &rPropertyName ) const
784*b1cdbd2cSJim Jagielski {
785*b1cdbd2cSJim Jagielski osl::MutexGuard aGuard( GetOwnMutex() );
786*b1cdbd2cSJim Jagielski
787*b1cdbd2cSJim Jagielski sal_Bool bReadOnly = sal_False;
788*b1cdbd2cSJim Jagielski sal_Int32 nHdl;
789*b1cdbd2cSJim Jagielski if (GetHdlByName( nHdl, rPropertyName ))
790*b1cdbd2cSJim Jagielski bReadOnly = IsReadOnly( nHdl );
791*b1cdbd2cSJim Jagielski return bReadOnly;
792*b1cdbd2cSJim Jagielski }
793*b1cdbd2cSJim Jagielski
IsReadOnly(sal_Int32 nPropertyHandle) const794*b1cdbd2cSJim Jagielski sal_Bool SvtLinguConfigItem::IsReadOnly( sal_Int32 nPropertyHandle ) const
795*b1cdbd2cSJim Jagielski {
796*b1cdbd2cSJim Jagielski osl::MutexGuard aGuard( GetOwnMutex() );
797*b1cdbd2cSJim Jagielski
798*b1cdbd2cSJim Jagielski sal_Bool bReadOnly = sal_False;
799*b1cdbd2cSJim Jagielski
800*b1cdbd2cSJim Jagielski const SvtLinguOptions &rOpt = const_cast< SvtLinguConfigItem * >(this)->aOpt;
801*b1cdbd2cSJim Jagielski switch(nPropertyHandle)
802*b1cdbd2cSJim Jagielski {
803*b1cdbd2cSJim Jagielski case UPH_IS_USE_DICTIONARY_LIST : bReadOnly = rOpt.bROIsUseDictionaryList ; break;
804*b1cdbd2cSJim Jagielski case UPH_IS_IGNORE_CONTROL_CHARACTERS : bReadOnly = rOpt.bROIsIgnoreControlCharacters; break;
805*b1cdbd2cSJim Jagielski case UPH_IS_HYPH_AUTO : bReadOnly = rOpt.bROIsHyphAuto ; break;
806*b1cdbd2cSJim Jagielski case UPH_IS_HYPH_SPECIAL : bReadOnly = rOpt.bROIsHyphSpecial ; break;
807*b1cdbd2cSJim Jagielski case UPH_IS_SPELL_AUTO : bReadOnly = rOpt.bROIsSpellAuto ; break;
808*b1cdbd2cSJim Jagielski case UPH_IS_SPELL_SPECIAL : bReadOnly = rOpt.bROIsSpellSpecial ; break;
809*b1cdbd2cSJim Jagielski case UPH_IS_WRAP_REVERSE : bReadOnly = rOpt.bROIsSpellReverse ; break;
810*b1cdbd2cSJim Jagielski case UPH_DEFAULT_LANGUAGE : bReadOnly = rOpt.bRODefaultLanguage ; break;
811*b1cdbd2cSJim Jagielski case UPH_IS_SPELL_CAPITALIZATION : bReadOnly = rOpt.bROIsSpellCapitalization ; break;
812*b1cdbd2cSJim Jagielski case UPH_IS_SPELL_WITH_DIGITS : bReadOnly = rOpt.bROIsSpellWithDigits ; break;
813*b1cdbd2cSJim Jagielski case UPH_IS_SPELL_UPPER_CASE : bReadOnly = rOpt.bROIsSpellUpperCase ; break;
814*b1cdbd2cSJim Jagielski case UPH_HYPH_MIN_LEADING : bReadOnly = rOpt.bROHyphMinLeading ; break;
815*b1cdbd2cSJim Jagielski case UPH_HYPH_MIN_TRAILING : bReadOnly = rOpt.bROHyphMinTrailing ; break;
816*b1cdbd2cSJim Jagielski case UPH_HYPH_MIN_WORD_LENGTH : bReadOnly = rOpt.bROHyphMinWordLength ; break;
817*b1cdbd2cSJim Jagielski case UPH_ACTIVE_DICTIONARIES : bReadOnly = rOpt.bROActiveDics ; break;
818*b1cdbd2cSJim Jagielski case UPH_ACTIVE_CONVERSION_DICTIONARIES : bReadOnly = rOpt.bROActiveConvDics ; break;
819*b1cdbd2cSJim Jagielski case UPH_DEFAULT_LOCALE : bReadOnly = rOpt.bRODefaultLanguage ; break;
820*b1cdbd2cSJim Jagielski case UPH_DEFAULT_LOCALE_CJK : bReadOnly = rOpt.bRODefaultLanguage_CJK ; break;
821*b1cdbd2cSJim Jagielski case UPH_DEFAULT_LOCALE_CTL : bReadOnly = rOpt.bRODefaultLanguage_CTL ; break;
822*b1cdbd2cSJim Jagielski case UPH_IS_IGNORE_POST_POSITIONAL_WORD : bReadOnly = rOpt.bROIsIgnorePostPositionalWord; break;
823*b1cdbd2cSJim Jagielski case UPH_IS_AUTO_CLOSE_DIALOG : bReadOnly = rOpt.bROIsAutoCloseDialog; break;
824*b1cdbd2cSJim Jagielski case UPH_IS_SHOW_ENTRIES_RECENTLY_USED_FIRST : bReadOnly = rOpt.bROIsShowEntriesRecentlyUsedFirst; break;
825*b1cdbd2cSJim Jagielski case UPH_IS_AUTO_REPLACE_UNIQUE_ENTRIES : bReadOnly = rOpt.bROIsAutoReplaceUniqueEntries; break;
826*b1cdbd2cSJim Jagielski case UPH_IS_DIRECTION_TO_SIMPLIFIED : bReadOnly = rOpt.bROIsDirectionToSimplified; break;
827*b1cdbd2cSJim Jagielski case UPH_IS_USE_CHARACTER_VARIANTS : bReadOnly = rOpt.bROIsUseCharacterVariants; break;
828*b1cdbd2cSJim Jagielski case UPH_IS_TRANSLATE_COMMON_TERMS : bReadOnly = rOpt.bROIsTranslateCommonTerms; break;
829*b1cdbd2cSJim Jagielski case UPH_IS_REVERSE_MAPPING : bReadOnly = rOpt.bROIsReverseMapping; break;
830*b1cdbd2cSJim Jagielski case UPH_DATA_FILES_CHANGED_CHECK_VALUE : bReadOnly = rOpt.bRODataFilesChangedCheckValue; break;
831*b1cdbd2cSJim Jagielski case UPH_IS_GRAMMAR_AUTO: bReadOnly = rOpt.bROIsGrammarAuto; break;
832*b1cdbd2cSJim Jagielski case UPH_IS_GRAMMAR_INTERACTIVE: bReadOnly = rOpt.bROIsGrammarInteractive; break;
833*b1cdbd2cSJim Jagielski default :
834*b1cdbd2cSJim Jagielski DBG_ASSERT( 0, "unexpected property handle" );
835*b1cdbd2cSJim Jagielski }
836*b1cdbd2cSJim Jagielski return bReadOnly;
837*b1cdbd2cSJim Jagielski }
838*b1cdbd2cSJim Jagielski
839*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
840*b1cdbd2cSJim Jagielski
841*b1cdbd2cSJim Jagielski static SvtLinguConfigItem *pCfgItem = 0;
842*b1cdbd2cSJim Jagielski static sal_Int32 nCfgItemRefCount = 0;
843*b1cdbd2cSJim Jagielski
844*b1cdbd2cSJim Jagielski static const rtl::OUString aG_SupportedDictionaryFormats( A2OU("SupportedDictionaryFormats") );
845*b1cdbd2cSJim Jagielski static const rtl::OUString aG_Dictionaries( A2OU("Dictionaries") );
846*b1cdbd2cSJim Jagielski static const rtl::OUString aG_Locations( A2OU("Locations") );
847*b1cdbd2cSJim Jagielski static const rtl::OUString aG_Format( A2OU("Format") );
848*b1cdbd2cSJim Jagielski static const rtl::OUString aG_Locales( A2OU("Locales") );
849*b1cdbd2cSJim Jagielski static const rtl::OUString aG_DisabledDictionaries( A2OU("DisabledDictionaries") );
850*b1cdbd2cSJim Jagielski static const rtl::OUString aG_LastActiveDictionaries( A2OU("LastActiveDictionaries") );
851*b1cdbd2cSJim Jagielski
SvtLinguConfig()852*b1cdbd2cSJim Jagielski SvtLinguConfig::SvtLinguConfig()
853*b1cdbd2cSJim Jagielski {
854*b1cdbd2cSJim Jagielski // Global access, must be guarded (multithreading)
855*b1cdbd2cSJim Jagielski osl::MutexGuard aGuard( GetOwnMutex() );
856*b1cdbd2cSJim Jagielski ++nCfgItemRefCount;
857*b1cdbd2cSJim Jagielski }
858*b1cdbd2cSJim Jagielski
859*b1cdbd2cSJim Jagielski
~SvtLinguConfig()860*b1cdbd2cSJim Jagielski SvtLinguConfig::~SvtLinguConfig()
861*b1cdbd2cSJim Jagielski {
862*b1cdbd2cSJim Jagielski osl::MutexGuard aGuard( GetOwnMutex() );
863*b1cdbd2cSJim Jagielski
864*b1cdbd2cSJim Jagielski if (pCfgItem && pCfgItem->IsModified())
865*b1cdbd2cSJim Jagielski pCfgItem->Commit();
866*b1cdbd2cSJim Jagielski
867*b1cdbd2cSJim Jagielski if (--nCfgItemRefCount <= 0)
868*b1cdbd2cSJim Jagielski {
869*b1cdbd2cSJim Jagielski if (pCfgItem)
870*b1cdbd2cSJim Jagielski delete pCfgItem;
871*b1cdbd2cSJim Jagielski pCfgItem = 0;
872*b1cdbd2cSJim Jagielski }
873*b1cdbd2cSJim Jagielski }
874*b1cdbd2cSJim Jagielski
875*b1cdbd2cSJim Jagielski
GetConfigItem()876*b1cdbd2cSJim Jagielski SvtLinguConfigItem & SvtLinguConfig::GetConfigItem()
877*b1cdbd2cSJim Jagielski {
878*b1cdbd2cSJim Jagielski // Global access, must be guarded (multithreading)
879*b1cdbd2cSJim Jagielski osl::MutexGuard aGuard( GetOwnMutex() );
880*b1cdbd2cSJim Jagielski if (!pCfgItem)
881*b1cdbd2cSJim Jagielski {
882*b1cdbd2cSJim Jagielski pCfgItem = new SvtLinguConfigItem;
883*b1cdbd2cSJim Jagielski ItemHolder1::holdConfigItem(E_LINGUCFG);
884*b1cdbd2cSJim Jagielski }
885*b1cdbd2cSJim Jagielski return *pCfgItem;
886*b1cdbd2cSJim Jagielski }
887*b1cdbd2cSJim Jagielski
888*b1cdbd2cSJim Jagielski
GetNodeNames(const OUString & rNode)889*b1cdbd2cSJim Jagielski uno::Sequence< OUString > SvtLinguConfig::GetNodeNames( const OUString &rNode )
890*b1cdbd2cSJim Jagielski {
891*b1cdbd2cSJim Jagielski return GetConfigItem().GetNodeNames( rNode );
892*b1cdbd2cSJim Jagielski }
893*b1cdbd2cSJim Jagielski
894*b1cdbd2cSJim Jagielski
GetProperties(const uno::Sequence<OUString> & rNames)895*b1cdbd2cSJim Jagielski uno::Sequence< uno::Any > SvtLinguConfig::GetProperties( const uno::Sequence< OUString > &rNames )
896*b1cdbd2cSJim Jagielski {
897*b1cdbd2cSJim Jagielski return GetConfigItem().GetProperties(rNames);
898*b1cdbd2cSJim Jagielski }
899*b1cdbd2cSJim Jagielski
900*b1cdbd2cSJim Jagielski
ReplaceSetProperties(const OUString & rNode,uno::Sequence<beans::PropertyValue> rValues)901*b1cdbd2cSJim Jagielski sal_Bool SvtLinguConfig::ReplaceSetProperties(
902*b1cdbd2cSJim Jagielski const OUString &rNode, uno::Sequence< beans::PropertyValue > rValues )
903*b1cdbd2cSJim Jagielski {
904*b1cdbd2cSJim Jagielski return GetConfigItem().ReplaceSetProperties( rNode, rValues );
905*b1cdbd2cSJim Jagielski }
906*b1cdbd2cSJim Jagielski
907*b1cdbd2cSJim Jagielski
GetProperty(const OUString & rPropertyName) const908*b1cdbd2cSJim Jagielski uno::Any SvtLinguConfig::GetProperty( const OUString &rPropertyName ) const
909*b1cdbd2cSJim Jagielski {
910*b1cdbd2cSJim Jagielski return GetConfigItem().GetProperty( rPropertyName );
911*b1cdbd2cSJim Jagielski }
912*b1cdbd2cSJim Jagielski
913*b1cdbd2cSJim Jagielski
GetProperty(sal_Int32 nPropertyHandle) const914*b1cdbd2cSJim Jagielski uno::Any SvtLinguConfig::GetProperty( sal_Int32 nPropertyHandle ) const
915*b1cdbd2cSJim Jagielski {
916*b1cdbd2cSJim Jagielski return GetConfigItem().GetProperty( nPropertyHandle );
917*b1cdbd2cSJim Jagielski }
918*b1cdbd2cSJim Jagielski
919*b1cdbd2cSJim Jagielski
SetProperty(const OUString & rPropertyName,const uno::Any & rValue)920*b1cdbd2cSJim Jagielski sal_Bool SvtLinguConfig::SetProperty( const OUString &rPropertyName, const uno::Any &rValue )
921*b1cdbd2cSJim Jagielski {
922*b1cdbd2cSJim Jagielski return GetConfigItem().SetProperty( rPropertyName, rValue );
923*b1cdbd2cSJim Jagielski }
924*b1cdbd2cSJim Jagielski
925*b1cdbd2cSJim Jagielski
SetProperty(sal_Int32 nPropertyHandle,const uno::Any & rValue)926*b1cdbd2cSJim Jagielski sal_Bool SvtLinguConfig::SetProperty( sal_Int32 nPropertyHandle, const uno::Any &rValue )
927*b1cdbd2cSJim Jagielski {
928*b1cdbd2cSJim Jagielski return GetConfigItem().SetProperty( nPropertyHandle, rValue );
929*b1cdbd2cSJim Jagielski }
930*b1cdbd2cSJim Jagielski
931*b1cdbd2cSJim Jagielski
GetOptions(SvtLinguOptions & rOptions) const932*b1cdbd2cSJim Jagielski sal_Bool SvtLinguConfig::GetOptions( SvtLinguOptions &rOptions ) const
933*b1cdbd2cSJim Jagielski {
934*b1cdbd2cSJim Jagielski return GetConfigItem().GetOptions( rOptions );
935*b1cdbd2cSJim Jagielski }
936*b1cdbd2cSJim Jagielski
937*b1cdbd2cSJim Jagielski
SetOptions(const SvtLinguOptions & rOptions)938*b1cdbd2cSJim Jagielski sal_Bool SvtLinguConfig::SetOptions( const SvtLinguOptions &rOptions )
939*b1cdbd2cSJim Jagielski {
940*b1cdbd2cSJim Jagielski return GetConfigItem().SetOptions( rOptions );
941*b1cdbd2cSJim Jagielski }
942*b1cdbd2cSJim Jagielski
943*b1cdbd2cSJim Jagielski
IsReadOnly(const rtl::OUString & rPropertyName) const944*b1cdbd2cSJim Jagielski sal_Bool SvtLinguConfig::IsReadOnly( const rtl::OUString &rPropertyName ) const
945*b1cdbd2cSJim Jagielski {
946*b1cdbd2cSJim Jagielski return GetConfigItem().IsReadOnly( rPropertyName );
947*b1cdbd2cSJim Jagielski }
948*b1cdbd2cSJim Jagielski
IsReadOnly(sal_Int32 nPropertyHandle) const949*b1cdbd2cSJim Jagielski sal_Bool SvtLinguConfig::IsReadOnly( sal_Int32 nPropertyHandle ) const
950*b1cdbd2cSJim Jagielski {
951*b1cdbd2cSJim Jagielski return GetConfigItem().IsReadOnly( nPropertyHandle );
952*b1cdbd2cSJim Jagielski }
953*b1cdbd2cSJim Jagielski
GetElementNamesFor(const rtl::OUString & rNodeName,uno::Sequence<rtl::OUString> & rElementNames) const954*b1cdbd2cSJim Jagielski sal_Bool SvtLinguConfig::GetElementNamesFor(
955*b1cdbd2cSJim Jagielski const rtl::OUString &rNodeName,
956*b1cdbd2cSJim Jagielski uno::Sequence< rtl::OUString > &rElementNames ) const
957*b1cdbd2cSJim Jagielski {
958*b1cdbd2cSJim Jagielski bool bSuccess = false;
959*b1cdbd2cSJim Jagielski try
960*b1cdbd2cSJim Jagielski {
961*b1cdbd2cSJim Jagielski uno::Reference< container::XNameAccess > xNA( GetMainUpdateAccess(), uno::UNO_QUERY_THROW );
962*b1cdbd2cSJim Jagielski xNA.set( xNA->getByName( A2OU("ServiceManager") ), uno::UNO_QUERY_THROW );
963*b1cdbd2cSJim Jagielski xNA.set( xNA->getByName( rNodeName ), uno::UNO_QUERY_THROW );
964*b1cdbd2cSJim Jagielski rElementNames = xNA->getElementNames();
965*b1cdbd2cSJim Jagielski bSuccess = true;
966*b1cdbd2cSJim Jagielski }
967*b1cdbd2cSJim Jagielski catch (uno::Exception &)
968*b1cdbd2cSJim Jagielski {
969*b1cdbd2cSJim Jagielski }
970*b1cdbd2cSJim Jagielski return bSuccess;
971*b1cdbd2cSJim Jagielski }
972*b1cdbd2cSJim Jagielski
GetOrCreateSetEntry_Impl(const uno::Reference<container::XNameAccess> & rxSetNameAccess,const rtl::OUString & rEntryName)973*b1cdbd2cSJim Jagielski static uno::Reference< container::XNameAccess > GetOrCreateSetEntry_Impl(
974*b1cdbd2cSJim Jagielski const uno::Reference< container::XNameAccess > &rxSetNameAccess,
975*b1cdbd2cSJim Jagielski const rtl::OUString &rEntryName )
976*b1cdbd2cSJim Jagielski {
977*b1cdbd2cSJim Jagielski uno::Reference< container::XNameAccess > xResult;
978*b1cdbd2cSJim Jagielski try
979*b1cdbd2cSJim Jagielski {
980*b1cdbd2cSJim Jagielski if (!rxSetNameAccess->hasByName( rEntryName ))
981*b1cdbd2cSJim Jagielski {
982*b1cdbd2cSJim Jagielski uno::Reference< lang::XSingleServiceFactory > xFactory( rxSetNameAccess, uno::UNO_QUERY_THROW);
983*b1cdbd2cSJim Jagielski uno::Reference< uno::XInterface > xNewEntry( xFactory->createInstance() );
984*b1cdbd2cSJim Jagielski uno::Reference< container::XNameContainer > xNC( rxSetNameAccess, uno::UNO_QUERY_THROW );
985*b1cdbd2cSJim Jagielski xNC->insertByName( rEntryName, makeAny( xNewEntry ) );
986*b1cdbd2cSJim Jagielski }
987*b1cdbd2cSJim Jagielski xResult.set( rxSetNameAccess->getByName( rEntryName ), uno::UNO_QUERY_THROW );
988*b1cdbd2cSJim Jagielski }
989*b1cdbd2cSJim Jagielski catch (uno::Exception &)
990*b1cdbd2cSJim Jagielski {
991*b1cdbd2cSJim Jagielski }
992*b1cdbd2cSJim Jagielski return xResult;
993*b1cdbd2cSJim Jagielski }
994*b1cdbd2cSJim Jagielski
GetSupportedDictionaryFormatsFor(const rtl::OUString & rSetName,const rtl::OUString & rSetEntry,uno::Sequence<rtl::OUString> & rFormatList) const995*b1cdbd2cSJim Jagielski sal_Bool SvtLinguConfig::GetSupportedDictionaryFormatsFor(
996*b1cdbd2cSJim Jagielski const rtl::OUString &rSetName,
997*b1cdbd2cSJim Jagielski const rtl::OUString &rSetEntry,
998*b1cdbd2cSJim Jagielski uno::Sequence< rtl::OUString > &rFormatList ) const
999*b1cdbd2cSJim Jagielski {
1000*b1cdbd2cSJim Jagielski if (rSetName.getLength() == 0 || rSetEntry.getLength() == 0)
1001*b1cdbd2cSJim Jagielski return sal_False;
1002*b1cdbd2cSJim Jagielski bool bSuccess = false;
1003*b1cdbd2cSJim Jagielski try
1004*b1cdbd2cSJim Jagielski {
1005*b1cdbd2cSJim Jagielski uno::Reference< container::XNameAccess > xNA( GetMainUpdateAccess(), uno::UNO_QUERY_THROW );
1006*b1cdbd2cSJim Jagielski xNA.set( xNA->getByName( A2OU("ServiceManager") ), uno::UNO_QUERY_THROW );
1007*b1cdbd2cSJim Jagielski xNA.set( xNA->getByName( rSetName ), uno::UNO_QUERY_THROW );
1008*b1cdbd2cSJim Jagielski xNA.set( xNA->getByName( rSetEntry ), uno::UNO_QUERY_THROW );
1009*b1cdbd2cSJim Jagielski if (xNA->getByName( aG_SupportedDictionaryFormats ) >>= rFormatList)
1010*b1cdbd2cSJim Jagielski bSuccess = true;
1011*b1cdbd2cSJim Jagielski DBG_ASSERT( rFormatList.getLength(), "supported dictionary format list is empty" );
1012*b1cdbd2cSJim Jagielski }
1013*b1cdbd2cSJim Jagielski catch (uno::Exception &)
1014*b1cdbd2cSJim Jagielski {
1015*b1cdbd2cSJim Jagielski }
1016*b1cdbd2cSJim Jagielski return bSuccess;
1017*b1cdbd2cSJim Jagielski }
1018*b1cdbd2cSJim Jagielski
SetOrCreateSupportedDictionaryFormatsFor(const rtl::OUString & rSetName,const rtl::OUString & rSetEntry,const uno::Sequence<rtl::OUString> & rFormatList) const1019*b1cdbd2cSJim Jagielski void SvtLinguConfig::SetOrCreateSupportedDictionaryFormatsFor(
1020*b1cdbd2cSJim Jagielski const rtl::OUString &rSetName,
1021*b1cdbd2cSJim Jagielski const rtl::OUString &rSetEntry,
1022*b1cdbd2cSJim Jagielski const uno::Sequence< rtl::OUString > &rFormatList ) const
1023*b1cdbd2cSJim Jagielski {
1024*b1cdbd2cSJim Jagielski if (rSetName.getLength() == 0 || rSetEntry.getLength() == 0)
1025*b1cdbd2cSJim Jagielski return;
1026*b1cdbd2cSJim Jagielski try
1027*b1cdbd2cSJim Jagielski {
1028*b1cdbd2cSJim Jagielski DBG_ASSERT( rFormatList.getLength(), "applying empty format list. Really??" );
1029*b1cdbd2cSJim Jagielski
1030*b1cdbd2cSJim Jagielski uno::Reference< util::XChangesBatch > xUpdateAccess( GetMainUpdateAccess() );
1031*b1cdbd2cSJim Jagielski uno::Reference< container::XNameAccess > xNA( xUpdateAccess, uno::UNO_QUERY_THROW );
1032*b1cdbd2cSJim Jagielski xNA.set( xNA->getByName( A2OU("ServiceManager") ), uno::UNO_QUERY_THROW );
1033*b1cdbd2cSJim Jagielski xNA.set( xNA->getByName( rSetName ), uno::UNO_QUERY_THROW );
1034*b1cdbd2cSJim Jagielski xNA = GetOrCreateSetEntry_Impl( xNA, rSetEntry );
1035*b1cdbd2cSJim Jagielski
1036*b1cdbd2cSJim Jagielski uno::Reference< container::XNameReplace > xNR( xNA, uno::UNO_QUERY_THROW );
1037*b1cdbd2cSJim Jagielski xNR->replaceByName( aG_SupportedDictionaryFormats, uno::makeAny( rFormatList ) );
1038*b1cdbd2cSJim Jagielski
1039*b1cdbd2cSJim Jagielski xUpdateAccess->commitChanges();
1040*b1cdbd2cSJim Jagielski }
1041*b1cdbd2cSJim Jagielski catch (uno::Exception &)
1042*b1cdbd2cSJim Jagielski {
1043*b1cdbd2cSJim Jagielski }
1044*b1cdbd2cSJim Jagielski }
1045*b1cdbd2cSJim Jagielski
1046*b1cdbd2cSJim Jagielski
1047*b1cdbd2cSJim Jagielski static uno::WeakReference< util::XMacroExpander > aG_xMacroExpander;
1048*b1cdbd2cSJim Jagielski
lcl_GetMacroExpander()1049*b1cdbd2cSJim Jagielski static uno::Reference< util::XMacroExpander > lcl_GetMacroExpander()
1050*b1cdbd2cSJim Jagielski {
1051*b1cdbd2cSJim Jagielski uno::Reference< util::XMacroExpander > xMacroExpander( aG_xMacroExpander );
1052*b1cdbd2cSJim Jagielski if ( !xMacroExpander.is() )
1053*b1cdbd2cSJim Jagielski {
1054*b1cdbd2cSJim Jagielski if ( !xMacroExpander.is() )
1055*b1cdbd2cSJim Jagielski {
1056*b1cdbd2cSJim Jagielski uno::Reference< uno::XComponentContext > xContext;
1057*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySet > xProps( ::comphelper::getProcessServiceFactory(), uno::UNO_QUERY );
1058*b1cdbd2cSJim Jagielski xProps->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ))) >>= xContext;
1059*b1cdbd2cSJim Jagielski if ( xContext.is() )
1060*b1cdbd2cSJim Jagielski {
1061*b1cdbd2cSJim Jagielski aG_xMacroExpander = uno::Reference< com::sun::star::util::XMacroExpander >( xContext->getValueByName(
1062*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM( "/singletons/com.sun.star.util.theMacroExpander"))),
1063*b1cdbd2cSJim Jagielski uno::UNO_QUERY );
1064*b1cdbd2cSJim Jagielski xMacroExpander = aG_xMacroExpander;
1065*b1cdbd2cSJim Jagielski }
1066*b1cdbd2cSJim Jagielski }
1067*b1cdbd2cSJim Jagielski }
1068*b1cdbd2cSJim Jagielski
1069*b1cdbd2cSJim Jagielski return xMacroExpander;
1070*b1cdbd2cSJim Jagielski }
1071*b1cdbd2cSJim Jagielski
1072*b1cdbd2cSJim Jagielski
lcl_GetFileUrlFromOrigin(OUString & rFileUrl,const OUString & rOrigin,uno::Reference<util::XMacroExpander> & rxMacroExpander)1073*b1cdbd2cSJim Jagielski static bool lcl_GetFileUrlFromOrigin(
1074*b1cdbd2cSJim Jagielski OUString /*out*/ &rFileUrl,
1075*b1cdbd2cSJim Jagielski const OUString &rOrigin,
1076*b1cdbd2cSJim Jagielski uno::Reference< util::XMacroExpander > &rxMacroExpander )
1077*b1cdbd2cSJim Jagielski {
1078*b1cdbd2cSJim Jagielski bool bSuccess = false;
1079*b1cdbd2cSJim Jagielski if (rOrigin.getLength() > 0 && rxMacroExpander.is())
1080*b1cdbd2cSJim Jagielski {
1081*b1cdbd2cSJim Jagielski rtl::OUString aURL( rOrigin );
1082*b1cdbd2cSJim Jagielski if (( aURL.compareToAscii( RTL_CONSTASCII_STRINGPARAM( EXPAND_PROTOCOL )) == 0 ) &&
1083*b1cdbd2cSJim Jagielski rxMacroExpander.is() )
1084*b1cdbd2cSJim Jagielski {
1085*b1cdbd2cSJim Jagielski // cut protocol
1086*b1cdbd2cSJim Jagielski OUString aMacro( aURL.copy( sizeof ( EXPAND_PROTOCOL ) -1 ) );
1087*b1cdbd2cSJim Jagielski // decode uric class chars
1088*b1cdbd2cSJim Jagielski aMacro = Uri::decode( aMacro, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8 );
1089*b1cdbd2cSJim Jagielski // expand macro string
1090*b1cdbd2cSJim Jagielski aURL = rxMacroExpander->expandMacros( aMacro );
1091*b1cdbd2cSJim Jagielski
1092*b1cdbd2cSJim Jagielski bool bIsFileUrl = aURL.compareToAscii( RTL_CONSTASCII_STRINGPARAM( FILE_PROTOCOL )) == 0;
1093*b1cdbd2cSJim Jagielski if (bIsFileUrl)
1094*b1cdbd2cSJim Jagielski {
1095*b1cdbd2cSJim Jagielski rFileUrl = aURL;
1096*b1cdbd2cSJim Jagielski bSuccess = true;
1097*b1cdbd2cSJim Jagielski }
1098*b1cdbd2cSJim Jagielski else
1099*b1cdbd2cSJim Jagielski {
1100*b1cdbd2cSJim Jagielski DBG_ASSERT( bIsFileUrl, "not a file URL");
1101*b1cdbd2cSJim Jagielski }
1102*b1cdbd2cSJim Jagielski }
1103*b1cdbd2cSJim Jagielski else
1104*b1cdbd2cSJim Jagielski {
1105*b1cdbd2cSJim Jagielski DBG_ASSERT( 0, "failed to get file URL" );
1106*b1cdbd2cSJim Jagielski }
1107*b1cdbd2cSJim Jagielski }
1108*b1cdbd2cSJim Jagielski return bSuccess;
1109*b1cdbd2cSJim Jagielski }
1110*b1cdbd2cSJim Jagielski
1111*b1cdbd2cSJim Jagielski
GetDictionaryEntry(const rtl::OUString & rNodeName,SvtLinguConfigDictionaryEntry & rDicEntry) const1112*b1cdbd2cSJim Jagielski sal_Bool SvtLinguConfig::GetDictionaryEntry(
1113*b1cdbd2cSJim Jagielski const rtl::OUString &rNodeName,
1114*b1cdbd2cSJim Jagielski SvtLinguConfigDictionaryEntry &rDicEntry ) const
1115*b1cdbd2cSJim Jagielski {
1116*b1cdbd2cSJim Jagielski if (rNodeName.getLength() == 0)
1117*b1cdbd2cSJim Jagielski return sal_False;
1118*b1cdbd2cSJim Jagielski bool bSuccess = false;
1119*b1cdbd2cSJim Jagielski try
1120*b1cdbd2cSJim Jagielski {
1121*b1cdbd2cSJim Jagielski uno::Reference< container::XNameAccess > xNA( GetMainUpdateAccess(), uno::UNO_QUERY_THROW );
1122*b1cdbd2cSJim Jagielski xNA.set( xNA->getByName( A2OU("ServiceManager") ), uno::UNO_QUERY_THROW );
1123*b1cdbd2cSJim Jagielski xNA.set( xNA->getByName( aG_Dictionaries ), uno::UNO_QUERY_THROW );
1124*b1cdbd2cSJim Jagielski xNA.set( xNA->getByName( rNodeName ), uno::UNO_QUERY_THROW );
1125*b1cdbd2cSJim Jagielski
1126*b1cdbd2cSJim Jagielski // read group data...
1127*b1cdbd2cSJim Jagielski uno::Sequence< rtl::OUString > aLocations;
1128*b1cdbd2cSJim Jagielski rtl::OUString aFormatName;
1129*b1cdbd2cSJim Jagielski uno::Sequence< rtl::OUString > aLocaleNames;
1130*b1cdbd2cSJim Jagielski bSuccess = (xNA->getByName( aG_Locations ) >>= aLocations) &&
1131*b1cdbd2cSJim Jagielski (xNA->getByName( aG_Format ) >>= aFormatName) &&
1132*b1cdbd2cSJim Jagielski (xNA->getByName( aG_Locales ) >>= aLocaleNames);
1133*b1cdbd2cSJim Jagielski DBG_ASSERT( aLocations.getLength(), "Dictionary locations not set" );
1134*b1cdbd2cSJim Jagielski DBG_ASSERT( aFormatName.getLength(), "Dictionary format name not set" );
1135*b1cdbd2cSJim Jagielski DBG_ASSERT( aLocaleNames.getLength(), "No locales set for the dictionary" );
1136*b1cdbd2cSJim Jagielski
1137*b1cdbd2cSJim Jagielski // if sucessful continue
1138*b1cdbd2cSJim Jagielski if (bSuccess)
1139*b1cdbd2cSJim Jagielski {
1140*b1cdbd2cSJim Jagielski // get file URL's for the locations
1141*b1cdbd2cSJim Jagielski uno::Reference< util::XMacroExpander > xMacroExpander( lcl_GetMacroExpander() );
1142*b1cdbd2cSJim Jagielski for (sal_Int32 i = 0; i < aLocations.getLength(); ++i)
1143*b1cdbd2cSJim Jagielski {
1144*b1cdbd2cSJim Jagielski rtl::OUString &rLocation = aLocations[i];
1145*b1cdbd2cSJim Jagielski if (!lcl_GetFileUrlFromOrigin( rLocation, rLocation, xMacroExpander ))
1146*b1cdbd2cSJim Jagielski bSuccess = false;
1147*b1cdbd2cSJim Jagielski }
1148*b1cdbd2cSJim Jagielski
1149*b1cdbd2cSJim Jagielski // if everything was fine return the result
1150*b1cdbd2cSJim Jagielski if (bSuccess)
1151*b1cdbd2cSJim Jagielski {
1152*b1cdbd2cSJim Jagielski rDicEntry.aLocations = aLocations;
1153*b1cdbd2cSJim Jagielski rDicEntry.aFormatName = aFormatName;
1154*b1cdbd2cSJim Jagielski rDicEntry.aLocaleNames = aLocaleNames;
1155*b1cdbd2cSJim Jagielski }
1156*b1cdbd2cSJim Jagielski }
1157*b1cdbd2cSJim Jagielski }
1158*b1cdbd2cSJim Jagielski catch (uno::Exception &)
1159*b1cdbd2cSJim Jagielski {
1160*b1cdbd2cSJim Jagielski }
1161*b1cdbd2cSJim Jagielski return bSuccess;
1162*b1cdbd2cSJim Jagielski }
1163*b1cdbd2cSJim Jagielski
SetOrCreateDictionaryEntry(const rtl::OUString & rNodeName,const SvtLinguConfigDictionaryEntry & rDicEntry) const1164*b1cdbd2cSJim Jagielski void SvtLinguConfig::SetOrCreateDictionaryEntry(
1165*b1cdbd2cSJim Jagielski const rtl::OUString &rNodeName,
1166*b1cdbd2cSJim Jagielski const SvtLinguConfigDictionaryEntry &rDicEntry ) const
1167*b1cdbd2cSJim Jagielski {
1168*b1cdbd2cSJim Jagielski if (rNodeName.getLength() == 0)
1169*b1cdbd2cSJim Jagielski return;
1170*b1cdbd2cSJim Jagielski try
1171*b1cdbd2cSJim Jagielski {
1172*b1cdbd2cSJim Jagielski uno::Reference< util::XChangesBatch > xUpdateAccess( GetMainUpdateAccess() );
1173*b1cdbd2cSJim Jagielski uno::Reference< container::XNameAccess > xNA( xUpdateAccess, uno::UNO_QUERY_THROW );
1174*b1cdbd2cSJim Jagielski xNA.set( xNA->getByName( A2OU("ServiceManager") ), uno::UNO_QUERY_THROW );
1175*b1cdbd2cSJim Jagielski xNA.set( xNA->getByName( aG_Dictionaries ), uno::UNO_QUERY_THROW );
1176*b1cdbd2cSJim Jagielski xNA = GetOrCreateSetEntry_Impl( xNA, rNodeName );
1177*b1cdbd2cSJim Jagielski
1178*b1cdbd2cSJim Jagielski DBG_ASSERT( rDicEntry.aLocations.getLength(), "Applying empty dictionary locations. Really correct??" );
1179*b1cdbd2cSJim Jagielski DBG_ASSERT( rDicEntry.aFormatName.getLength(), "Applying empty dictionary format name. Really correct??" );
1180*b1cdbd2cSJim Jagielski DBG_ASSERT( rDicEntry.aLocaleNames.getLength(), "Applying empty list of locales for the dictionary. Really correct??" );
1181*b1cdbd2cSJim Jagielski
1182*b1cdbd2cSJim Jagielski uno::Reference< container::XNameReplace > xNR( xNA, uno::UNO_QUERY_THROW );
1183*b1cdbd2cSJim Jagielski xNR->replaceByName( aG_Locations, uno::makeAny( rDicEntry.aLocations ) );
1184*b1cdbd2cSJim Jagielski xNR->replaceByName( aG_Format, uno::makeAny( rDicEntry.aFormatName ) );
1185*b1cdbd2cSJim Jagielski xNR->replaceByName( aG_Locales, uno::makeAny( rDicEntry.aLocaleNames ) );
1186*b1cdbd2cSJim Jagielski
1187*b1cdbd2cSJim Jagielski xUpdateAccess->commitChanges();
1188*b1cdbd2cSJim Jagielski }
1189*b1cdbd2cSJim Jagielski catch (uno::Exception &)
1190*b1cdbd2cSJim Jagielski {
1191*b1cdbd2cSJim Jagielski }
1192*b1cdbd2cSJim Jagielski }
1193*b1cdbd2cSJim Jagielski
GetDisabledDictionaries() const1194*b1cdbd2cSJim Jagielski uno::Sequence< rtl::OUString > SvtLinguConfig::GetDisabledDictionaries() const
1195*b1cdbd2cSJim Jagielski {
1196*b1cdbd2cSJim Jagielski uno::Sequence< rtl::OUString > aResult;
1197*b1cdbd2cSJim Jagielski try
1198*b1cdbd2cSJim Jagielski {
1199*b1cdbd2cSJim Jagielski uno::Reference< container::XNameAccess > xNA( GetMainUpdateAccess(), uno::UNO_QUERY_THROW );
1200*b1cdbd2cSJim Jagielski xNA.set( xNA->getByName( A2OU("ServiceManager") ), uno::UNO_QUERY_THROW );
1201*b1cdbd2cSJim Jagielski xNA->getByName( aG_DisabledDictionaries ) >>= aResult;
1202*b1cdbd2cSJim Jagielski }
1203*b1cdbd2cSJim Jagielski catch (uno::Exception &)
1204*b1cdbd2cSJim Jagielski {
1205*b1cdbd2cSJim Jagielski }
1206*b1cdbd2cSJim Jagielski return aResult;
1207*b1cdbd2cSJim Jagielski }
1208*b1cdbd2cSJim Jagielski
SetDisabledDictionaries(const uno::Sequence<rtl::OUString> & rDictionaries) const1209*b1cdbd2cSJim Jagielski void SvtLinguConfig::SetDisabledDictionaries(
1210*b1cdbd2cSJim Jagielski const uno::Sequence< rtl::OUString > &rDictionaries ) const
1211*b1cdbd2cSJim Jagielski {
1212*b1cdbd2cSJim Jagielski try
1213*b1cdbd2cSJim Jagielski {
1214*b1cdbd2cSJim Jagielski uno::Reference< util::XChangesBatch > xUpdateAccess( GetMainUpdateAccess() );
1215*b1cdbd2cSJim Jagielski uno::Reference< container::XNameAccess > xNA( xUpdateAccess, uno::UNO_QUERY_THROW );
1216*b1cdbd2cSJim Jagielski xNA.set( xNA->getByName( A2OU("ServiceManager") ), uno::UNO_QUERY_THROW );
1217*b1cdbd2cSJim Jagielski if (xNA->hasByName( aG_DisabledDictionaries ))
1218*b1cdbd2cSJim Jagielski {
1219*b1cdbd2cSJim Jagielski uno::Reference< container::XNameReplace > xNR( xNA, uno::UNO_QUERY_THROW );
1220*b1cdbd2cSJim Jagielski xNR->replaceByName( aG_DisabledDictionaries, makeAny( rDictionaries ) );
1221*b1cdbd2cSJim Jagielski }
1222*b1cdbd2cSJim Jagielski else
1223*b1cdbd2cSJim Jagielski {
1224*b1cdbd2cSJim Jagielski uno::Reference< container::XNameContainer > xNC( xNA, uno::UNO_QUERY_THROW );
1225*b1cdbd2cSJim Jagielski xNC->insertByName( aG_DisabledDictionaries, makeAny( rDictionaries ) );
1226*b1cdbd2cSJim Jagielski }
1227*b1cdbd2cSJim Jagielski
1228*b1cdbd2cSJim Jagielski xUpdateAccess->commitChanges();
1229*b1cdbd2cSJim Jagielski }
1230*b1cdbd2cSJim Jagielski catch (uno::Exception &)
1231*b1cdbd2cSJim Jagielski {
1232*b1cdbd2cSJim Jagielski }
1233*b1cdbd2cSJim Jagielski }
1234*b1cdbd2cSJim Jagielski
GetActiveDictionariesByFormat(const rtl::OUString & rFormatName)1235*b1cdbd2cSJim Jagielski std::vector< SvtLinguConfigDictionaryEntry > SvtLinguConfig::GetActiveDictionariesByFormat(
1236*b1cdbd2cSJim Jagielski const rtl::OUString &rFormatName )
1237*b1cdbd2cSJim Jagielski {
1238*b1cdbd2cSJim Jagielski std::vector< SvtLinguConfigDictionaryEntry > aRes;
1239*b1cdbd2cSJim Jagielski if (rFormatName.getLength() == 0)
1240*b1cdbd2cSJim Jagielski return aRes;
1241*b1cdbd2cSJim Jagielski
1242*b1cdbd2cSJim Jagielski try
1243*b1cdbd2cSJim Jagielski {
1244*b1cdbd2cSJim Jagielski uno::Sequence< rtl::OUString > aElementNames;
1245*b1cdbd2cSJim Jagielski GetElementNamesFor( aG_Dictionaries, aElementNames );
1246*b1cdbd2cSJim Jagielski sal_Int32 nLen = aElementNames.getLength();
1247*b1cdbd2cSJim Jagielski const rtl::OUString *pElementNames = aElementNames.getConstArray();
1248*b1cdbd2cSJim Jagielski
1249*b1cdbd2cSJim Jagielski SvtLinguConfigDictionaryEntry aDicEntry;
1250*b1cdbd2cSJim Jagielski for (sal_Int32 i = 0; i < nLen; ++i)
1251*b1cdbd2cSJim Jagielski {
1252*b1cdbd2cSJim Jagielski // does dictionary match the format we are looking for?
1253*b1cdbd2cSJim Jagielski if (GetDictionaryEntry( pElementNames[i], aDicEntry ) &&
1254*b1cdbd2cSJim Jagielski aDicEntry.aFormatName == rFormatName)
1255*b1cdbd2cSJim Jagielski {
1256*b1cdbd2cSJim Jagielski // check if it is active or not
1257*b1cdbd2cSJim Jagielski bool bDicIsActive = true;
1258*b1cdbd2cSJim Jagielski const uno::Sequence< rtl::OUString > aDisabledDics( GetDisabledDictionaries() );
1259*b1cdbd2cSJim Jagielski for (sal_Int32 k = 0; bDicIsActive && k < aDisabledDics.getLength(); ++k)
1260*b1cdbd2cSJim Jagielski {
1261*b1cdbd2cSJim Jagielski if (aDisabledDics[k] == pElementNames[i])
1262*b1cdbd2cSJim Jagielski bDicIsActive = false;
1263*b1cdbd2cSJim Jagielski }
1264*b1cdbd2cSJim Jagielski
1265*b1cdbd2cSJim Jagielski if (bDicIsActive)
1266*b1cdbd2cSJim Jagielski {
1267*b1cdbd2cSJim Jagielski DBG_ASSERT( aDicEntry.aFormatName.getLength(),
1268*b1cdbd2cSJim Jagielski "FormatName not set" );
1269*b1cdbd2cSJim Jagielski DBG_ASSERT( aDicEntry.aLocations.getLength(),
1270*b1cdbd2cSJim Jagielski "Locations not set" );
1271*b1cdbd2cSJim Jagielski DBG_ASSERT( aDicEntry.aLocaleNames.getLength(),
1272*b1cdbd2cSJim Jagielski "Locales not set" );
1273*b1cdbd2cSJim Jagielski aRes.push_back( aDicEntry );
1274*b1cdbd2cSJim Jagielski }
1275*b1cdbd2cSJim Jagielski }
1276*b1cdbd2cSJim Jagielski }
1277*b1cdbd2cSJim Jagielski }
1278*b1cdbd2cSJim Jagielski catch (uno::Exception &)
1279*b1cdbd2cSJim Jagielski {
1280*b1cdbd2cSJim Jagielski }
1281*b1cdbd2cSJim Jagielski
1282*b1cdbd2cSJim Jagielski return aRes;
1283*b1cdbd2cSJim Jagielski }
1284*b1cdbd2cSJim Jagielski
1285*b1cdbd2cSJim Jagielski
GetMainUpdateAccess() const1286*b1cdbd2cSJim Jagielski uno::Reference< util::XChangesBatch > SvtLinguConfig::GetMainUpdateAccess() const
1287*b1cdbd2cSJim Jagielski {
1288*b1cdbd2cSJim Jagielski if (!m_xMainUpdateAccess.is())
1289*b1cdbd2cSJim Jagielski {
1290*b1cdbd2cSJim Jagielski try
1291*b1cdbd2cSJim Jagielski {
1292*b1cdbd2cSJim Jagielski // get configuration provider
1293*b1cdbd2cSJim Jagielski uno::Reference< lang::XMultiServiceFactory > xConfigurationProvider;
1294*b1cdbd2cSJim Jagielski uno::Reference< lang::XMultiServiceFactory > xMgr = comphelper::getProcessServiceFactory();
1295*b1cdbd2cSJim Jagielski if (xMgr.is())
1296*b1cdbd2cSJim Jagielski {
1297*b1cdbd2cSJim Jagielski xConfigurationProvider = uno::Reference< lang::XMultiServiceFactory > (
1298*b1cdbd2cSJim Jagielski xMgr->createInstance( OUString( RTL_CONSTASCII_USTRINGPARAM(
1299*b1cdbd2cSJim Jagielski "com.sun.star.configuration.ConfigurationProvider" ) ) ),
1300*b1cdbd2cSJim Jagielski uno::UNO_QUERY_THROW ) ;
1301*b1cdbd2cSJim Jagielski }
1302*b1cdbd2cSJim Jagielski
1303*b1cdbd2cSJim Jagielski // get configuration update access
1304*b1cdbd2cSJim Jagielski beans::PropertyValue aValue;
1305*b1cdbd2cSJim Jagielski aValue.Name = A2OU( "nodepath" );
1306*b1cdbd2cSJim Jagielski aValue.Value = uno::makeAny( A2OU("org.openoffice.Office.Linguistic") );
1307*b1cdbd2cSJim Jagielski uno::Sequence< uno::Any > aProps(1);
1308*b1cdbd2cSJim Jagielski aProps[0] <<= aValue;
1309*b1cdbd2cSJim Jagielski m_xMainUpdateAccess = uno::Reference< util::XChangesBatch >(
1310*b1cdbd2cSJim Jagielski xConfigurationProvider->createInstanceWithArguments(
1311*b1cdbd2cSJim Jagielski A2OU( "com.sun.star.configuration.ConfigurationUpdateAccess" ), aProps ),
1312*b1cdbd2cSJim Jagielski uno::UNO_QUERY_THROW );
1313*b1cdbd2cSJim Jagielski }
1314*b1cdbd2cSJim Jagielski catch (uno::Exception &)
1315*b1cdbd2cSJim Jagielski {
1316*b1cdbd2cSJim Jagielski }
1317*b1cdbd2cSJim Jagielski }
1318*b1cdbd2cSJim Jagielski
1319*b1cdbd2cSJim Jagielski return m_xMainUpdateAccess;
1320*b1cdbd2cSJim Jagielski }
1321*b1cdbd2cSJim Jagielski
1322*b1cdbd2cSJim Jagielski
GetVendorImageUrl_Impl(const rtl::OUString & rServiceImplName,const rtl::OUString & rImageName) const1323*b1cdbd2cSJim Jagielski rtl::OUString SvtLinguConfig::GetVendorImageUrl_Impl(
1324*b1cdbd2cSJim Jagielski const rtl::OUString &rServiceImplName,
1325*b1cdbd2cSJim Jagielski const rtl::OUString &rImageName ) const
1326*b1cdbd2cSJim Jagielski {
1327*b1cdbd2cSJim Jagielski rtl::OUString aRes;
1328*b1cdbd2cSJim Jagielski try
1329*b1cdbd2cSJim Jagielski {
1330*b1cdbd2cSJim Jagielski uno::Reference< container::XNameAccess > xImagesNA( GetMainUpdateAccess(), uno::UNO_QUERY_THROW );
1331*b1cdbd2cSJim Jagielski xImagesNA.set( xImagesNA->getByName( A2OU("Images") ), uno::UNO_QUERY_THROW );
1332*b1cdbd2cSJim Jagielski
1333*b1cdbd2cSJim Jagielski uno::Reference< container::XNameAccess > xNA( xImagesNA->getByName( A2OU("ServiceNameEntries") ), uno::UNO_QUERY_THROW );
1334*b1cdbd2cSJim Jagielski xNA.set( xNA->getByName( rServiceImplName ), uno::UNO_QUERY_THROW );
1335*b1cdbd2cSJim Jagielski uno::Any aAny( xNA->getByName( A2OU("VendorImagesNode") ) );
1336*b1cdbd2cSJim Jagielski rtl::OUString aVendorImagesNode;
1337*b1cdbd2cSJim Jagielski if (aAny >>= aVendorImagesNode)
1338*b1cdbd2cSJim Jagielski {
1339*b1cdbd2cSJim Jagielski xNA = xImagesNA;
1340*b1cdbd2cSJim Jagielski xNA.set( xNA->getByName( A2OU("VendorImages") ), uno::UNO_QUERY_THROW );
1341*b1cdbd2cSJim Jagielski xNA.set( xNA->getByName( aVendorImagesNode ), uno::UNO_QUERY_THROW );
1342*b1cdbd2cSJim Jagielski aAny = xNA->getByName( rImageName );
1343*b1cdbd2cSJim Jagielski rtl::OUString aTmp;
1344*b1cdbd2cSJim Jagielski if (aAny >>= aTmp)
1345*b1cdbd2cSJim Jagielski {
1346*b1cdbd2cSJim Jagielski uno::Reference< util::XMacroExpander > xMacroExpander( lcl_GetMacroExpander() );
1347*b1cdbd2cSJim Jagielski if (lcl_GetFileUrlFromOrigin( aTmp, aTmp, xMacroExpander ))
1348*b1cdbd2cSJim Jagielski aRes = aTmp;
1349*b1cdbd2cSJim Jagielski }
1350*b1cdbd2cSJim Jagielski }
1351*b1cdbd2cSJim Jagielski }
1352*b1cdbd2cSJim Jagielski catch (uno::Exception &)
1353*b1cdbd2cSJim Jagielski {
1354*b1cdbd2cSJim Jagielski DBG_ASSERT( 0, "exception caught. GetVendorImageUrl_Impl failed" );
1355*b1cdbd2cSJim Jagielski }
1356*b1cdbd2cSJim Jagielski return aRes;
1357*b1cdbd2cSJim Jagielski }
1358*b1cdbd2cSJim Jagielski
1359*b1cdbd2cSJim Jagielski
GetSpellAndGrammarDialogImage(const rtl::OUString & rServiceImplName,bool bHighContrast) const1360*b1cdbd2cSJim Jagielski rtl::OUString SvtLinguConfig::GetSpellAndGrammarDialogImage(
1361*b1cdbd2cSJim Jagielski const rtl::OUString &rServiceImplName,
1362*b1cdbd2cSJim Jagielski bool bHighContrast ) const
1363*b1cdbd2cSJim Jagielski {
1364*b1cdbd2cSJim Jagielski rtl::OUString aRes;
1365*b1cdbd2cSJim Jagielski if (rServiceImplName.getLength() > 0)
1366*b1cdbd2cSJim Jagielski {
1367*b1cdbd2cSJim Jagielski rtl::OUString aImageName( A2OU( bHighContrast ? "SpellAndGrammarDialogImage_HC" : "SpellAndGrammarDialogImage" ));
1368*b1cdbd2cSJim Jagielski rtl::OUString aPath( GetVendorImageUrl_Impl( rServiceImplName, aImageName ) );
1369*b1cdbd2cSJim Jagielski aRes = aPath;
1370*b1cdbd2cSJim Jagielski }
1371*b1cdbd2cSJim Jagielski return aRes;
1372*b1cdbd2cSJim Jagielski }
1373*b1cdbd2cSJim Jagielski
1374*b1cdbd2cSJim Jagielski
GetSpellAndGrammarContextSuggestionImage(const rtl::OUString & rServiceImplName,bool bHighContrast) const1375*b1cdbd2cSJim Jagielski rtl::OUString SvtLinguConfig::GetSpellAndGrammarContextSuggestionImage(
1376*b1cdbd2cSJim Jagielski const rtl::OUString &rServiceImplName,
1377*b1cdbd2cSJim Jagielski bool bHighContrast ) const
1378*b1cdbd2cSJim Jagielski {
1379*b1cdbd2cSJim Jagielski rtl::OUString aRes;
1380*b1cdbd2cSJim Jagielski if (rServiceImplName.getLength() > 0)
1381*b1cdbd2cSJim Jagielski {
1382*b1cdbd2cSJim Jagielski rtl::OUString aImageName( A2OU( bHighContrast ? "SpellAndGrammarContextMenuSuggestionImage_HC" : "SpellAndGrammarContextMenuSuggestionImage" ));
1383*b1cdbd2cSJim Jagielski rtl::OUString aPath( GetVendorImageUrl_Impl( rServiceImplName, aImageName ) );
1384*b1cdbd2cSJim Jagielski aRes = aPath;
1385*b1cdbd2cSJim Jagielski }
1386*b1cdbd2cSJim Jagielski return aRes;
1387*b1cdbd2cSJim Jagielski }
1388*b1cdbd2cSJim Jagielski
1389*b1cdbd2cSJim Jagielski
GetSpellAndGrammarContextDictionaryImage(const rtl::OUString & rServiceImplName,bool bHighContrast) const1390*b1cdbd2cSJim Jagielski rtl::OUString SvtLinguConfig::GetSpellAndGrammarContextDictionaryImage(
1391*b1cdbd2cSJim Jagielski const rtl::OUString &rServiceImplName,
1392*b1cdbd2cSJim Jagielski bool bHighContrast ) const
1393*b1cdbd2cSJim Jagielski {
1394*b1cdbd2cSJim Jagielski rtl::OUString aRes;
1395*b1cdbd2cSJim Jagielski if (rServiceImplName.getLength() > 0)
1396*b1cdbd2cSJim Jagielski {
1397*b1cdbd2cSJim Jagielski rtl::OUString aImageName( A2OU( bHighContrast ? "SpellAndGrammarContextMenuDictionaryImage_HC" : "SpellAndGrammarContextMenuDictionaryImage" ));
1398*b1cdbd2cSJim Jagielski rtl::OUString aPath( GetVendorImageUrl_Impl( rServiceImplName, aImageName ) );
1399*b1cdbd2cSJim Jagielski aRes = aPath;
1400*b1cdbd2cSJim Jagielski }
1401*b1cdbd2cSJim Jagielski return aRes;
1402*b1cdbd2cSJim Jagielski }
1403*b1cdbd2cSJim Jagielski
1404*b1cdbd2cSJim Jagielski
GetThesaurusDialogImage(const::rtl::OUString & rServiceImplName,bool bHighContrast) const1405*b1cdbd2cSJim Jagielski ::rtl::OUString SvtLinguConfig::GetThesaurusDialogImage(
1406*b1cdbd2cSJim Jagielski const ::rtl::OUString &rServiceImplName,
1407*b1cdbd2cSJim Jagielski bool bHighContrast ) const
1408*b1cdbd2cSJim Jagielski {
1409*b1cdbd2cSJim Jagielski rtl::OUString aRes;
1410*b1cdbd2cSJim Jagielski if (rServiceImplName.getLength() > 0)
1411*b1cdbd2cSJim Jagielski {
1412*b1cdbd2cSJim Jagielski rtl::OUString aImageName( A2OU( bHighContrast ? "ThesaurusDialogImage_HC" : "ThesaurusDialogImage" ));
1413*b1cdbd2cSJim Jagielski rtl::OUString aPath( GetVendorImageUrl_Impl( rServiceImplName, aImageName ) );
1414*b1cdbd2cSJim Jagielski aRes = aPath;
1415*b1cdbd2cSJim Jagielski }
1416*b1cdbd2cSJim Jagielski return aRes;
1417*b1cdbd2cSJim Jagielski }
1418*b1cdbd2cSJim Jagielski
1419*b1cdbd2cSJim Jagielski
GetSynonymsContextImage(const::rtl::OUString & rServiceImplName,bool bHighContrast) const1420*b1cdbd2cSJim Jagielski ::rtl::OUString SvtLinguConfig::GetSynonymsContextImage(
1421*b1cdbd2cSJim Jagielski const ::rtl::OUString &rServiceImplName,
1422*b1cdbd2cSJim Jagielski bool bHighContrast ) const
1423*b1cdbd2cSJim Jagielski {
1424*b1cdbd2cSJim Jagielski rtl::OUString aRes;
1425*b1cdbd2cSJim Jagielski if (rServiceImplName.getLength() > 0)
1426*b1cdbd2cSJim Jagielski {
1427*b1cdbd2cSJim Jagielski rtl::OUString aImageName( A2OU( bHighContrast ? "SynonymsContextMenuImage_HC" : "SynonymsContextMenuImage" ));
1428*b1cdbd2cSJim Jagielski rtl::OUString aPath( GetVendorImageUrl_Impl( rServiceImplName, aImageName ) );
1429*b1cdbd2cSJim Jagielski aRes = aPath;
1430*b1cdbd2cSJim Jagielski }
1431*b1cdbd2cSJim Jagielski return aRes;
1432*b1cdbd2cSJim Jagielski }
1433*b1cdbd2cSJim Jagielski
1434*b1cdbd2cSJim Jagielski
HasVendorImages(const char * pImageName) const1435*b1cdbd2cSJim Jagielski bool SvtLinguConfig::HasVendorImages( const char *pImageName ) const
1436*b1cdbd2cSJim Jagielski {
1437*b1cdbd2cSJim Jagielski bool bRes = false;
1438*b1cdbd2cSJim Jagielski if (pImageName)
1439*b1cdbd2cSJim Jagielski {
1440*b1cdbd2cSJim Jagielski try
1441*b1cdbd2cSJim Jagielski {
1442*b1cdbd2cSJim Jagielski uno::Reference< container::XNameAccess > xNA( GetMainUpdateAccess(), uno::UNO_QUERY_THROW );
1443*b1cdbd2cSJim Jagielski xNA.set( xNA->getByName( A2OU("Images") ), uno::UNO_QUERY_THROW );
1444*b1cdbd2cSJim Jagielski xNA.set( xNA->getByName( A2OU("VendorImages") ), uno::UNO_QUERY_THROW );
1445*b1cdbd2cSJim Jagielski
1446*b1cdbd2cSJim Jagielski uno::Sequence< rtl::OUString > aElementNames( xNA->getElementNames() );
1447*b1cdbd2cSJim Jagielski sal_Int32 nVendors = aElementNames.getLength();
1448*b1cdbd2cSJim Jagielski const rtl::OUString *pVendor = aElementNames.getConstArray();
1449*b1cdbd2cSJim Jagielski for (sal_Int32 i = 0; i < nVendors; ++i)
1450*b1cdbd2cSJim Jagielski {
1451*b1cdbd2cSJim Jagielski uno::Reference< container::XNameAccess > xNA2( xNA->getByName( pVendor[i] ), uno::UNO_QUERY_THROW );
1452*b1cdbd2cSJim Jagielski uno::Sequence< rtl::OUString > aPropNames( xNA2->getElementNames() );
1453*b1cdbd2cSJim Jagielski sal_Int32 nProps = aPropNames.getLength();
1454*b1cdbd2cSJim Jagielski const rtl::OUString *pPropNames = aPropNames.getConstArray();
1455*b1cdbd2cSJim Jagielski for (sal_Int32 k = 0; k < nProps; ++k)
1456*b1cdbd2cSJim Jagielski {
1457*b1cdbd2cSJim Jagielski // for a quicker check we ignore the HC image names here
1458*b1cdbd2cSJim Jagielski const OUString &rName = pPropNames[k];
1459*b1cdbd2cSJim Jagielski if (rName.equalsAscii( pImageName ))
1460*b1cdbd2cSJim Jagielski {
1461*b1cdbd2cSJim Jagielski bRes = true;
1462*b1cdbd2cSJim Jagielski break;
1463*b1cdbd2cSJim Jagielski }
1464*b1cdbd2cSJim Jagielski }
1465*b1cdbd2cSJim Jagielski }
1466*b1cdbd2cSJim Jagielski }
1467*b1cdbd2cSJim Jagielski catch (uno::Exception &)
1468*b1cdbd2cSJim Jagielski {
1469*b1cdbd2cSJim Jagielski DBG_ASSERT( 0, "exception caught. HasVendorImages failed" );
1470*b1cdbd2cSJim Jagielski }
1471*b1cdbd2cSJim Jagielski }
1472*b1cdbd2cSJim Jagielski return bRes;
1473*b1cdbd2cSJim Jagielski }
1474*b1cdbd2cSJim Jagielski
1475*b1cdbd2cSJim Jagielski
HasGrammarChecker() const1476*b1cdbd2cSJim Jagielski bool SvtLinguConfig::HasGrammarChecker() const
1477*b1cdbd2cSJim Jagielski {
1478*b1cdbd2cSJim Jagielski bool bRes = false;
1479*b1cdbd2cSJim Jagielski
1480*b1cdbd2cSJim Jagielski try
1481*b1cdbd2cSJim Jagielski {
1482*b1cdbd2cSJim Jagielski uno::Reference< container::XNameAccess > xNA( GetMainUpdateAccess(), uno::UNO_QUERY_THROW );
1483*b1cdbd2cSJim Jagielski xNA.set( xNA->getByName( A2OU("ServiceManager") ), uno::UNO_QUERY_THROW );
1484*b1cdbd2cSJim Jagielski xNA.set( xNA->getByName( A2OU("GrammarCheckerList") ), uno::UNO_QUERY_THROW );
1485*b1cdbd2cSJim Jagielski
1486*b1cdbd2cSJim Jagielski uno::Sequence< rtl::OUString > aElementNames( xNA->getElementNames() );
1487*b1cdbd2cSJim Jagielski bRes = aElementNames.getLength() > 0;
1488*b1cdbd2cSJim Jagielski }
1489*b1cdbd2cSJim Jagielski catch (uno::Exception &)
1490*b1cdbd2cSJim Jagielski {
1491*b1cdbd2cSJim Jagielski }
1492*b1cdbd2cSJim Jagielski
1493*b1cdbd2cSJim Jagielski return bRes;
1494*b1cdbd2cSJim Jagielski }
1495*b1cdbd2cSJim Jagielski
1496*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1497*b1cdbd2cSJim Jagielski
1498