summaryrefslogtreecommitdiff
path: root/odk/examples/cpp/complextoolbarcontrols/ListenerHelper.h
diff options
context:
space:
mode:
Diffstat (limited to 'odk/examples/cpp/complextoolbarcontrols/ListenerHelper.h')
-rw-r--r--odk/examples/cpp/complextoolbarcontrols/ListenerHelper.h82
1 files changed, 82 insertions, 0 deletions
diff --git a/odk/examples/cpp/complextoolbarcontrols/ListenerHelper.h b/odk/examples/cpp/complextoolbarcontrols/ListenerHelper.h
new file mode 100644
index 000000000000..6a60ab1d5a46
--- /dev/null
+++ b/odk/examples/cpp/complextoolbarcontrols/ListenerHelper.h
@@ -0,0 +1,82 @@
+#include <vector>
+#include <hash_map>
+#include <com/sun/star/frame/XFrame.hpp>
+#include <com/sun/star/frame/XStatusListener.hpp>
+#include <com/sun/star/frame/FeatureStateEvent.hpp>
+#include <com/sun/star/frame/XDispatch.hpp>
+
+#include <rtl/ustring.hxx>
+#include <cppuhelper/implbase1.hxx>
+
+struct hashObjectName_Impl
+{
+ size_t operator()(const ::rtl::OUString Str) const
+ {
+ return (size_t)Str.hashCode();
+ }
+};
+
+struct eqObjectName_Impl
+{
+ sal_Bool operator()(const ::rtl::OUString Str1, const ::rtl::OUString Str2) const
+ {
+ return ( Str1 == Str2 );
+ }
+};
+
+typedef std::vector < com::sun::star::uno::Reference < com::sun::star::frame::XStatusListener > > StatusListeners;
+
+typedef std::hash_map
+<
+ ::rtl::OUString,
+ StatusListeners,
+ hashObjectName_Impl,
+ eqObjectName_Impl
+>
+ListenerMap;
+
+// For every frame there is *one* Dispatch object for all possible commands
+// this struct contains an array of listeners for every supported command
+// these arrays are accessed by a hash_map (with the command string as index)
+struct ListenerItem
+{
+ ListenerMap aContainer;
+ ::com::sun::star::uno::Reference< com::sun::star::frame::XDispatch > xDispatch;
+ ::com::sun::star::uno::Reference< com::sun::star::frame::XFrame > xFrame;
+};
+
+typedef std::vector < ListenerItem > AllListeners;
+
+class ListenerHelper
+{
+public:
+ void AddListener(
+ const com::sun::star::uno::Reference < com::sun::star::frame::XFrame >& xFrame,
+ const com::sun::star::uno::Reference < com::sun::star::frame::XStatusListener > xControl,
+ const ::rtl::OUString& aCommand );
+ void RemoveListener(
+ const com::sun::star::uno::Reference < com::sun::star::frame::XFrame >& xFrame,
+ const com::sun::star::uno::Reference < com::sun::star::frame::XStatusListener > xControl,
+ const ::rtl::OUString& aCommand );
+ void Notify(
+ const com::sun::star::uno::Reference < com::sun::star::frame::XFrame >& xFrame,
+ const ::rtl::OUString& aCommand,
+ com::sun::star::frame::FeatureStateEvent& rEvent );
+ com::sun::star::uno::Reference < com::sun::star::frame::XDispatch > GetDispatch(
+ const com::sun::star::uno::Reference < com::sun::star::frame::XFrame >& xFrame,
+ const ::rtl::OUString& aCommand );
+ void AddDispatch(
+ const com::sun::star::uno::Reference < com::sun::star::frame::XDispatch > xDispatch,
+ const com::sun::star::uno::Reference < com::sun::star::frame::XFrame >& xFrame,
+ const ::rtl::OUString& aCommand );
+};
+
+class ListenerItemEventListener : public cppu::WeakImplHelper1 < ::com::sun::star::lang::XEventListener >
+{
+ ::com::sun::star::uno::Reference< com::sun::star::frame::XFrame > mxFrame;
+public:
+ ListenerItemEventListener( const com::sun::star::uno::Reference < com::sun::star::frame::XFrame >& xFrame)
+ : mxFrame(xFrame)
+ {}
+ virtual void SAL_CALL disposing( const com::sun::star::lang::EventObject& aEvent ) throw (com::sun::star::uno::RuntimeException);
+};