From 9742704070732aeaa9fa1287045a682db5cf4527 Mon Sep 17 00:00:00 2001 From: Robert Bieber Date: Fri, 2 Jul 2010 00:20:36 +0000 Subject: 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 --- utils/themeeditor/graphics/rbprogressbar.cpp | 106 +++++++++++++++++++++++++++ utils/themeeditor/graphics/rbprogressbar.h | 51 +++++++++++++ utils/themeeditor/graphics/rbviewport.h | 4 + utils/themeeditor/models/parsetreenode.cpp | 13 ++++ utils/themeeditor/themeeditor.pro | 6 +- 5 files changed, 178 insertions(+), 2 deletions(-) create mode 100644 utils/themeeditor/graphics/rbprogressbar.cpp create mode 100644 utils/themeeditor/graphics/rbprogressbar.h (limited to 'utils') diff --git a/utils/themeeditor/graphics/rbprogressbar.cpp b/utils/themeeditor/graphics/rbprogressbar.cpp new file mode 100644 index 0000000000..1c14acfc5a --- /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 + +#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 0000000000..edcdd01d6e --- /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 +#include + +#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 70f52232af..624a9686da 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 e61c6552e2..08ce703859 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 @@ -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 1e66faf88e..14fa73cc7d 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 \ -- cgit v1.2.3