]> git.tdb.fi Git - libs/gltk.git/blob - source/toggle.cpp
Add Dropdown widget
[libs/gltk.git] / source / toggle.cpp
1 /* $Id$
2
3 This file is part of libmspgltk
4 Copyright © 2007  Mikko Rasa, Mikkosoft Productions
5 Distributed under the LGPL
6 */
7
8 #include "part.h"
9 #include "toggle.h"
10
11 namespace Msp {
12 namespace GLtk {
13
14 Toggle::Toggle(const Resources &r):
15         Widget(r),
16         pressed(false),
17         value(false)
18 {
19         update_style();
20 }
21
22 void Toggle::set_value(bool v)
23 {
24         value=v;
25         state=(value ? ACTIVE : HOVER);
26 }
27
28 void Toggle::button_press(int, int, unsigned btn)
29 {
30         if(btn==1)
31                 pressed=true;
32 }
33
34 void Toggle::button_release(int x, int y, unsigned btn)
35 {
36         if(pressed && btn==1)
37         {
38                 if(geom.is_inside_relative(x, y))
39                 {
40                         set_value(!value);
41                         signal_toggled.emit(value);
42                 }
43                 else
44                         state=NORMAL;
45
46                 pressed=false;
47         }
48 }
49
50 void Toggle::pointer_enter()
51 {
52         if(!value)
53                 state=HOVER;
54 }
55
56 void Toggle::pointer_leave()
57 {
58         if(!value)
59                 state=NORMAL;
60 }
61
62 void Toggle::render_special(const Part &part) const
63 {
64         if(part.get_name()=="text")
65                 render_text(part, text);
66 }
67
68
69 Toggle::Loader::Loader(Toggle &t):
70         Widget::Loader(t)
71 {
72         add("text",  &Toggle::text);
73         add("value", &Toggle::value);
74 }
75
76 Toggle &Toggle::Loader::get_object() const
77 {
78         return static_cast<Toggle &>(wdg);
79 }
80
81 void Toggle::Loader::finish()
82 {
83         Toggle &tgl=static_cast<Toggle &>(wdg);
84         tgl.state=(tgl.value ? ACTIVE : NORMAL);
85 }
86
87 } // namespace GLtk
88 } // namespace Msp