summaryrefslogtreecommitdiff
path: root/utils/themeeditor
diff options
context:
space:
mode:
Diffstat (limited to 'utils/themeeditor')
-rw-r--r--utils/themeeditor/graphics/rbrenderinfo.cpp9
-rw-r--r--utils/themeeditor/graphics/rbrenderinfo.h8
-rw-r--r--utils/themeeditor/graphics/rbscreen.cpp52
-rw-r--r--utils/themeeditor/graphics/rbscreen.h16
-rw-r--r--utils/themeeditor/graphics/rbviewport.cpp60
-rw-r--r--utils/themeeditor/graphics/rbviewport.h1
-rw-r--r--utils/themeeditor/gui/skindocument.h2
-rw-r--r--utils/themeeditor/models/parsetreemodel.cpp27
-rw-r--r--utils/themeeditor/models/parsetreemodel.h2
-rw-r--r--utils/themeeditor/models/parsetreenode.cpp12
-rw-r--r--utils/themeeditor/models/projectmodel.h2
11 files changed, 127 insertions, 64 deletions
diff --git a/utils/themeeditor/graphics/rbrenderinfo.cpp b/utils/themeeditor/graphics/rbrenderinfo.cpp
index 468533628f..ca9f2b632d 100644
--- a/utils/themeeditor/graphics/rbrenderinfo.cpp
+++ b/utils/themeeditor/graphics/rbrenderinfo.cpp
@@ -21,15 +21,17 @@
21 21
22#include "rbrenderinfo.h" 22#include "rbrenderinfo.h"
23 23
24RBRenderInfo::RBRenderInfo(ParseTreeModel* model, 24RBRenderInfo::RBRenderInfo(ParseTreeModel* model, ProjectModel* project,
25 ProjectModel* project, RBScreen* screen) 25 QMap<QString, QString>* settings, RBScreen* screen)
26 :mProject(project), mScreen(screen), mModel(model) 26 :mProject(project), mSettings(settings),
27 mScreen(screen), mModel(model)
27{ 28{
28} 29}
29 30
30RBRenderInfo::RBRenderInfo(const RBRenderInfo &other) 31RBRenderInfo::RBRenderInfo(const RBRenderInfo &other)
31{ 32{
32 mProject = other.mProject; 33 mProject = other.mProject;
34 mSettings = other.mSettings;
33 mScreen = other.mScreen; 35 mScreen = other.mScreen;
34 mModel = other.mModel; 36 mModel = other.mModel;
35} 37}
@@ -37,6 +39,7 @@ RBRenderInfo::RBRenderInfo(const RBRenderInfo &other)
37const RBRenderInfo& RBRenderInfo::operator=(const RBRenderInfo& other) 39const RBRenderInfo& RBRenderInfo::operator=(const RBRenderInfo& other)
38{ 40{
39 mProject = other.mProject; 41 mProject = other.mProject;
42 mSettings = other.mSettings;
40 mScreen = other.mScreen; 43 mScreen = other.mScreen;
41 mModel = other.mModel; 44 mModel = other.mModel;
42 45
diff --git a/utils/themeeditor/graphics/rbrenderinfo.h b/utils/themeeditor/graphics/rbrenderinfo.h
index c99de7beaa..c80cb00a9d 100644
--- a/utils/themeeditor/graphics/rbrenderinfo.h
+++ b/utils/themeeditor/graphics/rbrenderinfo.h
@@ -22,6 +22,8 @@
22#ifndef RBRENDERINFO_H 22#ifndef RBRENDERINFO_H
23#define RBRENDERINFO_H 23#define RBRENDERINFO_H
24 24
25#include <QMap>
26
25class RBScreen; 27class RBScreen;
26class ProjectModel; 28class ProjectModel;
27class ParseTreeModel; 29class ParseTreeModel;
@@ -29,19 +31,21 @@ class ParseTreeModel;
29class RBRenderInfo 31class RBRenderInfo
30{ 32{
31public: 33public:
32 RBRenderInfo(ParseTreeModel* model, 34 RBRenderInfo(ParseTreeModel* model, ProjectModel* project,
33 ProjectModel* project, RBScreen* screen); 35 QMap<QString, QString>* settings, RBScreen* screen);
34 RBRenderInfo(const RBRenderInfo& other); 36 RBRenderInfo(const RBRenderInfo& other);
35 virtual ~RBRenderInfo(); 37 virtual ~RBRenderInfo();
36 38
37 const RBRenderInfo& operator=(const RBRenderInfo& other); 39 const RBRenderInfo& operator=(const RBRenderInfo& other);
38 40
39 ProjectModel* project() const{ return mProject; } 41 ProjectModel* project() const{ return mProject; }
42 QMap<QString, QString>* settings() const{ return mSettings; }
40 RBScreen* screen() const{ return mScreen; } 43 RBScreen* screen() const{ return mScreen; }
41 ParseTreeModel* model() const{ return mModel; } 44 ParseTreeModel* model() const{ return mModel; }
42 45
43private: 46private:
44 ProjectModel* mProject; 47 ProjectModel* mProject;
48 QMap<QString, QString>* mSettings;
45 RBScreen* mScreen; 49 RBScreen* mScreen;
46 ParseTreeModel* mModel; 50 ParseTreeModel* mModel;
47}; 51};
diff --git a/utils/themeeditor/graphics/rbscreen.cpp b/utils/themeeditor/graphics/rbscreen.cpp
index 8d3ef86ad0..065bea61cd 100644
--- a/utils/themeeditor/graphics/rbscreen.cpp
+++ b/utils/themeeditor/graphics/rbscreen.cpp
@@ -20,44 +20,42 @@
20 ****************************************************************************/ 20 ****************************************************************************/
21 21
22#include "rbscreen.h" 22#include "rbscreen.h"
23#include "rbviewport.h"
23 24
24#include <QPainter> 25#include <QPainter>
25#include <QFile> 26#include <QFile>
26 27
27RBScreen::RBScreen(ProjectModel* project, QGraphicsItem *parent) : 28RBScreen::RBScreen(const RBRenderInfo& info, QGraphicsItem *parent) :
28 QGraphicsItem(parent), backdrop(0), project(project) 29 QGraphicsItem(parent), backdrop(0), project(project)
29{ 30{
30 31
31 width = safeSetting(project, "#screenwidth", "300").toInt(); 32 width = info.settings()->value("#screenwidth", "300").toInt();
32 height = safeSetting(project, "#screenheight", "200").toInt(); 33 height = info.settings()->value("#screenheight", "200").toInt();
33 34
34 QString bg = safeSetting(project, "background color", "FFFFFF"); 35 QString bg = info.settings()->value("background color", "000000");
35 bgColor = stringToColor(bg, Qt::white); 36 bgColor = stringToColor(bg, Qt::white);
36 37
37 QString fg = safeSetting(project, "foreground color", "FFFFFF"); 38 QString fg = info.settings()->value("foreground color", "FFFFFF");
38 fgColor = stringToColor(fg, Qt::black); 39 fgColor = stringToColor(fg, Qt::black);
39 40
40 /* Loading backdrop if available */ 41 /* Loading backdrop if available */
41 if(project) 42 QString base = info.settings()->value("themebase", "");
43 QString backdropFile = info.settings()->value("backdrop", "");
44
45 if(QFile::exists(base + "/backdrops/" + backdropFile))
42 { 46 {
43 QString base = project->getSetting("themebase", ""); 47 backdrop = new QPixmap(base + "/backdrops/" + backdropFile);
44 QString backdropFile = project->getSetting("backdrop", "");
45 48
46 if(QFile::exists(base + "/backdrops/" + backdropFile)) 49 /* If a backdrop has been found, use its width and height */
50 if(!backdrop->isNull())
47 { 51 {
48 backdrop = new QPixmap(base + "/backdrops/" + backdropFile); 52 width = backdrop->width();
49 53 height = backdrop->height();
50 /* If a backdrop has been found, use its width and height */ 54 }
51 if(!backdrop->isNull()) 55 else
52 { 56 {
53 width = backdrop->width(); 57 delete backdrop;
54 height = backdrop->height(); 58 backdrop = 0;
55 }
56 else
57 {
58 delete backdrop;
59 backdrop = 0;
60 }
61 } 59 }
62 } 60 }
63} 61}
@@ -93,6 +91,16 @@ void RBScreen::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
93 } 91 }
94} 92}
95 93
94void RBScreen::showViewport(QString name)
95{
96 if(namedViewports.value(name, 0) == 0)
97 return;
98
99 namedViewports.value(name)->show();
100 update();
101}
102
103
96QColor RBScreen::stringToColor(QString str, QColor fallback) 104QColor RBScreen::stringToColor(QString str, QColor fallback)
97{ 105{
98 106
diff --git a/utils/themeeditor/graphics/rbscreen.h b/utils/themeeditor/graphics/rbscreen.h
index 78bbcfd8b2..6a9da2fcda 100644
--- a/utils/themeeditor/graphics/rbscreen.h
+++ b/utils/themeeditor/graphics/rbscreen.h
@@ -25,12 +25,15 @@
25#include <QGraphicsItem> 25#include <QGraphicsItem>
26 26
27#include "projectmodel.h" 27#include "projectmodel.h"
28#include "rbrenderinfo.h"
29
30class RBViewport;
28 31
29class RBScreen : public QGraphicsItem 32class RBScreen : public QGraphicsItem
30{ 33{
31 34
32public: 35public:
33 RBScreen(ProjectModel* project = 0, QGraphicsItem *parent = 0); 36 RBScreen(const RBRenderInfo& info, QGraphicsItem *parent = 0);
34 virtual ~RBScreen(); 37 virtual ~RBScreen();
35 38
36 QPainterPath shape() const; 39 QPainterPath shape() const;
@@ -41,14 +44,11 @@ public:
41 int getWidth() const{ return width; } 44 int getWidth() const{ return width; }
42 int getHeight() const{ return height; } 45 int getHeight() const{ return height; }
43 46
44 static QString safeSetting(ProjectModel* project, QString key, 47 void loadViewport(QString name, RBViewport* view)
45 QString fallback)
46 { 48 {
47 if(project) 49 namedViewports.insert(name, view);
48 return project->getSetting(key, fallback);
49 else
50 return fallback;
51 } 50 }
51 void showViewport(QString name);
52 52
53 static QColor stringToColor(QString str, QColor fallback); 53 static QColor stringToColor(QString str, QColor fallback);
54 54
@@ -62,6 +62,8 @@ private:
62 62
63 ProjectModel* project; 63 ProjectModel* project;
64 64
65 QMap<QString, RBViewport*> namedViewports;
66
65}; 67};
66 68
67#endif // RBSCREEN_H 69#endif // RBSCREEN_H
diff --git a/utils/themeeditor/graphics/rbviewport.cpp b/utils/themeeditor/graphics/rbviewport.cpp
index 1f1f02ce55..9045016533 100644
--- a/utils/themeeditor/graphics/rbviewport.cpp
+++ b/utils/themeeditor/graphics/rbviewport.cpp
@@ -50,38 +50,57 @@ RBViewport::RBViewport(skin_element* node, const RBRenderInfo& info)
50 } 50 }
51 else 51 else
52 { 52 {
53 int x, y, w, h; 53 int param;
54 /* Parsing one of the other types of viewport */ 54 QString ident;
55 int x,y,w,h;
56 /* Rendering one of the other types of viewport */
55 switch(node->tag->name[1]) 57 switch(node->tag->name[1])
56 { 58 {
57 case '\0': 59 case '\0':
58 /* A normal viewport definition */ 60 customUI = false;
59 x = node->params[0].data.numeric;
60 y = node->params[1].data.numeric;
61
62 if(node->params[2].type == skin_tag_parameter::DEFAULT)
63 w = info.screen()->getWidth() - x;
64 else
65 w = node->params[2].data.numeric;
66
67 if(node->params[3].type == skin_tag_parameter::DEFAULT)
68 h = info.screen()->getHeight() - y;
69 else
70 h = node->params[3].data.numeric;
71
72 size = QRectF(x, y, w, h);
73 displayed = true; 61 displayed = true;
62 param = 0;
74 break; 63 break;
75 64
76 case 'l': 65 case 'l':
77 /* Preloaded viewport */ 66 /* A preloaded viewport definition */
67 ident = node->params[0].data.text;
68 customUI = false;
69 displayed = false;
70 info.screen()->loadViewport(ident, this);
71 param = 1;
78 break; 72 break;
79 73
80 case 'i': 74 case 'i':
81 /* Custom UI Viewport */ 75 /* Custom UI Viewport */
76 customUI = true;
77 param = 1;
78 if(node->params[0].type == skin_tag_parameter::DEFAULT)
79 {
80 displayed = true;
81 }
82 else
83 {
84 displayed = false;
85 info.screen()->loadViewport(ident, this);
86 }
82 break; 87 break;
83
84 } 88 }
89 /* Now we grab the info common to all viewports */
90 x = node->params[param++].data.numeric;
91 y = node->params[param++].data.numeric;
92
93 if(node->params[param].type == skin_tag_parameter::DEFAULT)
94 w = info.screen()->getWidth() - x;
95 else
96 w = node->params[param].data.numeric;
97
98 if(node->params[++param].type == skin_tag_parameter::DEFAULT)
99 h = info.screen()->getHeight() - y;
100 else
101 h = node->params[param].data.numeric;
102
103 size = QRectF(x, y, w, h);
85 } 104 }
86} 105}
87 106
@@ -104,7 +123,8 @@ QRectF RBViewport::boundingRect() const
104void RBViewport::paint(QPainter *painter, 123void RBViewport::paint(QPainter *painter,
105 const QStyleOptionGraphicsItem *option, QWidget *widget) 124 const QStyleOptionGraphicsItem *option, QWidget *widget)
106{ 125{
126 QColor color = customUI ? Qt::blue : Qt::red;
107 if(displayed) 127 if(displayed)
108 painter->fillRect(size, Qt::red); 128 painter->fillRect(size, color);
109} 129}
110 130
diff --git a/utils/themeeditor/graphics/rbviewport.h b/utils/themeeditor/graphics/rbviewport.h
index 0ec377bc39..5d59ea4819 100644
--- a/utils/themeeditor/graphics/rbviewport.h
+++ b/utils/themeeditor/graphics/rbviewport.h
@@ -48,6 +48,7 @@ private:
48 QColor foreground; 48 QColor foreground;
49 49
50 bool displayed; 50 bool displayed;
51 bool customUI;
51 52
52}; 53};
53 54
diff --git a/utils/themeeditor/gui/skindocument.h b/utils/themeeditor/gui/skindocument.h
index 68bec43913..f6ceb73e92 100644
--- a/utils/themeeditor/gui/skindocument.h
+++ b/utils/themeeditor/gui/skindocument.h
@@ -70,7 +70,7 @@ public:
70 70
71 TabType type() const{ return Skin; } 71 TabType type() const{ return Skin; }
72 72
73 QGraphicsScene* scene(){ return model->render(project); } 73 QGraphicsScene* scene(){ return model->render(project, &fileName); }
74 74
75signals: 75signals:
76 76
diff --git a/utils/themeeditor/models/parsetreemodel.cpp b/utils/themeeditor/models/parsetreemodel.cpp
index 41cecc4c20..4e94bfa0bf 100644
--- a/utils/themeeditor/models/parsetreemodel.cpp
+++ b/utils/themeeditor/models/parsetreemodel.cpp
@@ -29,6 +29,8 @@
29 29
30#include <QObject> 30#include <QObject>
31#include <QPixmap> 31#include <QPixmap>
32#include <QMap>
33#include <QDir>
32 34
33ParseTreeModel::ParseTreeModel(const char* document, QObject* parent): 35ParseTreeModel::ParseTreeModel(const char* document, QObject* parent):
34 QAbstractItemModel(parent) 36 QAbstractItemModel(parent)
@@ -270,23 +272,40 @@ bool ParseTreeModel::setData(const QModelIndex &index, const QVariant &value,
270 return true; 272 return true;
271} 273}
272 274
273QGraphicsScene* ParseTreeModel::render(ProjectModel* project) 275QGraphicsScene* ParseTreeModel::render(ProjectModel* project,
276 const QString* file)
274{ 277{
275 scene->clear(); 278 scene->clear();
276 279
277 /* Setting the background */ 280 /* Setting the background */
278 scene->setBackgroundBrush(QBrush(QPixmap(":/render/scenebg.png"))); 281 scene->setBackgroundBrush(QBrush(QPixmap(":/render/scenebg.png")));
279 282
283 /* Preparing settings */
284 QMap<QString, QString> settings;
285 if(project)
286 settings = project->getSettings();
287
288 /* Setting themebase if it can't be derived from the project */
289 if(settings.value("themebase", "") == "" && file && QFile::exists(*file))
290 {
291 QDir base(*file);
292 base.cdUp();
293 settings.insert("themebase", base.canonicalPath());
294 }
295
296 RBScreen* screen = 0;
297 RBRenderInfo info(this, project, &settings, screen);
298
280 /* Adding the screen */ 299 /* Adding the screen */
281 RBScreen* screen = new RBScreen(project); 300 screen = new RBScreen(info);
282 scene->addItem(screen); 301 scene->addItem(screen);
283 302
284 RBRenderInfo info(this, project, screen); 303 info = RBRenderInfo(this, project, &settings, screen);
304
285 305
286 /* Rendering the tree */ 306 /* Rendering the tree */
287 if(root) 307 if(root)
288 root->render(info); 308 root->render(info);
289 309
290
291 return scene; 310 return scene;
292} 311}
diff --git a/utils/themeeditor/models/parsetreemodel.h b/utils/themeeditor/models/parsetreemodel.h
index 1f252a3f20..df64403bf5 100644
--- a/utils/themeeditor/models/parsetreemodel.h
+++ b/utils/themeeditor/models/parsetreemodel.h
@@ -60,7 +60,7 @@ public:
60 Qt::ItemFlags flags(const QModelIndex &index) const; 60 Qt::ItemFlags flags(const QModelIndex &index) const;
61 bool setData(const QModelIndex &index, const QVariant &value, int role); 61 bool setData(const QModelIndex &index, const QVariant &value, int role);
62 62
63 QGraphicsScene* render(ProjectModel* project); 63 QGraphicsScene* render(ProjectModel* project, const QString* file = 0);
64 64
65 static QString safeSetting(ProjectModel* project, QString key, 65 static QString safeSetting(ProjectModel* project, QString key,
66 QString fallback) 66 QString fallback)
diff --git a/utils/themeeditor/models/parsetreenode.cpp b/utils/themeeditor/models/parsetreenode.cpp
index 97beca4c3d..a74dd2350b 100644
--- a/utils/themeeditor/models/parsetreenode.cpp
+++ b/utils/themeeditor/models/parsetreenode.cpp
@@ -25,6 +25,8 @@
25#include "parsetreenode.h" 25#include "parsetreenode.h"
26#include "parsetreemodel.h" 26#include "parsetreemodel.h"
27 27
28#include <iostream>
29
28int ParseTreeNode::openConditionals = 0; 30int ParseTreeNode::openConditionals = 0;
29 31
30/* Root element constructor */ 32/* Root element constructor */
@@ -490,11 +492,13 @@ void ParseTreeNode::render(const RBRenderInfo& info)
490 return; 492 return;
491 } 493 }
492 494
493 switch(element->type) 495 if(element->type != VIEWPORT)
494 { 496 {
495 case VIEWPORT: 497 std::cerr << QObject::tr("Error in parse tree").toStdString()
496 rendered = new RBViewport(element, info); 498 << std::endl;
497 break; 499 return;
498 } 500 }
501
502 rendered = new RBViewport(element, info);
499} 503}
500 504
diff --git a/utils/themeeditor/models/projectmodel.h b/utils/themeeditor/models/projectmodel.h
index 791c07ea2e..4cc531b88f 100644
--- a/utils/themeeditor/models/projectmodel.h
+++ b/utils/themeeditor/models/projectmodel.h
@@ -49,6 +49,8 @@ public:
49 return settings.value(key, fallback); 49 return settings.value(key, fallback);
50 } 50 }
51 51
52 const QMap<QString, QString>& getSettings() const{ return settings; }
53
52signals: 54signals:
53 55
54public slots: 56public slots: