/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * */ #pragma once #include #include #include #include #include #include typedef cppu::WeakComponentImplHelper SelectionChangeHandlerInterfaceBase; /** Selection change handler to listen to document selection changes. * * Listens to the changes and notifies the docking window with a new * selected object, when a change happens. */ class SelectionChangeHandler final : private ::cppu::BaseMutex, public SelectionChangeHandlerInterfaceBase { private: css::uno::Reference mxController; VclPtr mpDockingWindow; public: SelectionChangeHandler(const css::uno::Reference& rxController, DevelopmentToolDockingWindow* pDockingWindow) : SelectionChangeHandlerInterfaceBase(m_aMutex) , mxController(rxController) , mpDockingWindow(pDockingWindow) { css::uno::Reference xSupplier(mxController, css::uno::UNO_QUERY); xSupplier->addSelectionChangeListener(this); } ~SelectionChangeHandler() { mpDockingWindow.disposeAndClear(); } virtual void SAL_CALL selectionChanged(const css::lang::EventObject& /*rEvent*/) override { css::uno::Reference xSupplier(mxController, css::uno::UNO_QUERY); if (xSupplier.is()) { css::uno::Any aAny = xSupplier->getSelection(); auto xInterface = aAny.get>(); mpDockingWindow->selectionChanged(xInterface); } } void stopListening() { css::uno::Reference xSupplier(mxController, css::uno::UNO_QUERY); xSupplier->removeSelectionChangeListener(this); } virtual void SAL_CALL disposing(const css::lang::EventObject& /*rEvent*/) override {} virtual void SAL_CALL disposing() override {} private: SelectionChangeHandler(const SelectionChangeHandler&) = delete; SelectionChangeHandler& operator=(const SelectionChangeHandler&) = delete; }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */