ubit
uctlmenu.hpp
1 /************************************************************************
2  *
3  * uctlmenu.hpp : Control menus (see upiemenu.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 _uctlmenu_hpp_
18 #define _uctlmenu_hpp_ 1
19 #include <ubit/upiemenu.hpp>
20 #include <ubit/ucall.hpp>
21 namespace ubit {
22 
23  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
73  class UCtlmenu : public UPiemenu {
74  public:
75  UCLASS(UCtlmenu)
76  static UStyle* createStyle();
77 
78  UCtlmenu();
80  };
81 
82  inline UCtlmenu& uctlmenu() {return *new UCtlmenu;}
84 
85 
86  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
91  class UCtlAction : public UCall {
92  public:
93  UCtlAction(float _gain) : xmag(_gain), ymag(_gain) {}
94  virtual ~UCtlAction() {}
95 
96  void setGain(float _gain) {xmag = ymag = _gain;}
97  void setGain(float _xgain, float _ygain) {xmag = _xgain, ymag = _ygain;}
98  float getXGain() const {return xmag;}
99  float getYGain() const {return ymag;}
100 
101  protected:
102  virtual void mdrag(UMouseEvent& e, UCtlmenu&) = 0;
109  virtual void operator()(UEvent&);
111 
112  virtual void addingTo(UChild&, UElem& parent);
114 
115  float xmag, ymag;
116  };
117 
118 
119  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
122  class UZoomAction : public UCtlAction {
123  public:
124  UZoomAction(UBox& zoomed_box, float gain = 0.5);
125  protected:
126  uptr<UBox> zbox; // zoomed box
127  uptr<UPos> posAttr; // box pos attribute (NB: its value is scale independent)
128  uptr<UScale> scaleAttr; // box scale attribute
129  float zbox_scale0; // initial scale of box
130  UPoint zbox_pos0; // initial (scale indep) pos of box in its container
131  UPoint mouse_in_zbox0;
132  float mouse_delta;
133  virtual void mdrag(UMouseEvent&, UCtlmenu&);
134  };
135 
136 
137  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
140  class UPanAction : public UCtlAction {
141  public:
142  UPanAction(UBox& panned_box, float gain = 1.);
143  protected:
144  uptr<UBox> box; // panned box
145  uptr<UPos> posAttr; // box pos attribute (NB: its value is scale independent)
146  UPoint pos0; // initial (scale indep) pos of box in its container
147  //float container_scale;
148  virtual void mdrag(UMouseEvent&, UCtlmenu&);
149  };
150 
151 
152  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
155  class UScrollAction : public UCtlAction {
156  public:
157  UScrollAction(UScrollpane&, float gain = 0.33);
158  UScrollAction(float gain = 0.3);
159 
160  void setPane(UScrollpane&);
161  UScrollpane* getPane() const {return pane;}
162 
163  protected:
164  virtual void mdrag(UMouseEvent&, UCtlmenu&);
165  UScrollpane* pane;
166  float arm_xpos, arm_ypos, xpos, ypos;
167  };
168 
169 }
170 #endif
Callback object for UCtlmenu items (base class).
Definition: uctlmenu.hpp:91
Scrolling (Callback object for UCtlmenu items).
Definition: uctlmenu.hpp:155
Box container.
Definition: ubox.hpp:64
2D Point.
Definition: ugeom.hpp:25
Ubit Event class.
Definition: uevent.hpp:30
virtual void addingTo(UChild &, UElem &parent)
called when this object is added to a parent.
Definition: umenu.cpp:155
Pie menu.
Definition: upiemenu.hpp:66
lightweight general purpose container.
Definition: uelem.hpp:44
base class of callback objects for firing functions or methods.
Definition: ucall.hpp:144
A box with (optionnal) scrollbars that manages a viewport.
Definition: uscrollpane.hpp:37
Definition: uhardfont.hpp:31
UCtlmenu()
creates a new Control Menu;
Definition: uctlmenu.cpp:40
Panning (Callback object for UCtlmenu items).
Definition: uctlmenu.hpp:140
Control menu.
Definition: uctlmenu.hpp:73
Compiled Object Style.
Definition: ustyle.hpp:44
mouse events
Definition: uevent.hpp:172
Centred zoom (Callback object for UCtlmenu items).
Definition: uctlmenu.hpp:122
[impl] Internal implementation of a child node.
Definition: uchild.hpp:23