1 #pragma once 2 3 #ifndef TNZ_SCROLLBAR_INCLUDED 4 #define TNZ_SCROLLBAR_INCLUDED 5 6 //#include "tw/action.h" 7 //#include "traster.h" 8 #include "tw/tw.h" 9 10 #undef DVAPI 11 #undef DVVAR 12 #ifdef TWIN_EXPORTS 13 #define DVAPI DV_EXPORT_API 14 #define DVVAR DV_EXPORT_VAR 15 #else 16 #define DVAPI DV_IMPORT_API 17 #define DVVAR DV_IMPORT_VAR 18 #endif 19 20 class TScrollbarGenericAction { 21 public: TScrollbarGenericAction()22 TScrollbarGenericAction() {} ~TScrollbarGenericAction()23 virtual ~TScrollbarGenericAction() {} 24 virtual void notify(int value) = 0; 25 }; 26 27 template <class T> 28 class TScrollbarAction : public TScrollbarGenericAction { 29 public: 30 typedef void (T::*CommandMethod)(int value); 31 32 T *m_target; 33 CommandMethod m_method; 34 35 TScrollbarAction<T>(T *target, CommandMethod method) m_target(target)36 : m_target(target), m_method(method){}; notify(int value)37 void notify(int value) { (m_target->*m_method)(value); }; 38 }; 39 40 class DVAPI TScrollbar : public TWidget { 41 int m_oldPos; 42 int m_gPos, m_gMinPos, m_gMaxPos, m_gSize; 43 int m_value, m_minValue, m_maxValue, m_cursorSize; 44 const int m_buttonAreaSize; 45 TScrollbarGenericAction *m_action; 46 bool m_firstButtonPressed, m_secondButtonPressed; 47 bool m_horizontal; 48 bool m_minOverflowEnabled; 49 bool m_maxOverflowEnabled; 50 int m_buttonIncrement; 51 52 protected: 53 void updatePositions(); 54 55 void drawHCursor(int x0, int x1); 56 void drawVCursor(int y0, int y1); 57 enum ButtonId { FIRST_BUTTON, SECOND_BUTTON }; 58 void drawButton(ButtonId id); 59 60 public: 61 TScrollbar(TWidget *parent, string name = "scrollbar"); 62 ~TScrollbar(); 63 64 void repaint(); 65 66 void leftButtonDown(const TMouseEvent &); 67 void leftButtonDrag(const TMouseEvent &); 68 void leftButtonUp(const TMouseEvent &); 69 70 void configureNotify(const TDimension &d); 71 72 void setValue(int value, int min, int max, int size); getValue()73 int getValue() const { return m_value; } 74 75 // min <= value <= max 76 // il cursore occupa almeno size/(max-min+size) dell'area disponibile 77 // se size = 0 non c'e' cursore e lo slider e' disabilitato 78 // se size>=max-min il cursore occupa tutto lo spazio e lo slider e' 79 // disabilitato 80 // 81 // value == min quando il cursore e' in alto 82 // value == max quando il cursore e' in basso 83 // 84 // quando vengono premuti i bottoni value viene incrementato/decrementato di 85 // uno 86 // 87 88 // abilita/disabilita la possibilita' di agire sui bottoni anche 89 // quando lo slider e' gia' sul massimo/minimo 90 // default: false/false 91 void enableButtonOverflow(bool min, bool max); 92 93 // default: 4 94 void setButtonIncrement(int d); 95 96 void setAction(TScrollbarGenericAction *action); 97 void onTimer(int v); 98 }; 99 100 #endif 101