00001
00002
00003
00004 #ifndef OglGui_ValueScrollBar_h
00005 #define OglGui_ValueScrollBar_h
00006
00007 #ifndef OglGui_ScrollBar_h
00008 #include "OglGui/ScrollBar.h"
00009 #endif
00010
00011 #ifndef OglGui_ValueScrollBarListener_h
00012 #include "OglGui/ValueScrollBarListener.h"
00013 #endif
00014
00015 namespace OglGui {
00016
00017 class ValueScrollBar : public Window, ScrollBarListener
00018 {
00019 public:
00020
00021 ValueScrollBar(int x, int y, int w, int h,
00022 int minVal, int maxVal, int val, int margin=2) :
00023 Window(x, y, w, h)
00024 {
00025 Init(w, h, minVal, maxVal, val, margin);
00026 }
00027 ValueScrollBar(Window* parent, int x, int y, int w, int h,
00028 int minVal, int maxVal, int val, int margin=2) :
00029 Window(parent, x, y, w, h)
00030 {
00031 Init(w, h, minVal, maxVal, val, margin);
00032 }
00033 ValueScrollBar(Window* parent, int w, int h,
00034 int minVal, int maxVal, int val, int margin=2) :
00035 Window(parent, w, h)
00036 {
00037 Init(w, h, minVal, maxVal, val, margin);
00038 }
00039
00040 void SetValueScrollBarListener(ValueScrollBarListener* l, void* userData=0)
00041 {
00042 mListener = l;
00043 mListenerData = userData;
00044 }
00045
00046 virtual void OnScroll(ScrollBar *src, int position, void* userData)
00047 {
00048 sprintf(mTxtBuf, "%d", mMinVal + position);
00049 mValueTxt->SetText(mTxtBuf);
00050 if (mListener)
00051 mListener->OnValueChanged(this, mMinVal+position, userData);
00052 }
00053
00054 void SetMinMaxValue(int minVal, int maxVal)
00055 {
00056 mMinVal = minVal;
00057 mMaxVal = maxVal;
00058 mScrollBar->SetRange(maxVal-minVal + 2, 2);
00059 }
00060
00061 void GetMinMaxValue(int& minVal, int& maxVal)
00062 {
00063 minVal = mMinVal;
00064 maxVal = mMaxVal;
00065 }
00066
00067 void SetValue(int val) { mScrollBar->SetValue(val - mMinVal); }
00068 int GetValue() { return mScrollBar->GetValue() + mMinVal; }
00069
00070 ScrollBar* SBar() { return mScrollBar; }
00071 StaticText* ValText() { return mValueTxt; }
00072
00073 private:
00074 void Init(int w, int h, int minVal, int maxVal, int val, int m)
00075 {
00076 mListener = 0;
00077 mListenerData = 0;
00078
00079 mMinVal = minVal;
00080 mMaxVal = maxVal;
00081
00082 SetBorderType(BEV_ETCHED);
00083
00084 mScrollBar = new ScrollBar(this, m, m, w-46-2*m, h-2*m, true);
00085 mScrollBar->SetRange(maxVal-minVal + 10, 10);
00086 mScrollBar->SetNewPos(val - minVal);
00087 mScrollBar->ConnectTo(this);
00088 mScrollBar->SetScrollBarListener(this, 0);
00089
00090 sprintf(mTxtBuf, "%d", val);
00091 mValueTxt = new StaticText(this, w-46-m, m, 46, h-2*m, mTxtBuf);
00092 mValueTxt->SetBorderType(BEV_ETCHED);
00093 mValueTxt->ConnectTo(this, L2R | R2R | T2T | B2B);
00094
00095
00096 SetAllowChildScaling(false);
00097 }
00098
00099 ValueScrollBarListener* mListener;
00100 void* mListenerData;
00101
00102 ScrollBar* mScrollBar;
00103 StaticText* mValueTxt;
00104 int mMinVal, mMaxVal;
00105 char mTxtBuf[10];
00106 };
00107
00108 }
00109 #endif