Subversion Repositories tpanel

Rev

Rev 66 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 66 Rev 76
Line 26... Line 26...
26
 
26
 
27
#include "tresources.h"
27
#include "tresources.h"
28
#include "tpagemanager.h"
28
#include "tpagemanager.h"
29
#include "tpage.h"
29
#include "tpage.h"
30
#include "tdrawimage.h"
30
#include "tdrawimage.h"
-
 
31
#include "texpat++.h"
31
 
32
 
32
using std::string;
33
using std::string;
33
using std::vector;
34
using std::vector;
34
using namespace Button;
35
using namespace Button;
-
 
36
using namespace Expat;
35
 
37
 
36
extern TPageManager *gPageManager;
38
extern TPageManager *gPageManager;
37
 
39
 
38
TPage::TPage(const string& name)
40
TPage::TPage(const string& name)
39
{
41
{
Line 106... Line 108...
106
    makeFileName(TConfig::getProjectPath(), nm);
108
    makeFileName(TConfig::getProjectPath(), nm);
107
 
109
 
108
    if (isValidFile())
110
    if (isValidFile())
109
        mPath = getFileName();
111
        mPath = getFileName();
110
 
112
 
111
    TReadXML reader(mPath);
113
    TExpat xml(mPath);
-
 
114
    xml.setEncoding(ENC_CP1250);
112
 
115
 
113
    if (TError::isError())
116
    if (!xml.parse())
114
        return;
117
        return;
115
 
118
 
-
 
119
    int depth = 0;
-
 
120
    size_t index = 0;
-
 
121
    size_t oldIndex = 0;
116
    reader.findElement("page", "type");
122
    vector<ATTRIBUTE_t> attrs;
117
 
123
 
118
    if (!reader.success())
124
    if ((index = xml.getElementIndex("page", &depth)) == TExpat::npos)
119
    {
125
    {
120
        MSG_ERROR("Element \"page\" with attribute \"type\" was not found!");
126
        MSG_ERROR("Element \"page\" with attribute \"type\" was not found!");
121
        TError::setError();
127
        TError::setError();
122
        return;
128
        return;
123
    }
129
    }
124
 
130
 
-
 
131
    attrs = xml.getAttributes();
125
    string type = reader.getAttribute("type");
132
    string type = xml.getAttribute("type", attrs);
126
 
133
 
127
    if (type.compare("page") != 0)
134
    if (type.compare("page") != 0)
128
    {
135
    {
129
        MSG_ERROR("Invalid page type \"" << type << "\"!");
136
        MSG_ERROR("Invalid page type \"" << type << "\"!");
130
        TError::setError();
137
        TError::setError();
131
        return;
138
        return;
132
    }
139
    }
133
 
140
 
-
 
141
    depth++;
134
    mxml_node_t *node = reader.getFirstChild();
142
    string ename, content;
135
 
143
 
136
    while (node)
144
    while ((index = xml.getNextElementFromIndex(index, &ename, &content, &attrs)) != TExpat::npos)
137
    {
145
    {
138
        string e = reader.getElementName(node);
146
        string e = ename;
139
 
147
 
140
        if (e.compare("pageID") == 0)
148
        if (e.compare("pageID") == 0)
141
            pageID = reader.getIntFromNode(node);
149
            pageID = xml.convertElementToInt(content);
142
        else if (e.compare("name") == 0)
150
        else if (e.compare("name") == 0)
143
            name = reader.getTextFromNode(node);
151
            name = content;
144
        else if (e.compare("width") == 0)
152
        else if (e.compare("width") == 0)
145
            width = reader.getIntFromNode(node);
153
            width = xml.convertElementToInt(content);
146
        else if (e.compare("height") == 0)
154
        else if (e.compare("height") == 0)
147
            height = reader.getIntFromNode(node);
155
            height = xml.convertElementToInt(content);
148
        else if (e.compare("button") == 0)
156
        else if (e.compare("button") == 0)
149
        {
157
        {
150
            TButton *button = new TButton();
158
            TButton *button = new TButton();
151
            button->setPalette(mPalette);
159
            button->setPalette(mPalette);
152
            button->setFonts(mFonts);
160
            button->setFonts(mFonts);
153
            button->registerCallback(_displayButton);
161
            button->registerCallback(_displayButton);
154
            button->regCallPlayVideo(_playVideo);
162
            button->regCallPlayVideo(_playVideo);
155
            button->initialize(&reader, node);
163
            index = button->initialize(&xml, index);
156
            button->setParentSize(width, height);
164
            button->setParentSize(width, height);
157
 
165
 
158
            if (TError::isError())
166
            if (TError::isError())
159
            {
167
            {
160
                MSG_WARNING("Button \"" << button->getButtonName() << "\" deleted because of an error!");
168
                MSG_WARNING("Button \"" << button->getButtonName() << "\" deleted because of an error!");
Line 163... Line 171...
163
            }
171
            }
164
 
172
 
165
            button->setHandle(((pageID << 16) & 0xffff0000) | button->getButtonIndex());
173
            button->setHandle(((pageID << 16) & 0xffff0000) | button->getButtonIndex());
166
            button->createButtons();
174
            button->createButtons();
167
            addButton(button);
175
            addButton(button);
-
 
176
            index++;        // Jump over the end tag of the button.
168
        }
177
        }
169
        else if (e.compare("sr") == 0)
178
        else if (e.compare("sr") == 0)
170
        {
179
        {
171
            SR_T bsr;
180
            SR_T bsr;
172
            bsr.number = atoi(reader.getAttributeFromNode(node, "number").c_str());
181
            bsr.number = xml.getAttributeInt("number", attrs);
173
            mxml_node_t *n = reader.getFirstChild(node);
182
            index++;
174
 
183
 
175
            while (n)
184
            while ((index = xml.getNextElementFromIndex(index, &ename, &content, &attrs)) != TExpat::npos)
176
            {
185
            {
177
                string ename = reader.getElementName(n);
-
 
178
 
-
 
179
                if (ename.compare("bs") == 0)
186
                if (ename.compare("bs") == 0)
180
                    bsr.bs = reader.getTextFromNode(n);
187
                    bsr.bs = content;
181
                else if (ename.compare("cb") == 0)
188
                else if (ename.compare("cb") == 0)
182
                    bsr.cb = reader.getTextFromNode(n);
189
                    bsr.cb = content;
183
                else if (ename.compare("cf") == 0)
190
                else if (ename.compare("cf") == 0)
184
                    bsr.cf = reader.getTextFromNode(n);
191
                    bsr.cf = content;
185
                else if (ename.compare("ct") == 0)
192
                else if (ename.compare("ct") == 0)
186
                    bsr.ct = reader.getTextFromNode(n);
193
                    bsr.ct = content;
187
                else if (ename.compare("ec") == 0)
194
                else if (ename.compare("ec") == 0)
188
                    bsr.ec = reader.getTextFromNode(n);
195
                    bsr.ec = content;
189
                else if (ename.compare("bm") == 0)
196
                else if (ename.compare("bm") == 0)
190
                    bsr.bm = reader.getTextFromNode(n);
197
                    bsr.bm = content;
191
                else if (ename.compare("mi") == 0)
198
                else if (ename.compare("mi") == 0)
192
                    bsr.mi = reader.getTextFromNode(n);
199
                    bsr.mi = content;
193
                else if (ename.compare("fi") == 0)
200
                else if (ename.compare("fi") == 0)
194
                    bsr.fi = reader.getIntFromNode(n);
201
                    bsr.fi = xml.convertElementToInt(content);
195
                else if (ename.compare("te") == 0)
202
                else if (ename.compare("te") == 0)
196
                    bsr.te = reader.getTextFromNode(n);
203
                    bsr.te = content;
197
                else if (ename.compare("tx") == 0)
204
                else if (ename.compare("tx") == 0)
198
                    bsr.tx = reader.getIntFromNode(n);
205
                    bsr.tx = xml.convertElementToInt(content);
199
                else if (ename.compare("ty") == 0)
206
                else if (ename.compare("ty") == 0)
200
                    bsr.ty = reader.getIntFromNode(n);
207
                    bsr.ty = xml.convertElementToInt(content);
201
                else if (ename.compare("et") == 0)
208
                else if (ename.compare("et") == 0)
202
                    bsr.et = reader.getIntFromNode(n);
209
                    bsr.et = xml.convertElementToInt(content);
203
                else if (ename.compare("ww") == 0)
210
                else if (ename.compare("ww") == 0)
204
                    bsr.ww = reader.getIntFromNode(n);
211
                    bsr.ww = xml.convertElementToInt(content);
205
                else if (ename.compare("jt") == 0)
212
                else if (ename.compare("jt") == 0)
206
                    bsr.jt = (Button::TEXT_ORIENTATION)reader.getIntFromNode(n);
213
                    bsr.jt = (Button::TEXT_ORIENTATION)xml.convertElementToInt(content);
207
                else if (ename.compare("jb") == 0)
214
                else if (ename.compare("jb") == 0)
208
                    bsr.jb = (Button::TEXT_ORIENTATION)reader.getIntFromNode(n);
215
                    bsr.jb = (Button::TEXT_ORIENTATION)xml.convertElementToInt(content);
209
 
-
 
210
 
216
 
211
                n = reader.getNextChild(n);
217
                oldIndex = index;
212
            }
218
            }
213
 
219
 
214
            sr.push_back(bsr);
220
            sr.push_back(bsr);
-
 
221
 
-
 
222
            if (index == TExpat::npos)
-
 
223
                index = oldIndex + 1;
215
        }
224
        }
-
 
225
    }
216
 
226
 
-
 
227
    if (TStreamError::checkFilter(HLOG_DEBUG))
-
 
228
    {
-
 
229
        MSG_DEBUG("PageID: " << pageID);
-
 
230
        MSG_DEBUG("Name  : " << name);
-
 
231
        MSG_DEBUG("Width : " << width);
217
        node = reader.getNextChild();
232
        MSG_DEBUG("Height: " << height);
-
 
233
 
-
 
234
        vector<SR_T>::iterator iter;
-
 
235
        size_t pos = 1;
-
 
236
 
-
 
237
        for (iter = sr.begin(); iter != sr.end(); ++iter)
-
 
238
        {
-
 
239
            MSG_DEBUG("   " << pos << ": bs: " << iter->bs);
-
 
240
            MSG_DEBUG("   " << pos << ": cb: " << iter->cb);
-
 
241
            MSG_DEBUG("   " << pos << ": cf: " << iter->cf);
-
 
242
            MSG_DEBUG("   " << pos << ": ct: " << iter->ct);
-
 
243
            MSG_DEBUG("   " << pos << ": ec: " << iter->ec);
-
 
244
            MSG_DEBUG("   " << pos << ": bm: " << iter->bm);
-
 
245
            MSG_DEBUG("   " << pos << ": mi: " << iter->mi);
-
 
246
            MSG_DEBUG("   " << pos << ": fi: " << iter->fi);
-
 
247
            pos++;
-
 
248
        }
218
    }
249
    }
219
 
250
 
-
 
251
    if (mButtons)
220
    sortButtons();
252
        sortButtons();
221
}
253
}
222
 
254
 
223
void TPage::addProgress()
255
void TPage::addProgress()
224
{
256
{
225
    DECL_TRACER("TPage::addProgress()");
257
    DECL_TRACER("TPage::addProgress()");