Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <tbunosearchcontrollers.hxx>
21 :
22 : #include <svx/dialogs.hrc>
23 : #include <svx/dialmgr.hxx>
24 :
25 : #include <comphelper/processfactory.hxx>
26 : #include <cppuhelper/queryinterface.hxx>
27 : #include <cppuhelper/supportsservice.hxx>
28 : #include <com/sun/star/beans/XPropertySet.hpp>
29 : #include <com/sun/star/frame/XLayoutManager.hpp>
30 : #include <com/sun/star/i18n/TransliterationModules.hpp>
31 : #include <com/sun/star/i18n/TransliterationModulesExtra.hpp>
32 : #include <com/sun/star/text/XTextRange.hpp>
33 : #include <com/sun/star/ui/XUIElement.hpp>
34 : #include <com/sun/star/util/URL.hpp>
35 : #include <com/sun/star/util/URLTransformer.hpp>
36 :
37 : #include <svl/ctloptions.hxx>
38 : #include <svl/srchitem.hxx>
39 : #include <toolkit/helper/vclunohelper.hxx>
40 : #include <vcl/toolbox.hxx>
41 : #include <vcl/svapp.hxx>
42 : #include <osl/mutex.hxx>
43 : #include <rtl/ref.hxx>
44 : #include <rtl/instance.hxx>
45 : #include <svx/srchdlg.hxx>
46 :
47 : #include <vcl/fixed.hxx>
48 :
49 : using namespace css;
50 :
51 : namespace {
52 :
53 : static const char SEARCHITEM_COMMAND[] = "SearchItem.Command";
54 : static const char SEARCHITEM_SEARCHSTRING[] = "SearchItem.SearchString";
55 : static const char SEARCHITEM_SEARCHBACKWARD[] = "SearchItem.Backward";
56 : static const char SEARCHITEM_SEARCHFLAGS[] = "SearchItem.SearchFlags";
57 : static const char SEARCHITEM_TRANSLITERATEFLAGS[] = "SearchItem.TransliterateFlags";
58 : static const char SEARCHITEM_ALGORITHMTYPE[] = "SearchItem.AlgorithmType";
59 :
60 : static const char COMMAND_EXECUTESEARCH[] = ".uno:ExecuteSearch";
61 : static const char COMMAND_FINDTEXT[] = ".uno:FindText";
62 : static const char COMMAND_DOWNSEARCH[] = ".uno:DownSearch";
63 : static const char COMMAND_UPSEARCH[] = ".uno:UpSearch";
64 : static const char COMMAND_EXITSEARCH[] = ".uno:ExitSearch";
65 : static const char COMMAND_MATCHCASE[] = ".uno:MatchCase";
66 : static const char COMMAND_APPENDSEARCHHISTORY[] = "AppendSearchHistory";
67 :
68 : static const sal_Int32 REMEMBER_SIZE = 10;
69 :
70 0 : void impl_executeSearch( const css::uno::Reference< css::uno::XComponentContext >& rxContext,
71 : const css::uno::Reference< css::frame::XFrame >& xFrame,
72 : const ToolBox* pToolBox,
73 : const bool aSearchBackwards = false,
74 : const bool aFindAll = false )
75 : {
76 0 : css::uno::Reference< css::util::XURLTransformer > xURLTransformer( css::util::URLTransformer::create( rxContext ) );
77 0 : css::util::URL aURL;
78 0 : aURL.Complete = COMMAND_EXECUTESEARCH;
79 0 : xURLTransformer->parseStrict(aURL);
80 :
81 0 : OUString sFindText;
82 0 : bool aMatchCase = false;
83 0 : if ( pToolBox )
84 : {
85 0 : sal_uInt16 nItemCount = pToolBox->GetItemCount();
86 0 : for ( sal_uInt16 i=0; i<nItemCount; ++i )
87 : {
88 0 : OUString sItemCommand = pToolBox->GetItemCommand(i);
89 0 : if ( sItemCommand == COMMAND_FINDTEXT )
90 : {
91 0 : vcl::Window* pItemWin = pToolBox->GetItemWindow(i);
92 0 : if (pItemWin)
93 0 : sFindText = pItemWin->GetText();
94 0 : } else if ( sItemCommand == COMMAND_MATCHCASE )
95 : {
96 0 : CheckBox* pItemWin = static_cast<CheckBox*>( pToolBox->GetItemWindow(i) );
97 0 : if (pItemWin)
98 0 : aMatchCase = pItemWin->IsChecked();
99 : }
100 0 : }
101 : }
102 :
103 0 : css::uno::Sequence< css::beans::PropertyValue > lArgs(6);
104 0 : lArgs[0].Name = SEARCHITEM_SEARCHSTRING;
105 0 : lArgs[0].Value <<= sFindText;
106 0 : lArgs[1].Name = SEARCHITEM_SEARCHBACKWARD;
107 0 : lArgs[1].Value <<= aSearchBackwards;
108 0 : lArgs[2].Name = SEARCHITEM_SEARCHFLAGS;
109 0 : lArgs[2].Value <<= (sal_Int32)0;
110 0 : lArgs[3].Name = SEARCHITEM_TRANSLITERATEFLAGS;
111 0 : SvtCTLOptions aCTLOptions;
112 0 : sal_Int32 nFlags = 0;
113 0 : nFlags |= (!aMatchCase ? static_cast<int>(com::sun::star::i18n::TransliterationModules_IGNORE_CASE) : 0);
114 0 : nFlags |= (aCTLOptions.IsCTLFontEnabled() ? com::sun::star::i18n::TransliterationModulesExtra::IGNORE_DIACRITICS_CTL:0 );
115 0 : nFlags |= (aCTLOptions.IsCTLFontEnabled() ? com::sun::star::i18n::TransliterationModulesExtra::IGNORE_KASHIDA_CTL:0 );
116 0 : lArgs[3].Value <<= nFlags;
117 0 : lArgs[4].Name = SEARCHITEM_COMMAND;
118 0 : lArgs[4].Value <<= (sal_Int16)(aFindAll ?
119 0 : SvxSearchCmd::FIND_ALL : SvxSearchCmd::FIND );
120 0 : lArgs[5].Name = SEARCHITEM_ALGORITHMTYPE;
121 0 : lArgs[5].Value <<= (sal_Int16)0; // 0 == SearchAlgorithms_ABSOLUTE
122 :
123 0 : css::uno::Reference< css::frame::XDispatchProvider > xDispatchProvider(xFrame, css::uno::UNO_QUERY);
124 0 : if ( xDispatchProvider.is() )
125 : {
126 0 : css::uno::Reference< css::frame::XDispatch > xDispatch = xDispatchProvider->queryDispatch( aURL, OUString(), 0 );
127 0 : if ( xDispatch.is() && !aURL.Complete.isEmpty() )
128 0 : xDispatch->dispatch( aURL, lArgs );
129 0 : }
130 0 : }
131 :
132 0 : FindTextFieldControl::FindTextFieldControl( vcl::Window* pParent, WinBits nStyle,
133 : css::uno::Reference< css::frame::XFrame >& xFrame,
134 : const css::uno::Reference< css::uno::XComponentContext >& xContext) :
135 : ComboBox( pParent, nStyle ),
136 : m_xFrame(xFrame),
137 0 : m_xContext(xContext)
138 : {
139 0 : SetPlaceholderText(SVX_RESSTR(RID_SVXSTR_FINDBAR_FIND));
140 0 : EnableAutocomplete(true, true);
141 0 : }
142 :
143 0 : void FindTextFieldControl::Remember_Impl(const OUString& rStr)
144 : {
145 0 : sal_uInt16 nCount = GetEntryCount();
146 :
147 0 : for (sal_uInt16 i=0; i<nCount; ++i)
148 : {
149 0 : if ( rStr == GetEntry(i))
150 0 : return;
151 : }
152 :
153 0 : if (nCount == REMEMBER_SIZE)
154 0 : RemoveEntryAt(REMEMBER_SIZE-1);
155 :
156 0 : InsertEntry(rStr, 0);
157 : }
158 :
159 0 : void FindTextFieldControl::SetTextToSelected_Impl()
160 : {
161 0 : OUString aString;
162 :
163 : try
164 : {
165 0 : css::uno::Reference<css::frame::XController> xController(m_xFrame->getController(), css::uno::UNO_QUERY_THROW);
166 0 : css::uno::Reference<css::frame::XModel> xModel(xController->getModel(), css::uno::UNO_QUERY_THROW);
167 0 : css::uno::Reference<css::container::XIndexAccess> xIndexAccess(xModel->getCurrentSelection(), css::uno::UNO_QUERY_THROW);
168 0 : if (xIndexAccess->getCount() > 0)
169 : {
170 0 : css::uno::Reference<css::text::XTextRange> xTextRange(xIndexAccess->getByIndex(0), css::uno::UNO_QUERY_THROW);
171 0 : aString = xTextRange->getString();
172 0 : }
173 : }
174 0 : catch ( ... )
175 : {
176 : }
177 :
178 0 : if ( !aString.isEmpty() )
179 : {
180 : // If something is selected in the document, prepopulate with this
181 0 : SetText( aString );
182 0 : GetModifyHdl().Call(this); // FIXME why SetText doesn't trigger this?
183 : }
184 0 : else if (GetEntryCount() > 0)
185 : {
186 : // Else, prepopulate with last search word (fdo#84256)
187 0 : SetText(GetEntry(0));
188 0 : }
189 0 : }
190 :
191 0 : bool FindTextFieldControl::PreNotify( NotifyEvent& rNEvt )
192 : {
193 0 : bool nRet= ComboBox::PreNotify( rNEvt );
194 :
195 0 : switch ( rNEvt.GetType() )
196 : {
197 : case MouseNotifyEvent::KEYINPUT:
198 : {
199 : // Clear SearchLabel when altering the search string
200 : #if HAVE_FEATURE_DESKTOP
201 0 : SvxSearchDialogWrapper::SetSearchLabel(SL_Empty);
202 : #endif
203 :
204 0 : const KeyEvent* pKeyEvent = rNEvt.GetKeyEvent();
205 0 : bool bShift = pKeyEvent->GetKeyCode().IsShift();
206 0 : bool bMod1 = pKeyEvent->GetKeyCode().IsMod1();
207 0 : sal_uInt16 nCode = pKeyEvent->GetKeyCode().GetCode();
208 :
209 : // Close the search bar on Escape
210 0 : if ( KEY_ESCAPE == nCode )
211 : {
212 0 : nRet = true;
213 0 : GrabFocusToDocument();
214 :
215 : // hide the findbar
216 0 : css::uno::Reference< css::beans::XPropertySet > xPropSet(m_xFrame, css::uno::UNO_QUERY);
217 0 : if (xPropSet.is())
218 : {
219 0 : css::uno::Reference< css::frame::XLayoutManager > xLayoutManager;
220 0 : css::uno::Any aValue = xPropSet->getPropertyValue("LayoutManager");
221 0 : aValue >>= xLayoutManager;
222 0 : if (xLayoutManager.is())
223 : {
224 0 : const OUString sResourceURL( "private:resource/toolbar/findbar" );
225 0 : xLayoutManager->hideElement( sResourceURL );
226 0 : xLayoutManager->destroyElement( sResourceURL );
227 0 : }
228 0 : }
229 : }
230 : // Select text in the search box when Ctrl-F pressed
231 0 : if ( bMod1 && nCode == KEY_F )
232 0 : SetSelection( Selection( SELECTION_MIN, SELECTION_MAX ) );
233 :
234 : // Execute the search when Return, Ctrl-G or F3 pressed
235 0 : if ( KEY_RETURN == nCode || (bMod1 && (KEY_G == nCode)) || (KEY_F3 == nCode) )
236 : {
237 0 : Remember_Impl(GetText());
238 :
239 0 : vcl::Window* pWindow = GetParent();
240 0 : ToolBox* pToolBox = static_cast<ToolBox*>(pWindow);
241 :
242 0 : impl_executeSearch( m_xContext, m_xFrame, pToolBox, bShift);
243 0 : nRet = true;
244 : }
245 0 : break;
246 : }
247 :
248 : case MouseNotifyEvent::GETFOCUS:
249 0 : SetSelection( Selection( SELECTION_MIN, SELECTION_MAX ) );
250 0 : break;
251 :
252 : default:
253 0 : break;
254 : }
255 :
256 0 : return nRet;
257 : }
258 :
259 1 : SearchToolbarControllersManager::SearchToolbarControllersManager()
260 : {
261 1 : }
262 :
263 1 : SearchToolbarControllersManager::~SearchToolbarControllersManager()
264 : {
265 1 : }
266 :
267 : namespace
268 : {
269 : class theSearchToolbarControllersManager
270 : : public rtl::Static<SearchToolbarControllersManager,
271 : theSearchToolbarControllersManager>
272 : {
273 : };
274 : }
275 :
276 7 : SearchToolbarControllersManager& SearchToolbarControllersManager::createControllersManager()
277 : {
278 7 : return theSearchToolbarControllersManager::get();
279 : }
280 :
281 0 : void SearchToolbarControllersManager::saveSearchHistory(const FindTextFieldControl* pFindTextFieldControl)
282 : {
283 0 : sal_uInt16 nECount( pFindTextFieldControl->GetEntryCount() );
284 0 : m_aSearchStrings.resize( nECount );
285 0 : for( sal_uInt16 i=0; i<nECount; ++i )
286 : {
287 0 : m_aSearchStrings[i] = pFindTextFieldControl->GetEntry(i);
288 : }
289 0 : }
290 :
291 0 : void SearchToolbarControllersManager::loadSearchHistory(FindTextFieldControl* pFindTextFieldControl)
292 : {
293 0 : for( size_t i=0; i<m_aSearchStrings.size(); ++i )
294 : {
295 0 : pFindTextFieldControl->InsertEntry(m_aSearchStrings[i],i);
296 : }
297 0 : }
298 :
299 0 : void SearchToolbarControllersManager::registryController( const css::uno::Reference< css::frame::XFrame >& xFrame, const css::uno::Reference< css::frame::XStatusListener >& xStatusListener, const OUString& sCommandURL )
300 : {
301 0 : SearchToolbarControllersMap::iterator pIt = aSearchToolbarControllersMap.find(xFrame);
302 0 : if (pIt == aSearchToolbarControllersMap.end())
303 : {
304 0 : SearchToolbarControllersVec lControllers(1);
305 0 : lControllers[0].Name = sCommandURL;
306 0 : lControllers[0].Value <<= xStatusListener;
307 0 : aSearchToolbarControllersMap.insert(SearchToolbarControllersMap::value_type(xFrame, lControllers));
308 : }
309 : else
310 : {
311 0 : sal_Int32 nSize = pIt->second.size();
312 0 : for (sal_Int32 i=0; i<nSize; ++i)
313 : {
314 0 : if (pIt->second[i].Name.equals(sCommandURL))
315 0 : return;
316 : }
317 :
318 0 : pIt->second.resize(nSize+1);
319 0 : pIt->second[nSize].Name = sCommandURL;
320 0 : pIt->second[nSize].Value <<= xStatusListener;
321 : }
322 : }
323 :
324 7 : void SearchToolbarControllersManager::freeController( const css::uno::Reference< css::frame::XFrame >& xFrame, const css::uno::Reference< css::frame::XStatusListener >& /*xStatusListener*/, const OUString& sCommandURL )
325 : {
326 7 : SearchToolbarControllersMap::iterator pIt = aSearchToolbarControllersMap.find(xFrame);
327 7 : if (pIt != aSearchToolbarControllersMap.end())
328 : {
329 0 : for (SearchToolbarControllersVec::iterator pItCtrl=pIt->second.begin(); pItCtrl!=pIt->second.end(); ++pItCtrl)
330 : {
331 0 : if (pItCtrl->Name.equals(sCommandURL))
332 : {
333 0 : pIt->second.erase(pItCtrl);
334 0 : break;
335 : }
336 : }
337 :
338 0 : if (pIt->second.empty())
339 0 : aSearchToolbarControllersMap.erase(pIt);
340 : }
341 7 : }
342 :
343 0 : css::uno::Reference< css::frame::XStatusListener > SearchToolbarControllersManager::findController( const css::uno::Reference< css::frame::XFrame >& xFrame, const OUString& sCommandURL )
344 : {
345 0 : css::uno::Reference< css::frame::XStatusListener > xStatusListener;
346 :
347 0 : SearchToolbarControllersMap::iterator pIt = aSearchToolbarControllersMap.find(xFrame);
348 0 : if (pIt != aSearchToolbarControllersMap.end())
349 : {
350 0 : for (SearchToolbarControllersVec::iterator pItCtrl =pIt->second.begin(); pItCtrl != pIt->second.end(); ++pItCtrl)
351 : {
352 0 : if (pItCtrl->Name.equals(sCommandURL))
353 : {
354 0 : pItCtrl->Value >>= xStatusListener;
355 0 : break;
356 : }
357 : }
358 : }
359 :
360 0 : return xStatusListener;
361 : }
362 :
363 1 : FindTextToolbarController::FindTextToolbarController( const css::uno::Reference< css::uno::XComponentContext >& rxContext )
364 : : svt::ToolboxController(rxContext, css::uno::Reference< css::frame::XFrame >(), OUString(COMMAND_FINDTEXT))
365 : , m_pFindTextFieldControl(NULL)
366 : , m_nDownSearchId(0)
367 1 : , m_nUpSearchId(0)
368 : {
369 1 : }
370 :
371 2 : FindTextToolbarController::~FindTextToolbarController()
372 : {
373 2 : }
374 :
375 : // XInterface
376 5 : css::uno::Any SAL_CALL FindTextToolbarController::queryInterface( const css::uno::Type& aType ) throw ( css::uno::RuntimeException, std::exception )
377 : {
378 5 : css::uno::Any a = ToolboxController::queryInterface( aType );
379 5 : if ( a.hasValue() )
380 4 : return a;
381 :
382 1 : return ::cppu::queryInterface( aType, static_cast< css::lang::XServiceInfo* >( this ) );
383 : }
384 :
385 18 : void SAL_CALL FindTextToolbarController::acquire() throw ()
386 : {
387 18 : ToolboxController::acquire();
388 18 : }
389 :
390 18 : void SAL_CALL FindTextToolbarController::release() throw ()
391 : {
392 18 : ToolboxController::release();
393 18 : }
394 :
395 : // XServiceInfo
396 1 : OUString SAL_CALL FindTextToolbarController::getImplementationName() throw( css::uno::RuntimeException, std::exception )
397 : {
398 1 : return OUString("com.sun.star.svx.FindTextToolboxController");
399 : }
400 :
401 0 : sal_Bool SAL_CALL FindTextToolbarController::supportsService( const OUString& ServiceName ) throw( css::uno::RuntimeException, std::exception )
402 : {
403 0 : return cppu::supportsService(this, ServiceName);
404 : }
405 :
406 1 : css::uno::Sequence< OUString > SAL_CALL FindTextToolbarController::getSupportedServiceNames() throw( css::uno::RuntimeException, std::exception )
407 : {
408 1 : css::uno::Sequence< OUString > aSNS( 1 );
409 1 : aSNS[0] = "com.sun.star.frame.ToolbarController";
410 1 : return aSNS;
411 : }
412 :
413 : // XComponent
414 1 : void SAL_CALL FindTextToolbarController::dispose() throw ( css::uno::RuntimeException, std::exception )
415 : {
416 1 : SolarMutexGuard aSolarMutexGuard;
417 :
418 1 : SearchToolbarControllersManager::createControllersManager().freeController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
419 :
420 1 : svt::ToolboxController::dispose();
421 1 : if (m_pFindTextFieldControl != nullptr) {
422 0 : SearchToolbarControllersManager::createControllersManager()
423 0 : .saveSearchHistory(m_pFindTextFieldControl);
424 0 : m_pFindTextFieldControl.disposeAndClear();
425 1 : }
426 1 : }
427 :
428 : // XInitialization
429 0 : void SAL_CALL FindTextToolbarController::initialize( const css::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw ( css::uno::Exception, css::uno::RuntimeException, std::exception)
430 : {
431 0 : svt::ToolboxController::initialize(aArguments);
432 :
433 0 : vcl::Window* pWindow = VCLUnoHelper::GetWindow( getParent() );
434 0 : ToolBox* pToolBox = static_cast<ToolBox*>(pWindow);
435 0 : if ( pToolBox )
436 : {
437 0 : sal_uInt16 nItemCount = pToolBox->GetItemCount();
438 0 : for ( sal_uInt16 i=0; i<nItemCount; ++i )
439 : {
440 0 : OUString sItemCommand = pToolBox->GetItemCommand(i);
441 0 : if ( sItemCommand == COMMAND_DOWNSEARCH )
442 : {
443 0 : pToolBox->EnableItem(i, false);
444 0 : m_nDownSearchId = i;
445 : }
446 0 : else if ( sItemCommand == COMMAND_UPSEARCH )
447 : {
448 0 : pToolBox->EnableItem(i, false);
449 0 : m_nUpSearchId = i;
450 : }
451 0 : }
452 : }
453 :
454 0 : SearchToolbarControllersManager::createControllersManager().registryController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
455 0 : }
456 :
457 0 : css::uno::Reference< css::awt::XWindow > SAL_CALL FindTextToolbarController::createItemWindow( const css::uno::Reference< css::awt::XWindow >& Parent ) throw ( css::uno::RuntimeException, std::exception )
458 : {
459 0 : css::uno::Reference< css::awt::XWindow > xItemWindow;
460 :
461 0 : css::uno::Reference< css::awt::XWindow > xParent( Parent );
462 0 : vcl::Window* pParent = VCLUnoHelper::GetWindow( xParent );
463 0 : if ( pParent )
464 : {
465 0 : ToolBox* pToolbar = static_cast<ToolBox*>(pParent);
466 0 : m_pFindTextFieldControl = VclPtr<FindTextFieldControl>::Create( pToolbar, WinBits( WB_DROPDOWN | WB_VSCROLL), m_xFrame, m_xContext );
467 :
468 0 : Size aSize(250, m_pFindTextFieldControl->GetTextHeight() + 200);
469 0 : m_pFindTextFieldControl->SetSizePixel( aSize );
470 0 : m_pFindTextFieldControl->SetModifyHdl(LINK(this, FindTextToolbarController, EditModifyHdl));
471 0 : SearchToolbarControllersManager::createControllersManager().loadSearchHistory(m_pFindTextFieldControl);
472 : }
473 0 : xItemWindow = VCLUnoHelper::GetInterface( m_pFindTextFieldControl );
474 :
475 0 : return xItemWindow;
476 : }
477 :
478 : // XStatusListener
479 0 : void SAL_CALL FindTextToolbarController::statusChanged( const css::frame::FeatureStateEvent& rEvent ) throw ( css::uno::RuntimeException, std::exception )
480 : {
481 0 : SolarMutexGuard aSolarMutexGuard;
482 0 : if ( m_bDisposed )
483 0 : return;
484 :
485 0 : OUString aFeatureURL = rEvent.FeatureURL.Complete;
486 0 : if ( aFeatureURL == "AppendSearchHistory" )
487 : {
488 0 : m_pFindTextFieldControl->Remember_Impl(m_pFindTextFieldControl->GetText());
489 0 : }
490 : }
491 :
492 0 : IMPL_LINK_NOARG(FindTextToolbarController, EditModifyHdl)
493 : {
494 : // enable or disable item DownSearch/UpSearch of findbar
495 0 : vcl::Window* pWindow = VCLUnoHelper::GetWindow( getParent() );
496 0 : ToolBox* pToolBox = static_cast<ToolBox*>(pWindow);
497 0 : if ( pToolBox && m_pFindTextFieldControl )
498 : {
499 0 : if (!m_pFindTextFieldControl->GetText().isEmpty())
500 : {
501 0 : if ( !pToolBox->IsItemEnabled(m_nDownSearchId) )
502 0 : pToolBox->EnableItem(m_nDownSearchId, true);
503 0 : if ( !pToolBox->IsItemEnabled(m_nUpSearchId) )
504 0 : pToolBox->EnableItem(m_nUpSearchId, true);
505 : }
506 : else
507 : {
508 0 : if ( pToolBox->IsItemEnabled(m_nDownSearchId) )
509 0 : pToolBox->EnableItem(m_nDownSearchId, false);
510 0 : if ( pToolBox->IsItemEnabled(m_nUpSearchId) )
511 0 : pToolBox->EnableItem(m_nUpSearchId, false);
512 : }
513 : }
514 :
515 0 : return 0;
516 : }
517 :
518 2 : UpDownSearchToolboxController::UpDownSearchToolboxController( const css::uno::Reference< css::uno::XComponentContext > & rxContext, Type eType )
519 : : svt::ToolboxController( rxContext,
520 : css::uno::Reference< css::frame::XFrame >(),
521 : (eType == UP) ? OUString( COMMAND_UPSEARCH ): OUString( COMMAND_DOWNSEARCH ) ),
522 2 : meType( eType )
523 : {
524 2 : }
525 :
526 4 : UpDownSearchToolboxController::~UpDownSearchToolboxController()
527 : {
528 4 : }
529 :
530 : // XInterface
531 10 : css::uno::Any SAL_CALL UpDownSearchToolboxController::queryInterface( const css::uno::Type& aType ) throw ( css::uno::RuntimeException, std::exception )
532 : {
533 10 : css::uno::Any a = ToolboxController::queryInterface( aType );
534 10 : if ( a.hasValue() )
535 8 : return a;
536 :
537 2 : return ::cppu::queryInterface( aType, static_cast< css::lang::XServiceInfo* >( this ) );
538 : }
539 :
540 36 : void SAL_CALL UpDownSearchToolboxController::acquire() throw ()
541 : {
542 36 : ToolboxController::acquire();
543 36 : }
544 :
545 36 : void SAL_CALL UpDownSearchToolboxController::release() throw ()
546 : {
547 36 : ToolboxController::release();
548 36 : }
549 :
550 : // XServiceInfo
551 2 : OUString SAL_CALL UpDownSearchToolboxController::getImplementationName() throw( css::uno::RuntimeException, std::exception )
552 : {
553 2 : return meType == UpDownSearchToolboxController::UP?
554 : OUString( "com.sun.star.svx.UpSearchToolboxController" ) :
555 2 : OUString( "com.sun.star.svx.DownSearchToolboxController" );
556 : }
557 :
558 0 : sal_Bool SAL_CALL UpDownSearchToolboxController::supportsService( const OUString& ServiceName ) throw( css::uno::RuntimeException, std::exception )
559 : {
560 0 : return cppu::supportsService(this, ServiceName);
561 : }
562 :
563 2 : css::uno::Sequence< OUString > SAL_CALL UpDownSearchToolboxController::getSupportedServiceNames() throw( css::uno::RuntimeException, std::exception )
564 : {
565 2 : css::uno::Sequence< OUString > aSNS( 1 );
566 2 : aSNS[0] = "com.sun.star.frame.ToolbarController";
567 2 : return aSNS;
568 : }
569 :
570 : // XComponent
571 2 : void SAL_CALL UpDownSearchToolboxController::dispose() throw ( css::uno::RuntimeException, std::exception )
572 : {
573 2 : SolarMutexGuard aSolarMutexGuard;
574 :
575 2 : SearchToolbarControllersManager::createControllersManager().freeController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
576 :
577 2 : svt::ToolboxController::dispose();
578 2 : }
579 :
580 : // XInitialization
581 0 : void SAL_CALL UpDownSearchToolboxController::initialize( const css::uno::Sequence< css::uno::Any >& aArguments ) throw ( css::uno::Exception, css::uno::RuntimeException, std::exception )
582 : {
583 0 : svt::ToolboxController::initialize( aArguments );
584 0 : SearchToolbarControllersManager::createControllersManager().registryController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
585 0 : }
586 :
587 : // XToolbarController
588 0 : void SAL_CALL UpDownSearchToolboxController::execute( sal_Int16 /*KeyModifier*/ ) throw ( css::uno::RuntimeException, std::exception )
589 : {
590 0 : if ( m_bDisposed )
591 0 : throw css::lang::DisposedException();
592 :
593 0 : vcl::Window* pWindow = VCLUnoHelper::GetWindow( getParent() );
594 0 : ToolBox* pToolBox = static_cast<ToolBox*>(pWindow);
595 :
596 0 : impl_executeSearch(m_xContext, m_xFrame, pToolBox, meType == UP );
597 :
598 0 : css::frame::FeatureStateEvent aEvent;
599 0 : aEvent.FeatureURL.Complete = COMMAND_APPENDSEARCHHISTORY;
600 0 : css::uno::Reference< css::frame::XStatusListener > xStatusListener = SearchToolbarControllersManager::createControllersManager().findController(m_xFrame, COMMAND_FINDTEXT);
601 0 : if (xStatusListener.is())
602 0 : xStatusListener->statusChanged( aEvent );
603 0 : }
604 :
605 : // XStatusListener
606 0 : void SAL_CALL UpDownSearchToolboxController::statusChanged( const css::frame::FeatureStateEvent& /*rEvent*/ ) throw ( css::uno::RuntimeException, std::exception )
607 : {
608 0 : }
609 :
610 1 : MatchCaseToolboxController::MatchCaseToolboxController( const css::uno::Reference< css::uno::XComponentContext >& rxContext )
611 : : svt::ToolboxController( rxContext,
612 : css::uno::Reference< css::frame::XFrame >(),
613 : OUString(COMMAND_MATCHCASE) )
614 1 : , m_pMatchCaseControl(NULL)
615 : {
616 1 : }
617 :
618 2 : MatchCaseToolboxController::~MatchCaseToolboxController()
619 : {
620 2 : }
621 :
622 : // XInterface
623 5 : css::uno::Any SAL_CALL MatchCaseToolboxController::queryInterface( const css::uno::Type& aType ) throw ( css::uno::RuntimeException, std::exception )
624 : {
625 5 : css::uno::Any a = ToolboxController::queryInterface( aType );
626 5 : if ( a.hasValue() )
627 4 : return a;
628 :
629 1 : return ::cppu::queryInterface( aType, static_cast< css::lang::XServiceInfo* >( this ) );
630 : }
631 :
632 18 : void SAL_CALL MatchCaseToolboxController::acquire() throw ()
633 : {
634 18 : ToolboxController::acquire();
635 18 : }
636 :
637 18 : void SAL_CALL MatchCaseToolboxController::release() throw ()
638 : {
639 18 : ToolboxController::release();
640 18 : }
641 :
642 : // XServiceInfo
643 1 : OUString SAL_CALL MatchCaseToolboxController::getImplementationName() throw( css::uno::RuntimeException, std::exception )
644 : {
645 1 : return OUString( "com.sun.star.svx.MatchCaseToolboxController" );
646 : }
647 :
648 0 : sal_Bool SAL_CALL MatchCaseToolboxController::supportsService( const OUString& ServiceName ) throw( css::uno::RuntimeException, std::exception )
649 : {
650 0 : return cppu::supportsService(this, ServiceName);
651 : }
652 :
653 1 : css::uno::Sequence< OUString > SAL_CALL MatchCaseToolboxController::getSupportedServiceNames() throw( css::uno::RuntimeException, std::exception )
654 : {
655 1 : css::uno::Sequence< OUString > aSNS( 1 );
656 1 : aSNS[0] = "com.sun.star.frame.ToolbarController";
657 1 : return aSNS;
658 : }
659 :
660 : // XComponent
661 1 : void SAL_CALL MatchCaseToolboxController::dispose() throw ( css::uno::RuntimeException, std::exception )
662 : {
663 1 : SolarMutexGuard aSolarMutexGuard;
664 :
665 1 : SearchToolbarControllersManager::createControllersManager().freeController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
666 :
667 1 : svt::ToolboxController::dispose();
668 :
669 1 : m_pMatchCaseControl.disposeAndClear();
670 1 : }
671 :
672 : // XInitialization
673 0 : void SAL_CALL MatchCaseToolboxController::initialize( const css::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw ( css::uno::Exception, css::uno::RuntimeException, std::exception)
674 : {
675 0 : svt::ToolboxController::initialize(aArguments);
676 :
677 0 : SearchToolbarControllersManager::createControllersManager().registryController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
678 0 : }
679 :
680 0 : css::uno::Reference< css::awt::XWindow > SAL_CALL MatchCaseToolboxController::createItemWindow( const css::uno::Reference< css::awt::XWindow >& Parent ) throw ( css::uno::RuntimeException, std::exception )
681 : {
682 0 : css::uno::Reference< css::awt::XWindow > xItemWindow;
683 :
684 0 : css::uno::Reference< css::awt::XWindow > xParent( Parent );
685 0 : vcl::Window* pParent = VCLUnoHelper::GetWindow( xParent );
686 0 : if ( pParent )
687 : {
688 0 : ToolBox* pToolbar = static_cast<ToolBox*>(pParent);
689 0 : m_pMatchCaseControl = VclPtr<CheckBox>::Create( pToolbar, 0 );
690 0 : m_pMatchCaseControl->SetText( SVX_RESSTR( RID_SVXSTR_FINDBAR_MATCHCASE ) );
691 0 : Size aSize( m_pMatchCaseControl->GetOptimalSize() );
692 0 : m_pMatchCaseControl->SetSizePixel( aSize );
693 : }
694 0 : xItemWindow = VCLUnoHelper::GetInterface( m_pMatchCaseControl );
695 :
696 0 : return xItemWindow;
697 : }
698 :
699 : // XStatusListener
700 0 : void SAL_CALL MatchCaseToolboxController::statusChanged( const css::frame::FeatureStateEvent& ) throw ( css::uno::RuntimeException, std::exception )
701 : {
702 0 : }
703 :
704 1 : FindAllToolboxController::FindAllToolboxController( const css::uno::Reference< css::uno::XComponentContext > & rxContext )
705 : : svt::ToolboxController( rxContext,
706 : css::uno::Reference< css::frame::XFrame >(),
707 1 : OUString( COMMAND_EXITSEARCH ) )
708 : {
709 1 : }
710 :
711 2 : FindAllToolboxController::~FindAllToolboxController()
712 : {
713 2 : }
714 :
715 : // XInterface
716 5 : css::uno::Any SAL_CALL FindAllToolboxController::queryInterface( const css::uno::Type& aType ) throw ( css::uno::RuntimeException, std::exception )
717 : {
718 5 : css::uno::Any a = ToolboxController::queryInterface( aType );
719 5 : if ( a.hasValue() )
720 4 : return a;
721 :
722 1 : return ::cppu::queryInterface( aType, static_cast< css::lang::XServiceInfo* >( this ) );
723 : }
724 :
725 18 : void SAL_CALL FindAllToolboxController::acquire() throw ()
726 : {
727 18 : ToolboxController::acquire();
728 18 : }
729 :
730 18 : void SAL_CALL FindAllToolboxController::release() throw ()
731 : {
732 18 : ToolboxController::release();
733 18 : }
734 :
735 : // XServiceInfo
736 1 : OUString SAL_CALL FindAllToolboxController::getImplementationName() throw( css::uno::RuntimeException, std::exception )
737 : {
738 1 : return OUString( "com.sun.star.svx.FindAllToolboxController" );
739 : }
740 :
741 :
742 0 : sal_Bool SAL_CALL FindAllToolboxController::supportsService( const OUString& ServiceName ) throw( css::uno::RuntimeException, std::exception )
743 : {
744 0 : return cppu::supportsService(this, ServiceName);
745 : }
746 :
747 1 : css::uno::Sequence< OUString > SAL_CALL FindAllToolboxController::getSupportedServiceNames() throw( css::uno::RuntimeException, std::exception )
748 : {
749 1 : css::uno::Sequence< OUString > aSNS( 1 );
750 1 : aSNS[0] = "com.sun.star.frame.ToolbarController";
751 1 : return aSNS;
752 : }
753 :
754 : // XComponent
755 1 : void SAL_CALL FindAllToolboxController::dispose() throw ( css::uno::RuntimeException, std::exception )
756 : {
757 1 : SolarMutexGuard aSolarMutexGuard;
758 :
759 1 : SearchToolbarControllersManager::createControllersManager().freeController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
760 :
761 1 : svt::ToolboxController::dispose();
762 1 : }
763 :
764 : // XInitialization
765 0 : void SAL_CALL FindAllToolboxController::initialize( const css::uno::Sequence< css::uno::Any >& aArguments ) throw ( css::uno::Exception, css::uno::RuntimeException, std::exception )
766 : {
767 0 : svt::ToolboxController::initialize( aArguments );
768 0 : SearchToolbarControllersManager::createControllersManager().registryController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
769 0 : }
770 :
771 : // XToolbarController
772 0 : void SAL_CALL FindAllToolboxController::execute( sal_Int16 /*KeyModifier*/ ) throw ( css::uno::RuntimeException, std::exception )
773 : {
774 0 : if ( m_bDisposed )
775 0 : throw css::lang::DisposedException();
776 :
777 0 : vcl::Window* pWindow = VCLUnoHelper::GetWindow( getParent() );
778 0 : ToolBox* pToolBox = static_cast<ToolBox*>(pWindow);
779 :
780 0 : impl_executeSearch(m_xContext, m_xFrame, pToolBox, false, true);
781 0 : }
782 :
783 : // XStatusListener
784 0 : void SAL_CALL FindAllToolboxController::statusChanged( const css::frame::FeatureStateEvent& /*rEvent*/ ) throw ( css::uno::RuntimeException, std::exception )
785 : {
786 0 : }
787 :
788 1 : ExitSearchToolboxController::ExitSearchToolboxController( const css::uno::Reference< css::uno::XComponentContext > & rxContext )
789 : : svt::ToolboxController( rxContext,
790 : css::uno::Reference< css::frame::XFrame >(),
791 1 : OUString( COMMAND_EXITSEARCH ) )
792 : {
793 1 : }
794 :
795 2 : ExitSearchToolboxController::~ExitSearchToolboxController()
796 : {
797 2 : }
798 :
799 : // XInterface
800 5 : css::uno::Any SAL_CALL ExitSearchToolboxController::queryInterface( const css::uno::Type& aType ) throw ( css::uno::RuntimeException, std::exception )
801 : {
802 5 : css::uno::Any a = ToolboxController::queryInterface( aType );
803 5 : if ( a.hasValue() )
804 4 : return a;
805 :
806 1 : return ::cppu::queryInterface( aType, static_cast< css::lang::XServiceInfo* >( this ) );
807 : }
808 :
809 18 : void SAL_CALL ExitSearchToolboxController::acquire() throw ()
810 : {
811 18 : ToolboxController::acquire();
812 18 : }
813 :
814 18 : void SAL_CALL ExitSearchToolboxController::release() throw ()
815 : {
816 18 : ToolboxController::release();
817 18 : }
818 :
819 : // XServiceInfo
820 1 : OUString SAL_CALL ExitSearchToolboxController::getImplementationName() throw( css::uno::RuntimeException, std::exception )
821 : {
822 1 : return OUString( "com.sun.star.svx.ExitFindbarToolboxController" );
823 : }
824 :
825 :
826 0 : sal_Bool SAL_CALL ExitSearchToolboxController::supportsService( const OUString& ServiceName ) throw( css::uno::RuntimeException, std::exception )
827 : {
828 0 : return cppu::supportsService(this, ServiceName);
829 : }
830 :
831 1 : css::uno::Sequence< OUString > SAL_CALL ExitSearchToolboxController::getSupportedServiceNames() throw( css::uno::RuntimeException, std::exception )
832 : {
833 1 : css::uno::Sequence< OUString > aSNS( 1 );
834 1 : aSNS[0] = "com.sun.star.frame.ToolbarController";
835 1 : return aSNS;
836 : }
837 :
838 : // XComponent
839 1 : void SAL_CALL ExitSearchToolboxController::dispose() throw ( css::uno::RuntimeException, std::exception )
840 : {
841 1 : SolarMutexGuard aSolarMutexGuard;
842 :
843 1 : SearchToolbarControllersManager::createControllersManager().freeController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
844 :
845 1 : svt::ToolboxController::dispose();
846 1 : }
847 :
848 : // XInitialization
849 0 : void SAL_CALL ExitSearchToolboxController::initialize( const css::uno::Sequence< css::uno::Any >& aArguments ) throw ( css::uno::Exception, css::uno::RuntimeException, std::exception )
850 : {
851 0 : svt::ToolboxController::initialize( aArguments );
852 0 : SearchToolbarControllersManager::createControllersManager().registryController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
853 0 : }
854 :
855 : // XToolbarController
856 0 : void SAL_CALL ExitSearchToolboxController::execute( sal_Int16 /*KeyModifier*/ ) throw ( css::uno::RuntimeException, std::exception )
857 : {
858 0 : vcl::Window *pFocusWindow = Application::GetFocusWindow();
859 0 : if ( pFocusWindow )
860 0 : pFocusWindow->GrabFocusToDocument();
861 :
862 : // hide the findbar
863 0 : css::uno::Reference< css::beans::XPropertySet > xPropSet(m_xFrame, css::uno::UNO_QUERY);
864 0 : if (xPropSet.is())
865 : {
866 0 : css::uno::Reference< css::frame::XLayoutManager > xLayoutManager;
867 0 : css::uno::Any aValue = xPropSet->getPropertyValue("LayoutManager");
868 0 : aValue >>= xLayoutManager;
869 0 : if (xLayoutManager.is())
870 : {
871 0 : const OUString sResourceURL( "private:resource/toolbar/findbar" );
872 0 : xLayoutManager->hideElement( sResourceURL );
873 0 : xLayoutManager->destroyElement( sResourceURL );
874 0 : }
875 0 : }
876 0 : }
877 :
878 : // XStatusListener
879 0 : void SAL_CALL ExitSearchToolboxController::statusChanged( const css::frame::FeatureStateEvent& /*rEvent*/ ) throw ( css::uno::RuntimeException, std::exception )
880 : {
881 0 : }
882 :
883 1 : SearchLabelToolboxController::SearchLabelToolboxController( const css::uno::Reference< css::uno::XComponentContext > & rxContext )
884 : : svt::ToolboxController( rxContext,
885 : css::uno::Reference< css::frame::XFrame >(),
886 1 : OUString( ".uno:SearchLabel" ) )
887 : {
888 1 : }
889 :
890 2 : SearchLabelToolboxController::~SearchLabelToolboxController()
891 : {
892 2 : }
893 :
894 : // XInterface
895 5 : css::uno::Any SAL_CALL SearchLabelToolboxController::queryInterface( const css::uno::Type& aType ) throw ( css::uno::RuntimeException, std::exception )
896 : {
897 5 : css::uno::Any a = ToolboxController::queryInterface( aType );
898 5 : if ( a.hasValue() )
899 4 : return a;
900 :
901 1 : return ::cppu::queryInterface( aType, static_cast< css::lang::XServiceInfo* >( this ) );
902 : }
903 :
904 18 : void SAL_CALL SearchLabelToolboxController::acquire() throw ()
905 : {
906 18 : ToolboxController::acquire();
907 18 : }
908 :
909 18 : void SAL_CALL SearchLabelToolboxController::release() throw ()
910 : {
911 18 : ToolboxController::release();
912 18 : }
913 :
914 : // XServiceInfo
915 1 : OUString SAL_CALL SearchLabelToolboxController::getImplementationName() throw( css::uno::RuntimeException, std::exception )
916 : {
917 1 : return OUString( "com.sun.star.svx.SearchLabelToolboxController" );
918 : }
919 :
920 :
921 0 : sal_Bool SAL_CALL SearchLabelToolboxController::supportsService( const OUString& ServiceName ) throw( css::uno::RuntimeException, std::exception )
922 : {
923 0 : return cppu::supportsService(this, ServiceName);
924 : }
925 :
926 1 : css::uno::Sequence< OUString > SAL_CALL SearchLabelToolboxController::getSupportedServiceNames() throw( css::uno::RuntimeException, std::exception )
927 : {
928 1 : css::uno::Sequence< OUString > aSNS( 1 );
929 1 : aSNS[0] = "com.sun.star.frame.ToolbarController";
930 1 : return aSNS;
931 : }
932 :
933 : // XComponent
934 1 : void SAL_CALL SearchLabelToolboxController::dispose() throw ( css::uno::RuntimeException, std::exception )
935 : {
936 1 : SolarMutexGuard aSolarMutexGuard;
937 :
938 1 : SearchToolbarControllersManager::createControllersManager().freeController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
939 :
940 1 : svt::ToolboxController::dispose();
941 1 : }
942 :
943 : // XInitialization
944 0 : void SAL_CALL SearchLabelToolboxController::initialize( const css::uno::Sequence< css::uno::Any >& aArguments ) throw ( css::uno::Exception, css::uno::RuntimeException, std::exception )
945 : {
946 0 : svt::ToolboxController::initialize( aArguments );
947 0 : SearchToolbarControllersManager::createControllersManager().registryController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
948 0 : }
949 :
950 : // XStatusListener
951 0 : void SAL_CALL SearchLabelToolboxController::statusChanged( const css::frame::FeatureStateEvent& ) throw ( css::uno::RuntimeException, std::exception )
952 : {
953 0 : }
954 :
955 0 : css::uno::Reference< css::awt::XWindow > SAL_CALL SearchLabelToolboxController::createItemWindow( const css::uno::Reference< css::awt::XWindow >& Parent ) throw ( css::uno::RuntimeException, std::exception )
956 : {
957 0 : VclPtr<vcl::Window> pSL = VclPtr<FixedText>::Create(VCLUnoHelper::GetWindow( Parent ));
958 0 : pSL->SetSizePixel(Size(250, 25));
959 0 : return VCLUnoHelper::GetInterface(pSL);
960 : }
961 :
962 3 : FindbarDispatcher::FindbarDispatcher()
963 : {
964 3 : }
965 :
966 9 : FindbarDispatcher::~FindbarDispatcher()
967 : {
968 3 : m_xFrame = NULL;
969 6 : }
970 :
971 : // XInterface
972 6 : css::uno::Any SAL_CALL FindbarDispatcher::queryInterface( const css::uno::Type& aType ) throw( css::uno::RuntimeException, std::exception )
973 : {
974 : css::uno::Any aReturn( ::cppu::queryInterface( aType,
975 : static_cast< css::lang::XServiceInfo* >(this),
976 : static_cast< css::lang::XInitialization* >(this),
977 : static_cast< css::frame::XDispatchProvider* >(this),
978 6 : static_cast< css::frame::XDispatch* >(this)) );
979 :
980 6 : if ( aReturn.hasValue() )
981 5 : return aReturn;
982 :
983 1 : return OWeakObject::queryInterface( aType );
984 : }
985 :
986 32 : void SAL_CALL FindbarDispatcher::acquire() throw()
987 : {
988 32 : OWeakObject::acquire();
989 32 : }
990 :
991 32 : void SAL_CALL FindbarDispatcher::release() throw()
992 : {
993 32 : OWeakObject::release();
994 32 : }
995 :
996 : // XServiceInfo
997 1 : OUString SAL_CALL FindbarDispatcher::getImplementationName() throw( css::uno::RuntimeException, std::exception )
998 : {
999 1 : return OUString("com.sun.star.comp.svx.Impl.FindbarDispatcher");
1000 : }
1001 :
1002 0 : sal_Bool SAL_CALL FindbarDispatcher::supportsService( const OUString& ServiceName ) throw( css::uno::RuntimeException, std::exception )
1003 : {
1004 0 : return cppu::supportsService(this, ServiceName);
1005 : }
1006 :
1007 1 : css::uno::Sequence< OUString > SAL_CALL FindbarDispatcher::getSupportedServiceNames() throw( css::uno::RuntimeException, std::exception )
1008 : {
1009 1 : css::uno::Sequence< OUString > aSNS( 2 );
1010 1 : aSNS[0] = "com.sun.star.comp.svx.FindbarDispatcher";
1011 1 : aSNS[1] = "com.sun.star.frame.ProtocolHandler";
1012 1 : return aSNS;
1013 : }
1014 :
1015 : // XInitialization
1016 2 : void SAL_CALL FindbarDispatcher::initialize( const css::uno::Sequence< css::uno::Any >& aArguments ) throw ( css::uno::Exception, css::uno::RuntimeException, std::exception )
1017 : {
1018 2 : if ( aArguments.getLength() )
1019 2 : aArguments[0] >>= m_xFrame;
1020 2 : }
1021 :
1022 : // XDispatchProvider
1023 2 : css::uno::Reference< css::frame::XDispatch > SAL_CALL FindbarDispatcher::queryDispatch( const css::util::URL& aURL, const OUString& /*sTargetFrameName*/, sal_Int32 /*nSearchFlags*/ ) throw( css::uno::RuntimeException, std::exception )
1024 : {
1025 2 : css::uno::Reference< css::frame::XDispatch > xDispatch;
1026 :
1027 2 : if ( aURL.Protocol == "vnd.sun.star.findbar:" )
1028 2 : xDispatch = this;
1029 :
1030 2 : return xDispatch;
1031 : }
1032 :
1033 0 : css::uno::Sequence < css::uno::Reference< css::frame::XDispatch > > SAL_CALL FindbarDispatcher::queryDispatches( const css::uno::Sequence < css::frame::DispatchDescriptor >& seqDescripts ) throw( css::uno::RuntimeException, std::exception )
1034 : {
1035 0 : sal_Int32 nCount = seqDescripts.getLength();
1036 0 : css::uno::Sequence < css::uno::Reference < XDispatch > > lDispatcher( nCount );
1037 :
1038 0 : for( sal_Int32 i=0; i<nCount; ++i )
1039 0 : lDispatcher[i] = queryDispatch( seqDescripts[i].FeatureURL, seqDescripts[i].FrameName, seqDescripts[i].SearchFlags );
1040 :
1041 0 : return lDispatcher;
1042 : }
1043 :
1044 : // XDispatch
1045 0 : void SAL_CALL FindbarDispatcher::dispatch( const css::util::URL& aURL, const css::uno::Sequence < css::beans::PropertyValue >& /*lArgs*/ ) throw( css::uno::RuntimeException, std::exception )
1046 : {
1047 : //vnd.sun.star.findbar:FocusToFindbar - set cursor to the FindTextFieldControl of the findbar
1048 0 : if ( aURL.Path == "FocusToFindbar" )
1049 : {
1050 0 : css::uno::Reference< css::beans::XPropertySet > xPropSet(m_xFrame, css::uno::UNO_QUERY);
1051 0 : if(!xPropSet.is())
1052 0 : return;
1053 :
1054 0 : css::uno::Reference< css::frame::XLayoutManager > xLayoutManager;
1055 0 : css::uno::Any aValue = xPropSet->getPropertyValue("LayoutManager");
1056 0 : aValue >>= xLayoutManager;
1057 0 : if (!xLayoutManager.is())
1058 0 : return;
1059 :
1060 0 : const OUString sResourceURL( "private:resource/toolbar/findbar" );
1061 0 : css::uno::Reference< css::ui::XUIElement > xUIElement = xLayoutManager->getElement(sResourceURL);
1062 0 : if (!xUIElement.is())
1063 : {
1064 : // show the findbar if necessary
1065 0 : xLayoutManager->createElement( sResourceURL );
1066 0 : xLayoutManager->showElement( sResourceURL );
1067 0 : xUIElement = xLayoutManager->getElement( sResourceURL );
1068 0 : if ( !xUIElement.is() )
1069 0 : return;
1070 : }
1071 :
1072 0 : css::uno::Reference< css::awt::XWindow > xWindow(xUIElement->getRealInterface(), css::uno::UNO_QUERY);
1073 0 : vcl::Window* pWindow = VCLUnoHelper::GetWindow( xWindow );
1074 0 : ToolBox* pToolBox = static_cast<ToolBox*>(pWindow);
1075 0 : if ( pToolBox )
1076 : {
1077 0 : sal_uInt16 nItemCount = pToolBox->GetItemCount();
1078 0 : for ( sal_uInt16 i=0; i<nItemCount; ++i )
1079 : {
1080 0 : OUString sItemCommand = pToolBox->GetItemCommand(i);
1081 0 : if ( sItemCommand == COMMAND_FINDTEXT )
1082 : {
1083 0 : vcl::Window* pItemWin = pToolBox->GetItemWindow( i );
1084 0 : if ( pItemWin )
1085 : {
1086 0 : FindTextFieldControl* pFindTextFieldControl = dynamic_cast<FindTextFieldControl*>(pItemWin);
1087 0 : if ( pFindTextFieldControl )
1088 0 : pFindTextFieldControl->SetTextToSelected_Impl();
1089 0 : SolarMutexGuard aSolarMutexGuard;
1090 0 : pItemWin->GrabFocus();
1091 0 : return;
1092 : }
1093 : }
1094 0 : }
1095 0 : }
1096 : }
1097 : }
1098 :
1099 7 : void SAL_CALL FindbarDispatcher::addStatusListener( const css::uno::Reference< css::frame::XStatusListener >& /*xControl*/, const css::util::URL& /*aURL*/ ) throw ( css::uno::RuntimeException, std::exception )
1100 : {
1101 7 : }
1102 :
1103 7 : void SAL_CALL FindbarDispatcher::removeStatusListener( const css::uno::Reference< css::frame::XStatusListener >& /*xControl*/, const css::util::URL& /*aURL*/ ) throw ( css::uno::RuntimeException, std::exception )
1104 : {
1105 7 : }
1106 :
1107 : }
1108 :
1109 : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
1110 1 : com_sun_star_svx_FindTextToolboxController_get_implementation(
1111 : css::uno::XComponentContext *context,
1112 : css::uno::Sequence<css::uno::Any> const &)
1113 : {
1114 1 : return cppu::acquire(new FindTextToolbarController(context));
1115 : }
1116 :
1117 : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
1118 1 : com_sun_star_svx_ExitFindbarToolboxController_get_implementation(
1119 : css::uno::XComponentContext *context,
1120 : css::uno::Sequence<css::uno::Any> const &)
1121 : {
1122 1 : return cppu::acquire(new ExitSearchToolboxController(context));
1123 : }
1124 :
1125 : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
1126 1 : com_sun_star_svx_UpSearchToolboxController_get_implementation(
1127 : css::uno::XComponentContext *context,
1128 : css::uno::Sequence<css::uno::Any> const &)
1129 : {
1130 1 : return cppu::acquire(new UpDownSearchToolboxController(context, UpDownSearchToolboxController::UP));
1131 : }
1132 :
1133 : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
1134 1 : com_sun_star_svx_DownSearchToolboxController_get_implementation(
1135 : css::uno::XComponentContext *context,
1136 : css::uno::Sequence<css::uno::Any> const &)
1137 : {
1138 1 : return cppu::acquire(new UpDownSearchToolboxController(context, UpDownSearchToolboxController::DOWN));
1139 : }
1140 :
1141 : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
1142 1 : com_sun_star_svx_MatchCaseToolboxController_get_implementation(
1143 : css::uno::XComponentContext *context,
1144 : css::uno::Sequence<css::uno::Any> const &)
1145 : {
1146 1 : return cppu::acquire(new MatchCaseToolboxController(context));
1147 : }
1148 :
1149 : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
1150 1 : com_sun_star_svx_FindAllToolboxController_get_implementation(
1151 : css::uno::XComponentContext *context,
1152 : css::uno::Sequence<css::uno::Any> const &)
1153 : {
1154 1 : return cppu::acquire(new FindAllToolboxController(context));
1155 : }
1156 :
1157 : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
1158 1 : com_sun_star_svx_SearchLabelToolboxController_get_implementation(
1159 : css::uno::XComponentContext *context,
1160 : css::uno::Sequence<css::uno::Any> const &)
1161 : {
1162 1 : return cppu::acquire(new SearchLabelToolboxController(context));
1163 : }
1164 :
1165 : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
1166 3 : com_sun_star_comp_svx_Impl_FindbarDispatcher_get_implementation(
1167 : SAL_UNUSED_PARAMETER css::uno::XComponentContext *,
1168 : css::uno::Sequence<css::uno::Any> const &)
1169 : {
1170 3 : return cppu::acquire(new FindbarDispatcher);
1171 390 : }
1172 :
1173 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|