1 /***************************************************************************
2 guibar.cpp - description
3 -------------------
4 begin : december 14th, 2006
5 copyright : (C) 2006 by Duong Khang NGUYEN
6 email : neoneurone @ gmail com
7
8 $Id: guibar.cpp 375 2008-10-28 14:47:15Z neoneurone $
9 ***************************************************************************/
10
11 /***************************************************************************
12 * *
13 * This program is free software; you can redistribute it and/or modify *
14 * it under the terms of the GNU General Public License as published by *
15 * the Free Software Foundation; either version 2 of the License, or *
16 * any later version. *
17 * *
18 ***************************************************************************/
19
20 #include "guibar.h"
21 #include "guicontainer.h"
22
23
24 #define OC_BAR_INITIAL_RATIO 1/20
25 #define OC_BAR_INITIAL_VALUE 20
26 #define OC_BAR_START_VALUE 1
27
28
29 /*=====================================================================*/
GUIBar()30 GUIBar::GUIBar()
31 {
32 OPENCITY_DEBUG( "Default ctor. Not used" );
33 assert(0);
34 }
35
36
37 /*=====================================================================*/
GUIBar(const int ciX,const int ciY,const uint cuiW,const uint cuiH)38 GUIBar::GUIBar(
39 const int ciX,
40 const int ciY,
41 const uint cuiW,
42 const uint cuiH ):
43 _eVariation( OC_VERTICAL ),
44 _fInitialValue( OC_BAR_INITIAL_VALUE ),
45 _fValue( OC_BAR_START_VALUE ),
46 _fWidthRatio( 1 ),
47 _fHeightRatio( OC_BAR_INITIAL_RATIO )
48 {
49 OPENCITY_DEBUG( "Pctor" );
50
51 // Safe
52 _pctr = NULL;
53
54 // Initialize the position of the button
55 // NOTE: it's relative to the postion of the container
56 _iX = ciX;
57 _iY = ciY;
58 _uiWidth = cuiW;
59 _uiHeight = cuiH;
60
61 _cForeground = OPENCITY_PALETTE[Color::OC_BLACK];
62
63 // By default the bar is visible
64 Set( OC_GUIMAIN_VISIBLE );
65 }
66
67
68 /*=====================================================================*/
~GUIBar()69 GUIBar::~GUIBar()
70 {
71 OPENCITY_DEBUG( "Dtor" );
72 }
73
74
75 /*=====================================================================*/
76 void
SetInitialValue(const float fValue)77 GUIBar::SetInitialValue(
78 const float fValue )
79 {
80 assert( fValue != 0 );
81 _fInitialValue = fValue;
82 }
83
84
85 /*=====================================================================*/
86 void
SetValue(const float fValue)87 GUIBar::SetValue( const float fValue )
88 {
89 _fValue = fValue;
90
91 switch (_eVariation) {
92 case OC_HORIZONTAL:
93 _fWidthRatio = _fValue / _fInitialValue;
94 break;
95
96 case OC_VERTICAL:
97 _fHeightRatio = _fValue / _fInitialValue;
98 break;
99
100 case OC_BOTH:
101 _fWidthRatio = _fValue / _fInitialValue;
102 _fHeightRatio = _fWidthRatio;
103 break;
104 }
105 }
106
107
108 /*=====================================================================*/
109 void
SetVariation(const OPENCITY_VARIATION eV)110 GUIBar::SetVariation(
111 const OPENCITY_VARIATION eV )
112 {
113 _eVariation = eV;
114 }
115
116
117 /*=====================================================================*/
118 void
SetForeground(const Color & color)119 GUIBar::SetForeground(
120 const Color& color )
121 {
122 _cForeground = color;
123 }
124
125
126 /*=====================================================================*/
127 void
Display() const128 GUIBar::Display() const
129 {
130 uint w, h;
131 assert( _pctr != NULL );
132
133 // Return immediatly if this is NOT visible
134 if ( IsSet( OC_GUIMAIN_VISIBLE ) == false )
135 return;
136
137 // Calculate the size of the surface to display
138 w = (uint)((_uiWidth-1) * _fWidthRatio);
139 h = (uint)((_uiHeight-1) * _fHeightRatio);
140
141 // Translate the button to the correct position
142 glPushAttrib( GL_ENABLE_BIT );
143 glDisable( GL_LIGHTING );
144 glPushMatrix();
145 glTranslatef( _iX, _iY, 0.0 );
146
147 glColor4ub( _cForeground.r, _cForeground.g, _cForeground.b, _cForeground.a );
148
149 glBegin( GL_QUADS );
150 glVertex2i( 0, 0 );
151 glVertex2i( w, 0 );
152 glVertex2i( w, h );
153 glVertex2i( 0, h );
154 glEnd();
155
156 // Restore the old matrix and attribs
157 glPopMatrix();
158 glPopAttrib();
159 }
160
161
162 /*=====================================================================*/
163 void
Keyboard(const SDL_KeyboardEvent & rcEvent)164 GUIBar::Keyboard( const SDL_KeyboardEvent& rcEvent )
165 {}
166
167
168 /*=====================================================================*/
169 void
MouseMotion(const SDL_MouseMotionEvent & rcEvent)170 GUIBar::MouseMotion( const SDL_MouseMotionEvent& rcEvent )
171 {}
172
173
174 /*=====================================================================*/
175 void
MouseButton(const SDL_MouseButtonEvent & rcEvent)176 GUIBar::MouseButton( const SDL_MouseButtonEvent& rcEvent )
177 {}
178
179
180 /*=====================================================================*/
181 void
Expose(const SDL_ExposeEvent & rcEvent)182 GUIBar::Expose( const SDL_ExposeEvent& rcEvent )
183 {
184 this->Display();
185 }
186
187
188 /*=====================================================================*/
189 void
Resize(const SDL_ResizeEvent & rcEvent)190 GUIBar::Resize( const SDL_ResizeEvent& rcEvent )
191 {}
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224