/* -*- 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 typedef comphelper::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 : public SelectionChangeHandlerInterfaceBase { private: css::uno::Reference mxController; VclPtr mpDockingWindow; public: SelectionChangeHandler(css::uno::Reference xController, DevelopmentToolDockingWindow* pDockingWindow) : mxController(std::move(xController)) , 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 {} using comphelper::WeakComponentImplHelperBase::disposing; private: SelectionChangeHandler(const SelectionChangeHandler&) = delete; SelectionChangeHandler& operator=(const SelectionChangeHandler&) = delete; }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */