summaryrefslogtreecommitdiff
path: root/include/sfx2/sidebar
diff options
context:
space:
mode:
authorAndre Fischer <af@apache.org>2013-04-19 08:51:45 +0000
committerMichael Meeks <michael.meeks@suse.com>2013-05-20 11:33:16 +0100
commit0b2c09a180f076230a1f1ac3ecf4725e82aada4c (patch)
treecd61de0a554320ae3c6c7c5ef9ef4c412e0dd3ac /include/sfx2/sidebar
parentc991fb49aa174f300be0b978d89bc63e01e0aa2b (diff)
Resolves: #i121960# Extend the sidebar::ControllerItem to check Disabled state
Converted TextPropertyPanel to use this new functionality. (cherry picked from commit 5e32abe48b0833e4e370507a1e74fbb1ba98b5e3) Conflicts: officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu sfx2/inc/sfx2/sidebar/ControllerItem.hxx sfx2/source/sidebar/ControllerItem.cxx sfx2/source/sidebar/FocusManager.cxx sfx2/source/sidebar/SidebarChildWindow.cxx svx/Library_svx.mk svx/source/sidebar/text/TextPropertyPanel.cxx svx/source/sidebar/text/TextPropertyPanel.hrc svx/source/sidebar/text/TextPropertyPanel.hxx svx/source/sidebar/text/TextPropertyPanel.src svx/source/sidebar/text/TextUnderlineControl.hxx Change-Id: I3a25bb0a02e6165ceeb6dbd9e6ecd3e94051f594
Diffstat (limited to 'include/sfx2/sidebar')
-rw-r--r--include/sfx2/sidebar/ControllerItem.hxx84
1 files changed, 83 insertions, 1 deletions
diff --git a/include/sfx2/sidebar/ControllerItem.hxx b/include/sfx2/sidebar/ControllerItem.hxx
index 3e7cd83fb75a..e79d797b0c06 100644
--- a/include/sfx2/sidebar/ControllerItem.hxx
+++ b/include/sfx2/sidebar/ControllerItem.hxx
@@ -20,11 +20,33 @@
#include <sfx2/ctrlitem.hxx>
+#include <cppuhelper/compbase1.hxx>
+#include <cppuhelper/basemutex.hxx>
+#include <unotools/cmdoptions.hxx>
+#include <vcl/image.hxx>
+
+#include <com/sun/star/frame/XFrame.hpp>
+
#include <boost/function.hpp>
+namespace css = ::com::sun::star;
+namespace cssu = ::com::sun::star::uno;
+
+class SfxViewFrame;
+class ToolBox;
+
+
namespace sfx2 { namespace sidebar {
+/** The sfx2::sidebar::ControllerItem is a wrapper around the
+ SfxControllerItem that becomes necessary to allow objects (think
+ sidebar panels) to receive state changes without having one
+ SfxControllerItem per supported item as base class (which is not
+ possible in C++ anyway).
+
+ It also gives access to the label and icon of a slot/command.
+*/
class SFX2_DLLPUBLIC ControllerItem
: public SfxControllerItem
{
@@ -35,19 +57,79 @@ public:
virtual void NotifyItemUpdate(
const sal_uInt16 nSId,
const SfxItemState eState,
- const SfxPoolItem* pState) = 0;
+ const SfxPoolItem* pState,
+ const bool bIsEnabled) = 0;
virtual ~ItemUpdateReceiverInterface();
};
+
+ /** This is the preferred constructor that allows the created
+ controller item to return non-empty values for GetLable() and
+ GetIcon() calls.
+ */
+ ControllerItem (
+ const sal_uInt16 nSlotId,
+ SfxBindings &rBindings,
+ ItemUpdateReceiverInterface& rItemUpdateReceiver,
+ const ::rtl::OUString& rsCommandName,
+ const cssu::Reference<css::frame::XFrame>& rxFrame);
+
+ /** This is the simpler constructor variant that still exists for
+ compatibility resons. Note that GetLabel() and GetIcon() will
+ return empty strings/images.
+ */
ControllerItem (
const sal_uInt16 nId,
SfxBindings &rBindings,
ItemUpdateReceiverInterface& rItemUpdateReceiver);
+
virtual ~ControllerItem();
+ /** Returns </TRUE> when the slot/command has not been disabled.
+ Changes of this state are notified via the
+ ItemUpdateReceiverInterface::NotifyContextChang() method.
+ */
+ bool IsEnabled (void) const;
+
+ /** Force the controller item to call its NotifyItemUpdate
+ callback with up-to-date data.
+ */
+ void RequestUpdate (void);
+
+ /** Return the label for the command. It contains the keyboard
+ accelerator when one exists.
+ */
+ ::rtl::OUString GetLabel (void) const;
+
+ /** Return the icon for the command.
+ */
+ Image GetIcon (void) const;
+
+ /** Convenience method for setting all relevant properties for the
+ slot/command represented by the called object at the given tool
+ box.
+ */
+ void SetupToolBoxItem (ToolBox& rToolBox, const sal_uInt16 nIndex);
+
+ /** Do not call. Used by local class only. Should be a member of
+ a local and hidden interface.
+ */
+ void NotifyFrameContextChange (void);
+ /** Do not call. Used by local class only. Should be a member of
+ a local and hidden interface.
+ */
+ void ResetFrame (void);
+
+protected:
+
virtual void StateChanged (sal_uInt16 nSId, SfxItemState eState, const SfxPoolItem* pState);
private:
ItemUpdateReceiverInterface& mrItemUpdateReceiver;
+ cssu::Reference<css::frame::XFrame> mxFrame;
+ cssu::Reference<css::lang::XComponent> mxFrameActionListener;
+ const ::rtl::OUString msCommandName;
+
+ void SetupCommandURL (const sal_Char* sCommandName);
};
} } // end of namespace sfx2::sidebar