QElectroTech  0.70
elementcollectionitem.cpp
Go to the documentation of this file.
1 /*
2  Copyright 2006-2019 The QElectroTech Team
3  This file is part of QElectroTech.
4 
5  QElectroTech is free software: you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation, either version 2 of the License, or
8  (at your option) any later version.
9 
10  QElectroTech is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
17 */
18 
19 #include "elementcollectionitem.h"
20 
26 {}
27 
33 {
34  setText(QString());
35  setToolTip(QString());
36  setIcon(QIcon());
37  setData(QString());
38 }
39 
48 ElementCollectionItem *ElementCollectionItem::lastItemForPath(const QString &path, QString &no_found_path)
49 {
50  QStringList str_list = path.split("/");
51  if (str_list.isEmpty()) return nullptr;
52 
53  ElementCollectionItem *return_eci = this;
54  foreach (QString str, str_list)
55  {
56  ElementCollectionItem *eci = return_eci->childWithCollectionName(str);
57  if (!eci)
58  {
59  no_found_path = str;
60  return return_eci;
61  }
62  else
63  return_eci = eci;
64  }
65 
66  return nullptr;
67 }
68 
76 {
77  rowCount();
78  foreach (QStandardItem *qsi, directChilds()) {
79  ElementCollectionItem *eci = static_cast<ElementCollectionItem *>(qsi);
80  if (eci->name() == name)
81  return eci;
82  }
83 
84  return nullptr;
85 }
86 
92 QList<QStandardItem *> ElementCollectionItem::directChilds() const
93 {
94  QList <QStandardItem *> item_list;
95 
96  for (int i=0 ; i<rowCount() ; i++)
97  item_list.append(child(i));
98 
99  return item_list;
100 }
101 
110 {
111  if (name.isEmpty())
112  return -1;
113 
114  QList <ElementCollectionItem *> child;
115  //The item to insert is an element we search from element child
116  if (name.endsWith(".elmt"))
117  {
118  child = elementsDirectChild();
119  //There isn't element, we insert at last position
120  if (child.isEmpty())
121  return rowCount();
122  }
123  //The item is a directory, we search from directory child
124  else
125  {
126  child = directoriesDirectChild();
127  //There isn't directory, we insert at first position
128  if(child.isEmpty())
129  return 0;
130  }
131 
132  foreach (ElementCollectionItem *eci, child)
133  if (eci->name() > name)
134  return model()->indexFromItem(eci).row();
135 
136  return (model()->indexFromItem(child.last()).row() + 1);
137 }
138 
145 {
146  QStringList str_list = path.split("/");
147  if (str_list.isEmpty())
148  return nullptr;
149 
150  ElementCollectionItem *match_eci = this;
151  foreach (QString str, str_list) {
152  ElementCollectionItem *eci = match_eci->childWithCollectionName(str);
153  if (!eci)
154  return nullptr;
155  else
156  match_eci = eci;
157  }
158 
159  return match_eci;
160 }
161 
166 QList<ElementCollectionItem *> ElementCollectionItem::elementsDirectChild() const
167 {
168  QList <ElementCollectionItem *> element_child;
169 
170  foreach (QStandardItem *qsi, directChilds()) {
171  ElementCollectionItem *eci = static_cast<ElementCollectionItem *>(qsi);
172  if (eci->isElement())
173  element_child.append(eci);
174  }
175 
176  return element_child;
177 }
178 
183 QList<ElementCollectionItem *> ElementCollectionItem::directoriesDirectChild() const
184 {
185  QList <ElementCollectionItem *> dir_child;
186 
187  foreach (QStandardItem *qsi, directChilds()) {
188  ElementCollectionItem *eci = static_cast<ElementCollectionItem *>(qsi);
189  if (eci->isDir())
190  dir_child.append(eci);
191  }
192 
193  return dir_child;
194 }
195 
200 QList<ElementCollectionItem *> ElementCollectionItem::elementsChild() const
201 {
202  QList <ElementCollectionItem *> list = elementsDirectChild();
203 
204  foreach (ElementCollectionItem *eci, directoriesChild())
205  list.append(eci->elementsDirectChild());
206 
207  return list;
208 }
209 
214 QList<ElementCollectionItem *> ElementCollectionItem::directoriesChild() const
215 {
216  QList<ElementCollectionItem *> list = directoriesDirectChild();
217  QList<ElementCollectionItem *> child_list;
218  foreach (ElementCollectionItem *eci, list) {
219  child_list.append(eci->directoriesChild());
220  }
221 
222  list.append(child_list);
223  return list;
224 }
225 
230 QList<ElementCollectionItem *> ElementCollectionItem::items() const
231 {
232  QList <ElementCollectionItem *> list;
233 
234  for (int i=0 ; i<rowCount() ; i++) {
235  ElementCollectionItem *eci = static_cast<ElementCollectionItem *>(child(i));
236  list.append(eci);
237  list.append(eci->items());
238  }
239 
240  return list;
241 }
242 
244 {
245  eci->setUpData();
246 }
The ElementCollectionItem class This class represent a item (a directory or an element) in a element ...
virtual void clearData()
ElementCollectionItem::clearData Reset the data.
virtual QString name() const =0
QList< ElementCollectionItem * > directoriesDirectChild() const
ElementCollectionItem::directoriesDirectChild.
QList< ElementCollectionItem * > directoriesChild() const
ElementCollectionItem::directoriesChild.
QList< ElementCollectionItem * > items() const
ElementCollectionItem::items.
QList< ElementCollectionItem * > elementsChild() const
ElementCollectionItem::elementsChild.
void setUpData(ElementCollectionItem *eci)
QList< QStandardItem * > directChilds() const
ElementCollectionItem::directChilds Return the direct child of this item.
ElementCollectionItem * itemAtPath(const QString &path)
ElementCollectionItem::itemAtPath.
ElementCollectionItem * lastItemForPath(const QString &path, QString &no_found_path)
ElementCollectionItem::lastItemForPath Return the last existing item in this ElementCollectionItem hi...
ElementCollectionItem()
ElementCollectionItem::ElementCollectionItem Constructor.
ElementCollectionItem * childWithCollectionName(const QString &name) const
virtual bool isElement() const =0
virtual bool isDir() const =0
int rowForInsertItem(const QString &name)
ElementCollectionItem::rowForInsertItem Return the row for insert a new child item to this item with ...
QList< ElementCollectionItem * > elementsDirectChild() const
ElementCollectionItem::elementsDirectChild.
virtual void setUpData()=0