summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Bieber <robby@bieberphoto.com>2010-07-02 00:20:36 +0000
committerRobert Bieber <robby@bieberphoto.com>2010-07-02 00:20:36 +0000
commit9742704070732aeaa9fa1287045a682db5cf4527 (patch)
treef459140aa86f7e61e574912fdba80241641feded
parent5633ece5a85a933a45de3896eb52bb3804849c3b (diff)
downloadrockbox-9742704070732aeaa9fa1287045a682db5cf4527.tar.gz
rockbox-9742704070732aeaa9fa1287045a682db5cf4527.zip
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
-rw-r--r--lib/skin_parser/tag_table.c2
-rw-r--r--utils/themeeditor/graphics/rbprogressbar.cpp106
-rw-r--r--utils/themeeditor/graphics/rbprogressbar.h51
-rw-r--r--utils/themeeditor/graphics/rbviewport.h4
-rw-r--r--utils/themeeditor/models/parsetreenode.cpp13
-rw-r--r--utils/themeeditor/themeeditor.pro6
6 files changed, 179 insertions, 3 deletions
diff --git a/lib/skin_parser/tag_table.c b/lib/skin_parser/tag_table.c
index 125b9a6492..0cd4b63fd8 100644
--- a/lib/skin_parser/tag_table.c
+++ b/lib/skin_parser/tag_table.c
@@ -124,7 +124,7 @@ struct tag_info legal_tags[] =
{ SKIN_TOKEN_PEAKMETER, "pm", "" },
{ SKIN_TOKEN_PLAYER_PROGRESSBAR, "pf", "" },
- { SKIN_TOKEN_PROGRESSBAR, "pb" , BAR_PARAMS },
+ { SKIN_TOKEN_PROGRESSBAR, "pb" , "*|iiiis" },
{ SKIN_TOKEN_VOLUME, "pv" , BAR_PARAMS },
{ SKIN_TOKEN_TRACK_ELAPSED_PERCENT, "px", "" },
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 <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 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 <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 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 <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 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 \