defuze.me  Client
editabletreeitem.cpp
00001 /**************************************************************************
00002 ** defuze.me Epitech Innovative Project
00003 **
00004 ** Copyright 2010-2012
00005 **   Athena Calmettes - Jocelyn De La Rosa - Francois Gaillard
00006 **   Adrien Jarthon - Alexandre Moore - Luc Peres - Arnaud Sellier
00007 **
00008 ** All rights reserved.
00009 **************************************************************************/
00010 
00011 #include "editabletreeitem.hpp"
00012 #include <QStringList>
00013 
00014 EditableTreeItem::EditableTreeItem(const QVector<QVariant> &data, EditableTreeItem *parent)
00015 {
00016     parentItem = parent;
00017     itemData = data;
00018 }
00019 
00020 EditableTreeItem::EditableTreeItem(const QString &title, EditableTreeItem *parent)
00021 {
00022     parentItem = parent;
00023     QVector<QVariant> data;
00024     data << title;
00025     itemData = data;
00026 }
00027 
00028 EditableTreeItem::~EditableTreeItem()
00029 {
00030     qDeleteAll(childItems);
00031 }
00032 
00033 EditableTreeItem *EditableTreeItem::child(int number)
00034 {
00035     return childItems.value(number);
00036 }
00037 
00038 int EditableTreeItem::childCount() const
00039 {
00040     return childItems.count();
00041 }
00042 
00043 int EditableTreeItem::childNumber() const
00044 {
00045     if (parentItem)
00046         return parentItem->childItems.indexOf(const_cast<EditableTreeItem*>(this));
00047 
00048     return 0;
00049 }
00050 
00051 int EditableTreeItem::columnCount() const
00052 {
00053     return itemData.count();
00054 }
00055 
00056 QVariant EditableTreeItem::data(int column) const
00057 {
00058     return itemData.value(column);
00059 }
00060 
00061 bool EditableTreeItem::insertChildren(int position, int count, int columns)
00062 {
00063     if (position < 0 || position > childItems.size())
00064         return false;
00065 
00066     for (int row = 0; row < count; ++row) {
00067         QVector<QVariant> data(columns);
00068         EditableTreeItem *item = new EditableTreeItem(data, this);
00069         childItems.insert(position, item);
00070     }
00071 
00072     return true;
00073 }
00074 
00075 bool EditableTreeItem::insertColumns(int position, int columns)
00076 {
00077     if (position < 0 || position > itemData.size())
00078         return false;
00079 
00080     for (int column = 0; column < columns; ++column)
00081         itemData.insert(position, QVariant());
00082 
00083     foreach (EditableTreeItem *child, childItems)
00084         child->insertColumns(position, columns);
00085 
00086     return true;
00087 }
00088 
00089 EditableTreeItem *EditableTreeItem::parent()
00090 {
00091     return parentItem;
00092 }
00093 
00094 bool EditableTreeItem::removeChildren(int position, int count)
00095 {
00096     if (position < 0 || position + count > childItems.size())
00097         return false;
00098 
00099     for (int row = 0; row < count; ++row)
00100         delete childItems.takeAt(position);
00101 
00102     return true;
00103 }
00104 
00105 bool EditableTreeItem::removeColumns(int position, int columns)
00106 {
00107     if (position < 0 || position + columns > itemData.size())
00108         return false;
00109 
00110     for (int column = 0; column < columns; ++column)
00111         itemData.remove(position);
00112 
00113     foreach (EditableTreeItem *child, childItems)
00114         child->removeColumns(position, columns);
00115 
00116     return true;
00117 }
00118 
00119 bool EditableTreeItem::setData(int column, const QVariant &value)
00120 {
00121     if (column < 0 || column >= itemData.size())
00122         return false;
00123 
00124     itemData[column] = value;
00125     return true;
00126 }