diff options
| author | Robert Bieber <robby@bieberphoto.com> | 2010-07-02 00:20:36 +0000 |
|---|---|---|
| committer | Robert Bieber <robby@bieberphoto.com> | 2010-07-02 00:20:36 +0000 |
| commit | 9742704070732aeaa9fa1287045a682db5cf4527 (patch) | |
| tree | f459140aa86f7e61e574912fdba80241641feded /utils/themeeditor | |
| parent | 5633ece5a85a933a45de3896eb52bb3804849c3b (diff) | |
| download | rockbox-9742704070732aeaa9fa1287045a682db5cf4527.zip rockbox-9742704070732aeaa9fa1287045a682db5cf4527.tar.gz rockbox-9742704070732aeaa9fa1287045a682db5cf4527.tar.bz2 rockbox-9742704070732aeaa9fa1287045a682db5cf4527.tar.xz | |
Theme Editor: Altered tag table entry for %pb to make image optional, implemented progress bar rendering in theme editor
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27229 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'utils/themeeditor')
| -rw-r--r-- | utils/themeeditor/graphics/rbprogressbar.cpp | 106 | ||||
| -rw-r--r-- | utils/themeeditor/graphics/rbprogressbar.h | 51 | ||||
| -rw-r--r-- | utils/themeeditor/graphics/rbviewport.h | 4 | ||||
| -rw-r--r-- | utils/themeeditor/models/parsetreenode.cpp | 13 | ||||
| -rw-r--r-- | utils/themeeditor/themeeditor.pro | 6 |
5 files changed, 178 insertions, 2 deletions
diff --git a/utils/themeeditor/graphics/rbprogressbar.cpp b/utils/themeeditor/graphics/rbprogressbar.cpp new file mode 100644 index 0000000..1c14acf --- /dev/null +++ b/utils/themeeditor/graphics/rbprogressbar.cpp @@ -0,0 +1,106 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2010 Robert Bieber + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include <QPainter> + +#include "rbprogressbar.h" +#include "projectmodel.h" + +RBProgressBar::RBProgressBar(RBViewport *parent, const RBRenderInfo &info, + int paramCount, skin_tag_parameter *params) + :QGraphicsItem(parent) +{ + /* First we set everything to defaults */ + bitmap = 0; + color = parent->getFGColor(); + int x = 0; + int y = parent->getTextOffset(); + int w = parent->boundingRect().width(); + int h = 6; + + /* Now we change defaults if the parameters are there */ + + if(paramCount > 0 && params[0].type != skin_tag_parameter::DEFAULT) + { + x = params[0].data.numeric; + } + + if(paramCount > 1 && params[1].type != skin_tag_parameter::DEFAULT) + { + y = params[1].data.numeric; + } + + if(paramCount > 2 && params[2].type != skin_tag_parameter::DEFAULT) + { + w = params[2].data.numeric; + } + + if(paramCount > 3 && params[3].type != skin_tag_parameter::DEFAULT) + { + h = params[3].data.numeric; + } + + if(paramCount > 4 && params[4].type != skin_tag_parameter::DEFAULT) + { + QString imPath(params[4].data.text); + imPath = info.settings()->value("imagepath", "") + "/" + imPath; + bitmap = new QPixmap(imPath); + if(bitmap->isNull()) + { + delete bitmap; + bitmap = 0; + } + } + + + /* Finally, we scale the width according to the amount played */ + int percent = info.device()->data("px").toInt(); + w = w * percent / 100; + + size = QRectF(0, 0, w, h); + setPos(x, y); + parent->addTextOffset(h); +} + +RBProgressBar::~RBProgressBar() +{ + if(bitmap) + delete bitmap; +} + +QRectF RBProgressBar::boundingRect() const +{ + return size; +} + +void RBProgressBar::paint(QPainter *painter, + const QStyleOptionGraphicsItem *option, + QWidget *widget) +{ + if(bitmap && !bitmap->isNull()) + { + painter->drawPixmap(size, *bitmap, size); + } + else + { + painter->fillRect(size, color); + } +} diff --git a/utils/themeeditor/graphics/rbprogressbar.h b/utils/themeeditor/graphics/rbprogressbar.h new file mode 100644 index 0000000..edcdd01 --- /dev/null +++ b/utils/themeeditor/graphics/rbprogressbar.h @@ -0,0 +1,51 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2010 Robert Bieber + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#ifndef RBPROGRESSBAR_H +#define RBPROGRESSBAR_H + +#include <QGraphicsItem> +#include <QPixmap> + +#include "rbrenderinfo.h" +#include "rbviewport.h" +#include "devicestate.h" +#include "skin_parser.h" + +class RBProgressBar : public QGraphicsItem +{ +public: + RBProgressBar(RBViewport* parent, const RBRenderInfo& info, + int paramCount, skin_tag_parameter* params); + virtual ~RBProgressBar(); + + QRectF boundingRect() const; + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, + QWidget *widget); + +private: + QPixmap* bitmap; + QColor color; + QRectF size; + +}; + +#endif // RBPROGRESSBAR_H diff --git a/utils/themeeditor/graphics/rbviewport.h b/utils/themeeditor/graphics/rbviewport.h index 70f5223..624a968 100644 --- a/utils/themeeditor/graphics/rbviewport.h +++ b/utils/themeeditor/graphics/rbviewport.h @@ -49,13 +49,17 @@ public: QWidget *widget); void setBGColor(QColor color){ background = color; } + QColor getBGColor(){ return background; } void setFGColor(QColor color){ foreground = color; } + QColor getFGColor(){ return foreground; } void makeCustomUI(){ customUI = true; } void clearCustomUI(){ customUI = false; } void newLine(); void write(QString text); void alignText(Alignment align){ textAlign = align; } + int getTextOffset(){ return textOffset.y(); } + void addTextOffset(int height){ textOffset.setY(textOffset.y() + height); } void enableStatusBar(){ showStatusBar = true; } diff --git a/utils/themeeditor/models/parsetreenode.cpp b/utils/themeeditor/models/parsetreenode.cpp index e61c655..08ce703 100644 --- a/utils/themeeditor/models/parsetreenode.cpp +++ b/utils/themeeditor/models/parsetreenode.cpp @@ -26,6 +26,7 @@ #include "parsetreemodel.h" #include "rbimage.h" +#include "rbprogressbar.h" #include <iostream> @@ -611,6 +612,18 @@ bool ParseTreeNode::execTag(const RBRenderInfo& info, RBViewport* viewport) return false; + case 'p': + switch(element->tag->name[1]) + { + case 'b': + /* %pb */ + new RBProgressBar(viewport, info, element->params_count, + element->params); + return true; + } + + return false; + case 'w': switch(element->tag->name[1]) { diff --git a/utils/themeeditor/themeeditor.pro b/utils/themeeditor/themeeditor.pro index 1e66faf..14fa73c 100644 --- a/utils/themeeditor/themeeditor.pro +++ b/utils/themeeditor/themeeditor.pro @@ -44,7 +44,8 @@ HEADERS += models/parsetreemodel.h \ gui/devicestate.h \ findreplace/findreplaceform.h \ findreplace/findreplacedialog.h \ - graphics/rbalbumart.h + graphics/rbalbumart.h \ + graphics/rbprogressbar.h SOURCES += main.cpp \ models/parsetreemodel.cpp \ models/parsetreenode.cpp \ @@ -64,7 +65,8 @@ SOURCES += main.cpp \ gui/devicestate.cpp \ findreplace/findreplaceform.cpp \ findreplace/findreplacedialog.cpp \ - graphics/rbalbumart.cpp + graphics/rbalbumart.cpp \ + graphics/rbprogressbar.cpp OTHER_FILES += README \ resources/windowicon.png \ resources/appicon.xcf \ |