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 void Visible(bool b); 00047 void OnPaint(GSurface *pDC); 00048 bool OnKey(GKey &k); 00049 00050 GView *View() { return this; } 00051 SubMenuImpl *IsSub() { return this; } 00052 }; 00053 00054 class MenuImpl : public GView, public MenuClickImpl 00055 { 00056 class MenuImplPrivate *d; 00057 00058 public: 00059 MenuImpl(GMenu *Sub); 00060 ~MenuImpl(); 00061 00062 bool Pour(GRegion &r); 00063 void OnPaint(GSurface *pDC); 00064 bool HasSubOpen(); 00065 00066 GView *View() { return this; } 00067 MenuImpl *IsMenu() { return this; } 00068 }; 00069 00070 class MenuItemImpl : public GView 00071 { 00072 class MenuItemImplPrivate *d; 00073 00074 public: 00075 MenuItemImpl(GMenuItem *Item); 00076 ~MenuItemImpl(); 00077 00078 GMenuItem *Item(); 00079 void ShowSub(); 00080 void HideSub(bool SetClick = false); 00081 void Activate(); 00082 bool IsOnSubMenu(); 00083 void OnPaint(GSurface *pDC); 00084 void OnMouseClick(GMouse &m); 00085 void OnMouseEnter(GMouse &m); 00086 void OnMouseExit(GMouse &m); 00087 }; 00088 00089 #endif