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 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 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 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