00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _umenu_hpp_
00026 #define _umenu_hpp_
00027
00028 #include <ubit/uwin.hpp>
00029
00030
00031
00034 class UMenubar: public UBar {
00035 void enterChild(UEvent&);
00036 void leaveChild(UEvent&);
00037 void relaxChild(UEvent&);
00038
00039 public:
00040 static UStyle *style;
00041
00042 UMenubar(const UArgs& a = UArgs::none);
00043
00044 friend UMenubar& umenubar(const UArgs& a = UArgs::none)
00045 {return *new UMenubar(a);}
00047
00048 virtual const UStyle& getStyle(UContext*) const {return makeStyle();}
00049 static const UStyle& makeStyle();
00050
00051 virtual UGroup* getBrowsingGroup() {return this;}
00052 };
00053
00054
00055
00056
00075 class UMenu : public UWin {
00076 public:
00077 static UStyle *style;
00078
00079 UMenu(const UArgs& a = UArgs::none);
00080 friend UMenu& umenu(const UArgs& a = UArgs::none) {return *new UMenu(a);}
00083 virtual ~UMenu();
00084
00085 virtual const UStyle& getStyle(UContext*) const {return makeStyle();}
00086 static const UStyle& makeStyle();
00087
00088 virtual UGroup* getBrowsingGroup();
00090
00091 virtual void open();
00106 virtual void close(int status = 0);
00115 virtual void setPlacement(const class UPlacement*);
00116 virtual void setPlacement(const class UPlacement&);
00124 virtual bool realize();
00125
00126 #ifndef NO_DOC
00127
00128
00129
00130 virtual void addingTo(class ULink *selflink, UGroup *parent);
00131 virtual void removingFrom(class ULink *selflink, UGroup *parent);
00133
00134 private:
00135 friend class UAppli;
00136 friend class UMenuCtrl;
00137
00138 UGroup *menuBrowsingGroup;
00139 UCall *enter_opener, *arm_opener, *disarm_opener;
00140 class UPlacement *placement;
00141
00142 void enterChild(UEvent&);
00143 void leaveChild(UEvent&);
00144 void relaxChild(UEvent&);
00145 void enterOpener(UEvent&);
00146 void armOpener(UEvent&);
00147 void disarmOpener(UEvent&);
00148
00150 virtual void openImpl(class UMenuCtrl&, UView *opener,
00151 UGroup *menugroup, bool auto_place);
00152 #endif
00153 };
00154
00155
00156
00157
00179 class UPopmenu : public UMenu {
00180 public:
00181 struct InputCond {
00182 u_id mods;
00183 u_id buttons;
00184 u_id keysym;
00185 InputCond(u_id _mods, u_id _buttons, u_id _keysym) {
00186 mods = _mods; buttons = _buttons; keysym = _keysym;
00187 }
00188 };
00189
00190 static UStyle *style;
00191
00192 UPopmenu(const UArgs& a = UArgs::none);
00193
00194 friend UPopmenu& upopmenu(const UArgs& a = UArgs::none) {return *new UPopmenu(a);}
00196
00197 virtual void autoOpens(UBox& opener, u_id button_mask, u_id keysym,
00198 bool children_open_menu = false);
00199 virtual void autoOpens(UBox& opener,
00200 const std::vector<InputCond>&,
00201 bool children_open_menu);
00202
00213 virtual const UStyle& getStyle(UContext*) const {return makeStyle();}
00214 static const UStyle& makeStyle();
00215
00216 protected:
00217 std::vector<InputCond> input_conds;
00218 virtual bool autoOpenCheck(UEvent&);
00219 virtual void autoOpenImpl(UEvent&);
00221 };
00222
00223 #endif
00224
00225
00226
00227