#ifndef GUISLIDER_HEADER #define GUISLIDER_HEADER 1 ///////////////////////////////////////////////// //! docentry="GUI.Widget" //! file="amma/GUI/GTK/Slider.hh" //! lib=GUI //! author="Charles Galambos" //! date="23/03/99" //! rcsid="$Id: Slider.hh,v 1.8 2001/02/05 13:28:25 ees1cg Exp $" #include "amma/StdType.hh" #include "amma/GUI/Widget.hh" #include "amma/DP/Signal1.hh" #include "amma/DP/Signal2.hh" //! userlevel=Develop //: Slider body class GUISliderBodyC : public GUIWidgetBodyC { public: GUISliderBodyC(RealT nvalue, RealT nlower, RealT nupper, RealT nstep_increment = 1, RealT npage_increment = 1, RealT npage_size = 1); //: Constructor. GUISliderBodyC(BooleanT nvert,RealT nvalue, RealT nlower, RealT nupper, RealT nstep_increment = 1, RealT npage_increment = 1, RealT npage_size = 1); //: Constructor. virtual BooleanT Create(); //: Create the widget. virtual BooleanT Service(); //: Service request. // Used to send signals from other // threads to the program. BooleanT UpdateValue(RealT val); //: Update the slider value. BooleanT UpdateRange(RealT lower,RealT upper); //: Update the slider value. BooleanT Update(RealT val,RealT lower,RealT upper,RealT inc = 1); //: Update the slider value. inline RealT Upper() const { return upper; } //: Read upper limit inline RealT Lower() const { return lower; } //: Read lower limit void SetValuePosition(GtkPositionType pos) { numPos = pos; } //: Set number position. // Only has effect BEFORE Create() is called. void SetDrawValue(BooleanT ndrawValue) { drawValue = ndrawValue; } //: Draw the value of the slider ? // Only has effect BEFORE Create() is called. Signal1C &SigChanged() { return sigChanged; } //: Access changed signal. protected: BooleanT setConfig; RealT value; RealT lower; RealT upper; RealT step_increment; RealT page_increment; RealT page_size; GtkObject *adj; IntT digits; // No of digits after decimal point. BooleanT updateCont; // Update continously ? BooleanT vert; // Vertical ? BooleanT sReq; // Serive request pending. GtkPositionType numPos; BooleanT drawValue; // Draw the current value ? BooleanT setValue; // Flag if value has been set. Signal1C sigChanged; // Signal value change. }; //! userlevel=Normal //: Slider class GUISliderC : public GUIWidgetC { public: GUISliderC() : DPEntityC(TRUE) {} //: Default constructor. GUISliderC(RealT nvalue, RealT nlower, RealT nupper, RealT nstep_increment = 1,RealT npage_increment = 1, RealT npage_size = 1) : DPEntityC(*new GUISliderBodyC(nvalue,nlower,nupper, nstep_increment,npage_increment, npage_size)) {} //: Constructor GUISliderC(BooleanT nvert,RealT nvalue, RealT nlower, RealT nupper, RealT nstep_increment = 1,RealT npage_increment = 1, RealT npage_size = 1) : DPEntityC(*new GUISliderBodyC(nvert,nvalue,nlower,nupper, nstep_increment,npage_increment, npage_size)) {} //: Constructor GUISliderC(GUISliderBodyC &bod) : DPEntityC(bod) {} //: Body Constructor. protected: GUISliderBodyC &Body() { return dynamic_cast(DPEntityC::Body()); } //: Access body. const GUISliderBodyC &Body() const { return dynamic_cast(DPEntityC::Body()); } //: Access body. public: void SetValuePosition(GtkPositionType pos) { Body().SetValuePosition(pos); } //: Set number position. // Only has effect BEFORE Create() is called. void SetDrawValue(BooleanT ndrawValue) { Body().SetDrawValue(ndrawValue); } //: Set draw value. BooleanT UpdateValue(RealT val) { return Body().UpdateValue(val); } //: Update the slider value. BooleanT UpdateRange(RealT lower,RealT upper) { return Body().UpdateRange(lower,upper); } //: Update the slider value. BooleanT Update(RealT val,RealT lower,RealT upper,RealT inc = 1) { return Body().Update(val,lower,upper,inc); } //: Update the slider value. RealT Upper() const { return Body().Upper(); } //: Read upper limit RealT Lower() const { return Body().Lower(); } //: Read lower limit Signal1C &SigChanged() { return Body().SigChanged(); } //: Access changed signal. }; namespace StdGUI { template GUISliderC SliderV(RealT nvalue, RealT nlower, RealT nupper, RealT nstep_increment, const DataT &obj,void (DataT::*func)(RealT &value),RealT defVal = 0) { GUISliderC ret(aTRUE,nvalue,nlower,nupper,nstep_increment); StdDP::Connect(ret.SigChanged(),obj,func,defVal); return ret; } //: Vertical slider with call back to class. template GUISliderC SliderV(RealT nvalue, RealT nlower, RealT nupper, RealT nstep_increment, void (*func)(RealT &value,ParmT &par),const ParmT &pt = ParmT()) { GUISliderC ret(aTRUE,nvalue,nlower,nupper,nstep_increment); StdDP::Connect(ret.SigChanged(),obj,func,nvalue,pt); return ret; } //: Vertical slider with call back to function. template GUISliderC SliderH(RealT nvalue, RealT nlower, RealT nupper, RealT nstep_increment, const DataT &obj,void (DataT::*func)(RealT &value),RealT defVal = 0) { GUISliderC ret(aFALSE,nvalue,nlower,nupper,nstep_increment); StdDP::Connect(ret.SigChanged(),obj,func,defVal); return ret; } //: Horizontal slider with call back to class. template GUISliderC SliderH(RealT nvalue, RealT nlower, RealT nupper, RealT nstep_increment, void (*func)(RealT &value,ParmT &par),const ParmT &pt = ParmT()) { GUISliderC ret(aFALSE,nvalue,nlower,nupper,nstep_increment); StdDP::Connect(ret.SigChanged(),obj,func,nvalue,pt); return ret; } //: Horizontal slider with call back to function. template GUISliderC SliderV(RealT nvalue, RealT nlower, RealT nupper, RealT nstep_increment, void (*func)(RealT &value,DataT &dat), const DataT &data = DataT()) { GUISliderC ret(aTRUE,nvalue,nlower,nupper,nstep_increment); RealT tmp = 0; StdDP::Connect(ret.SigChanged(),func,tmp,data); return ret; } //: Veritical slider with call back to function. template GUISliderC SliderH(RealT nvalue, RealT nlower, RealT nupper, RealT nstep_increment, void (*func)(RealT &value,DataT &dat), const DataT &data = DataT()) { GUISliderC ret(aFALSE,nvalue,nlower,nupper,nstep_increment); RealT tmp = 0; StdDP::Connect(ret.SigChanged(),func,tmp,data); return ret; } //: Horizontal slider with call back to function. template GUISliderC SliderVR(RealT nvalue, RealT nlower, RealT nupper, RealT nstep_increment, DataT &obj,void (DataT::*func)(RealT &value),RealT defVal = 0) { GUISliderC ret(aTRUE,nvalue,nlower,nupper,nstep_increment); StdDP::ConnectRef(ret.SigChanged(),obj,func,defVal); return ret; } //: Vertical slider with refrence call back to class. template GUISliderC SliderHR(RealT nvalue, RealT nlower, RealT nupper, RealT nstep_increment, DataT &obj,void (DataT::*func)(RealT &value),RealT defVal = 0) { GUISliderC ret(aFALSE,nvalue,nlower,nupper,nstep_increment); StdDP::ConnectRef(ret.SigChanged(),obj,func,defVal); return ret; } //: Horizontal slider with refrence call back to class. } #endif