00001
00002
00003
00004
00005
00006 #include <QStringList>
00007
00008 #include "treeitem.h"
00009 #include "main.h"
00010 #include "recordtabledata.h"
00011
00012
00013 TreeItem::TreeItem(const QMap<QString, QString> &data, TreeItem *parent)
00014 {
00015 parentItem = parent;
00016 fieldtable = data;
00017 }
00018
00019
00020 TreeItem::~TreeItem()
00021 {
00022
00023
00024
00025
00026
00027
00028 recordtable_clear();
00029
00030 qDeleteAll(childItems);
00031 }
00032
00033
00034 TreeItem *TreeItem::child(int number)
00035 {
00036 return childItems.value(number);
00037 }
00038
00039
00040
00041 int TreeItem::childCount() const
00042 {
00043 return childItems.count();
00044 }
00045
00046
00047
00048
00049 int TreeItem::childNumber() const
00050 {
00051 if (parentItem)
00052 return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));
00053
00054 return 0;
00055 }
00056
00057
00058 int TreeItem::fieldCount() const
00059 {
00060 return fieldtable.count();
00061 }
00062
00063
00064
00065 QVariant TreeItem::data(QString name)
00066 {
00067
00068 if(name=="dynamicname")
00069 {
00070
00071 int rcnt=this->recordtable_getrowcount();
00072
00073
00074 if(rcnt==0) return fieldtable["name"];
00075 else
00076 {
00077
00078
00079 QString r,i;
00080 r=fieldtable["name"]+" ["+i.setNum(rcnt)+"]";
00081 return r;
00082 }
00083 }
00084 else
00085 {
00086
00087 if(fieldtable.contains(name)) return fieldtable[name];
00088 else
00089 {
00090 critical_error("In TreeItem data getting with unavailable name "+name);
00091 exit(1);
00092 return QVariant();
00093 }
00094 }
00095 }
00096
00097
00098
00099
00100
00101 void TreeItem::setData(QString n,QString v)
00102 {
00103 if(n=="id" ||
00104 n=="name" ||
00105 n=="ctime")
00106 {
00107
00108 fieldtable[n]=v;
00109 }
00110 else
00111 {
00112 qDebug() << "Set undestand field " << n << " to item of branch tree";
00113 exit(1);
00114 }
00115 }
00116
00117
00118 TreeItem *TreeItem::parent()
00119 {
00120 return parentItem;
00121 }
00122
00123
00124
00125
00126
00127
00128 bool TreeItem::insertChildren(int position, int count, int columns)
00129 {
00130 if (position < 0 || position > childItems.size())
00131 return false;
00132
00133 for (int row = 0; row < count; ++row) {
00134 QMap<QString, QString> data;
00135 TreeItem *item = new TreeItem(data, this);
00136 childItems.insert(position, item);
00137 }
00138
00139 return true;
00140 }
00141
00142
00143
00144
00145 bool TreeItem::addChildren(void)
00146 {
00147 QMap<QString, QString> data;
00148
00149 TreeItem *item = new TreeItem(data, this);
00150
00151 childItems << item;
00152
00153 return true;
00154 }
00155
00156
00157 bool TreeItem::removeChildren(int position, int count)
00158 {
00159 if (position < 0 || position + count > childItems.size())
00160 return false;
00161
00162 for (int row = 0; row < count; ++row)
00163 delete childItems.takeAt(position);
00164
00165 return true;
00166 }
00167
00168
00169 bool TreeItem::removeChildrenLink(int position, int count)
00170 {
00171 if (position < 0 || position + count > childItems.size())
00172 return false;
00173
00174
00175 for (int row = 0; row < count; ++row)
00176 childItems.removeAt(position);
00177
00178 return true;
00179 }
00180
00181
00182 bool TreeItem::move_up(void)
00183 {
00184
00185 int num=childNumber();
00186
00187
00188 if(num==0)return false;
00189
00190
00191 ( parentItem->childItems ).swap(num,num-1);
00192
00193 return true;
00194 }
00195
00196
00197 bool TreeItem::move_dn(void)
00198 {
00199
00200 int num=childNumber();
00201
00202
00203 if(num>=(parentItem->childCount()-1))return false;
00204
00205
00206 ( parentItem->childItems ).swap(num,num+1);
00207
00208 return true;
00209 }
00210
00211
00212
00213 QStringList TreeItem::get_path(void)
00214 {
00215 return get_path_as_field("id");
00216 }
00217
00218
00219 QStringList TreeItem::get_path_as_name(void)
00220 {
00221 return get_path_as_field("name");
00222 }
00223
00224
00225 QStringList TreeItem::get_path_as_field(QString field)
00226 {
00227 QStringList path;
00228 TreeItem *curritem=this;
00229
00230 path << (curritem->data(field)).toString();
00231
00232 while(curritem->parent()!=NULL)
00233 {
00234 curritem=curritem->parent();
00235 path << (curritem->data(field)).toString();
00236 }
00237
00238
00239 int k=path.size()-1;
00240 int j=path.size()/2;
00241 for(int i=0;i<j;++i)path.swap(i,k-i);
00242
00243 return path;
00244 }
00245
00246
00247
00248 QList<QStringList> TreeItem::get_all_children_path(void)
00249 {
00250
00251 get_all_children_path_recurse(this,0);
00252
00253
00254 QList<QStringList> pathlist=get_all_children_path_recurse(this,1);
00255
00256 return pathlist;
00257 }
00258
00259
00260
00261
00262 QList<QStringList> TreeItem::get_all_children_path_recurse(TreeItem *item,int mode)
00263 {
00264 static QList<QStringList> pathlist;
00265
00266
00267 if(mode==0)
00268 {
00269 pathlist.clear();
00270 return QList<QStringList>();
00271 }
00272
00273 for(int i=0;i<(item->childCount());i++)
00274 {
00275 QStringList path=(item->child(i))->get_path();
00276 pathlist << path;
00277 get_all_children_path_recurse(item->child(i),2);
00278 }
00279
00280 if(mode==1)return pathlist;
00281 else return QList<QStringList>();
00282 }
00283
00284
00285 void TreeItem::recordtable_init(QDomElement dommodel)
00286 {
00287 rtable.init(dommodel);
00288 }
00289
00290
00291 int TreeItem::recordtable_getrowcount(void)
00292 {
00293 return rtable.size();
00294 }
00295
00296
00297 QDomDocument TreeItem::recordtable_export_data_to_dom(void)
00298 {
00299 return rtable.export_data_to_dom();
00300 }
00301
00302
00303 void TreeItem::recordtable_clear(void)
00304 {
00305 rtable.clear();
00306 }
00307
00308 recordtabledata *TreeItem::recordtable_gettabledata(void)
00309 {
00310 return &rtable;
00311 }
00312