1 /***************************************************************************
2 layer.cpp - description
3 -------------------
4 begin : september 20th, 2003
5 copyright : (C) 2003-2007 by Duong Khang NGUYEN
6 email : neoneurone @ gmail com
7
8 $Id: layer.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 // Useful enumerations
21 #include "opencity_structure_type.h"
22
23 // OpenCity headers
24 #include "layer.h"
25 #include "structure.h"
26 #include "guicontainer.h" // for the "Query" function
27 #include "guibutton.h"
28
29 // Static variables
30 uint Layer::_uiNumberLayer = 0;
31 GUIContainer* Layer::pctrQ; ///< The query container
32 GUIButton* Layer::pbtnQRo, * Layer::pbtnQRf; ///< Residential query button
33 GUIButton* Layer::pbtnQCo, * Layer::pbtnQCf; ///< Commercial query button
34 GUIButton* Layer::pbtnQIo, * Layer::pbtnQIf; ///< Industrial query button
35 GUIButton* Layer::pbtnQWo, * Layer::pbtnQWf; ///< Water query button
36 GUIButton* Layer::pbtnQEo, * Layer::pbtnQEf; ///< Electricity query button
37 GUIButton* Layer::pbtnQGo, * Layer::pbtnQGf; ///< Gas query button
38
39
Layer()40 Layer::Layer(){
41 OPENCITY_DEBUG( "ctor" );
42
43 // IF called first time THEN create all the static variables
44 // we do it here, because we need an initialized OpenGL context
45 // if we do it on the declaration line, there will be runtime errors !
46 if ( Layer::_uiNumberLayer++ > 0)
47 return;
48
49 _CreateQueryContainer();
50 }
51
52
53 /*=====================================================================*/
~Layer()54 Layer::~Layer(){
55 OPENCITY_DEBUG( "dtor" );
56
57 // IF not called for the last derived class THEN return
58 if ( Layer::_uiNumberLayer-- > 1)
59 return;
60
61 _DeleteQueryContainer();
62 }
63
64
65 /*=====================================================================*/
66 const uint
GetMaxLinear() const67 Layer::GetMaxLinear() const
68 {
69 return _uiLayerWidth * _uiLayerLength - 1;
70 }
71
72
73 /*=====================================================================*/
74 void
GetLayerSize(uint & w,uint & l) const75 Layer::GetLayerSize(
76 uint & w,
77 uint & l) const
78 {
79 w = _uiLayerWidth;
80 l = _uiLayerLength;
81 }
82
83
84 /*=====================================================================*/
85 void
_CreateQueryContainer()86 Layer::_CreateQueryContainer()
87 {
88 // On buttons
89 Layer::pbtnQRo =
90 new GUIButton( GUIBUTTON_POSITION_1, ocDataDirPrefix("graphism/gui/query_residential_on"), 1);
91 Layer::pbtnQWo =
92 new GUIButton( GUIBUTTON_POSITION_2, ocDataDirPrefix("graphism/gui/query_water_on"), 1);
93 Layer::pbtnQEo =
94 new GUIButton( GUIBUTTON_POSITION_3, ocDataDirPrefix("graphism/gui/query_electricity_on"), 1);
95 Layer::pbtnQGo =
96 new GUIButton( GUIBUTTON_POSITION_4, ocDataDirPrefix("graphism/gui/query_gas_on"), 1);
97 Layer::pbtnQIo =
98 new GUIButton( GUIBUTTON_POSITION_5, ocDataDirPrefix("graphism/gui/query_industrial_on"), 1);
99 Layer::pbtnQCo =
100 new GUIButton( GUIBUTTON_POSITION_6, ocDataDirPrefix("graphism/gui/query_commercial_on"), 1);
101
102 // Off buttons
103 Layer::pbtnQRf =
104 new GUIButton( GUIBUTTON_POSITION_1, ocDataDirPrefix("graphism/gui/query_residential_off"), 1);
105 Layer::pbtnQWf =
106 new GUIButton( GUIBUTTON_POSITION_2, ocDataDirPrefix("graphism/gui/query_water_off"), 1);
107 Layer::pbtnQEf =
108 new GUIButton( GUIBUTTON_POSITION_3, ocDataDirPrefix("graphism/gui/query_electricity_off"), 1);
109 Layer::pbtnQGf =
110 new GUIButton( GUIBUTTON_POSITION_4, ocDataDirPrefix("graphism/gui/query_gas_off"), 1);
111 Layer::pbtnQIf =
112 new GUIButton( GUIBUTTON_POSITION_5, ocDataDirPrefix("graphism/gui/query_industrial_off"), 1);
113 Layer::pbtnQCf =
114 new GUIButton( GUIBUTTON_POSITION_6, ocDataDirPrefix("graphism/gui/query_commercial_off"), 1);
115
116 // Query container
117 Layer::pctrQ =
118 new GUIContainer( 100, 100, 140, 140, ocDataDirPrefix( "graphism/gui/querycircle_bg.png" ) );
119
120 // Add all the controls with their ON state
121 Layer::pctrQ->Add( Layer::pbtnQRo );
122 Layer::pctrQ->Add( Layer::pbtnQWo );
123 Layer::pctrQ->Add( Layer::pbtnQEo );
124 Layer::pctrQ->Add( Layer::pbtnQGo );
125 Layer::pctrQ->Add( Layer::pbtnQIo );
126 Layer::pctrQ->Add( Layer::pbtnQCo );
127
128 // Add all the controls with their OFF state
129 Layer::pctrQ->Add( Layer::pbtnQRf );
130 Layer::pctrQ->Add( Layer::pbtnQWf );
131 Layer::pctrQ->Add( Layer::pbtnQEf );
132 Layer::pctrQ->Add( Layer::pbtnQGf );
133 Layer::pctrQ->Add( Layer::pbtnQIf );
134 Layer::pctrQ->Add( Layer::pbtnQCf );
135
136 // Disable unused query icons
137 Layer::pbtnQWo->Unset( OC_GUIMAIN_VISIBLE );
138 Layer::pbtnQGo->Unset( OC_GUIMAIN_VISIBLE );
139 }
140
141
142 /*=====================================================================*/
143 void
_DeleteQueryContainer()144 Layer::_DeleteQueryContainer()
145 {
146 // Destroy all the static stuff when called by the last derived class
147 delete Layer::pctrQ;
148
149 delete Layer::pbtnQCf;
150 delete Layer::pbtnQIf;
151 delete Layer::pbtnQGf;
152 delete Layer::pbtnQEf;
153 delete Layer::pbtnQWf;
154 delete Layer::pbtnQRf;
155
156 delete Layer::pbtnQCo;
157 delete Layer::pbtnQIo;
158 delete Layer::pbtnQGo;
159 delete Layer::pbtnQEo;
160 delete Layer::pbtnQWo;
161 delete Layer::pbtnQRo;
162 }
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189