00001
00034 #ifndef INC_MGUI_SLIDER_H
00035 #define INC_MGUI_SLIDER_H
00036
00037 #ifndef INC_MGUI_EDIT_H
00038 #include <mgui/edit.h>
00039 #endif
00040
00041 #ifndef INC_MI32_COLOR_H
00042 #include <mi32/color.h>
00043 #endif
00044
00045 namespace MGUI {
00046
00047
00048
00052 class CTRL_SLIDER : public MGUI::CTRL {
00053 public:
00054
00055 enum STYLE {
00056 STYLE_Horizontal = 0x0001,
00057 STYLE_Vertical = 0x0002,
00058 STYLE_ReverseDirection = 0x0004,
00059 STYLE_Logarithmic = 0x0008,
00060 };
00061
00063 CTRL_SLIDER ();
00064
00066 virtual ~CTRL_SLIDER (
00067 );
00068
00070 void Create (
00071 MGUI::LAYOUT_PANE_BASE& ParentPane,
00072 double dftvalue,
00073 double min,
00074 double max,
00075 int length = 100,
00076 STYLE style = STYLE_Horizontal,
00077 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize
00078 );
00079
00081 double GetStep (
00082 ) const { return (m_step); }
00083
00085 double GetValue (
00086 ) const { return (m_value); }
00087
00089 void SetColorBar (
00090 const COLOR &barcolor
00091 );
00092
00094 void SetColorTrough (
00095 const COLOR &troughcolor
00096 );
00097
00099 void SetDelegateOnValueChanged (
00100 DELEGATE_VOID_NOPARMS delegate
00101 ) { m_DelegateOnValueChanged = delegate; }
00102
00104 void SetDelegateOnUserSliding (
00105 DELEGATE_VOID_NOPARMS delegate
00106 ) { m_DelegateOnUserSliding = delegate; }
00107
00109 void SetRange (
00110 double min,
00111 double max
00112 );
00113
00117 bool SetStep (
00118 double step,
00119 bool notify = true
00120 );
00121
00123 void SetValue (
00124 double value,
00125 bool notify = true
00126 );
00127
00128 private:
00129 #ifndef GENERATING_DOXYGEN_OUTPUT
00130
00131 DELEGATE_VOID_NOPARMS m_DelegateOnValueChanged;
00132 DELEGATE_VOID_NOPARMS m_DelegateOnUserSliding;
00133
00134 bool m_UseRawDirect;
00135 bool m_IsReversed;
00136 bool m_IsLogarithmic;
00137 double m_value;
00138 double m_min;
00139 double m_max;
00140 double m_step;
00141 double m_scaleraw;
00142 double m_ScaleMinLog;
00143 double m_ScaleMaxLog;
00144
00145 #ifdef X_NATIVE
00146 static void X_Drag(Widget,CTRL_SLIDER*,void*);
00147 static void X_ValueChanged(Widget,CTRL_SLIDER*,void*);
00148 #endif
00149
00150 double ComputeValue (int ctrlpos) const;
00151 void OnDrag (int ctrlpos);
00152 void OnValueChanged (int ctrlpos);
00153 void UpdateCtrl (bool setrange);
00154
00155 CTRL_SLIDER (const CTRL_SLIDER&);
00156 CTRL_SLIDER& operator= (const CTRL_SLIDER&);
00157 #endif //dyoxygen output
00158 };
00159 #ifndef GENERATING_DOXYGEN_OUTPUT
00160 DEFINE_ENUM_OP_BITWISE(CTRL_SLIDER::STYLE)
00161 #endif
00162
00163
00164
00166 class FORM_SLIDER : public MGUI::FORM_COMPOSITE {
00167 public:
00168
00170 FORM_SLIDER ();
00171
00173 virtual ~FORM_SLIDER (
00174 );
00175
00177 void Create (
00178 MGUI::LAYOUT_PANE_BASE& ParentPane,
00179 double dftvalue,
00180 double min,
00181 double max,
00182 int sliderlength = 100,
00183 int editplaces = 0,
00184 int editwidth = 0,
00185 CTRL_SLIDER::STYLE sliderstyle = CTRL_SLIDER::STYLE_Horizontal,
00186 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize
00187 );
00188
00190 void Create (
00191 MGUI::LAYOUT_PANE_BASE& ParentPane,
00192 const MISTRING& label,
00193 double dftvalue,
00194 double min,
00195 double max,
00196 int sliderlength = 100,
00197 int editplaces = 0,
00198 int editwidth = 0,
00199 CTRL_SLIDER::STYLE sliderstyle = CTRL_SLIDER::STYLE_Horizontal,
00200 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize
00201 );
00202
00204 void Create (
00205 MGUI::LAYOUT_PANE_BASE& ParentPane,
00206 TEXTID label,
00207 double dftvalue,
00208 double min,
00209 double max,
00210 int sliderlength = 100,
00211 int editplaces = 0,
00212 int editwidth = 0,
00213 CTRL_SLIDER::STYLE sliderstyle = CTRL_SLIDER::STYLE_Horizontal,
00214 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize
00215 );
00216
00218 CTRL_EDIT_NUMBER& GetEditCtrl (
00219 ) { return (m_editctrl); }
00220
00223 CTRL_LABEL& GetLabel (
00224 ) { return (m_label); }
00225
00228 CTRL_SLIDER& GetSlider (
00229 ) { return (m_slider); }
00230
00232 double GetValue (
00233 ) const { return (m_slider.GetValue()); }
00234
00236 void SetColorBar (
00237 const COLOR &barcolor
00238 ) { m_slider.SetColorBar(barcolor); }
00239
00241 void SetColorTrough (
00242 const COLOR &troughcolor
00243 ) { m_slider.SetColorTrough(troughcolor); }
00244
00246 void SetDelegateOnValueChanged (
00247 DELEGATE_VOID_NOPARMS delegate
00248 ) { m_DelegateOnValueChanged = delegate; }
00249
00251 void SetDelegateOnUserSliding (
00252 DELEGATE_VOID_NOPARMS delegate
00253 ) { m_DelegateOnUserSliding = delegate; }
00254
00256 void SetLabel(
00257 const MISTRING& label
00258 );
00259
00261 void SetPlaces (
00262 int places
00263 ) { m_editctrl.SetFormat(MGUI::CTRL_EDIT_NUMBER::FORMAT_Decimal, places); }
00264
00266 void SetRange (
00267 double min,
00268 double max
00269 );
00270
00274 bool SetStep (
00275 double step,
00276 bool notify = true
00277 );
00278
00280 void SetValue (
00281 double value,
00282 bool notify = true
00283 );
00284
00285 private:
00286 #ifndef GENERATING_DOXYGEN_OUTPUT
00287 typedef FORM_SLIDER THISCLASS;
00288
00289 DELEGATE_VOID_NOPARMS m_DelegateOnUserSliding;
00290 DELEGATE_VOID_NOPARMS m_DelegateOnValueChanged;
00291
00292 CTRL_EDIT_NUMBER m_editctrl;
00293 CTRL_LABEL m_label;
00294 CTRL_SLIDER m_slider;
00295
00296 void OnEditValueChanged ();
00297 void OnSliderDrag ();
00298 void OnSliderValueChanged ();
00299
00300 #endif // GENERATING_DOXYGEN_OUTPUT
00301
00302 };
00303
00304
00305
00306 }
00307
00308 #endif