Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members

umenu.hpp

00001 /* ==================================================== ======== ======= *
00002  *
00003  *  umenu.hpp
00004  *  Ubit Project [Elc::2003]
00005  *  Author: Eric Lecolinet
00006  *
00007  *  Part of the Ubit Toolkit: A Brick Construction Game Model for Creating GUIs
00008  *
00009  *  (C) 1999-2003 Eric Lecolinet @ ENST Paris
00010  *  WWW: http://www.enst.fr/~elc/ubit   Email: elc@enst.fr (subject: ubit)
00011  *
00012  * ***********************************************************************
00013  * COPYRIGHT NOTICE : 
00014  * THIS PROGRAM IS DISTRIBUTED WITHOUT ANY WARRANTY AND WITHOUT EVEN THE 
00015  * IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 
00016  * YOU CAN REDISTRIBUTE IT AND/OR MODIFY IT UNDER THE TERMS OF THE GNU 
00017  * GENERAL PUBLIC LICENSE AS PUBLISHED BY THE FREE SOFTWARE FOUNDATION; 
00018  * EITHER VERSION 2 OF THE LICENSE, OR (AT YOUR OPTION) ANY LATER VERSION.
00019  * SEE FILES 'COPYRIGHT' AND 'COPYING' FOR MORE DETAILS.
00020  * ***********************************************************************
00021  *
00022  * ==================================================== [Elc:03] ======= *
00023  * ==================================================== ======== ======= */
00024 
00025 #ifndef _umenu_hpp_
00026 #define _umenu_hpp_
00027 //pragma ident  "@(#)umenu.hpp  ubit:03.06.03"
00028 #include <ubit/uwin.hpp>
00029 
00030 /* ==================================================== [Elc:03] ======= */
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 /* ==================================================== [Elc:03] ======= */
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   // implementation
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 /* ==================================================== [Elc:03] ======= */
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 /* ==================================================== [TheEnd] ======= */
00225 /* ==================================================== [Elc:03] ======= */
00226 
00227 

Generated on Tue Mar 8 22:31:24 2005 for Ubit[Eric.Lecolinet@enst.fr] by  doxygen 1.4.1