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.cxx86
1 files changed, 76 insertions, 10 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);