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 
00110 
00118     void resolveShortcutConflicts();
00119 
00126     virtual void createMenu() = 0;
00127 
00132     const char *shortcutProperty() { return YUIProperty_Label; }
00133 
00134 
00135 protected:
00139     YCPString   label;
00140 
00144     int         next_index;
00145 
00149     YMenuItemList items;
00150 
00154     YMenu *     toplevel_menu;
00155 };
00156 
00157 
00165 class YMenuItem
00166 {
00167 public:
00168 
00172     YMenuItem( const YCPString &        label,
00173                YMenu *                  parent_menu     = 0,
00174                int                      index           = -1,
00175                const YCPValue &         id              = YCPVoid() );
00176 
00177     virtual ~YMenuItem() {}
00178 
00179 
00180     const YMenu *       getParent()     const   { return parent;        }
00181     const YCPValue &    getId()         const   { return id;    }
00182     int                 getIndex()      const   { return index; }
00183     const YCPString &   getLabel()      const   { return label; }
00184     virtual bool        hasChildren()   const   { return false; }
00185     YMenuItemList &     itemList()              { return items; }
00186     virtual bool        isMenu()        const   { return false; }
00187 
00195     virtual void        setLabel( YCPString newLabel ) { label = newLabel; }
00196 
00197 
00198 protected:
00199 
00200     YCPString           label;
00201     YCPValue            id;
00202     YMenu *             parent;
00203     int                 index;
00204     YMenuItemList       items;
00205 };
00206 
00207 
00213 class YMenu: public YMenuItem
00214 {
00215 public:
00216 
00220     YMenu( const YCPString &    label,
00221            YMenu *              parent_menu     = 0,
00222            int                  index           = -1,
00223            const YCPValue &     id              = YCPVoid() );
00224 
00225     virtual ~YMenu() {}
00226 
00227 
00228     virtual bool        hasChildren()   const   { return items.size() > 0; }
00229     void                addMenuItem( YMenuItem *item );
00230     virtual bool        isMenu()        const   { return true; }
00231 };
00232 
00233 
00234 #endif // YMenuButton_h

Generated on Fri Jun 16 18:07:45 2006 for yast2-core by  doxygen 1.4.6