summaryrefslogtreecommitdiff
path: root/sfx2/source/sidebar/SidebarController.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sfx2/source/sidebar/SidebarController.hxx')
-rw-r--r--sfx2/source/sidebar/SidebarController.hxx60
1 files changed, 51 insertions, 9 deletions
diff --git a/sfx2/source/sidebar/SidebarController.hxx b/sfx2/source/sidebar/SidebarController.hxx
index 2d2773690622..0aa088306ca5 100644
--- a/sfx2/source/sidebar/SidebarController.hxx
+++ b/sfx2/source/sidebar/SidebarController.hxx
@@ -29,12 +29,14 @@
#include <com/sun/star/awt/XWindowPeer.hpp>
#include <com/sun/star/beans/XPropertyChangeListener.hpp>
+#include <com/sun/star/frame/XDispatch.hpp>
#include <com/sun/star/ui/XContextChangeEventListener.hpp>
#include <com/sun/star/ui/XUIElement.hpp>
#include <com/sun/star/ui/XSidebar.hpp>
#include <boost/noncopyable.hpp>
-#include <cppuhelper/compbase3.hxx>
+#include <boost/optional.hpp>
+#include <cppuhelper/compbase4.hxx>
#include <cppuhelper/basemutex.hxx>
namespace css = ::com::sun::star;
@@ -43,13 +45,17 @@ namespace cssu = ::com::sun::star::uno;
namespace
{
- typedef ::cppu::WeakComponentImplHelper3 <
+ typedef ::cppu::WeakComponentImplHelper4 <
css::ui::XContextChangeEventListener,
css::beans::XPropertyChangeListener,
- css::ui::XSidebar
+ css::ui::XSidebar,
+ css::frame::XStatusListener
> SidebarControllerInterfaceBase;
}
+class SfxSplitWindow;
+class FixedBitmap;
+
namespace sfx2 { namespace sidebar {
class ContentPanelDescriptor;
@@ -82,6 +88,10 @@ public:
virtual void SAL_CALL propertyChange (const css::beans::PropertyChangeEvent& rEvent)
throw(cssu::RuntimeException);
+ // frame::XStatusListener
+ virtual void SAL_CALL statusChanged (const css::frame::FeatureStateEvent& rEvent)
+ throw(cssu::RuntimeException);
+
// ui::XSidebar
virtual void SAL_CALL requestLayout (void)
throw(cssu::RuntimeException);
@@ -90,14 +100,16 @@ public:
void SwitchToDeck (
const ::rtl::OUString& rsDeckId);
+ void OpenThenSwitchToDeck (
+ const ::rtl::OUString& rsDeckId);
/** Show only the tab bar, not the deck.
*/
- void CloseDeck (void);
+ void RequestCloseDeck (void);
/** Open the deck area and restore the parent window to its old width.
*/
- void OpenDeck (void);
+ void RequestOpenDeck (void);
FocusManager& GetFocusManager (void);
@@ -112,12 +124,36 @@ private:
::rtl::OUString msCurrentDeckTitle;
AsynchronousCall maPropertyChangeForwarder;
AsynchronousCall maContextChangeUpdate;
- bool mbIsDeckClosed;
+
+ /** Two flags control whether the deck is displayed or if only the
+ tab bar remains visible.
+ The mbIsDeckOpen flag stores the current state while
+ mbIsDeckRequestedOpen stores how this state should be. User
+ actions like clicking on the deck closer affect the
+ mbIsDeckRequestedOpen. Normally both flags have the same
+ value. A document being read-only can prevent the deck from opening.
+ */
+ ::boost::optional<bool> mbIsDeckRequestedOpen;
+ ::boost::optional<bool> mbIsDeckOpen;
+ bool mbCanDeckBeOpened;
+
/** Before the deck is closed the sidebar width is saved into this variable,
so that it can be restored when the deck is reopended.
*/
sal_Int32 mnSavedSidebarWidth;
FocusManager maFocusManager;
+ cssu::Reference<css::frame::XDispatch> mxReadOnlyModeDispatch;
+ bool mbIsDocumentReadOnly;
+ SfxSplitWindow* mpSplitWindow;
+ /** When the user moves the splitter then we remember the
+ width at that time.
+ */
+ sal_Int32 mnWidthOnSplitterButtonDown;
+ /** Control that is temporarily used as replacement for the deck
+ to indicate that when the current mouse drag operation ends, the
+ sidebar will only show the tab bar.
+ */
+ ::boost::scoped_ptr<Window> mpCloseIndicator;
DECL_LINK(WindowEventHandler, VclWindowEvent*);
/** Make maRequestedContext the current context.
@@ -141,6 +177,8 @@ private:
const ::std::vector<TabBar::DeckMenuData>& rDeckSelectionData,
const ::std::vector<TabBar::DeckMenuData>& rDeckShowData) const;
void ShowDetailMenu (const ::rtl::OUString& rsMenuCommand) const;
+ css::util::URL GetURL (const ::rtl::OUString& rsCommand) const;
+ cssu::Reference<css::frame::XDispatch> GetDispatch (const css::util::URL& rURL) const;
::boost::shared_ptr<PopupMenu> CreatePopupMenu (
const ::std::vector<TabBar::DeckMenuData>& rDeckSelectionData,
const ::std::vector<TabBar::DeckMenuData>& rDeckShowData) const;
@@ -151,21 +189,25 @@ private:
That is only possible if there is no other docking window docked above or below the sidebar.
Return whether the width of the child window can be modified.
*/
- bool CanModifyChildWindowWidth (void) const;
+ bool CanModifyChildWindowWidth (void);
/** Set the child window container to a new width.
Return the old width.
*/
sal_Int32 SetChildWindowWidth (const sal_Int32 nNewWidth);
- void RestrictWidth (void);
-
/** Update the icons displayed in the title bars of the deck and
the panels. This is called once when a deck is created and
every time when a data change event is processed.
*/
void UpdateTitleBarIcons (void);
+ void UpdateDeckOpenState (void);
+ void RestrictWidth (void);
+ SfxSplitWindow* GetSplitWindow (void);
+ void ProcessNewWidth (const sal_Int32 nNewWidth);
+ void UpdateCloseIndicator (const bool bIsIndicatorVisible);
+
virtual void SAL_CALL disposing (void);
};