summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/FbTk/EventManager.cc92
-rw-r--r--src/FbTk/EventManager.hh47
2 files changed, 139 insertions, 0 deletions
diff --git a/src/FbTk/EventManager.cc b/src/FbTk/EventManager.cc
new file mode 100644
index 0000000..223b004
--- /dev/null
+++ b/src/FbTk/EventManager.cc
@@ -0,0 +1,92 @@
1// EventManager.cc
2// Copyright (c) 2002 Henrik Kinnunen (fluxgen at linuxmail.org)
3//
4// Permission is hereby granted, free of charge, to any person obtaining a
5// copy of this software and associated documentation files (the "Software"),
6// to deal in the Software without restriction, including without limitation
7// the rights to use, copy, modify, merge, publish, distribute, sublicense,
8// and/or sell copies of the Software, and to permit persons to whom the
9// Software is furnished to do so, subject to the following conditions:
10//
11// The above copyright notice and this permission notice shall be included in
12// all copies or substantial portions of the Software.
13//
14// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20// DEALINGS IN THE SOFTWARE.
21
22// $Id: EventManager.cc,v 1.1 2002/11/27 21:41:13 fluxgen Exp $
23
24#include "EventManager.hh"
25
26#include <iostream>
27using namespace std;
28
29namespace FbTk {
30
31EventManager *EventManager::instance() {
32 static EventManager ev;
33 return &ev;
34}
35
36EventManager::~EventManager() {
37 if (m_eventhandlers.size() != 0)
38 cerr<<"FbTk::EventManager: Warning: unregistered eventhandlers!"<<endl;
39}
40
41void EventManager::handleEvent(XEvent &ev) {
42 // find eventhandler for event window
43 if (m_eventhandlers.find(ev.xany.window) == m_eventhandlers.end()) {
44 cerr<<"Can't find window="<<ev.xany.window<<endl;
45 return;
46 }
47 EventHandler *evhand = m_eventhandlers[ev.xany.window];
48 if (evhand == 0) {
49 cerr<<"FbTk::EventManager: Warning: evhand == 0!"<<endl;
50 return;
51 }
52
53 switch (ev.xany.type) {
54 case KeyPress:
55 evhand->keyPressEvent(ev.xkey);
56 break;
57 case KeyRelease:
58 evhand->keyReleaseEvent(ev.xkey);
59 break;
60 case ButtonPress:
61 evhand->buttonPressEvent(ev.xbutton);
62 break;
63 case ButtonRelease:
64 evhand->buttonReleaseEvent(ev.xbutton);
65 break;
66 case MotionNotify:
67 evhand->motionNotifyEvent(ev.xmotion);
68 break;
69 case Expose:
70 evhand->exposeEvent(ev.xexpose);
71 break;
72 case EnterNotify:
73 evhand->enterNotifyEvent(ev.xcrossing);
74 break;
75 case LeaveNotify:
76 evhand->leaveNotifyEvent(ev.xcrossing);
77 break;
78 default:
79 evhand->handleEvent(ev);
80 break;
81 };
82}
83
84void EventManager::registerEventHandler(EventHandler &ev, Window win) {
85 m_eventhandlers[win] = &ev;
86}
87
88void EventManager::unregisterEventHandler(Window win) {
89 m_eventhandlers.erase(win);
90}
91
92};
diff --git a/src/FbTk/EventManager.hh b/src/FbTk/EventManager.hh
new file mode 100644
index 0000000..97a0dc6
--- /dev/null
+++ b/src/FbTk/EventManager.hh
@@ -0,0 +1,47 @@
1// EventManager.hh
2// Copyright (c) 2002 Henrik Kinnunen (fluxgen at linuxmail.org)
3//
4// Permission is hereby granted, free of charge, to any person obtaining a
5// copy of this software and associated documentation files (the "Software"),
6// to deal in the Software without restriction, including without limitation
7// the rights to use, copy, modify, merge, publish, distribute, sublicense,
8// and/or sell copies of the Software, and to permit persons to whom the
9// Software is furnished to do so, subject to the following conditions:
10//
11// The above copyright notice and this permission notice shall be included in
12// all copies or substantial portions of the Software.
13//
14// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20// DEALINGS IN THE SOFTWARE.
21
22// $Id: EventManager.hh,v 1.1 2002/11/27 21:41:13 fluxgen Exp $
23
24#include "EventHandler.hh"
25#include <map>
26
27namespace FbTk {
28
29/**
30 singleton mediator for EventHandlers
31*/
32class EventManager {
33public:
34 static EventManager *instance();
35
36 void handleEvent(XEvent &ev);
37
38 void registerEventHandler(EventHandler &ev, Window win);
39 void unregisterEventHandler(Window win);
40private:
41 EventManager() { }
42 ~EventManager();
43
44 std::map<Window, EventHandler *> m_eventhandlers;
45};
46
47}; //end namespace FbTk