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 :
21 : #include <sal/macros.h>
22 : #include <vcl/wrkwin.hxx>
23 : #include <vcl/morebtn.hxx>
24 : #include <vcl/msgbox.hxx>
25 : #include <svl/slstitm.hxx>
26 : #include <svl/itemiter.hxx>
27 : #include <svl/style.hxx>
28 : #include <unotools/moduleoptions.hxx>
29 : #include <unotools/searchopt.hxx>
30 : #include <sfx2/dispatch.hxx>
31 : #include <sfx2/objsh.hxx>
32 : #include <sfx2/module.hxx>
33 : #include <sfx2/viewsh.hxx>
34 : #include <sfx2/basedlgs.hxx>
35 : #include <svl/cjkoptions.hxx>
36 : #include <svl/ctloptions.hxx>
37 : #include <com/sun/star/awt/XWindow.hpp>
38 : #include <com/sun/star/container/XNameAccess.hpp>
39 : #include <com/sun/star/i18n/TransliterationModules.hpp>
40 : #include <com/sun/star/i18n/TransliterationModulesExtra.hpp>
41 : #include <com/sun/star/frame/XDispatch.hpp>
42 : #include <com/sun/star/frame/XDispatchProvider.hpp>
43 : #include <com/sun/star/frame/XLayoutManager.hpp>
44 : #include <com/sun/star/beans/PropertyValue.hpp>
45 : #include <com/sun/star/configuration/theDefaultProvider.hpp>
46 : #include <com/sun/star/frame/ModuleManager.hpp>
47 : #include <com/sun/star/ui/XUIElement.hpp>
48 : #include <comphelper/processfactory.hxx>
49 : #include <svl/itempool.hxx>
50 : #include <svl/intitem.hxx>
51 :
52 : #include <sfx2/app.hxx>
53 : #include <toolkit/helper/vclunohelper.hxx>
54 :
55 : #include "svx/srchdlg.hxx"
56 :
57 : #include <svx/dialogs.hrc>
58 : #include <svx/svxitems.hrc>
59 :
60 : #include <svl/srchitem.hxx>
61 : #include <AccessibleSvxFindReplaceDialog.hxx>
62 : #include <svx/pageitem.hxx>
63 : #include "srchctrl.hxx"
64 : #include <svx/dialmgr.hxx>
65 : #include "svx/dlgutil.hxx"
66 : #include <editeng/brushitem.hxx>
67 : #include <tools/resary.hxx>
68 : #include <svx/svxdlg.hxx>
69 : #include <vcl/toolbox.hxx>
70 : #include <boost/scoped_array.hpp>
71 : #include <boost/scoped_ptr.hpp>
72 :
73 : using namespace com::sun::star::i18n;
74 : using namespace com::sun::star::uno;
75 : using namespace com::sun::star::accessibility;
76 : using namespace com::sun::star;
77 : using namespace comphelper;
78 :
79 :
80 :
81 : #define REMEMBER_SIZE 10
82 :
83 : #define MODIFY_SEARCH 0x00000001
84 : #define MODIFY_REPLACE 0x00000002
85 : #define MODIFY_WORD 0x00000004
86 : #define MODIFY_EXACT 0x00000008
87 : #define MODIFY_BACKWARDS 0x00000010
88 : #define MODIFY_SELECTION 0x00000020
89 : #define MODIFY_REGEXP 0x00000040
90 : #define MODIFY_LAYOUT 0x00000080
91 : #define MODIFY_SIMILARITY 0x00000100
92 : #define MODIFY_FORMULAS 0x00000200
93 : #define MODIFY_VALUES 0x00000400
94 : #define MODIFY_CALC_NOTES 0x00000800
95 : #define MODIFY_ROWS 0x00001000
96 : #define MODIFY_COLUMNS 0x00002000
97 : #define MODIFY_ALLTABLES 0x00004000
98 : #define MODIFY_NOTES 0x00008000
99 :
100 : namespace
101 : {
102 0 : bool GetCheckBoxValue(const CheckBox *pBox)
103 : {
104 0 : return pBox->IsEnabled() && pBox->IsChecked();
105 : }
106 : }
107 :
108 : struct SearchDlg_Impl
109 : {
110 : bool bSaveToModule : 1,
111 : bFocusOnSearch : 1;
112 : sal_uInt16* pRanges;
113 : Timer aSelectionTimer;
114 :
115 : uno::Reference< frame::XDispatch > xCommand1Dispatch;
116 : uno::Reference< frame::XDispatch > xCommand2Dispatch;
117 : util::URL aCommand1URL;
118 : util::URL aCommand2URL;
119 :
120 0 : SearchDlg_Impl()
121 : : bSaveToModule(true)
122 : , bFocusOnSearch(true)
123 0 : , pRanges(NULL)
124 : {
125 0 : aCommand1URL.Complete = aCommand1URL.Main = "vnd.sun.search:SearchViaComponent1";
126 0 : aCommand1URL.Protocol = "vnd.sun.search:";
127 0 : aCommand1URL.Path = "SearchViaComponent1";
128 0 : aCommand2URL.Complete = aCommand2URL.Main = "vnd.sun.search:SearchViaComponent2";
129 0 : aCommand2URL.Protocol = "vnd.sun.search:";
130 0 : aCommand2URL.Path = "SearchViaComponent2";
131 0 : }
132 0 : ~SearchDlg_Impl() { delete[] pRanges; }
133 : };
134 :
135 0 : void ListToStrArr_Impl( sal_uInt16 nId, std::vector<OUString>& rStrLst, ComboBox& rCBox )
136 : {
137 : const SfxStringListItem* pSrchItem =
138 0 : static_cast<const SfxStringListItem*>(SfxGetpApp()->GetItem( nId ));
139 :
140 0 : if (pSrchItem)
141 : {
142 0 : std::vector<OUString> aLst = pSrchItem->GetList();
143 :
144 0 : for ( sal_uInt16 i = 0; i < aLst.size(); ++i )
145 : {
146 0 : rStrLst.push_back(aLst[i]);
147 0 : rCBox.InsertEntry(aLst[i]);
148 0 : }
149 : }
150 0 : }
151 :
152 0 : void StrArrToList_Impl( sal_uInt16 nId, const std::vector<OUString>& rStrLst )
153 : {
154 : DBG_ASSERT( !rStrLst.empty(), "check in advance");
155 0 : SfxGetpApp()->PutItem( SfxStringListItem( nId, &rStrLst ) );
156 0 : }
157 :
158 0 : SearchAttrItemList::SearchAttrItemList( const SearchAttrItemList& rList ) :
159 0 : SrchAttrItemList(rList)
160 : {
161 0 : for ( sal_uInt16 i = 0; i < size(); ++i )
162 0 : if ( !IsInvalidItem( (*this)[i].pItem ) )
163 0 : (*this)[i].pItem = (*this)[i].pItem->Clone();
164 0 : }
165 :
166 :
167 :
168 0 : SearchAttrItemList::~SearchAttrItemList()
169 : {
170 0 : Clear();
171 0 : }
172 :
173 :
174 :
175 0 : void SearchAttrItemList::Put( const SfxItemSet& rSet )
176 : {
177 0 : if ( !rSet.Count() )
178 0 : return;
179 :
180 0 : SfxItemPool* pPool = rSet.GetPool();
181 0 : SfxItemIter aIter( rSet );
182 : SearchAttrItem aItem;
183 0 : const SfxPoolItem* pItem = aIter.GetCurItem();
184 : sal_uInt16 nWhich;
185 :
186 : while ( true )
187 : {
188 : // only test that it is available?
189 0 : if( IsInvalidItem( pItem ) )
190 : {
191 0 : nWhich = rSet.GetWhichByPos( aIter.GetCurPos() );
192 0 : aItem.pItem = (SfxPoolItem*)pItem;
193 : }
194 : else
195 : {
196 0 : nWhich = pItem->Which();
197 0 : aItem.pItem = pItem->Clone();
198 : }
199 :
200 0 : aItem.nSlot = pPool->GetSlotId( nWhich );
201 0 : Insert( aItem );
202 :
203 0 : if ( aIter.IsAtEnd() )
204 0 : break;
205 0 : pItem = aIter.NextItem();
206 0 : }
207 : }
208 :
209 :
210 :
211 0 : SfxItemSet& SearchAttrItemList::Get( SfxItemSet& rSet )
212 : {
213 0 : SfxItemPool* pPool = rSet.GetPool();
214 :
215 0 : for ( sal_uInt16 i = 0; i < size(); ++i )
216 0 : if ( IsInvalidItem( (*this)[i].pItem ) )
217 0 : rSet.InvalidateItem( pPool->GetWhich( (*this)[i].nSlot ) );
218 : else
219 0 : rSet.Put( *(*this)[i].pItem );
220 0 : return rSet;
221 : }
222 :
223 :
224 :
225 0 : void SearchAttrItemList::Clear()
226 : {
227 0 : for ( sal_uInt16 i = 0; i < size(); ++i )
228 0 : if ( !IsInvalidItem( (*this)[i].pItem ) )
229 0 : delete (*this)[i].pItem;
230 0 : SrchAttrItemList::clear();
231 0 : }
232 :
233 :
234 :
235 : // Deletes the pointer to the items
236 0 : void SearchAttrItemList::Remove(size_t nPos, size_t nLen)
237 : {
238 0 : if ( nPos + nLen > size() )
239 0 : nLen = size() - nPos;
240 :
241 0 : for ( sal_uInt16 i = nPos; i < nPos + nLen; ++i )
242 0 : if ( !IsInvalidItem( (*this)[i].pItem ) )
243 0 : delete (*this)[i].pItem;
244 :
245 0 : SrchAttrItemList::erase( begin() + nPos, begin() + nPos + nLen );
246 0 : }
247 :
248 0 : SvxSearchDialog::SvxSearchDialog( vcl::Window* pParent, SfxChildWindow* pChildWin, SfxBindings& rBind )
249 : : SfxModelessDialog(&rBind, pChildWin, pParent, "FindReplaceDialog",
250 : "svx/ui/findreplacedialog.ui")
251 : , mpDocWin(NULL)
252 : , mbSuccess(false)
253 : , rBindings(rBind)
254 : , bWriter(false)
255 : , bSearch(true)
256 : , bFormat(false)
257 : , nOptions(USHRT_MAX)
258 : , bSet(false)
259 : , bReadOnly(false)
260 : , bConstruct(true)
261 : , nModifyFlag(0)
262 : , pImpl(NULL)
263 : , pSearchList(NULL)
264 0 : , pReplaceList(new SearchAttrItemList)
265 : , pSearchItem(NULL)
266 : , pSearchController(NULL)
267 : , pOptionsController(NULL)
268 : , pFamilyController(NULL)
269 : , pSearchSetController(NULL)
270 : , pReplaceSetController(NULL)
271 0 : , nTransliterationFlags(0x00000000)
272 : {
273 0 : get(m_pSearchFrame, "searchframe");
274 0 : get(m_pSearchLB, "searchterm");
275 0 : get(m_pSearchTmplLB, "searchlist");
276 0 : m_pSearchTmplLB->SetStyle(m_pSearchTmplLB->GetStyle() | WB_SORT);
277 0 : get(m_pSearchBtn, "search");
278 0 : get(m_pSearchAllBtn, "searchall");
279 0 : get(m_pSearchAttrText, "searchdesc");
280 0 : m_pSearchAttrText->SetStyle(m_pSearchAttrText->GetStyle() | WB_PATHELLIPSIS);
281 0 : m_pSearchAttrText->Show();
282 0 : get(m_pSearchLabel, "searchlabel");
283 0 : m_pSearchLabel->SetStyle(m_pSearchLabel->GetStyle() | WB_PATHELLIPSIS);
284 0 : m_pSearchLabel->Show();
285 :
286 0 : get(m_pReplaceFrame, "replaceframe");
287 0 : get(m_pReplaceLB, "replaceterm");
288 0 : get(m_pReplaceTmplLB, "replacelist");
289 0 : m_pReplaceTmplLB->SetStyle(m_pReplaceTmplLB->GetStyle() | WB_SORT);
290 0 : get(m_pReplaceBtn, "replace");
291 0 : get(m_pReplaceAllBtn, "replaceall");
292 0 : get(m_pReplaceAttrText, "replacedesc");
293 0 : m_pReplaceAttrText->SetStyle(m_pReplaceAttrText->GetStyle() | WB_PATHELLIPSIS);
294 0 : m_pReplaceAttrText->Show();
295 :
296 0 : get(m_pComponentFrame, "componentframe");
297 0 : get(m_pSearchComponent1PB, "component1");
298 0 : get(m_pSearchComponent2PB, "component2");
299 :
300 0 : get(m_pMatchCaseCB, "matchcase");
301 0 : get(m_pWordBtn, "wholewords");
302 0 : aCalcStr = get<FixedText>("entirecells")->GetText();
303 :
304 0 : get(m_pCloseBtn, "close");
305 :
306 0 : get(m_pIgnoreDiacritics, "ignorediacritics");
307 0 : get(m_pIgnoreKashida, "ignorekashida");
308 0 : get(m_pSelectionBtn, "selection");
309 0 : get(m_pBackwardsBtn, "backwards");
310 0 : get(m_pRegExpBtn, "regexp");
311 0 : get(m_pSimilarityBox, "similarity");
312 0 : get(m_pSimilarityBtn, "similaritybtn");
313 0 : get(m_pLayoutBtn, "layout");
314 0 : get(m_pNotesBtn, "notes");
315 0 : get(m_pJapMatchFullHalfWidthCB, "matchcharwidth");
316 0 : get(m_pJapOptionsCB, "soundslike");
317 0 : get(m_pJapOptionsBtn, "soundslikebtn");
318 :
319 0 : get(m_pAttributeBtn, "attributes");
320 0 : get(m_pFormatBtn, "format");
321 0 : get(m_pNoFormatBtn, "noformat");
322 :
323 0 : get(m_pCalcGrid, "calcgrid");
324 0 : get(m_pCalcSearchInFT, "searchinlabel");
325 0 : get(m_pCalcSearchInLB, "calcsearchin");
326 0 : get(m_pCalcSearchDirFT, "searchdir");
327 0 : get(m_pRowsBtn, "rows");
328 0 : get(m_pColumnsBtn, "cols");
329 0 : get(m_pAllSheetsCB, "allsheets");
330 :
331 0 : m_pSimilarityBtn->set_height_request(m_pSimilarityBox->get_preferred_size().Height());
332 0 : m_pJapOptionsBtn->set_height_request(m_pJapOptionsCB->get_preferred_size().Height());
333 :
334 0 : long nTermWidth = approximate_char_width() * 32;
335 0 : m_pSearchLB->set_width_request(nTermWidth);
336 0 : m_pSearchTmplLB->set_width_request(nTermWidth);
337 0 : m_pReplaceLB->set_width_request(nTermWidth);
338 0 : m_pReplaceTmplLB->set_width_request(nTermWidth);
339 :
340 0 : Construct_Impl();
341 0 : }
342 :
343 :
344 :
345 0 : SvxSearchDialog::~SvxSearchDialog()
346 : {
347 0 : Hide();
348 :
349 0 : rBindings.EnterRegistrations();
350 0 : delete pSearchController;
351 0 : delete pOptionsController;
352 0 : delete pFamilyController;
353 0 : delete pSearchSetController;
354 0 : delete pReplaceSetController;
355 0 : rBindings.LeaveRegistrations();
356 :
357 0 : delete pSearchItem;
358 0 : delete pImpl;
359 0 : delete pSearchList;
360 0 : delete pReplaceList;
361 0 : }
362 :
363 0 : void SvxSearchDialog::Construct_Impl()
364 : {
365 : // temporary to avoid incompatibility
366 0 : pImpl = new SearchDlg_Impl();
367 0 : pImpl->aSelectionTimer.SetTimeout( 500 );
368 : pImpl->aSelectionTimer.SetTimeoutHdl(
369 0 : LINK( this, SvxSearchDialog, TimeoutHdl_Impl ) );
370 0 : EnableControls_Impl( 0 );
371 :
372 : // Store old Text from m_pWordBtn
373 0 : aCalcStr += "#";
374 0 : aCalcStr += m_pWordBtn->GetText();
375 :
376 0 : aLayoutStr = SVX_RESSTR( RID_SVXSTR_SEARCH_STYLES );
377 0 : aLayoutWriterStr = SVX_RESSTR( RID_SVXSTR_WRITER_STYLES );
378 0 : aLayoutCalcStr = SVX_RESSTR( RID_SVXSTR_CALC_STYLES );
379 0 : aStylesStr = m_pLayoutBtn->GetText();
380 :
381 : // Get stored search-strings from the application
382 : ListToStrArr_Impl(SID_SEARCHDLG_SEARCHSTRINGS,
383 0 : aSearchStrings, *m_pSearchLB);
384 : ListToStrArr_Impl(SID_SEARCHDLG_REPLACESTRINGS,
385 0 : aReplaceStrings, *m_pReplaceLB);
386 :
387 0 : InitControls_Impl();
388 :
389 : // Get attribute sets only once in construtor()
390 0 : const SfxPoolItem* ppArgs[] = { pSearchItem, 0 };
391 : const SvxSetItem* pSrchSetItem =
392 0 : static_cast<const SvxSetItem*>( rBindings.GetDispatcher()->Execute( FID_SEARCH_SEARCHSET, SfxCallMode::SLOT, ppArgs ) );
393 :
394 0 : if ( pSrchSetItem )
395 0 : InitAttrList_Impl( &pSrchSetItem->GetItemSet(), 0 );
396 :
397 : const SvxSetItem* pReplSetItem =
398 0 : static_cast<const SvxSetItem*>( rBindings.GetDispatcher()->Execute( FID_SEARCH_REPLACESET, SfxCallMode::SLOT, ppArgs ) );
399 :
400 0 : if ( pReplSetItem )
401 0 : InitAttrList_Impl( 0, &pReplSetItem->GetItemSet() );
402 :
403 : // Create controller and update at once
404 0 : rBindings.EnterRegistrations();
405 : pSearchController =
406 0 : new SvxSearchController( SID_SEARCH_ITEM, rBindings, *this );
407 : pOptionsController =
408 0 : new SvxSearchController( SID_SEARCH_OPTIONS, rBindings, *this );
409 0 : rBindings.LeaveRegistrations();
410 0 : rBindings.GetDispatcher()->Execute( FID_SEARCH_ON, SfxCallMode::SLOT, ppArgs );
411 0 : pImpl->aSelectionTimer.Start();
412 :
413 :
414 0 : SvtCJKOptions aCJKOptions;
415 0 : if(!aCJKOptions.IsJapaneseFindEnabled())
416 : {
417 0 : m_pJapOptionsCB->Check( false );
418 0 : m_pJapOptionsCB->Hide();
419 0 : m_pJapOptionsBtn->Hide();
420 : }
421 0 : if(!aCJKOptions.IsCJKFontEnabled())
422 : {
423 0 : m_pJapMatchFullHalfWidthCB->Hide();
424 : }
425 0 : SvtCTLOptions aCTLOptions;
426 0 : if(!aCTLOptions.IsCTLFontEnabled())
427 : {
428 0 : m_pIgnoreDiacritics->Check( false );
429 0 : m_pIgnoreDiacritics->Hide();
430 0 : m_pIgnoreKashida->Check( false );
431 0 : m_pIgnoreKashida->Hide();
432 : }
433 : //component extension - show component search buttons if the commands
434 : // vnd.sun.star::SearchViaComponent1 and 2 are supported
435 0 : const uno::Reference< frame::XFrame >xFrame = rBindings.GetActiveFrame();
436 0 : const uno::Reference< frame::XDispatchProvider > xDispatchProv(xFrame, uno::UNO_QUERY);
437 0 : OUString sTarget("_self");
438 :
439 0 : bool bSearchComponent1 = false;
440 0 : bool bSearchComponent2 = false;
441 0 : if(xDispatchProv.is() &&
442 0 : (pImpl->xCommand1Dispatch = xDispatchProv->queryDispatch(pImpl->aCommand1URL, sTarget, 0)).is())
443 : {
444 0 : bSearchComponent1 = true;
445 : }
446 0 : if(xDispatchProv.is() &&
447 0 : (pImpl->xCommand2Dispatch = xDispatchProv->queryDispatch(pImpl->aCommand2URL, sTarget, 0)).is())
448 : {
449 0 : bSearchComponent2 = true;
450 : }
451 :
452 0 : if( bSearchComponent1 || bSearchComponent2 )
453 : {
454 : try
455 : {
456 : uno::Reference< lang::XMultiServiceFactory > xConfigurationProvider =
457 0 : configuration::theDefaultProvider::get( comphelper::getProcessComponentContext() );
458 0 : uno::Sequence< uno::Any > aArgs(1);
459 0 : OUString sPath( "/org.openoffice.Office.Common/SearchOptions/");
460 0 : aArgs[0] <<= sPath;
461 :
462 0 : uno::Reference< uno::XInterface > xIFace = xConfigurationProvider->createInstanceWithArguments(
463 : OUString( "com.sun.star.configuration.ConfigurationUpdateAccess"),
464 0 : aArgs);
465 0 : uno::Reference< container::XNameAccess> xDirectAccess(xIFace, uno::UNO_QUERY);
466 0 : if(xDirectAccess.is())
467 : {
468 0 : OUString sTemp;
469 0 : OUString sProperty( "ComponentSearchGroupLabel");
470 0 : uno::Any aRet = xDirectAccess->getByName(sProperty);
471 0 : aRet >>= sTemp;
472 0 : m_pComponentFrame->get_label_widget()->SetText(sTemp);
473 0 : aRet = xDirectAccess->getByName("ComponentSearchCommandLabel1");
474 0 : aRet >>= sTemp;
475 0 : m_pSearchComponent1PB->SetText( sTemp );
476 0 : aRet = xDirectAccess->getByName("ComponentSearchCommandLabel2");
477 0 : aRet >>= sTemp;
478 0 : m_pSearchComponent2PB->SetText( sTemp );
479 0 : }
480 : }
481 0 : catch(uno::Exception&){}
482 :
483 0 : if(!m_pSearchComponent1PB->GetText().isEmpty() && bSearchComponent1 )
484 : {
485 0 : m_pComponentFrame->Show();
486 0 : m_pSearchComponent1PB->Show();
487 : }
488 0 : if( !m_pSearchComponent2PB->GetText().isEmpty() )
489 : {
490 0 : m_pComponentFrame->Show();
491 0 : m_pSearchComponent2PB->Show();
492 : }
493 0 : }
494 0 : }
495 :
496 :
497 :
498 0 : bool SvxSearchDialog::Close()
499 : {
500 : // remember strings speichern
501 0 : if (!aSearchStrings.empty())
502 0 : StrArrToList_Impl( SID_SEARCHDLG_SEARCHSTRINGS, aSearchStrings );
503 :
504 0 : if (!aReplaceStrings.empty())
505 0 : StrArrToList_Impl( SID_SEARCHDLG_REPLACESTRINGS, aReplaceStrings );
506 :
507 : // save settings to configuration
508 0 : SvtSearchOptions aOpt;
509 0 : aOpt.SetWholeWordsOnly ( m_pWordBtn->IsChecked() );
510 0 : aOpt.SetBackwards ( m_pBackwardsBtn->IsChecked() );
511 0 : aOpt.SetUseRegularExpression ( m_pRegExpBtn->IsChecked() );
512 0 : aOpt.SetSearchForStyles ( m_pLayoutBtn->IsChecked() );
513 0 : aOpt.SetSimilaritySearch ( m_pSimilarityBox->IsChecked() );
514 0 : aOpt.SetUseAsianOptions ( m_pJapOptionsCB->IsChecked() );
515 0 : aOpt.SetNotes ( m_pNotesBtn->IsChecked() );
516 0 : aOpt.SetIgnoreDiacritics_CTL ( m_pIgnoreDiacritics->IsChecked() );
517 0 : aOpt.SetIgnoreKashida_CTL ( m_pIgnoreKashida->IsChecked() );
518 :
519 0 : const SfxPoolItem* ppArgs[] = { pSearchItem, 0 };
520 0 : rBindings.GetDispatcher()->Execute( FID_SEARCH_OFF, SfxCallMode::SLOT, ppArgs );
521 0 : rBindings.Execute( SID_SEARCH_DLG );
522 :
523 0 : return true;
524 : }
525 :
526 :
527 :
528 0 : sal_Int32 SvxSearchDialog::GetTransliterationFlags() const
529 : {
530 0 : if (!m_pMatchCaseCB->IsChecked())
531 0 : nTransliterationFlags |= TransliterationModules_IGNORE_CASE;
532 : else
533 0 : nTransliterationFlags &= ~TransliterationModules_IGNORE_CASE;
534 0 : if ( !m_pJapMatchFullHalfWidthCB->IsChecked())
535 0 : nTransliterationFlags |= TransliterationModules_IGNORE_WIDTH;
536 : else
537 0 : nTransliterationFlags &= ~TransliterationModules_IGNORE_WIDTH;
538 0 : return nTransliterationFlags;
539 : }
540 :
541 0 : void SvxSearchDialog::SetSaveToModule(bool b)
542 : {
543 0 : pImpl->bSaveToModule = b;
544 0 : }
545 :
546 :
547 :
548 0 : void SvxSearchDialog::ApplyTransliterationFlags_Impl( sal_Int32 nSettings )
549 : {
550 0 : nTransliterationFlags = nSettings;
551 0 : bool bVal = 0 != (nSettings & TransliterationModules_IGNORE_CASE);
552 0 : m_pMatchCaseCB->Check(!bVal );
553 0 : bVal = 0 != (nSettings & TransliterationModules_IGNORE_WIDTH);
554 0 : m_pJapMatchFullHalfWidthCB->Check( !bVal );
555 0 : }
556 :
557 :
558 :
559 0 : void SvxSearchDialog::Activate()
560 : {
561 : // apply possible transliteration changes of the SvxSearchItem member
562 : DBG_ASSERT( pSearchItem, "SearchItem missing" );
563 0 : if (pSearchItem)
564 : {
565 0 : m_pMatchCaseCB->Check( pSearchItem->GetExact() );
566 0 : m_pJapMatchFullHalfWidthCB->Check( !pSearchItem->IsMatchFullHalfWidthForms() );
567 : }
568 0 : }
569 :
570 :
571 :
572 0 : void SvxSearchDialog::InitControls_Impl()
573 : {
574 : // CaseSensitives AutoComplete
575 0 : m_pSearchLB->EnableAutocomplete( true, true );
576 0 : m_pSearchLB->Show();
577 0 : m_pReplaceLB->EnableAutocomplete( true, true );
578 0 : m_pReplaceLB->Show();
579 :
580 0 : m_pFormatBtn->Disable();
581 0 : m_pAttributeBtn->Disable();
582 :
583 0 : m_pSearchLB->SetModifyHdl( LINK( this, SvxSearchDialog, ModifyHdl_Impl ) );
584 0 : m_pReplaceLB->SetModifyHdl( LINK( this, SvxSearchDialog, ModifyHdl_Impl ) );
585 :
586 0 : Link aLink = LINK( this, SvxSearchDialog, FocusHdl_Impl );
587 0 : m_pSearchLB->SetGetFocusHdl( aLink );
588 0 : m_pReplaceLB->SetGetFocusHdl( aLink );
589 :
590 0 : aLink = LINK( this, SvxSearchDialog, LoseFocusHdl_Impl );
591 0 : m_pSearchLB->SetLoseFocusHdl( aLink );
592 0 : m_pReplaceLB->SetLoseFocusHdl( aLink );
593 :
594 0 : m_pSearchTmplLB->SetLoseFocusHdl( aLink );
595 0 : m_pReplaceTmplLB->SetLoseFocusHdl( aLink );
596 :
597 0 : aLink = LINK( this, SvxSearchDialog, CommandHdl_Impl );
598 0 : m_pSearchBtn->SetClickHdl( aLink );
599 0 : m_pSearchAllBtn->SetClickHdl( aLink );
600 0 : m_pReplaceBtn->SetClickHdl( aLink );
601 0 : m_pReplaceAllBtn->SetClickHdl( aLink );
602 0 : m_pCloseBtn->SetClickHdl( aLink );
603 0 : m_pSimilarityBtn->SetClickHdl( aLink );
604 0 : m_pJapOptionsBtn->SetClickHdl( aLink );
605 0 : m_pSearchComponent1PB->SetClickHdl( aLink );
606 0 : m_pSearchComponent2PB->SetClickHdl( aLink );
607 :
608 0 : aLink = LINK( this, SvxSearchDialog, FlagHdl_Impl );
609 0 : m_pWordBtn->SetClickHdl( aLink );
610 0 : m_pSelectionBtn->SetClickHdl( aLink );
611 0 : m_pMatchCaseCB->SetClickHdl( aLink );
612 0 : m_pRegExpBtn->SetClickHdl( aLink );
613 0 : m_pBackwardsBtn->SetClickHdl( aLink );
614 0 : m_pNotesBtn->SetClickHdl( aLink );
615 0 : m_pSimilarityBox->SetClickHdl( aLink );
616 0 : m_pJapOptionsCB->SetClickHdl( aLink );
617 0 : m_pJapMatchFullHalfWidthCB->SetClickHdl( aLink );
618 0 : m_pIgnoreDiacritics->SetClickHdl( aLink );
619 0 : m_pIgnoreKashida->SetClickHdl( aLink );
620 0 : m_pLayoutBtn->SetClickHdl( LINK( this, SvxSearchDialog, TemplateHdl_Impl ) );
621 0 : m_pFormatBtn->SetClickHdl( LINK( this, SvxSearchDialog, FormatHdl_Impl ) );
622 : m_pNoFormatBtn->SetClickHdl(
623 0 : LINK( this, SvxSearchDialog, NoFormatHdl_Impl ) );
624 : m_pAttributeBtn->SetClickHdl(
625 0 : LINK( this, SvxSearchDialog, AttributeHdl_Impl ) );
626 0 : }
627 :
628 : namespace
629 : {
630 0 : SvtModuleOptions::EFactory getModule(SfxBindings& rBindings)
631 : {
632 0 : SvtModuleOptions::EFactory eFactory(SvtModuleOptions::E_UNKNOWN_FACTORY);
633 : try
634 : {
635 : const uno::Reference< frame::XFrame > xFrame =
636 0 : rBindings.GetActiveFrame();
637 : uno::Reference< frame::XModuleManager2 > xModuleManager(
638 0 : frame::ModuleManager::create(::comphelper::getProcessComponentContext()));
639 :
640 0 : OUString aModuleIdentifier = xModuleManager->identify( xFrame );
641 0 : eFactory = SvtModuleOptions::ClassifyFactoryByServiceName(aModuleIdentifier);
642 : }
643 0 : catch (const uno::Exception&)
644 : {
645 : }
646 0 : return eFactory;
647 : }
648 : }
649 :
650 0 : void SvxSearchDialog::ShowOptionalControls_Impl()
651 : {
652 : DBG_ASSERT( pSearchItem, "no search item" );
653 :
654 0 : SvtCJKOptions aCJKOptions;
655 0 : SvtCTLOptions aCTLOptions;
656 0 : SvtModuleOptions::EFactory eFactory = getModule(rBindings);
657 0 : bool bDrawApp = eFactory == SvtModuleOptions::E_DRAW;
658 : bool bWriterApp =
659 0 : eFactory == SvtModuleOptions::E_WRITER ||
660 0 : eFactory == SvtModuleOptions::E_WRITERWEB ||
661 0 : eFactory == SvtModuleOptions::E_WRITERGLOBAL;
662 0 : bool bCalcApp = eFactory == SvtModuleOptions::E_CALC;
663 :
664 0 : m_pLayoutBtn->Show(!bDrawApp);
665 0 : m_pNotesBtn->Show(bWriterApp);
666 0 : m_pBackwardsBtn->Show();
667 0 : m_pRegExpBtn->Show(!bDrawApp);
668 0 : m_pSimilarityBox->Show();
669 0 : m_pSimilarityBtn->Show();
670 0 : m_pSelectionBtn->Show();
671 0 : m_pIgnoreDiacritics->Show(aCTLOptions.IsCTLFontEnabled());
672 0 : m_pIgnoreKashida->Show(aCTLOptions.IsCTLFontEnabled());
673 0 : m_pJapMatchFullHalfWidthCB->Show(aCJKOptions.IsCJKFontEnabled());
674 0 : m_pJapOptionsCB->Show(aCJKOptions.IsJapaneseFindEnabled());
675 0 : m_pJapOptionsBtn->Show(aCJKOptions.IsJapaneseFindEnabled());
676 :
677 0 : if (bWriter)
678 : {
679 0 : m_pAttributeBtn->Show();
680 0 : m_pFormatBtn->Show();
681 0 : m_pNoFormatBtn->Show();
682 : }
683 :
684 0 : if (bCalcApp)
685 : {
686 0 : m_pCalcSearchInFT->Show();
687 0 : m_pCalcSearchInLB->Show();
688 0 : m_pCalcSearchDirFT->Show();
689 0 : m_pRowsBtn->Show();
690 0 : m_pColumnsBtn->Show();
691 0 : m_pAllSheetsCB->Show();
692 0 : }
693 0 : }
694 :
695 :
696 :
697 : namespace {
698 :
699 : class ToggleSaveToModule
700 : {
701 : public:
702 0 : ToggleSaveToModule(SvxSearchDialog& rDialog, bool bValue) :
703 0 : mrDialog(rDialog), mbValue(bValue)
704 : {
705 0 : mrDialog.SetSaveToModule(mbValue);
706 0 : }
707 :
708 0 : ~ToggleSaveToModule()
709 : {
710 0 : mrDialog.SetSaveToModule(!mbValue);
711 0 : }
712 : private:
713 : SvxSearchDialog& mrDialog;
714 : bool mbValue;
715 : };
716 :
717 : }
718 :
719 0 : void SvxSearchDialog::Init_Impl( bool bSearchPattern )
720 : {
721 : DBG_ASSERT( pSearchItem, "SearchItem == 0" );
722 :
723 : // We don't want to save any intermediate state to the module while the
724 : // dialog is being initialized.
725 0 : ToggleSaveToModule aNoModuleSave(*this, false);
726 0 : SvtSearchOptions aOpt;
727 :
728 0 : bWriter = ( pSearchItem->GetAppFlag() == SVX_SEARCHAPP_WRITER );
729 :
730 0 : if ( ( nModifyFlag & MODIFY_WORD ) == 0 )
731 0 : m_pWordBtn->Check( pSearchItem->GetWordOnly() );
732 0 : if ( ( nModifyFlag & MODIFY_EXACT ) == 0 )
733 0 : m_pMatchCaseCB->Check( pSearchItem->GetExact() );
734 0 : if ( ( nModifyFlag & MODIFY_BACKWARDS ) == 0 )
735 0 : m_pBackwardsBtn->Check( pSearchItem->GetBackward() );
736 0 : if ( ( nModifyFlag & MODIFY_NOTES ) == 0 )
737 0 : m_pNotesBtn->Check( pSearchItem->GetNotes() );
738 0 : if ( ( nModifyFlag & MODIFY_SELECTION ) == 0 )
739 0 : m_pSelectionBtn->Check( pSearchItem->GetSelection() );
740 0 : if ( ( nModifyFlag & MODIFY_REGEXP ) == 0 )
741 0 : m_pRegExpBtn->Check( pSearchItem->GetRegExp() );
742 0 : if ( ( nModifyFlag & MODIFY_LAYOUT ) == 0 )
743 0 : m_pLayoutBtn->Check( pSearchItem->GetPattern() );
744 0 : if (m_pNotesBtn->IsChecked())
745 0 : m_pLayoutBtn->Disable();
746 0 : m_pSimilarityBox->Check( pSearchItem->IsLevenshtein() );
747 0 : if( m_pJapOptionsCB->IsVisible() )
748 0 : m_pJapOptionsCB->Check( pSearchItem->IsUseAsianOptions() );
749 0 : if (m_pIgnoreDiacritics->IsVisible())
750 0 : m_pIgnoreDiacritics->Check( aOpt.IsIgnoreDiacritics_CTL() );
751 0 : if (m_pIgnoreKashida->IsVisible())
752 0 : m_pIgnoreKashida->Check( aOpt.IsIgnoreKashida_CTL() );
753 0 : ApplyTransliterationFlags_Impl( pSearchItem->GetTransliterationFlags() );
754 :
755 0 : ShowOptionalControls_Impl();
756 :
757 0 : bool bDraw = false;
758 0 : if ( pSearchItem->GetAppFlag() == SVX_SEARCHAPP_CALC )
759 : {
760 0 : m_pCalcGrid->Show();
761 0 : Link aLink = LINK( this, SvxSearchDialog, FlagHdl_Impl );
762 0 : m_pCalcSearchInLB->SetSelectHdl( aLink );
763 0 : m_pRowsBtn->SetClickHdl( aLink );
764 0 : m_pColumnsBtn->SetClickHdl( aLink );
765 0 : m_pAllSheetsCB->SetClickHdl( aLink );
766 :
767 0 : switch ( pSearchItem->GetCellType() )
768 : {
769 : case SVX_SEARCHIN_FORMULA:
770 0 : if ( ( nModifyFlag & MODIFY_FORMULAS ) == 0 )
771 0 : m_pCalcSearchInLB->SelectEntryPos( SVX_SEARCHIN_FORMULA );
772 0 : break;
773 :
774 : case SVX_SEARCHIN_VALUE:
775 0 : if ( ( nModifyFlag & MODIFY_VALUES ) == 0 )
776 0 : m_pCalcSearchInLB->SelectEntryPos( SVX_SEARCHIN_VALUE );
777 0 : break;
778 :
779 : case SVX_SEARCHIN_NOTE:
780 0 : if ( ( nModifyFlag & MODIFY_CALC_NOTES ) == 0 )
781 0 : m_pCalcSearchInLB->SelectEntryPos( SVX_SEARCHIN_NOTE );
782 0 : break;
783 : }
784 0 : m_pWordBtn->SetText( aCalcStr.getToken( 0, '#' ) );
785 :
786 0 : if ( pSearchItem->GetRowDirection() &&
787 0 : ( nModifyFlag & MODIFY_ROWS ) == 0 )
788 0 : m_pRowsBtn->Check();
789 0 : else if ( !pSearchItem->GetRowDirection() &&
790 0 : ( nModifyFlag & MODIFY_COLUMNS ) == 0 )
791 0 : m_pColumnsBtn->Check();
792 :
793 0 : if ( ( nModifyFlag & MODIFY_ALLTABLES ) == 0 )
794 0 : m_pAllSheetsCB->Check( pSearchItem->IsAllTables() );
795 :
796 : // only look for formatting in Writer
797 0 : m_pFormatBtn->Hide();
798 0 : m_pNoFormatBtn->Hide();
799 0 : m_pAttributeBtn->Hide();
800 : }
801 : else
802 : {
803 0 : m_pWordBtn->SetText( aCalcStr.getToken( 1, '#' ) );
804 :
805 0 : if ( pSearchItem->GetAppFlag() == SVX_SEARCHAPP_DRAW )
806 : {
807 0 : m_pSearchAllBtn->Hide();
808 :
809 0 : m_pRegExpBtn->Hide();
810 0 : m_pLayoutBtn->Hide();
811 :
812 : // only look for formatting in Writer
813 0 : m_pFormatBtn->Hide();
814 0 : m_pNoFormatBtn->Hide();
815 0 : m_pAttributeBtn->Hide();
816 0 : bDraw = true;
817 : }
818 : else
819 : {
820 0 : if ( !pSearchList )
821 : {
822 : // Get attribute sets, if it not has been done already
823 0 : const SfxPoolItem* ppArgs[] = { pSearchItem, 0 };
824 : const SvxSetItem* pSrchSetItem =
825 0 : static_cast<const SvxSetItem*>(rBindings.GetDispatcher()->Execute( FID_SEARCH_SEARCHSET, SfxCallMode::SLOT, ppArgs ));
826 :
827 0 : if ( pSrchSetItem )
828 0 : InitAttrList_Impl( &pSrchSetItem->GetItemSet(), 0 );
829 :
830 : const SvxSetItem* pReplSetItem =
831 0 : static_cast<const SvxSetItem*>( rBindings.GetDispatcher()->Execute( FID_SEARCH_REPLACESET, SfxCallMode::SLOT, ppArgs ) );
832 :
833 0 : if ( pReplSetItem )
834 0 : InitAttrList_Impl( 0, &pReplSetItem->GetItemSet() );
835 : }
836 : }
837 : }
838 :
839 : if ( false && !bDraw ) //!!!!!
840 : {
841 : m_pRegExpBtn->Show();
842 : m_pLayoutBtn->Show();
843 : }
844 :
845 : // similarity search?
846 0 : if ( ( nModifyFlag & MODIFY_SIMILARITY ) == 0 )
847 0 : m_pSimilarityBox->Check( pSearchItem->IsLevenshtein() );
848 0 : bSet = true;
849 :
850 0 : FlagHdl_Impl(m_pSimilarityBox);
851 0 : FlagHdl_Impl(m_pJapOptionsCB);
852 :
853 0 : bool bDisableSearch = false;
854 0 : SfxViewShell* pViewShell = SfxViewShell::Current();
855 :
856 0 : if ( pViewShell )
857 : {
858 0 : bool bText = !bSearchPattern;
859 :
860 0 : if ( pViewShell->HasSelection( bText ) )
861 0 : EnableControl_Impl(m_pSelectionBtn);
862 : else
863 : {
864 0 : m_pSelectionBtn->Check( false );
865 0 : m_pSelectionBtn->Disable();
866 : }
867 : }
868 :
869 : // Pattern Search and there were no AttrSets given
870 0 : if ( bSearchPattern )
871 : {
872 0 : SfxObjectShell* pShell = SfxObjectShell::Current();
873 :
874 0 : if ( pShell && pShell->GetStyleSheetPool() )
875 : {
876 : // Templates designed
877 0 : m_pSearchTmplLB->Clear();
878 0 : m_pReplaceTmplLB->Clear();
879 0 : SfxStyleSheetBasePool* pStylePool = pShell->GetStyleSheetPool();
880 : pStylePool->SetSearchMask( pSearchItem->GetFamily(),
881 0 : SFXSTYLEBIT_ALL );
882 0 : SfxStyleSheetBase* pBase = pStylePool->First();
883 :
884 0 : while ( pBase )
885 : {
886 0 : if ( pBase->IsUsed() )
887 0 : m_pSearchTmplLB->InsertEntry( pBase->GetName() );
888 0 : m_pReplaceTmplLB->InsertEntry( pBase->GetName() );
889 0 : pBase = pStylePool->Next();
890 : }
891 0 : m_pSearchTmplLB->SelectEntry( pSearchItem->GetSearchString() );
892 0 : m_pReplaceTmplLB->SelectEntry( pSearchItem->GetReplaceString() );
893 :
894 : }
895 0 : m_pSearchTmplLB->Show();
896 :
897 0 : if ( bConstruct )
898 : // Grab focus only after creating
899 0 : m_pSearchTmplLB->GrabFocus();
900 0 : m_pReplaceTmplLB->Show();
901 0 : m_pSearchLB->Hide();
902 0 : m_pReplaceLB->Hide();
903 :
904 0 : m_pWordBtn->Disable();
905 0 : m_pRegExpBtn->Disable();
906 0 : m_pMatchCaseCB->Disable();
907 :
908 0 : bDisableSearch = !m_pSearchTmplLB->GetEntryCount();
909 : }
910 : else
911 : {
912 0 : bool bSetSearch = ( ( nModifyFlag & MODIFY_SEARCH ) == 0 );
913 0 : bool bSetReplace = ( ( nModifyFlag & MODIFY_REPLACE ) == 0 );
914 :
915 0 : if ( !(pSearchItem->GetSearchString().isEmpty()) && bSetSearch )
916 0 : m_pSearchLB->SetText( pSearchItem->GetSearchString() );
917 0 : else if (!aSearchStrings.empty())
918 : {
919 : bool bAttributes =
920 0 : ( ( pSearchList && pSearchList->Count() ) ||
921 0 : ( pReplaceList && pReplaceList->Count() ) );
922 :
923 0 : if ( bSetSearch && !bAttributes )
924 0 : m_pSearchLB->SetText(aSearchStrings[0]);
925 :
926 0 : OUString aReplaceTxt = pSearchItem->GetReplaceString();
927 :
928 0 : if (!aReplaceStrings.empty())
929 0 : aReplaceTxt = aReplaceStrings[0];
930 :
931 0 : if ( bSetReplace && !bAttributes )
932 0 : m_pReplaceLB->SetText( aReplaceTxt );
933 : }
934 0 : m_pSearchLB->Show();
935 :
936 0 : if ( bConstruct )
937 : // Grab focus only after creating
938 0 : m_pSearchLB->GrabFocus();
939 0 : m_pReplaceLB->Show();
940 0 : m_pSearchTmplLB->Hide();
941 0 : m_pReplaceTmplLB->Hide();
942 :
943 0 : EnableControl_Impl(m_pRegExpBtn);
944 0 : EnableControl_Impl(m_pMatchCaseCB);
945 :
946 0 : if ( m_pRegExpBtn->IsChecked() )
947 0 : m_pWordBtn->Disable();
948 : else
949 0 : EnableControl_Impl(m_pWordBtn);
950 :
951 0 : bDisableSearch = m_pSearchLB->GetText().isEmpty() &&
952 0 : m_pSearchAttrText->GetText().isEmpty();
953 : }
954 0 : FocusHdl_Impl(m_pSearchLB);
955 :
956 0 : if ( bDisableSearch )
957 : {
958 0 : m_pSearchBtn->Disable();
959 0 : m_pSearchAllBtn->Disable();
960 0 : m_pReplaceBtn->Disable();
961 0 : m_pReplaceAllBtn->Disable();
962 0 : m_pComponentFrame->Enable(false);
963 : }
964 : else
965 : {
966 0 : EnableControl_Impl(m_pSearchBtn);
967 0 : EnableControl_Impl(m_pReplaceBtn);
968 0 : if (!bWriter || (bWriter && !m_pNotesBtn->IsChecked()))
969 : {
970 0 : EnableControl_Impl(m_pSearchAllBtn);
971 0 : EnableControl_Impl(m_pReplaceAllBtn);
972 : }
973 0 : if (bWriter && pSearchItem->GetNotes())
974 : {
975 0 : m_pSearchAllBtn->Disable();
976 0 : m_pReplaceAllBtn->Disable();
977 : }
978 : }
979 :
980 0 : if (!m_pSearchAttrText->GetText().isEmpty())
981 0 : EnableControl_Impl(m_pNoFormatBtn);
982 : else
983 0 : m_pNoFormatBtn->Disable();
984 :
985 0 : if ( !pSearchList )
986 : {
987 0 : m_pAttributeBtn->Disable();
988 0 : m_pFormatBtn->Disable();
989 : }
990 :
991 0 : if ( m_pLayoutBtn->IsChecked() )
992 : {
993 0 : pImpl->bSaveToModule = false;
994 0 : TemplateHdl_Impl(m_pLayoutBtn);
995 0 : pImpl->bSaveToModule = true;
996 0 : }
997 0 : }
998 :
999 :
1000 :
1001 0 : void SvxSearchDialog::InitAttrList_Impl( const SfxItemSet* pSSet,
1002 : const SfxItemSet* pRSet )
1003 : {
1004 0 : if ( !pSSet && !pRSet )
1005 0 : return;
1006 :
1007 0 : if ( !pImpl->pRanges && pSSet )
1008 : {
1009 0 : sal_sSize nCnt = 0;
1010 0 : const sal_uInt16* pPtr = pSSet->GetRanges();
1011 0 : const sal_uInt16* pTmp = pPtr;
1012 :
1013 0 : while( *pPtr )
1014 : {
1015 0 : nCnt += ( *(pPtr+1) - *pPtr ) + 1;
1016 0 : pPtr += 2;
1017 : }
1018 0 : nCnt = pPtr - pTmp + 1;
1019 0 : pImpl->pRanges = new sal_uInt16[nCnt];
1020 0 : memcpy( pImpl->pRanges, pTmp, sizeof(sal_uInt16) * nCnt );
1021 : }
1022 :
1023 : // See to it that are the texts of the attributes are correct
1024 0 : OUString aDesc;
1025 :
1026 0 : if ( pSSet )
1027 : {
1028 0 : delete pSearchList;
1029 0 : pSearchList = new SearchAttrItemList;
1030 :
1031 0 : if ( pSSet->Count() )
1032 : {
1033 0 : pSearchList->Put( *pSSet );
1034 :
1035 0 : m_pSearchAttrText->SetText( BuildAttrText_Impl( aDesc, true ) );
1036 :
1037 0 : if ( !aDesc.isEmpty() )
1038 0 : bFormat |= true;
1039 : }
1040 : }
1041 :
1042 0 : if ( pRSet )
1043 : {
1044 0 : delete pReplaceList;
1045 0 : pReplaceList = new SearchAttrItemList;
1046 :
1047 0 : if ( pRSet->Count() )
1048 : {
1049 0 : pReplaceList->Put( *pRSet );
1050 :
1051 0 : m_pReplaceAttrText->SetText( BuildAttrText_Impl( aDesc, false ) );
1052 :
1053 0 : if ( !aDesc.isEmpty() )
1054 0 : bFormat |= true;
1055 : }
1056 0 : }
1057 : }
1058 :
1059 :
1060 :
1061 0 : IMPL_LINK( SvxSearchDialog, FlagHdl_Impl, Control *, pCtrl )
1062 : {
1063 0 : if ( pCtrl && !bSet )
1064 0 : SetModifyFlag_Impl( pCtrl );
1065 : else
1066 0 : bSet = false;
1067 :
1068 0 : if (pCtrl == m_pSimilarityBox)
1069 : {
1070 0 : bool bIsChecked = m_pSimilarityBox->IsChecked();
1071 :
1072 0 : if ( bIsChecked )
1073 : {
1074 0 : m_pSimilarityBtn->Enable();
1075 0 : m_pRegExpBtn->Check( false );
1076 0 : m_pRegExpBtn->Disable();
1077 0 : EnableControl_Impl(m_pWordBtn);
1078 :
1079 0 : if ( m_pLayoutBtn->IsChecked() )
1080 : {
1081 0 : EnableControl_Impl(m_pMatchCaseCB);
1082 0 : m_pLayoutBtn->Check( false );
1083 : }
1084 0 : m_pRegExpBtn->Disable();
1085 0 : m_pLayoutBtn->Disable();
1086 0 : m_pFormatBtn->Disable();
1087 0 : m_pNoFormatBtn->Disable();
1088 0 : m_pAttributeBtn->Disable();
1089 : }
1090 : else
1091 : {
1092 0 : EnableControl_Impl(m_pRegExpBtn);
1093 0 : if (!m_pNotesBtn->IsChecked())
1094 0 : EnableControl_Impl(m_pLayoutBtn);
1095 0 : EnableControl_Impl(m_pFormatBtn);
1096 0 : EnableControl_Impl(m_pAttributeBtn);
1097 0 : m_pSimilarityBtn->Disable();
1098 : }
1099 0 : pSearchItem->SetLevenshtein( bIsChecked );
1100 : }
1101 0 : else if (pCtrl == m_pNotesBtn)
1102 : {
1103 0 : if (m_pNotesBtn->IsChecked())
1104 : {
1105 0 : m_pLayoutBtn->Disable();
1106 0 : m_pSearchAllBtn->Disable();
1107 0 : m_pReplaceAllBtn->Disable();
1108 : }
1109 : else
1110 : {
1111 0 : EnableControl_Impl(m_pLayoutBtn);
1112 0 : ModifyHdl_Impl(m_pSearchLB);
1113 : }
1114 : }
1115 : else
1116 : {
1117 0 : if ( m_pLayoutBtn->IsChecked() && !bFormat )
1118 : {
1119 0 : m_pWordBtn->Check( false );
1120 0 : m_pWordBtn->Disable();
1121 0 : m_pRegExpBtn->Check( false );
1122 0 : m_pRegExpBtn->Disable();
1123 0 : m_pMatchCaseCB->Check( false );
1124 0 : m_pMatchCaseCB->Disable();
1125 0 : m_pNotesBtn->Disable();
1126 :
1127 0 : if ( m_pSearchTmplLB->GetEntryCount() )
1128 : {
1129 0 : EnableControl_Impl(m_pSearchBtn);
1130 0 : EnableControl_Impl(m_pSearchAllBtn);
1131 0 : EnableControl_Impl(m_pReplaceBtn);
1132 0 : EnableControl_Impl(m_pReplaceAllBtn);
1133 : }
1134 : }
1135 : else
1136 : {
1137 0 : EnableControl_Impl(m_pRegExpBtn);
1138 0 : EnableControl_Impl(m_pMatchCaseCB);
1139 0 : EnableControl_Impl(m_pNotesBtn);
1140 :
1141 0 : if ( m_pRegExpBtn->IsChecked() )
1142 : {
1143 0 : m_pWordBtn->Check( false );
1144 0 : m_pWordBtn->Disable();
1145 0 : m_pSimilarityBox->Disable();
1146 0 : m_pSimilarityBtn->Disable();
1147 : }
1148 : else
1149 : {
1150 0 : EnableControl_Impl(m_pWordBtn);
1151 0 : EnableControl_Impl(m_pSimilarityBox);
1152 : }
1153 :
1154 : // Search-string in place? then enable Buttons
1155 0 : bSet = true;
1156 0 : ModifyHdl_Impl(m_pSearchLB);
1157 : }
1158 : }
1159 :
1160 0 : if (m_pAllSheetsCB == pCtrl)
1161 : {
1162 0 : bSet = true;
1163 0 : ModifyHdl_Impl(m_pSearchLB);
1164 : }
1165 :
1166 0 : if (m_pJapOptionsCB == pCtrl)
1167 : {
1168 0 : bool bEnableJapOpt = m_pJapOptionsCB->IsChecked();
1169 0 : m_pMatchCaseCB->Enable(!bEnableJapOpt );
1170 0 : m_pJapMatchFullHalfWidthCB->Enable(!bEnableJapOpt );
1171 0 : m_pJapOptionsBtn->Enable( bEnableJapOpt );
1172 : }
1173 :
1174 0 : if ( pImpl->bSaveToModule )
1175 0 : SaveToModule_Impl();
1176 0 : return 0;
1177 : }
1178 :
1179 :
1180 :
1181 0 : IMPL_LINK( SvxSearchDialog, CommandHdl_Impl, Button *, pBtn )
1182 : {
1183 0 : bool bInclusive = ( m_pLayoutBtn->GetText() == aLayoutStr );
1184 :
1185 0 : if ( ( pBtn == m_pSearchBtn ) ||
1186 0 : ( pBtn == m_pSearchAllBtn )||
1187 0 : ( pBtn == m_pReplaceBtn ) ||
1188 0 : ( pBtn == m_pReplaceAllBtn ) )
1189 : {
1190 0 : if ( m_pLayoutBtn->IsChecked() && !bInclusive )
1191 : {
1192 0 : pSearchItem->SetSearchString ( m_pSearchTmplLB->GetSelectEntry() );
1193 0 : pSearchItem->SetReplaceString( m_pReplaceTmplLB->GetSelectEntry() );
1194 : }
1195 : else
1196 : {
1197 0 : pSearchItem->SetSearchString ( m_pSearchLB->GetText() );
1198 0 : pSearchItem->SetReplaceString( m_pReplaceLB->GetText() );
1199 :
1200 0 : if ( pBtn == m_pReplaceBtn )
1201 0 : Remember_Impl( m_pReplaceLB->GetText(), false );
1202 : else
1203 : {
1204 0 : Remember_Impl( m_pSearchLB->GetText(), true );
1205 :
1206 0 : if ( pBtn == m_pReplaceAllBtn )
1207 0 : Remember_Impl( m_pReplaceLB->GetText(), false );
1208 : }
1209 : }
1210 :
1211 0 : pSearchItem->SetRegExp( false );
1212 0 : pSearchItem->SetLevenshtein( false );
1213 0 : if (GetCheckBoxValue(m_pRegExpBtn))
1214 0 : pSearchItem->SetRegExp( true );
1215 0 : else if (GetCheckBoxValue(m_pSimilarityBox))
1216 0 : pSearchItem->SetLevenshtein( true );
1217 :
1218 0 : pSearchItem->SetWordOnly(GetCheckBoxValue(m_pWordBtn));
1219 0 : pSearchItem->SetBackward(GetCheckBoxValue(m_pBackwardsBtn));
1220 0 : pSearchItem->SetNotes(GetCheckBoxValue(m_pNotesBtn));
1221 0 : pSearchItem->SetPattern(GetCheckBoxValue(m_pLayoutBtn));
1222 0 : pSearchItem->SetSelection(GetCheckBoxValue(m_pSelectionBtn));
1223 0 : pSearchItem->SetUseAsianOptions(GetCheckBoxValue(m_pJapOptionsCB));
1224 0 : sal_Int32 nFlags = GetTransliterationFlags();
1225 0 : if( !pSearchItem->IsUseAsianOptions())
1226 : nFlags &= (TransliterationModules_IGNORE_CASE |
1227 0 : TransliterationModules_IGNORE_WIDTH );
1228 0 : if (GetCheckBoxValue(m_pIgnoreDiacritics))
1229 0 : nFlags |= TransliterationModulesExtra::IGNORE_DIACRITICS_CTL;
1230 0 : if (GetCheckBoxValue(m_pIgnoreKashida))
1231 0 : nFlags |= TransliterationModulesExtra::IGNORE_KASHIDA_CTL;
1232 0 : pSearchItem->SetTransliterationFlags( nFlags );
1233 :
1234 0 : if ( !bWriter )
1235 : {
1236 0 : if ( m_pCalcSearchInLB->GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND )
1237 0 : pSearchItem->SetCellType( m_pCalcSearchInLB->GetSelectEntryPos() );
1238 :
1239 0 : pSearchItem->SetRowDirection( m_pRowsBtn->IsChecked() );
1240 0 : pSearchItem->SetAllTables( m_pAllSheetsCB->IsChecked() );
1241 : }
1242 :
1243 0 : if (pBtn == m_pSearchBtn)
1244 0 : pSearchItem->SetCommand( SVX_SEARCHCMD_FIND );
1245 0 : else if ( pBtn == m_pSearchAllBtn )
1246 0 : pSearchItem->SetCommand( SVX_SEARCHCMD_FIND_ALL );
1247 0 : else if ( pBtn == m_pReplaceBtn )
1248 0 : pSearchItem->SetCommand( SVX_SEARCHCMD_REPLACE );
1249 0 : else if ( pBtn == m_pReplaceAllBtn )
1250 0 : pSearchItem->SetCommand( SVX_SEARCHCMD_REPLACE_ALL );
1251 :
1252 : // when looking for templates, delete format lists
1253 0 : if ( !bFormat && pSearchItem->GetPattern() )
1254 : {
1255 0 : if ( pSearchList )
1256 0 : pSearchList->Clear();
1257 :
1258 0 : if ( pReplaceList )
1259 0 : pReplaceList->Clear();
1260 : }
1261 0 : nModifyFlag = 0;
1262 0 : const SfxPoolItem* ppArgs[] = { pSearchItem, 0 };
1263 0 : rBindings.ExecuteSynchron( FID_SEARCH_NOW, ppArgs, 0L );
1264 : }
1265 0 : else if ( pBtn == m_pCloseBtn )
1266 : {
1267 0 : if ( !m_pLayoutBtn->IsChecked() || bInclusive )
1268 : {
1269 0 : OUString aStr( m_pSearchLB->GetText() );
1270 :
1271 0 : if ( !aStr.isEmpty() )
1272 0 : Remember_Impl( aStr, true );
1273 0 : aStr = m_pReplaceLB->GetText();
1274 :
1275 0 : if ( !aStr.isEmpty() )
1276 0 : Remember_Impl( aStr, false );
1277 : }
1278 0 : SaveToModule_Impl();
1279 0 : Close();
1280 : }
1281 0 : else if (pBtn == m_pSimilarityBtn)
1282 : {
1283 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
1284 0 : if(pFact)
1285 : {
1286 : boost::scoped_ptr<AbstractSvxSearchSimilarityDialog> pDlg(pFact->CreateSvxSearchSimilarityDialog( this,
1287 0 : pSearchItem->IsLEVRelaxed(),
1288 0 : pSearchItem->GetLEVOther(),
1289 0 : pSearchItem->GetLEVShorter(),
1290 0 : pSearchItem->GetLEVLonger() ));
1291 : DBG_ASSERT(pDlg, "Dialog creation failed!");
1292 0 : if ( pDlg && pDlg->Execute() == RET_OK )
1293 : {
1294 0 : pSearchItem->SetLEVRelaxed( pDlg->IsRelaxed() );
1295 0 : pSearchItem->SetLEVOther( pDlg->GetOther() );
1296 0 : pSearchItem->SetLEVShorter( pDlg->GetShorter() );
1297 0 : pSearchItem->SetLEVLonger( pDlg->GetLonger() );
1298 0 : SaveToModule_Impl();
1299 0 : }
1300 : }
1301 : }
1302 0 : else if (pBtn == m_pJapOptionsBtn)
1303 : {
1304 0 : SfxItemSet aSet( SfxGetpApp()->GetPool() );
1305 0 : pSearchItem->SetTransliterationFlags( GetTransliterationFlags() );
1306 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
1307 0 : if(pFact)
1308 : {
1309 : boost::scoped_ptr<AbstractSvxJSearchOptionsDialog> aDlg(pFact->CreateSvxJSearchOptionsDialog( this, aSet,
1310 0 : pSearchItem->GetTransliterationFlags() ));
1311 : DBG_ASSERT(aDlg, "Dialog creation failed!");
1312 0 : int nRet = aDlg->Execute();
1313 0 : if (RET_OK == nRet) //! true only if FillItemSet of SvxJSearchOptionsPage returns true
1314 : {
1315 0 : sal_Int32 nFlags = aDlg->GetTransliterationFlags();
1316 0 : pSearchItem->SetTransliterationFlags( nFlags );
1317 0 : ApplyTransliterationFlags_Impl( nFlags );
1318 0 : }
1319 0 : }
1320 : }
1321 0 : else if (pBtn == m_pSearchComponent1PB || pBtn == m_pSearchComponent2PB)
1322 : {
1323 0 : uno::Sequence < beans::PropertyValue > aArgs(2);
1324 0 : beans::PropertyValue* pArgs = aArgs.getArray();
1325 0 : pArgs[0].Name = "SearchString";
1326 0 : pArgs[0].Value <<= OUString(m_pSearchLB->GetText());
1327 0 : pArgs[1].Name = "ParentWindow";
1328 0 : pArgs[1].Value <<= VCLUnoHelper::GetInterface( this );
1329 0 : if(pBtn == m_pSearchComponent1PB)
1330 : {
1331 0 : if ( pImpl->xCommand1Dispatch.is() )
1332 0 : pImpl->xCommand1Dispatch->dispatch(pImpl->aCommand1URL, aArgs);
1333 : }
1334 : else
1335 : {
1336 0 : if ( pImpl->xCommand2Dispatch.is() )
1337 0 : pImpl->xCommand2Dispatch->dispatch(pImpl->aCommand2URL, aArgs);
1338 0 : }
1339 : }
1340 :
1341 0 : return 0;
1342 : }
1343 :
1344 :
1345 :
1346 0 : IMPL_LINK( SvxSearchDialog, ModifyHdl_Impl, ComboBox *, pEd )
1347 : {
1348 0 : if ( !bSet )
1349 0 : SetModifyFlag_Impl( pEd );
1350 : else
1351 0 : bSet = false;
1352 :
1353 : // Calc allows searching for empty cells.
1354 0 : bool bAllowEmptySearch = (pSearchItem->GetAppFlag() == SVX_SEARCHAPP_CALC);
1355 :
1356 0 : if ( pEd == m_pSearchLB || pEd == m_pReplaceLB )
1357 : {
1358 0 : sal_Int32 nSrchTxtLen = m_pSearchLB->GetText().getLength();
1359 0 : sal_Int32 nReplTxtLen = 0;
1360 0 : if (bAllowEmptySearch)
1361 0 : nReplTxtLen = m_pReplaceLB->GetText().getLength();
1362 0 : sal_Int32 nAttrTxtLen = m_pSearchAttrText->GetText().getLength();
1363 :
1364 0 : if (nSrchTxtLen || nReplTxtLen || nAttrTxtLen)
1365 : {
1366 0 : EnableControl_Impl(m_pSearchBtn);
1367 0 : EnableControl_Impl(m_pReplaceBtn);
1368 0 : if (!bWriter || (bWriter && !m_pNotesBtn->IsChecked()))
1369 : {
1370 0 : EnableControl_Impl(m_pSearchAllBtn);
1371 0 : EnableControl_Impl(m_pReplaceAllBtn);
1372 : }
1373 : }
1374 : else
1375 : {
1376 0 : m_pComponentFrame->Enable(false);
1377 0 : m_pSearchBtn->Disable();
1378 0 : m_pSearchAllBtn->Disable();
1379 0 : m_pReplaceBtn->Disable();
1380 0 : m_pReplaceAllBtn->Disable();
1381 : }
1382 : }
1383 0 : return 0;
1384 : }
1385 :
1386 :
1387 :
1388 0 : IMPL_LINK_NOARG(SvxSearchDialog, TemplateHdl_Impl)
1389 : {
1390 0 : if ( pImpl->bSaveToModule )
1391 0 : SaveToModule_Impl();
1392 :
1393 0 : if ( bFormat )
1394 0 : return 0;
1395 0 : OUString sDesc;
1396 :
1397 0 : if ( m_pLayoutBtn->IsChecked() )
1398 : {
1399 0 : if ( !pFamilyController )
1400 : {
1401 0 : sal_uInt16 nId = 0;
1402 :
1403 : // Enable templates controller
1404 0 : switch ( pSearchItem->GetFamily() )
1405 : {
1406 : case SFX_STYLE_FAMILY_CHAR:
1407 0 : nId = SID_STYLE_FAMILY1; break;
1408 :
1409 : case SFX_STYLE_FAMILY_PARA:
1410 0 : nId = SID_STYLE_FAMILY2; break;
1411 :
1412 : case SFX_STYLE_FAMILY_FRAME:
1413 0 : nId = SID_STYLE_FAMILY3; break;
1414 :
1415 : case SFX_STYLE_FAMILY_PAGE:
1416 0 : nId = SID_STYLE_FAMILY4; break;
1417 :
1418 : case SFX_STYLE_FAMILY_ALL:
1419 0 : break;
1420 :
1421 : default:
1422 : OSL_FAIL( "StyleSheetFamily was changed?" );
1423 : }
1424 :
1425 0 : rBindings.EnterRegistrations();
1426 : pFamilyController =
1427 0 : new SvxSearchController( nId, rBindings, *this );
1428 0 : rBindings.LeaveRegistrations();
1429 0 : m_pSearchTmplLB->Clear();
1430 0 : m_pReplaceTmplLB->Clear();
1431 :
1432 0 : m_pSearchTmplLB->Show();
1433 0 : m_pReplaceTmplLB->Show();
1434 0 : m_pSearchLB->Hide();
1435 0 : m_pReplaceLB->Hide();
1436 :
1437 0 : m_pSearchAttrText->SetText( sDesc );
1438 0 : m_pReplaceAttrText->SetText( sDesc );
1439 : }
1440 0 : m_pFormatBtn->Disable();
1441 0 : m_pNoFormatBtn->Disable();
1442 0 : m_pAttributeBtn->Disable();
1443 0 : m_pSimilarityBox->Disable();
1444 0 : m_pSimilarityBtn->Disable();
1445 : }
1446 : else
1447 : {
1448 : // Disable templates controller
1449 0 : rBindings.EnterRegistrations();
1450 0 : DELETEZ( pFamilyController );
1451 0 : rBindings.LeaveRegistrations();
1452 :
1453 0 : m_pSearchLB->Show();
1454 0 : m_pReplaceLB->Show();
1455 0 : m_pSearchTmplLB->Hide();
1456 0 : m_pReplaceTmplLB->Hide();
1457 :
1458 0 : m_pSearchAttrText->SetText( BuildAttrText_Impl( sDesc, true ) );
1459 0 : m_pReplaceAttrText->SetText( BuildAttrText_Impl( sDesc, false ) );
1460 :
1461 0 : EnableControl_Impl(m_pFormatBtn);
1462 0 : EnableControl_Impl(m_pAttributeBtn);
1463 0 : EnableControl_Impl(m_pSimilarityBox);
1464 :
1465 0 : FocusHdl_Impl( bSearch ? m_pSearchLB : m_pReplaceLB );
1466 : }
1467 0 : bSet = true;
1468 0 : pImpl->bSaveToModule = false;
1469 0 : FlagHdl_Impl(m_pLayoutBtn);
1470 0 : pImpl->bSaveToModule = true;
1471 0 : return 0;
1472 : }
1473 :
1474 :
1475 :
1476 0 : void SvxSearchDialog::Remember_Impl( const OUString &rStr, bool _bSearch )
1477 : {
1478 0 : if ( rStr.isEmpty() )
1479 0 : return;
1480 :
1481 0 : std::vector<OUString>* pArr = _bSearch ? &aSearchStrings : &aReplaceStrings;
1482 0 : ComboBox* pListBox = _bSearch ? m_pSearchLB : m_pReplaceLB;
1483 :
1484 : // ignore identical strings
1485 0 : for (std::vector<OUString>::const_iterator i = pArr->begin(); i != pArr->end(); ++i)
1486 : {
1487 0 : if ((*i).equals(rStr))
1488 0 : return;
1489 : }
1490 :
1491 : // delete oldest entry at maximum occupancy (ListBox and Array)
1492 0 : if(REMEMBER_SIZE < pArr->size())
1493 : {
1494 0 : pListBox->RemoveEntryAt(static_cast<sal_uInt16>(REMEMBER_SIZE - 1));
1495 0 : (*pArr)[REMEMBER_SIZE - 1] = rStr;
1496 0 : pArr->erase(pArr->begin() + REMEMBER_SIZE - 1);
1497 : }
1498 :
1499 0 : pArr->insert(pArr->begin(), rStr);
1500 0 : pListBox->InsertEntry(rStr, 0);
1501 : }
1502 :
1503 :
1504 :
1505 0 : void SvxSearchDialog::TemplatesChanged_Impl( SfxStyleSheetBasePool& rPool )
1506 : {
1507 0 : OUString aOldSrch( m_pSearchTmplLB->GetSelectEntry() );
1508 0 : OUString aOldRepl( m_pReplaceTmplLB->GetSelectEntry() );
1509 0 : m_pSearchTmplLB->Clear();
1510 0 : m_pReplaceTmplLB->Clear();
1511 0 : rPool.SetSearchMask( pSearchItem->GetFamily(), SFXSTYLEBIT_ALL );
1512 0 : m_pSearchTmplLB->SetUpdateMode( false );
1513 0 : m_pReplaceTmplLB->SetUpdateMode( false );
1514 0 : SfxStyleSheetBase* pBase = rPool.First();
1515 :
1516 0 : while ( pBase )
1517 : {
1518 0 : if ( pBase->IsUsed() )
1519 0 : m_pSearchTmplLB->InsertEntry( pBase->GetName() );
1520 0 : m_pReplaceTmplLB->InsertEntry( pBase->GetName() );
1521 0 : pBase = rPool.Next();
1522 : }
1523 0 : m_pSearchTmplLB->SetUpdateMode( true );
1524 0 : m_pReplaceTmplLB->SetUpdateMode( true );
1525 0 : m_pSearchTmplLB->SelectEntryPos(0);
1526 :
1527 0 : if ( !aOldSrch.isEmpty() )
1528 0 : m_pSearchTmplLB->SelectEntry( aOldSrch );
1529 0 : m_pReplaceTmplLB->SelectEntryPos(0);
1530 :
1531 0 : if ( !aOldRepl.isEmpty() )
1532 0 : m_pReplaceTmplLB->SelectEntry( aOldRepl );
1533 :
1534 0 : if ( m_pSearchTmplLB->GetEntryCount() )
1535 : {
1536 0 : EnableControl_Impl(m_pSearchBtn);
1537 0 : EnableControl_Impl(m_pSearchAllBtn);
1538 0 : EnableControl_Impl(m_pReplaceBtn);
1539 0 : EnableControl_Impl(m_pReplaceAllBtn);
1540 0 : }
1541 0 : }
1542 :
1543 :
1544 :
1545 0 : void SvxSearchDialog::EnableControls_Impl( const sal_uInt16 nFlags )
1546 : {
1547 0 : if ( nFlags == nOptions )
1548 0 : return;
1549 : else
1550 0 : nOptions = nFlags;
1551 :
1552 0 : if ( !nOptions )
1553 : {
1554 0 : if ( IsVisible() )
1555 : {
1556 0 : Hide();
1557 0 : return;
1558 : }
1559 : }
1560 0 : else if ( !IsVisible() )
1561 0 : Show();
1562 0 : bool bNoSearch = true;
1563 :
1564 0 : bool bEnableSearch = ( SEARCH_OPTIONS_SEARCH & nOptions ) != 0;
1565 0 : m_pSearchBtn->Enable(bEnableSearch);
1566 :
1567 0 : if( bEnableSearch )
1568 0 : bNoSearch = false;
1569 :
1570 :
1571 0 : if ( ( SEARCH_OPTIONS_SEARCH_ALL & nOptions ) != 0 )
1572 : {
1573 0 : m_pSearchAllBtn->Enable();
1574 0 : bNoSearch = false;
1575 : }
1576 : else
1577 0 : m_pSearchAllBtn->Disable();
1578 0 : if ( ( SEARCH_OPTIONS_REPLACE & nOptions ) != 0 )
1579 : {
1580 0 : m_pReplaceBtn->Enable();
1581 0 : m_pReplaceFrame->get_label_widget()->Enable();
1582 0 : m_pReplaceLB->Enable();
1583 0 : m_pReplaceTmplLB->Enable();
1584 0 : bNoSearch = false;
1585 : }
1586 : else
1587 : {
1588 0 : m_pReplaceBtn->Disable();
1589 0 : m_pReplaceFrame->get_label_widget()->Disable();
1590 0 : m_pReplaceLB->Disable();
1591 0 : m_pReplaceTmplLB->Disable();
1592 : }
1593 0 : if ( ( SEARCH_OPTIONS_REPLACE_ALL & nOptions ) != 0 )
1594 : {
1595 0 : m_pReplaceAllBtn->Enable();
1596 0 : bNoSearch = false;
1597 : }
1598 : else
1599 0 : m_pReplaceAllBtn->Disable();
1600 0 : m_pComponentFrame->Enable(!bNoSearch);
1601 0 : m_pSearchBtn->Enable( !bNoSearch );
1602 0 : m_pSearchFrame->get_label_widget()->Enable( !bNoSearch );
1603 0 : m_pSearchLB->Enable( !bNoSearch );
1604 0 : m_pNotesBtn->Enable();
1605 :
1606 0 : if ( ( SEARCH_OPTIONS_WHOLE_WORDS & nOptions ) != 0 )
1607 0 : m_pWordBtn->Enable();
1608 : else
1609 0 : m_pWordBtn->Disable();
1610 0 : if ( ( SEARCH_OPTIONS_BACKWARDS & nOptions ) != 0 )
1611 0 : m_pBackwardsBtn->Enable();
1612 : else
1613 0 : m_pBackwardsBtn->Disable();
1614 0 : if ( ( SEARCH_OPTIONS_REG_EXP & nOptions ) != 0 )
1615 0 : m_pRegExpBtn->Enable();
1616 : else
1617 0 : m_pRegExpBtn->Disable();
1618 0 : if ( ( SEARCH_OPTIONS_EXACT & nOptions ) != 0 )
1619 0 : m_pMatchCaseCB->Enable();
1620 : else
1621 0 : m_pMatchCaseCB->Disable();
1622 0 : if ( ( SEARCH_OPTIONS_SELECTION & nOptions ) != 0 )
1623 0 : m_pSelectionBtn->Enable();
1624 : else
1625 0 : m_pSelectionBtn->Disable();
1626 0 : if ( ( SEARCH_OPTIONS_FAMILIES & nOptions ) != 0 )
1627 0 : m_pLayoutBtn->Enable();
1628 : else
1629 0 : m_pLayoutBtn->Disable();
1630 0 : if ( ( SEARCH_OPTIONS_FORMAT & nOptions ) != 0 )
1631 : {
1632 0 : m_pAttributeBtn->Enable();
1633 0 : m_pFormatBtn->Enable();
1634 0 : m_pNoFormatBtn->Enable();
1635 : }
1636 : else
1637 : {
1638 0 : m_pAttributeBtn->Disable();
1639 0 : m_pFormatBtn->Disable();
1640 0 : m_pNoFormatBtn->Disable();
1641 : }
1642 :
1643 0 : if ( ( SEARCH_OPTIONS_SIMILARITY & nOptions ) != 0 )
1644 : {
1645 0 : m_pSimilarityBox->Enable();
1646 0 : m_pSimilarityBtn->Enable();
1647 : }
1648 : else
1649 : {
1650 0 : m_pSimilarityBox->Disable();
1651 0 : m_pSimilarityBtn->Disable();
1652 : }
1653 :
1654 0 : if ( pSearchItem )
1655 0 : Init_Impl( pSearchItem->GetPattern() &&
1656 0 : ( !pSearchList || !pSearchList->Count() ) );
1657 : }
1658 :
1659 :
1660 :
1661 0 : void SvxSearchDialog::EnableControl_Impl( Control* pCtrl )
1662 : {
1663 0 : if (m_pSearchBtn == pCtrl && ( SEARCH_OPTIONS_SEARCH & nOptions ) != 0)
1664 : {
1665 0 : m_pComponentFrame->Enable();
1666 0 : m_pSearchBtn->Enable();
1667 0 : return;
1668 : }
1669 0 : if ( m_pSearchAllBtn == pCtrl &&
1670 0 : ( SEARCH_OPTIONS_SEARCH_ALL & nOptions ) != 0 )
1671 : {
1672 0 : m_pSearchAllBtn->Enable( true );
1673 0 : return;
1674 : }
1675 0 : if ( m_pReplaceBtn == pCtrl && ( SEARCH_OPTIONS_REPLACE & nOptions ) != 0 )
1676 : {
1677 0 : m_pReplaceBtn->Enable();
1678 0 : return;
1679 : }
1680 0 : if ( m_pReplaceAllBtn == pCtrl &&
1681 0 : ( SEARCH_OPTIONS_REPLACE_ALL & nOptions ) != 0 )
1682 : {
1683 0 : m_pReplaceAllBtn->Enable();
1684 0 : return;
1685 : }
1686 0 : if ( m_pWordBtn == pCtrl && ( SEARCH_OPTIONS_WHOLE_WORDS & nOptions ) != 0 )
1687 : {
1688 0 : m_pWordBtn->Enable();
1689 0 : return;
1690 : }
1691 0 : if ( m_pBackwardsBtn == pCtrl && ( SEARCH_OPTIONS_BACKWARDS & nOptions ) != 0 )
1692 : {
1693 0 : m_pBackwardsBtn->Enable();
1694 0 : return;
1695 : }
1696 0 : if (m_pNotesBtn == pCtrl)
1697 : {
1698 0 : m_pNotesBtn->Enable();
1699 0 : return;
1700 : }
1701 0 : if ( m_pRegExpBtn == pCtrl && ( SEARCH_OPTIONS_REG_EXP & nOptions ) != 0
1702 0 : && !m_pSimilarityBox->IsChecked())
1703 : {
1704 0 : m_pRegExpBtn->Enable();
1705 0 : return;
1706 : }
1707 0 : if ( m_pMatchCaseCB == pCtrl && ( SEARCH_OPTIONS_EXACT & nOptions ) != 0 )
1708 : {
1709 0 : if (!m_pJapOptionsCB->IsChecked())
1710 0 : m_pMatchCaseCB->Enable();
1711 0 : return;
1712 : }
1713 0 : if ( m_pSelectionBtn == pCtrl && ( SEARCH_OPTIONS_SELECTION & nOptions ) != 0 )
1714 : {
1715 0 : m_pSelectionBtn->Enable();
1716 0 : return;
1717 : }
1718 0 : if ( m_pLayoutBtn == pCtrl && ( SEARCH_OPTIONS_FAMILIES & nOptions ) != 0 )
1719 : {
1720 0 : m_pLayoutBtn->Enable();
1721 0 : return;
1722 : }
1723 0 : if ( m_pAttributeBtn == pCtrl
1724 0 : && ( SEARCH_OPTIONS_FORMAT & nOptions ) != 0
1725 0 : && pSearchList )
1726 : {
1727 0 : m_pAttributeBtn->Enable( pImpl->bFocusOnSearch );
1728 : }
1729 0 : if ( m_pFormatBtn == pCtrl && ( SEARCH_OPTIONS_FORMAT & nOptions ) != 0 )
1730 : {
1731 0 : m_pFormatBtn->Enable();
1732 0 : return;
1733 : }
1734 0 : if ( m_pNoFormatBtn == pCtrl && ( SEARCH_OPTIONS_FORMAT & nOptions ) != 0 )
1735 : {
1736 0 : m_pNoFormatBtn->Enable();
1737 0 : return;
1738 : }
1739 0 : if ( m_pSimilarityBox == pCtrl &&
1740 0 : ( SEARCH_OPTIONS_SIMILARITY & nOptions ) != 0 )
1741 : {
1742 0 : m_pSimilarityBox->Enable();
1743 :
1744 0 : if ( m_pSimilarityBox->IsChecked() )
1745 0 : m_pSimilarityBtn->Enable();
1746 : }
1747 : }
1748 :
1749 :
1750 :
1751 0 : void SvxSearchDialog::SetItem_Impl( const SvxSearchItem* pItem )
1752 : {
1753 0 : if ( pItem )
1754 : {
1755 0 : delete pSearchItem;
1756 0 : pSearchItem = static_cast<SvxSearchItem*>(pItem->Clone());
1757 0 : Init_Impl( pSearchItem->GetPattern() &&
1758 0 : ( !pSearchList || !pSearchList->Count() ) );
1759 : }
1760 0 : }
1761 :
1762 :
1763 :
1764 0 : IMPL_LINK( SvxSearchDialog, FocusHdl_Impl, Control *, pCtrl )
1765 : {
1766 0 : sal_Int32 nTxtLen = m_pSearchAttrText->GetText().getLength();
1767 :
1768 0 : if ( pCtrl == m_pSearchLB )
1769 : {
1770 0 : if ( pCtrl->HasChildPathFocus() )
1771 0 : pImpl->bFocusOnSearch = true;
1772 0 : pCtrl = m_pSearchLB;
1773 0 : bSearch = true;
1774 :
1775 0 : if( nTxtLen )
1776 0 : EnableControl_Impl(m_pNoFormatBtn);
1777 : else
1778 0 : m_pNoFormatBtn->Disable();
1779 0 : EnableControl_Impl(m_pAttributeBtn);
1780 : }
1781 : else
1782 : {
1783 0 : pImpl->bFocusOnSearch = false;
1784 0 : pCtrl = m_pReplaceLB;
1785 0 : bSearch = false;
1786 :
1787 0 : if (!m_pReplaceAttrText->GetText().isEmpty())
1788 0 : EnableControl_Impl(m_pNoFormatBtn);
1789 : else
1790 0 : m_pNoFormatBtn->Disable();
1791 0 : m_pAttributeBtn->Disable();
1792 : }
1793 0 : bSet = true;
1794 :
1795 0 : static_cast<ComboBox*>(pCtrl)->SetSelection( Selection( SELECTION_MIN, SELECTION_MAX ) );
1796 :
1797 0 : ModifyHdl_Impl( static_cast<ComboBox*>(pCtrl) );
1798 :
1799 0 : if (bFormat && nTxtLen)
1800 0 : m_pLayoutBtn->SetText(aLayoutStr);
1801 : else
1802 : {
1803 0 : SvtModuleOptions::EFactory eFactory = getModule(rBindings);
1804 : bool bWriterApp =
1805 0 : eFactory == SvtModuleOptions::E_WRITER ||
1806 0 : eFactory == SvtModuleOptions::E_WRITERWEB ||
1807 0 : eFactory == SvtModuleOptions::E_WRITERGLOBAL;
1808 0 : bool bCalcApp = eFactory == SvtModuleOptions::E_CALC;
1809 :
1810 0 : if (bWriterApp)
1811 0 : m_pLayoutBtn->SetText(aLayoutWriterStr);
1812 : else
1813 : {
1814 0 : if (bCalcApp)
1815 0 : m_pLayoutBtn->SetText(aLayoutCalcStr);
1816 : else
1817 0 : m_pLayoutBtn->SetText(aStylesStr);
1818 : }
1819 : }
1820 0 : return 0;
1821 : }
1822 :
1823 :
1824 :
1825 0 : IMPL_LINK_NOARG(SvxSearchDialog, LoseFocusHdl_Impl)
1826 : {
1827 0 : SaveToModule_Impl();
1828 0 : return 0;
1829 : }
1830 :
1831 :
1832 :
1833 0 : IMPL_LINK_NOARG(SvxSearchDialog, FormatHdl_Impl)
1834 : {
1835 0 : SfxObjectShell* pSh = SfxObjectShell::Current();
1836 :
1837 : DBG_ASSERT( pSh, "no DocShell" );
1838 :
1839 0 : if ( !pSh || !pImpl->pRanges )
1840 0 : return 0;
1841 :
1842 0 : sal_sSize nCnt = 0;
1843 0 : const sal_uInt16* pPtr = pImpl->pRanges;
1844 0 : const sal_uInt16* pTmp = pPtr;
1845 :
1846 0 : while( *pTmp )
1847 0 : pTmp++;
1848 0 : nCnt = pTmp - pPtr + 7;
1849 0 : boost::scoped_array<sal_uInt16> pWhRanges(new sal_uInt16[nCnt]);
1850 0 : sal_uInt16 nPos = 0;
1851 :
1852 0 : while( *pPtr )
1853 : {
1854 0 : pWhRanges[nPos++] = *pPtr++;
1855 : }
1856 :
1857 0 : pWhRanges[nPos++] = SID_ATTR_PARA_MODEL;
1858 0 : pWhRanges[nPos++] = SID_ATTR_PARA_MODEL;
1859 :
1860 0 : sal_uInt16 nBrushWhich = pSh->GetPool().GetWhich(SID_ATTR_BRUSH);
1861 0 : pWhRanges[nPos++] = nBrushWhich;
1862 0 : pWhRanges[nPos++] = nBrushWhich;
1863 0 : pWhRanges[nPos++] = SID_PARA_BACKGRND_DESTINATION;
1864 0 : pWhRanges[nPos++] = SID_PARA_BACKGRND_DESTINATION;
1865 0 : pWhRanges[nPos] = 0;
1866 0 : SfxItemPool& rPool = pSh->GetPool();
1867 0 : SfxItemSet aSet( rPool, pWhRanges.get() );
1868 0 : OUString aTxt;
1869 :
1870 0 : aSet.InvalidateAllItems();
1871 0 : aSet.Put(SvxBrushItem(nBrushWhich));
1872 0 : aSet.Put(SfxUInt16Item(SID_PARA_BACKGRND_DESTINATION, PARA_DEST_CHAR));
1873 :
1874 0 : if ( bSearch )
1875 : {
1876 0 : aTxt = SVX_RESSTR( RID_SVXSTR_SEARCH );
1877 0 : pSearchList->Get( aSet );
1878 : }
1879 : else
1880 : {
1881 0 : aTxt = SVX_RESSTR( RID_SVXSTR_REPLACE );
1882 0 : pReplaceList->Get( aSet );
1883 : }
1884 0 : aSet.DisableItem(SID_ATTR_PARA_MODEL);
1885 0 : aSet.DisableItem(rPool.GetWhich(SID_ATTR_PARA_PAGEBREAK));
1886 0 : aSet.DisableItem(rPool.GetWhich(SID_ATTR_PARA_KEEP));
1887 :
1888 :
1889 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
1890 0 : if(pFact)
1891 : {
1892 0 : boost::scoped_ptr<SfxAbstractTabDialog> pDlg(pFact->CreateTabItemDialog(this, aSet));
1893 : DBG_ASSERT(pDlg, "Dialog creation failed!");
1894 0 : aTxt = pDlg->GetText() + aTxt;
1895 0 : pDlg->SetText( aTxt );
1896 :
1897 0 : if ( pDlg->Execute() == RET_OK )
1898 : {
1899 : DBG_ASSERT( pDlg->GetOutputItemSet(), "invalid Output-Set" );
1900 0 : SfxItemSet aOutSet( *pDlg->GetOutputItemSet() );
1901 :
1902 0 : SearchAttrItemList* pList = bSearch ? pSearchList : pReplaceList;
1903 :
1904 : SearchAttrItem* pAItem;
1905 : const SfxPoolItem* pItem;
1906 0 : for( sal_uInt16 n = 0; n < pList->Count(); ++n )
1907 0 : if( !IsInvalidItem( (pAItem = &pList->GetObject(n))->pItem ) &&
1908 : SfxItemState::SET == aOutSet.GetItemState(
1909 0 : pAItem->pItem->Which(), false, &pItem ) )
1910 : {
1911 0 : delete pAItem->pItem;
1912 0 : pAItem->pItem = pItem->Clone();
1913 0 : aOutSet.ClearItem( pAItem->pItem->Which() );
1914 : }
1915 :
1916 0 : if( aOutSet.Count() )
1917 0 : pList->Put( aOutSet );
1918 :
1919 0 : PaintAttrText_Impl(); // Set AttributText in GroupBox
1920 0 : }
1921 : }
1922 0 : return 0;
1923 : }
1924 :
1925 :
1926 :
1927 0 : IMPL_LINK_NOARG(SvxSearchDialog, NoFormatHdl_Impl)
1928 : {
1929 0 : SvtModuleOptions::EFactory eFactory = getModule(rBindings);
1930 : bool bWriterApp =
1931 0 : eFactory == SvtModuleOptions::E_WRITER ||
1932 0 : eFactory == SvtModuleOptions::E_WRITERWEB ||
1933 0 : eFactory == SvtModuleOptions::E_WRITERGLOBAL;
1934 0 : bool bCalcApp = eFactory == SvtModuleOptions::E_CALC;
1935 :
1936 0 : if (bCalcApp)
1937 0 : m_pLayoutBtn->SetText( aLayoutCalcStr );
1938 : else
1939 : {
1940 0 : if (bWriterApp)
1941 0 : m_pLayoutBtn->SetText( aLayoutWriterStr);
1942 : else
1943 0 : m_pLayoutBtn->SetText( aStylesStr );
1944 : }
1945 :
1946 0 : bFormat = false;
1947 0 : m_pLayoutBtn->Check( false );
1948 :
1949 0 : if ( bSearch )
1950 : {
1951 0 : m_pSearchAttrText->SetText( "" );
1952 0 : pSearchList->Clear();
1953 : }
1954 : else
1955 : {
1956 0 : m_pReplaceAttrText->SetText( "" );
1957 0 : pReplaceList->Clear();
1958 : }
1959 0 : pImpl->bSaveToModule = false;
1960 0 : TemplateHdl_Impl(m_pLayoutBtn);
1961 0 : pImpl->bSaveToModule = true;
1962 0 : m_pNoFormatBtn->Disable();
1963 0 : return 0;
1964 : }
1965 :
1966 :
1967 :
1968 0 : IMPL_LINK_NOARG(SvxSearchDialog, AttributeHdl_Impl)
1969 : {
1970 0 : if ( !pSearchList || !pImpl->pRanges )
1971 0 : return 0;
1972 :
1973 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
1974 0 : if(pFact)
1975 : {
1976 0 : boost::scoped_ptr<VclAbstractDialog> pDlg(pFact->CreateSvxSearchAttributeDialog( this, *pSearchList, pImpl->pRanges ));
1977 : DBG_ASSERT(pDlg, "Dialog creation failed!");
1978 0 : pDlg->Execute();
1979 : }
1980 0 : PaintAttrText_Impl();
1981 0 : return 0;
1982 : }
1983 :
1984 :
1985 :
1986 0 : IMPL_LINK( SvxSearchDialog, TimeoutHdl_Impl, Timer *, pTimer )
1987 : {
1988 0 : SfxViewShell* pViewShell = SfxViewShell::Current();
1989 :
1990 0 : if ( pViewShell )
1991 : {
1992 0 : if ( pViewShell->HasSelection( m_pSearchLB->IsVisible() ) )
1993 0 : EnableControl_Impl(m_pSelectionBtn);
1994 : else
1995 : {
1996 0 : m_pSelectionBtn->Check( false );
1997 0 : m_pSelectionBtn->Disable();
1998 : }
1999 : }
2000 :
2001 0 : pTimer->Start();
2002 0 : return 0;
2003 : }
2004 :
2005 :
2006 :
2007 0 : OUString& SvxSearchDialog::BuildAttrText_Impl( OUString& rStr,
2008 : bool bSrchFlag ) const
2009 : {
2010 0 : if ( !rStr.isEmpty() )
2011 0 : rStr = "";
2012 :
2013 0 : SfxObjectShell* pSh = SfxObjectShell::Current();
2014 : DBG_ASSERT( pSh, "no DocShell" );
2015 :
2016 0 : if ( !pSh )
2017 0 : return rStr;
2018 :
2019 0 : SfxItemPool& rPool = pSh->GetPool();
2020 0 : SearchAttrItemList* pList = bSrchFlag ? pSearchList : pReplaceList;
2021 :
2022 0 : if ( !pList )
2023 0 : return rStr;
2024 :
2025 : // Metric query
2026 0 : SfxMapUnit eMapUnit = SFX_MAPUNIT_CM;
2027 0 : FieldUnit eFieldUnit = pSh->GetModule()->GetFieldUnit();
2028 0 : switch ( eFieldUnit )
2029 : {
2030 0 : case FUNIT_MM: eMapUnit = SFX_MAPUNIT_MM; break;
2031 : case FUNIT_CM:
2032 : case FUNIT_M:
2033 0 : case FUNIT_KM: eMapUnit = SFX_MAPUNIT_CM; break;
2034 0 : case FUNIT_TWIP: eMapUnit = SFX_MAPUNIT_TWIP; break;
2035 : case FUNIT_POINT:
2036 0 : case FUNIT_PICA: eMapUnit = SFX_MAPUNIT_POINT; break;
2037 : case FUNIT_INCH:
2038 : case FUNIT_FOOT:
2039 0 : case FUNIT_MILE: eMapUnit = SFX_MAPUNIT_INCH; break;
2040 0 : case FUNIT_100TH_MM: eMapUnit = SFX_MAPUNIT_100TH_MM; break;
2041 : default: ;//prevent warning
2042 : }
2043 :
2044 0 : ResStringArray aAttrNames( SVX_RES( RID_ATTR_NAMES ) );
2045 :
2046 0 : for ( sal_uInt16 i = 0; i < pList->Count(); ++i )
2047 : {
2048 0 : const SearchAttrItem& rItem = pList->GetObject(i);
2049 :
2050 0 : if ( !rStr.isEmpty() )
2051 0 : rStr += ", ";
2052 :
2053 0 : if ( !IsInvalidItem( rItem.pItem ) )
2054 : {
2055 0 : OUString aStr;
2056 : rPool.GetPresentation( *rItem.pItem,
2057 0 : eMapUnit, aStr );
2058 0 : rStr += aStr;
2059 : }
2060 0 : else if ( rItem.nSlot == SID_ATTR_BRUSH_CHAR )
2061 : {
2062 : // Special treatment for text background
2063 0 : rStr += SVX_RESSTR( RID_SVXITEMS_BRUSH_CHAR );
2064 : }
2065 : else
2066 : {
2067 0 : sal_uInt32 nId = aAttrNames.FindIndex( rItem.nSlot );
2068 0 : if ( RESARRAY_INDEX_NOTFOUND != nId )
2069 0 : rStr += aAttrNames.GetString( nId );
2070 : }
2071 : }
2072 0 : return rStr;
2073 : }
2074 :
2075 :
2076 :
2077 0 : void SvxSearchDialog::PaintAttrText_Impl()
2078 : {
2079 0 : OUString aDesc;
2080 0 : BuildAttrText_Impl( aDesc, bSearch );
2081 :
2082 0 : if ( !bFormat && !aDesc.isEmpty() )
2083 0 : bFormat = true;
2084 :
2085 0 : if ( bSearch )
2086 : {
2087 0 : m_pSearchAttrText->SetText( aDesc );
2088 0 : FocusHdl_Impl(m_pSearchLB);
2089 : }
2090 : else
2091 : {
2092 0 : m_pReplaceAttrText->SetText( aDesc );
2093 0 : FocusHdl_Impl(m_pReplaceLB);
2094 0 : }
2095 0 : }
2096 :
2097 :
2098 :
2099 0 : void SvxSearchDialog::SetModifyFlag_Impl( const Control* pCtrl )
2100 : {
2101 0 : if ( m_pSearchLB == static_cast<const ComboBox*>(pCtrl) )
2102 0 : nModifyFlag |= MODIFY_SEARCH;
2103 0 : else if ( m_pReplaceLB == static_cast<const ComboBox*>(pCtrl) )
2104 0 : nModifyFlag |= MODIFY_REPLACE;
2105 0 : else if ( m_pWordBtn == static_cast<const CheckBox*>(pCtrl) )
2106 0 : nModifyFlag |= MODIFY_WORD;
2107 0 : else if ( m_pMatchCaseCB == static_cast<const CheckBox*>(pCtrl) )
2108 0 : nModifyFlag |= MODIFY_EXACT;
2109 0 : else if ( m_pBackwardsBtn == static_cast<const CheckBox*>(pCtrl) )
2110 0 : nModifyFlag |= MODIFY_BACKWARDS;
2111 0 : else if ( m_pNotesBtn == static_cast<const CheckBox*>(pCtrl) )
2112 0 : nModifyFlag |= MODIFY_NOTES;
2113 0 : else if ( m_pSelectionBtn == static_cast<const CheckBox*>(pCtrl) )
2114 0 : nModifyFlag |= MODIFY_SELECTION;
2115 0 : else if ( m_pRegExpBtn == static_cast<const CheckBox*>(pCtrl) )
2116 0 : nModifyFlag |= MODIFY_REGEXP;
2117 0 : else if ( m_pLayoutBtn == static_cast<const CheckBox*>(pCtrl) )
2118 0 : nModifyFlag |= MODIFY_LAYOUT;
2119 0 : else if ( m_pSimilarityBox == static_cast<const CheckBox*>(pCtrl) )
2120 0 : nModifyFlag |= MODIFY_SIMILARITY;
2121 0 : else if ( m_pCalcSearchInLB == static_cast<const ListBox*>(pCtrl) )
2122 : {
2123 0 : nModifyFlag |= MODIFY_FORMULAS;
2124 0 : nModifyFlag |= MODIFY_VALUES;
2125 0 : nModifyFlag |= MODIFY_CALC_NOTES;
2126 : }
2127 0 : else if ( m_pRowsBtn == static_cast<const RadioButton*>(pCtrl) )
2128 0 : nModifyFlag |= MODIFY_ROWS;
2129 0 : else if ( m_pColumnsBtn == static_cast<const RadioButton*>(pCtrl) )
2130 0 : nModifyFlag |= MODIFY_COLUMNS;
2131 0 : else if ( m_pAllSheetsCB == static_cast<const CheckBox*>(pCtrl) )
2132 0 : nModifyFlag |= MODIFY_ALLTABLES;
2133 0 : }
2134 :
2135 :
2136 :
2137 0 : void SvxSearchDialog::SaveToModule_Impl()
2138 : {
2139 0 : if ( !pSearchItem )
2140 0 : return;
2141 :
2142 0 : if ( m_pLayoutBtn->IsChecked() )
2143 : {
2144 0 : pSearchItem->SetSearchString ( m_pSearchTmplLB->GetSelectEntry() );
2145 0 : pSearchItem->SetReplaceString( m_pReplaceTmplLB->GetSelectEntry() );
2146 : }
2147 : else
2148 : {
2149 0 : pSearchItem->SetSearchString ( m_pSearchLB->GetText() );
2150 0 : pSearchItem->SetReplaceString( m_pReplaceLB->GetText() );
2151 0 : Remember_Impl( m_pSearchLB->GetText(), true );
2152 : }
2153 :
2154 0 : pSearchItem->SetRegExp( false );
2155 0 : pSearchItem->SetLevenshtein( false );
2156 0 : if (GetCheckBoxValue(m_pRegExpBtn))
2157 0 : pSearchItem->SetRegExp( true );
2158 0 : else if (GetCheckBoxValue(m_pSimilarityBox))
2159 0 : pSearchItem->SetLevenshtein( true );
2160 :
2161 0 : pSearchItem->SetWordOnly(GetCheckBoxValue(m_pWordBtn));
2162 0 : pSearchItem->SetBackward(GetCheckBoxValue(m_pBackwardsBtn));
2163 0 : pSearchItem->SetNotes(GetCheckBoxValue(m_pNotesBtn));
2164 0 : pSearchItem->SetPattern(GetCheckBoxValue(m_pLayoutBtn));
2165 0 : pSearchItem->SetSelection(GetCheckBoxValue(m_pSelectionBtn));
2166 0 : pSearchItem->SetUseAsianOptions(GetCheckBoxValue(m_pJapOptionsCB));
2167 :
2168 0 : SvtSearchOptions aOpt;
2169 0 : aOpt.SetIgnoreDiacritics_CTL(GetCheckBoxValue(m_pIgnoreDiacritics));
2170 0 : aOpt.SetIgnoreKashida_CTL(GetCheckBoxValue(m_pIgnoreKashida));
2171 :
2172 0 : sal_Int32 nFlags = GetTransliterationFlags();
2173 0 : if( !pSearchItem->IsUseAsianOptions())
2174 : nFlags &= (TransliterationModules_IGNORE_CASE |
2175 0 : TransliterationModules_IGNORE_WIDTH );
2176 0 : if (GetCheckBoxValue(m_pIgnoreDiacritics))
2177 0 : nFlags |= TransliterationModulesExtra::IGNORE_DIACRITICS_CTL;
2178 0 : if (GetCheckBoxValue(m_pIgnoreKashida))
2179 0 : nFlags |= TransliterationModulesExtra::IGNORE_KASHIDA_CTL;
2180 0 : pSearchItem->SetTransliterationFlags( nFlags );
2181 :
2182 0 : if ( !bWriter )
2183 : {
2184 0 : if ( m_pCalcSearchInLB->GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND )
2185 0 : pSearchItem->SetCellType( m_pCalcSearchInLB->GetSelectEntryPos() );
2186 :
2187 0 : pSearchItem->SetRowDirection( m_pRowsBtn->IsChecked() );
2188 0 : pSearchItem->SetAllTables( m_pAllSheetsCB->IsChecked() );
2189 : }
2190 :
2191 0 : pSearchItem->SetCommand( SVX_SEARCHCMD_FIND );
2192 0 : nModifyFlag = 0;
2193 0 : const SfxPoolItem* ppArgs[] = { pSearchItem, 0 };
2194 0 : rBindings.GetDispatcher()->Execute( SID_SEARCH_ITEM, SfxCallMode::SLOT, ppArgs );
2195 : }
2196 :
2197 : ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer >
2198 0 : SvxSearchDialog::GetComponentInterface( bool bCreate )
2199 : {
2200 : ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > xPeer
2201 0 : (Window::GetComponentInterface(false));
2202 0 : if ( !xPeer.is() && bCreate )
2203 : {
2204 0 : ::com::sun::star::awt::XWindowPeer* mxPeer = new VCLXSvxFindReplaceDialog(this);
2205 0 : SetComponentInterface(mxPeer);
2206 0 : return mxPeer;
2207 : }
2208 : else
2209 0 : return xPeer;
2210 : }
2211 :
2212 61963 : SFX_IMPL_CHILDWINDOW_WITHID(SvxSearchDialogWrapper, SID_SEARCH_DLG);
2213 :
2214 :
2215 :
2216 0 : SvxSearchDialogWrapper::SvxSearchDialogWrapper( vcl::Window* _pParent, sal_uInt16 nId,
2217 : SfxBindings* pBindings,
2218 : SfxChildWinInfo* pInfo )
2219 : : SfxChildWindow( _pParent, nId )
2220 0 : , dialog (new SvxSearchDialog (_pParent, this, *pBindings))
2221 : {
2222 0 : pWindow = dialog;
2223 0 : dialog->Initialize( pInfo );
2224 :
2225 0 : pBindings->Update( SID_SEARCH_ITEM );
2226 0 : pBindings->Update( SID_SEARCH_OPTIONS );
2227 0 : pBindings->Update( SID_SEARCH_SEARCHSET );
2228 0 : pBindings->Update( SID_SEARCH_REPLACESET );
2229 0 : eChildAlignment = SFX_ALIGN_NOALIGNMENT;
2230 0 : dialog->bConstruct = false;
2231 0 : }
2232 :
2233 0 : SvxSearchDialogWrapper::~SvxSearchDialogWrapper ()
2234 : {
2235 0 : }
2236 :
2237 :
2238 :
2239 :
2240 0 : SfxChildWinInfo SvxSearchDialogWrapper::GetInfo() const
2241 : {
2242 0 : SfxChildWinInfo aInfo = SfxChildWindow::GetInfo();
2243 0 : aInfo.bVisible = false;
2244 0 : return aInfo;
2245 : }
2246 :
2247 :
2248 0 : static vcl::Window* lcl_GetSearchLabelWindow()
2249 : {
2250 : css::uno::Reference< css::beans::XPropertySet > xPropSet(
2251 0 : SfxViewFrame::Current()->GetFrame().GetFrameInterface(), css::uno::UNO_QUERY_THROW);
2252 0 : css::uno::Reference< css::frame::XLayoutManager > xLayoutManager;
2253 0 : xPropSet->getPropertyValue("LayoutManager") >>= xLayoutManager;
2254 : css::uno::Reference< css::ui::XUIElement > xUIElement =
2255 0 : xLayoutManager->getElement("private:resource/toolbar/findbar");
2256 0 : if (!xUIElement.is())
2257 0 : return 0;
2258 : css::uno::Reference< css::awt::XWindow > xWindow(
2259 0 : xUIElement->getRealInterface(), css::uno::UNO_QUERY_THROW);
2260 0 : ToolBox* pToolBox = static_cast<ToolBox*>( VCLUnoHelper::GetWindow(xWindow) );
2261 0 : for (size_t i = 0; pToolBox && i < pToolBox->GetItemCount(); ++i)
2262 0 : if (pToolBox->GetItemCommand(i) == ".uno:SearchLabel")
2263 0 : return pToolBox->GetItemWindow(i);
2264 0 : return 0;
2265 : }
2266 :
2267 0 : void SvxSearchDialogWrapper::SetSearchLabel(const SearchLabel& rSL)
2268 : {
2269 0 : OUString sStr;
2270 0 : if (rSL == SL_End)
2271 0 : sStr = SVX_RESSTR(RID_SVXSTR_SEARCH_END);
2272 0 : else if (rSL == SL_EndSheet)
2273 0 : sStr = SVX_RESSTR(RID_SVXSTR_SEARCH_END_SHEET);
2274 0 : else if (rSL == SL_NotFound)
2275 0 : sStr = SVX_RESSTR(RID_SVXSTR_SEARCH_NOT_FOUND);
2276 :
2277 0 : if (vcl::Window *pSearchLabel = lcl_GetSearchLabelWindow())
2278 : {
2279 0 : if (sStr.isEmpty())
2280 0 : pSearchLabel->Hide();
2281 : else
2282 : {
2283 0 : pSearchLabel->SetText(sStr);
2284 0 : pSearchLabel->Show();
2285 : }
2286 : }
2287 0 : if (SvxSearchDialogWrapper *pWrp = static_cast<SvxSearchDialogWrapper*>( SfxViewFrame::Current()->
2288 0 : GetChildWindow( SvxSearchDialogWrapper::GetChildWindowId() )))
2289 0 : pWrp->getDialog()->SetSearchLabel(sStr);
2290 594 : }
2291 :
2292 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|