diff options
| -rw-r--r-- | Swift/QtUI/Roster/QtTreeWidget.cpp | 61 | ||||
| -rw-r--r-- | Swift/QtUI/Roster/QtTreeWidget.h | 6 | ||||
| -rw-r--r-- | Swift/QtUI/Roster/RosterModel.cpp | 14 | ||||
| -rw-r--r-- | Swift/QtUI/Roster/RosterModel.h | 2 | ||||
| -rw-r--r-- | Swiften/Roster/GroupRosterItem.cpp | 10 | ||||
| -rw-r--r-- | Swiften/Roster/GroupRosterItem.h | 3 | 
6 files changed, 59 insertions, 37 deletions
| diff --git a/Swift/QtUI/Roster/QtTreeWidget.cpp b/Swift/QtUI/Roster/QtTreeWidget.cpp index 97b055b..ba57421 100644 --- a/Swift/QtUI/Roster/QtTreeWidget.cpp +++ b/Swift/QtUI/Roster/QtTreeWidget.cpp @@ -8,6 +8,7 @@  #include "Swiften/Base/Platform.h"  #include "Swiften/Roster/ContactRosterItem.h" +#include "Swiften/Roster/GroupRosterItem.h"  #include "Swift/Controllers/UIEvents/UIEventStream.h"  #include "Swift/Controllers/UIEvents/RequestChatUIEvent.h" @@ -33,10 +34,10 @@ QtTreeWidget::QtTreeWidget(UIEventStream* eventStream, QWidget* parent) : QTreeV  	setIndentation(0);  	setRootIsDecorated(true);  	connect(this, SIGNAL(activated(const QModelIndex&)), this, SLOT(handleItemActivated(const QModelIndex&))); -//	connect(model_, SIGNAL(itemExpanded(const QModelIndex&, bool)), this, SLOT(handleModelItemExpanded(const QModelIndex&, bool))); +	connect(model_, SIGNAL(itemExpanded(const QModelIndex&, bool)), this, SLOT(handleModelItemExpanded(const QModelIndex&, bool)));  //	connect(model_, SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)), this, SLOT(handleDataChanged(const QModelIndex&, const QModelIndex&))); -//	connect(this, SIGNAL(expanded(const QModelIndex&)), this, SLOT(handleExpanded(const QModelIndex&))); -//	connect(this, SIGNAL(collapsed(const QModelIndex&)), this, SLOT(handleCollapsed(const QModelIndex&))); +	connect(this, SIGNAL(expanded(const QModelIndex&)), this, SLOT(handleExpanded(const QModelIndex&))); +	connect(this, SIGNAL(collapsed(const QModelIndex&)), this, SLOT(handleCollapsed(const QModelIndex&)));  }  QtTreeWidget::~QtTreeWidget() { @@ -76,33 +77,33 @@ void QtTreeWidget::contextMenuEvent(QContextMenuEvent* event) {  	}  } -//void QtTreeWidget::handleExpanded(const QModelIndex& index) { -//	QtTreeWidgetItem* qtItem = static_cast<QtTreeWidgetItem*>(index.internalPointer()); -//	if (qtItem) { -//		qtItem->setExpanded(true); -//	} -//} - -//void QtTreeWidget::handleCollapsed(const QModelIndex& index) { -//	QtTreeWidgetItem* qtItem = static_cast<QtTreeWidgetItem*>(index.internalPointer()); -//	if (qtItem) { -//		qtItem->setExpanded(false); -//	} -//} - -//void QtTreeWidget::handleModelItemExpanded(const QModelIndex& index, bool shouldExpand) { -//	if (this->isExpanded(index) == shouldExpand) { -//		return; -//	} -//	//setExpanded(index, shouldExpand); -//	if (shouldExpand) { -//		expand(index); -//		emit expanded(index); -//	} else { -//		collapse(index); -//		emit collapsed(index); -//	} -//} +void QtTreeWidget::handleExpanded(const QModelIndex& index) { +	GroupRosterItem* item = dynamic_cast<GroupRosterItem*>(static_cast<RosterItem*>(index.internalPointer())); +	if (item) { +		item->setExpanded(true); +	} +} + +void QtTreeWidget::handleCollapsed(const QModelIndex& index) { +	GroupRosterItem* item = dynamic_cast<GroupRosterItem*>(static_cast<RosterItem*>(index.internalPointer())); +	if (item) { +		item->setExpanded(false); +	} +} + +void QtTreeWidget::handleModelItemExpanded(const QModelIndex& index, bool shouldExpand) { +	if (this->isExpanded(index) == shouldExpand) { +		return; +	} +	//setExpanded(index, shouldExpand); +	if (shouldExpand) { +		expand(index); +		emit expanded(index); +	} else { +		collapse(index); +		emit collapsed(index); +	} +}  // void QtTreeWidget::handleDataChanged(const QModelIndex& topLeft, const QModelIndex& /*bottomRight*/) {  // 	//in our model, this is only thrown with topLeft == bottomRight diff --git a/Swift/QtUI/Roster/QtTreeWidget.h b/Swift/QtUI/Roster/QtTreeWidget.h index c03f2e2..b45701e 100644 --- a/Swift/QtUI/Roster/QtTreeWidget.h +++ b/Swift/QtUI/Roster/QtTreeWidget.h @@ -28,9 +28,9 @@ class QtTreeWidget : public QTreeView{  		void setRosterModel(Roster* roster);  	private slots:  		void handleItemActivated(const QModelIndex&); -//		void handleModelItemExpanded(const QModelIndex&, bool expanded); -//		void handleExpanded(const QModelIndex&); -//		void handleCollapsed(const QModelIndex&); +		void handleModelItemExpanded(const QModelIndex&, bool expanded); +		void handleExpanded(const QModelIndex&); +		void handleCollapsed(const QModelIndex&);  //		void handleDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight);  	protected:  		void contextMenuEvent(QContextMenuEvent* event); diff --git a/Swift/QtUI/Roster/RosterModel.cpp b/Swift/QtUI/Roster/RosterModel.cpp index d5b4002..00a032d 100644 --- a/Swift/QtUI/Roster/RosterModel.cpp +++ b/Swift/QtUI/Roster/RosterModel.cpp @@ -38,10 +38,15 @@ void RosterModel::setRoster(Roster* roster) {  }  void RosterModel::handleGroupAdded(GroupRosterItem* group) { -	view_->setExpanded(index(group), true); +	emit itemExpanded(index(group), group->isExpanded());  } -void RosterModel::handleChildrenChanged(GroupRosterItem* /*group*/) { +void RosterModel::handleChildrenChanged(GroupRosterItem* group) { +	foreach (RosterItem* item, group->getDisplayedChildren()) { +		GroupRosterItem* child = dynamic_cast<GroupRosterItem*>(item); +		if (!child) continue; +		emit itemExpanded(index(child), child->isExpanded()); +	}  	emit layoutChanged();  }							   @@ -49,7 +54,10 @@ void RosterModel::handleDataChanged(RosterItem* item) {  	Q_ASSERT(item);  	QModelIndex modelIndex = index(item);  	if (modelIndex.isValid()) { -		//emit itemExpanded(modelIndex, item->isExpanded()); +		GroupRosterItem* group = dynamic_cast<GroupRosterItem*>(item); +		if (group) { +			emit itemExpanded(modelIndex, group->isExpanded()); +		}  		emit dataChanged(modelIndex, modelIndex);  	}  } diff --git a/Swift/QtUI/Roster/RosterModel.h b/Swift/QtUI/Roster/RosterModel.h index 17fdd3e..10aeccd 100644 --- a/Swift/QtUI/Roster/RosterModel.h +++ b/Swift/QtUI/Roster/RosterModel.h @@ -34,6 +34,8 @@ namespace Swift {  			QModelIndex index(RosterItem* item) const;  			QModelIndex parent(const QModelIndex& index) const;  			int rowCount(const QModelIndex& parent = QModelIndex()) const; +		signals: +			void itemExpanded(const QModelIndex& item, bool expanded);  		private:  			void handleDataChanged(RosterItem* item);  			void handleChildrenChanged(GroupRosterItem* item); diff --git a/Swiften/Roster/GroupRosterItem.cpp b/Swiften/Roster/GroupRosterItem.cpp index 2632444..7ce57d2 100644 --- a/Swiften/Roster/GroupRosterItem.cpp +++ b/Swiften/Roster/GroupRosterItem.cpp @@ -13,13 +13,21 @@  namespace Swift {  GroupRosterItem::GroupRosterItem(const String& name, GroupRosterItem* parent) : RosterItem(name, parent) { - +	expanded_ = true;  }  GroupRosterItem::~GroupRosterItem() {  } +bool GroupRosterItem::isExpanded() const { +	return expanded_; +} + +void GroupRosterItem::setExpanded(bool expanded) { +	expanded_ = expanded; +} +  const std::vector<RosterItem*>& GroupRosterItem::getChildren() const {  	return children_;  } diff --git a/Swiften/Roster/GroupRosterItem.h b/Swiften/Roster/GroupRosterItem.h index 0d230e2..aca2b05 100644 --- a/Swiften/Roster/GroupRosterItem.h +++ b/Swiften/Roster/GroupRosterItem.h @@ -25,11 +25,14 @@ class GroupRosterItem : public RosterItem {  		void setDisplayed(RosterItem* item, bool displayed);  		boost::signal<void ()> onChildrenChanged;  		static bool itemLessThan(const RosterItem* left, const RosterItem* right); +		void setExpanded(bool expanded); +		bool isExpanded() const;  	private:  		void handleChildrenChanged(GroupRosterItem* group);  		void handleDataChanged(RosterItem* item);  		bool sortDisplayed();  		String name_; +		bool expanded_;  		std::vector<RosterItem*> children_;  		std::vector<RosterItem*> displayedChildren_;  }; | 
 Swift
 Swift