dillo  3.0.5
About: dillo is a small, fast, extensible Web browser particularly suitable for older or smaller computers and embedded systems (but only limited or no support for frames, CSS, JavaScript, Java).
  Fossies Dox: dillo-3.0.5.tar.gz  ("inofficial" and yet experimental doxygen-generated source code documentation)  

ui.cc
Go to the documentation of this file.
1 /*
2  * Dillo Widget
3  *
4  * Copyright 2005-2007 Sebastian Geerken <sgeerken@dillo.org>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program. If not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 
21 
22 #include "core.hh"
23 #include "../lout/debug.hh"
24 
25 #include <stdio.h>
26 
27 namespace dw {
28 namespace core {
29 namespace ui {
30 
31 using namespace lout;
32 using namespace lout::object;
33 
34 int Embed::CLASS_ID = -1;
35 
37 {
38  DBG_OBJ_CREATE ("dw::core::ui::Embed");
39  registerName ("dw::core::ui::Embed", &CLASS_ID);
40  this->resource = resource;
41  resource->setEmbed (this);
42 }
43 
45 {
46  delete resource;
47  DBG_OBJ_DELETE ();
48 }
49 
51 {
52  resource->sizeRequest (requisition);
53 }
54 
56 {
57  resource->getExtremes (extremes);
58 }
59 
61 {
62  resource->sizeAllocate (allocation);
63 }
64 
66 {
67  resource->emitEnter();
69 }
70 
72 {
73  resource->emitLeave();
75 }
76 
78 {
79  bool handled;
80 
81  if (event->button == 3) {
82  resource->emitClicked(event);
83  handled = true;
84  } else {
85  handled = false;
86  }
87  return handled;
88 }
89 
90 void Embed::setWidth (int width)
91 {
92  resource->setWidth (width);
93 }
94 
95 void Embed::setAscent (int ascent)
96 {
97  resource->setAscent (ascent);
98 }
99 
100 void Embed::setDescent (int descent)
101 {
102  resource->setDescent (descent);
103 }
104 
105 void Embed::setDisplayed (bool displayed)
106 {
107  resource->setDisplayed (displayed);
108 }
109 
110 void Embed::setEnabled (bool enabled)
111 {
112  resource->setEnabled (enabled);
113 }
114 
115 void Embed::draw (View *view, Rectangle *area)
116 {
117  drawWidgetBox (view, area, false);
118  resource->draw (view, area);
119 }
120 
122 {
123  return resource->iterator (mask, atEnd);
124 }
125 
127 {
128  resource->setStyle (style);
129  Widget::setStyle (style);
130 }
131 
132 // ----------------------------------------------------------------------
133 
135  *receiver,
136  int signalNo,
137  int argc, Object **argv)
138 {
139  ActivateReceiver *ar = (ActivateReceiver*)receiver;
140  Resource *res = (Resource*)((Pointer*)argv[0])->getValue ();
141 
142  switch (signalNo) {
143  case 0:
144  ar->activate (res);
145  break;
146  case 1:
147  ar->enter (res);
148  break;
149  case 2:
150  ar->leave (res);
151  break;
152  default:
154  }
155  return false;
156 }
157 
159 {
160  Pointer p (resource);
161  Object *argv[1] = { &p };
162  emitVoid (0, 1, argv);
163 }
164 
166 {
167  Pointer p (resource);
168  Object *argv[1] = { &p };
169  emitVoid (1, 1, argv);
170 }
171 
173 {
174  Pointer p (resource);
175  Object *argv[1] = { &p };
176  emitVoid (2, 1, argv);
177 }
178 
179 // ----------------------------------------------------------------------
180 
182 {
183 }
184 
186 {
187  this->embed = embed;
188 }
189 
191 {
192  /* Simply return the requisition width */
193  Requisition requisition;
194  sizeRequest (&requisition);
195  extremes->minWidth = extremes->maxWidth = requisition.width;
196 }
197 
199 {
200 }
201 
202 void Resource::setWidth (int width)
203 {
204 }
205 
206 void Resource::setAscent (int ascent)
207 {
208 }
209 
210 void Resource::setDescent (int descent)
211 {
212 }
213 
214 void Resource::setDisplayed (bool displayed)
215 {
216 }
217 
218 void Resource::draw (View *view, Rectangle *area)
219 {
220 }
221 
223 {
224 }
225 
227 {
228  activateEmitter.emitEnter(this);
229 }
230 
232 {
233  activateEmitter.emitLeave(this);
234 }
235 
237  int signalNo, int argc,
238  Object **argv)
239 {
240  ((ClickedReceiver*)receiver)
241  ->clicked ((Resource*)((Pointer*)argv[0])->getValue (),
242  (EventButton*)((Pointer*)argv[1])->getValue());
243  return false;
244 }
245 
247  EventButton *event)
248 {
249  Pointer p1 (resource);
250  Pointer p2 (event);
251  Object *argv[2] = { &p1, &p2 };
252  emitVoid (0, 2, argv);
253 }
254 
255 // ----------------------------------------------------------------------
256 
258 {
260  // return new TextIterator (getEmbed (), mask, atEnd, getLabel ());
262  return new EmptyIterator (getEmbed (), mask, atEnd);
263 }
264 
265 // ----------------------------------------------------------------------
266 
268  int ascent,
269  int descent)
270 {
274  resource->queueResize (resource->childWidget->extremesChanged ());
275 }
276 
278 {
279  layout = NULL;
280  layoutReceiver.resource = this;
281  click_x = click_y = -1;
282 }
283 
285 {
286  this->childWidget = widget;
287 
288  layout = new Layout (createPlatform ());
289  setLayout (layout);
290  layout->setWidget (widget);
291  layout->connect (&layoutReceiver);
292 }
293 
295 {
296  ButtonResource::setEmbed (embed);
297 
298  if (childWidget->usesHints ())
299  embed->setUsesHints ();
300 }
301 
303 {
304  delete layout;
305 }
306 
308 {
309  Requisition widgetRequisition;
310  childWidget->sizeRequest (&widgetRequisition);
311  requisition->width = widgetRequisition.width + 2 * reliefXThickness ();
312  requisition->ascent = widgetRequisition.ascent + reliefYThickness ();
313  requisition->descent = widgetRequisition.descent + reliefYThickness ();
314 }
315 
317 {
318  Extremes widgetExtremes;
319  childWidget->getExtremes (&widgetExtremes);
320  extremes->minWidth = widgetExtremes.minWidth + 2 * reliefXThickness ();
321  extremes->maxWidth = widgetExtremes.maxWidth + 2 * reliefXThickness ();
322 }
323 
325 {
326 }
327 
329 {
330  childWidget->setWidth (width - 2 * reliefXThickness ());
331 }
332 
334 {
335  childWidget->setAscent (ascent - reliefYThickness ());
336 }
337 
339 {
340  childWidget->setDescent (descent - reliefYThickness ());
341 }
342 
344 {
349  return new EmptyIterator (getEmbed (), mask, atEnd);
350 }
351 
352 // ----------------------------------------------------------------------
353 
355 {
356  // return new TextIterator (getEmbed (), mask, atEnd, getText ());
358  return new EmptyIterator (getEmbed (), mask, atEnd);
359 }
360 
361 // ----------------------------------------------------------------------
362 
364 {
365  //return new TextIterator (getEmbed (), mask, atEnd,
366  // isActivated () ? "[X]" : "[ ]");
368  return new EmptyIterator (getEmbed (), mask, atEnd);
369 }
370 
371 // ----------------------------------------------------------------------
372 
374 {
375 }
376 
378 {
379  //return new TextIterator (getEmbed (), mask, atEnd,
380  // isActivated () ? "(*)" : "( )");
382  return new EmptyIterator (getEmbed (), mask, atEnd);
383 }
384 
385 } // namespace ui
386 } // namespace core
387 } // namespace dw
388 
DBG_OBJ_DELETE
#define DBG_OBJ_DELETE()
Definition: debug.hh:176
dw::core::ui::Embed::setAscent
void setAscent(int ascent)
Definition: ui.cc:95
dw::core::ui::ComplexButtonResource::iterator
Iterator * iterator(Content::Type mask, bool atEnd)
Definition: ui.cc:343
dw::core::ui::ComplexButtonResource::ComplexButtonResource
ComplexButtonResource()
Definition: ui.cc:277
dw::core::Extremes::maxWidth
int maxWidth
Definition: types.hh:182
DBG_OBJ_CREATE
#define DBG_OBJ_CREATE(klass)
Definition: debug.hh:175
dw::core::Requisition
Definition: types.hh:172
dw::core::EventButton::button
int button
Definition: events.hh:61
lout::object
Here, some common classes (or interfaces) are defined, to standardize the access to other classes.
Definition: object.cc:29
dw::core::ui::ComplexButtonResource::setDescent
void setDescent(int descent)
Definition: ui.cc:338
dw::core::EventCrossing
Represents a enter or leave notify event.
Definition: events.hh:74
dw::core::EventButton
Represents a button press or release event.
Definition: events.hh:57
dw::core::ui::Resource::ActivateEmitter::emitLeave
void emitLeave(Resource *resource)
Definition: ui.cc:172
dw::core::Requisition::descent
int descent
Definition: types.hh:176
dw::core::ui::ComplexButtonResource::getExtremes
void getExtremes(Extremes *extremes)
Definition: ui.cc:316
dw::core::Extremes::minWidth
int minWidth
Definition: types.hh:181
dw::core::ui::RadioButtonResource::iterator
Iterator * iterator(Content::Type mask, bool atEnd)
Definition: ui.cc:377
dw::core::Content::Type
Type
Definition: types.hh:187
dw::core::ui::Embed::draw
void draw(View *view, Rectangle *area)
Definition: ui.cc:115
dw::core::Iterator
Iterators are used to iterate through the contents of a widget.
Definition: iterator.hh:19
dw::core::ui::Resource::ActivateReceiver::activate
virtual void activate(Resource *resource)=0
dw::core::ui::Embed::leaveNotifyImpl
void leaveNotifyImpl(core::EventCrossing *event)
Definition: ui.cc:71
dw::core::ui::Resource::ActivateReceiver::enter
virtual void enter(Resource *resource)=0
lout::misc::assertNotReached
void assertNotReached()
Definition: misc.hh:35
dw::core::EmptyIterator
This implementation of dw::core::Iterator can be used by widgets with no contents.
Definition: iterator.hh:95
dw::core::ui::Embed::setEnabled
void setEnabled(bool enabled)
Definition: ui.cc:110
dw::core::ui::CheckButtonResource::iterator
Iterator * iterator(Content::Type mask, bool atEnd)
Definition: ui.cc:363
dw::core::ui::Resource::ActivateEmitter::emitEnter
void emitEnter(Resource *resource)
Definition: ui.cc:165
dw::core::Allocation
Represents the allocation, i.e. actual position and size of a dw::core::Widget.
Definition: types.hh:163
dw::core::ui::Resource::draw
virtual void draw(View *view, Rectangle *area)
Definition: ui.cc:218
dw::core::ui::Resource::ActivateEmitter::emitToReceiver
bool emitToReceiver(lout::signal::Receiver *receiver, int signalNo, int argc, Object **argv)
A sub class must implement this for a call to a single receiver.
Definition: ui.cc:134
dw::core::ui::Embed::getExtremesImpl
void getExtremesImpl(Extremes *extremes)
See Sizes of Dillo Widgets.
Definition: ui.cc:55
dw::core::ui::Embed::setDescent
void setDescent(int descent)
Definition: ui.cc:100
dw::core::ui::ComplexButtonResource::setEmbed
void setEmbed(Embed *embed)
Definition: ui.cc:294
dw::core::ui::Resource::ActivateReceiver
Receiver interface for the "activate" signal.
Definition: ui.hh:271
dw::core::ui::Resource::setDisplayed
virtual void setDisplayed(bool displayed)
Definition: ui.cc:214
dw::core::ui::Resource::setDescent
virtual void setDescent(int descent)
Definition: ui.cc:210
dw::core::ui::Embed::setWidth
void setWidth(int width)
Definition: ui.cc:90
dw::core::ui::Resource::emitEnter
void emitEnter()
Definition: ui.cc:226
dw::core::ui::Embed::setStyle
void setStyle(style::Style *style)
Change the style of a widget.
Definition: ui.cc:126
dw::core::ui::Embed::sizeRequestImpl
void sizeRequestImpl(Requisition *requisition)
See Sizes of Dillo Widgets.
Definition: ui.cc:50
dw::core::ui::Embed::Embed
Embed(Resource *resource)
Definition: ui.cc:36
dw::core::ui::ComplexButtonResource::LayoutReceiver::canvasSizeChanged
void canvasSizeChanged(int width, int ascent, int descent)
Definition: ui.cc:267
dw::core::ui::TextResource::iterator
Iterator * iterator(Content::Type mask, bool atEnd)
Definition: ui.cc:354
dw::core::ui::Resource::setAscent
virtual void setAscent(int ascent)
Definition: ui.cc:206
lout::object::Object
This is the base class for many other classes, which defines very common virtual methods.
Definition: object.hh:24
dw::core::ui::Embed
A widget for embedding UI widgets.
Definition: ui.hh:223
dw::core::Requisition::ascent
int ascent
Definition: types.hh:175
lout
Definition: container.cc:26
dw::core::ui::ComplexButtonResource::~ComplexButtonResource
~ComplexButtonResource()
Definition: ui.cc:302
dw::core::Widget::enterNotifyImpl
virtual void enterNotifyImpl(EventCrossing *event)
Definition: widget.cc:660
dw::core::Layout
The central class for managing and drawing a widget tree.
Definition: layout.hh:16
dw::core::ui::Resource::setWidth
virtual void setWidth(int width)
Definition: ui.cc:202
dw::core::Requisition::width
int width
Definition: types.hh:174
dw::core::ui::LabelButtonResource::iterator
Iterator * iterator(Content::Type mask, bool atEnd)
Definition: ui.cc:257
dw::core::Rectangle
dw::core::Shape implemtation for simple rectangles.
Definition: types.hh:69
dw::core::ui::Embed::iterator
Iterator * iterator(Content::Type mask, bool atEnd)
Return an iterator for this widget.
Definition: ui.cc:121
dw::core::ui::Embed::buttonPressImpl
bool buttonPressImpl(core::EventButton *event)
Definition: ui.cc:77
dw::core::Extremes
Definition: types.hh:179
dw::core::View
An interface to encapsulate platform dependent drawing.
Definition: view.hh:16
dw::core::ui::Resource::getExtremes
virtual void getExtremes(Extremes *extremes)
Definition: ui.cc:190
lout::object::Pointer
An object::Object wrapper for void pointers.
Definition: object.hh:65
dw::core::ui::ComplexButtonResource::setAscent
void setAscent(int ascent)
Definition: ui.cc:333
dw::core::ui::Resource::ClickedReceiver
Receiver interface for the "clicked" signal.
Definition: ui.hh:281
dw::core::ui::Embed::sizeAllocateImpl
void sizeAllocateImpl(Allocation *allocation)
See Sizes of Dillo Widgets.
Definition: ui.cc:60
dw::core::ui::Resource::setEmbed
virtual void setEmbed(Embed *embed)
Definition: ui.cc:185
dw::core::ui::Embed::setDisplayed
void setDisplayed(bool displayed)
Definition: ui.cc:105
dw::core::ui::Resource::setStyle
virtual void setStyle(style::Style *style)
Definition: ui.cc:222
dw::core::ui::Resource
Basic interface for all resources.
Definition: ui.hh:263
dw::core::ui::ComplexButtonResource::init
void init(Widget *widget)
Definition: ui.cc:284
dw::core::ui::Resource::ActivateReceiver::leave
virtual void leave(Resource *resource)=0
dw::core::ui::ComplexButtonResource::sizeRequest
void sizeRequest(Requisition *requisition)
Definition: ui.cc:307
dw::core::ui::Embed::~Embed
~Embed()
Definition: ui.cc:44
core.hh
dw::core::ui::Resource::ClickedEmitter::emitToReceiver
bool emitToReceiver(lout::signal::Receiver *receiver, int signalNo, int argc, Object **argv)
A sub class must implement this for a call to a single receiver.
Definition: ui.cc:236
dw::core::ui::ComplexButtonResource::setWidth
void setWidth(int width)
Definition: ui.cc:328
dw::core::ui::Resource::emitLeave
void emitLeave()
Definition: ui.cc:231
lout::signal::Receiver
The base class for signal receiver base classes.
Definition: signal.hh:253
dw::core::ui::Resource::sizeAllocate
virtual void sizeAllocate(Allocation *allocation)
Definition: ui.cc:198
dw::core::ui::ComplexButtonResource::sizeAllocate
void sizeAllocate(Allocation *allocation)
Definition: ui.cc:324
dw::core::ui::Embed::setUsesHints
void setUsesHints()
Definition: ui.hh:253
dw::core::ui::Resource::ClickedEmitter::emitClicked
void emitClicked(Resource *resource, EventButton *event)
Definition: ui.cc:246
dw::core::ui::Resource::~Resource
virtual ~Resource()
Definition: ui.cc:181
dw::core::Widget::setStyle
virtual void setStyle(style::Style *style)
Change the style of a widget.
Definition: widget.cc:325
dw::core::Widget
The base class of all dillo widgets.
Definition: widget.hh:23
dw
Dw is in this namespace, or sub namespaces of this one.
Definition: alignedtextblock.cc:26
dw::core::ui::Resource::ActivateEmitter::emitActivate
void emitActivate(Resource *resource)
Definition: ui.cc:158
dw::core::ui::Embed::CLASS_ID
static int CLASS_ID
Definition: ui.hh:239
dw::core::style::Style
Definition: style.hh:571
dw::core::ui::Embed::enterNotifyImpl
void enterNotifyImpl(core::EventCrossing *event)
Definition: ui.cc:65
dw::core::ui::RadioButtonResource::GroupIterator::~GroupIterator
virtual ~GroupIterator()
Definition: ui.cc:373
dw::core::Widget::leaveNotifyImpl
virtual void leaveNotifyImpl(EventCrossing *event)
Definition: widget.cc:668