Main Page | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members | File Members | Examples

YMenuButton.h

Go to the documentation of this file.
00001 /*---------------------------------------------------------------------\
00002 |                                                                      |
00003 |                      __   __    ____ _____ ____                      |
00004 |                      \ \ / /_ _/ ___|_   _|___ \                     |
00005 |                       \ V / _` \___ \ | |   __) |                    |
00006 |                        | | (_| |___) || |  / __/                     |
00007 |                        |_|\__,_|____/ |_| |_____|                    |
00008 |                                                                      |
00009 |                               core system                            |
00010 |                                                        (C) SuSE GmbH |
00011 \----------------------------------------------------------------------/
00012 
00013   File:       YMenuButton.h
00014 
00015   Author:     Stefan Hundhammer <sh@suse.de>
00016 
00017 /-*/
00018 
00019 #ifndef YMenuButton_h
00020 #define YMenuButton_h
00021 
00022 #include "YWidget.h"
00023 #include <ycp/YCPString.h>
00024 #include <ycp/YCPVoid.h>
00025 
00026 class YMenu;
00027 class YMenuItem;
00028 
00029 typedef vector<YMenuItem *>                 YMenuItemList;
00030 typedef vector<YMenuItem *>::iterator       YMenuItemListIterator;
00031 typedef vector<YMenuItem *>::const_iterator YMenuItemListConstIterator;
00032 
00033 
00037 class YMenuButton : public YWidget
00038 {
00039 public:
00045     YMenuButton( const YWidgetOpt & opt, YCPString label );
00046 
00051     virtual char *widgetClass() { return "YMenuButton"; }
00052 
00057     YCPValue changeWidget( const YCPSymbol & property, const YCPValue & newvalue );
00058 
00063     YCPValue queryWidget( const YCPSymbol & property );
00064 
00069     virtual void setLabel( const YCPString & label );
00070 
00077     YCPString getLabel();
00078 
00082     YMenu * getToplevelMenu()   { return toplevel_menu; }
00083 
00084 
00091     void        addMenuItem( const YCPString &  item_label,
00092                              const YCPValue &   item_id,
00093                              YMenu *            parent_menu = 0 );
00094     
00101     YMenu *     addSubMenu( const YCPString &   sub_menu_label,
00102                             YMenu *             parent_menu = 0 );
00103     
00108     YCPValue indexToId( int index );
00109 
00116     virtual void createMenu() = 0;
00117 
00122     const char *shortcutProperty() { return YUIProperty_Label; }
00123     
00124 
00125 protected:
00129     YCPString   label;
00130 
00134     int         next_index;
00135 
00139     YMenuItemList items;
00140     
00144     YMenu *     toplevel_menu;
00145 };
00146 
00147 
00155 class YMenuItem
00156 {
00157 public:
00158 
00162     YMenuItem( const YCPString &        label,
00163                YMenu *                  parent_menu     = 0,
00164                int                      index           = -1,
00165                const YCPValue &         id              = YCPVoid() );
00166 
00167     virtual ~YMenuItem() {}
00168 
00169 
00170     const YMenu *       getParent()     const   { return parent;        }
00171     const YCPValue &    getId()         const   { return id;    }
00172     int                 getIndex()      const   { return index; }
00173     const YCPString &   getLabel()      const   { return label; }
00174     virtual bool        hasChildren()   const   { return false; }
00175     YMenuItemList &     itemList()              { return items; }
00176     virtual bool        isMenu()        const   { return false; }
00177 
00185     virtual void        setLabel( YCPString newLabel ) { label = newLabel; }
00186 
00187     
00188 protected:
00189 
00190     YCPString           label;
00191     YCPValue            id;
00192     YMenu *             parent;
00193     int                 index;
00194     YMenuItemList       items;
00195 };
00196 
00197 
00203 class YMenu: public YMenuItem
00204 {
00205 public:
00206 
00210     YMenu( const YCPString &    label,
00211            YMenu *              parent_menu     = 0,
00212            int                  index           = -1,
00213            const YCPValue &     id              = YCPVoid() );
00214 
00215     virtual ~YMenu() {}
00216 
00217 
00218     virtual bool        hasChildren()   const   { return items.size() > 0; }
00219     void                addMenuItem( YMenuItem *item );
00220     virtual bool        isMenu()        const   { return true; }
00221 };
00222 
00223 
00224 #endif // YMenuButton_h

Generated on Fri Nov 9 18:15:23 2007 for yast2-core by doxygen 1.3.6