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/languagetag.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 18 : TYPEINIT1_FACTORY(SvxSearchItem, SfxPoolItem, new SvxSearchItem(0));
59 :
60 : // -----------------------------------------------------------------------
61 :
62 8 : 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 8 : const int nCount = SAL_N_ELEMENTS( aTranslitNames );
89 8 : Sequence< ::rtl::OUString > aNames( nCount );
90 8 : ::rtl::OUString* pNames = aNames.getArray();
91 160 : for (sal_Int32 i = 0; i < nCount; ++i)
92 152 : pNames[i] = ::rtl::OUString::createFromAscii( aTranslitNames[i] );
93 :
94 8 : return aNames;
95 : }
96 :
97 : // -----------------------------------------------------------------------
98 8 : 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 8 : bAsianOptions ( sal_False )
122 : {
123 8 : EnableNotification( lcl_GetNotifyNames() );
124 :
125 8 : SvtSearchOptions aOpt;
126 :
127 8 : bBackward = aOpt.IsBackwards();
128 8 : bAsianOptions = aOpt.IsUseAsianOptions();
129 8 : bNotes = aOpt.IsNotes();
130 :
131 8 : if (aOpt.IsUseRegularExpression())
132 0 : aSearchOpt.algorithmType = SearchAlgorithms_REGEXP;
133 8 : if (aOpt.IsSimilaritySearch())
134 0 : aSearchOpt.algorithmType = SearchAlgorithms_APPROXIMATE;
135 8 : if (aOpt.IsWholeWordsOnly())
136 0 : aSearchOpt.searchFlag |= SearchFlags::NORM_WORD_ONLY;
137 :
138 8 : sal_Int32 &rFlags = aSearchOpt.transliterateFlags;
139 :
140 8 : if (!aOpt.IsMatchCase())
141 8 : rFlags |= TransliterationModules_IGNORE_CASE;
142 8 : if ( aOpt.IsMatchFullHalfWidthForms())
143 8 : rFlags |= TransliterationModules_IGNORE_WIDTH;
144 8 : 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 8 : }
181 :
182 8 : }
183 :
184 : // -----------------------------------------------------------------------
185 :
186 0 : 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 0 : bAsianOptions ( rItem.bAsianOptions )
204 : {
205 0 : EnableNotification( lcl_GetNotifyNames() );
206 0 : }
207 :
208 : // -----------------------------------------------------------------------
209 :
210 0 : SvxSearchItem::~SvxSearchItem()
211 : {
212 0 : }
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 0 : void SvxSearchItem::SetMatchFullHalfWidthForms( bool bVal )
283 : {
284 0 : if (bVal)
285 0 : aSearchOpt.transliterateFlags |= TransliterationModules_IGNORE_WIDTH;
286 : else
287 0 : aSearchOpt.transliterateFlags &= ~TransliterationModules_IGNORE_WIDTH;
288 0 : }
289 :
290 :
291 0 : void SvxSearchItem::SetWordOnly( bool bVal )
292 : {
293 0 : if (bVal)
294 0 : aSearchOpt.searchFlag |= SearchFlags::NORM_WORD_ONLY;
295 : else
296 0 : aSearchOpt.searchFlag &= ~SearchFlags::NORM_WORD_ONLY;
297 0 : }
298 :
299 :
300 0 : void SvxSearchItem::SetExact( bool bVal )
301 : {
302 0 : if (!bVal)
303 0 : aSearchOpt.transliterateFlags |= TransliterationModules_IGNORE_CASE;
304 : else
305 0 : aSearchOpt.transliterateFlags &= ~TransliterationModules_IGNORE_CASE;
306 0 : }
307 :
308 :
309 0 : void SvxSearchItem::SetSelection( bool bVal )
310 : {
311 0 : if (bVal)
312 : {
313 : aSearchOpt.searchFlag |= (SearchFlags::REG_NOT_BEGINOFLINE |
314 0 : SearchFlags::REG_NOT_ENDOFLINE);
315 : }
316 : else
317 : {
318 : aSearchOpt.searchFlag &= ~(SearchFlags::REG_NOT_BEGINOFLINE |
319 0 : SearchFlags::REG_NOT_ENDOFLINE);
320 : }
321 0 : }
322 :
323 :
324 0 : void SvxSearchItem::SetRegExp( bool bVal )
325 : {
326 0 : if ( bVal )
327 0 : aSearchOpt.algorithmType = SearchAlgorithms_REGEXP;
328 0 : else if ( SearchAlgorithms_REGEXP == aSearchOpt.algorithmType )
329 0 : aSearchOpt.algorithmType = SearchAlgorithms_ABSOLUTE;
330 0 : }
331 :
332 :
333 0 : void SvxSearchItem::SetLEVRelaxed( bool bVal )
334 : {
335 0 : if (bVal)
336 0 : aSearchOpt.searchFlag |= SearchFlags::LEV_RELAXED;
337 : else
338 0 : aSearchOpt.searchFlag &= ~SearchFlags::LEV_RELAXED;
339 0 : }
340 :
341 :
342 0 : void SvxSearchItem::SetLevenshtein( bool bVal )
343 : {
344 0 : if ( bVal )
345 0 : aSearchOpt.algorithmType = SearchAlgorithms_APPROXIMATE;
346 0 : else if ( SearchAlgorithms_APPROXIMATE == aSearchOpt.algorithmType )
347 0 : aSearchOpt.algorithmType = SearchAlgorithms_ABSOLUTE;
348 0 : }
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 = LanguageTag( aSearchOpt.Locale ).getLanguageType();
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 : aSearchOpt.Locale = LanguageTag( nInt).getLocale();
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: */
|