Added a very simple tooltip for ircusers (aka: visible in the nicklist)
[quassel.git] / src / client / treemodel.cpp
index 929622d..42a40f7 100644 (file)
@@ -105,7 +105,6 @@ void AbstractTreeItem::removeAllChilds() {
     return;
 
   emit beginRemoveChilds(0, childCount() - 1);
-
   AbstractTreeItem *child;
   foreach(int column, _childItems.keys()) {
     QList<AbstractTreeItem *>::iterator iter = _childItems[column].begin();
@@ -233,10 +232,23 @@ SimpleTreeItem::~SimpleTreeItem() {
 }
 
 QVariant SimpleTreeItem::data(int column, int role) const {
-  if(role == Qt::DisplayRole && column < _itemData.count())
+  if(column >= columnCount() || role != Qt::DisplayRole)
+    return QVariant();
+  else
     return _itemData[column];
+}
+
+bool SimpleTreeItem::setData(int column, const QVariant &value, int role) {
+  if(column > columnCount() || role != Qt::DisplayRole)
+    return false;
+
+  if(column == columnCount())
+    _itemData.append(value);
   else
-    return QVariant();
+    _itemData[column] = value;
+
+  emit dataChanged(column);
+  return true;
 }
 
 int SimpleTreeItem::columnCount() const {
@@ -263,15 +275,20 @@ PropertyMapItem::~PropertyMapItem() {
 }
   
 QVariant PropertyMapItem::data(int column, int role) const {
-  if(column >= columnCount())
-    return QVariant();
-
-  if(role != Qt::DisplayRole)
+  if(column >= columnCount() || role != Qt::DisplayRole)
     return QVariant();
 
   return property(_propertyOrder[column].toAscii());
 }
 
+bool PropertyMapItem::setData(int column, const QVariant &value, int role) {
+  if(column >= columnCount() || role != Qt::DisplayRole)
+    return false;
+
+  emit dataChanged(column);
+  return setProperty(_propertyOrder[column].toAscii(), value);
+}
+
 int PropertyMapItem::columnCount() const {
   return _propertyOrder.count();
 }
@@ -289,6 +306,19 @@ TreeModel::TreeModel(const QList<QVariant> &data, QObject *parent)
   : QAbstractItemModel(parent)
 {
   rootItem = new SimpleTreeItem(data, 0);
+
+  connect(rootItem, SIGNAL(dataChanged(int)),
+         this, SLOT(itemDataChanged(int)));
+  
+  connect(rootItem, SIGNAL(newChild(AbstractTreeItem *)),
+         this, SLOT(newChild(AbstractTreeItem *)));
+
+  connect(rootItem, SIGNAL(beginRemoveChilds(int, int)),
+         this, SLOT(beginRemoveChilds(int, int)));
+  
+  connect(rootItem, SIGNAL(endRemoveChilds()),
+         this, SLOT(endRemoveChilds()));
+
 }
 
 TreeModel::~TreeModel() {
@@ -390,10 +420,18 @@ QVariant TreeModel::data(const QModelIndex &index, int role) const {
   if(!index.isValid())
     return QVariant();
 
-  AbstractTreeItem *item = static_cast<AbstractTreeItem*>(index.internalPointer());
+  AbstractTreeItem *item = static_cast<AbstractTreeItem *>(index.internalPointer());
   return item->data(index.column(), role);
 }
 
+bool TreeModel::setData(const QModelIndex &index, const QVariant &value, int role) {
+  if(!index.isValid())
+    return false;
+
+  AbstractTreeItem *item = static_cast<AbstractTreeItem *>(index.internalPointer());
+  return item->setData(index.column(), value, role);
+}
+
 Qt::ItemFlags TreeModel::flags(const QModelIndex &index) const {
   AbstractTreeItem *item;
   if(!index.isValid())
@@ -429,7 +467,7 @@ void TreeModel::itemDataChanged(int column) {
 }
 
 void TreeModel::appendChild(AbstractTreeItem *parent, AbstractTreeItem *child) {
-  if(parent == 0 or child == 0) {
+  if(parent == 0 || child == 0) {
     qWarning() << "TreeModel::appendChild(parent, child) parent and child have to be valid pointers!" << parent << child;
     return;
   }
@@ -507,6 +545,5 @@ bool TreeModel::removeRows(int row, int count, const QModelIndex &parent) {
 }
 
 void TreeModel::clear() {
-  removeRows(0, rowCount());
-  reset();
+  rootItem->removeAllChilds();
 }