aboutsummaryrefslogtreecommitdiff
path: root/lib/gui/ewindow.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/ewindow.cpp
downloadenigma2-fc2f5b2cd655f1391f2abda1b39e37cdec98a951.tar.gz
enigma2-fc2f5b2cd655f1391f2abda1b39e37cdec98a951.zip
Initial revision
Diffstat (limited to 'lib/gui/ewindow.cpp')
-rw-r--r--lib/gui/ewindow.cpp160
1 files changed, 160 insertions, 0 deletions
diff --git a/lib/gui/ewindow.cpp b/lib/gui/ewindow.cpp
new file mode 100644
index 00000000..de7fe3db
--- /dev/null
+++ b/lib/gui/ewindow.cpp
@@ -0,0 +1,160 @@
+#include <lib/gui/ewindow.h>
+#include <lib/gdi/grc.h>
+#include <lib/gui/eskin.h>
+#include <lib/base/init.h>
+#include <lib/base/init_num.h>
+#include <lib/gdi/epng.h>
+#include <lib/gui/elabel.h>
+#include <lib/gui/guiactions.h>
+#include <lib/gdi/font.h>
+
+int eWindow::globCancel = eWindow::ON;
+
+eWindow::eWindow(int takefocus)
+ :eWidget(0, takefocus)
+{
+ deco.load("eWindow");
+
+ titleBarColor=eSkin::getActive()->queryScheme("eWindow.titleBar");
+ fontColor=eSkin::getActive()->queryScheme("eWindow.titleBarFont");
+
+ borderLeft=eSkin::getActive()->queryValue("eWindow.borderLeft", deco.borderLeft);
+ borderRight=eSkin::getActive()->queryValue("eWindow.borderRight", deco.borderRight);
+ borderBottom=eSkin::getActive()->queryValue("eWindow.borderBottom", deco.borderBottom);
+ borderTop=eSkin::getActive()->queryValue("eWindow.borderTop", deco.borderTop );
+
+ titleOffsetLeft=eSkin::getActive()->queryValue("eWindow.titleOffsetLeft", 0);
+ titleOffsetRight=eSkin::getActive()->queryValue("eWindow.titleOffsetRight", 0);
+ titleOffsetTop=eSkin::getActive()->queryValue("eWindow.titleOffsetTop", 0);
+ titleHeight=eSkin::getActive()->queryValue("eWindow.titleHeight", titleFontSize+10);
+ titleFontSize=eSkin::getActive()->queryValue("eWindow.titleFontSize", 20);
+
+ font = eSkin::getActive()->queryFont("eWindow.Childs");
+
+ addActionMap(&i_cursorActions->map);
+}
+
+eWindow::~eWindow()
+{
+}
+
+eRect eWindow::getTitleBarRect()
+{
+ eRect rc;
+ rc.setLeft( deco.borderLeft > titleOffsetLeft ? deco.borderLeft : titleOffsetLeft );
+ rc.setTop( titleOffsetTop );
+ rc.setRight( width() - ( deco.borderRight > titleOffsetRight ? deco.borderRight : titleOffsetRight ) );
+ rc.setBottom( rc.top() + (titleHeight?titleHeight:deco.borderTop) ); // deco.borderTop sucks...
+ return rc;
+}
+
+void eWindow::redrawWidget(gPainter *target, const eRect &where)
+{
+ if ( deco ) // then draw Deco
+ deco.drawDecoration(target, ePoint(width(), height()));
+ else
+ {
+ gColor border = eSkin::getActive()->queryColor("eWindow.border");
+ target->setForegroundColor(border);
+ target->line( ePoint(0,0), ePoint(0, height()) );
+ target->line( ePoint(0,0), ePoint(width(), 0) );
+ target->line( ePoint(width()-1,0), ePoint(width()-1, height()-1) );
+ target->line( ePoint(0,height()-1), ePoint(width()-1, height()-1) );
+ }
+ drawTitlebar(target);
+}
+
+void eWindow::eraseBackground(gPainter *target, const eRect &clip)
+{
+ target->clip(getClientRect());
+ target->clear();
+ target->clippop();
+}
+
+void eWindow::drawTitlebar(gPainter *target)
+{
+ eRect rc = getTitleBarRect();
+ target->clip( rc );
+ if ( titleHeight )
+ {
+ target->setForegroundColor(titleBarColor);
+ target->fill( rc );
+ }
+ rc.setWidth(rc.width()-10);
+ eTextPara *p = new eTextPara( rc );
+ p->setFont( eSkin::getActive()->queryFont("eWindow.TitleBar") );
+ p->renderString( text );
+ target->setBackgroundColor(titleBarColor);
+ target->setForegroundColor(fontColor);
+ target->renderPara( *p );
+ p->destroy();
+ target->clippop();
+}
+
+void eWindow::recalcClientRect()
+{
+ clientrect=eRect( borderLeft, borderTop, width() - (borderLeft+borderRight), height() - ( borderTop+borderBottom) );
+}
+
+int eWindow::eventHandler(const eWidgetEvent &event)
+{
+ switch (event.type)
+ {
+ case eWidgetEvent::willShow:
+ if (focus)
+ focusChanged( focus );
+ break;
+ case eWidgetEvent::changedText:
+ {
+ redraw(getTitleBarRect());
+ return 1;
+ }
+
+ case eWidgetEvent::evtAction:
+ if (globCancel && (event.action == &i_cursorActions->cancel) && in_loop) // hack
+ {
+ close(-1);
+ return eWidget::eventHandler(event);
+ }
+ else
+ break;
+ return 1;
+ default:
+ break;
+ }
+ return eWidget::eventHandler(event);
+}
+
+void eWindow::willShow()
+{
+#ifndef DISABLE_LCD
+ if (LCDTitle)
+ LCDTitle->setText(text);
+#endif
+ eWidget::willShow();
+}
+
+void eWindow::willHide()
+{
+ eWidget::willHide();
+}
+
+static eWidget *create_eWindow(eWidget *parent)
+{
+ return new eWindow();
+}
+
+class eWindowSkinInit
+{
+public:
+ eWindowSkinInit()
+ {
+ eSkin::addWidgetCreator("eWindow", create_eWindow);
+ }
+ ~eWindowSkinInit()
+ {
+ eSkin::removeWidgetCreator("eWindow", create_eWindow);
+ }
+};
+
+eAutoInitP0<eWindowSkinInit> init_eWindowSkinInit(eAutoInitNumbers::guiobject, "eWindow");