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
00153 YTreeItemList items;
00154
00155
00156 private:
00157
00158 #if 0
00159
00165 int itemWithId( const YCPValue & id, bool report_error );
00166 #endif
00167
00173 virtual void saveUserInput( YMacroRecorder *macroRecorder );
00174
00175
00179 YCPString label;
00180 };
00181
00182
00183 class YTreeItem
00184 {
00185 friend class YTree;
00186
00187 public:
00188
00192 YTreeItem ( YTree * parent, YCPValue id, YCPString text, bool open = false );
00193
00197 YTreeItem ( YTreeItem * parent, YCPValue id, YCPString text, bool open = false );
00198
00199
00207 YTreeItem ( YTree * parent, YCPString text, void * data, bool open = false );
00208
00209
00217 YTreeItem ( YTreeItem * parent, YCPString text, void * data, bool open = false );
00218
00219
00223 virtual ~YTreeItem();
00224
00225 const YCPString & getText() const { return text; }
00226 const YCPValue & getId() const { return id; }
00227 const YTreeItemList & itemList() const { return items; }
00228 bool isOpenByDefault() const { return openByDefault; }
00229
00234 YTreeItem *findItemWithId ( const YCPValue & id );
00235
00240 YTreeItem *findItemWithText ( const YCPString & text );
00241
00245 void * data() const { return _data; }
00246
00251 void setData( void * newData ) { _data = newData; }
00252
00253
00254 protected:
00255
00256 YCPValue id;
00257 void * _data;
00258 YCPString text;
00259 YTree * parentTree;
00260 YTreeItem * parentItem;
00261 bool openByDefault;
00262
00263 YTreeItemList items;
00264 };
00265
00266
00267
00268 #endif // YTree_h