forked from len0rd/rockbox
Theme Editor: Made progress bars fully movable/savable from the preview panel
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27726 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
e4dc4f8913
commit
c5025c7c78
4 changed files with 46 additions and 13 deletions
|
@ -21,14 +21,17 @@
|
||||||
|
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
|
|
||||||
|
#include "parsetreenode.h"
|
||||||
#include "rbprogressbar.h"
|
#include "rbprogressbar.h"
|
||||||
#include "projectmodel.h"
|
#include "projectmodel.h"
|
||||||
|
|
||||||
RBProgressBar::RBProgressBar(RBViewport *parent, const RBRenderInfo &info,
|
RBProgressBar::RBProgressBar(RBViewport *parent, const RBRenderInfo &info,
|
||||||
int paramCount, skin_tag_parameter *params,
|
ParseTreeNode* node, bool pv)
|
||||||
bool pv)
|
:RBMovable(parent), node(node)
|
||||||
:RBMovable(parent)
|
|
||||||
{
|
{
|
||||||
|
int paramCount = node->getElement()->params_count;
|
||||||
|
skin_tag_parameter* params = node->getElement()->params;
|
||||||
|
|
||||||
/* First we set everything to defaults */
|
/* First we set everything to defaults */
|
||||||
bitmap = 0;
|
bitmap = 0;
|
||||||
color = parent->getFGColor();
|
color = parent->getFGColor();
|
||||||
|
@ -70,7 +73,7 @@ RBProgressBar::RBProgressBar(RBViewport *parent, const RBRenderInfo &info,
|
||||||
bitmap = 0;
|
bitmap = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
size = QRectF(0, 0, w, h);
|
||||||
|
|
||||||
/* Finally, we scale the width according to the amount played */
|
/* Finally, we scale the width according to the amount played */
|
||||||
int percent;
|
int percent;
|
||||||
|
@ -89,7 +92,7 @@ RBProgressBar::RBProgressBar(RBViewport *parent, const RBRenderInfo &info,
|
||||||
|
|
||||||
w = w * percent / 100;
|
w = w * percent / 100;
|
||||||
|
|
||||||
size = QRectF(0, 0, w, h);
|
renderSize = QRectF(0, 0, w, h);
|
||||||
setPos(x, y);
|
setPos(x, y);
|
||||||
parent->addTextOffset(h);
|
parent->addTextOffset(h);
|
||||||
}
|
}
|
||||||
|
@ -111,11 +114,11 @@ void RBProgressBar::paint(QPainter *painter,
|
||||||
{
|
{
|
||||||
if(bitmap && !bitmap->isNull())
|
if(bitmap && !bitmap->isNull())
|
||||||
{
|
{
|
||||||
painter->drawPixmap(size, *bitmap, size);
|
painter->drawPixmap(renderSize, *bitmap, renderSize);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
painter->fillRect(size, color);
|
painter->fillRect(renderSize, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
RBMovable::paint(painter, option, widget);
|
RBMovable::paint(painter, option, widget);
|
||||||
|
@ -123,5 +126,14 @@ void RBProgressBar::paint(QPainter *painter,
|
||||||
|
|
||||||
void RBProgressBar::saveGeometry()
|
void RBProgressBar::saveGeometry()
|
||||||
{
|
{
|
||||||
|
QPointF origin = pos();
|
||||||
|
QRectF bounds = boundingRect();
|
||||||
|
|
||||||
|
node->modParam(static_cast<int>(origin.x()), 0);
|
||||||
|
node->modParam(static_cast<int>(origin.y()), 1);
|
||||||
|
node->modParam(static_cast<int>(bounds.width()), 2);
|
||||||
|
node->modParam(static_cast<int>(bounds.height()), 3);
|
||||||
|
|
||||||
|
if(!bitmap)
|
||||||
|
node->modParam(QVariant(), 4);
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,11 +31,13 @@
|
||||||
#include "devicestate.h"
|
#include "devicestate.h"
|
||||||
#include "skin_parser.h"
|
#include "skin_parser.h"
|
||||||
|
|
||||||
|
class ParseTreeNode;
|
||||||
|
|
||||||
class RBProgressBar : public RBMovable
|
class RBProgressBar : public RBMovable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RBProgressBar(RBViewport* parent, const RBRenderInfo& info,
|
RBProgressBar(RBViewport* parent, const RBRenderInfo& info,
|
||||||
int paramCount, skin_tag_parameter* params, bool pv = 0);
|
ParseTreeNode* node, bool pv = 0);
|
||||||
virtual ~RBProgressBar();
|
virtual ~RBProgressBar();
|
||||||
|
|
||||||
QRectF boundingRect() const;
|
QRectF boundingRect() const;
|
||||||
|
@ -49,6 +51,9 @@ private:
|
||||||
QPixmap* bitmap;
|
QPixmap* bitmap;
|
||||||
QColor color;
|
QColor color;
|
||||||
QRectF size;
|
QRectF size;
|
||||||
|
QRectF renderSize;
|
||||||
|
|
||||||
|
ParseTreeNode* node;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -682,16 +682,14 @@ bool ParseTreeNode::execTag(const RBRenderInfo& info, RBViewport* viewport)
|
||||||
{
|
{
|
||||||
case 'b':
|
case 'b':
|
||||||
/* %pb */
|
/* %pb */
|
||||||
new RBProgressBar(viewport, info, element->params_count,
|
new RBProgressBar(viewport, info, this);
|
||||||
element->params);
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case 'v':
|
case 'v':
|
||||||
/* %pv */
|
/* %pv */
|
||||||
if(element->params_count > 0)
|
if(element->params_count > 0)
|
||||||
{
|
{
|
||||||
new RBProgressBar(viewport, info, element->params_count,
|
new RBProgressBar(viewport, info, this, true);
|
||||||
element->params, true);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1075,8 +1073,24 @@ void ParseTreeNode::modParam(QVariant value, int index)
|
||||||
{
|
{
|
||||||
if(element)
|
if(element)
|
||||||
{
|
{
|
||||||
if(index < 0 || index >= children.count())
|
if(index < 0)
|
||||||
return;
|
return;
|
||||||
|
while(index >= children.count())
|
||||||
|
{
|
||||||
|
/* Padding children with defaults until we make the necessary
|
||||||
|
* parameter available
|
||||||
|
*/
|
||||||
|
skin_tag_parameter* newParam = new skin_tag_parameter;
|
||||||
|
newParam->type = skin_tag_parameter::DEFAULT;
|
||||||
|
/* We'll need to manually delete the extra parameters in the
|
||||||
|
* destructor
|
||||||
|
*/
|
||||||
|
extraParams.append(children.count());
|
||||||
|
|
||||||
|
children.append(new ParseTreeNode(newParam, this, model));
|
||||||
|
element->params_count++;
|
||||||
|
}
|
||||||
|
|
||||||
children[index]->modParam(value);
|
children[index]->modParam(value);
|
||||||
}
|
}
|
||||||
else if(param)
|
else if(param)
|
||||||
|
|
|
@ -88,6 +88,8 @@ private:
|
||||||
|
|
||||||
ParseTreeModel* model;
|
ParseTreeModel* model;
|
||||||
|
|
||||||
|
QList<int> extraParams;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // PARSETREENODE_H
|
#endif // PARSETREENODE_H
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue