FX::FXRealSpinDial Class Reference

#include <FXRealSpinDial.h>

Inheritance diagram for FX::FXRealSpinDial:

FXPacker

Detailed Description

Spinner control.

Definition at line 70 of file FXRealSpinDial.h.


Public Types

enum  {
  ID_DIAL = FXPacker::ID_LAST, ID_INCREMENT, ID_DECREMENT, ID_ENTRY,
  ID_LAST
}

Public Member Functions

virtual void create ()
 Create server-side resources.
void decrement (FXint incMode=SPINDIAL_INC_NORMAL)
 Decrement spinner.
virtual void disable ()
 Disable spinner.
virtual void enable ()
 Enable spinner.
 FXRealSpinDial (FXComposite *p, FXint cols, FXObject *tgt=NULL, FXSelector sel=0, FXuint opts=SPINDIAL_NORMAL, FXint x=0, FXint y=0, FXint w=0, FXint h=0, FXint pl=DEFAULT_PAD, FXint pr=DEFAULT_PAD, FXint pt=DEFAULT_PAD, FXint pb=DEFAULT_PAD)
 Construct a spinner.
FXdouble getCoarseIncrement () const
 Return spinner increment.
FXColor getCursorColor () const
 Return the cursor color.
virtual FXint getDefaultHeight ()
 Return default height.
virtual FXint getDefaultWidth ()
 Return default width.
const FXDialgetDial () const
FXColor getDialColor () const
 Return color of the dial.
FXColor getDownArrowColor () const
 Return color of the the down arrow.
FXdouble getFineIncrement () const
 Return spinner increment.
FXFont * getFont () const
 Get the text font.
FXString getHelpText () const
 Get the status line help text for this spinner.
FXdouble getIncrement () const
 Return spinner increment.
FXbool getNumberFormatExponent () const
 Return whether the exponent is used in number display.
FXint getNumberFormatPrecision () const
 Return the digits of precision used to display numbers.
FXString getNumberFormatString () const
 Return the format string for number display.
void getRange (FXdouble &lo, FXdouble &hi) const
 Get the spinner's current range.
FXColor getSelBackColor () const
 Return selected background color.
FXColor getSelTextColor () const
 Return selected text color.
FXuint getSpinnerStyle () const
 Return current spinner style.
FXColor getTextColor () const
 Return text color.
FXString getTipText () const
 Get the tool tip message for this spinner.
FXColor getUpArrowColor () const
 Return color of the up arrow.
FXdouble getValue () const
 Return current value.
void increment (FXint incMode=SPINDIAL_INC_NORMAL)
 Increment spinner.
FXbool isCyclic () const
 Return TRUE if in cyclic mode.
FXbool isDialVisible () const
 Return TRUE if dial is visible.
FXbool isEditable () const
 Return TRUE if text field is editable.
FXbool isTextVisible () const
 Return TRUE if text is visible.
virtual void layout ()
 Perform layout.
virtual void load (FXStream &store)
 Load spinner from a stream.
long onChgDial (FXObject *, FXSelector, void *)
long onChgEntry (FXObject *, FXSelector, void *)
long onCmdDecrement (FXObject *, FXSelector, void *)
long onCmdDial (FXObject *, FXSelector, void *)
long onCmdEntry (FXObject *, FXSelector, void *)
long onCmdGetIntRange (FXObject *, FXSelector, void *)
long onCmdGetIntValue (FXObject *, FXSelector, void *)
long onCmdGetRealRange (FXObject *, FXSelector, void *)
long onCmdGetRealValue (FXObject *, FXSelector, void *)
long onCmdIncrement (FXObject *, FXSelector, void *)
long onCmdSetIntRange (FXObject *, FXSelector, void *)
long onCmdSetIntValue (FXObject *, FXSelector, void *)
long onCmdSetRealRange (FXObject *, FXSelector, void *)
long onCmdSetRealValue (FXObject *, FXSelector, void *)
long onCmdSetValue (FXObject *, FXSelector, void *)
long onKeyPress (FXObject *, FXSelector, void *)
long onKeyRelease (FXObject *, FXSelector, void *)
long onMotion (FXObject *, FXSelector, void *)
long onMouseWheel (FXObject *, FXSelector, void *)
long onUpdDecrement (FXObject *, FXSelector, void *)
long onUpdDial (FXObject *, FXSelector, void *)
long onUpdEntry (FXObject *, FXSelector, void *)
long onUpdIncrement (FXObject *, FXSelector, void *)
virtual void save (FXStream &store) const
 Save spinner to a stream.
void selectAll ()
 Mark the text entry as selected.
void setCoarseIncrement (FXdouble increment)
 Change spinner coarse adjustment increment (when SHIFT key held down).
void setCursorColor (FXColor clr)
 Changes the cursor color.
void setCyclic (FXbool cyclic)
 Set to cyclic mode, i.e. wrap around at maximum/minimum.
void setDialColor (FXColor clr)
 Change color of the dial.
void setDialVisible (FXbool shown)
 Set dial visible flag.
void setDownArrowColor (FXColor clr)
 Change color of the down arrow.
void setEditable (FXbool edit=TRUE)
 Allow editing of the text field.
void setFineIncrement (FXdouble increment)
 Change spinner fine adjustment increment (when CTRL key held down).
void setFont (FXFont *fnt)
 Set the text font.
void setFormatString (FXchar *fmt)
void setHelpText (const FXString &text)
 Set the status line help text for this spinner.
void setIncrement (FXdouble increment)
 Change spinner increment.
void setIncrements (FXdouble fine, FXdouble norm, FXdouble coarse)
 Change all spinner increment.
void setNumberFormat (FXint prec, FXbool bExp=FALSE)
void setRange (FXdouble lo, FXdouble hi)
 Change the spinner's range.
void setSelBackColor (FXColor clr)
 Change selected background color.
void setSelTextColor (FXColor clr)
 Change selected text color.
void setSpinnerStyle (FXuint style)
 Change spinner style.
void setTextColor (FXColor clr)
 Change text color.
void setTextVisible (FXbool shown)
 Set text visible flag.
void setTipText (const FXString &text)
 Set the tool tip message for this spinner.
void setUpArrowColor (FXColor clr)
 Change color of the up arrow.
virtual void setValue (FXdouble value)
 Change current value.
virtual ~FXRealSpinDial ()
 Destructor.

Protected Member Functions

 FXRealSpinDial ()

Protected Attributes

FXDialdial
FXint dialpos
FXArrowButtondownButton
FXdouble incr [3]
FXint keystate
FXdouble pos
FXdouble range [2]
FXRealSpinDialTexttextField
FXArrowButtonupButton

Private Member Functions

 FXRealSpinDial (const FXRealSpinDial &)
FXRealSpinDialoperator= (const FXRealSpinDial &)

Member Enumeration Documentation

anonymous enum

Enumerator:
ID_DIAL 
ID_INCREMENT 
ID_DECREMENT 
ID_ENTRY 
ID_LAST 

Definition at line 113 of file FXRealSpinDial.h.

00113          {
00114         ID_DIAL=FXPacker::ID_LAST,
00115         ID_INCREMENT,
00116         ID_DECREMENT,
00117         ID_ENTRY,
00118         ID_LAST
00119     };


Constructor & Destructor Documentation

FX::FXRealSpinDial::FXRealSpinDial (  )  [protected]

FX::FXRealSpinDial::FXRealSpinDial ( const FXRealSpinDial  )  [private]

FX::FXRealSpinDial::FXRealSpinDial ( FXComposite *  p,
FXint  cols,
FXObject tgt = NULL,
FXSelector  sel = 0,
FXuint  opts = SPINDIAL_NORMAL,
FXint  x = 0,
FXint  y = 0,
FXint  w = 0,
FXint  h = 0,
FXint  pl = DEFAULT_PAD,
FXint  pr = DEFAULT_PAD,
FXint  pt = DEFAULT_PAD,
FXint  pb = DEFAULT_PAD 
)

Construct a spinner.

Definition at line 437 of file FXRealSpinDial.cpp.

References dial, DIALINCR, dialpos, downButton, ID_DECREMENT, ID_DIAL, ID_ENTRY, ID_INCREMENT, incr, INTMAX, INTMIN, keystate, pos, range, FX::SPINDIAL_NOMAX, FX::SPINDIAL_NOMIN, textField, and upButton.

00437                                                                                                                                                                     :
00438         FXPacker(p,opts&~(FRAME_RIDGE),x,y,w,h,0,0,0,0,0,0) {
00439     flags=(flags|FLAG_ENABLED|FLAG_SHOWN)&~FLAG_UPDATE;
00440     target=tgt;
00441     message=sel;
00442     dial=new FXRealSpinDialDial(this,this,ID_DIAL,DIAL_VERTICAL, 0,0,0,0, 0,0,0,0);
00443     dial->setNotchSpacing(450);
00444     dial->setRevolutionIncrement(DIALINCR);
00445     upButton=new FXRealSpinDialBtn(this,this,ID_INCREMENT,FRAME_RAISED|FRAME_THICK|ARROW_UP|ARROW_REPEAT, 0,0,0,0, 0,0,0,0);
00446     downButton=new FXRealSpinDialBtn(this,this,ID_DECREMENT,FRAME_RAISED|FRAME_THICK|ARROW_DOWN|ARROW_REPEAT, 0,0,0,0, 0,0,0,0);
00447     textField=new FXRealSpinDialText(this,cols,this,ID_ENTRY,(opts&FRAME_RIDGE)|TEXTFIELD_REAL|JUSTIFY_RIGHT,0,0,0,0,pl,pr,pt,pb);
00448     textField->setText("0");
00449     range[0]=(options&SPINDIAL_NOMIN) ? -DBL_MAX : 0;
00450     range[1]=(options&SPINDIAL_NOMAX) ?  DBL_MAX : 100;
00451     dial->setRange(INTMIN,INTMAX);
00452     dialpos=dial->getValue();
00453     incr[0]=0.1;
00454     incr[1]=1.0;
00455     incr[2]=10;
00456     pos=0;
00457     keystate=0;
00458 }

FX::FXRealSpinDial::~FXRealSpinDial (  )  [virtual]

Destructor.

Definition at line 1142 of file FXRealSpinDial.cpp.

References dial, downButton, textField, and upButton.

01142                                 {
01143     textField=(FXRealSpinDialText*)-1L;
01144     dial=(FXDial*)-1L;
01145     upButton=(FXRealSpinDialBtn*)-1L;
01146     downButton=(FXRealSpinDialBtn*)-1L;
01147 }


Member Function Documentation

void FX::FXRealSpinDial::create (  )  [virtual]

Create server-side resources.

Definition at line 476 of file FXRealSpinDial.cpp.

00476                             {
00477     FXPacker::create();
00478 }

void FX::FXRealSpinDial::decrement ( FXint  incMode = SPINDIAL_INC_NORMAL  ) 

Decrement spinner.

Definition at line 848 of file FXRealSpinDial.cpp.

References incr, pos, range, setValue(), FX::SPINDIAL_CYCLIC, and FX::SPINDIAL_LOG.

Referenced by onCmdDecrement(), onKeyPress(), and onMouseWheel().

00848                                             {
00849     FXdouble inc = incr[incMode+1];
00850     FXdouble newpos;
00851     if (range[0]<range[1]) {
00852         if (options&SPINDIAL_LOG) {
00853             newpos = pos / inc;
00854             if (options&SPINDIAL_CYCLIC  && newpos<range[0]) {
00855                 // can have a huge magnitude disparity here, so better to work in log space
00856                 FXdouble lr0=log(range[0]), lr1=log(range[1]), lnp=log(newpos), lpos=log(pos);
00857                 FXdouble span=lr1-lr0;
00858                 newpos = exp(lr0 + fmod(lpos-lr0+1+(span-inc), span));
00859             }
00860         } else {
00861             newpos = pos - inc;
00862             if (options&SPINDIAL_CYCLIC) {
00863                 newpos = range[0] + fmod(pos+(range[1]-range[0]+1+(newpos-pos)-range[0]) , range[1]-range[0]+1);
00864             }
00865         }
00866         setValue(newpos);
00867     }
00868 }

void FX::FXRealSpinDial::disable (  )  [virtual]

Disable spinner.

Definition at line 492 of file FXRealSpinDial.cpp.

References dial, and textField.

00492                              {
00493     if (flags&FLAG_ENABLED) {
00494         FXPacker::disable();
00495         textField->disable();
00496         dial->disable();
00497     }
00498 }

void FX::FXRealSpinDial::enable (  )  [virtual]

Enable spinner.

Definition at line 482 of file FXRealSpinDial.cpp.

References dial, and textField.

00482                             {
00483     if (!(flags&FLAG_ENABLED)) {
00484         FXPacker::enable();
00485         textField->enable();
00486         dial->enable();
00487     }
00488 }

FXdouble FX::FXRealSpinDial::getCoarseIncrement (  )  const [inline]

Return spinner increment.

Definition at line 206 of file FXRealSpinDial.h.

References incr.

00206                                         {
00207         return incr[-1];
00208     }

FXColor FX::FXRealSpinDial::getCursorColor (  )  const

Return the cursor color.

Definition at line 1091 of file FXRealSpinDial.cpp.

References textField.

01091                                              {
01092     return textField->getCursorColor();
01093 }

FXint FX::FXRealSpinDial::getDefaultHeight (  )  [virtual]

Return default height.

Definition at line 470 of file FXRealSpinDial.cpp.

References textField.

00470                                        {
00471     return textField->getDefaultHeight()+(border<<1);
00472 }

FXint FX::FXRealSpinDial::getDefaultWidth (  )  [virtual]

Return default width.

Definition at line 462 of file FXRealSpinDial.cpp.

References DIALWIDTH, GAPWIDTH, FX::SPINDIAL_NOTEXT, and textField.

00462                                       {
00463     FXint tw=0;
00464     if (!(options&SPINDIAL_NOTEXT)) tw=textField->getDefaultWidth();
00465     return tw+DIALWIDTH+GAPWIDTH+(border<<1);
00466 }

const FXDial & FXRealSpinDial::getDial (  )  const

Definition at line 1160 of file FXRealSpinDial.cpp.

References dial.

01160                               {
01161     return *dial;
01162 }

FXColor FX::FXRealSpinDial::getDialColor (  )  const

Return color of the dial.

Definition at line 1030 of file FXRealSpinDial.cpp.

References dial.

01030                                            {
01031     return dial->getBackColor();
01032 }

FXColor FX::FXRealSpinDial::getDownArrowColor (  )  const

Return color of the the down arrow.

Definition at line 1050 of file FXRealSpinDial.cpp.

References downButton.

01050                                                 {
01051     return downButton->getArrowColor();
01052 }

FXdouble FX::FXRealSpinDial::getFineIncrement (  )  const [inline]

Return spinner increment.

Definition at line 202 of file FXRealSpinDial.h.

References incr.

00202                                       {
00203         return incr[0];
00204     }

FXFont * FX::FXRealSpinDial::getFont (  )  const

Get the text font.

Definition at line 959 of file FXRealSpinDial.cpp.

References textField.

00959                                       {
00960     return textField->getFont();
00961 }

FXString FX::FXRealSpinDial::getHelpText (  )  const

Get the status line help text for this spinner.

Definition at line 974 of file FXRealSpinDial.cpp.

References textField.

00974                                            {
00975     return textField->getHelpText();
00976 }

FXdouble FX::FXRealSpinDial::getIncrement (  )  const [inline]

Return spinner increment.

Definition at line 198 of file FXRealSpinDial.h.

References incr.

00198                                   {
00199         return incr[1];
00200     }

FXbool FX::FXRealSpinDial::getNumberFormatExponent (  )  const

Return whether the exponent is used in number display.

Definition at line 1103 of file FXRealSpinDial.cpp.

References FX::FXRealSpinDialText::getNumberFormatExponent(), and textField.

01103                                                      {
01104     return textField->getNumberFormatExponent();
01105 }

FXint FX::FXRealSpinDial::getNumberFormatPrecision (  )  const

Return the digits of precision used to display numbers.

Definition at line 1099 of file FXRealSpinDial.cpp.

References FX::FXRealSpinDialText::getNumberFormatPrecision(), and textField.

01099                                                      {
01100     return textField->getNumberFormatPrecision();
01101 }

FXString FX::FXRealSpinDial::getNumberFormatString (  )  const

Return the format string for number display.

Definition at line 1111 of file FXRealSpinDial.cpp.

References FX::FXRealSpinDialText::getNumberFormatString(), and textField.

01111                                                      {
01112     return textField->getNumberFormatString();
01113 }

void FX::FXRealSpinDial::getRange ( FXdouble &  lo,
FXdouble &  hi 
) const [inline]

Get the spinner's current range.

Definition at line 183 of file FXRealSpinDial.h.

References range.

Referenced by onCmdGetRealRange().

00183                                                    {
00184         lo=range[0];
00185         hi=range[1];
00186     }

FXColor FX::FXRealSpinDial::getSelBackColor (  )  const

Return selected background color.

Definition at line 1071 of file FXRealSpinDial.cpp.

References textField.

01071                                               {
01072     return textField->getSelBackColor();
01073 }

FXColor FX::FXRealSpinDial::getSelTextColor (  )  const

Return selected text color.

Definition at line 1081 of file FXRealSpinDial.cpp.

References textField.

01081                                               {
01082     return textField->getSelTextColor();
01083 }

FXuint FX::FXRealSpinDial::getSpinnerStyle (  )  const

Return current spinner style.

Definition at line 1008 of file FXRealSpinDial.cpp.

References SPINDIAL_MASK.

01008                                              {
01009     return (options&SPINDIAL_MASK);
01010 }

FXColor FX::FXRealSpinDial::getTextColor (  )  const

Return text color.

Definition at line 1061 of file FXRealSpinDial.cpp.

References textField.

01061                                            {
01062     return textField->getTextColor();
01063 }

FXString FX::FXRealSpinDial::getTipText (  )  const

Get the tool tip message for this spinner.

Definition at line 990 of file FXRealSpinDial.cpp.

References textField.

00990                                           {
00991     return textField->getTipText();
00992 }

FXColor FX::FXRealSpinDial::getUpArrowColor (  )  const

Return color of the up arrow.

Definition at line 1040 of file FXRealSpinDial.cpp.

References upButton.

01040                                               {
01041     return upButton->getArrowColor();
01042 }

FXdouble FX::FXRealSpinDial::getValue (  )  const [inline]

void FX::FXRealSpinDial::increment ( FXint  incMode = SPINDIAL_INC_NORMAL  ) 

Increment spinner.

Definition at line 825 of file FXRealSpinDial.cpp.

References incr, pos, range, setValue(), FX::SPINDIAL_CYCLIC, and FX::SPINDIAL_LOG.

Referenced by onCmdIncrement(), onKeyPress(), and onMouseWheel().

00825                                             {
00826     FXdouble inc = incr[incMode+1];
00827     FXdouble newpos;
00828     if (range[0]<range[1]) {
00829         if (options&SPINDIAL_LOG) {
00830             newpos = pos * inc;
00831             if (options&SPINDIAL_CYCLIC && newpos>range[1]) {
00832                 // can have a huge magnitude disparity here, so better to work in log space
00833                 FXdouble lr0=log(range[0]), lr1=log(range[1]), lnp=log(newpos);
00834                 newpos = exp(lr0 + fmod(lnp-lr0, lr1-lr0)) ;
00835             }
00836         } else {
00837             newpos = pos + inc;
00838             if (options&SPINDIAL_CYCLIC) {
00839                 newpos = range[0] + fmod(newpos-range[0], range[1]-range[0]+1) ;
00840             }
00841         }
00842         setValue(newpos);
00843     }
00844 }

FXbool FX::FXRealSpinDial::isCyclic (  )  const

Return TRUE if in cyclic mode.

Definition at line 871 of file FXRealSpinDial.cpp.

References FX::SPINDIAL_CYCLIC.

00871                                       {
00872     return (options&SPINDIAL_CYCLIC)!=0;
00873 }

FXbool FX::FXRealSpinDial::isDialVisible (  )  const

Return TRUE if dial is visible.

FXbool FX::FXRealSpinDial::isEditable (  )  const

Return TRUE if text field is editable.

Definition at line 1020 of file FXRealSpinDial.cpp.

References textField.

01020                                         {
01021     return textField->isEditable();
01022 }

FXbool FX::FXRealSpinDial::isTextVisible (  )  const

Return TRUE if text is visible.

Definition at line 937 of file FXRealSpinDial.cpp.

References textField.

00937                                            {
00938     return textField->shown();
00939 }

void FX::FXRealSpinDial::layout (  )  [virtual]

Perform layout.

Definition at line 502 of file FXRealSpinDial.cpp.

References BUTTONWIDTH, dial, DIALWIDTH, downButton, GAPWIDTH, FX::SPINDIAL_NOBUTTONS, FX::SPINDIAL_NODIAL, FX::SPINDIAL_NOTEXT, textField, and upButton.

00502                             {
00503     FXint dialWidth,dialHeight,buttonWidth,buttonHeight,textHeight;
00504 
00505     textHeight=height-2*border;
00506     dialHeight=textHeight;
00507     buttonHeight=textHeight>>1;
00508 
00509     FXuint hideOpts = SPINDIAL_NOTEXT|SPINDIAL_NODIAL|SPINDIAL_NOBUTTONS;
00510     if ((options&hideOpts) == hideOpts) {
00511         flags&=~FLAG_DIRTY;
00512         return; // nothing to layout
00513     }
00514 
00515     FXint right = width-border;
00516 
00517     if (options&SPINDIAL_NOTEXT) {
00518         // Dial takes up the extra space if shown, otherwise spinbuttons
00519         if (!(options&SPINDIAL_NODIAL)) {
00520             // HAS DIAL
00521             int left=border;
00522             if (!(options&SPINDIAL_NOBUTTONS)) {
00523                 FXint bw=BUTTONWIDTH;
00524                 upButton->position(border,border,bw,buttonHeight);
00525                 downButton->position(border,height-buttonHeight-border,bw,buttonHeight);
00526                 left+=bw+GAPWIDTH;
00527             }
00528             dial->position(left,border,right-left,dialHeight);
00529         } else {
00530             FXint w=BUTTONWIDTH;
00531             upButton->position(border,border,right-border,buttonHeight);
00532             downButton->position(border,height-buttonHeight-border,right-border,buttonHeight);
00533         }
00534     } else {
00535         // dial/buttons are default width, text stretches to fill the rest
00536         dialWidth=buttonWidth=0;
00537         if (!(options&SPINDIAL_NODIAL)) {
00538             FXint w=DIALWIDTH;
00539             dial->position(right-w,border,w,dialHeight);
00540             right -= w+GAPWIDTH;
00541         }
00542         if (!(options&SPINDIAL_NOBUTTONS)) {
00543             FXint w=BUTTONWIDTH;
00544             upButton->position(right-w,border,w,buttonHeight);
00545             downButton->position(right-w,height-buttonHeight-border,w,buttonHeight);
00546             right -= w + GAPWIDTH;
00547         }
00548         textField->position(border,border,right-border,textHeight);
00549     }
00550     flags&=~FLAG_DIRTY;
00551 }

void FX::FXRealSpinDial::load ( FXStream &  store  )  [virtual]

Load spinner from a stream.

Definition at line 1129 of file FXRealSpinDial.cpp.

References dial, downButton, incr, load(), pos, range, textField, and upButton.

01129                                          {
01130     FXPacker::load(store);
01131     store >> textField;
01132     store >> dial;
01133     store >> upButton;
01134     store >> downButton;
01135     store >> range[0] >> range[1];
01136     store >> incr[0] >> incr[1] >> incr[2];
01137     store >> pos;
01138 }

long FX::FXRealSpinDial::onChgDial ( FXObject p,
FXSelector  sel,
void *  ptr 
)

Definition at line 565 of file FXRealSpinDial.cpp.

References dial, DIALINCR, DIALMULT, dialpos, incr, pos, range, setValue(), FX::SPINDIAL_CYCLIC, and FX::SPINDIAL_LOG.

00565                                                                  {
00566     if (!isEnabled()) return 0;
00567     FXdouble newpos;
00568     FXdouble inc;
00569     if (FXApp::instance()->getKeyState(CONTROLMASK))    inc = incr[0];
00570     else if (FXApp::instance()->getKeyState(SHIFTMASK)) inc = incr[2];
00571     else                         inc = incr[1];
00572     FXint dialdelta = dial->getValue()-dialpos;
00573     if (options&SPINDIAL_LOG) {
00574         newpos = pos * pow(inc , DIALMULT * FXdouble(dialdelta) / DIALINCR);
00575     } else {
00576         newpos = pos + DIALMULT * inc * (dialdelta) / DIALINCR;
00577     }
00578     // Now clamp newpos.
00579     if (dialdelta>0) {
00580         if (options&SPINDIAL_LOG) {
00581             if (options&SPINDIAL_CYCLIC && newpos>range[1]) {
00582                 FXdouble lr0=log(range[0]), lr1=log(range[1]), lnp=log(newpos);
00583                 newpos = exp(lr0 + fmod(lnp-lr0, lr1-lr0)) ;
00584             }
00585         } else {
00586             if (options&SPINDIAL_CYCLIC) {
00587                 newpos = range[0] + fmod(newpos-range[0], range[1]-range[0]+1) ;
00588             }
00589         }
00590     } else {
00591         if (options&SPINDIAL_LOG) {
00592             if (options&SPINDIAL_CYCLIC  && newpos<range[0]) {
00593                 FXdouble lr0=log(range[0]), lr1=log(range[1]), lnp=log(newpos), lpos=log(pos);
00594                 FXdouble span=lr1-lr0;
00595                 newpos = exp(lr0 + fmod(lpos-lr0+1+(span-inc), span));
00596             }
00597         } else {
00598             if (options&SPINDIAL_CYCLIC) {
00599                 newpos = range[0] + fmod(pos+(range[1]-range[0]+1+(newpos-pos)-range[0]) , range[1]-range[0]+1);
00600             }
00601         }
00602     }
00603     setValue(newpos);
00604     if (target) target->handle(this,FXSEL(SEL_COMMAND,message),(void*)&pos);
00605     dialpos = dial->getValue();
00606     return 1;
00607 }

long FX::FXRealSpinDial::onChgEntry ( FXObject ,
FXSelector  ,
void *   
)

Definition at line 684 of file FXRealSpinDial.cpp.

References pos, range, and textField.

00684                                                           {
00685     register FXdouble value=FXDoubleVal(textField->getText());
00686     if (value<range[0]) value=range[0];
00687     if (value>range[1]) value=range[1];
00688     if (value!=pos) {
00689         pos=value;
00690         if (target) target->handle(this,FXSEL(SEL_CHANGED,message),(void*)&pos);
00691     }
00692     return 1;
00693 }

long FX::FXRealSpinDial::onCmdDecrement ( FXObject ,
FXSelector  ,
void *   
)

Definition at line 653 of file FXRealSpinDial.cpp.

References decrement(), keystate, pos, FX::SPINDIAL_INC_COARSE, FX::SPINDIAL_INC_FINE, and FX::SPINDIAL_INC_NORMAL.

00653                                                               {
00654     if (!isEnabled()) return 0;
00655     FXint mode;
00656     if (keystate&CONTROLMASK)    mode = SPINDIAL_INC_FINE;
00657     else if (keystate&SHIFTMASK) mode = SPINDIAL_INC_COARSE;
00658     else                         mode = SPINDIAL_INC_NORMAL;
00659     decrement(mode);
00660     if (target) target->handle(this,FXSEL(SEL_COMMAND,message),(void*)&pos);
00661     return 1;
00662 }

long FX::FXRealSpinDial::onCmdDial ( FXObject ,
FXSelector  sel,
void *   
)

Definition at line 610 of file FXRealSpinDial.cpp.

References dial, DIALINCR, and dialpos.

00610                                                              {
00611     if (!isEnabled()) return 0;
00612     // if(target) target->handle(this,FXSEL(SEL_COMMAND,message),(void*)&pos);
00613     dialpos = dial->getValue() % DIALINCR;
00614     dial->setValue(dialpos);
00615     return 1;
00616 }

long FX::FXRealSpinDial::onCmdEntry ( FXObject ,
FXSelector  ,
void *   
)

Definition at line 697 of file FXRealSpinDial.cpp.

References pos, and textField.

00697                                                           {
00698     textField->setText(FXStringVal(pos));       // Put back adjusted value
00699     if (target) target->handle(this,FXSEL(SEL_COMMAND,message),(void*)&pos);
00700     return 1;
00701 }

long FX::FXRealSpinDial::onCmdGetIntRange ( FXObject ,
FXSelector  ,
void *  ptr 
)

Definition at line 788 of file FXRealSpinDial.cpp.

References range.

00788                                                                     {
00789     ((FXdouble*)ptr)[0] = range[0];
00790     ((FXdouble*)ptr)[1] = range[1];
00791     return 1;
00792 }

long FX::FXRealSpinDial::onCmdGetIntValue ( FXObject ,
FXSelector  ,
void *  ptr 
)

Definition at line 772 of file FXRealSpinDial.cpp.

References getValue().

00772                                                                     {
00773     *((FXint*)ptr)=(FXint)getValue();
00774     return 1;
00775 }

long FX::FXRealSpinDial::onCmdGetRealRange ( FXObject ,
FXSelector  ,
void *  ptr 
)

Definition at line 817 of file FXRealSpinDial.cpp.

References getRange().

00817                                                                      {
00818     getRange(((FXdouble*)ptr)[0],((FXdouble*)ptr)[1]);
00819     return 1;
00820 }

long FX::FXRealSpinDial::onCmdGetRealValue ( FXObject ,
FXSelector  ,
void *  ptr 
)

Definition at line 803 of file FXRealSpinDial.cpp.

References getValue().

00803                                                                      {
00804     *((FXdouble*)ptr)=getValue();
00805     return 1;
00806 }

long FX::FXRealSpinDial::onCmdIncrement ( FXObject ,
FXSelector  ,
void *   
)

Definition at line 630 of file FXRealSpinDial.cpp.

References increment(), keystate, pos, FX::SPINDIAL_INC_COARSE, FX::SPINDIAL_INC_FINE, and FX::SPINDIAL_INC_NORMAL.

00630                                                               {
00631     if (!isEnabled()) return 0;
00632     FXint mode;
00633     if (keystate&CONTROLMASK)    mode = SPINDIAL_INC_FINE;
00634     else if (keystate&SHIFTMASK) mode = SPINDIAL_INC_COARSE;
00635     else                         mode = SPINDIAL_INC_NORMAL;
00636     increment(mode);
00637     if (target) target->handle(this,FXSEL(SEL_COMMAND,message),(void*)&pos);
00638     return 1;
00639 }

long FX::FXRealSpinDial::onCmdSetIntRange ( FXObject ,
FXSelector  ,
void *  ptr 
)

Definition at line 779 of file FXRealSpinDial.cpp.

References setRange().

00779                                                                     {
00780     FXdouble lo = (FXdouble)((FXint*)ptr)[0];
00781     FXdouble hi = (FXdouble)((FXint*)ptr)[1];
00782     setRange(lo,hi);
00783     return 1;
00784 }

long FX::FXRealSpinDial::onCmdSetIntValue ( FXObject ,
FXSelector  ,
void *  ptr 
)

Definition at line 765 of file FXRealSpinDial.cpp.

References setValue().

00765                                                                     {
00766     setValue(FXdouble(*((FXint*)ptr)));
00767     return 1;
00768 }

long FX::FXRealSpinDial::onCmdSetRealRange ( FXObject ,
FXSelector  ,
void *  ptr 
)

Definition at line 810 of file FXRealSpinDial.cpp.

References setRange().

00810                                                                      {
00811     setRange(((FXdouble*)ptr)[0],((FXdouble*)ptr)[1]);
00812     return 1;
00813 }

long FX::FXRealSpinDial::onCmdSetRealValue ( FXObject ,
FXSelector  ,
void *  ptr 
)

Definition at line 796 of file FXRealSpinDial.cpp.

References setValue().

00796                                                                      {
00797     setValue(*((FXdouble*)ptr));
00798     return 1;
00799 }

long FX::FXRealSpinDial::onCmdSetValue ( FXObject ,
FXSelector  ,
void *  ptr 
)

Definition at line 758 of file FXRealSpinDial.cpp.

References setValue().

00758                                                                  {
00759     setValue((FXdouble)(FXuval)ptr);
00760     return 1;
00761 }

long FX::FXRealSpinDial::onKeyPress ( FXObject sender,
FXSelector  sel,
void *  ptr 
)

Definition at line 705 of file FXRealSpinDial.cpp.

References decrement(), increment(), keystate, pos, FX::SPINDIAL_INC_COARSE, FX::SPINDIAL_INC_FINE, FX::SPINDIAL_INC_NORMAL, and textField.

00705                                                                          {
00706     FXEvent* event=(FXEvent*)ptr;
00707     if (!isEnabled()) return 0;
00708     keystate=event->state;
00709     if (target && target->handle(this,FXSEL(SEL_KEYPRESS,message),ptr)) return 1;
00710     FXint mode;
00711     if (keystate&CONTROLMASK)    mode = SPINDIAL_INC_FINE;
00712     else if (keystate&SHIFTMASK) mode = SPINDIAL_INC_COARSE;
00713     else                         mode = SPINDIAL_INC_NORMAL;
00714     switch (event->code) {
00715     case KEY_Up:
00716     case KEY_KP_Up:
00717         increment(mode);
00718         if (target) target->handle(this,FXSEL(SEL_COMMAND,message),(void*)&pos);
00719         return 1;
00720     case KEY_Down:
00721     case KEY_KP_Down:
00722         decrement(mode);
00723         if (target) target->handle(this,FXSEL(SEL_COMMAND,message),(void*)&pos);
00724         return 1;
00725     default:
00726         return textField->handle(sender,sel,ptr);
00727     }
00728     return 0;
00729 }

long FX::FXRealSpinDial::onKeyRelease ( FXObject sender,
FXSelector  sel,
void *  ptr 
)

Definition at line 733 of file FXRealSpinDial.cpp.

References keystate, and textField.

00733                                                                            {
00734     FXEvent* event=(FXEvent*)ptr;
00735     if (!isEnabled()) return 0;
00736     keystate=event->state;
00737     if (target && target->handle(this,FXSEL(SEL_KEYRELEASE,message),ptr)) return 1;
00738     switch (event->code) {
00739     case KEY_Up:
00740     case KEY_KP_Up:
00741     case KEY_Down:
00742     case KEY_KP_Down:
00743         return 1;
00744     default:
00745         return textField->handle(sender,sel,ptr);
00746     }
00747     return 0;
00748 }

long FX::FXRealSpinDial::onMotion ( FXObject sender,
FXSelector  sel,
void *  ptr 
)

Definition at line 751 of file FXRealSpinDial.cpp.

References keystate.

00751                                                                        {
00752     if (!isEnabled()) return 0;
00753     keystate=((FXEvent*)ptr)->state;
00754     return 0;
00755 }

long FX::FXRealSpinDial::onMouseWheel ( FXObject o,
FXSelector  s,
void *  p 
)

Definition at line 671 of file FXRealSpinDial.cpp.

References decrement(), increment(), keystate, pos, FX::SPINDIAL_INC_COARSE, FX::SPINDIAL_INC_FINE, and FX::SPINDIAL_INC_NORMAL.

00671                                                                 {
00672     FXint mode;
00673     keystate = ((FXEvent*)p)->state;
00674     if (keystate&CONTROLMASK)    mode = SPINDIAL_INC_FINE;
00675     else if (keystate&SHIFTMASK) mode = SPINDIAL_INC_COARSE;
00676     else                         mode = SPINDIAL_INC_NORMAL;
00677     if (((FXEvent*)p)->code>0) increment(mode);
00678     else decrement(mode);
00679     if (target) target->handle(this,FXSEL(SEL_COMMAND,message),(void*)&pos);
00680     return 1;
00681 }

long FX::FXRealSpinDial::onUpdDecrement ( FXObject sender,
FXSelector  ,
void *   
)

Definition at line 643 of file FXRealSpinDial.cpp.

References pos, and range.

00643                                                                      {
00644     if (isEnabled() && ((options&REALSPIN_CYCLIC) || (range[0]<pos)))
00645         sender->handle(this,FXSEL(SEL_COMMAND,ID_ENABLE),NULL);
00646     else
00647         sender->handle(this,FXSEL(SEL_COMMAND,ID_DISABLE),NULL);
00648     return 1;
00649 }

long FX::FXRealSpinDial::onUpdDial ( FXObject sender,
FXSelector  ,
void *   
)

Definition at line 555 of file FXRealSpinDial.cpp.

References pos, range, and FX::SPINDIAL_CYCLIC.

00555                                                                 {
00556     if (isEnabled() && ((options&SPINDIAL_CYCLIC) || (pos<=range[1])))
00557         sender->handle(this,FXSEL(SEL_COMMAND,ID_ENABLE),NULL);
00558     else
00559         sender->handle(this,FXSEL(SEL_COMMAND,ID_DISABLE),NULL);
00560     return 1;
00561 }

long FX::FXRealSpinDial::onUpdEntry ( FXObject ,
FXSelector  ,
void *   
)

Definition at line 667 of file FXRealSpinDial.cpp.

00667                                                           {
00668     return target && target->handle(this,FXSEL(SEL_UPDATE,message),NULL);
00669 }

long FX::FXRealSpinDial::onUpdIncrement ( FXObject sender,
FXSelector  ,
void *   
)

Definition at line 620 of file FXRealSpinDial.cpp.

References pos, and range.

00620                                                                      {
00621     if (isEnabled() && ((options&REALSPIN_CYCLIC) || (pos<range[1])))
00622         sender->handle(this,FXSEL(SEL_COMMAND,ID_ENABLE),NULL);
00623     else
00624         sender->handle(this,FXSEL(SEL_COMMAND,ID_DISABLE),NULL);
00625     return 1;
00626 }

FXRealSpinDial& FX::FXRealSpinDial::operator= ( const FXRealSpinDial  )  [private]

void FX::FXRealSpinDial::save ( FXStream &  store  )  const [virtual]

Save spinner to a stream.

Definition at line 1116 of file FXRealSpinDial.cpp.

References dial, downButton, incr, pos, range, textField, and upButton.

01116                                                {
01117     FXPacker::save(store);
01118     store << textField;
01119     store << dial;
01120     store << upButton;
01121     store << downButton;
01122     store << range[0] << range[1];
01123     store << incr[0] << incr[1] << incr[2];
01124     store << pos;
01125 }

void FXRealSpinDial::selectAll (  ) 

Mark the text entry as selected.

Definition at line 1153 of file FXRealSpinDial.cpp.

References textField.

01153                           {
01154     textField->selectAll();
01155 }

void FX::FXRealSpinDial::setCoarseIncrement ( FXdouble  increment  ) 

Change spinner coarse adjustment increment (when SHIFT key held down).

Definition at line 920 of file FXRealSpinDial.cpp.

References incr.

00920                                                     {
00921     if (inc<0) {
00922         fxerror("%s::setIncrement: negative or zero increment specified.\n",getClassName());
00923     }
00924     incr[2]=inc;
00925 }

void FX::FXRealSpinDial::setCursorColor ( FXColor  clr  ) 

Changes the cursor color.

Definition at line 1086 of file FXRealSpinDial.cpp.

References textField.

01086                                                {
01087     textField->setCursorColor(clr);
01088 }

void FX::FXRealSpinDial::setCyclic ( FXbool  cyclic  ) 

Set to cyclic mode, i.e. wrap around at maximum/minimum.

Definition at line 877 of file FXRealSpinDial.cpp.

References FX::SPINDIAL_CYCLIC.

00877                                             {
00878     if (cyclic) options|=SPINDIAL_CYCLIC;
00879     else options&=~SPINDIAL_CYCLIC;
00880 }

void FX::FXRealSpinDial::setDialColor ( FXColor  clr  ) 

Change color of the dial.

Definition at line 1025 of file FXRealSpinDial.cpp.

References dial.

01025                                              {
01026     dial->setBackColor(clr);
01027 }

void FX::FXRealSpinDial::setDialVisible ( FXbool  shown  ) 

Set dial visible flag.

void FX::FXRealSpinDial::setDownArrowColor ( FXColor  clr  ) 

Change color of the down arrow.

Definition at line 1045 of file FXRealSpinDial.cpp.

References downButton.

01045                                                   {
01046     downButton->setArrowColor(clr);
01047 }

void FX::FXRealSpinDial::setEditable ( FXbool  edit = TRUE  ) 

Allow editing of the text field.

Definition at line 1014 of file FXRealSpinDial.cpp.

References textField.

01014                                             {
01015     textField->setEditable(edit);
01016 }

void FX::FXRealSpinDial::setFineIncrement ( FXdouble  increment  ) 

Change spinner fine adjustment increment (when CTRL key held down).

Definition at line 914 of file FXRealSpinDial.cpp.

References incr.

00914                                                   {
00915     if (inc<0) {
00916         fxerror("%s::setIncrement: negative or zero increment specified.\n",getClassName());
00917     }
00918     incr[0]=inc;
00919 }

void FX::FXRealSpinDial::setFont ( FXFont *  fnt  ) 

Set the text font.

Definition at line 953 of file FXRealSpinDial.cpp.

References textField.

00953                                         {
00954     textField->setFont(fnt);
00955 }

void FX::FXRealSpinDial::setFormatString ( FXchar *  fmt  ) 

Set a format string for number display, using printf syntax. Format must contain no more than one fmt pattern. Calling this overrides the simple precision/exponent number format.

Definition at line 1107 of file FXRealSpinDial.cpp.

References FX::FXRealSpinDialText::setFormatString(), and textField.

Referenced by GUIEmitter::GUIManip_TriggeredEmitter::GUIManip_TriggeredEmitter().

01107                                                  {
01108     textField->setFormatString(fmt);
01109 }

void FX::FXRealSpinDial::setHelpText ( const FXString &  text  ) 

Set the status line help text for this spinner.

Definition at line 965 of file FXRealSpinDial.cpp.

References dial, downButton, textField, and upButton.

00965                                                       {
00966     textField->setHelpText(text);
00967     dial->setHelpText(text);
00968     upButton->setHelpText(text);
00969     downButton->setHelpText(text);
00970 }

void FX::FXRealSpinDial::setIncrement ( FXdouble  increment  ) 

Change spinner increment.

Definition at line 908 of file FXRealSpinDial.cpp.

References incr.

00908                                               {
00909     if (inc<0) {
00910         fxerror("%s::setIncrement: negative or zero increment specified.\n",getClassName());
00911     }
00912     incr[1]=inc;
00913 }

void FX::FXRealSpinDial::setIncrements ( FXdouble  fine,
FXdouble  norm,
FXdouble  coarse 
)

Change all spinner increment.

Definition at line 926 of file FXRealSpinDial.cpp.

References incr.

Referenced by GUIApplicationWindow::buildToolBars(), and GUIEmitter::GUIManip_TriggeredEmitter::GUIManip_TriggeredEmitter().

00926                                                                              {
00927     if (inc<0) {
00928         fxerror("%s::setIncrement: negative or zero increment specified.\n",getClassName());
00929     }
00930     incr[0]=fine;
00931     incr[1]=inc;
00932     incr[2]=coarse;
00933 }

void FX::FXRealSpinDial::setNumberFormat ( FXint  prec,
FXbool  bExp = FALSE 
)

Set the precision and exponent display for numbers Calling this overrides the number format string.

Definition at line 1095 of file FXRealSpinDial.cpp.

References FX::FXRealSpinDialText::setNumberFormat(), and textField.

Referenced by GUIApplicationWindow::buildToolBars().

01095                                                               {
01096     textField->setNumberFormat(prec,bExp);
01097 }

void FX::FXRealSpinDial::setRange ( FXdouble  lo,
FXdouble  hi 
)

Change the spinner's range.

Definition at line 884 of file FXRealSpinDial.cpp.

References pos, range, and setValue().

Referenced by GUIApplicationWindow::buildToolBars(), GUIEmitter::GUIManip_TriggeredEmitter::GUIManip_TriggeredEmitter(), onCmdSetIntRange(), and onCmdSetRealRange().

00884                                                      {
00885     if (lo>hi) {
00886         fxerror("%s::setRange: trying to set negative range.\n",getClassName());
00887     }
00888     if (range[0]!=lo || range[1]!=hi) {
00889         range[0]=lo;
00890         range[1]=hi;
00891         setValue(pos);
00892     }
00893 }

void FX::FXRealSpinDial::setSelBackColor ( FXColor  clr  ) 

Change selected background color.

Definition at line 1066 of file FXRealSpinDial.cpp.

References textField.

01066                                                 {
01067     textField->setSelBackColor(clr);
01068 }

void FX::FXRealSpinDial::setSelTextColor ( FXColor  clr  ) 

Change selected text color.

Definition at line 1076 of file FXRealSpinDial.cpp.

References textField.

01076                                                 {
01077     textField->setSelTextColor(clr);
01078 }

void FX::FXRealSpinDial::setSpinnerStyle ( FXuint  style  ) 

Change spinner style.

Definition at line 996 of file FXRealSpinDial.cpp.

References range, SPINDIAL_MASK, FX::SPINDIAL_NOMAX, and FX::SPINDIAL_NOMIN.

00996                                                  {
00997     FXuint opts=(options&~SPINDIAL_MASK) | (style&SPINDIAL_MASK);
00998     if (options!=opts) {
00999         if (opts&SPINDIAL_NOMIN) range[0]=-DBL_MAX;
01000         if (opts&SPINDIAL_NOMAX) range[1]=DBL_MAX;
01001         options=opts;
01002         recalc();
01003     }
01004 }

void FX::FXRealSpinDial::setTextColor ( FXColor  clr  ) 

Change text color.

Definition at line 1056 of file FXRealSpinDial.cpp.

References textField.

01056                                              {
01057     textField->setTextColor(clr);
01058 }

void FX::FXRealSpinDial::setTextVisible ( FXbool  shown  ) 

Set text visible flag.

Definition at line 943 of file FXRealSpinDial.cpp.

References FX::SPINDIAL_NOTEXT.

00943                                                 {
00944     FXuint opts=shown?(options&~SPINDIAL_NOTEXT):(options|SPINDIAL_NOTEXT);
00945     if (options!=opts) {
00946         options=opts;
00947         recalc();
00948     }
00949 }

void FX::FXRealSpinDial::setTipText ( const FXString &  text  ) 

Set the tool tip message for this spinner.

Definition at line 980 of file FXRealSpinDial.cpp.

References dial, downButton, textField, and upButton.

00980                                                      {
00981     textField->setTipText(text);
00982     dial->setTipText(text);
00983     upButton->setTipText(text);
00984     downButton->setTipText(text);
00985 }

void FX::FXRealSpinDial::setUpArrowColor ( FXColor  clr  ) 

Change color of the up arrow.

Definition at line 1035 of file FXRealSpinDial.cpp.

References upButton.

01035                                                 {
01036     upButton->setArrowColor(clr);
01037 }

void FX::FXRealSpinDial::setValue ( FXdouble  value  )  [virtual]

Change current value.

Definition at line 897 of file FXRealSpinDial.cpp.

References pos, range, and textField.

Referenced by GUIApplicationWindow::buildToolBars(), decrement(), GUIEmitter::GUIManip_TriggeredEmitter::GUIManip_TriggeredEmitter(), GUIApplicationWindow::handleEvent_SimulationLoaded(), increment(), onChgDial(), GUIApplicationWindow::onCmdGaming(), onCmdSetIntValue(), onCmdSetRealValue(), onCmdSetValue(), and setRange().

00897                                             {
00898     if (value<range[0]) value=range[0];
00899     if (value>range[1]) value=range[1];
00900     if (pos!=value) {
00901         textField->handle(this,FXSEL(SEL_COMMAND,ID_SETREALVALUE), &value);
00902         pos=value;
00903     }
00904 }


Field Documentation

FXint FX::FXRealSpinDial::dialpos [protected]

Definition at line 80 of file FXRealSpinDial.h.

Referenced by FXRealSpinDial(), onChgDial(), and onCmdDial().

FXdouble FX::FXRealSpinDial::incr[3] [protected]

FXint FX::FXRealSpinDial::keystate [protected]

FXdouble FX::FXRealSpinDial::pos [protected]

FXdouble FX::FXRealSpinDial::range[2] [protected]


The documentation for this class was generated from the following files:

Generated on Wed May 5 00:07:01 2010 for Sumo - Simulation of Urban MObility by  doxygen 1.5.6