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