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