ubit
upiemenu.hpp
1 /************************************************************************
2  *
3  * upiemenu.hpp : Pie and Control menus
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 _upiemenu_hpp_
18 #define _upiemenu_hpp_ 1
19 #include <ubit/uboxgeom.hpp>
20 #include <ubit/umenu.hpp>
21 namespace ubit {
22 
66 class UPiemenu : public UPopmenu {
67 public:
68  UCLASS(UPiemenu)
69 
70  UPiemenu();
72 
73  virtual ~UPiemenu();
74 
75  static UStyle* createStyle();
76 
77  virtual UBox& item(int n);
84  virtual UBox* getItem(int n) const;
91  virtual UBox* getSelectedItem() const;
93 
94  virtual int getSelectedIndex() const;
96 
97  virtual void addSubMenu(int N, UPiemenu* submenu);
99 
100  void addSubMenu(int N, UPiemenu& submenu) {addSubMenu(N, &submenu);}
102 
103  virtual void open(UMouseEvent&);
108  virtual void show(bool state, UDisp*);
109 
110  virtual void show(bool state = true) {UPiemenu::show(state,null);}
112 
113  unsigned long getShowDelay() const {return show_delay;}
115 
116  void setShowDelay(unsigned long d) {show_delay = d;}
118 
119  const UPoint& getMouseMovement() const {return mousepos;}
121 
122  UWin* getContainingWin(UDisp* = null) const;
124 
125  UPoint getCenterInContainingWin(UDisp* = null) const;
127 
128  bool isSpringMode() const {return spring_mode;}
129  void setSpringMode(bool state = true) {spring_mode = state;}
130 
131  // properties
132 
133  UColor& pieColor() {return *ppie_color;}
134  UColor& pieBorderColor() {return *ppie_border_color;}
135  UColor& sliceColor() {return *pslice_color;}
136  UColor& centerColor() {return *pcenter_color;}
137  UColor& centerBorderColor() {return *pcenter_border_color;}
138 
139  ULength& pieRadius() {return pie_radius;}
140  ULength& centerRadius() {return center_radius;}
141  ULength& itemRadius() {return item_radius;}
142 
143  // - - callbacks - -
144 
145  virtual void pressCB(UMouseEvent&);
147 
148  virtual void releaseCB(UMouseEvent&);
150 
151  virtual void motionCB(UMouseEvent&);
153 
154  virtual void hideCB(UEvent&);
156 
157  virtual void paintCB(UPaintEvent&);
159 
160  virtual void resizeCB(UResizeEvent&);
162 
163  virtual void armItemCB(UMouseEvent& e, UPiemenu* submenu);
165 
166  virtual void disarmItemCB(UInputEvent& e, UPiemenu* submenu);
168 
169  // - - - impl - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
170 #ifndef NO_DOC
171 
172  enum MenuType {CONCENTRIC, COMPOUND, MULTISTROKE};
173 
174  void setMenuType(int);
175  MenuType getMenuType(int) {return MenuType(menu_style);}
176 
177  UScale* getScale();
178  float getScaleValue();
179 
180  virtual UBox* createItem();
182 
183  virtual void disarmItem(UInputEvent&, bool is_browsing);
185 
186  virtual float getCentredCoords(UMouseEvent&, UPoint& p, bool& must_forward);
188 
189  virtual short getItemFromPos(const UPoint&) const;
190 
191  virtual void reset(UMouseEvent*);
193 
194  virtual void startNoviceMode();
196 
197  virtual void forwardToMenu(UPiemenu* submenu);
199 
200  virtual void receiveFromMenu(UPiemenu* supermenu);
202 
203  virtual void unlinkFromAndToMenus();
205 
206 protected:
207  unsigned char menu_style;
208  unsigned char spring_mode:1, ctlmenu_mode:1, novice_mode:1, in_show_function:1;
209  int curitem;
210  unsigned long show_delay;
211  UPoint armpos, mousepos;
212  USize pie_size;
213  uptr<UTimer> ptimer;
214  //uptr<UBox> parmed; plantage: parmed n'appartient pas au menu!
215  UBox* parmed;
216  UPiemenu *from_menu, *to_menu;
217  UElem gitems;
218  ULength pie_radius, center_radius, item_radius;
219  uptr<UColor> ppie_color, pcenter_color, pslice_color, ppie_border_color, pcenter_border_color;
220 #endif
221 };
222 
223 inline UPiemenu& upiemenu() {return *new UPiemenu();}
225 
226 }
227 #endif
228 
virtual void releaseCB(UMouseEvent &)
[impl] called when the mouse is released.
Definition: upiemenu.cpp:671
virtual void forwardToMenu(UPiemenu *submenu)
[impl] sets the submenu that is currently active.
Definition: upiemenu.cpp:383
Box container.
Definition: ubox.hpp:64
2D Point.
Definition: ugeom.hpp:25
void setShowDelay(unsigned long d)
changes the delay before the menu is opened (default = 300 ms)
Definition: upiemenu.hpp:116
UPopmenu: Contextual Menu.
Definition: umenu.hpp:149
Length of positions (UPos), sizes (USize) and padding (UPadding)
Definition: ulength.hpp:59
virtual void receiveFromMenu(UPiemenu *supermenu)
[impl] sets the supermenu that is currently active.
Definition: upiemenu.cpp:391
Ubit Event class.
Definition: uevent.hpp:30
virtual UBox * createItem()
called internally to create a new pie item (can be redefined).
Definition: upiemenu.cpp:135
virtual float getCentredCoords(UMouseEvent &, UPoint &p, bool &must_forward)
[impl] tranforms events coords to centred coords.
Definition: upiemenu.cpp:425
virtual void addSubMenu(int N, UPiemenu *submenu)
adds a submenu to this menu.
Definition: upiemenu.cpp:410
Display Context.
Definition: udisp.hpp:44
void addSubMenu(int N, UPiemenu &submenu)
adds a submenu to this menu.
Definition: upiemenu.hpp:100
UWin * getContainingWin(UDisp *=null) const
returns the window where the menu is currently opened.
Definition: upiemenu.cpp:487
virtual int getSelectedIndex() const
returns the index of item that is currently selected (-1 if none).
Definition: upiemenu.cpp:159
Color attribute of an element or a widget.
Definition: ucolor.hpp:73
virtual void show(bool state=true)
shows/hides the menu immediately (
Definition: upiemenu.hpp:110
virtual void reset(UMouseEvent *)
[impl] called when the menu is reset by show().
Definition: upiemenu.cpp:217
Paint event.
Definition: uevent.hpp:377
virtual void pressCB(UMouseEvent &)
[impl] called when the mouse is pressed.
Definition: upiemenu.cpp:656
virtual void unlinkFromAndToMenus()
[impl] detatches from the current sub and supermenu.
Definition: upiemenu.cpp:399
virtual void resizeCB(UResizeEvent &)
[impl] called when the menu is resized.
Definition: upiemenu.cpp:240
Pie menu.
Definition: upiemenu.hpp:66
lightweight general purpose container.
Definition: uelem.hpp:44
Smart Pointer for UObject instances (.
Definition: uobject.hpp:365
virtual UBox & item(int n)
gets or creates the Nth item in the menu.
Definition: upiemenu.cpp:147
UPiemenu()
creates a new pie menu;
Definition: upiemenu.cpp:41
virtual void paintCB(UPaintEvent &)
[impl] called when the menu is repainted.
Definition: upiemenu.cpp:347
UPoint getCenterInContainingWin(UDisp *=null) const
returns the location of the menu center from the origin of getContainingWin().
Definition: upiemenu.cpp:492
virtual void motionCB(UMouseEvent &)
[impl] called when the mouse is dragged.
Definition: upiemenu.cpp:574
virtual UBox * getSelectedItem() const
returns the item that is currently selected (null if none).
Definition: upiemenu.cpp:158
virtual void disarmItemCB(UInputEvent &e, UPiemenu *submenu)
[impl] called when an item is disarmed.
Definition: upiemenu.cpp:565
virtual void armItemCB(UMouseEvent &e, UPiemenu *submenu)
[impl] called when an item is armed.
Definition: upiemenu.cpp:503
virtual void disarmItem(UInputEvent &, bool is_browsing)
[impl] disarms the item that is currently armed (if any).
Definition: upiemenu.cpp:557
Definition: uhardfont.hpp:31
Base class for UMouseEvent and UKeyEvent Note that this class inherits from class UModifier that defi...
Definition: uevent.hpp:75
Widget scale.
Definition: uboxgeom.hpp:31
virtual void hideCB(UEvent &)
[impl] called when the menu is hidden.
Definition: upiemenu.cpp:718
virtual UBox * getItem(int n) const
returns the Nth item in the menu.
Definition: upiemenu.cpp:141
Base class for windows and menus.
Definition: uwin.hpp:47
unsigned long getShowDelay() const
returns the delay before the menu is opened (default = 300 ms)
Definition: upiemenu.hpp:113
Widget Size.
Definition: uboxgeom.hpp:228
virtual void startNoviceMode()
[impl] starts the novide mode: called by show().
Definition: upiemenu.cpp:233
Resize event.
Definition: uevent.hpp:418
Compiled Object Style.
Definition: ustyle.hpp:44
virtual void show(bool state, UDisp *)
opens the menu at the mouse event location (after waiting for getShowDelay()); MUST be used in UCall ...
mouse events
Definition: uevent.hpp:172
const UPoint & getMouseMovement() const
returns the location of the last DRAG event from the location of the ARM event.
Definition: upiemenu.hpp:119