From fc2f5b2cd655f1391f2abda1b39e37cdec98a951 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Fri, 17 Oct 2003 15:35:43 +0000 Subject: Initial revision --- lib/gui/eprogress.cpp | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 lib/gui/eprogress.cpp (limited to 'lib/gui/eprogress.cpp') 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 + +#include + +#include +#include +#include +#include +#include +#include + +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 init_eProgressSkinInit(eAutoInitNumbers::guiobject, "eProgress"); -- cgit v1.2.3