diff options
author | Robert Bieber <robby@bieberphoto.com> | 2010-05-30 01:20:05 +0000 |
---|---|---|
committer | Robert Bieber <robby@bieberphoto.com> | 2010-05-30 01:20:05 +0000 |
commit | 9843626b6941f63b964c3352e996032247115aad (patch) | |
tree | 157a0a54d14c403e859fe44c76ecb1fdb6f98bfb /utils | |
parent | cc07d688668d6e8ec3c6bb66fe2e36462ef6c8b7 (diff) | |
download | rockbox-9843626b6941f63b964c3352e996032247115aad.tar.gz rockbox-9843626b6941f63b964c3352e996032247115aad.zip |
Themeditor: Got the ParseTreeNode class in good shape, preparing to start on ParseTreeModel
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26400 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'utils')
-rw-r--r-- | utils/themeeditor/parsetreemodel.cpp | 65 | ||||
-rw-r--r-- | utils/themeeditor/parsetreemodel.h | 4 | ||||
-rw-r--r-- | utils/themeeditor/parsetreenode.cpp | 160 | ||||
-rw-r--r-- | utils/themeeditor/parsetreenode.h | 3 |
4 files changed, 170 insertions, 62 deletions
diff --git a/utils/themeeditor/parsetreemodel.cpp b/utils/themeeditor/parsetreemodel.cpp index c99f166c41..4c46320bb3 100644 --- a/utils/themeeditor/parsetreemodel.cpp +++ b/utils/themeeditor/parsetreemodel.cpp | |||
@@ -23,85 +23,48 @@ | |||
23 | #include "parsetreemodel.h" | 23 | #include "parsetreemodel.h" |
24 | #include <QObject> | 24 | #include <QObject> |
25 | 25 | ||
26 | ParseTreeModel::ParseTreeModel(char* wps, QObject* parent): | 26 | ParseTreeModel::ParseTreeModel(char* document, QObject* parent): |
27 | QAbstractItemModel(parent) | 27 | QAbstractItemModel(parent) |
28 | { | 28 | { |
29 | this->tree = skin_parse(wps); | 29 | this->tree = skin_parse(document); |
30 | this->root = new ParseTreeNode(tree, 0); | 30 | this->root = new ParseTreeNode(tree); |
31 | } | 31 | } |
32 | 32 | ||
33 | 33 | ||
34 | ParseTreeModel::~ParseTreeModel() | 34 | ParseTreeModel::~ParseTreeModel() |
35 | { | 35 | { |
36 | delete root; | 36 | if(root) |
37 | delete root; | ||
38 | if(tree) | ||
39 | skin_free_tree(tree); | ||
37 | } | 40 | } |
38 | 41 | ||
39 | QString genCode() | 42 | QString ParseTreeModel::genCode() |
40 | { | 43 | { |
41 | return QString(); | 44 | return root->genCode(); |
42 | } | 45 | } |
43 | 46 | ||
44 | /* | ||
45 | QModelIndex ParseTreeModel::index(int row, int column, | 47 | QModelIndex ParseTreeModel::index(int row, int column, |
46 | const QModelIndex& parent) const | 48 | const QModelIndex& parent) const |
47 | { | 49 | { |
48 | if(!hasIndex(row, column, parent)) | 50 | return QModelIndex(); |
49 | return QModelIndex(); | ||
50 | |||
51 | ParseTreeNode* parentLookup; | ||
52 | |||
53 | if(!parent.isValid()) | ||
54 | parentLookup = root; | ||
55 | else | ||
56 | parentLookup = static_cast<ParseTreeNode*>(parent.internalPointer()); | ||
57 | |||
58 | ParseTreeNode* childLookup = parentLookup->child(row); | ||
59 | if(childLookup) | ||
60 | return createIndex(row, column, childLookup); | ||
61 | else | ||
62 | return QModelIndex(); | ||
63 | } | 51 | } |
64 | 52 | ||
65 | QModelIndex ParseTreeModel::parent(const QModelIndex &child) const | 53 | QModelIndex ParseTreeModel::parent(const QModelIndex &child) const |
66 | { | 54 | { |
67 | if(!child.isValid()) | 55 | return QModelIndex(); |
68 | return QModelIndex(); | ||
69 | |||
70 | ParseTreeNode* childLookup = static_cast<ParseTreeNode*> | ||
71 | (child.internalPointer()); | ||
72 | ParseTreeNode* parentLookup = childLookup->parent(); | ||
73 | |||
74 | if(parentLookup == root) | ||
75 | return QModelIndex(); | ||
76 | |||
77 | return createIndex(parentLookup->row(), 0, parentLookup); | ||
78 | } | 56 | } |
79 | 57 | ||
80 | int ParseTreeModel::rowCount(const QModelIndex &parent) const | 58 | int ParseTreeModel::rowCount(const QModelIndex &parent) const |
81 | { | 59 | { |
82 | ParseTreeNode* parentLookup; | 60 | return 0; |
83 | if(parent.column() > 0) | ||
84 | return 0; | ||
85 | |||
86 | if(!parent.isValid()) | ||
87 | parentLookup = root; | ||
88 | else | ||
89 | parentLookup = static_cast<ParseTreeNode*>(parent.internalPointer()); | ||
90 | |||
91 | return parentLookup->childCount(); | ||
92 | } | 61 | } |
93 | 62 | ||
94 | int ParseTreeModel::columnCount(const QModelIndex &parent) const | 63 | int ParseTreeModel::columnCount(const QModelIndex &parent) const |
95 | { | 64 | { |
96 | return 2; | 65 | return 0; |
97 | } | 66 | } |
98 | |||
99 | QVariant ParseTreeModel::data(const QModelIndex &index, int role) const | 67 | QVariant ParseTreeModel::data(const QModelIndex &index, int role) const |
100 | { | 68 | { |
101 | if(!index.isValid() || role != Qt::DisplayRole) | 69 | return QVariant(); |
102 | return QVariant(); | ||
103 | |||
104 | ParseTreeNode* item = static_cast<ParseTreeNode*>(index.internalPointer()); | ||
105 | return item->data(index.column()); | ||
106 | } | 70 | } |
107 | */ | ||
diff --git a/utils/themeeditor/parsetreemodel.h b/utils/themeeditor/parsetreemodel.h index 64365ed038..4abf623672 100644 --- a/utils/themeeditor/parsetreemodel.h +++ b/utils/themeeditor/parsetreemodel.h | |||
@@ -40,18 +40,16 @@ class ParseTreeModel : public QAbstractItemModel | |||
40 | 40 | ||
41 | public: | 41 | public: |
42 | /* Initializes a tree with a WPS document in a string */ | 42 | /* Initializes a tree with a WPS document in a string */ |
43 | ParseTreeModel(char* wps, QObject* parent = 0); | 43 | ParseTreeModel(char* document, QObject* parent = 0); |
44 | virtual ~ParseTreeModel(); | 44 | virtual ~ParseTreeModel(); |
45 | 45 | ||
46 | QString genCode(); | 46 | QString genCode(); |
47 | 47 | ||
48 | /* | ||
49 | QModelIndex index(int row, int column, const QModelIndex& parent) const; | 48 | QModelIndex index(int row, int column, const QModelIndex& parent) const; |
50 | QModelIndex parent(const QModelIndex &child) const; | 49 | QModelIndex parent(const QModelIndex &child) const; |
51 | int rowCount(const QModelIndex &parent) const; | 50 | int rowCount(const QModelIndex &parent) const; |
52 | int columnCount(const QModelIndex &parent) const; | 51 | int columnCount(const QModelIndex &parent) const; |
53 | QVariant data(const QModelIndex &index, int role) const; | 52 | QVariant data(const QModelIndex &index, int role) const; |
54 | */ | ||
55 | 53 | ||
56 | private: | 54 | private: |
57 | ParseTreeNode* root; | 55 | ParseTreeNode* root; |
diff --git a/utils/themeeditor/parsetreenode.cpp b/utils/themeeditor/parsetreenode.cpp index ccfac615be..60a18b8dbc 100644 --- a/utils/themeeditor/parsetreenode.cpp +++ b/utils/themeeditor/parsetreenode.cpp | |||
@@ -181,6 +181,10 @@ QString ParseTreeNode::genCode() const | |||
181 | buffer.append(DEFAULTSYM); | 181 | buffer.append(DEFAULTSYM); |
182 | break; | 182 | break; |
183 | 183 | ||
184 | case skin_tag_parameter::CODE: | ||
185 | buffer.append(QObject::tr("This doesn't belong here")); | ||
186 | break; | ||
187 | |||
184 | } | 188 | } |
185 | } | 189 | } |
186 | else | 190 | else |
@@ -191,10 +195,152 @@ QString ParseTreeNode::genCode() const | |||
191 | 195 | ||
192 | return buffer; | 196 | return buffer; |
193 | } | 197 | } |
194 | /* | 198 | |
195 | ParseTreeNode* child(int row); | 199 | ParseTreeNode* ParseTreeNode::child(int row) |
196 | int numChildren() const; | 200 | { |
197 | QVariant data(int column) const; | 201 | if(row < 0 || row >= children.count()) |
198 | int getRow() const; | 202 | return 0; |
199 | ParseTreeNode* getParent(); | 203 | |
200 | */ | 204 | return children[row]; |
205 | } | ||
206 | |||
207 | int ParseTreeNode::numChildren() const | ||
208 | { | ||
209 | return children.count(); | ||
210 | } | ||
211 | |||
212 | |||
213 | QVariant ParseTreeNode::data(int column) const | ||
214 | { | ||
215 | switch(column) | ||
216 | { | ||
217 | /* Column 0 is the element type */ | ||
218 | case 0: | ||
219 | if(element) | ||
220 | { | ||
221 | switch(element->type) | ||
222 | { | ||
223 | case LINE: | ||
224 | return QObject::tr("Logical Line"); | ||
225 | |||
226 | case SUBLINES: | ||
227 | return QObject::tr("Alternator"); | ||
228 | |||
229 | case COMMENT: | ||
230 | return QObject::tr("Comment"); | ||
231 | |||
232 | case CONDITIONAL: | ||
233 | return QObject::tr("Conditional Tag"); | ||
234 | |||
235 | case TAG: | ||
236 | return QObject::tr("Tag"); | ||
237 | |||
238 | case NEWLINE: | ||
239 | return QObject::tr("Newline"); | ||
240 | |||
241 | case TEXT: | ||
242 | return QObject::tr("Plaintext"); | ||
243 | } | ||
244 | } | ||
245 | else if(param) | ||
246 | { | ||
247 | switch(param->type) | ||
248 | { | ||
249 | case skin_tag_parameter::STRING: | ||
250 | return QObject::tr("String"); | ||
251 | |||
252 | case skin_tag_parameter::NUMERIC: | ||
253 | return QObject::tr("Number"); | ||
254 | |||
255 | case skin_tag_parameter::DEFAULT: | ||
256 | return QObject::tr("Default Argument"); | ||
257 | |||
258 | case skin_tag_parameter::CODE: | ||
259 | return QObject::tr("This doesn't belong here"); | ||
260 | } | ||
261 | } | ||
262 | else | ||
263 | { | ||
264 | return QObject::tr("Root"); | ||
265 | } | ||
266 | |||
267 | break; | ||
268 | |||
269 | /* Column 1 is the value */ | ||
270 | case 1: | ||
271 | if(element) | ||
272 | { | ||
273 | switch(element->type) | ||
274 | { | ||
275 | case LINE: | ||
276 | return QString(); | ||
277 | |||
278 | case SUBLINES: | ||
279 | return QString(); | ||
280 | |||
281 | case NEWLINE: | ||
282 | return QObject::tr("\\n"); | ||
283 | |||
284 | case TEXT: | ||
285 | case COMMENT: | ||
286 | return QString(element->text); | ||
287 | |||
288 | case CONDITIONAL: | ||
289 | case TAG: | ||
290 | return QString(element->name); | ||
291 | } | ||
292 | } | ||
293 | else if(param) | ||
294 | { | ||
295 | switch(param->type) | ||
296 | { | ||
297 | case skin_tag_parameter::DEFAULT: | ||
298 | return QObject::tr("-"); | ||
299 | |||
300 | case skin_tag_parameter::STRING: | ||
301 | return QString(param->data.text); | ||
302 | |||
303 | case skin_tag_parameter::NUMERIC: | ||
304 | return QString::number(param->data.numeric, 10); | ||
305 | |||
306 | case skin_tag_parameter::CODE: | ||
307 | return QObject::tr("Seriously, something's wrong here"); | ||
308 | } | ||
309 | } | ||
310 | else | ||
311 | { | ||
312 | return QString(); | ||
313 | } | ||
314 | break; | ||
315 | |||
316 | /* Column 2 is the line number */ | ||
317 | case 2: | ||
318 | if(element) | ||
319 | return QString::number(element->line, 10); | ||
320 | else | ||
321 | return QString(); | ||
322 | break; | ||
323 | } | ||
324 | |||
325 | return QVariant(); | ||
326 | } | ||
327 | |||
328 | |||
329 | int ParseTreeNode::getRow() const | ||
330 | { | ||
331 | if(!parent) | ||
332 | return -1; | ||
333 | |||
334 | return parent->children.indexOf(const_cast<ParseTreeNode*>(this)); | ||
335 | } | ||
336 | |||
337 | ParseTreeNode* ParseTreeNode::getParent() const | ||
338 | { | ||
339 | return parent; | ||
340 | } | ||
341 | |||
342 | ParseTreeNode::~ParseTreeNode() | ||
343 | { | ||
344 | for(int i = 0; i < children.count(); i++) | ||
345 | delete children[i]; | ||
346 | } | ||
diff --git a/utils/themeeditor/parsetreenode.h b/utils/themeeditor/parsetreenode.h index 4d8c4ebc14..822924ace2 100644 --- a/utils/themeeditor/parsetreenode.h +++ b/utils/themeeditor/parsetreenode.h | |||
@@ -37,6 +37,7 @@ public: | |||
37 | ParseTreeNode(struct skin_element* data); | 37 | ParseTreeNode(struct skin_element* data); |
38 | ParseTreeNode(struct skin_element* data, ParseTreeNode* parent); | 38 | ParseTreeNode(struct skin_element* data, ParseTreeNode* parent); |
39 | ParseTreeNode(struct skin_tag_parameter* data, ParseTreeNode* parent); | 39 | ParseTreeNode(struct skin_tag_parameter* data, ParseTreeNode* parent); |
40 | virtual ~ParseTreeNode(); | ||
40 | 41 | ||
41 | QString genCode() const; | 42 | QString genCode() const; |
42 | 43 | ||
@@ -44,7 +45,7 @@ public: | |||
44 | int numChildren() const; | 45 | int numChildren() const; |
45 | QVariant data(int column) const; | 46 | QVariant data(int column) const; |
46 | int getRow() const; | 47 | int getRow() const; |
47 | ParseTreeNode* getParent(); | 48 | ParseTreeNode* getParent() const; |
48 | 49 | ||
49 | private: | 50 | private: |
50 | ParseTreeNode* parent; | 51 | ParseTreeNode* parent; |