diff options
Diffstat (limited to 'sfx2/source')
-rw-r--r-- | sfx2/source/sidebar/SidebarController.cxx | 86 | ||||
-rw-r--r-- | sfx2/source/sidebar/SidebarDockingWindow.cxx | 3 |
2 files changed, 77 insertions, 12 deletions
diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx index 83ff4c5354c6..a0f9cbd1dae4 100644 --- a/sfx2/source/sidebar/SidebarController.cxx +++ b/sfx2/source/sidebar/SidebarController.cxx @@ -52,6 +52,7 @@ #include <comphelper/lok.hxx> #include <sal/log.hxx> #include <officecfg/Office/UI/Sidebar.hxx> +#include <LibreOfficeKit/LibreOfficeKitEnums.h> #include <com/sun/star/awt/XWindowPeer.hpp> #include <com/sun/star/frame/XDispatch.hpp> @@ -72,6 +73,32 @@ namespace const static char gsReadOnlyCommandName[] = ".uno:EditDoc"; const static sal_Int32 gnWidthCloseThreshold (70); const static sal_Int32 gnWidthOpenThreshold (40); + + 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 { @@ -95,17 +122,18 @@ namespace { SidebarController::SidebarController ( SidebarDockingWindow* pParentWindow, - const css::uno::Reference<css::frame::XFrame>& rxFrame) + const SfxViewFrame* pViewFrame) : SidebarControllerInterfaceBase(m_aMutex), mpCurrentDeck(), mpParentWindow(pParentWindow), + mpViewFrame(pViewFrame), + mxFrame(pViewFrame->GetFrame().GetFrameInterface()), mpTabBar(VclPtr<TabBar>::Create( mpParentWindow, - rxFrame, + mxFrame, [this](const 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), @@ -130,13 +158,12 @@ SidebarController::SidebarController ( mpResourceManager = std::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. @@ -710,6 +737,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->Invalidate(); @@ -1202,9 +1245,20 @@ void SidebarController::UpdateDeckOpenState() aNewSize.setWidth(mnSavedSidebarWidth); 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 @@ -1229,10 +1283,22 @@ void SidebarController::UpdateDeckOpenState() aNewSize.setWidth(nTabBarDefaultWidth); 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) mnSavedSidebarWidth = mnWidthOnSplitterButtonDown; mpParentWindow->SetStyle(mpParentWindow->GetStyle() & ~WB_SIZEABLE); diff --git a/sfx2/source/sidebar/SidebarDockingWindow.cxx b/sfx2/source/sidebar/SidebarDockingWindow.cxx index f76e71fc2d45..08b1040f523e 100644 --- a/sfx2/source/sidebar/SidebarDockingWindow.cxx +++ b/sfx2/source/sidebar/SidebarDockingWindow.cxx @@ -54,8 +54,7 @@ SidebarDockingWindow::SidebarDockingWindow(SfxBindings* pSfxBindings, SidebarChi else { const SfxViewFrame* pViewFrame = pSfxBindings->GetDispatcher()->GetFrame(); - const SfxFrame& rFrame = pViewFrame->GetFrame(); - mpSidebarController.set(sfx2::sidebar::SidebarController::create(this, rFrame.GetFrameInterface()).get()); + mpSidebarController.set(sfx2::sidebar::SidebarController::create(this, pViewFrame).get()); } } |