Files
loongoffice/sd/source/ui/framework/module/ToolBarModule.hxx
Sarper Akdemir 5e14349232 tdf#33603: fix notespane (side/tool)bar interactions
Introduces OverridingShells that when set, makes the view
act like the MainViewShell.

The main use case is having more then one ViewShell in a
single window, where context (toolbars, sidebars etc.) can
jump in between different ViewShells.

Uses OverridingShells to enable NotesPane to react
ToolBarShells. Accessing the functionality of ToolBarShells
without the previous hacks with slot forwarding.

Change-Id: Icc9721d7f54097025bc9dc7ef7069aed856e6d96
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169658
Tested-by: Jenkins
Reviewed-by: Sarper Akdemir <sarper.akdemir@allotropia.de>
2024-06-28 14:25:36 +02:00

109 lines
3.3 KiB
C++

/* -*- 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/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#pragma once
#include <ToolBarManager.hxx>
#include <tools/link.hxx>
#include <com/sun/star/drawing/framework/XConfigurationChangeListener.hpp>
#include <com/sun/star/ui/XContextChangeEventListener.hpp>
#include <comphelper/compbase.hxx>
#include <o3tl/deleter.hxx>
#include <rtl/ref.hxx>
#include <memory>
namespace com::sun::star::drawing::framework
{
class XConfigurationController;
class XResourceId;
}
namespace com::sun::star::frame
{
class XController;
}
namespace sd {
class DrawController;
class ViewShellBase;
}
namespace sd::tools
{
class EventMultiplexerEvent;
}
namespace sd::framework {
typedef comphelper::WeakComponentImplHelper <
css::drawing::framework::XConfigurationChangeListener
> ToolBarModuleInterfaceBase;
/** This module is responsible for locking the ToolBarManager during
configuration updates and for triggering ToolBarManager updates.
*/
class ToolBarModule final
: public ToolBarModuleInterfaceBase
{
public:
/** Create a new module.
@param rxController
This is the access point to the drawing framework.
*/
explicit ToolBarModule (
const rtl::Reference<sd::DrawController>& rxController);
virtual ~ToolBarModule() override;
virtual void disposing(std::unique_lock<std::mutex>&) override;
// XConfigurationChangeListener
virtual void SAL_CALL notifyConfigurationChange (
const css::drawing::framework::ConfigurationChangeEvent& rEvent) override;
// XEventListener
virtual void SAL_CALL disposing (
const css::lang::EventObject& rEvent) override;
private:
css::uno::Reference<
css::drawing::framework::XConfigurationController> mxConfigurationController;
ViewShellBase* mpBase;
std::unique_ptr<ToolBarManager::UpdateLock, o3tl::default_delete<ToolBarManager::UpdateLock>> mpToolBarManagerLock;
bool mbMainViewSwitchUpdatePending;
bool mbListeningEventMultiplexer = false;
/** Update toolbars via ToolbarManager
@param pViewShell may be nullptr
*/
void UpdateToolbars(ViewShell* pViewShell);
void HandleUpdateStart();
void HandleUpdateEnd();
void HandlePaneViewShellFocused(
const css::uno::Reference<css::drawing::framework::XResourceId>& rxResourceId);
DECL_LINK(EventMultiplexerListener, ::sd::tools::EventMultiplexerEvent&, void);
};
} // end of namespace sd::framework
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */