Mercurial > ~dholland > hg > ag > index.cgi
comparison anagram/vaclgui/toolbar.cpp @ 0:13d2b8934445
Import AnaGram (near-)release tree into Mercurial.
author | David A. Holland |
---|---|
date | Sat, 22 Dec 2007 17:52:45 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:13d2b8934445 |
---|---|
1 /* | |
2 * AnaGram, A System for Syntax Directed Programming | |
3 * Copyright 1997-2002 Parsifal Software. All Rights Reserved. | |
4 * See the file COPYING for license and usage terms. | |
5 * | |
6 * toolbar.cpp | |
7 */ | |
8 | |
9 #include <ifont.hpp> | |
10 | |
11 #include "base.h" | |
12 #include "toolbar.hpp" | |
13 | |
14 | |
15 #if 0 /* unused */ | |
16 /* note: classes used to be in toolbar.hpp */ | |
17 | |
18 class AgEventHandler { | |
19 public: | |
20 class Kernel { | |
21 int useCount; | |
22 public: | |
23 virtual ~Kernel() {} | |
24 virtual Boolean perform(IEvent &) const = 0; | |
25 Kernel() : useCount(0) {} | |
26 void lock() { useCount++; } | |
27 int unlock() { return --useCount <= 0; } | |
28 }; | |
29 | |
30 protected: | |
31 Kernel *kernel; | |
32 | |
33 public: | |
34 AgEventHandler(); | |
35 AgEventHandler(AgEventHandler::Kernel *kernel_); | |
36 AgEventHandler(const AgEventHandler &a); | |
37 AgEventHandler &operator = (const AgEventHandler &h); | |
38 ~AgEventHandler(); | |
39 Boolean operator () (IEvent &event) const; | |
40 }; | |
41 | |
42 template <class T> | |
43 class AgMemberEventHandler : public AgEventHandler { | |
44 private: | |
45 | |
46 class Kernel : public AgEventHandler::Kernel { | |
47 private: | |
48 T *object; | |
49 Boolean (T:: * memberFunction)(IEvent &); | |
50 | |
51 public: | |
52 Kernel(T *object_, Boolean (T:: * memberFunction_)(IEvent &)); | |
53 Boolean perform(IEvent &event) const { | |
54 return (object->*memberFunction)(event); | |
55 } | |
56 }; | |
57 | |
58 public: | |
59 AgMemberEventHandler(T *object_, Boolean (T:: * memberFunction_)(IEvent &)): | |
60 AgMemberEventHandler<T>::AgMemberEventHandler( | |
61 const AgMemberEventHandler<T> &a); | |
62 }; | |
63 | |
64 template <class T> | |
65 AgMemberEventHandler<T>::Kernel::Kernel(T *object_, | |
66 Boolean (T:: * memberFunction_)(IEvent &)) | |
67 : object(object_) | |
68 , memberFunction(memberFunction_) | |
69 {} | |
70 | |
71 template <class T> | |
72 AgMemberEventHandler<T>::AgMemberEventHandler(T *object_, | |
73 Boolean (T:: * memberFunction_)(IEvent &)) | |
74 : AgEventHandler( | |
75 new AgMemberEventHandler<T>::Kernel(object_,memberFunction_) | |
76 ) | |
77 {} | |
78 | |
79 template <class T> | |
80 AgMemberEventHandler<T>::AgMemberEventHandler(const AgMemberEventHandler<T> &a) | |
81 : AgEventHandler(a) | |
82 {} | |
83 | |
84 template <class T> | |
85 AgEventHandler eventHandlerObject(T *object, | |
86 Boolean (T:: * memberFunction)(IEvent &)) | |
87 { | |
88 return AgMemberEventHandler<T>(object, memberFunction); | |
89 } | |
90 | |
91 AgEventHandler::AgEventHandler() | |
92 : kernel(0) | |
93 {} | |
94 | |
95 AgEventHandler::AgEventHandler(AgEventHandler::Kernel *kernel_) | |
96 : kernel(kernel_) | |
97 { | |
98 if (kernel) { | |
99 kernel->lock(); | |
100 } | |
101 } | |
102 | |
103 AgEventHandler::AgEventHandler(const AgEventHandler &a) | |
104 : kernel(a.kernel) | |
105 { | |
106 if (kernel) { | |
107 kernel->lock(); | |
108 } | |
109 } | |
110 | |
111 AgEventHandler &AgEventHandler::operator = (const AgEventHandler &h) { | |
112 if (kernel && kernel->unlock()) { | |
113 delete kernel; | |
114 } | |
115 kernel = h.kernel; | |
116 if (kernel) { | |
117 kernel->lock(); | |
118 } | |
119 return *this; | |
120 } | |
121 AgEventHandler::~AgEventHandler() { | |
122 if (kernel && kernel->unlock()) { | |
123 delete kernel; | |
124 kernel = 0; | |
125 } | |
126 } | |
127 Boolean AgEventHandler::operator () (IEvent &event) const { | |
128 if (kernel) { | |
129 return kernel->perform(event); | |
130 } | |
131 return false; | |
132 } | |
133 | |
134 #endif /* 0 - unused */ | |
135 | |
136 | |
137 ToolBar::ToolBar(IWindow *owner, ISetCanvas::Style style) | |
138 : ISetCanvas(nextChildId(), | |
139 owner, owner, IRectangle(), | |
140 style | |
141 | ISetCanvas::horizontalDecks | |
142 | ISetCanvas::rightAlign | |
143 //| ISetCanvas::centerVerticalAlign | |
144 | IWindow::clipChildren | |
145 | IWindow::visible) | |
146 { | |
147 IPaintHandler::handleEventsFor(this); | |
148 } | |
149 | |
150 ToolBar::~ToolBar() { | |
151 IPaintHandler::stopHandlingEventsFor(this); | |
152 } | |
153 | |
154 Boolean ToolBar::paintWindow(IPaintEvent &event) { | |
155 //LOGSECTION("Toolbar::paintWindow"); | |
156 //LOGV(event.rect().asString()); | |
157 event.clearBackground(IGUIColor::dialogBgnd); | |
158 return false; | |
159 } | |
160 | |
161 ToolButton::ToolButton(int id, | |
162 IWindow *owner, | |
163 char *text, | |
164 IPushButton::Style style) | |
165 : IPushButton(id, owner, owner, IRectangle(), style | visible) | |
166 { | |
167 setFont(IFont("Arial", 9)); | |
168 setText(text); | |
169 } |