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 }