Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*
3 : : * This file is part of the LibreOffice project.
4 : : *
5 : : * This Source Code Form is subject to the terms of the Mozilla Public
6 : : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : : *
9 : : * This file incorporates work covered by the following license notice:
10 : : *
11 : : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : : * contributor license agreements. See the NOTICE file distributed
13 : : * with this work for additional information regarding copyright
14 : : * ownership. The ASF licenses this file to you under the Apache
15 : : * License, Version 2.0 (the "License"); you may not use this file
16 : : * except in compliance with the License. You may obtain a copy of
17 : : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : : */
19 : :
20 : : #include <svl/srchitem.hxx>
21 : : #include <sal/macros.h>
22 : :
23 : : #include <unotools/searchopt.hxx>
24 : : #include <com/sun/star/util/XReplaceable.hpp>
25 : : #include <com/sun/star/util/XSearchable.hpp>
26 : : #include <com/sun/star/util/XSearchDescriptor.hpp>
27 : : #include <com/sun/star/util/XPropertyReplace.hpp>
28 : : #include <com/sun/star/util/XReplaceDescriptor.hpp>
29 : : #include <com/sun/star/lang/Locale.hpp>
30 : : #include <svl/memberid.hrc>
31 : : #include <i18npool/mslangid.hxx>
32 : :
33 : : using namespace utl;
34 : : using namespace com::sun::star::beans;
35 : : using namespace com::sun::star::i18n;
36 : : using namespace com::sun::star::lang;
37 : : using namespace com::sun::star::uno;
38 : : using namespace com::sun::star::util;
39 : :
40 : : #define CFG_ROOT_NODE "Office.Common/SearchOptions"
41 : :
42 : : #define SRCH_PARAMS 12
43 : : #define SRCH_PARA_OPTIONS "Options"
44 : : #define SRCH_PARA_FAMILY "Family"
45 : : #define SRCH_PARA_COMMAND "Command"
46 : : #define SRCH_PARA_CELLTYPE "CellType"
47 : : #define SRCH_PARA_APPFLAG "AppFlag"
48 : : #define SRCH_PARA_ROWDIR "RowDirection"
49 : : #define SRCH_PARA_ALLTABLES "AllTables"
50 : : #define SRCH_PARA_SEARCHFILTERED "SearchFiltered"
51 : : #define SRCH_PARA_BACKWARD "Backward"
52 : : #define SRCH_PARA_PATTERN "Pattern"
53 : : #define SRCH_PARA_CONTENT "Content"
54 : : #define SRCH_PARA_ASIANOPT "AsianOptions"
55 : :
56 : : // STATIC DATA -----------------------------------------------------------
57 : :
58 [ - + ][ - + ]: 203 : TYPEINIT1_FACTORY(SvxSearchItem, SfxPoolItem, new SvxSearchItem(0));
[ # # ]
59 : :
60 : : // -----------------------------------------------------------------------
61 : :
62 : 122 : static Sequence< ::rtl::OUString > lcl_GetNotifyNames()
63 : : {
64 : : // names of transliteration relevant properties
65 : : static const char* aTranslitNames[] =
66 : : {
67 : : "IsMatchCase", // 0
68 : : "Japanese/IsMatchFullHalfWidthForms", // 1
69 : : "Japanese/IsMatchHiraganaKatakana", // 2
70 : : "Japanese/IsMatchContractions", // 3
71 : : "Japanese/IsMatchMinusDashCho-on", // 4
72 : : "Japanese/IsMatchRepeatCharMarks", // 5
73 : : "Japanese/IsMatchVariantFormKanji", // 6
74 : : "Japanese/IsMatchOldKanaForms", // 7
75 : : "Japanese/IsMatch_DiZi_DuZu", // 8
76 : : "Japanese/IsMatch_BaVa_HaFa", // 9
77 : : "Japanese/IsMatch_TsiThiChi_DhiZi", // 10
78 : : "Japanese/IsMatch_HyuIyu_ByuVyu", // 11
79 : : "Japanese/IsMatch_SeShe_ZeJe", // 12
80 : : "Japanese/IsMatch_IaIya", // 13
81 : : "Japanese/IsMatch_KiKu", // 14
82 : : "Japanese/IsIgnorePunctuation", // 15
83 : : "Japanese/IsIgnoreWhitespace", // 16
84 : : "Japanese/IsIgnoreProlongedSoundMark", // 17
85 : : "Japanese/IsIgnoreMiddleDot" // 18
86 : : };
87 : :
88 : 122 : const int nCount = SAL_N_ELEMENTS( aTranslitNames );
89 : 122 : Sequence< ::rtl::OUString > aNames( nCount );
90 [ + - ]: 122 : ::rtl::OUString* pNames = aNames.getArray();
91 [ + + ]: 2440 : for (sal_Int32 i = 0; i < nCount; ++i)
92 : 2318 : pNames[i] = ::rtl::OUString::createFromAscii( aTranslitNames[i] );
93 : :
94 : 122 : return aNames;
95 : : }
96 : :
97 : : // -----------------------------------------------------------------------
98 : 108 : SvxSearchItem::SvxSearchItem( const sal_uInt16 nId ) :
99 : :
100 : : SfxPoolItem( nId ),
101 : : ConfigItem( ::rtl::OUString(CFG_ROOT_NODE ) ),
102 : :
103 : : aSearchOpt ( SearchAlgorithms_ABSOLUTE,
104 : : SearchFlags::LEV_RELAXED,
105 : : ::rtl::OUString(),
106 : : ::rtl::OUString(),
107 : : Locale(),
108 : : 2, 2, 2,
109 : : TransliterationModules_IGNORE_CASE ),
110 : : eFamily ( SFX_STYLE_FAMILY_PARA ),
111 : : nCommand ( 0 ),
112 : : nCellType ( SVX_SEARCHIN_FORMULA ),
113 : : nAppFlag ( SVX_SEARCHAPP_WRITER ),
114 : : bRowDirection ( sal_True ),
115 : : bAllTables ( sal_False ),
116 : : bSearchFiltered ( sal_False ),
117 : : bNotes ( sal_False),
118 : : bBackward ( sal_False ),
119 : : bPattern ( sal_False ),
120 : : bContent ( sal_False ),
121 [ + - ]: 108 : bAsianOptions ( sal_False )
122 : : {
123 [ + - ][ + - ]: 108 : EnableNotification( lcl_GetNotifyNames() );
[ + - ]
124 : :
125 [ + - ]: 108 : SvtSearchOptions aOpt;
126 : :
127 [ + - ]: 108 : bBackward = aOpt.IsBackwards();
128 [ + - ]: 108 : bAsianOptions = aOpt.IsUseAsianOptions();
129 [ + - ]: 108 : bNotes = aOpt.IsNotes();
130 : :
131 [ + - ][ - + ]: 108 : if (aOpt.IsUseRegularExpression())
132 : 0 : aSearchOpt.algorithmType = SearchAlgorithms_REGEXP;
133 [ + - ][ - + ]: 108 : if (aOpt.IsSimilaritySearch())
134 : 0 : aSearchOpt.algorithmType = SearchAlgorithms_APPROXIMATE;
135 [ + - ][ - + ]: 108 : if (aOpt.IsWholeWordsOnly())
136 : 0 : aSearchOpt.searchFlag |= SearchFlags::NORM_WORD_ONLY;
137 : :
138 : 108 : sal_Int32 &rFlags = aSearchOpt.transliterateFlags;
139 : :
140 [ + - ][ + - ]: 108 : if (!aOpt.IsMatchCase())
141 : 108 : rFlags |= TransliterationModules_IGNORE_CASE;
142 [ + - ][ + - ]: 108 : if ( aOpt.IsMatchFullHalfWidthForms())
143 : 108 : rFlags |= TransliterationModules_IGNORE_WIDTH;
144 [ - + ]: 108 : if ( bAsianOptions )
145 : : {
146 [ # # ][ # # ]: 0 : if ( aOpt.IsMatchHiraganaKatakana())
147 : 0 : rFlags |= TransliterationModules_IGNORE_KANA;
148 [ # # ][ # # ]: 0 : if ( aOpt.IsMatchContractions())
149 : 0 : rFlags |= TransliterationModules_ignoreSize_ja_JP;
150 [ # # ][ # # ]: 0 : if ( aOpt.IsMatchMinusDashChoon())
151 : 0 : rFlags |= TransliterationModules_ignoreMinusSign_ja_JP;
152 [ # # ][ # # ]: 0 : if ( aOpt.IsMatchRepeatCharMarks())
153 : 0 : rFlags |= TransliterationModules_ignoreIterationMark_ja_JP;
154 [ # # ][ # # ]: 0 : if ( aOpt.IsMatchVariantFormKanji())
155 : 0 : rFlags |= TransliterationModules_ignoreTraditionalKanji_ja_JP;
156 [ # # ][ # # ]: 0 : if ( aOpt.IsMatchOldKanaForms())
157 : 0 : rFlags |= TransliterationModules_ignoreTraditionalKana_ja_JP;
158 [ # # ][ # # ]: 0 : if ( aOpt.IsMatchDiziDuzu())
159 : 0 : rFlags |= TransliterationModules_ignoreZiZu_ja_JP;
160 [ # # ][ # # ]: 0 : if ( aOpt.IsMatchBavaHafa())
161 : 0 : rFlags |= TransliterationModules_ignoreBaFa_ja_JP;
162 [ # # ][ # # ]: 0 : if ( aOpt.IsMatchTsithichiDhizi())
163 : 0 : rFlags |= TransliterationModules_ignoreTiJi_ja_JP;
164 [ # # ][ # # ]: 0 : if ( aOpt.IsMatchHyuiyuByuvyu())
165 : 0 : rFlags |= TransliterationModules_ignoreHyuByu_ja_JP;
166 [ # # ][ # # ]: 0 : if ( aOpt.IsMatchSesheZeje())
167 : 0 : rFlags |= TransliterationModules_ignoreSeZe_ja_JP;
168 [ # # ][ # # ]: 0 : if ( aOpt.IsMatchIaiya())
169 : 0 : rFlags |= TransliterationModules_ignoreIandEfollowedByYa_ja_JP;
170 [ # # ][ # # ]: 0 : if ( aOpt.IsMatchKiku())
171 : 0 : rFlags |= TransliterationModules_ignoreKiKuFollowedBySa_ja_JP;
172 [ # # ][ # # ]: 0 : if ( aOpt.IsIgnorePunctuation())
173 : 0 : rFlags |= TransliterationModules_ignoreSeparator_ja_JP;
174 [ # # ][ # # ]: 0 : if ( aOpt.IsIgnoreWhitespace())
175 : 0 : rFlags |= TransliterationModules_ignoreSpace_ja_JP;
176 [ # # ][ # # ]: 0 : if ( aOpt.IsIgnoreProlongedSoundMark())
177 : 0 : rFlags |= TransliterationModules_ignoreProlongedSoundMark_ja_JP;
178 [ # # ][ # # ]: 0 : if ( aOpt.IsIgnoreMiddleDot())
179 : 0 : rFlags |= TransliterationModules_ignoreMiddleDot_ja_JP;
180 [ + - ]: 108 : }
181 : :
182 : 108 : }
183 : :
184 : : // -----------------------------------------------------------------------
185 : :
186 : 14 : SvxSearchItem::SvxSearchItem( const SvxSearchItem& rItem ) :
187 : :
188 : : SfxPoolItem ( rItem ),
189 : : ConfigItem( ::rtl::OUString(CFG_ROOT_NODE ) ),
190 : :
191 : : aSearchOpt ( rItem.aSearchOpt ),
192 : : eFamily ( rItem.eFamily ),
193 : : nCommand ( rItem.nCommand ),
194 : : nCellType ( rItem.nCellType ),
195 : : nAppFlag ( rItem.nAppFlag ),
196 : : bRowDirection ( rItem.bRowDirection ),
197 : : bAllTables ( rItem.bAllTables ),
198 : : bSearchFiltered ( rItem.bSearchFiltered ),
199 : : bNotes ( rItem.bNotes),
200 : : bBackward ( rItem.bBackward ),
201 : : bPattern ( rItem.bPattern ),
202 : : bContent ( rItem.bContent ),
203 [ + - ]: 14 : bAsianOptions ( rItem.bAsianOptions )
204 : : {
205 [ + - ][ + - ]: 14 : EnableNotification( lcl_GetNotifyNames() );
[ + - ]
206 : 14 : }
207 : :
208 : : // -----------------------------------------------------------------------
209 : :
210 [ + - ]: 76 : SvxSearchItem::~SvxSearchItem()
211 : : {
212 [ - + ]: 134 : }
213 : :
214 : : // -----------------------------------------------------------------------
215 : 0 : SfxPoolItem* SvxSearchItem::Clone( SfxItemPool *) const
216 : : {
217 [ # # ]: 0 : return new SvxSearchItem(*this);
218 : : }
219 : :
220 : : // -----------------------------------------------------------------------
221 : :
222 : : //! used below
223 : 0 : static sal_Bool operator == ( const SearchOptions& rItem1, const SearchOptions& rItem2 )
224 : : {
225 : : return rItem1.algorithmType == rItem2.algorithmType &&
226 : : rItem1.searchFlag == rItem2.searchFlag &&
227 : 0 : rItem1.searchString == rItem2.searchString &&
228 : 0 : rItem1.replaceString == rItem2.replaceString &&
229 : : //rItem1.Locale == rItem2.Locale &&
230 : : rItem1.changedChars == rItem2.changedChars &&
231 : : rItem1.deletedChars == rItem2.deletedChars &&
232 : : rItem1.insertedChars == rItem2.insertedChars &&
233 [ # # ][ # # : 0 : rItem1.transliterateFlags == rItem2.transliterateFlags;
# # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
234 : : }
235 : :
236 : :
237 : 0 : int SvxSearchItem::operator==( const SfxPoolItem& rItem ) const
238 : : {
239 : : DBG_ASSERT( SfxPoolItem::operator==( rItem ), "unequal which or type" );
240 : 0 : const SvxSearchItem &rSItem = (SvxSearchItem &) rItem;
241 : : return ( nCommand == rSItem.nCommand ) &&
242 : : ( bBackward == rSItem.bBackward ) &&
243 : : ( bPattern == rSItem.bPattern ) &&
244 : : ( bContent == rSItem.bContent ) &&
245 : : ( eFamily == rSItem.eFamily ) &&
246 : : ( bRowDirection == rSItem.bRowDirection ) &&
247 : : ( bAllTables == rSItem.bAllTables ) &&
248 : : ( bSearchFiltered == rSItem.bSearchFiltered ) &&
249 : : ( nCellType == rSItem.nCellType ) &&
250 : : ( nAppFlag == rSItem.nAppFlag ) &&
251 : : ( bAsianOptions == rSItem.bAsianOptions ) &&
252 : 0 : ( aSearchOpt == rSItem.aSearchOpt ) &&
253 [ # # ][ # # ]: 0 : ( bNotes == rSItem.bNotes );
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # # # ]
[ # # ]
254 : : }
255 : :
256 : :
257 : : //------------------------------------------------------------------------
258 : :
259 : 0 : SfxItemPresentation SvxSearchItem::GetPresentation
260 : : (
261 : : SfxItemPresentation ,
262 : : SfxMapUnit ,
263 : : SfxMapUnit ,
264 : : XubString& ,
265 : : const IntlWrapper *
266 : : ) const
267 : : {
268 : 0 : return SFX_ITEM_PRESENTATION_NONE;
269 : : }
270 : :
271 : 0 : void SvxSearchItem::Notify( const Sequence< ::rtl::OUString > & )
272 : : {
273 : : // applies transliteration changes in the configuration database
274 : : // to the current SvxSearchItem
275 [ # # ][ # # ]: 0 : SetTransliterationFlags( SvtSearchOptions().GetTransliterationFlags() );
276 : 0 : }
277 : :
278 : 0 : void SvxSearchItem::Commit()
279 : : {
280 : 0 : }
281 : :
282 : 32 : void SvxSearchItem::SetMatchFullHalfWidthForms( sal_Bool bVal )
283 : : {
284 [ - + ]: 32 : if (bVal)
285 : 0 : aSearchOpt.transliterateFlags |= TransliterationModules_IGNORE_WIDTH;
286 : : else
287 : 32 : aSearchOpt.transliterateFlags &= ~TransliterationModules_IGNORE_WIDTH;
288 : 32 : }
289 : :
290 : :
291 : 35 : void SvxSearchItem::SetWordOnly( sal_Bool bVal )
292 : : {
293 [ + + ]: 35 : if (bVal)
294 : 2 : aSearchOpt.searchFlag |= SearchFlags::NORM_WORD_ONLY;
295 : : else
296 : 33 : aSearchOpt.searchFlag &= ~SearchFlags::NORM_WORD_ONLY;
297 : 35 : }
298 : :
299 : :
300 : 35 : void SvxSearchItem::SetExact( sal_Bool bVal )
301 : : {
302 [ + + ]: 35 : if (!bVal)
303 : 33 : aSearchOpt.transliterateFlags |= TransliterationModules_IGNORE_CASE;
304 : : else
305 : 2 : aSearchOpt.transliterateFlags &= ~TransliterationModules_IGNORE_CASE;
306 : 35 : }
307 : :
308 : :
309 : 96 : void SvxSearchItem::SetSelection( sal_Bool bVal )
310 : : {
311 [ + + ]: 96 : if (bVal)
312 : : {
313 : : aSearchOpt.searchFlag |= (SearchFlags::REG_NOT_BEGINOFLINE |
314 : 40 : SearchFlags::REG_NOT_ENDOFLINE);
315 : : }
316 : : else
317 : : {
318 : : aSearchOpt.searchFlag &= ~(SearchFlags::REG_NOT_BEGINOFLINE |
319 : 56 : SearchFlags::REG_NOT_ENDOFLINE);
320 : : }
321 : 96 : }
322 : :
323 : :
324 : 35 : void SvxSearchItem::SetRegExp( sal_Bool bVal )
325 : : {
326 [ + + ]: 35 : if ( bVal )
327 : 3 : aSearchOpt.algorithmType = SearchAlgorithms_REGEXP;
328 [ - + ]: 32 : else if ( SearchAlgorithms_REGEXP == aSearchOpt.algorithmType )
329 : 0 : aSearchOpt.algorithmType = SearchAlgorithms_ABSOLUTE;
330 : 35 : }
331 : :
332 : :
333 : 35 : void SvxSearchItem::SetLEVRelaxed( sal_Bool bVal )
334 : : {
335 [ + + ]: 35 : if (bVal)
336 : 2 : aSearchOpt.searchFlag |= SearchFlags::LEV_RELAXED;
337 : : else
338 : 33 : aSearchOpt.searchFlag &= ~SearchFlags::LEV_RELAXED;
339 : 35 : }
340 : :
341 : :
342 : 35 : void SvxSearchItem::SetLevenshtein( sal_Bool bVal )
343 : : {
344 [ + + ]: 35 : if ( bVal )
345 : 2 : aSearchOpt.algorithmType = SearchAlgorithms_APPROXIMATE;
346 [ + + ]: 33 : else if ( SearchAlgorithms_APPROXIMATE == aSearchOpt.algorithmType )
347 : 1 : aSearchOpt.algorithmType = SearchAlgorithms_ABSOLUTE;
348 : 35 : }
349 : :
350 : :
351 : 0 : void SvxSearchItem::SetTransliterationFlags( sal_Int32 nFlags )
352 : : {
353 : 0 : aSearchOpt.transliterateFlags = nFlags;
354 : 0 : }
355 : :
356 : 0 : bool SvxSearchItem::QueryValue( com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId ) const
357 : : {
358 : 0 : nMemberId &= ~CONVERT_TWIPS;
359 [ # # # # : 0 : switch ( nMemberId )
# # # # #
# # # # #
# # # # #
# # ]
360 : : {
361 : : case 0 :
362 : : {
363 [ # # ]: 0 : Sequence< PropertyValue > aSeq( SRCH_PARAMS );
364 [ # # ]: 0 : aSeq[0].Name = rtl::OUString( SRCH_PARA_OPTIONS );
365 [ # # ][ # # ]: 0 : aSeq[0].Value <<= aSearchOpt;
366 [ # # ]: 0 : aSeq[1].Name = rtl::OUString( SRCH_PARA_FAMILY );
367 [ # # ][ # # ]: 0 : aSeq[1].Value <<= sal_Int16( eFamily );
368 [ # # ]: 0 : aSeq[2].Name = rtl::OUString( SRCH_PARA_COMMAND );
369 [ # # ][ # # ]: 0 : aSeq[2].Value <<= nCommand;
370 [ # # ]: 0 : aSeq[3].Name = rtl::OUString( SRCH_PARA_CELLTYPE );
371 [ # # ][ # # ]: 0 : aSeq[3].Value <<= nCellType;
372 [ # # ]: 0 : aSeq[4].Name = rtl::OUString( SRCH_PARA_APPFLAG );
373 [ # # ][ # # ]: 0 : aSeq[4].Value <<= nAppFlag;
374 [ # # ]: 0 : aSeq[5].Name = rtl::OUString( SRCH_PARA_ROWDIR );
375 [ # # ][ # # ]: 0 : aSeq[5].Value <<= bRowDirection;
376 [ # # ]: 0 : aSeq[6].Name = rtl::OUString( SRCH_PARA_ALLTABLES );
377 [ # # ][ # # ]: 0 : aSeq[6].Value <<= bAllTables;
378 [ # # ]: 0 : aSeq[6].Name = rtl::OUString( SRCH_PARA_SEARCHFILTERED );
379 [ # # ][ # # ]: 0 : aSeq[6].Value <<= bSearchFiltered;
380 [ # # ]: 0 : aSeq[7].Name = rtl::OUString( SRCH_PARA_BACKWARD );
381 [ # # ][ # # ]: 0 : aSeq[7].Value <<= bBackward;
382 [ # # ]: 0 : aSeq[8].Name = rtl::OUString( SRCH_PARA_PATTERN );
383 [ # # ][ # # ]: 0 : aSeq[8].Value <<= bPattern;
384 [ # # ]: 0 : aSeq[9].Name = rtl::OUString( SRCH_PARA_CONTENT );
385 [ # # ][ # # ]: 0 : aSeq[9].Value <<= bContent;
386 [ # # ]: 0 : aSeq[10].Name = rtl::OUString( SRCH_PARA_ASIANOPT );
387 [ # # ][ # # ]: 0 : aSeq[10].Value <<= bAsianOptions;
388 [ # # ][ # # ]: 0 : rVal <<= aSeq;
389 : : }
390 : 0 : break;
391 : : case MID_SEARCH_COMMAND:
392 [ # # ]: 0 : rVal <<= (sal_Int16) nCommand; break;
393 : : case MID_SEARCH_STYLEFAMILY:
394 [ # # ]: 0 : rVal <<= (sal_Int16) eFamily; break;
395 : : case MID_SEARCH_CELLTYPE:
396 [ # # ]: 0 : rVal <<= (sal_Int32) nCellType; break;
397 : : case MID_SEARCH_ROWDIRECTION:
398 [ # # ]: 0 : rVal <<= (sal_Bool) bRowDirection; break;
399 : : case MID_SEARCH_ALLTABLES:
400 [ # # ]: 0 : rVal <<= (sal_Bool) bAllTables; break;
401 : : case MID_SEARCH_SEARCHFILTERED:
402 [ # # ]: 0 : rVal <<= (sal_Bool) bSearchFiltered; break;
403 : : case MID_SEARCH_BACKWARD:
404 [ # # ]: 0 : rVal <<= (sal_Bool) bBackward; break;
405 : : case MID_SEARCH_PATTERN:
406 [ # # ]: 0 : rVal <<= (sal_Bool) bPattern; break;
407 : : case MID_SEARCH_CONTENT:
408 [ # # ]: 0 : rVal <<= (sal_Bool) bContent; break;
409 : : case MID_SEARCH_ASIANOPTIONS:
410 [ # # ]: 0 : rVal <<= (sal_Bool) bAsianOptions; break;
411 : : case MID_SEARCH_ALGORITHMTYPE:
412 [ # # ]: 0 : rVal <<= (sal_Int16) aSearchOpt.algorithmType; break;
413 : : case MID_SEARCH_FLAGS:
414 : 0 : rVal <<= aSearchOpt.searchFlag; break;
415 : : case MID_SEARCH_SEARCHSTRING:
416 : 0 : rVal <<= aSearchOpt.searchString; break;
417 : : case MID_SEARCH_REPLACESTRING:
418 : 0 : rVal <<= aSearchOpt.replaceString; break;
419 : : case MID_SEARCH_CHANGEDCHARS:
420 : 0 : rVal <<= aSearchOpt.changedChars; break;
421 : : case MID_SEARCH_DELETEDCHARS:
422 : 0 : rVal <<= aSearchOpt.deletedChars; break;
423 : : case MID_SEARCH_INSERTEDCHARS:
424 : 0 : rVal <<= aSearchOpt.insertedChars; break;
425 : : case MID_SEARCH_TRANSLITERATEFLAGS:
426 : 0 : rVal <<= aSearchOpt.transliterateFlags; break;
427 : : case MID_SEARCH_LOCALE:
428 : : {
429 : : sal_Int16 nLocale;
430 [ # # ][ # # ]: 0 : if (!aSearchOpt.Locale.Language.isEmpty() || !aSearchOpt.Locale.Country.isEmpty() )
[ # # ]
431 [ # # ]: 0 : nLocale = MsLangId::convertLocaleToLanguage( aSearchOpt.Locale );
432 : : else
433 : 0 : nLocale = LANGUAGE_NONE;
434 [ # # ]: 0 : rVal <<= nLocale;
435 : : break;
436 : : }
437 : :
438 : : default:
439 : : SAL_WARN( "svl.ui", "SvxSearchItem::QueryValue(): Unknown MemberId" );
440 : 0 : return false;
441 : : }
442 : :
443 : 0 : return true;
444 : : }
445 : :
446 : : // -----------------------------------------------------------------------
447 : :
448 : 0 : bool SvxSearchItem::PutValue( const com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId )
449 : : {
450 : 0 : nMemberId &= ~CONVERT_TWIPS;
451 : 0 : bool bRet = false;
452 : 0 : sal_Int32 nInt = 0;
453 [ # # # # : 0 : switch ( nMemberId )
# # # # #
# # # # #
# # # # #
# # ]
454 : : {
455 : : case 0 :
456 : : {
457 [ # # ]: 0 : Sequence< PropertyValue > aSeq;
458 [ # # ][ # # ]: 0 : if ( ( rVal >>= aSeq ) && ( aSeq.getLength() == SRCH_PARAMS ) )
[ # # ][ # # ]
459 : : {
460 : 0 : sal_Int16 nConvertedCount( 0 );
461 [ # # ]: 0 : for ( sal_Int32 i = 0; i < aSeq.getLength(); ++i )
462 : : {
463 [ # # ][ # # ]: 0 : if ( aSeq[i].Name == SRCH_PARA_OPTIONS )
464 : : {
465 [ # # ][ # # ]: 0 : if ( ( aSeq[i].Value >>= aSearchOpt ) == sal_True )
[ # # ]
466 : 0 : ++nConvertedCount;
467 : : }
468 [ # # ][ # # ]: 0 : else if ( aSeq[i].Name == SRCH_PARA_FAMILY )
469 : : {
470 : 0 : sal_uInt16 nTemp( 0 );
471 [ # # ][ # # ]: 0 : if ( ( aSeq[i].Value >>= nTemp ) == sal_True )
472 : : {
473 : 0 : eFamily = SfxStyleFamily( nTemp );
474 : 0 : ++nConvertedCount;
475 : : }
476 : : }
477 [ # # ][ # # ]: 0 : else if ( aSeq[i].Name == SRCH_PARA_COMMAND )
478 : : {
479 [ # # ][ # # ]: 0 : if ( ( aSeq[i].Value >>= nCommand ) == sal_True )
480 : 0 : ++nConvertedCount;
481 : : }
482 [ # # ][ # # ]: 0 : else if ( aSeq[i].Name == SRCH_PARA_CELLTYPE )
483 : : {
484 [ # # ][ # # ]: 0 : if ( ( aSeq[i].Value >>= nCellType ) == sal_True )
485 : 0 : ++nConvertedCount;
486 : : }
487 [ # # ][ # # ]: 0 : else if ( aSeq[i].Name == SRCH_PARA_APPFLAG )
488 : : {
489 [ # # ][ # # ]: 0 : if ( ( aSeq[i].Value >>= nAppFlag ) == sal_True )
490 : 0 : ++nConvertedCount;
491 : : }
492 [ # # ][ # # ]: 0 : else if ( aSeq[i].Name == SRCH_PARA_ROWDIR )
493 : : {
494 [ # # ][ # # ]: 0 : if ( ( aSeq[i].Value >>= bRowDirection ) == sal_True )
495 : 0 : ++nConvertedCount;
496 : : }
497 [ # # ][ # # ]: 0 : else if ( aSeq[i].Name == SRCH_PARA_ALLTABLES )
498 : : {
499 [ # # ][ # # ]: 0 : if ( ( aSeq[i].Value >>= bAllTables ) == sal_True )
500 : 0 : ++nConvertedCount;
501 : : }
502 [ # # ][ # # ]: 0 : else if ( aSeq[i].Name == SRCH_PARA_SEARCHFILTERED )
503 : : {
504 [ # # ][ # # ]: 0 : if ( ( aSeq[i].Value >>= bSearchFiltered ) == sal_True )
505 : 0 : ++nConvertedCount;
506 : : }
507 [ # # ][ # # ]: 0 : else if ( aSeq[i].Name == SRCH_PARA_BACKWARD )
508 : : {
509 [ # # ][ # # ]: 0 : if ( ( aSeq[i].Value >>= bBackward ) == sal_True )
510 : 0 : ++nConvertedCount;
511 : : }
512 [ # # ][ # # ]: 0 : else if ( aSeq[i].Name == SRCH_PARA_PATTERN )
513 : : {
514 [ # # ][ # # ]: 0 : if ( ( aSeq[i].Value >>= bPattern ) == sal_True )
515 : 0 : ++nConvertedCount;
516 : : }
517 [ # # ][ # # ]: 0 : else if ( aSeq[i].Name == SRCH_PARA_CONTENT )
518 : : {
519 [ # # ][ # # ]: 0 : if ( ( aSeq[i].Value >>= bContent ) == sal_True )
520 : 0 : ++nConvertedCount;
521 : : }
522 [ # # ][ # # ]: 0 : else if ( aSeq[i].Name == SRCH_PARA_ASIANOPT )
523 : : {
524 [ # # ][ # # ]: 0 : if ( ( aSeq[i].Value >>= bAsianOptions ) == sal_True )
525 : 0 : ++nConvertedCount;
526 : : }
527 : : }
528 : :
529 : 0 : bRet = ( nConvertedCount == SRCH_PARAMS );
530 : : }
531 [ # # ]: 0 : break;
532 : : }
533 : : case MID_SEARCH_COMMAND:
534 : 0 : bRet = (rVal >>= nInt); nCommand = (sal_uInt16) nInt; break;
535 : : case MID_SEARCH_STYLEFAMILY:
536 : 0 : bRet = (rVal >>= nInt); eFamily = (SfxStyleFamily) (sal_Int16) nInt; break;
537 : : case MID_SEARCH_CELLTYPE:
538 : 0 : bRet = (rVal >>= nInt); nCellType = (sal_uInt16) nInt; break;
539 : : case MID_SEARCH_ROWDIRECTION:
540 : 0 : bRet = (rVal >>= bRowDirection); break;
541 : : case MID_SEARCH_ALLTABLES:
542 : 0 : bRet = (rVal >>= bAllTables); break;
543 : : case MID_SEARCH_SEARCHFILTERED:
544 : 0 : bRet = (rVal >>= bSearchFiltered); break;
545 : : case MID_SEARCH_BACKWARD:
546 : 0 : bRet = (rVal >>= bBackward); break;
547 : : case MID_SEARCH_PATTERN:
548 : 0 : bRet = (rVal >>= bPattern); break;
549 : : case MID_SEARCH_CONTENT:
550 : 0 : bRet = (rVal >>= bContent); break;
551 : : case MID_SEARCH_ASIANOPTIONS:
552 : 0 : bRet = (rVal >>= bAsianOptions); break;
553 : : case MID_SEARCH_ALGORITHMTYPE:
554 : 0 : bRet = (rVal >>= nInt); aSearchOpt.algorithmType = (SearchAlgorithms)(sal_Int16)nInt; break;
555 : : case MID_SEARCH_FLAGS:
556 : 0 : bRet = (rVal >>= aSearchOpt.searchFlag); break;
557 : : case MID_SEARCH_SEARCHSTRING:
558 : 0 : bRet = (rVal >>= aSearchOpt.searchString); break;
559 : : case MID_SEARCH_REPLACESTRING:
560 : 0 : bRet = (rVal >>= aSearchOpt.replaceString); break;
561 : : case MID_SEARCH_CHANGEDCHARS:
562 : 0 : bRet = (rVal >>= aSearchOpt.changedChars); break;
563 : : case MID_SEARCH_DELETEDCHARS:
564 : 0 : bRet = (rVal >>= aSearchOpt.deletedChars); break;
565 : : case MID_SEARCH_INSERTEDCHARS:
566 : 0 : bRet = (rVal >>= aSearchOpt.insertedChars); break;
567 : : case MID_SEARCH_TRANSLITERATEFLAGS:
568 : 0 : bRet = (rVal >>= aSearchOpt.transliterateFlags); break;
569 : : case MID_SEARCH_LOCALE:
570 : : {
571 : 0 : bRet = (rVal >>= nInt);
572 [ # # ]: 0 : if ( bRet )
573 : : {
574 [ # # ]: 0 : if ( nInt == LANGUAGE_NONE )
575 : : {
576 : 0 : aSearchOpt.Locale = ::com::sun::star::lang::Locale();
577 : : }
578 : : else
579 : : {
580 [ # # ]: 0 : MsLangId::convertLanguageToLocale( (sal_Int16) nInt, aSearchOpt.Locale );
581 : : }
582 : : }
583 : 0 : break;
584 : : }
585 : : default:
586 : : OSL_FAIL( "Unknown MemberId" );
587 : : }
588 : :
589 : 0 : return bRet;
590 : : }
591 : :
592 : :
593 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|