summaryrefslogtreecommitdiff
path: root/sfx2/source/sidebar/SidebarController.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sfx2/source/sidebar/SidebarController.cxx')
-rw-r--r--sfx2/source/sidebar/SidebarController.cxx136
1 files changed, 100 insertions, 36 deletions
diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx
index fb1d3ae17b05..e41d794eb699 100644
--- a/sfx2/source/sidebar/SidebarController.cxx
+++ b/sfx2/source/sidebar/SidebarController.cxx
@@ -45,6 +45,7 @@
#include <comphelper/namedvaluecollection.hxx>
#include <comphelper/lok.hxx>
#include <o3tl/make_unique.hxx>
+#include <LibreOfficeKit/LibreOfficeKitEnums.h>
#include <com/sun/star/lang/XInitialization.hpp>
#include <com/sun/star/ui/ContextChangeEventMultiplexer.hpp>
@@ -63,6 +64,32 @@ namespace
const static char gsReadOnlyCommandName[] = ".uno:EditDoc";
const static sal_Int32 gnWidthCloseThreshold (70);
const static sal_Int32 gnWidthOpenThreshold (40);
+
+ static std::string UnoNameFromDeckId(const OUString& rsDeckId)
+ {
+ if (rsDeckId == "SdCustomAnimationDeck")
+ return ".uno:CustomAnimation";
+
+ if (rsDeckId == "PropertyDeck")
+ return ".uno:ModifyPage";
+
+ if (rsDeckId == "SdLayoutsDeck")
+ return ".uno:ModifyPage";
+
+ if (rsDeckId == "SdSlideTransitionDeck")
+ return ".uno:SlideChangeWindow";
+
+ if (rsDeckId == "SdAllMasterPagesDeck")
+ return ".uno:MasterSlidesPanel";
+
+ if (rsDeckId == "SdMasterPagesDeck")
+ return ".uno:MasterSlidesPanel";
+
+ if (rsDeckId == "GalleryDeck")
+ return ".uno:Gallery";
+
+ return "";
+ }
}
namespace sfx2 { namespace sidebar {
@@ -84,47 +111,48 @@ namespace {
static const char gsDefaultDeckId[] = "PropertyDeck";
}
-SidebarController::SidebarController (
- SidebarDockingWindow* pParentWindow,
- const css::uno::Reference<css::frame::XFrame>& rxFrame)
- : SidebarControllerInterfaceBase(m_aMutex),
- mpCurrentDeck(),
- mpParentWindow(pParentWindow),
- mpTabBar(VclPtr<TabBar>::Create(
- mpParentWindow,
- rxFrame,
- [this](const ::rtl::OUString& rsDeckId) { return this->OpenThenToggleDeck(rsDeckId); },
- [this](const tools::Rectangle& rButtonBox,const ::std::vector<TabBar::DeckMenuData>& rMenuData) { return this->ShowPopupMenu(rButtonBox,rMenuData); },
- this)),
- mxFrame(rxFrame),
- maCurrentContext(OUString(), OUString()),
- maRequestedContext(),
- mnRequestedForceFlags(SwitchFlag_NoForce),
- msCurrentDeckId(gsDefaultDeckId),
- maPropertyChangeForwarder([this](){ return this->BroadcastPropertyChange(); }),
- maContextChangeUpdate([this](){ return this->UpdateConfigurations(); }),
- maAsynchronousDeckSwitch(),
- mbIsDeckRequestedOpen(),
- mbIsDeckOpen(),
- mnSavedSidebarWidth(pParentWindow->GetSizePixel().Width()),
- maFocusManager([this](const Panel& rPanel){ return this->ShowPanel(rPanel); }),
- mxReadOnlyModeDispatch(),
- mbIsDocumentReadOnly(false),
- mpSplitWindow(nullptr),
- mnWidthOnSplitterButtonDown(0),
- mpResourceManager()
+SidebarController::SidebarController(SidebarDockingWindow* pParentWindow,
+ const SfxViewFrame* pViewFrame)
+ : SidebarControllerInterfaceBase(m_aMutex)
+ , mpCurrentDeck()
+ , mpParentWindow(pParentWindow)
+ , mpViewFrame(pViewFrame)
+ , mxFrame(pViewFrame->GetFrame().GetFrameInterface())
+ , mpTabBar(VclPtr<TabBar>::Create(
+ mpParentWindow, mxFrame,
+ [this](const ::rtl::OUString& rsDeckId) { return this->OpenThenToggleDeck(rsDeckId); },
+ [this](const tools::Rectangle& rButtonBox,
+ const ::std::vector<TabBar::DeckMenuData>& rMenuData) {
+ return this->ShowPopupMenu(rButtonBox, rMenuData);
+ },
+ this))
+ , maCurrentContext(OUString(), OUString())
+ , maRequestedContext()
+ , mnRequestedForceFlags(SwitchFlag_NoForce)
+ , msCurrentDeckId(gsDefaultDeckId)
+ , maPropertyChangeForwarder([this]() { return this->BroadcastPropertyChange(); })
+ , maContextChangeUpdate([this]() { return this->UpdateConfigurations(); })
+ , maAsynchronousDeckSwitch()
+ , mbIsDeckRequestedOpen()
+ , mbIsDeckOpen()
+ , mnSavedSidebarWidth(pParentWindow->GetSizePixel().Width())
+ , maFocusManager([this](const Panel& rPanel) { return this->ShowPanel(rPanel); })
+ , mxReadOnlyModeDispatch()
+ , mbIsDocumentReadOnly(false)
+ , mpSplitWindow(nullptr)
+ , mnWidthOnSplitterButtonDown(0)
+ , mpResourceManager()
{
// Decks and panel collections for this sidebar
mpResourceManager = o3tl::make_unique<ResourceManager>();
}
-rtl::Reference<SidebarController> SidebarController::create(
- SidebarDockingWindow* pParentWindow,
- const css::uno::Reference<css::frame::XFrame>& rxFrame)
+rtl::Reference<SidebarController> SidebarController::create(SidebarDockingWindow* pParentWindow,
+ const SfxViewFrame* pViewFrame)
{
- rtl::Reference<SidebarController> instance(
- new SidebarController(pParentWindow, rxFrame));
+ rtl::Reference<SidebarController> instance(new SidebarController(pParentWindow, pViewFrame));
+ const css::uno::Reference<css::frame::XFrame>& rxFrame = pViewFrame->GetFrame().GetFrameInterface();
registerSidebarForFrame(instance.get(), rxFrame->getController());
rxFrame->addFrameActionListener(instance.get());
// Listen for window events.
@@ -698,6 +726,22 @@ void SidebarController::SwitchToDeck (
if (mpCurrentDeck)
mpCurrentDeck->Hide();
+ if (comphelper::LibreOfficeKit::isActive())
+ {
+ if (const SfxViewShell* pViewShell = mpViewFrame->GetViewShell())
+ {
+ const std::string hide = UnoNameFromDeckId(msCurrentDeckId);
+ if (!hide.empty())
+ pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_STATE_CHANGED,
+ (hide + "=false").c_str());
+
+ const std::string show = UnoNameFromDeckId(rDeckDescriptor.msId);
+ if (!show.empty())
+ pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_STATE_CHANGED,
+ (show + "=true").c_str());
+ }
+ }
+
msCurrentDeckId = rDeckDescriptor.msId;
}
mpTabBar->HighlightDeck(msCurrentDeckId);
@@ -1173,9 +1217,19 @@ void SidebarController::UpdateDeckOpenState()
mpParentWindow->GetFloatingWindow()->SetPosSizePixel(aNewPos, aNewSize);
- // Sidebar wide enought to render the menu; enable it.
if (comphelper::LibreOfficeKit::isActive())
+ {
+ // Sidebar wide enought to render the menu; enable it.
mpTabBar->EnableMenuButton(true);
+
+ if (const SfxViewShell* pViewShell = mpViewFrame->GetViewShell())
+ {
+ const std::string uno = UnoNameFromDeckId(msCurrentDeckId);
+ if (!uno.empty())
+ pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_STATE_CHANGED,
+ (uno + "=true").c_str());
+ }
+ }
}
}
else
@@ -1201,9 +1255,19 @@ void SidebarController::UpdateDeckOpenState()
mpParentWindow->GetFloatingWindow()->SetPosSizePixel(aNewPos, aNewSize);
- // Sidebar too narrow to render the menu; disable it.
if (comphelper::LibreOfficeKit::isActive())
+ {
+ // Sidebar too narrow to render the menu; disable it.
mpTabBar->EnableMenuButton(false);
+
+ if (const SfxViewShell* pViewShell = mpViewFrame->GetViewShell())
+ {
+ const std::string uno = UnoNameFromDeckId(msCurrentDeckId);
+ if (!uno.empty())
+ pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_STATE_CHANGED,
+ (uno + "=false").c_str());
+ }
+ }
}
if (mnWidthOnSplitterButtonDown > nTabBarDefaultWidth)