00001 00002 // 00003 // $Id: GuiSlider.h,v 1.4 2005/07/21 20:26:36 bv Exp $ 00004 // 00005 // GuiSlider 00006 // 00007 // Package: MIDAD 00008 // 00009 // Add some extra functionality to TGDoubleSlider 00010 // 00011 // Contact: bv@bnl.gov 00012 // 00013 // Created on: Tue Apr 10 13:56:11 2001 00014 // 00016 00017 #ifndef GUISLIDER_H 00018 #define GUISLIDER_H 00019 00020 #include <Midad/Util/RangeControl.h> 00021 #include <Midad/Gui/GuiBox.h> 00022 00023 #include <TGFrame.h> 00024 #include <TGDoubleSlider.h> 00025 00026 #include <Midad/Util/Signals.h> 00027 00028 class GuiSlider; 00029 00030 class GuiSliderSignals : public GuiBase 00031 { 00032 public: 00033 GuiSliderSignals(GuiSlider* slider) : fSlider(slider) {} 00034 virtual ~GuiSliderSignals() {} 00035 00036 SigC::Signal0<void> position_changed, pressed, released; 00037 protected: 00038 GuiSlider* fSlider; 00039 }; 00040 00041 class GuiVSlider : public TGDoubleVSlider, public GuiSliderSignals 00042 { 00043 public: 00044 GuiVSlider(TGWindow& parent); 00045 virtual ~GuiVSlider(); 00046 00047 // override signals 00048 virtual void PositionChanged(); 00049 virtual void Pressed(); 00050 virtual void Released(); 00051 00052 // Over ride to protect against SIGFPE 00053 virtual void DoRedraw(); 00054 }; // end of class GuiSlider 00055 00056 class GuiHSlider : public TGDoubleHSlider, public GuiSliderSignals 00057 { 00058 public: 00059 GuiHSlider(TGWindow& parent); 00060 virtual ~GuiHSlider(); 00061 00062 // override signals 00063 virtual void PositionChanged(); 00064 virtual void Pressed(); 00065 virtual void Released(); 00066 00067 // Over ride to protect against SIGFPE 00068 virtual void DoRedraw(); 00069 }; // end of class GuiSlider 00070 00071 class GuiSlider : public GuiBox 00072 { 00073 public: 00074 GuiSlider(TGWindow& parent, unsigned int option); 00075 virtual ~GuiSlider(); 00076 00077 RangeControl<double>& GetRangeCtrl() { return fRangeCtrl; } 00078 RangeControl<double>& GetExtremaCtrl() { return fExtremaCtrl; } 00079 void UseRange(Range<double>& r); 00080 void UseExtrema(Range<double>& e); 00081 void UseRangeControl(RangeControl<double>& rc); 00082 void UseExtremaControl(RangeControl<double>& ec); 00083 00084 GuiSliderSignals& GetSignals() { return *fSignals; } 00085 00086 // Internal 00087 void StartCompound(); 00088 void StopCompound(); 00089 00090 private: 00091 void UpdateRange(); 00092 void ApplyRange(); 00093 00094 RangeControl<double> fRangeCtrl, fExtremaCtrl; 00095 SigC::Connection fSliderCon, fRangeCon, fExtremaCon; 00096 TGDoubleSlider* fSlider; 00097 GuiSliderSignals* fSignals; 00098 }; 00099 00100 #endif // GUISLIDER_H
1.3.9.1