root / branches / tbeta / ccv_ofx_0061 / Windows / addons / ofxNCore / src / Controls / ofxGui.cpp @ 212

View | Annotate | Download (5.7 KB)

1 139 ss
/*
2 139 ss
 *  ofxGui.cpp
3 139 ss
 *  openFrameworks
4 139 ss
 *
5 139 ss
 *  Created by Stefan Kirch on 18.06.08.
6 139 ss
 *  Copyright 2008 alphakanal. All rights reserved.
7 139 ss
 *
8 139 ss
 */
9 139 ss
10 139 ss
//        ----------------------------------------------------------------------------------------------------
11 139 ss
12 139 ss
#include "ofxGui.h"
13 139 ss
14 139 ss
//        ----------------------------------------------------------------------------------------------------
15 139 ss
16 139 ss
ofxGui* ofxGui::Instance(ofxGuiListener* listener)
17 139 ss
{
18 139 ss
        static ofxGui gui(listener);
19 139 ss
        return &gui;
20 139 ss
}
21 139 ss
22 139 ss
//        ----------------------------------------------------------------------------------------------------
23 139 ss
24 139 ss
ofxGui::ofxGui(ofxGuiListener* listener)
25 139 ss
{
26 139 ss
        mIsActive                        = false;
27 139 ss
        mDoUpdate                        = false;
28 139 ss
        mXmlDone                        = true;
29 139 ss
        mGlobals                        = ofxGuiGlobals::Instance();
30 139 ss
        mGlobals->mListener        = listener;
31 139 ss
}
32 139 ss
33 139 ss
//        ----------------------------------------------------------------------------------------------------
34 139 ss
35 139 ss
void ofxGui::update(int parameterId, int type, void* data, int length)
36 139 ss
{
37 139 ss
        if(mIsActive || mDoUpdate)
38 139 ss
        {
39 139 ss
                ofxGuiObject*        tmpObj;
40 139 ss
                bool                        handled;
41 139 ss
42 139 ss
                for(int i = 0; i < mObjects.size(); i++)
43 139 ss
                {
44 139 ss
                        tmpObj        = (ofxGuiObject*)mObjects.at(i);
45 139 ss
                        handled        = tmpObj->update(parameterId, type, data, length);
46 139 ss
47 139 ss
                        if(handled)
48 139 ss
                                break;
49 139 ss
                }
50 139 ss
        }
51 139 ss
}
52 139 ss
53 139 ss
//        ----------------------------------------------------------------------------------------------------
54 139 ss
55 139 ss
void ofxGui::draw()
56 139 ss
{
57 139 ss
        if(mIsActive)
58 139 ss
        {
59 139 ss
                ofEnableAlphaBlending();
60 139 ss
61 139 ss
                ofxGuiObject* tmpObj;
62 139 ss
63 139 ss
                for(int i = 0; i < mObjects.size(); i++)
64 139 ss
                {
65 139 ss
                        tmpObj = (ofxGuiObject*)mObjects.at(i);
66 139 ss
                        tmpObj->draw();
67 139 ss
                }
68 139 ss
69 139 ss
                ofDisableAlphaBlending();
70 139 ss
        }
71 139 ss
}
72 139 ss
73 139 ss
//        ----------------------------------------------------------------------------------------------------
74 139 ss
75 139 ss
void ofxGui::activate(bool activate)
76 139 ss
{
77 139 ss
        mIsActive = activate;
78 139 ss
}
79 139 ss
80 139 ss
//        ----------------------------------------------------------------------------------------------------
81 139 ss
82 139 ss
void ofxGui::forceUpdate(bool update)
83 139 ss
{
84 139 ss
        mDoUpdate = update;
85 139 ss
}
86 139 ss
87 139 ss
//        ----------------------------------------------------------------------------------------------------
88 139 ss
89 139 ss
void ofxGui::keyPressed(int key)
90 139 ss
{
91 139 ss
92 139 ss
}
93 139 ss
94 139 ss
//        ----------------------------------------------------------------------------------------------------
95 139 ss
96 139 ss
void ofxGui::keyReleased(int key)
97 139 ss
{
98 139 ss
99 139 ss
}
100 139 ss
101 139 ss
//        ----------------------------------------------------------------------------------------------------
102 139 ss
103 139 ss
void ofxGui::mouseDragged(int x, int y, int button)
104 139 ss
{
105 139 ss
        if(mIsActive)
106 139 ss
        {
107 139 ss
                ofxGuiObject*        tmpObj;
108 139 ss
                bool                        handled;
109 139 ss
110 139 ss
                for(int i = 0; i < mObjects.size(); i++)
111 139 ss
                {
112 139 ss
                        tmpObj        = (ofxGuiObject*)mObjects.at(i);
113 139 ss
                        handled        = tmpObj->mouseDragged(x, y, button);
114 139 ss
115 139 ss
                        if(handled)
116 139 ss
                                break;
117 139 ss
                }
118 139 ss
        }
119 139 ss
}
120 139 ss
121 139 ss
//        ----------------------------------------------------------------------------------------------------
122 139 ss
123 139 ss
void ofxGui::mousePressed(int x, int y, int button)
124 139 ss
{
125 139 ss
        if(mIsActive)
126 139 ss
        {
127 139 ss
                ofxGuiObject*        tmpObj;
128 139 ss
                bool                        handled;
129 139 ss
130 139 ss
                for(int i = 0; i < mObjects.size(); i++)
131 139 ss
                {
132 139 ss
                        tmpObj        = (ofxGuiObject*)mObjects.at(i);
133 139 ss
                        handled        = tmpObj->mousePressed(x, y, button);
134 139 ss
135 139 ss
                        if(handled)
136 139 ss
                                break;
137 139 ss
                }
138 139 ss
        }
139 139 ss
}
140 139 ss
141 139 ss
//        ----------------------------------------------------------------------------------------------------
142 139 ss
143 139 ss
void ofxGui::mouseReleased(int x, int y, int button)
144 139 ss
{
145 139 ss
        if(mIsActive)
146 139 ss
        {
147 139 ss
                ofxGuiObject* tmpObj;
148 139 ss
149 139 ss
                for(int i = 0; i < mObjects.size(); i++)
150 139 ss
                {
151 139 ss
                        tmpObj = (ofxGuiObject*)mObjects.at(i);
152 139 ss
                        tmpObj->mouseReleased(x, y, button);
153 139 ss
                }
154 139 ss
        }
155 139 ss
}
156 139 ss
157 139 ss
//        ----------------------------------------------------------------------------------------------------
158 139 ss
159 139 ss
ofxGuiPanel* ofxGui::addPanel(int id, string name, int x, int y, int border, int spacing)
160 139 ss
{
161 139 ss
        ofxGuiPanel* newPanel = new ofxGuiPanel();
162 139 ss
        newPanel->init(id, name, x, y, border, spacing);
163 139 ss
        mObjects.push_back(newPanel);
164 139 ss
165 139 ss
        return newPanel;
166 139 ss
}
167 139 ss
168 139 ss
//        ----------------------------------------------------------------------------------------------------
169 139 ss
170 139 ss
bool ofxGui::buildFromXml(string file)
171 139 ss
{
172 139 ss
        if(!mXmlDone)
173 139 ss
                return false;
174 139 ss
175 139 ss
        if(!mGlobals->mXml.loadFile(file))
176 139 ss
                return false;
177 139 ss
178 139 ss
        int numberOfTags = mGlobals->mXml.getNumTags("UI");
179 139 ss
180 139 ss
        if(numberOfTags != 1)
181 139 ss
                return false;
182 139 ss
183 139 ss
        mObjects.clear();
184 139 ss
185 139 ss
        mXmlDone                        = false;
186 139 ss
        mGlobals->mXmlfile        = file;
187 139 ss
188 139 ss
        mGlobals->mXml.pushTag("UI", 0);
189 139 ss
190 139 ss
        mIsActive        = mGlobals->mXml.getValue("ISACTIVE", 0);
191 139 ss
        mDoUpdate        = mGlobals->mXml.getValue("DOUPDATE", 0);
192 139 ss
193 139 ss
        mGlobals->buildFromXml();
194 139 ss
195 139 ss
        numberOfTags = mGlobals->mXml.getNumTags("OBJECT");
196 139 ss
197 139 ss
        if(numberOfTags > 0)
198 139 ss
        {
199 139 ss
                for(int i = 0; i < numberOfTags; i++)
200 139 ss
                {
201 139 ss
                        mGlobals->mXml.pushTag("OBJECT", i);
202 139 ss
203 139 ss
                        int                id                = mGlobals->mXml.getValue("ID", 0);
204 139 ss
                        string        type        = mGlobals->mXml.getValue("TYPE", "");
205 139 ss
                        string        name        = mGlobals->mXml.getValue("NAME", "");
206 139 ss
                        int                x                = mGlobals->mXml.getValue("LEFT", 0);
207 139 ss
                        int                y                = mGlobals->mXml.getValue("TOP", 0);
208 139 ss
                        int                border        = mGlobals->mXml.getValue("BORDER", 0);
209 139 ss
                        int                spacing        = mGlobals->mXml.getValue("SPACING", 0);
210 139 ss
211 139 ss
                        if(type == "PANEL")
212 139 ss
                        {
213 139 ss
                                ofxGuiPanel* panel = addPanel(id, name, x, y, border, spacing);
214 139 ss
                                panel->buildFromXml();
215 139 ss
                        }
216 139 ss
217 139 ss
                        mGlobals->mXml.popTag();
218 139 ss
                }
219 139 ss
        }
220 139 ss
221 139 ss
        mGlobals->mXml.popTag();
222 139 ss
223 139 ss
        mXmlDone = true;
224 139 ss
225 139 ss
        return true;
226 139 ss
}
227 139 ss
228 139 ss
//        ----------------------------------------------------------------------------------------------------
229 139 ss
230 139 ss
void ofxGui::saveToXml(string file)
231 139 ss
{
232 139 ss
        if(!mXmlDone)
233 139 ss
                return;
234 212 jimbo
235 139 ss
        mXmlDone = false;
236 139 ss
237 139 ss
        mGlobals->mXml.clear();
238 139 ss
239 139 ss
        int id = mGlobals->mXml.addTag("UI");
240 139 ss
241 139 ss
        mGlobals->mXml.setValue("UI:VERSION", OFXGUI_VERSION, id);
242 139 ss
243 139 ss
        mGlobals->mXml.setValue("UI:ISACTIVE", mIsActive, id);
244 139 ss
        mGlobals->mXml.setValue("UI:DOUPDATE", mDoUpdate, id);
245 139 ss
246 139 ss
        mGlobals->mXml.pushTag("UI", id);
247 139 ss
248 139 ss
        mGlobals->saveToXml();
249 139 ss
250 139 ss
        ofxGuiObject* tmpObj;
251 139 ss
252 139 ss
        for(int i = 0; i < mObjects.size(); i++)
253 139 ss
        {
254 139 ss
                tmpObj = (ofxGuiObject*)mObjects.at(i);
255 139 ss
                tmpObj->saveToXml();
256 139 ss
        }
257 139 ss
258 139 ss
        mGlobals->mXml.popTag();
259 139 ss
        mGlobals->mXml.saveFile(file);
260 139 ss
261 139 ss
        mXmlDone = true;
262 139 ss
}
263 139 ss
264 139 ss
//        ----------------------------------------------------------------------------------------------------