summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Swift/QtUI/Roster/QtTreeWidget.cpp19
-rw-r--r--Swift/QtUI/Roster/QtTreeWidget.h6
-rw-r--r--Swift/QtUI/Roster/QtTreeWidgetFactory.h5
-rw-r--r--Swift/QtUI/Roster/QtTreeWidgetItem.h3
-rw-r--r--Swift/QtUI/Roster/Roster.pro4
-rw-r--r--Swift/QtUI/Roster/RosterItem.cpp33
-rw-r--r--Swift/QtUI/Roster/RosterItem.h11
-rw-r--r--Swift/QtUI/Roster/RosterModel.cpp33
-rw-r--r--Swift/QtUI/Roster/RosterModel.h6
9 files changed, 92 insertions, 28 deletions
diff --git a/Swift/QtUI/Roster/QtTreeWidget.cpp b/Swift/QtUI/Roster/QtTreeWidget.cpp
index d40169f..d37bb2a 100644
--- a/Swift/QtUI/Roster/QtTreeWidget.cpp
+++ b/Swift/QtUI/Roster/QtTreeWidget.cpp
@@ -5,10 +5,13 @@
namespace Swift {
-QtTreeWidget::QtTreeWidget(QWidget* parent) : QTreeView(parent), RosterItem(NULL) {
- model_ = new RosterModel(this);
+QtTreeWidget::QtTreeWidget(QWidget* parent) : QTreeView(parent) {
+ treeRoot_ = new QtTreeWidgetItem(NULL);
+ model_ = new RosterModel();
+ model_->setRoot(treeRoot_);
setModel(model_);
- //setWindowTitle("A roster");
+ //FIXME: just a dummy title.
+ setWindowTitle("A roster");
//show();
setHeaderHidden(true);
#ifdef SWIFT_PLATFORM_MACOSX
@@ -17,7 +20,15 @@ QtTreeWidget::QtTreeWidget(QWidget* parent) : QTreeView(parent), RosterItem(NULL
setAnimated(true);
setIndentation(0);
setRootIsDecorated(true);
- connect(this, SIGNAL(itemActivated(QTreeWidgetItem*, int)), this, SLOT(handleItemActivated(QTreeWidgetItem*, int)));
+ //connect(this, SIGNAL(itemActivated(QTreeWidgetItem*, int)), this, SLOT(handleItemActivated(QTreeWidgetItem*, int)));
+}
+
+QtTreeWidget::~QtTreeWidget() {
+ delete model_;
+}
+
+QtTreeWidgetItem* QtTreeWidget::getRoot() {
+ return treeRoot_;
}
// void QtTreeWidget::handleItemActivated(QTreeWidgetItem* item, int column) {
diff --git a/Swift/QtUI/Roster/QtTreeWidget.h b/Swift/QtUI/Roster/QtTreeWidget.h
index f246e83..559f4e2 100644
--- a/Swift/QtUI/Roster/QtTreeWidget.h
+++ b/Swift/QtUI/Roster/QtTreeWidget.h
@@ -13,17 +13,19 @@
namespace Swift {
-class QtTreeWidget : public QTreeView, public TreeWidget, public RosterItem {
+class QtTreeWidget : public QTreeView, public TreeWidget {
Q_OBJECT
public:
QtTreeWidget(QWidget* parent = 0);
+ ~QtTreeWidget();
void show();
+ QtTreeWidgetItem* getRoot();
//private slots:
// void handleItemActivated(QTreeWidgetItem*, int);
-
private:
void drawBranches(QPainter*, const QRect&, const QModelIndex&) const;
RosterModel* model_;
+ QtTreeWidgetItem* treeRoot_;
};
diff --git a/Swift/QtUI/Roster/QtTreeWidgetFactory.h b/Swift/QtUI/Roster/QtTreeWidgetFactory.h
index 353f697..2ca1e21 100644
--- a/Swift/QtUI/Roster/QtTreeWidgetFactory.h
+++ b/Swift/QtUI/Roster/QtTreeWidgetFactory.h
@@ -27,8 +27,9 @@ class QtTreeWidgetFactory : public TreeWidgetFactory {
}
TreeWidgetItem* createTreeWidgetItem(TreeWidget* item) {
- QtTreeWidget* qtItem = dynamic_cast<QtTreeWidget*>(item);
- assert(qtItem);
+ QtTreeWidget* treeItem = dynamic_cast<QtTreeWidget*>(item);
+ assert(treeItem);
+ QtTreeWidgetItem* qtItem = treeItem->getRoot();
QtTreeWidgetItem* newItem = new QtTreeWidgetItem(qtItem);
//qtItem->setItemWidget(newItem, 0, newItem->getCollapsedRosterWidget());
qtItem->addChild(newItem);
diff --git a/Swift/QtUI/Roster/QtTreeWidgetItem.h b/Swift/QtUI/Roster/QtTreeWidgetItem.h
index c35a840..2a72a83 100644
--- a/Swift/QtUI/Roster/QtTreeWidgetItem.h
+++ b/Swift/QtUI/Roster/QtTreeWidgetItem.h
@@ -23,8 +23,7 @@ class QtTreeWidgetItem : public TreeWidgetItem, public RosterItem {
}
void setText(const String& text) {
- displayName_ = P2QSTRING(text);
- // QTreeWidgetItem::setText(0, P2QSTRING(text));
+ setName(P2QSTRING(text));
}
void setTextColor(unsigned long color) {
diff --git a/Swift/QtUI/Roster/Roster.pro b/Swift/QtUI/Roster/Roster.pro
index c829d5c..086ef41 100644
--- a/Swift/QtUI/Roster/Roster.pro
+++ b/Swift/QtUI/Roster/Roster.pro
@@ -9,4 +9,8 @@ DEFINES += BOOST_SIGNALS_NAMESPACE=bsignals BOOST_ALL_NO_LIB
exists(../config.pri) {
LIBS += ../../Controllers/Controllers.a ../../../Swiften/Swiften.a
include(../config.pri)
+}
+
+mac {
+ DEFINES += SWIFT_PLATFORM_MACOSX
} \ No newline at end of file
diff --git a/Swift/QtUI/Roster/RosterItem.cpp b/Swift/QtUI/Roster/RosterItem.cpp
index 14b4525..b39a47c 100644
--- a/Swift/QtUI/Roster/RosterItem.cpp
+++ b/Swift/QtUI/Roster/RosterItem.cpp
@@ -1,28 +1,57 @@
#include "RosterItem.h"
+#include <qdebug.h>
+
namespace Swift {
-RosterItem::RosterItem(RosterItem* parent) {
+RosterItem::RosterItem(RosterItem* parent) : QObject() {
parent_ = parent;
}
+RosterItem::~RosterItem() {
+ qDeleteAll(children_);
+}
+
RosterItem* RosterItem::getParentItem() {
return parent_;
}
void RosterItem::addChild(RosterItem* child) {
+ printf("Boing\n");
children_.append(child);
+ connect(child, SIGNAL(changed()), this, SIGNAL(changed()));
+ emit changed();
}
int RosterItem::rowCount() {
+ qDebug() << "Returning size of " << children_.size() << " for item " << name_;
return children_.size();
}
int RosterItem::rowOf(RosterItem* item) {
return children_.indexOf(item);;
}
-
+
+int RosterItem::row() {
+ return parent_ ? parent_->rowOf(this) : 0;
+}
+
RosterItem* RosterItem::getItem(int row) {
+ qDebug() << "Returning row " << row << " from item " << name_;
return children_[row];
}
+
+QVariant RosterItem::data(int role) {
+ if (role != Qt::DisplayRole) {
+ return QVariant();
+ }
+ qDebug() << "Returning name " << name_ << " for role " << role;
+ return name_;
+}
+
+void RosterItem::setName(QString name) {
+ name_ = name;
+ qDebug() << "Name changed to " << name;
+ changed();
+}
} \ No newline at end of file
diff --git a/Swift/QtUI/Roster/RosterItem.h b/Swift/QtUI/Roster/RosterItem.h
index f7cd804..e0041d2 100644
--- a/Swift/QtUI/Roster/RosterItem.h
+++ b/Swift/QtUI/Roster/RosterItem.h
@@ -1,9 +1,10 @@
#pragma once
#include <QList>
-
+#include <QVariant>
namespace Swift {
- class RosterItem {
+ class RosterItem : public QObject {
+ Q_OBJECT
public:
RosterItem(RosterItem* parent);
~RosterItem();
@@ -11,10 +12,16 @@ namespace Swift {
RosterItem* getParentItem();
int rowCount();
int rowOf(RosterItem* item);
+ int row();
RosterItem* getItem(int row);
+ QVariant data(int role);
+ void setName(QString name);
+ signals:
+ void changed();
private:
QList<RosterItem*> children_;
RosterItem* parent_;
+ QString name_;
};
} \ No newline at end of file
diff --git a/Swift/QtUI/Roster/RosterModel.cpp b/Swift/QtUI/Roster/RosterModel.cpp
index 2c9a2cc..4c5954e 100644
--- a/Swift/QtUI/Roster/RosterModel.cpp
+++ b/Swift/QtUI/Roster/RosterModel.cpp
@@ -2,12 +2,25 @@
namespace Swift {
-RosterModel::RosterModel(RosterItem* tree) {
- tree_ = tree;
+RosterModel::RosterModel() {
}
RosterModel::~RosterModel() {
-
+ delete tree_;
+}
+
+void RosterModel::setRoot(RosterItem* root) {
+ tree_ = root;
+ connect(tree_, SIGNAL(changed()), this, SLOT(handleItemChanged()));
+}
+
+
+void RosterModel::handleItemChanged() {
+ //FIXME: This is just a lazy hack to cause the view to refresh until it works.
+ // Then I'll replace it with the proper implementation.
+ printf("Changed\n");
+ reset();
+ emit layoutChanged();
}
int RosterModel::columnCount(const QModelIndex& parent) const {
@@ -16,10 +29,8 @@ int RosterModel::columnCount(const QModelIndex& parent) const {
}
QVariant RosterModel::data(const QModelIndex& index, int role) const {
- if (!index.isValid()) {
- return QVariant();
- }
- return QVariant("bob");
+ RosterItem* item = index.isValid() ? static_cast<RosterItem*>(index.internalPointer()) : NULL;
+ return item ? item->data(role) : QVariant();
}
QModelIndex RosterModel::index(int row, int column, const QModelIndex& parent) const {
@@ -38,16 +49,12 @@ QModelIndex RosterModel::parent(const QModelIndex& index) const {
Q_ASSERT(item);
RosterItem* parentItem = item->getParentItem();
- return parentItem == tree_ ? QModelIndex() : createIndex(parentItem->getParentItem()->rowOf(parentItem), 0, parentItem);
+ return parentItem == tree_ ? QModelIndex() : createIndex(parentItem->row(), 0, parentItem);
}
int RosterModel::rowCount(const QModelIndex& parent) const {
- if (!parent.isValid()) {
- return 0;
- }
-
- RosterItem* item = static_cast<RosterItem*>(parent.internalPointer());
+ RosterItem* item = parent.isValid() ? static_cast<RosterItem*>(parent.internalPointer()) : tree_;
Q_ASSERT(item);
return item->rowCount();
diff --git a/Swift/QtUI/Roster/RosterModel.h b/Swift/QtUI/Roster/RosterModel.h
index a958f0d..fbede32 100644
--- a/Swift/QtUI/Roster/RosterModel.h
+++ b/Swift/QtUI/Roster/RosterModel.h
@@ -7,14 +7,18 @@
namespace Swift {
class RosterModel : public QAbstractItemModel {
+Q_OBJECT
public:
- RosterModel(RosterItem* tree);
+ RosterModel();
~RosterModel();
+ void setRoot(RosterItem* tree);
int columnCount(const QModelIndex& parent = QModelIndex()) const;
QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex()) const;
QModelIndex parent(const QModelIndex& index) const;
int rowCount(const QModelIndex& parent = QModelIndex()) const;
+private slots:
+ void handleItemChanged();
private:
RosterItem* tree_;
};