summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorRobert Bieber <robby@bieberphoto.com>2010-06-15 06:54:58 +0000
committerRobert Bieber <robby@bieberphoto.com>2010-06-15 06:54:58 +0000
commit2e320f66f4f3c831dcfd232b33da0e6ab6dd7dd0 (patch)
treea6ef8001d797213e9dd81cd41c48f5065c33f3f0 /utils
parent1d4dc9b3b0f094a70463395138fc920e5107eabc (diff)
downloadrockbox-2e320f66f4f3c831dcfd232b33da0e6ab6dd7dd0.tar.gz
rockbox-2e320f66f4f3c831dcfd232b33da0e6ab6dd7dd0.zip
Theme Editor: Changed color to colour in preferences. Made parse tree viewer alternate line colors and auto-scroll/expand with cursor in editor window. Implemented TabContent abstract class so that more than just skin documents can be loaded in tabs. Made SkinDocument implement TabContent. Began implementing ConfigDocument for editing configuration files.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26851 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'utils')
-rw-r--r--utils/themeeditor/configdocument.cpp125
-rw-r--r--utils/themeeditor/configdocument.h54
-rw-r--r--utils/themeeditor/configdocument.ui79
-rw-r--r--utils/themeeditor/editorwindow.cpp94
-rw-r--r--utils/themeeditor/editorwindow.h16
-rw-r--r--utils/themeeditor/editorwindow.ui8
-rw-r--r--utils/themeeditor/preferencesdialog.ui6
-rw-r--r--utils/themeeditor/projectmodel.cpp10
-rw-r--r--utils/themeeditor/projectmodel.h2
-rw-r--r--utils/themeeditor/skindocument.cpp30
-rw-r--r--utils/themeeditor/skindocument.h12
-rw-r--r--utils/themeeditor/tabcontent.h35
-rw-r--r--utils/themeeditor/themeeditor.pro10
13 files changed, 435 insertions, 46 deletions
diff --git a/utils/themeeditor/configdocument.cpp b/utils/themeeditor/configdocument.cpp
new file mode 100644
index 0000000000..95daec0b60
--- /dev/null
+++ b/utils/themeeditor/configdocument.cpp
@@ -0,0 +1,125 @@
1#include "configdocument.h"
2#include "ui_configdocument.h"
3
4ConfigDocument::ConfigDocument(QMap<QString, QString>& settings, QString file,
5 QWidget *parent)
6 : TabContent(parent),
7 ui(new Ui::ConfigDocument),
8 filePath(file)
9{
10 ui->setupUi(this);
11
12 QMap<QString, QString>::iterator i;
13 for(i = settings.begin(); i != settings.end(); i++)
14 addRow(i.key(), i.value());
15
16 saved = toPlainText();
17
18 QObject::connect(ui->addKeyButton, SIGNAL(pressed()),
19 this, SLOT(addClicked()));
20}
21
22ConfigDocument::~ConfigDocument()
23{
24 delete ui;
25}
26
27void ConfigDocument::changeEvent(QEvent *e)
28{
29 QWidget::changeEvent(e);
30 switch (e->type()) {
31 case QEvent::LanguageChange:
32 ui->retranslateUi(this);
33 break;
34 default:
35 break;
36 }
37}
38
39QString ConfigDocument::title() const
40{
41 QStringList decompose = filePath.split("/");
42 return decompose.last();
43}
44
45void ConfigDocument::save()
46{
47
48}
49
50void ConfigDocument::saveAs()
51{
52
53}
54
55bool ConfigDocument::requestClose()
56{
57
58}
59
60QString ConfigDocument::toPlainText() const
61{
62 QString buffer = "";
63
64 for(int i = 0; i < keys.count(); i++)
65 {
66 buffer += keys[i]->text();
67 buffer += ":";
68 buffer += values[i]->text();
69 buffer += "\n";
70 }
71
72 return buffer;
73}
74
75void ConfigDocument::addRow(QString key, QString value)
76{
77 QHBoxLayout* layout = new QHBoxLayout();
78 QLineEdit* keyEdit = new QLineEdit(key, this);
79 QLineEdit* valueEdit = new QLineEdit(value, this);
80 QPushButton* delButton = new QPushButton(tr("-"), this);
81
82 layout->addWidget(keyEdit);
83 layout->addWidget(valueEdit);
84 layout->addWidget(delButton);
85
86 delButton->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Fixed);
87 delButton->setMaximumWidth(35);
88
89 QObject::connect(delButton, SIGNAL(clicked()),
90 this, SLOT(deleteClicked()));
91
92 ui->configBoxes->addLayout(layout);
93
94 containers.append(layout);
95 keys.append(keyEdit);
96 values.append(valueEdit);
97 deleteButtons.append(delButton);
98
99}
100
101void ConfigDocument::deleteClicked()
102{
103 QPushButton* button = dynamic_cast<QPushButton*>(sender());
104 int row = deleteButtons.indexOf(button);
105
106 deleteButtons[row]->deleteLater();
107 keys[row]->deleteLater();
108 values[row]->deleteLater();
109 containers[row]->deleteLater();
110
111 deleteButtons.removeAt(row);
112 keys.removeAt(row);
113 values.removeAt(row);
114 containers.removeAt(row);
115
116 if(saved != toPlainText())
117 emit titleChanged(title() + "*");
118 else
119 emit titleChanged(title());
120}
121
122void ConfigDocument::addClicked()
123{
124 addRow(tr("Key"), tr("Value"));
125}
diff --git a/utils/themeeditor/configdocument.h b/utils/themeeditor/configdocument.h
new file mode 100644
index 0000000000..2f4c2501a1
--- /dev/null
+++ b/utils/themeeditor/configdocument.h
@@ -0,0 +1,54 @@
1#ifndef CONFIGDOCUMENT_H
2#define CONFIGDOCUMENT_H
3
4#include <QHBoxLayout>
5#include <QLineEdit>
6#include <QPushButton>
7#include <QWidget>
8#include <QMap>
9
10#include "tabcontent.h"
11
12namespace Ui {
13 class ConfigDocument;
14}
15
16class ConfigDocument : public TabContent {
17 Q_OBJECT
18public:
19 ConfigDocument(QMap<QString, QString>& settings, QString file,
20 QWidget *parent = 0);
21 virtual ~ConfigDocument();
22
23 TabType type() const{ return TabContent::Config; }
24 QString file() const{ return filePath; }
25 QString title() const;
26
27 QString toPlainText() const;
28
29 void save();
30 void saveAs();
31
32 bool requestClose();
33
34protected:
35 void changeEvent(QEvent *e);
36
37private:
38 Ui::ConfigDocument *ui;
39 QList<QHBoxLayout*> containers;
40 QList<QLineEdit*> keys;
41 QList<QLineEdit*> values;
42 QList<QPushButton*> deleteButtons;
43
44 QString filePath;
45 QString saved;
46
47 void addRow(QString key, QString value);
48
49private slots:
50 void deleteClicked();
51 void addClicked();
52};
53
54#endif // CONFIGDOCUMENT_H
diff --git a/utils/themeeditor/configdocument.ui b/utils/themeeditor/configdocument.ui
new file mode 100644
index 0000000000..e2f9e7fb21
--- /dev/null
+++ b/utils/themeeditor/configdocument.ui
@@ -0,0 +1,79 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<ui version="4.0">
3 <class>ConfigDocument</class>
4 <widget class="QWidget" name="ConfigDocument">
5 <property name="geometry">
6 <rect>
7 <x>0</x>
8 <y>0</y>
9 <width>422</width>
10 <height>299</height>
11 </rect>
12 </property>
13 <property name="windowTitle">
14 <string>Form</string>
15 </property>
16 <layout class="QVBoxLayout" name="verticalLayout">
17 <item>
18 <widget class="QScrollArea" name="scrollArea">
19 <property name="widgetResizable">
20 <bool>true</bool>
21 </property>
22 <widget class="QWidget" name="scrollAreaWidgetContents">
23 <property name="geometry">
24 <rect>
25 <x>0</x>
26 <y>0</y>
27 <width>402</width>
28 <height>244</height>
29 </rect>
30 </property>
31 <layout class="QVBoxLayout" name="verticalLayout_3">
32 <item>
33 <layout class="QVBoxLayout" name="configBoxes"/>
34 </item>
35 </layout>
36 </widget>
37 </widget>
38 </item>
39 <item>
40 <layout class="QHBoxLayout" name="horizontalLayout">
41 <item>
42 <spacer name="horizontalSpacer">
43 <property name="orientation">
44 <enum>Qt::Horizontal</enum>
45 </property>
46 <property name="sizeHint" stdset="0">
47 <size>
48 <width>40</width>
49 <height>20</height>
50 </size>
51 </property>
52 </spacer>
53 </item>
54 <item>
55 <widget class="QPushButton" name="addKeyButton">
56 <property name="sizePolicy">
57 <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
58 <horstretch>0</horstretch>
59 <verstretch>0</verstretch>
60 </sizepolicy>
61 </property>
62 <property name="maximumSize">
63 <size>
64 <width>35</width>
65 <height>16777215</height>
66 </size>
67 </property>
68 <property name="text">
69 <string>+</string>
70 </property>
71 </widget>
72 </item>
73 </layout>
74 </item>
75 </layout>
76 </widget>
77 <resources/>
78 <connections/>
79</ui>
diff --git a/utils/themeeditor/editorwindow.cpp b/utils/themeeditor/editorwindow.cpp
index 93cf3641f0..3603b24af1 100644
--- a/utils/themeeditor/editorwindow.cpp
+++ b/utils/themeeditor/editorwindow.cpp
@@ -40,14 +40,14 @@ EditorWindow::EditorWindow(QWidget *parent) :
40 setupMenus(); 40 setupMenus();
41} 41}
42 42
43void EditorWindow::loadTabFromFile(QString fileName) 43void EditorWindow::loadTabFromSkinFile(QString fileName)
44{ 44{
45 /* Checking to see if the file is already open */ 45 /* Checking to see if the file is already open */
46 for(int i = 0; i < ui->editorTabs->count(); i++) 46 for(int i = 0; i < ui->editorTabs->count(); i++)
47 { 47 {
48 SkinDocument* current = dynamic_cast<SkinDocument*> 48 TabContent* current = dynamic_cast<TabContent*>
49 (ui->editorTabs->widget(i)); 49 (ui->editorTabs->widget(i));
50 if(current->getFile() == fileName) 50 if(current->file() == fileName)
51 { 51 {
52 ui->editorTabs->setCurrentIndex(i); 52 ui->editorTabs->setCurrentIndex(i);
53 return; 53 return;
@@ -61,6 +61,27 @@ void EditorWindow::loadTabFromFile(QString fileName)
61 61
62} 62}
63 63
64void EditorWindow::loadConfigTab(ConfigDocument* doc)
65{
66 for(int i = 0; i < ui->editorTabs->count(); i++)
67 {
68 TabContent* current = dynamic_cast<TabContent*>
69 (ui->editorTabs->widget(i));
70 if(current->file() == doc->file())
71 {
72 ui->editorTabs->setCurrentIndex(i);
73 doc->deleteLater();
74 return;
75 }
76 }
77
78 addTab(doc);
79 ui->editorTabs->setCurrentWidget(doc);
80
81 QObject::connect(doc, SIGNAL(titleChanged(QString)),
82 this, SLOT(tabTitleChanged(QString)));
83}
84
64void EditorWindow::loadSettings() 85void EditorWindow::loadSettings()
65{ 86{
66 87
@@ -153,16 +174,19 @@ void EditorWindow::setupMenus()
153 this, SLOT(openProject())); 174 this, SLOT(openProject()));
154} 175}
155 176
156void EditorWindow::addTab(SkinDocument *doc) 177void EditorWindow::addTab(TabContent *doc)
157{ 178{
158 ui->editorTabs->addTab(doc, doc->getTitle()); 179 ui->editorTabs->addTab(doc, doc->title());
159 180
160 /* Connecting to title change events */ 181 /* Connecting to title change events */
161 QObject::connect(doc, SIGNAL(titleChanged(QString)), 182 QObject::connect(doc, SIGNAL(titleChanged(QString)),
162 this, SLOT(tabTitleChanged(QString))); 183 this, SLOT(tabTitleChanged(QString)));
184 QObject::connect(doc, SIGNAL(lineChanged(int)),
185 this, SLOT(lineChanged(int)));
163 186
164 /* Connecting to settings change events */ 187 /* Connecting to settings change events */
165 doc->connectPrefs(prefs); 188 if(doc->type() == TabContent::Skin)
189 dynamic_cast<SkinDocument*>(doc)->connectPrefs(prefs);
166} 190}
167 191
168 192
@@ -175,7 +199,9 @@ void EditorWindow::newTab()
175 199
176void EditorWindow::shiftTab(int index) 200void EditorWindow::shiftTab(int index)
177{ 201{
178 if(index < 0) 202 TabContent* widget = dynamic_cast<TabContent*>
203 (ui->editorTabs->currentWidget());
204 if(index < 0 || widget->type() != TabContent::Skin)
179 { 205 {
180 ui->parseTree->setModel(0); 206 ui->parseTree->setModel(0);
181 ui->actionSave_Document->setEnabled(false); 207 ui->actionSave_Document->setEnabled(false);
@@ -187,8 +213,7 @@ void EditorWindow::shiftTab(int index)
187 else 213 else
188 { 214 {
189 /* Syncing the tree view and the status bar */ 215 /* Syncing the tree view and the status bar */
190 SkinDocument* doc = dynamic_cast<SkinDocument*> 216 SkinDocument* doc = dynamic_cast<SkinDocument*>(widget);
191 (ui->editorTabs->currentWidget());
192 ui->parseTree->setModel(doc->getModel()); 217 ui->parseTree->setModel(doc->getModel());
193 parseStatus->setText(doc->getStatus()); 218 parseStatus->setText(doc->getStatus());
194 219
@@ -197,12 +222,15 @@ void EditorWindow::shiftTab(int index)
197 ui->actionClose_Document->setEnabled(true); 222 ui->actionClose_Document->setEnabled(true);
198 ui->actionToolbarSave->setEnabled(true); 223 ui->actionToolbarSave->setEnabled(true);
199 ui->fromTree->setEnabled(true); 224 ui->fromTree->setEnabled(true);
225
226 sizeColumns();
227
200 } 228 }
201} 229}
202 230
203bool EditorWindow::closeTab(int index) 231bool EditorWindow::closeTab(int index)
204{ 232{
205 SkinDocument* widget = dynamic_cast<SkinDocument*> 233 TabContent* widget = dynamic_cast<TabContent*>
206 (ui->editorTabs->widget(index)); 234 (ui->editorTabs->widget(index));
207 if(widget->requestClose()) 235 if(widget->requestClose())
208 { 236 {
@@ -222,13 +250,13 @@ void EditorWindow::closeCurrent()
222void EditorWindow::saveCurrent() 250void EditorWindow::saveCurrent()
223{ 251{
224 if(ui->editorTabs->currentIndex() >= 0) 252 if(ui->editorTabs->currentIndex() >= 0)
225 dynamic_cast<SkinDocument*>(ui->editorTabs->currentWidget())->save(); 253 dynamic_cast<TabContent*>(ui->editorTabs->currentWidget())->save();
226} 254}
227 255
228void EditorWindow::saveCurrentAs() 256void EditorWindow::saveCurrentAs()
229{ 257{
230 if(ui->editorTabs->currentIndex() >= 0) 258 if(ui->editorTabs->currentIndex() >= 0)
231 dynamic_cast<SkinDocument*>(ui->editorTabs->currentWidget())->saveAs(); 259 dynamic_cast<TabContent*>(ui->editorTabs->currentWidget())->saveAs();
232} 260}
233 261
234void EditorWindow::openFile() 262void EditorWindow::openFile()
@@ -248,7 +276,7 @@ void EditorWindow::openFile()
248 276
249 QString current = fileNames[i]; 277 QString current = fileNames[i];
250 278
251 loadTabFromFile(current); 279 loadTabFromSkinFile(current);
252 280
253 /* And setting the new default directory */ 281 /* And setting the new default directory */
254 current.chop(current.length() - current.lastIndexOf('/') - 1); 282 current.chop(current.length() - current.lastIndexOf('/') - 1);
@@ -292,7 +320,7 @@ void EditorWindow::openProject()
292 320
293void EditorWindow::tabTitleChanged(QString title) 321void EditorWindow::tabTitleChanged(QString title)
294{ 322{
295 SkinDocument* sender = dynamic_cast<SkinDocument*>(QObject::sender()); 323 TabContent* sender = dynamic_cast<TabContent*>(QObject::sender());
296 ui->editorTabs->setTabText(ui->editorTabs->indexOf(sender), title); 324 ui->editorTabs->setTabText(ui->editorTabs->indexOf(sender), title);
297} 325}
298 326
@@ -334,6 +362,44 @@ void EditorWindow::updateCurrent()
334 (ui->editorTabs->currentWidget())->genCode(); 362 (ui->editorTabs->currentWidget())->genCode();
335} 363}
336 364
365void EditorWindow::lineChanged(int line)
366{
367 ui->parseTree->collapseAll();
368 ParseTreeModel* model = dynamic_cast<ParseTreeModel*>
369 (ui->parseTree->model());
370 expandLine(model, QModelIndex(), line);
371 sizeColumns();
372
373}
374
375void EditorWindow::expandLine(ParseTreeModel* model, QModelIndex parent,
376 int line)
377{
378 for(int i = 0; i < model->rowCount(parent); i++)
379 {
380 QModelIndex data = model->index(i, ParseTreeModel::lineColumn, parent);
381 QModelIndex recurse = model->index(i, 0, parent);
382
383 expandLine(model, recurse, line);
384
385 if(model->data(data, Qt::DisplayRole) == line)
386 {
387 ui->parseTree->expand(parent);
388 ui->parseTree->expand(data);
389 ui->parseTree->scrollTo(parent, QAbstractItemView::PositionAtTop);
390 }
391
392 }
393}
394
395void EditorWindow::sizeColumns()
396{
397 /* Setting the column widths */
398 ui->parseTree->resizeColumnToContents(ParseTreeModel::lineColumn);
399 ui->parseTree->resizeColumnToContents(ParseTreeModel::typeColumn);
400 ui->parseTree->resizeColumnToContents(ParseTreeModel::valueColumn);
401}
402
337EditorWindow::~EditorWindow() 403EditorWindow::~EditorWindow()
338{ 404{
339 delete ui; 405 delete ui;
diff --git a/utils/themeeditor/editorwindow.h b/utils/themeeditor/editorwindow.h
index 32c7d0a057..7e62caadf2 100644
--- a/utils/themeeditor/editorwindow.h
+++ b/utils/themeeditor/editorwindow.h
@@ -28,22 +28,27 @@
28#include "parsetreemodel.h" 28#include "parsetreemodel.h"
29#include "skinhighlighter.h" 29#include "skinhighlighter.h"
30#include "skindocument.h" 30#include "skindocument.h"
31#include "configdocument.h"
31#include "preferencesdialog.h" 32#include "preferencesdialog.h"
32 33
33class ProjectModel; 34class ProjectModel;
35class TabContent;
34 36
35namespace Ui { 37namespace Ui
38{
36 class EditorWindow; 39 class EditorWindow;
37} 40}
38 41
39class EditorWindow : public QMainWindow { 42class EditorWindow : public QMainWindow
43{
40 Q_OBJECT 44 Q_OBJECT
41public: 45public:
42 EditorWindow(QWidget *parent = 0); 46 EditorWindow(QWidget *parent = 0);
43 ~EditorWindow(); 47 ~EditorWindow();
44 48
45 /* A public function so external widgets can load files */ 49 /* A public function so external widgets can load files */
46 void loadTabFromFile(QString fileName); 50 void loadTabFromSkinFile(QString fileName);
51 void loadConfigTab(ConfigDocument* doc);
47 52
48protected: 53protected:
49 virtual void closeEvent(QCloseEvent* event); 54 virtual void closeEvent(QCloseEvent* event);
@@ -60,6 +65,7 @@ private slots:
60 void openProject(); 65 void openProject();
61 void tabTitleChanged(QString title); 66 void tabTitleChanged(QString title);
62 void updateCurrent(); /* Generates code in the current tab */ 67 void updateCurrent(); /* Generates code in the current tab */
68 void lineChanged(int line); /* Used for auto-expand */
63 69
64private: 70private:
65 /* Setup functions */ 71 /* Setup functions */
@@ -67,7 +73,9 @@ private:
67 void saveSettings(); 73 void saveSettings();
68 void setupUI(); 74 void setupUI();
69 void setupMenus(); 75 void setupMenus();
70 void addTab(SkinDocument* doc); 76 void addTab(TabContent* doc);
77 void expandLine(ParseTreeModel* model, QModelIndex parent, int line);
78 void sizeColumns();
71 79
72 Ui::EditorWindow *ui; 80 Ui::EditorWindow *ui;
73 PreferencesDialog* prefs; 81 PreferencesDialog* prefs;
diff --git a/utils/themeeditor/editorwindow.ui b/utils/themeeditor/editorwindow.ui
index 61b5f222a5..06c7d422bd 100644
--- a/utils/themeeditor/editorwindow.ui
+++ b/utils/themeeditor/editorwindow.ui
@@ -40,7 +40,7 @@
40 <x>0</x> 40 <x>0</x>
41 <y>0</y> 41 <y>0</y>
42 <width>628</width> 42 <width>628</width>
43 <height>27</height> 43 <height>25</height>
44 </rect> 44 </rect>
45 </property> 45 </property>
46 <widget class="QMenu" name="menuFile"> 46 <widget class="QMenu" name="menuFile">
@@ -126,7 +126,11 @@
126 <widget class="QWidget" name="dockWidgetContents_3"> 126 <widget class="QWidget" name="dockWidgetContents_3">
127 <layout class="QVBoxLayout" name="verticalLayout_3"> 127 <layout class="QVBoxLayout" name="verticalLayout_3">
128 <item> 128 <item>
129 <widget class="QTreeView" name="parseTree"/> 129 <widget class="QTreeView" name="parseTree">
130 <property name="alternatingRowColors">
131 <bool>true</bool>
132 </property>
133 </widget>
130 </item> 134 </item>
131 <item> 135 <item>
132 <widget class="QPushButton" name="fromTree"> 136 <widget class="QPushButton" name="fromTree">
diff --git a/utils/themeeditor/preferencesdialog.ui b/utils/themeeditor/preferencesdialog.ui
index c6594caa41..1da7811b62 100644
--- a/utils/themeeditor/preferencesdialog.ui
+++ b/utils/themeeditor/preferencesdialog.ui
@@ -64,7 +64,7 @@
64 <item> 64 <item>
65 <widget class="QLabel" name="label_2"> 65 <widget class="QLabel" name="label_2">
66 <property name="text"> 66 <property name="text">
67 <string>Foreground Color</string> 67 <string>Foreground Colour</string>
68 </property> 68 </property>
69 <property name="alignment"> 69 <property name="alignment">
70 <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> 70 <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
@@ -91,7 +91,7 @@
91 <item> 91 <item>
92 <widget class="QLabel" name="label_3"> 92 <widget class="QLabel" name="label_3">
93 <property name="text"> 93 <property name="text">
94 <string>Background Color</string> 94 <string>Background Colour</string>
95 </property> 95 </property>
96 <property name="alignment"> 96 <property name="alignment">
97 <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> 97 <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
@@ -118,7 +118,7 @@
118 <item> 118 <item>
119 <widget class="QLabel" name="label_9"> 119 <widget class="QLabel" name="label_9">
120 <property name="text"> 120 <property name="text">
121 <string>Error Color</string> 121 <string>Error Colour</string>
122 </property> 122 </property>
123 <property name="buddy"> 123 <property name="buddy">
124 <cstring>errorButton</cstring> 124 <cstring>errorButton</cstring>
diff --git a/utils/themeeditor/projectmodel.cpp b/utils/themeeditor/projectmodel.cpp
index 925be81950..2df4c0af00 100644
--- a/utils/themeeditor/projectmodel.cpp
+++ b/utils/themeeditor/projectmodel.cpp
@@ -113,6 +113,12 @@ QVariant ProjectModel::data(const QModelIndex &index, int role) const
113 113
114void ProjectModel::activated(const QModelIndex &index) 114void ProjectModel::activated(const QModelIndex &index)
115{ 115{
116 mainWindow->loadTabFromFile(settings.value("themebase", "") 116 if(index.row() == 0)
117 + "/" + files[index.row()]); 117 mainWindow->loadConfigTab(new ConfigDocument(settings,
118 settings.value("themebase",
119 "") + "/" +
120 files[index.row()]));
121 else
122 mainWindow->loadTabFromSkinFile(settings.value("themebase", "")
123 + "/" + files[index.row()]);
118} 124}
diff --git a/utils/themeeditor/projectmodel.h b/utils/themeeditor/projectmodel.h
index d577f00a69..6623917420 100644
--- a/utils/themeeditor/projectmodel.h
+++ b/utils/themeeditor/projectmodel.h
@@ -44,6 +44,8 @@ public:
44 int rowCount(const QModelIndex& parent) const; 44 int rowCount(const QModelIndex& parent) const;
45 QVariant data(const QModelIndex &index, int role) const; 45 QVariant data(const QModelIndex &index, int role) const;
46 46
47 QString getSetting(QString key){ return settings.value(key, ""); }
48
47signals: 49signals:
48 50
49public slots: 51public slots:
diff --git a/utils/themeeditor/skindocument.cpp b/utils/themeeditor/skindocument.cpp
index 9a9bf5c85f..82c7106051 100644
--- a/utils/themeeditor/skindocument.cpp
+++ b/utils/themeeditor/skindocument.cpp
@@ -9,10 +9,10 @@
9 * 9 *
10 * Copyright (C) 2010 Robert Bieber 10 * Copyright (C) 2010 Robert Bieber
11 * 11 *
12 * This program is free software; you can redistribute it and/or 12 * This program is free software; can redistribute it and/or
13 * modify it under the terms of the GNU General Public License 13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2 14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version. 15 * of the License, or (at your optiyouon) any later version.
16 * 16 *
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied. 18 * KIND, either express or implied.
@@ -30,11 +30,11 @@
30#include <iostream> 30#include <iostream>
31 31
32SkinDocument::SkinDocument(QLabel* statusLabel, QWidget *parent) : 32SkinDocument::SkinDocument(QLabel* statusLabel, QWidget *parent) :
33 QWidget(parent), statusLabel(statusLabel) 33 TabContent(parent), statusLabel(statusLabel)
34{ 34{
35 setupUI(); 35 setupUI();
36 36
37 title = "Untitled"; 37 titleText = "Untitled";
38 fileName = ""; 38 fileName = "";
39 saved = ""; 39 saved = "";
40 parseStatus = tr("Empty document"); 40 parseStatus = tr("Empty document");
@@ -42,7 +42,7 @@ SkinDocument::SkinDocument(QLabel* statusLabel, QWidget *parent) :
42} 42}
43 43
44SkinDocument::SkinDocument(QLabel* statusLabel, QString file, QWidget *parent): 44SkinDocument::SkinDocument(QLabel* statusLabel, QString file, QWidget *parent):
45 QWidget(parent), fileName(file), statusLabel(statusLabel) 45 TabContent(parent), fileName(file), statusLabel(statusLabel)
46{ 46{
47 setupUI(); 47 setupUI();
48 blockUpdate = false; 48 blockUpdate = false;
@@ -60,7 +60,7 @@ SkinDocument::SkinDocument(QLabel* statusLabel, QString file, QWidget *parent):
60 60
61 /* Setting the title */ 61 /* Setting the title */
62 QStringList decomposed = fileName.split('/'); 62 QStringList decomposed = fileName.split('/');
63 title = decomposed.last(); 63 titleText = decomposed.last();
64} 64}
65 65
66SkinDocument::~SkinDocument() 66SkinDocument::~SkinDocument()
@@ -86,7 +86,7 @@ bool SkinDocument::requestClose()
86 /* Spawning the "Are you sure?" dialog */ 86 /* Spawning the "Are you sure?" dialog */
87 QMessageBox confirm(this); 87 QMessageBox confirm(this);
88 confirm.setWindowTitle(tr("Confirm Close")); 88 confirm.setWindowTitle(tr("Confirm Close"));
89 confirm.setText(title + tr(" has been modified.")); 89 confirm.setText(titleText + tr(" has been modified."));
90 confirm.setInformativeText(tr("Do you want to save your changes?")); 90 confirm.setInformativeText(tr("Do you want to save your changes?"));
91 confirm.setStandardButtons(QMessageBox::Save | QMessageBox::Discard 91 confirm.setStandardButtons(QMessageBox::Save | QMessageBox::Discard
92 | QMessageBox::Cancel); 92 | QMessageBox::Cancel);
@@ -192,6 +192,10 @@ void SkinDocument::cursorChanged()
192 parseStatus = tr("Errors in document"); 192 parseStatus = tr("Errors in document");
193 statusLabel->setText(parseStatus); 193 statusLabel->setText(parseStatus);
194 } 194 }
195 else
196 {
197 emit lineChanged(editor->textCursor().blockNumber() + 1);
198 }
195 199
196} 200}
197 201
@@ -245,9 +249,9 @@ void SkinDocument::codeChanged()
245 } 249 }
246 250
247 if(editor->document()->toPlainText() != saved) 251 if(editor->document()->toPlainText() != saved)
248 emit titleChanged(title + QChar('*')); 252 emit titleChanged(titleText + QChar('*'));
249 else 253 else
250 emit titleChanged(title); 254 emit titleChanged(titleText);
251 255
252 cursorChanged(); 256 cursorChanged();
253 257
@@ -269,8 +273,8 @@ void SkinDocument::save()
269 273
270 saved = editor->document()->toPlainText(); 274 saved = editor->document()->toPlainText();
271 QStringList decompose = fileName.split('/'); 275 QStringList decompose = fileName.split('/');
272 title = decompose.last(); 276 titleText = decompose.last();
273 emit titleChanged(title); 277 emit titleChanged(titleText);
274 278
275} 279}
276 280
@@ -301,7 +305,7 @@ void SkinDocument::saveAs()
301 305
302 saved = editor->document()->toPlainText(); 306 saved = editor->document()->toPlainText();
303 QStringList decompose = fileName.split('/'); 307 QStringList decompose = fileName.split('/');
304 title = decompose[decompose.count() - 1]; 308 titleText = decompose[decompose.count() - 1];
305 emit titleChanged(title); 309 emit titleChanged(titleText);
306 310
307} 311}
diff --git a/utils/themeeditor/skindocument.h b/utils/themeeditor/skindocument.h
index 79db8b648a..c6449ca627 100644
--- a/utils/themeeditor/skindocument.h
+++ b/utils/themeeditor/skindocument.h
@@ -30,8 +30,9 @@
30#include "parsetreemodel.h" 30#include "parsetreemodel.h"
31#include "preferencesdialog.h" 31#include "preferencesdialog.h"
32#include "codeeditor.h" 32#include "codeeditor.h"
33#include "tabcontent.h"
33 34
34class SkinDocument : public QWidget 35class SkinDocument : public TabContent
35{ 36{
36Q_OBJECT 37Q_OBJECT
37public: 38public:
@@ -52,8 +53,8 @@ public:
52 void connectPrefs(PreferencesDialog* prefs); 53 void connectPrefs(PreferencesDialog* prefs);
53 54
54 ParseTreeModel* getModel(){ return model; } 55 ParseTreeModel* getModel(){ return model; }
55 QString getFile(){ return fileName; } 56 QString file() const{ return fileName; }
56 QString getTitle(){ return title; } 57 QString title() const{ return titleText; }
57 QString getStatus(){ return parseStatus; } 58 QString getStatus(){ return parseStatus; }
58 void genCode(){ editor->document()->setPlainText(model->genCode()); } 59 void genCode(){ editor->document()->setPlainText(model->genCode()); }
59 60
@@ -62,8 +63,9 @@ public:
62 63
63 bool requestClose(); 64 bool requestClose();
64 65
66 TabType type() const{ return Skin; }
67
65signals: 68signals:
66 void titleChanged(QString);
67 69
68public slots: 70public slots:
69 void settingsChanged(); 71 void settingsChanged();
@@ -75,7 +77,7 @@ private slots:
75private: 77private:
76 void setupUI(); 78 void setupUI();
77 79
78 QString title; 80 QString titleText;
79 QString fileName; 81 QString fileName;
80 QString saved; 82 QString saved;
81 QString parseStatus; 83 QString parseStatus;
diff --git a/utils/themeeditor/tabcontent.h b/utils/themeeditor/tabcontent.h
new file mode 100644
index 0000000000..1b153f7df5
--- /dev/null
+++ b/utils/themeeditor/tabcontent.h
@@ -0,0 +1,35 @@
1#ifndef TABCONTENT_H
2#define TABCONTENT_H
3
4#include <QWidget>
5
6class TabContent : public QWidget
7{
8Q_OBJECT
9public:
10 enum TabType
11 {
12 Skin,
13 Config
14 };
15
16 TabContent(QWidget *parent = 0): QWidget(parent){ }
17
18 virtual TabType type() const = 0;
19 virtual QString title() const = 0;
20 virtual QString file() const = 0;
21
22 virtual void save() = 0;
23 virtual void saveAs() = 0;
24
25 virtual bool requestClose() = 0;
26
27signals:
28 void titleChanged(QString);
29 void lineChanged(int);
30
31public slots:
32
33};
34
35#endif // TABCONTENT_H
diff --git a/utils/themeeditor/themeeditor.pro b/utils/themeeditor/themeeditor.pro
index 128f56996d..c336edf2f5 100644
--- a/utils/themeeditor/themeeditor.pro
+++ b/utils/themeeditor/themeeditor.pro
@@ -16,7 +16,9 @@ HEADERS += tag_table.h \
16 skindocument.h \ 16 skindocument.h \
17 preferencesdialog.h \ 17 preferencesdialog.h \
18 codeeditor.h \ 18 codeeditor.h \
19 projectmodel.h 19 projectmodel.h \
20 tabcontent.h \
21 configdocument.h
20SOURCES += tag_table.c \ 22SOURCES += tag_table.c \
21 skin_parser.c \ 23 skin_parser.c \
22 skin_scan.c \ 24 skin_scan.c \
@@ -29,7 +31,8 @@ SOURCES += tag_table.c \
29 skindocument.cpp \ 31 skindocument.cpp \
30 preferencesdialog.cpp \ 32 preferencesdialog.cpp \
31 codeeditor.cpp \ 33 codeeditor.cpp \
32 projectmodel.cpp 34 projectmodel.cpp \
35 configdocument.cpp
33OTHER_FILES += README \ 36OTHER_FILES += README \
34 resources/windowicon.png \ 37 resources/windowicon.png \
35 resources/appicon.xcf \ 38 resources/appicon.xcf \
@@ -38,5 +41,6 @@ OTHER_FILES += README \
38 resources/document-open.png \ 41 resources/document-open.png \
39 resources/document-new.png 42 resources/document-new.png
40FORMS += editorwindow.ui \ 43FORMS += editorwindow.ui \
41 preferencesdialog.ui 44 preferencesdialog.ui \
45 configdocument.ui
42RESOURCES += resources.qrc 46RESOURCES += resources.qrc