aboutsummaryrefslogtreecommitdiff
path: root/lib/gui/eprogress.cpp
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2003-10-17 15:35:43 +0000
committerFelix Domke <tmbinc@elitedvb.net>2003-10-17 15:35:43 +0000
commitfc2f5b2cd655f1391f2abda1b39e37cdec98a951 (patch)
tree312efcea86a319de407a7c314fb981fb1c71019a /lib/gui/eprogress.cpp
downloadenigma2-fc2f5b2cd655f1391f2abda1b39e37cdec98a951.tar.gz
enigma2-fc2f5b2cd655f1391f2abda1b39e37cdec98a951.zip
Initial revision
Diffstat (limited to 'lib/gui/eprogress.cpp')
-rw-r--r--lib/gui/eprogress.cpp136
1 files changed, 136 insertions, 0 deletions
diff --git a/lib/gui/eprogress.cpp b/lib/gui/eprogress.cpp
new file mode 100644
index 00000000..3528929e
--- /dev/null
+++ b/lib/gui/eprogress.cpp
@@ -0,0 +1,136 @@
+#include <lib/gui/eprogress.h>
+
+#include <stdlib.h>
+
+#include <lib/gdi/erect.h>
+#include <lib/gdi/fb.h>
+#include <lib/gdi/lcd.h>
+#include <lib/gui/eskin.h>
+#include <lib/base/init.h>
+#include <lib/base/init_num.h>
+
+eProgress::eProgress(eWidget *parent, int takefocus)
+ : eWidget(parent, takefocus)
+{
+ left=eSkin::getActive()->queryScheme("eProgress.left");
+ right=eSkin::getActive()->queryScheme("eProgress.right");
+ perc=start=0;
+ border=2;
+ direction=0;
+ setForegroundColor(eSkin::getActive()->queryScheme("eProgress.border"));
+}
+
+eProgress::~eProgress()
+{
+}
+
+void eProgress::setPerc(int p)
+{
+ if (perc != p)
+ {
+ perc=p;
+ invalidate();
+ }
+}
+
+void eProgress::setStart(int p)
+{
+ if (start != p)
+ {
+ start=p;
+ invalidate();
+ }
+}
+
+void eProgress::redrawWidget(gPainter *target, const eRect &area)
+{
+ // border malen
+ target->setForegroundColor(getForegroundColor());
+ target->fill(eRect(0, 0, size.width(), border));
+ target->fill(eRect(0, border, border, size.height()-border));
+ target->fill(eRect(border, size.height()-border, size.width()-border, border));
+ target->fill(eRect(size.width()-border, border, border, size.height()-border));
+
+ switch (direction)
+ {
+ case 0:
+ {
+ int st=start*(size.width()-border*2)/100;
+ if (st<0)
+ st=0;
+ if (st>(size.width()-border*2))
+ st=size.width()-border*2;
+
+ int dh=perc*(size.width()-border*2)/100;
+ if (dh<0)
+ dh=0;
+ if ((dh+st)>(size.width()-border*2))
+ dh=size.width()-border*2-st;
+
+ target->setForegroundColor(left);
+ target->fill(eRect(border+start, border, dh, size.height()-border*2));
+ target->setForegroundColor(right);
+ target->fill(eRect(border+dh+st, border, size.width()-border*2-dh-st, size.height()-border*2));
+ if (st)
+ target->fill(eRect(border, border, st, size.height()-border*2));
+ break;
+ }
+ case 1:
+ {
+ int st=start*(size.height()-border*2)/100;
+ if (st<0)
+ st=0;
+ if (st>(size.height()-border*2))
+ st=size.height()-border*2;
+
+ int dh=perc*(size.height()-border*2)/100;
+ if (dh<0)
+ dh=0;
+ if ((dh+st)>(size.height()-border*2))
+ dh=size.height()-border*2-st;
+
+ target->setForegroundColor(left);
+ target->fill(eRect(border, border+st, size.width()-border*2, dh));
+ target->setForegroundColor(right);
+ target->fill(eRect(border, border+dh+st, size.width()-border*2, size.height()-border*2-dh-st));
+ if (st)
+ target->fill(eRect(border, border, size.width()-border*2, st));
+ break;
+ }
+ }
+}
+
+int eProgress::setProperty(const eString &prop, const eString &value)
+{
+ if (prop=="leftColor")
+ left=eSkin::getActive()->queryColor(value);
+ else if (prop=="rightColor")
+ right=eSkin::getActive()->queryColor(value);
+ else if (prop=="border")
+ border=atoi(value.c_str());
+ else if (prop=="direction")
+ direction=atoi(value.c_str());
+ else
+ return eWidget::setProperty(prop, value);
+ return 0;
+}
+
+static eWidget *create_eProgress(eWidget *parent)
+{
+ return new eProgress(parent);
+}
+
+class eProgressSkinInit
+{
+public:
+ eProgressSkinInit()
+ {
+ eSkin::addWidgetCreator("eProgress", create_eProgress);
+ }
+ ~eProgressSkinInit()
+ {
+ eSkin::removeWidgetCreator("eProgress", create_eProgress);
+ }
+};
+
+eAutoInitP0<eProgressSkinInit> init_eProgressSkinInit(eAutoInitNumbers::guiobject, "eProgress");