00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
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
00203
00204
00205 YTreeItemList items;
00206
00207
00208 private:
00209
00215 virtual void saveUserInput( YMacroRecorder *macroRecorder );
00216
00217
00218
00219
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
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