1 #include <lib/gui/echeckbox.h>
3 #include <lib/gdi/font.h>
4 #include <lib/base/init.h>
5 #include <lib/base/init_num.h>
6 #include <lib/gui/eskin.h>
8 eCheckbox::eCheckbox(eWidget *parent, int checked, int takefocus, bool swapTxtPixmap, const char *deco)
9 :eButton(parent, 0, takefocus, deco), swapTxtPixmap(swapTxtPixmap)
11 align=eTextPara::dirLeft;
14 CONNECT(selected, eCheckbox::sel);
17 eCheckbox::~eCheckbox()
23 setCheck(ischecked?0:1);
24 /*emit*/ checked(ischecked);
27 void eCheckbox::gotFocus()
30 if (parent && parent->LCDElement)
32 LCDTmp = new eLabel(parent->LCDElement);
34 eSize s = parent->LCDElement->getSize();
35 LCDTmp->move(ePoint(0,0));
36 LCDTmp->resize(eSize(s.width(), s.height()));
37 ((eLabel*)LCDTmp)->setFlags(RS_WRAP);
39 eSkin::getActive()->queryImage(pm, ischecked?"eCheckboxLCD.checked":"eCheckboxLCD.unchecked");
40 LCDTmp->setPixmap(pm);
41 ((eLabel*)LCDTmp)->pixmap_position=ePoint(0, (size.height()-15)/2);
42 ((eLabel*)LCDTmp)->text_position=ePoint(21, 0);
43 LCDTmp->setText(text);
47 setForegroundColor(focusF, false);
48 setBackgroundColor(focusB);
52 void eCheckbox::lostFocus()
65 void eCheckbox::setCheck(int c)
67 if (ischecked != -1 && ischecked == c)
73 eSkin::getActive()->queryImage(pixmap, ischecked?"eCheckbox.checked":"eCheckbox.unchecked");
76 eSkin::getActive()->queryImage(pixmap, ischecked?"eCheckboxLCD.checked":"eCheckboxLCD.unchecked");
78 LCDTmp->setPixmap(pixmap);
82 int eCheckbox::setProperty(const eString &prop, const eString &value)
84 if (prop=="swaptxtpixmap")
86 swapTxtPixmap = (value != "off");
87 event( eWidgetEvent::changedSize );
90 return eButton::setProperty(prop, value);
94 int eCheckbox::eventHandler(const eWidgetEvent &event)
98 case eWidgetEvent::changedSize:
101 text_position=ePoint(0,0);
102 eLabel::invalidate();
104 pixmap_position=ePoint( para->getBoundBox().right()+5, (size.height()-pixmap->y) / 2 );
108 pixmap_position=ePoint(0, (size.height()-pixmap->y)/2);
109 text_position=ePoint((int)(pixmap->x*1.25), 0);
111 //return eButton::eventHandler(event); // changed Size must seen by eLabel...
115 return eButton::eventHandler(event);
120 static eWidget *create_eCheckbox(eWidget *parent)
122 return new eCheckbox(parent);
125 class eCheckboxSkinInit
130 eSkin::addWidgetCreator("eCheckbox", create_eCheckbox);
134 eSkin::removeWidgetCreator("eCheckbox", create_eCheckbox);
138 eAutoInitP0<eCheckboxSkinInit> init_eCheckboxSkinInit(eAutoInitNumbers::guiobject, "eCheckbox");