00001 #ifndef _GMENU_IMPL_H_ 00002 #define _GMENU_IMPL_H_ 00003 00004 class GSubMenu; 00005 class GMenuItem; 00006 class SubMenuImpl; 00007 class MenuImpl; 00008 00009 #include "GPopup.h" 00010 00011 class MenuClickImpl 00012 { 00013 friend class MenuItemImpl; 00014 00015 protected: 00016 GMenuItem *Clicked; 00017 00018 public: 00019 MenuClickImpl() 00020 { 00021 Clicked = 0; 00022 } 00023 00024 virtual ~MenuClickImpl() 00025 { 00026 } 00027 00028 GMenuItem *ItemClicked() 00029 { 00030 return Clicked; 00031 } 00032 00033 virtual GView *View() { return 0; } 00034 virtual SubMenuImpl *IsSub() { return 0; } 00035 virtual MenuImpl *IsMenu() { return 0; } 00036 }; 00037 00038 class SubMenuImpl : public GPopup, public MenuClickImpl 00039 { 00040 class SubMenuImplPrivate *d; 00041 00042 public: 00043 SubMenuImpl(GSubMenu *Sub); 00044 ~SubMenuImpl(); 00045 00046 const char *GetClass() { return "SubMenuImpl"; } 00047 bool Visible() { return GPopup::Visible(); } 00048 void Visible(bool b); 00049 void Layout(int x, int y); 00050 void OnPaint(GSurface *pDC); 00051 bool OnKey(GKey &k); 00052 00053 GView *View() { return this; } 00054 SubMenuImpl *IsSub() { return this; } 00055 GSubMenu *GetSub(); 00056 }; 00057 00058 class MenuImpl : public GView, public MenuClickImpl 00059 { 00060 class MenuImplPrivate *d; 00061 00062 public: 00063 MenuImpl(GMenu *Sub); 00064 ~MenuImpl(); 00065 00066 const char *GetClass() { return "MenuImpl"; } 00067 bool Pour(GRegion &r); 00068 void OnPaint(GSurface *pDC); 00069 bool HasSubOpen(); 00070 00071 GView *View() { return this; } 00072 MenuImpl *IsMenu() { return this; } 00073 }; 00074 00075 class MenuItemImpl : public GView 00076 { 00077 class MenuItemImplPrivate *d; 00078 00079 public: 00080 MenuItemImpl(GMenuItem *Item); 00081 ~MenuItemImpl(); 00082 00083 const char *GetClass() { return "MenuItemImpl"; } 00084 GMenuItem *Item(); 00085 void ShowSub(); 00086 void HideSub(bool SetClick = false); 00087 void Activate(); 00088 bool IsOnSubMenu(); 00089 void OnPaint(GSurface *pDC); 00090 void OnMouseClick(GMouse &m); 00091 void OnMouseEnter(GMouse &m); 00092 void OnMouseExit(GMouse &m); 00093 }; 00094 00095 #endif