00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "elements/CEGUIMenuBase.h"
00027 #include "elements/CEGUIPopupMenu.h"
00028 #include "elements/CEGUIMenuItem.h"
00029
00030
00031 namespace CEGUI
00032 {
00033
00034
00035
00036
00037 MenuBaseProperties::ItemSpacing MenuBase::d_itemSpacingProperty;
00038 MenuBaseProperties::HorzPadding MenuBase::d_horzPaddingProperty;
00039 MenuBaseProperties::VertPadding MenuBase::d_vertPaddingProperty;
00040 MenuBaseProperties::BorderWidth MenuBase::d_borderWidthProperty;
00041 MenuBaseProperties::BackgroundColours MenuBase::d_backgroundColoursProperty;
00042 MenuBaseProperties::AllowMultiplePopups MenuBase::d_allowMultiplePopupsProperty;
00043
00044
00045
00046
00047
00048 const colour MenuBase::DefaultBackgroundColour = 0xFFFFFFFF;
00049
00050
00051 const String MenuBase::EventNamespace("MenuBase");
00052 const String MenuBase::EventPopupOpened( (utf8*)"PopupOpened" );
00053 const String MenuBase::EventPopupClosed( (utf8*)"PopupClosed" );
00054
00055
00056
00057
00058 MenuBase::MenuBase(const String& type, const String& name)
00059 : ItemListBase(type, name),
00060 d_itemSpacing(0.0f),
00061 d_horzPadding(0.0f),
00062 d_vertPadding(0.0f),
00063 d_borderWidth(0.0f),
00064 d_backgroundColours(DefaultBackgroundColour),
00065 d_popup(NULL),
00066 d_allowMultiplePopups(false)
00067 {
00068
00069 addMenuBaseEvents();
00070
00071
00072 addMenuBaseProperties();
00073 }
00074
00075
00076
00077
00078
00079 MenuBase::~MenuBase(void)
00080 {
00081 }
00082
00083
00084
00085
00086
00087 void MenuBase::changePopupMenuItem(MenuItem* item)
00088 {
00089 if (!d_allowMultiplePopups&&d_popup==item)
00090 return;
00091
00092 if (!d_allowMultiplePopups&&d_popup!=NULL)
00093 {
00094 d_popup->closePopupMenu(false);
00095 WindowEventArgs we(d_popup->getPopupMenu());
00096 d_popup = NULL;
00097 onPopupClosed(we);
00098 }
00099
00100 if (item!=NULL)
00101 {
00102 d_popup = item;
00103 d_popup->getPopupMenu()->openPopupMenu();
00104 WindowEventArgs we(d_popup->getPopupMenu());
00105 onPopupOpened(we);
00106 }
00107
00108 }
00109
00110
00111
00112
00113
00114 void MenuBase::addMenuBaseEvents(void)
00115 {
00116 addEvent(EventPopupOpened);
00117 addEvent(EventPopupClosed);
00118 }
00119
00120
00121
00122
00123
00124
00125 void MenuBase::onPopupOpened(WindowEventArgs& e)
00126 {
00127 fireEvent(EventPopupOpened, e, EventNamespace);
00128 }
00129
00130
00131
00132
00133
00134
00135 void MenuBase::onPopupClosed(WindowEventArgs& e)
00136 {
00137 fireEvent(EventPopupClosed, e, EventNamespace);
00138 }
00139
00140
00141 void MenuBase::addMenuBaseProperties(void)
00142 {
00143 addProperty(&d_itemSpacingProperty);
00144 addProperty(&d_horzPaddingProperty);
00145 addProperty(&d_vertPaddingProperty);
00146 addProperty(&d_borderWidthProperty);
00147 addProperty(&d_backgroundColoursProperty);
00148 addProperty(&d_allowMultiplePopupsProperty);
00149 }
00150
00151 }