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 bool open );
00080
00088 YTreeItem * addItem ( YTreeItem * parentItem,
00089 const YCPString & text,
00090 void * data,
00091 bool open );
00092
00096 YCPValue changeWidget( const YCPSymbol & property, const YCPValue & newvalue );
00097
00101 YCPValue queryWidget( const YCPSymbol & property );
00102
00107 virtual void setLabel( const YCPString & label );
00108
00116 YCPString getLabel();
00117
00122 const char *shortcutProperty() { return YUIProperty_Label; }
00123
00124
00125 protected:
00126
00131 virtual const YTreeItem * getCurrentItem() const = 0;
00132
00136 virtual void setCurrentItem ( YTreeItem * it ) = 0;
00137
00142 YTreeItem *findItemWithId ( const YCPValue & id );
00143
00148 YTreeItem *findItemWithText ( const YCPString & text );
00149
00154 YCPList itemsTermList( YTreeItemList items );
00155
00159 void findOpenItems( YCPMap & openItems, YTreeItemList items );
00160
00164 YTreeItemList items;
00165
00166
00167 private:
00168
00169 #if 0
00170
00176 int itemWithId( const YCPValue & id, bool report_error );
00177 #endif
00178
00184 virtual void saveUserInput( YMacroRecorder *macroRecorder );
00185
00186
00190 YCPString label;
00191 };
00192
00193
00194 class YTreeItem
00195 {
00196 friend class YTree;
00197
00198 public:
00199
00203 YTreeItem ( YTree * parent, YCPValue id, YCPString text, bool open = false );
00204
00208 YTreeItem ( YTreeItem * parent, YCPValue id, YCPString text, bool open = false );
00209
00210
00218 YTreeItem ( YTree * parent, YCPString text, void * data, bool open = false );
00219
00220
00228 YTreeItem ( YTreeItem * parent, YCPString text, void * data, bool open = false );
00229
00230
00234 virtual ~YTreeItem();
00235
00236 const YCPString & getText() const { return text; }
00237 const YCPValue & getId() const { return id; }
00238 const YTreeItemList & itemList() const { return items; }
00239 bool isOpenByDefault() const { return openByDefault; }
00240
00245 YTreeItem *findItemWithId ( const YCPValue & id );
00246
00251 YTreeItem *findItemWithText ( const YCPString & text );
00252
00257 void setOpen( bool open ) { _open = open; }
00258
00262 bool isOpen() const { return _open; }
00263
00267 void * data() const { return _data; }
00268
00273 void setData( void * newData ) { _data = newData; }
00274
00275
00276 protected:
00277
00278 YCPValue id;
00279 void * _data;
00280 YCPString text;
00281 YTree * parentTree;
00282 YTreeItem * parentItem;
00283 bool openByDefault;
00284 bool _open;
00285
00286 YTreeItemList items;
00287 };
00288
00289
00290
00291 #endif // YTree_h