summaryrefslogtreecommitdiff
path: root/sd/source/ui/inc/EventMultiplexer.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sd/source/ui/inc/EventMultiplexer.hxx')
-rw-r--r--sd/source/ui/inc/EventMultiplexer.hxx222
1 files changed, 222 insertions, 0 deletions
diff --git a/sd/source/ui/inc/EventMultiplexer.hxx b/sd/source/ui/inc/EventMultiplexer.hxx
new file mode 100644
index 000000000000..8c177191c31f
--- /dev/null
+++ b/sd/source/ui/inc/EventMultiplexer.hxx
@@ -0,0 +1,222 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef SD_TOOLS_EVENT_MULTIPLEXER_HXX
+#define SD_TOOLS_EVENT_MULTIPLEXER_HXX
+
+#include <svl/lstner.hxx>
+
+#include <set>
+#include <memory>
+
+class Link;
+
+namespace sd {
+class ViewShellBase;
+}
+
+namespace sd { namespace tools {
+
+class EventMultiplexerEvent
+{
+public:
+ typedef sal_uInt32 EventId;
+ /** The EventMultiplexer itself is being disposed. Called for a live
+ EventMultiplexer. Removing a listener as response is not necessary,
+ though.
+ */
+ static const EventId EID_DISPOSING = 0x00000001;
+
+ /** The selection in the center pane has changed.
+ */
+ static const EventId EID_EDIT_VIEW_SELECTION = 0x00000002;
+
+ /** The selection in the slide sorter has changed, regardless of whether
+ the slide sorter is displayed in the left pane or the center pane.
+ */
+ static const EventId EID_SLIDE_SORTER_SELECTION = 0x00000004;
+
+ /** The current page has changed.
+ */
+ static const EventId EID_CURRENT_PAGE = 0x00000008;
+
+ /** The current MainViewShell (the ViewShell displayed in the center
+ pane) has been removed.
+ */
+ static const EventId EID_MAIN_VIEW_REMOVED = 0x00000010;
+
+ /** A new ViewShell has been made the MainViewShell.
+ */
+ static const EventId EID_MAIN_VIEW_ADDED = 0x00000020;
+
+ /** A ViewShell has been removed from one of the panes. Note that for
+ the ViewShell in the center pane bth this event type and
+ EID_MAIN_VIEW_REMOVED is broadcasted.
+ */
+ static const EventId EID_VIEW_REMOVED = 0x00000040;
+
+ /** A new ViewShell is being displayed in one of the panes. Note that
+ for the ViewShell in the center pane both this event type and
+ EID_MAIN_VIEW_ADDED is broadcasted.
+ */
+ static const EventId EID_VIEW_ADDED = 0x00000080;
+
+ /** The PaneManager is being destroyed.
+ */
+ static const EventId EID_PANE_MANAGER_DYING = 0x00000100;
+
+ /** Edit mode was (or is being) switched to normal mode. Find
+ EID_EDIT_MODE_MASTER below.
+ */
+ static const EventId EID_EDIT_MODE_NORMAL = 0x00000200;
+
+ /** One or more pages have been inserted into or deleted from the model.
+ */
+ static const EventId EID_PAGE_ORDER = 0x00000400;
+
+ /** Text editing in one of the shapes in the MainViewShell has started.
+ */
+ static const EventId EID_BEGIN_TEXT_EDIT = 0x00000800;
+
+ /** Text editing in one of the shapes in the MainViewShell has ended.
+ */
+ static const EventId EID_END_TEXT_EDIT = 0x00001000;
+
+ /** A UNO controller has been attached to the UNO frame.
+ */
+ static const EventId EID_CONTROLLER_ATTACHED = 0x00002000;
+
+ /** A UNO controller has been detached to the UNO frame.
+ */
+ static const EventId EID_CONTROLLER_DETACHED = 0x00004000;
+
+ /** The state of a shape has changed. The page is available in the user data.
+ */
+ static const EventId EID_SHAPE_CHANGED = 0x00008000;
+
+ /** A shape has been inserted to a page. The page is available in the
+ user data.
+ */
+ static const EventId EID_SHAPE_INSERTED = 0x00010000;
+
+ /** A shape has been removed from a page. The page is available in the
+ user data.
+ */
+ static const EventId EID_SHAPE_REMOVED = 0x00020000;
+
+ /** A configuration update has been completed.
+ */
+ static const EventId EID_CONFIGURATION_UPDATED = 0x00040000;
+
+ /** Edit mode was (or is being) switched to master mode.
+ */
+ static const EventId EID_EDIT_MODE_MASTER = 0x00080000;
+
+ const ViewShellBase& mrBase;
+ EventId meEventId;
+ const void* mpUserData;
+
+ EventMultiplexerEvent (
+ const ViewShellBase& rBase,
+ EventId eEventId,
+ const void* pUserData);
+};
+
+
+/** This convenience class makes it easy to listen to various events that
+ originally are broadcasted via different channels.
+
+ There is usually one EventMultiplexer instance per ViewShellBase().
+ Call the laters GetEventMultiplexer() method to get access to that
+ instance.
+
+ When a listener is registered it can specify the events it
+ wants to be informed of. This can be done with code like the following:
+
+ mrViewShellBase.GetEventMultiplexer().AddEventListener (
+ LINK(this,MasterPagesSelector,EventMultiplexerListener),
+ tools::EventMultiplexerEvent::EID_MAIN_VIEW_ADDED
+ | tools::EventMultiplexerEvent::EID_MAIN_VIEW_REMOVED);
+*/
+class EventMultiplexer
+{
+public:
+ /** Create new EventMultiplexer for the given ViewShellBase object.
+ */
+ EventMultiplexer (ViewShellBase& rBase);
+ ~EventMultiplexer (void);
+
+ /** Some constants that make it easier to remove a listener for all
+ event types at once.
+ */
+ static const EventMultiplexerEvent::EventId EID_FULL_SET = 0xffffffff;
+ static const EventMultiplexerEvent::EventId EID_EMPTY_SET = 0x00000000;
+
+ /** Add an event listener that will be informed about the specified
+ event types.
+ @param rCallback
+ The callback to call as soon as one of the event specified by
+ aEventTypeSet is received by the EventMultiplexer.
+ @param aEventTypeSet
+ A, possibly empty, set of event types that the listener wants to
+ be informed about.
+ */
+ void AddEventListener (
+ Link& rCallback,
+ EventMultiplexerEvent::EventId aEventTypeSet);
+
+ /** Remove an event listener for the specified event types.
+ @param aEventTypeSet
+ The listener will not be called anymore for any of the event
+ types in this set. Use EID_FULL_SET, the default value, to
+ remove the listener for all event types it has been registered
+ for.
+ */
+ void RemoveEventListener (
+ Link& rCallback,
+ EventMultiplexerEvent::EventId aEventTypeSet = EID_FULL_SET);
+
+ /** This method is used for out-of-line events. An event of the
+ specified type will be sent to all listeners that are registered for
+ that type.
+ @param eEventId
+ The type of the event.
+ @param pUserData
+ Some data sent to the listeners along with the event.
+ */
+ void MultiplexEvent(
+ EventMultiplexerEvent::EventId eEventId,
+ void* pUserData = 0);
+
+private:
+ class Implementation;
+ ::std::auto_ptr<Implementation> mpImpl;
+};
+
+} } // end of namespace ::sd::tools
+
+#endif