diff options
Diffstat (limited to 'utils')
-rw-r--r-- | utils/themeeditor/graphics/rbprogressbar.cpp | 26 | ||||
-rw-r--r-- | utils/themeeditor/graphics/rbprogressbar.h | 7 | ||||
-rw-r--r-- | utils/themeeditor/models/parsetreenode.cpp | 24 | ||||
-rw-r--r-- | utils/themeeditor/models/parsetreenode.h | 2 |
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 | ||
27 | RBProgressBar::RBProgressBar(RBViewport *parent, const RBRenderInfo &info, | 28 | RBProgressBar::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 | ||
124 | void RBProgressBar::saveGeometry() | 127 | void 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 | ||
34 | class ParseTreeNode; | ||
35 | |||
34 | class RBProgressBar : public RBMovable | 36 | class RBProgressBar : public RBMovable |
35 | { | 37 | { |
36 | public: | 38 | public: |
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 |