summaryrefslogtreecommitdiff
path: root/utils/themeeditor
diff options
context:
space:
mode:
Diffstat (limited to 'utils/themeeditor')
-rw-r--r--utils/themeeditor/parsetreemodel.cpp65
-rw-r--r--utils/themeeditor/parsetreemodel.h4
-rw-r--r--utils/themeeditor/parsetreenode.cpp160
-rw-r--r--utils/themeeditor/parsetreenode.h3
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
26ParseTreeModel::ParseTreeModel(char* wps, QObject* parent): 26ParseTreeModel::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
34ParseTreeModel::~ParseTreeModel() 34ParseTreeModel::~ParseTreeModel()
35{ 35{
36 delete root; 36 if(root)
37 delete root;
38 if(tree)
39 skin_free_tree(tree);
37} 40}
38 41
39QString genCode() 42QString ParseTreeModel::genCode()
40{ 43{
41 return QString(); 44 return root->genCode();
42} 45}
43 46
44/*
45QModelIndex ParseTreeModel::index(int row, int column, 47QModelIndex 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
65QModelIndex ParseTreeModel::parent(const QModelIndex &child) const 53QModelIndex 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
80int ParseTreeModel::rowCount(const QModelIndex &parent) const 58int 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
94int ParseTreeModel::columnCount(const QModelIndex &parent) const 63int ParseTreeModel::columnCount(const QModelIndex &parent) const
95{ 64{
96 return 2; 65 return 0;
97} 66}
98
99QVariant ParseTreeModel::data(const QModelIndex &index, int role) const 67QVariant 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
41public: 41public:
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
56private: 54private:
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
195ParseTreeNode* child(int row); 199ParseTreeNode* ParseTreeNode::child(int row)
196int numChildren() const; 200{
197QVariant data(int column) const; 201 if(row < 0 || row >= children.count())
198int getRow() const; 202 return 0;
199ParseTreeNode* getParent(); 203
200*/ 204 return children[row];
205}
206
207int ParseTreeNode::numChildren() const
208{
209 return children.count();
210}
211
212
213QVariant 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
329int ParseTreeNode::getRow() const
330{
331 if(!parent)
332 return -1;
333
334 return parent->children.indexOf(const_cast<ParseTreeNode*>(this));
335}
336
337ParseTreeNode* ParseTreeNode::getParent() const
338{
339 return parent;
340}
341
342ParseTreeNode::~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
49private: 50private:
50 ParseTreeNode* parent; 51 ParseTreeNode* parent;