X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/d6f6602d7cea3a7899990fe79216af7d98d05917..3bad22d5566624804a73b3791980bab2d84c8266:/lib/gui/enumber.cpp diff --git a/lib/gui/enumber.cpp b/lib/gui/enumber.cpp index c03ec8f7..e69de29b 100644 --- a/lib/gui/enumber.cpp +++ b/lib/gui/enumber.cpp @@ -1,447 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -void eNumber::unpack(__u32 l, int *t) -{ - for (int i=0; i<4; i++) - *t++=(l>>((3-i)*8))&0xFF; -} - -void eNumber::pack(__u32 &l, int *t) -{ - l=0; - for (int i=0; i<4; i++) - l|=(*t++)<<((3-i)*8); -} - -eRect eNumber::getNumberRect(int n) -{ - if (deco_selected && have_focus) - return eRect( deco_selected.borderLeft + n * space_selected, deco_selected.borderTop, dspace, crect_selected.height() ); - else if (deco) - return eRect( deco.borderLeft + n * dspace, deco.borderTop, dspace, crect.height() ); - else - return eRect( n * dspace, 0, dspace, height() ); -} - -void eNumber::redrawNumber(gPainter *p, int n, const eRect &area) -{ - eRect pos = getNumberRect(n); - - if (!area.contains(pos) ) - return; - - p->setForegroundColor((have_focus && n==active)?cursorB:normalB); - p->fill(pos); - p->setFont(font); - - eString t; - if (flags & flagFillWithZeros || ( (flags & flagFixedNum) && n )) - { - eString s = "%0"+eString().setNum(maxdigits)+(base==10?"d":"X"); - const char* p = s.c_str(); - char* tmp = new char[10]; - strcpy( tmp, p ); - t.sprintf(tmp, number[n]); - delete [] tmp; - } - else - { - if (flags&flagHideInput) - t="*"; - else if (base==10) - t.sprintf("%d", number[n]); - else if (base==0x10) - t.sprintf("%X", number[n]); - } - - if (!n && flags & flagPosNeg && neg) - t="-"+t; - - if (n && (flags & flagTime)) - t=":"+t; - - else if (n && ( (flags & flagDrawPoints) || (flags & flagFixedNum)) ) - t="."+t; - - p->setForegroundColor((have_focus && n==active)?cursorF:normalF); - p->setBackgroundColor((have_focus && n==active)?cursorB:normalB); - - p->clip( pos ); - if (!n && len==2 && ((flags & flagFixedNum) || (flags & flagTime)) ) // first element... - { - eTextPara *para = new eTextPara( pos ); - para->setFont( font ); - para->renderString( t ); - para->realign( eTextPara::dirRight ); - p->renderPara( *para ); - para->destroy(); - } - else - p->renderText(pos, t); - - p->clippop(); -} - -double eNumber::getFixedNum() -{ - if (flags & flagFixedNum) - { - if (flags&flagPosNeg && neg) - { - double d = -((double)number[0]+(double)number[1]/1000); - eDebug("getFixedNum %lf", d); - return d; - } - else - { - float d = (double)number[0]+(double)number[1]/1000; - eDebug("getFixedNum %lf", d); - return d; - } - } - else - return 0; -} - -void eNumber::setFixedNum(double d) -{ - eDebug("setFixedNum %lf", d); - if (flags & flagPosNeg) - neg=d<0; - else - neg=0; - - d=fabs(d); - - if (flags & flagFixedNum) - { - number[0]=(int)d; - number[1]=(int)round(( ( d - number[0] ) * 1000) ); - } - else - eDebug("eNumber bug... the Number %s is not a fixed Point number", name.c_str()); -} - -void eNumber::redrawWidget(gPainter *p, const eRect &area) -{ - for (int i=0; ieventHandler(event); -#endif - switch (event.type) - { - case eWidgetEvent::changedSize: - if (deco) - dspace = (crect.width()) / len; - else - dspace = (size.width()) / len; - if (deco_selected) - space_selected = (crect_selected.width()) / len; - break; - case eWidgetEvent::evtAction: - if ( len > 1 && event.action == &i_cursorActions->left) - { - int oldac=active; - active--; - invalidate(getNumberRect(oldac)); - if (active<0) - active=len-1; - if (active!=oldac) - invalidate(getNumberRect(active)); - digit=0; - } else if ( len > 1 && (event.action == &i_cursorActions->right) || (event.action == &i_cursorActions->ok)) - { - int oldac=active; - active++; - invalidate(getNumberRect(oldac)); - if (active>=len) - { - if (event.action == &i_cursorActions->ok) - /*emit*/ selected(number); - active=0; - } - if (active!=oldac) - invalidate(getNumberRect(active)); - digit=0; - } else - break; - return 1; - default: - break; - } - return eDecoWidget::eventHandler(event); -} - -// isactive is the digit (always in the first field ) -// that ist active after get the first focus ! - -eNumber::eNumber(eWidget *parent, int _len, int _min, int _max, int _maxdigits, int *init, int isactive, eWidget* descr, int grabfocus, const char *deco) - :eDecoWidget(parent, grabfocus, deco ), - active(0), - cursorB(eSkin::getActive()->queryScheme("global.selected.background")), - cursorF(eSkin::getActive()->queryScheme("global.selected.foreground")), - normalB(eSkin::getActive()->queryScheme("global.normal.background")), - normalF(eSkin::getActive()->queryScheme("global.normal.foreground")), - have_focus(0), digit(isactive), isactive(isactive), flags(0), descr(descr), tmpDescr(0), - neg(false) -{ - setNumberOfFields(_len); - setLimits(_min, _max); - setMaximumDigits(_maxdigits); - setBase(10); - for (int i=0; init && imap); -} - -eNumber::~eNumber() -{ -} - -int eNumber::keyDown(int key) -{ -#ifndef DISABLE_LCD - if (LCDTmp) - ((eNumber*) LCDTmp)->keyDown(key); -#endif - switch (key) - { - case eRCInput::RC_0 ... eRCInput::RC_9: - { - int nn=(digit!=0)?number[active]*10:0; - nn+=key-eRCInput::RC_0; - if (flags & flagTime) - { - if ( active ) - max = 59; - else - max = 23; - } - else if (flags & flagFixedNum) - { - if (active) - max=999; - else - max=oldmax; - } - if (nn>=min && nn<=max) - { - number[active]=nn; - invalidate(getNumberRect(active)); - digit++; - if ((digit>=maxdigits) || (nn==0)) - { - active++; - invalidate(getNumberRect(active-1)); - digit=0; - /*emit*/ numberChanged(); - if (active>=len) - { - /*emit*/ selected(number); - active=0; - } - else - invalidate(getNumberRect(active)); - } - } - break; - - break; - } - case eRCInput::RC_PLUS: - if (flags & flagPosNeg && neg ) - { - neg=false; - invalidate(getNumberRect(0)); - } - break; - - case eRCInput::RC_MINUS: - if (flags & flagPosNeg && !neg ) - { - neg=true; - invalidate(getNumberRect(0)); - } - default: - return 0; - } - return 1; -} - -void eNumber::gotFocus() -{ - have_focus++; - digit=isactive; - - if (deco && deco_selected) - invalidate(); - else - invalidate(getNumberRect(active)); - -#ifndef DISABLE_LCD - if (parent && parent->LCDElement) // detect if LCD Avail - { - LCDTmp = new eNumber(parent->LCDElement, len, min, max, maxdigits, &(number[0]), isactive, 0, 0); - LCDTmp->hide(); - ((eNumber*)LCDTmp)->setFlags(flags); - eSize s = parent->LCDElement->getSize(); - - if (descr) - { - LCDTmp->move(ePoint(0,s.height()/2)); - LCDTmp->resize(eSize(s.width(), s.height()/2)); - tmpDescr = new eLabel(parent->LCDElement); - tmpDescr->hide(); - tmpDescr->move(ePoint(0,0)); - tmpDescr->resize(eSize(s.width(), s.height()/2)); - tmpDescr->setText(descr->getText()); - tmpDescr->show(); - } - else - { - LCDTmp->resize(s); - LCDTmp->move(ePoint(0,0)); - } - ((eNumber*)LCDTmp)->digit=digit; - ((eNumber*)LCDTmp)->active=active; - ((eNumber*)LCDTmp)->normalF=255; - ((eNumber*)LCDTmp)->normalB=0; - ((eNumber*)LCDTmp)->cursorF=0; - ((eNumber*)LCDTmp)->cursorB=255; - ((eNumber*)LCDTmp)->have_focus=1; - LCDTmp->show(); - } - #endif //DISABLE_LCD -} - -void eNumber::lostFocus() -{ -#ifndef DISABLE_LCD - if (LCDTmp) - { - delete LCDTmp; - LCDTmp=0; - if (tmpDescr) - { - delete tmpDescr; - tmpDescr=0; - } - } -#endif - have_focus--; - - if (deco && deco_selected) - invalidate(); - else - invalidate(getNumberRect(active)); - isactive=0; -} - -void eNumber::setNumber(int f, int n) -{ - if (flags & flagPosNeg) - { - if(!f && n<0) - neg=true; - else - neg=false; - } - else - neg=false; - - if ((f>=0) && (f 16) - n=16; - maxdigits=n; - if (digit >= maxdigits) - digit=0; -} - -void eNumber::setFlags(int _flags) -{ - if (flags&flagFixedNum) - len=2; - - flags=_flags; -} - -void eNumber::setBase(int _base) -{ - base=_base; -} - -void eNumber::setNumber(int n) -{ - if ( flags&flagPosNeg ) - neg = n < 0; - else - neg=0; - - if( len == 1 ) - number[0]=abs(n); - else - for (int i=len-1; i>=0; --i) - { - number[i]=n%base; - n/=base; - } - invalidateNum(); -} - -int eNumber::getNumber() -{ - int n=0; - for (int i=0; i