Crazy Eddie's GUI System  0.8.4
MenuBase.h
00001 /***********************************************************************
00002     created:    5/4/2005
00003     author:     Tomas Lindquist Olsen (based on code by Paul D Turner)
00004 
00005     purpose:    Interface to base class for MenuBase widget
00006 *************************************************************************/
00007 /***************************************************************************
00008  *   Copyright (C) 2004 - 2006 Paul D Turner & The CEGUI Development Team
00009  *
00010  *   Permission is hereby granted, free of charge, to any person obtaining
00011  *   a copy of this software and associated documentation files (the
00012  *   "Software"), to deal in the Software without restriction, including
00013  *   without limitation the rights to use, copy, modify, merge, publish,
00014  *   distribute, sublicense, and/or sell copies of the Software, and to
00015  *   permit persons to whom the Software is furnished to do so, subject to
00016  *   the following conditions:
00017  *
00018  *   The above copyright notice and this permission notice shall be
00019  *   included in all copies or substantial portions of the Software.
00020  *
00021  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
00022  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
00023  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
00024  *   IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
00025  *   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
00026  *   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
00027  *   OTHER DEALINGS IN THE SOFTWARE.
00028  ***************************************************************************/
00029 #ifndef _CEGUIMenuBase_h_
00030 #define _CEGUIMenuBase_h_
00031 
00032 #include "../Base.h"
00033 #include "../Window.h"
00034 #include "./ItemListBase.h"
00035 
00036 
00037 #if defined(_MSC_VER)
00038 #   pragma warning(push)
00039 #   pragma warning(disable : 4251)
00040 #endif
00041 
00042 
00043 // Start of CEGUI namespace section
00044 namespace CEGUI
00045 {
00046 
00051 class CEGUIEXPORT MenuBase : public ItemListBase
00052 {
00053 public:
00054     static const String EventNamespace;             
00055 
00056 
00057     /*************************************************************************
00058         Event name constants
00059     *************************************************************************/
00060     // generated internally by Window
00065     static const String EventPopupOpened;
00070     static const String EventPopupClosed;
00071 
00072 
00073     /*************************************************************************
00074         Accessor type functions
00075     *************************************************************************/
00083     float   getItemSpacing(void) const
00084     {
00085         return d_itemSpacing;
00086     }
00087 
00088 
00096     bool    isMultiplePopupsAllowed(void) const
00097     {
00098         return d_allowMultiplePopups;
00099     }
00100 
00108     bool    getAutoCloseNestedPopups(void) const
00109     {
00110         return d_autoCloseNestedPopups;
00111     }
00112 
00120     MenuItem*   getPopupMenuItem(void) const
00121     {
00122         return d_popupItem;
00123     }
00124 
00125 
00126     /*************************************************************************
00127         Manipulators
00128     *************************************************************************/
00133     void    setItemSpacing(float spacing)
00134     {
00135         d_itemSpacing = spacing;
00136         handleUpdatedItemData();
00137     }
00138 
00139 
00147     void    changePopupMenuItem(MenuItem* item);
00148 
00149 
00154     void    setAllowMultiplePopups(bool setting);
00155 
00160     void    setAutoCloseNestedPopups(bool setting)
00161     {
00162         d_autoCloseNestedPopups = setting;
00163     }
00168     void    setPopupMenuItemClosing();
00169 
00170 
00171     /*************************************************************************
00172         Construction and Destruction
00173     *************************************************************************/
00178     MenuBase(const String& type, const String& name);
00179 
00180 
00185     virtual ~MenuBase(void);
00186 
00187 
00188 protected:
00189     /*************************************************************************
00190         New Event Handlers
00191     *************************************************************************/
00196     virtual void    onPopupOpened(WindowEventArgs& e);
00197 
00198 
00203     virtual void    onPopupClosed(WindowEventArgs& e);
00204 
00205     // overridden from base
00206     virtual void onChildRemoved(ElementEventArgs& e);
00207     virtual void onHidden(WindowEventArgs& e);
00208 
00209     /*************************************************************************
00210         Implementation Data
00211     *************************************************************************/
00212     float d_itemSpacing;        
00213 
00214     MenuItem* d_popupItem;      
00215     bool d_allowMultiplePopups; 
00216     bool d_autoCloseNestedPopups; 
00217 
00218 
00219 private:
00220     /*************************************************************************
00221     Private methods
00222     *************************************************************************/
00223     void    addMenuBaseProperties(void);
00224 };
00225 
00226 } // End of  CEGUI namespace section
00227 
00228 
00229 #if defined(_MSC_VER)
00230 #   pragma warning(pop)
00231 #endif
00232 
00233 #endif  // end of guard _CEGUIMenuBase_h_
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends