ubit
uscrollbar.hpp
1 /************************************************************************
2  *
3  * uscrollbar.hpp
4  * Ubit GUI Toolkit - Version 6
5  * (C) 2009 | Eric Lecolinet | TELECOM ParisTech | http://www.enst.fr/~elc/ubit
6  *
7  * ***********************************************************************
8  * COPYRIGHT NOTICE :
9  * THIS PROGRAM IS DISTRIBUTED WITHOUT ANY WARRANTY AND WITHOUT EVEN THE
10  * IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
11  * YOU CAN REDISTRIBUTE IT AND/OR MODIFY IT UNDER THE TERMS OF THE GNU
12  * GENERAL PUBLIC LICENSE AS PUBLISHED BY THE FREE SOFTWARE FOUNDATION;
13  * EITHER VERSION 2 OF THE LICENSE, OR (AT YOUR OPTION) ANY LATER VERSION.
14  * SEE FILES 'COPYRIGHT' AND 'COPYING' FOR MORE DETAILS.
15  * ***********************************************************************/
16 
17 #ifndef _uscrollbar_hpp_
18 #define _uscrollbar_hpp_ 1
19 #include <ubit/ubox.hpp>
20 #include <ubit/ucolor.hpp>
21 #include <ubit/ustyle.hpp>
22 #include <ubit/uview.hpp>
23 namespace ubit {
24 
38  class UScrollbar: public UBox {
39  public:
40  UCLASS(UScrollbar)
41 
42  UScrollbar(const UArgs& = UArgs::none);
48  UScrollbar(UFloat& value, const UArgs& = UArgs::none);
56  virtual ~UScrollbar();
57 
58  static UStyle* createStyle();
59 
60  virtual float getValue() const;
62 
63  virtual UScrollbar& setValue(float percent);
68  virtual float getUnitIncrement() const;
70 
71  virtual UScrollbar& setUnitIncrement(float);
73 
74  virtual float getBlockIncrement() const;
76 
77  virtual UScrollbar& setBlockIncrement(float);
79 
80  virtual UScrollbar& setTracking(bool);
82 
83  virtual bool isTracking() const;
84 
85  virtual UScrollbar& setTransparent(bool state = true);
87 
88  virtual bool isTransparent() const;
89 
90  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
91  // implementation
92 
93  UFloat& value() {return *pvalue;}
94 
95  virtual UBox* getKnob() {return pknob;}
96  virtual UBox* getRail() {return prail;}
97  virtual UBox* getLessButton() {return pless_btn;}
98  virtual UBox* getMoreButton() {return pmore_btn;}
100 
101  virtual UBox* createKnob(bool vertical);
102  virtual UBox* createRail(bool vertical);
103  virtual UBox* createLessButton(bool vertical);
104  virtual UBox* createMoreButton(bool vertical);
105  /* fonctions that create the knob, the rail and the 2 scroll buttons.
106  * can be redefined by subclasses to use other widgets
107  */
108 
109  virtual void setPane(UScrollpane*);
110  UScrollpane* getPane() {return ppane;}
112 
113  virtual void setValueImpl(float percent, bool update_pane);
115 
116  virtual void pressScrollButton(UMouseEvent&, int dir);
118 
119  private:
120  friend class UScrollbarView;
121  friend class UScrollpane;
122  uptr<UFloat> pvalue; // scrollbar value (percentage)
123  uptr<UScrollpane> ppane; // the pane controlled by this scrollbar
124  uptr<UBox> pless_btn, pmore_btn, pknob, prail;
125  uptr<UPos> pknob_pos; // current position of the knob
126  float unit_increment, block_increment;
127  float delta_mouse;
128  bool press_rail_goto_pos; // dont scroll but goes to pos is trus
129  bool is_transparent, show_rail, tracking_mode; //enter_feedback, drag_feedback
130 
131  void constructs();
132  //nb: inutile que contructs soit virtuel car appele par constructeur!
133 
134  virtual void pressKnob(UMouseEvent&);
135  virtual void releaseKnob(UMouseEvent&);
136  virtual void dragKnob(UMouseEvent&);
137  virtual void pressRail(UMouseEvent&);
138  virtual void releaseRail(UMouseEvent&);
139  virtual float getPercent(UMouseEvent&, UView* knob_view, UView* rail_view, float delta_mouse);
140  virtual float getIncrementPercent(UMouseEvent&, float increment);
141  };
142 
143  inline UScrollbar& uscrollbar(const UArgs& args = UArgs::none) {return *new UScrollbar(args);}
145 
146  UScrollbar& uhscrollbar(const UArgs& args = UArgs::none);
148 
149  inline UScrollbar& uvscrollbar(const UArgs& args = UArgs::none) {return *new UScrollbar(args);}
151 
152 
153  /* ==================================================== ===== ======= */
158  class UScrollbarView : public UView {
159  friend class UScrollbar;
160  public:
161  static UViewStyle style; // renderer
162  virtual UViewStyle* getViewStyle() {return &style;}
163 
164  UScrollbarView(UBox*, UView* parview, UHardwinImpl*);
165  static UView* createView(UBox*, UView* parview, UHardwinImpl*);
166 
167  virtual void doUpdate(UUpdateContext&, URect r, URect clip, UViewUpdate&);
168  };
169 }
170 #endif
171 
virtual float getUnitIncrement() const
returns the unit increment.
Definition: uscrollbar.cpp:361
Box container.
Definition: ubox.hpp:64
virtual float getBlockIncrement() const
returns the block increment.
Definition: uscrollbar.cpp:365
Scrollbar View Renderer.
Definition: uscrollbar.hpp:158
2D Rectangle.
Definition: ugeom.hpp:165
Definition: uviewImpl.hpp:141
virtual UScrollbar & setBlockIncrement(float)
change the block increment.
Definition: uscrollbar.cpp:366
UScrollbar(const UArgs &=UArgs::none)
creates a new scrollbar (
Smart Pointer for UObject instances (.
Definition: uobject.hpp:365
virtual float getValue() const
returns the current value (a float between 0 and 100).
Definition: uscrollbar.cpp:369
Argument list (for passing arguments to constructor or add functions).
Definition: uargs.hpp:43
Scrollbar widget.
Definition: uscrollbar.hpp:38
A box with (optionnal) scrollbars that manages a viewport.
Definition: uscrollpane.hpp:37
virtual UScrollbar & setTracking(bool)
tracking mode updates the value while the scrollbar is being dragged (default is true).
Definition: uscrollbar.cpp:354
Box View.
Definition: uview.hpp:65
virtual UScrollbar & setTransparent(bool state=true)
transparent scrollbars are displayed above scrollpane viewports (default is false).
Definition: uscrollbar.cpp:358
Specifies the View Style of an UBox.
Definition: uview.hpp:42
virtual UScrollbar & setValue(float percent)
changes the current value (a float between 0 and 100).
Definition: uscrollbar.cpp:371
Definition: uupdatecontext.hpp:32
Definition: uhardfont.hpp:31
static const UArgs none
the empty arglist.
Definition: uargs.hpp:45
virtual void setValueImpl(float percent, bool update_pane)
[impl] does not update the associated pane.
Definition: uscrollbar.cpp:387
Definition: uwinImpl.hpp:84
Active Float.
Definition: unumber.hpp:140
UScrollpane * getPane()
[impl] attaches the scrollbar to a scrollpane.
Definition: uscrollbar.hpp:110
virtual UScrollbar & setUnitIncrement(float)
change the unit increment.
Definition: uscrollbar.cpp:362
virtual UBox * getMoreButton()
return the knob, the rail and the 2 scroll buttons (if any, null otherwise).
Definition: uscrollbar.hpp:98
Compiled Object Style.
Definition: ustyle.hpp:44
mouse events
Definition: uevent.hpp:172
virtual void pressScrollButton(UMouseEvent &, int dir)
[impl].
Definition: uscrollbar.cpp:501