summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--utils/themeeditor/graphics/rbprogressbar.cpp26
-rw-r--r--utils/themeeditor/graphics/rbprogressbar.h7
-rw-r--r--utils/themeeditor/models/parsetreenode.cpp24
-rw-r--r--utils/themeeditor/models/parsetreenode.h2
4 files changed, 46 insertions, 13 deletions
diff --git a/utils/themeeditor/graphics/rbprogressbar.cpp b/utils/themeeditor/graphics/rbprogressbar.cpp
index 76cfe5601b..15515f8a18 100644
--- a/utils/themeeditor/graphics/rbprogressbar.cpp
+++ b/utils/themeeditor/graphics/rbprogressbar.cpp
@@ -21,14 +21,17 @@
21 21
22#include <QPainter> 22#include <QPainter>
23 23
24#include "parsetreenode.h"
24#include "rbprogressbar.h" 25#include "rbprogressbar.h"
25#include "projectmodel.h" 26#include "projectmodel.h"
26 27
27RBProgressBar::RBProgressBar(RBViewport *parent, const RBRenderInfo &info, 28RBProgressBar::RBProgressBar(RBViewport *parent, const RBRenderInfo &info,
28 int paramCount, skin_tag_parameter *params, 29 ParseTreeNode* node, bool pv)
29 bool pv) 30 :RBMovable(parent), node(node)
30 :RBMovable(parent)
31{ 31{
32 int paramCount = node->getElement()->params_count;
33 skin_tag_parameter* params = node->getElement()->params;
34
32 /* First we set everything to defaults */ 35 /* First we set everything to defaults */
33 bitmap = 0; 36 bitmap = 0;
34 color = parent->getFGColor(); 37 color = parent->getFGColor();
@@ -70,7 +73,7 @@ RBProgressBar::RBProgressBar(RBViewport *parent, const RBRenderInfo &info,
70 bitmap = 0; 73 bitmap = 0;
71 } 74 }
72 } 75 }
73 76 size = QRectF(0, 0, w, h);
74 77
75 /* Finally, we scale the width according to the amount played */ 78 /* Finally, we scale the width according to the amount played */
76 int percent; 79 int percent;
@@ -89,7 +92,7 @@ RBProgressBar::RBProgressBar(RBViewport *parent, const RBRenderInfo &info,
89 92
90 w = w * percent / 100; 93 w = w * percent / 100;
91 94
92 size = QRectF(0, 0, w, h); 95 renderSize = QRectF(0, 0, w, h);
93 setPos(x, y); 96 setPos(x, y);
94 parent->addTextOffset(h); 97 parent->addTextOffset(h);
95} 98}
@@ -111,11 +114,11 @@ void RBProgressBar::paint(QPainter *painter,
111{ 114{
112 if(bitmap && !bitmap->isNull()) 115 if(bitmap && !bitmap->isNull())
113 { 116 {
114 painter->drawPixmap(size, *bitmap, size); 117 painter->drawPixmap(renderSize, *bitmap, renderSize);
115 } 118 }
116 else 119 else
117 { 120 {
118 painter->fillRect(size, color); 121 painter->fillRect(renderSize, color);
119 } 122 }
120 123
121 RBMovable::paint(painter, option, widget); 124 RBMovable::paint(painter, option, widget);
@@ -123,5 +126,14 @@ void RBProgressBar::paint(QPainter *painter,
123 126
124void RBProgressBar::saveGeometry() 127void RBProgressBar::saveGeometry()
125{ 128{
129 QPointF origin = pos();
130 QRectF bounds = boundingRect();
131
132 node->modParam(static_cast<int>(origin.x()), 0);
133 node->modParam(static_cast<int>(origin.y()), 1);
134 node->modParam(static_cast<int>(bounds.width()), 2);
135 node->modParam(static_cast<int>(bounds.height()), 3);
126 136
137 if(!bitmap)
138 node->modParam(QVariant(), 4);
127} 139}
diff --git a/utils/themeeditor/graphics/rbprogressbar.h b/utils/themeeditor/graphics/rbprogressbar.h
index 817285653a..782d08e4f9 100644
--- a/utils/themeeditor/graphics/rbprogressbar.h
+++ b/utils/themeeditor/graphics/rbprogressbar.h
@@ -31,11 +31,13 @@
31#include "devicestate.h" 31#include "devicestate.h"
32#include "skin_parser.h" 32#include "skin_parser.h"
33 33
34class ParseTreeNode;
35
34class RBProgressBar : public RBMovable 36class RBProgressBar : public RBMovable
35{ 37{
36public: 38public:
37 RBProgressBar(RBViewport* parent, const RBRenderInfo& info, 39 RBProgressBar(RBViewport* parent, const RBRenderInfo& info,
38 int paramCount, skin_tag_parameter* params, bool pv = 0); 40 ParseTreeNode* node, bool pv = 0);
39 virtual ~RBProgressBar(); 41 virtual ~RBProgressBar();
40 42
41 QRectF boundingRect() const; 43 QRectF boundingRect() const;
@@ -49,6 +51,9 @@ private:
49 QPixmap* bitmap; 51 QPixmap* bitmap;
50 QColor color; 52 QColor color;
51 QRectF size; 53 QRectF size;
54 QRectF renderSize;
55
56 ParseTreeNode* node;
52 57
53}; 58};
54 59
diff --git a/utils/themeeditor/models/parsetreenode.cpp b/utils/themeeditor/models/parsetreenode.cpp
index 4afd04ab9d..779d236012 100644
--- a/utils/themeeditor/models/parsetreenode.cpp
+++ b/utils/themeeditor/models/parsetreenode.cpp
@@ -682,16 +682,14 @@ bool ParseTreeNode::execTag(const RBRenderInfo& info, RBViewport* viewport)
682 { 682 {
683 case 'b': 683 case 'b':
684 /* %pb */ 684 /* %pb */
685 new RBProgressBar(viewport, info, element->params_count, 685 new RBProgressBar(viewport, info, this);
686 element->params);
687 return true; 686 return true;
688 687
689 case 'v': 688 case 'v':
690 /* %pv */ 689 /* %pv */
691 if(element->params_count > 0) 690 if(element->params_count > 0)
692 { 691 {
693 new RBProgressBar(viewport, info, element->params_count, 692 new RBProgressBar(viewport, info, this, true);
694 element->params, true);
695 return true; 693 return true;
696 } 694 }
697 else 695 else
@@ -1075,8 +1073,24 @@ void ParseTreeNode::modParam(QVariant value, int index)
1075{ 1073{
1076 if(element) 1074 if(element)
1077 { 1075 {
1078 if(index < 0 || index >= children.count()) 1076 if(index < 0)
1079 return; 1077 return;
1078 while(index >= children.count())
1079 {
1080 /* Padding children with defaults until we make the necessary
1081 * parameter available
1082 */
1083 skin_tag_parameter* newParam = new skin_tag_parameter;
1084 newParam->type = skin_tag_parameter::DEFAULT;
1085 /* We'll need to manually delete the extra parameters in the
1086 * destructor
1087 */
1088 extraParams.append(children.count());
1089
1090 children.append(new ParseTreeNode(newParam, this, model));
1091 element->params_count++;
1092 }
1093
1080 children[index]->modParam(value); 1094 children[index]->modParam(value);
1081 } 1095 }
1082 else if(param) 1096 else if(param)
diff --git a/utils/themeeditor/models/parsetreenode.h b/utils/themeeditor/models/parsetreenode.h
index 106907799e..af998faf11 100644
--- a/utils/themeeditor/models/parsetreenode.h
+++ b/utils/themeeditor/models/parsetreenode.h
@@ -88,6 +88,8 @@ private:
88 88
89 ParseTreeModel* model; 89 ParseTreeModel* model;
90 90
91 QList<int> extraParams;
92
91}; 93};
92 94
93#endif // PARSETREENODE_H 95#endif // PARSETREENODE_H