diff options
-rw-r--r-- | utils/themeeditor/main.cpp | 11 | ||||
-rw-r--r-- | utils/themeeditor/parsetreemodel.cpp | 101 | ||||
-rw-r--r-- | utils/themeeditor/parsetreemodel.h | 59 | ||||
-rw-r--r-- | utils/themeeditor/parsetreenode.cpp | 56 | ||||
-rw-r--r-- | utils/themeeditor/parsetreenode.h | 35 | ||||
-rw-r--r-- | utils/themeeditor/themeeditor.pro | 8 |
6 files changed, 267 insertions, 3 deletions
diff --git a/utils/themeeditor/main.cpp b/utils/themeeditor/main.cpp index 45ea662944..b43b419143 100644 --- a/utils/themeeditor/main.cpp +++ b/utils/themeeditor/main.cpp | |||
@@ -32,9 +32,10 @@ namespace wps | |||
32 | #include <cstdio> | 32 | #include <cstdio> |
33 | 33 | ||
34 | #include <QtGui/QApplication> | 34 | #include <QtGui/QApplication> |
35 | #include <QFileSystemModel> | ||
36 | #include <QTreeView> | 35 | #include <QTreeView> |
37 | 36 | ||
37 | #include "parsetreemodel.h" | ||
38 | |||
38 | int main(int argc, char* argv[]) | 39 | int main(int argc, char* argv[]) |
39 | { | 40 | { |
40 | 41 | ||
@@ -46,6 +47,14 @@ int main(int argc, char* argv[]) | |||
46 | 47 | ||
47 | wps::skin_free_tree(test); | 48 | wps::skin_free_tree(test); |
48 | 49 | ||
50 | QApplication app(argc, argv); | ||
51 | |||
52 | QTreeView tree; | ||
53 | ParseTreeModel model(doc); | ||
54 | tree.setModel(&model); | ||
55 | tree.show(); | ||
56 | |||
57 | return app.exec(); | ||
49 | 58 | ||
50 | return 0; | 59 | return 0; |
51 | } | 60 | } |
diff --git a/utils/themeeditor/parsetreemodel.cpp b/utils/themeeditor/parsetreemodel.cpp new file mode 100644 index 0000000000..cf6af14a5e --- /dev/null +++ b/utils/themeeditor/parsetreemodel.cpp | |||
@@ -0,0 +1,101 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2010 Robert Bieber | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | |||
23 | #include "parsetreemodel.h" | ||
24 | #include <QObject> | ||
25 | |||
26 | ParseTreeModel::ParseTreeModel(char* wps, QObject* parent): | ||
27 | QAbstractItemModel(parent) | ||
28 | { | ||
29 | this->wps = skin_parse(wps); | ||
30 | skin_debug_tree(this->wps); | ||
31 | this->root = new ParseTreeNode(this->wps, 0, true); | ||
32 | } | ||
33 | |||
34 | |||
35 | ParseTreeModel::~ParseTreeModel() | ||
36 | { | ||
37 | delete root; | ||
38 | } | ||
39 | |||
40 | QModelIndex ParseTreeModel::index(int row, int column, | ||
41 | const QModelIndex& parent) const | ||
42 | { | ||
43 | if(!hasIndex(row, column, parent)) | ||
44 | return QModelIndex(); | ||
45 | |||
46 | ParseTreeNode* parentLookup; | ||
47 | |||
48 | if(!parent.isValid()) | ||
49 | parentLookup = root; | ||
50 | else | ||
51 | parentLookup = static_cast<ParseTreeNode*>(parent.internalPointer()); | ||
52 | |||
53 | ParseTreeNode* childLookup = parentLookup->child(row); | ||
54 | if(childLookup) | ||
55 | return createIndex(row, column, childLookup); | ||
56 | else | ||
57 | return QModelIndex(); | ||
58 | } | ||
59 | |||
60 | QModelIndex ParseTreeModel::parent(const QModelIndex &child) const | ||
61 | { | ||
62 | if(!child.isValid()) | ||
63 | return QModelIndex(); | ||
64 | |||
65 | ParseTreeNode* childLookup = static_cast<ParseTreeNode*> | ||
66 | (child.internalPointer()); | ||
67 | ParseTreeNode* parentLookup = childLookup->parent(); | ||
68 | |||
69 | if(parentLookup == root) | ||
70 | return QModelIndex(); | ||
71 | |||
72 | return createIndex(parentLookup->row(), 0, parentLookup); | ||
73 | } | ||
74 | |||
75 | int ParseTreeModel::rowCount(const QModelIndex &parent) const | ||
76 | { | ||
77 | ParseTreeNode* parentLookup; | ||
78 | if(parent.column() > 0) | ||
79 | return 0; | ||
80 | |||
81 | if(!parent.isValid()) | ||
82 | parentLookup = root; | ||
83 | else | ||
84 | parentLookup = static_cast<ParseTreeNode*>(parent.internalPointer()); | ||
85 | |||
86 | return parentLookup->childCount(); | ||
87 | } | ||
88 | |||
89 | int ParseTreeModel::columnCount(const QModelIndex &parent) const | ||
90 | { | ||
91 | return 2; | ||
92 | } | ||
93 | |||
94 | QVariant ParseTreeModel::data(const QModelIndex &index, int role) const | ||
95 | { | ||
96 | if(!index.isValid() || role != Qt::DisplayRole) | ||
97 | return QVariant(); | ||
98 | |||
99 | ParseTreeNode* item = static_cast<ParseTreeNode*>(index.internalPointer()); | ||
100 | return item->data(index.column()); | ||
101 | } | ||
diff --git a/utils/themeeditor/parsetreemodel.h b/utils/themeeditor/parsetreemodel.h new file mode 100644 index 0000000000..78484eb5f4 --- /dev/null +++ b/utils/themeeditor/parsetreemodel.h | |||
@@ -0,0 +1,59 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2010 Robert Bieber | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | extern "C" | ||
23 | { | ||
24 | #include "skin_parser.h" | ||
25 | #include "skin_debug.h" | ||
26 | } | ||
27 | |||
28 | #ifndef PARSETREEMODEL_H | ||
29 | #define PARSETREEMODEL_H | ||
30 | |||
31 | #include <QAbstractItemModel> | ||
32 | #include <QList> | ||
33 | |||
34 | #include "parsetreenode.h" | ||
35 | |||
36 | class ParseTreeModel : public QAbstractItemModel | ||
37 | { | ||
38 | |||
39 | Q_OBJECT | ||
40 | |||
41 | public: | ||
42 | /* Initializes a tree with a WPS document in a string */ | ||
43 | ParseTreeModel(char* wps, QObject* parent = 0); | ||
44 | virtual ~ParseTreeModel(); | ||
45 | |||
46 | QModelIndex index(int row, int column, const QModelIndex& parent) const; | ||
47 | QModelIndex parent(const QModelIndex &child) const; | ||
48 | int rowCount(const QModelIndex &parent) const; | ||
49 | int columnCount(const QModelIndex &parent) const; | ||
50 | QVariant data(const QModelIndex &index, int role) const; | ||
51 | |||
52 | private: | ||
53 | ParseTreeNode* root; | ||
54 | struct skin_element* wps; | ||
55 | }; | ||
56 | |||
57 | |||
58 | |||
59 | #endif // PARSETREEMODEL_H | ||
diff --git a/utils/themeeditor/parsetreenode.cpp b/utils/themeeditor/parsetreenode.cpp new file mode 100644 index 0000000000..97cb559906 --- /dev/null +++ b/utils/themeeditor/parsetreenode.cpp | |||
@@ -0,0 +1,56 @@ | |||
1 | #include "parsetreenode.h" | ||
2 | |||
3 | ParseTreeNode::ParseTreeNode(struct skin_element* data, ParseTreeNode* parent, | ||
4 | bool stop): | ||
5 | parentLink(parent), element(data) | ||
6 | { | ||
7 | |||
8 | if(stop) | ||
9 | return; | ||
10 | for(int i = 0; i < 5; i++) | ||
11 | appendChild(new ParseTreeNode(data, this, true)); | ||
12 | } | ||
13 | |||
14 | ParseTreeNode::~ParseTreeNode() | ||
15 | { | ||
16 | qDeleteAll(children); | ||
17 | } | ||
18 | |||
19 | void ParseTreeNode::appendChild(ParseTreeNode* child) | ||
20 | { | ||
21 | children.append(child); | ||
22 | } | ||
23 | |||
24 | ParseTreeNode* ParseTreeNode::child(int row) | ||
25 | { | ||
26 | return children[row]; | ||
27 | } | ||
28 | |||
29 | int ParseTreeNode::childCount() const | ||
30 | { | ||
31 | return children.count(); | ||
32 | } | ||
33 | |||
34 | int ParseTreeNode::columnCount() const | ||
35 | { | ||
36 | return 2; | ||
37 | } | ||
38 | |||
39 | QVariant ParseTreeNode::data(int column) const | ||
40 | { | ||
41 | if(column == 0) | ||
42 | return element->type; | ||
43 | else | ||
44 | return element->line; | ||
45 | } | ||
46 | int ParseTreeNode::row() const | ||
47 | { | ||
48 | if(parentLink) | ||
49 | return parentLink->children.indexOf(const_cast<ParseTreeNode*>(this)); | ||
50 | return 0; | ||
51 | } | ||
52 | |||
53 | ParseTreeNode* ParseTreeNode::parent() | ||
54 | { | ||
55 | return parentLink; | ||
56 | } | ||
diff --git a/utils/themeeditor/parsetreenode.h b/utils/themeeditor/parsetreenode.h new file mode 100644 index 0000000000..bc091b9aa4 --- /dev/null +++ b/utils/themeeditor/parsetreenode.h | |||
@@ -0,0 +1,35 @@ | |||
1 | #ifndef PARSETREENODE_H | ||
2 | #define PARSETREENODE_H | ||
3 | |||
4 | extern "C" | ||
5 | { | ||
6 | #include "skin_parser.h" | ||
7 | } | ||
8 | |||
9 | #include <QString> | ||
10 | #include <QVariant> | ||
11 | #include <QList> | ||
12 | |||
13 | class ParseTreeNode | ||
14 | { | ||
15 | public: | ||
16 | ParseTreeNode(struct skin_element* data, ParseTreeNode* parent, bool stop = false); | ||
17 | virtual ~ParseTreeNode(); | ||
18 | |||
19 | void appendChild(ParseTreeNode* child); | ||
20 | |||
21 | ParseTreeNode* child(int row); | ||
22 | int childCount() const; | ||
23 | int columnCount() const; | ||
24 | QVariant data(int column) const; | ||
25 | int row() const; | ||
26 | ParseTreeNode* parent(); | ||
27 | |||
28 | private: | ||
29 | ParseTreeNode* parentLink; | ||
30 | QList<ParseTreeNode*> children; | ||
31 | struct skin_element* element; | ||
32 | |||
33 | }; | ||
34 | |||
35 | #endif // PARSETREENODE_H | ||
diff --git a/utils/themeeditor/themeeditor.pro b/utils/themeeditor/themeeditor.pro index ad6b41858e..b1c7688130 100644 --- a/utils/themeeditor/themeeditor.pro +++ b/utils/themeeditor/themeeditor.pro | |||
@@ -2,10 +2,14 @@ HEADERS += tag_table.h \ | |||
2 | symbols.h \ | 2 | symbols.h \ |
3 | skin_parser.h \ | 3 | skin_parser.h \ |
4 | skin_scan.h \ | 4 | skin_scan.h \ |
5 | skin_debug.h | 5 | skin_debug.h \ |
6 | parsetreemodel.h \ | ||
7 | parsetreenode.h | ||
6 | SOURCES += tag_table.c \ | 8 | SOURCES += tag_table.c \ |
7 | skin_parser.c \ | 9 | skin_parser.c \ |
8 | skin_scan.c \ | 10 | skin_scan.c \ |
9 | skin_debug.c \ | 11 | skin_debug.c \ |
10 | main.cpp | 12 | main.cpp \ |
13 | parsetreemodel.cpp \ | ||
14 | parsetreenode.cpp | ||
11 | OTHER_FILES += README | 15 | OTHER_FILES += README |