[Libreoffice-commits] core.git: Branch 'feature/sidebar' - sfx2/source

Oliver-Rainer Wittmann orw at apache.org
Thu May 9 10:27:51 PDT 2013


 sfx2/source/sidebar/Panel.cxx             |   17 ++++++++++++---
 sfx2/source/sidebar/Panel.hxx             |    7 +++---
 sfx2/source/sidebar/PanelTitleBar.cxx     |   32 +++++++++++++++++++-----------
 sfx2/source/sidebar/PanelTitleBar.hxx     |    7 +++---
 sfx2/source/sidebar/SidebarController.cxx |   16 +++++++--------
 sfx2/source/sidebar/SidebarController.hxx |    3 --
 6 files changed, 51 insertions(+), 31 deletions(-)

New commits:
commit 28a73fa4048a921b045655b036a445333774acc4
Author: Oliver-Rainer Wittmann <orw at apache.org>
Date:   Thu Apr 25 10:51:17 2013 +0000

    Related: #i121420# apply context dependent Show Menu Commands...
    
    according given panel configurations
    
    (cherry picked from commit c4a3b967b0ba367b219ac181fe2ed24a64e3c224)
    
    Change-Id: Ib2b3161c70112032659e712556641a46f43edcd0

diff --git a/sfx2/source/sidebar/Panel.cxx b/sfx2/source/sidebar/Panel.cxx
index 5389b4f..19b0588 100644
--- a/sfx2/source/sidebar/Panel.cxx
+++ b/sfx2/source/sidebar/Panel.cxx
@@ -47,15 +47,13 @@ namespace sfx2 { namespace sidebar {
 Panel::Panel (
     const PanelDescriptor& rPanelDescriptor,
     Window* pParentWindow,
-    const ::boost::function<void(void)>& rDeckLayoutTrigger,
-    const ::boost::function<void(void)>& rShowMenuFunctor)
+    const ::boost::function<void(void)>& rDeckLayoutTrigger )
     : Window(pParentWindow),
       msPanelId(rPanelDescriptor.msId),
       mpTitleBar(new PanelTitleBar(
               rPanelDescriptor.msTitle,
               pParentWindow,
-              this,
-              rShowMenuFunctor)),
+              this)),
       mbIsTitleBarOptional(rPanelDescriptor.mbIsTitleBarOptional),
       mxElement(),
       mxPanelComponent(),
@@ -82,6 +80,17 @@ Panel::~Panel (void)
 
 
 
+void Panel::SetShowMenuFunctor( const ::boost::function<void(void)>& rShowMenuFunctor )
+{
+    if ( mpTitleBar.get() )
+    {
+        mpTitleBar->SetMenuAction( rShowMenuFunctor );
+    }
+}
+
+
+
+
 void Panel::Dispose (void)
 {
     mxPanelComponent = NULL;
diff --git a/sfx2/source/sidebar/Panel.hxx b/sfx2/source/sidebar/Panel.hxx
index ce6cb3c..5a7ca1c 100644
--- a/sfx2/source/sidebar/Panel.hxx
+++ b/sfx2/source/sidebar/Panel.hxx
@@ -35,6 +35,7 @@ namespace sfx2 { namespace sidebar {
 
 class PanelDescriptor;
 class TitleBar;
+class PanelTitleBar;
 
 
 class Panel
@@ -44,12 +45,12 @@ public:
     Panel (
         const PanelDescriptor& rPanelDescriptor,
         Window* pParentWindow,
-        const ::boost::function<void(void)>& rDeckLayoutTrigger,
-        const ::boost::function<void(void)>& rShowMenuFunctor);
+        const ::boost::function<void(void)>& rDeckLayoutTrigger );
     virtual ~Panel (void);
 
     void Dispose (void);
 
+    void SetShowMenuFunctor( const ::boost::function<void(void)>& rShowMenuFunctor );
     TitleBar* GetTitleBar (void) const;
     bool IsTitleBarOptional (void) const;
     void SetUIElement (const cssu::Reference<css::ui::XUIElement>& rxElement);
@@ -69,7 +70,7 @@ public:
 
 private:
     const ::rtl::OUString msPanelId;
-    ::boost::scoped_ptr<TitleBar> mpTitleBar;
+    ::boost::scoped_ptr<PanelTitleBar> mpTitleBar;
     const bool mbIsTitleBarOptional;
     cssu::Reference<css::ui::XUIElement> mxElement;
     cssu::Reference<css::ui::XSidebarPanel> mxPanelComponent;
diff --git a/sfx2/source/sidebar/PanelTitleBar.cxx b/sfx2/source/sidebar/PanelTitleBar.cxx
index ded65fb..28f819b 100644
--- a/sfx2/source/sidebar/PanelTitleBar.cxx
+++ b/sfx2/source/sidebar/PanelTitleBar.cxx
@@ -41,24 +41,15 @@ static const sal_Int32 gaRightIconPadding (5);
 PanelTitleBar::PanelTitleBar (
     const ::rtl::OUString& rsTitle,
     Window* pParentWindow,
-    Panel* pPanel,
-    const ::boost::function<void(void)>& rMenuAction)
+    Panel* pPanel )
     : TitleBar(rsTitle, pParentWindow, GetBackgroundPaint()),
       mbIsLeftButtonDown(false),
       mpPanel(pPanel),
       mnMenuItemIndex(1),
-      maMenuAction(rMenuAction)
+      maMenuAction()
 {
     OSL_ASSERT(mpPanel != NULL);
 
-    if (maMenuAction)
-    {
-        maToolBox.InsertItem(
-            mnMenuItemIndex,
-            Theme::GetImage(Theme::Image_PanelMenu));
-        maToolBox.SetOutStyle(TOOLBOX_STYLE_FLAT);
-    }
-
 #ifdef DEBUG
     SetText(A2S("PanelTitleBar"));
 #endif
@@ -74,6 +65,25 @@ PanelTitleBar::~PanelTitleBar (void)
 
 
 
+void PanelTitleBar::SetMenuAction ( const ::boost::function<void(void)>& rMenuAction )
+{
+    if ( !maMenuAction && rMenuAction )
+    {
+        maToolBox.InsertItem(
+            mnMenuItemIndex,
+            Theme::GetImage(Theme::Image_PanelMenu));
+        maToolBox.SetOutStyle(TOOLBOX_STYLE_FLAT);
+    }
+    else if ( maMenuAction && !rMenuAction )
+    {
+        maToolBox.RemoveItem( maToolBox.GetItemPos( mnMenuItemIndex ) );
+    }
+    maMenuAction = rMenuAction;
+}
+
+
+
+
 Rectangle PanelTitleBar::GetTitleArea (const Rectangle& rTitleBarBox)
 {
     if (mpPanel != NULL)
diff --git a/sfx2/source/sidebar/PanelTitleBar.hxx b/sfx2/source/sidebar/PanelTitleBar.hxx
index f76edcb..dff82a9 100644
--- a/sfx2/source/sidebar/PanelTitleBar.hxx
+++ b/sfx2/source/sidebar/PanelTitleBar.hxx
@@ -34,10 +34,11 @@ public:
     PanelTitleBar (
         const ::rtl::OUString& rsTitle,
         Window* pParentWindow,
-        Panel* pPanel,
-        const ::boost::function<void(void)>& rMenuAction);
+        Panel* pPanel );
     virtual ~PanelTitleBar (void);
 
+    void SetMenuAction ( const ::boost::function<void(void)>& rMenuAction );
+
     virtual void DataChanged (const DataChangedEvent& rEvent);
     virtual void MouseButtonDown (const MouseEvent& rMouseEvent);
     virtual void MouseButtonUp (const MouseEvent& rMouseEvent);
@@ -53,7 +54,7 @@ private:
     bool mbIsLeftButtonDown;
     Panel* mpPanel;
     const sal_uInt16 mnMenuItemIndex;
-    const ::boost::function<void(void)> maMenuAction;
+    ::boost::function<void(void)> maMenuAction;
 };
 
 
diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx
index 12fc4ca..c458442 100644
--- a/sfx2/source/sidebar/SidebarController.cxx
+++ b/sfx2/source/sidebar/SidebarController.cxx
@@ -454,14 +454,18 @@ void SidebarController::SwitchToDeck (
             // Panel does not yet exist.  Create it.
             aNewPanels[nWriteIndex] = CreatePanel(
                 rPanelContexDescriptor.msId,
-                mpCurrentDeck->GetPanelParentWindow(),
-                rPanelContexDescriptor.msMenuCommand);
+                mpCurrentDeck->GetPanelParentWindow());
             bHasPanelSetChanged = true;
         }
         if (aNewPanels[nWriteIndex] != NULL)
         {
             // Depending on the context we have to collapse the panel.
             aNewPanels[nWriteIndex]->SetExpanded(rPanelContexDescriptor.mbIsInitiallyVisible);
+            // Depending on the context we have to apply the show menu functor.
+            aNewPanels[nWriteIndex]->SetShowMenuFunctor(
+                rPanelContexDescriptor.msMenuCommand.getLength()>0
+                ? ::boost::bind(&SidebarController::ShowDetailMenu,this,rPanelContexDescriptor.msMenuCommand)
+                : ::boost::function<void(void)>() );
 
             ++nWriteIndex;
         }
@@ -536,8 +540,7 @@ bool SidebarController::ArePanelSetsEqual (
 
 SharedPanel SidebarController::CreatePanel (
     const OUString& rsPanelId,
-    ::Window* pParentWindow,
-    const OUString& rsMenuCommand)
+    ::Window* pParentWindow )
 {
     const PanelDescriptor* pPanelDescriptor = ResourceManager::Instance().GetPanelDescriptor(rsPanelId);
     if (pPanelDescriptor == NULL)
@@ -547,10 +550,7 @@ SharedPanel SidebarController::CreatePanel (
     SharedPanel pPanel (new Panel(
         *pPanelDescriptor,
         pParentWindow,
-        ::boost::bind(&Deck::RequestLayout, mpCurrentDeck.get()),
-        rsMenuCommand.getLength()>0
-            ? ::boost::bind(&SidebarController::ShowDetailMenu,this,rsMenuCommand)
-            : ::boost::function<void(void)>()));
+        ::boost::bind(&Deck::RequestLayout, mpCurrentDeck.get()) ) );
 
     // Create the XUIElement.
     Reference<ui::XUIElement> xUIElement (CreateUIElement(
diff --git a/sfx2/source/sidebar/SidebarController.hxx b/sfx2/source/sidebar/SidebarController.hxx
index 9c4e2a8..2d27736 100644
--- a/sfx2/source/sidebar/SidebarController.hxx
+++ b/sfx2/source/sidebar/SidebarController.hxx
@@ -132,8 +132,7 @@ private:
         const bool bWantsCanvas);
     SharedPanel CreatePanel (
         const ::rtl::OUString& rsPanelId,
-        ::Window* pParentWindow,
-        const ::rtl::OUString& rsMenuCommand);
+        ::Window* pParentWindow );
     void SwitchToDeck (
         const DeckDescriptor& rDeckDescriptor,
         const Context& rContext);


More information about the Libreoffice-commits mailing list