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