YTree.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:       YTree.h
00014 
00015   Author:     Stefan Hundhammer <sh@suse.de>
00016   Maintainer: Stefan Hundhammer <sh@suse.de>
00017 
00018 /-*/
00019 
00020 #ifndef YTree_h
00021 #define YTree_h
00022 
00023 #include "YWidget.h"
00024 #include <ycp/YCPString.h>
00025 #include <ycp/YCPList.h>
00026 
00027 
00028 class YMacroRecorder;
00029 class YTreeItem;
00030 
00031 typedef vector<YTreeItem *>                 YTreeItemList;
00032 typedef vector<YTreeItem *>::iterator       YTreeItemListIterator;
00033 typedef vector<YTreeItem *>::const_iterator YTreeItemListConstIterator;
00034 
00035 
00039 class YTree : public YWidget
00040 {
00041     friend class YTreeItem;
00042 
00043 public:
00044 
00050     YTree( const YWidgetOpt & opt, YCPString label );
00051 
00052 
00056     virtual ~YTree();
00057 
00058 
00063     virtual char *widgetClass() { return "YTree"; }
00064 
00065 
00071     virtual void rebuildTree();
00072 
00076     YTreeItem * addItem ( YTreeItem *           parentItem,
00077                           const YCPValue &      id,
00078                           const YCPString &     text,
00079                           const YCPString &     iconName,
00080                           bool                  open );
00081 
00089     YTreeItem * addItem ( YTreeItem *           parentItem,
00090                           const YCPString &     text,
00091                           const YCPString &     iconName,
00092                           void *                data,
00093                           bool                  open );
00094 
00098     YCPValue changeWidget( const YCPSymbol & property, const YCPValue & newvalue );
00099 
00103     YCPValue queryWidget( const YCPSymbol & property );
00104 
00109     virtual void setLabel( const YCPString & label );
00110 
00118     YCPString getLabel();
00119 
00124     const char *shortcutProperty() { return YUIProperty_Label; }
00125     
00130     const char *userInputProperty() { return YUIProperty_CurrentItem; }    
00131 
00137     bool parseItemList( const YCPList & itemList, YTreeItem *parentItem = 0);
00138 
00142     bool hasIcons() const { return _hasIcons; }
00143 
00150     YCPValue currentBranch() const;
00151 
00152 
00153 protected:
00154 
00159     virtual const YTreeItem * getCurrentItem() const = 0;
00160 
00164     virtual void setCurrentItem ( YTreeItem * it ) = 0;
00165 
00170     YTreeItem *findItemWithId   ( const YCPValue & id );
00171 
00176     YTreeItem *findItemWithText ( const YCPString & text );
00177 
00182     YCPList itemsTermList( YTreeItemList items );
00183 
00187     void findOpenItems( YCPMap & openItems, YTreeItemList items );
00188 
00193     virtual void deleteAllItems();
00194 
00198     static void branchToList( YCPList & branchList, const YTreeItem * item );
00199 
00200 
00201     //
00202     // Data members
00203     //
00204     
00205     YTreeItemList items;
00206 
00207 
00208 private:
00209 
00215     virtual void saveUserInput( YMacroRecorder *macroRecorder );
00216 
00217 
00218     //
00219     // Data members
00220     //
00221 
00222     YCPString label;
00223     bool _hasIcons;
00224 };
00225 
00226 
00227 class YTreeItem
00228 {
00229     friend class YTree;
00230 
00231 public:
00232 
00236     YTreeItem ( YTree *                 parent,
00237                 const YCPValue  &       id,
00238                 const YCPString &       text,
00239                 const YCPString &       iconName,
00240                 bool                    open = false );
00241 
00245     YTreeItem ( YTreeItem *             parent,
00246                 const YCPValue &        id,
00247                 const YCPString &       text,
00248                 const YCPString &       iconName,
00249                 bool                    open = false );
00250 
00251 
00259     YTreeItem ( YTree *                 parent,
00260                 const YCPString &       text,
00261                 const YCPString &       iconName,
00262                 void *                  data,
00263                 bool                    open = false );
00264 
00265 
00273     YTreeItem ( YTreeItem *             parent,
00274                 const YCPString &       text,
00275                 const YCPString &       iconName,
00276                 void *                  data,
00277                 bool                    open = false );
00278 
00279 
00283     virtual ~YTreeItem();
00284 
00285     YTreeItem *                 parent()                const { return _parentItem; }
00286     YTree *                     tree()                  const { return _parentTree; }
00287     const YCPString &           getText()               const { return _text;   }
00288     const YCPValue &            getId()                 const { return _id;     }
00289     const YTreeItemList &       itemList()              const { return _items;  }
00290     bool                        isOpenByDefault()       const { return _openByDefault; }
00291 
00296     YTreeItem *findItemWithId   ( const YCPValue & id );
00297 
00302     YTreeItem *findItemWithText ( const YCPString & text );
00303 
00308     void setOpen( bool open ) { _open = open; }
00309 
00313     bool isOpen() const { return _open; }
00314 
00318     void * data() const { return _data; }
00319 
00324     void setData( void * data ) { _data = data; }
00325 
00329     YCPString iconName() const;
00330 
00334     void setIconName( const YCPString & icon ) { _iconName = icon; }
00335 
00336 
00337 protected:
00338 
00339     //
00340     // Data members
00341     //
00342 
00343     YCPValue            _id;
00344     void *              _data;
00345     YCPString           _text;
00346     YCPString           _iconName;
00347     YTree *             _parentTree;
00348     YTreeItem *         _parentItem;
00349     bool                _openByDefault;
00350     bool                _open;
00351 
00352     YTreeItemList       _items;
00353 };
00354 
00355 
00356 
00357 #endif // YTree_h

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