00001 #ifndef __CMenuItemDisplay__
00002 #define __CMenuItemDisplay__
00003
00004 #include "CControlPanel.hpp"
00005 #include "CMenuItem.hpp"
00006 #include "CTextLabel.hpp"
00007 #include "CImageLabel.hpp"
00008 #include <Mathtools/CBounds.hpp>
00009 #include <Collections/TAutomaticPointer.hpp>
00010 #include "SMenuColours.hpp"
00011
00012
00013
00014 using Exponent::Collections::TAutomaticPointer;
00015 using Exponent::GUI::Controls::CControlPanel;
00016 using Exponent::GUI::Controls::CMenuItem;
00017 using Exponent::GUI::Controls::CTextLabel;
00018 using Exponent::GUI::Controls::CImageLabel;
00019 using Exponent::MathTools::CBounds;
00020 using Exponent::GUI::Controls::SMenuColours;
00021
00022
00023
00024 namespace Exponent
00025 {
00026 namespace GUI
00027 {
00028 namespace Controls
00029 {
00047 class CMenuItemDisplay : public CControlPanel
00048 {
00050 EXPONENT_CLASS_DECLARATION;
00053
00054
00055 public:
00056
00057
00058
00059 const static long CMENUITEM_DISPLAY_WIDTH_FROM_LEFT = 24;
00060 const static long CMENUITEM_DISPLAY_WIDTH_FROM_RIGHT = 48;
00061 const static long CMENUITEM_DISPLAY_SEPERATOR_WIDTH_FROM_RIGHT = 12;
00063
00064
00076 CMenuItemDisplay(IControlRoot *root, const long uniqueId, const CRect &area, CMenuItem *menuItem, const bool useIcons, const bool selectable, const bool subMenu, const long iconSize);
00077
00081 virtual ~CMenuItemDisplay();
00082
00083
00084
00089 virtual void setMenuItem(CMenuItem *item);
00090
00095 virtual const CMenuItem *getMenuItem() const { return m_menuItem.getPointer(); }
00096
00101 virtual CMenuItem *getMutableMenuItem() { return m_menuItem.getMutablePointer(); }
00102
00103
00104
00109 virtual void setFont(CFont *font);
00110
00115 virtual void setColours(const SMenuColours &colours);
00116
00117
00118
00124 virtual void mouseIsOver(const bool mouseOver = true);
00125
00130 virtual void useIcons(const bool useIcons = true) { m_useIcons = useIcons; }
00131
00132
00133
00138 virtual void drawControl(CGraphics &graphics);
00139
00140
00141
00142 protected:
00143
00144
00145
00150 class CMenuItemSubMenuPointer : public CControl
00151 {
00153 EXPONENT_CLASS_DECLARATION;
00156 public:
00157
00164 CMenuItemSubMenuPointer(IControlRoot *root, const long uniqueId, const CRect &area);
00165
00169 virtual ~CMenuItemSubMenuPointer();
00170
00175 virtual void drawControl(CGraphics &graphics);
00176
00181 void setPointerColours(const CAlphaColour &pointerColour)
00182 {
00183 m_pointerColour = pointerColour;
00184 this->update();
00185 }
00186
00187 protected:
00188
00189 CAlphaColour m_pointerColour;
00190 };
00191
00196 class CMenuItemSelectable : public CControl
00197 {
00199 EXPONENT_CLASS_DECLARATION;
00202 public:
00203
00211 CMenuItemSelectable(IControlRoot *root, const long uniqueId, const CRect &area, CMenuItem *item);
00212
00216 virtual ~CMenuItemSelectable();
00217
00222 virtual void drawControl(CGraphics &graphics);
00223
00228 void setMenuItem(CMenuItem *item) { m_menuItem = item; }
00229
00230 protected:
00231
00232 TAutomaticPointer<CMenuItem> m_menuItem;
00233 };
00234
00235
00236
00237 SMenuColours m_colours;
00238 bool m_mouseOver;
00239 bool m_useIcons;
00240 bool m_hasSubMenu;
00241 bool m_hasSelect;
00242 long m_iconSize;
00244 TAutomaticPointer<CMenuItem> m_menuItem;
00245 TAutomaticPointer<CTextLabel> m_titleLabel;
00246 TAutomaticPointer<CImageLabel> m_imageLabel;
00247 TAutomaticPointer<CMenuItemSubMenuPointer> m_subMenuPointer;
00248 TAutomaticPointer<CMenuItemSelectable> m_selectableControl;
00249 };
00250 }
00251 }
00252 }
00253 #endif // End of CMenuItemDisplay.hpp