xref: /AOO41X/main/svx/source/sidebar/SelectionChangeHandler.cxx (revision d3e0dd8eb215533c15e891ee35bd141abe9397ee)
15d39f272SZheng Fan /**************************************************************
25d39f272SZheng Fan  *
35d39f272SZheng Fan  * Licensed to the Apache Software Foundation (ASF) under one
45d39f272SZheng Fan  * or more contributor license agreements.  See the NOTICE file
55d39f272SZheng Fan  * distributed with this work for additional information
65d39f272SZheng Fan  * regarding copyright ownership.  The ASF licenses this file
75d39f272SZheng Fan  * to you under the Apache License, Version 2.0 (the
85d39f272SZheng Fan  * "License"); you may not use this file except in compliance
95d39f272SZheng Fan  * with the License.  You may obtain a copy of the License at
105d39f272SZheng Fan  *
115d39f272SZheng Fan  *   http://www.apache.org/licenses/LICENSE-2.0
125d39f272SZheng Fan  *
135d39f272SZheng Fan  * Unless required by applicable law or agreed to in writing,
145d39f272SZheng Fan  * software distributed under the License is distributed on an
155d39f272SZheng Fan  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
165d39f272SZheng Fan  * KIND, either express or implied.  See the License for the
175d39f272SZheng Fan  * specific language governing permissions and limitations
185d39f272SZheng Fan  * under the License.
195d39f272SZheng Fan  *
205d39f272SZheng Fan  *************************************************************/
215d39f272SZheng Fan 
225d39f272SZheng Fan #include "svx/sidebar/SelectionChangeHandler.hxx"
235d39f272SZheng Fan #include "svx/sidebar/SelectionAnalyzer.hxx"
245d39f272SZheng Fan #include "svx/sidebar/ContextChangeEventMultiplexer.hxx"
255d39f272SZheng Fan #include "svx/svdmrkv.hxx"
265d39f272SZheng Fan 
275d39f272SZheng Fan #include <sfx2/sidebar/EnumContext.hxx>
285d39f272SZheng Fan #include <sfx2/shell.hxx>
295d39f272SZheng Fan 
305d39f272SZheng Fan 
315d39f272SZheng Fan using namespace css;
325d39f272SZheng Fan using namespace cssu;
335d39f272SZheng Fan 
345d39f272SZheng Fan using namespace sfx2::sidebar;
355d39f272SZheng Fan 
365d39f272SZheng Fan namespace svx { namespace sidebar {
375d39f272SZheng Fan 
SelectionChangeHandler(const boost::function<rtl::OUString (void)> & rSelectionChangeCallback,const Reference<frame::XController> & rxController,const EnumContext::Context eDefaultContext)385d39f272SZheng Fan SelectionChangeHandler::SelectionChangeHandler (
39*2a3f8a0eSAndre Fischer     const boost::function<rtl::OUString(void)>& rSelectionChangeCallback,
405d39f272SZheng Fan     const Reference<frame::XController>& rxController,
415d39f272SZheng Fan     const EnumContext::Context eDefaultContext)
425d39f272SZheng Fan     : SelectionChangeHandlerInterfaceBase(m_aMutex),
435d39f272SZheng Fan       maSelectionChangeCallback(rSelectionChangeCallback),
445d39f272SZheng Fan       mxController(rxController),
455d39f272SZheng Fan       meDefaultContext(eDefaultContext),
465d39f272SZheng Fan       mbIsConnected(false)
475d39f272SZheng Fan {
485d39f272SZheng Fan }
495d39f272SZheng Fan 
505d39f272SZheng Fan 
515d39f272SZheng Fan 
525d39f272SZheng Fan 
~SelectionChangeHandler(void)535d39f272SZheng Fan SelectionChangeHandler::~SelectionChangeHandler (void)
545d39f272SZheng Fan {
555d39f272SZheng Fan }
565d39f272SZheng Fan 
575d39f272SZheng Fan 
585d39f272SZheng Fan 
595d39f272SZheng Fan 
selectionChanged(const lang::EventObject &)605d39f272SZheng Fan void SAL_CALL SelectionChangeHandler::selectionChanged (const lang::EventObject&)
615d39f272SZheng Fan     throw (uno::RuntimeException)
625d39f272SZheng Fan {
635d39f272SZheng Fan     if (maSelectionChangeCallback)
645d39f272SZheng Fan     {
65*2a3f8a0eSAndre Fischer         const EnumContext::Context eContext (
66*2a3f8a0eSAndre Fischer             EnumContext::GetContextEnum(maSelectionChangeCallback()));
675d39f272SZheng Fan         ContextChangeEventMultiplexer::NotifyContextChange(
685d39f272SZheng Fan             mxController,
695d39f272SZheng Fan             eContext==EnumContext::Context_Unknown
705d39f272SZheng Fan                 ? meDefaultContext
715d39f272SZheng Fan                 : eContext);
725d39f272SZheng Fan     }
735d39f272SZheng Fan }
745d39f272SZheng Fan 
755d39f272SZheng Fan 
765d39f272SZheng Fan 
775d39f272SZheng Fan 
disposing(const lang::EventObject &)785d39f272SZheng Fan void SAL_CALL SelectionChangeHandler::disposing (const lang::EventObject&)
795d39f272SZheng Fan     throw (uno::RuntimeException)
805d39f272SZheng Fan {
815d39f272SZheng Fan }
825d39f272SZheng Fan 
835d39f272SZheng Fan 
845d39f272SZheng Fan 
855d39f272SZheng Fan 
disposing(void)865d39f272SZheng Fan void SAL_CALL SelectionChangeHandler::disposing (void)
875d39f272SZheng Fan     throw (uno::RuntimeException)
885d39f272SZheng Fan {
895d39f272SZheng Fan     if (mbIsConnected)
905d39f272SZheng Fan         Disconnect();
915d39f272SZheng Fan }
925d39f272SZheng Fan 
935d39f272SZheng Fan 
945d39f272SZheng Fan 
955d39f272SZheng Fan 
Connect(void)965d39f272SZheng Fan void SelectionChangeHandler::Connect (void)
975d39f272SZheng Fan {
985d39f272SZheng Fan     uno::Reference<view::XSelectionSupplier> xSupplier (mxController, uno::UNO_QUERY);
995d39f272SZheng Fan     if (xSupplier.is())
1005d39f272SZheng Fan     {
1015d39f272SZheng Fan         mbIsConnected = true;
1025d39f272SZheng Fan         xSupplier->addSelectionChangeListener(this);
1035d39f272SZheng Fan     }
1045d39f272SZheng Fan }
1055d39f272SZheng Fan 
1065d39f272SZheng Fan 
1075d39f272SZheng Fan 
1085d39f272SZheng Fan 
Disconnect(void)1095d39f272SZheng Fan void SelectionChangeHandler::Disconnect (void)
1105d39f272SZheng Fan {
1115d39f272SZheng Fan     uno::Reference<view::XSelectionSupplier> xSupplier (mxController, uno::UNO_QUERY);
1125d39f272SZheng Fan     if (xSupplier.is())
1135d39f272SZheng Fan     {
1145d39f272SZheng Fan         mbIsConnected = false;
1155d39f272SZheng Fan         xSupplier->removeSelectionChangeListener(this);
1165d39f272SZheng Fan     }
1175d39f272SZheng Fan }
1185d39f272SZheng Fan 
1195d39f272SZheng Fan 
1205d39f272SZheng Fan } } // end of namespace svx::sidebar
121