diff options
| author | Kevin Smith <git@kismith.co.uk> | 2011-09-21 08:12:21 (GMT) | 
|---|---|---|
| committer | Kevin Smith <git@kismith.co.uk> | 2011-09-21 08:52:40 (GMT) | 
| commit | 20d3385909a2f9d886e7e0781357b23474e9f8dc (patch) | |
| tree | 4ca6a60e0c2d598534a0767cefa75f58dbac4afa | |
| parent | 703a1c28c3c87ac0fb365ff0683d7c64fcdd2210 (diff) | |
| download | swift-contrib-20d3385909a2f9d886e7e0781357b23474e9f8dc.zip swift-contrib-20d3385909a2f9d886e7e0781357b23474e9f8dc.tar.bz2 | |
Distinguish between Roster and MUC list widgets
| -rw-r--r-- | Swift/QtUI/QtChatWindow.cpp | 1 | ||||
| -rw-r--r-- | Swift/QtUI/QtMainWindow.cpp | 5 | ||||
| -rw-r--r-- | Swift/QtUI/QtMainWindow.h | 7 | ||||
| -rw-r--r-- | Swift/QtUI/Roster/QtOccupantListWidget.cpp | 59 | ||||
| -rw-r--r-- | Swift/QtUI/Roster/QtOccupantListWidget.h | 23 | ||||
| -rw-r--r-- | Swift/QtUI/Roster/QtRosterWidget.cpp | 100 | ||||
| -rw-r--r-- | Swift/QtUI/Roster/QtRosterWidget.h | 30 | ||||
| -rw-r--r-- | Swift/QtUI/Roster/QtTreeWidget.cpp | 83 | ||||
| -rw-r--r-- | Swift/QtUI/Roster/QtTreeWidget.h | 20 | ||||
| -rw-r--r-- | Swift/QtUI/SConscript | 2 | 
10 files changed, 225 insertions, 105 deletions
| diff --git a/Swift/QtUI/QtChatWindow.cpp b/Swift/QtUI/QtChatWindow.cpp index d7ffc65..a52d2de 100644 --- a/Swift/QtUI/QtChatWindow.cpp +++ b/Swift/QtUI/QtChatWindow.cpp @@ -71,7 +71,6 @@ QtChatWindow::QtChatWindow(const QString &contact, QtChatTheme* theme, UIEventSt  	logRosterSplitter_->addWidget(messageLog_);  	treeWidget_ = new QtTreeWidget(eventStream_); -	treeWidget_->setEditable(false);  	treeWidget_->hide();  	logRosterSplitter_->addWidget(treeWidget_);  	logRosterSplitter_->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); diff --git a/Swift/QtUI/QtMainWindow.cpp b/Swift/QtUI/QtMainWindow.cpp index 51aaf3e..7c84773 100644 --- a/Swift/QtUI/QtMainWindow.cpp +++ b/Swift/QtUI/QtMainWindow.cpp @@ -24,7 +24,7 @@  #include <Swift/QtUI/QtSwiftUtil.h>  #include <Swift/QtUI/QtTabWidget.h>  #include <Swift/QtUI/QtSettingsProvider.h> -#include <Roster/QtTreeWidget.h> +#include <Roster/QtRosterWidget.h>  #include <Swift/Controllers/UIEvents/RequestJoinMUCUIEvent.h>  #include <Swift/Controllers/UIEvents/RequestAddUserDialogUIEvent.h>  #include <Swift/Controllers/UIEvents/RequestChatWithUserDialogUIEvent.h> @@ -62,8 +62,7 @@ QtMainWindow::QtMainWindow(QtSettingsProvider* settings, UIEventStream* uiEventS  	contactTabLayout->setSpacing(0);  	contactTabLayout->setContentsMargins(0, 0, 0, 0); -	treeWidget_ = new QtTreeWidget(uiEventStream_); -	treeWidget_->setEditable(true); +	treeWidget_ = new QtRosterWidget(uiEventStream_);  	contactTabLayout->addWidget(treeWidget_);  	tabs_->addTab(contactsTabWidget_, tr("&Contacts")); diff --git a/Swift/QtUI/QtMainWindow.h b/Swift/QtUI/QtMainWindow.h index bb3e9df..321fa2d 100644 --- a/Swift/QtUI/QtMainWindow.h +++ b/Swift/QtUI/QtMainWindow.h @@ -25,8 +25,7 @@ class QMenu;  class QTabWidget;  namespace Swift { -	class QtTreeWidget; -	class QtTreeWidgetFactory; +	class QtRosterWidget;  	class TreeWidget;  	class UIEventStream;  	class QtTabWidget; @@ -36,7 +35,7 @@ namespace Swift {  		Q_OBJECT  		public:  			QtMainWindow(QtSettingsProvider*, UIEventStream* eventStream); -			~QtMainWindow(); +			virtual ~QtMainWindow();  			std::vector<QMenu*> getMenus() {return menus_;}  			void setMyNick(const std::string& name);  			void setMyJID(const JID& jid); @@ -66,7 +65,7 @@ namespace Swift {  		private:  			QtSettingsProvider* settings_;  			std::vector<QMenu*> menus_; -			QtTreeWidget* treeWidget_; +			QtRosterWidget* treeWidget_;  			QtRosterHeader* meView_;  			QAction* addUserAction_;  			QAction* editUserAction_; diff --git a/Swift/QtUI/Roster/QtOccupantListWidget.cpp b/Swift/QtUI/Roster/QtOccupantListWidget.cpp new file mode 100644 index 0000000..2f992bf --- /dev/null +++ b/Swift/QtUI/Roster/QtOccupantListWidget.cpp @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2011 Kevin Smith + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + + +#include "Roster/QtOccupantListWidget.h" + +#include <QContextMenuEvent> +#include <QMenu> +#include <QInputDialog> + +#include "Swift/Controllers/Roster/ContactRosterItem.h" +#include "Swift/Controllers/Roster/GroupRosterItem.h" +#include "Swift/Controllers/UIEvents/UIEventStream.h" +#include "QtSwiftUtil.h" + +namespace Swift { + +QtOccupantListWidget::QtOccupantListWidget(UIEventStream* eventStream, QWidget* parent) : QtTreeWidget(eventStream, parent) { + +} + +QtOccupantListWidget::~QtOccupantListWidget() { + +} + +void QtOccupantListWidget::contextMenuEvent(QContextMenuEvent* event) { +//	QModelIndex index = indexAt(event->pos()); +//	if (!index.isValid()) { +//		return; +//	} +//	RosterItem* item = static_cast<RosterItem*>(index.internalPointer()); +//	QMenu contextMenu; +//	if (ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(item)) { +//		QAction* editContact = contextMenu.addAction(tr("Edit")); +//		QAction* removeContact = contextMenu.addAction(tr("Remove")); +//		QAction* result = contextMenu.exec(event->globalPos()); +//		if (result == editContact) { +//			eventStream_->send(boost::make_shared<RequestContactEditorUIEvent>(contact->getJID())); +//		} +//		else if (result == removeContact) { +//			if (QtContactEditWindow::confirmContactDeletion(contact->getJID())) { +//				eventStream_->send(boost::make_shared<RemoveRosterItemUIEvent>(contact->getJID())); +//			} +//		} +//	} +//	else if (GroupRosterItem* group = dynamic_cast<GroupRosterItem*>(item)) { +//		QAction* renameGroupAction = contextMenu.addAction(tr("Rename")); +//		QAction* result = contextMenu.exec(event->globalPos()); +//		if (result == renameGroupAction) { +//			renameGroup(group); +//		} +//	} +} + +} + diff --git a/Swift/QtUI/Roster/QtOccupantListWidget.h b/Swift/QtUI/Roster/QtOccupantListWidget.h new file mode 100644 index 0000000..5444210 --- /dev/null +++ b/Swift/QtUI/Roster/QtOccupantListWidget.h @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2011 Kevin Smith + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#pragma once + +#include "Swift/QtUI/Roster/QtTreeWidget.h" + +namespace Swift { + +class QtOccupantListWidget : public QtTreeWidget { +	Q_OBJECT +	public: +		QtOccupantListWidget(UIEventStream* eventStream, QWidget* parent = 0); +		virtual ~QtOccupantListWidget(); +	protected: +		void contextMenuEvent(QContextMenuEvent* event); +}; + +} + diff --git a/Swift/QtUI/Roster/QtRosterWidget.cpp b/Swift/QtUI/Roster/QtRosterWidget.cpp new file mode 100644 index 0000000..79d7f67 --- /dev/null +++ b/Swift/QtUI/Roster/QtRosterWidget.cpp @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2011 Kevin Smith + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include "Roster/QtRosterWidget.h" + +#include <QContextMenuEvent> +#include <QMenu> +#include <QInputDialog> + +#include "Swift/Controllers/UIEvents/RequestContactEditorUIEvent.h" +#include "Swift/Controllers/UIEvents/RemoveRosterItemUIEvent.h" +#include "Swift/Controllers/UIEvents/RenameGroupUIEvent.h" +#include "QtContactEditWindow.h" +#include "Swift/Controllers/Roster/ContactRosterItem.h" +#include "Swift/Controllers/Roster/GroupRosterItem.h" +#include "Swift/Controllers/UIEvents/UIEventStream.h" +#include "QtSwiftUtil.h" + +namespace Swift { + +QtRosterWidget::QtRosterWidget(UIEventStream* eventStream, QWidget* parent) : QtTreeWidget(eventStream, parent) { + +} + +QtRosterWidget::~QtRosterWidget() { + +} + +void QtRosterWidget::handleEditUserActionTriggered(bool /*checked*/) { +	QModelIndexList selectedIndexList = getSelectedIndexes(); +	if (selectedIndexList.empty()) { +		return; +	} +	QModelIndex index = selectedIndexList[0]; +	if (!index.isValid()) { +		return; +	} +	RosterItem* item = static_cast<RosterItem*>(index.internalPointer()); +	if (ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(item)) { +		eventStream_->send(boost::make_shared<RequestContactEditorUIEvent>(contact->getJID())); +	} +} + +void QtRosterWidget::contextMenuEvent(QContextMenuEvent* event) { +	QModelIndex index = indexAt(event->pos()); +	if (!index.isValid()) { +		return; +	} +	RosterItem* item = static_cast<RosterItem*>(index.internalPointer()); +	QMenu contextMenu; +	if (ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(item)) { +		QAction* editContact = contextMenu.addAction(tr("Edit")); +		QAction* removeContact = contextMenu.addAction(tr("Remove")); +		QAction* result = contextMenu.exec(event->globalPos()); +		if (result == editContact) { +			eventStream_->send(boost::make_shared<RequestContactEditorUIEvent>(contact->getJID())); +		} +		else if (result == removeContact) { +			if (QtContactEditWindow::confirmContactDeletion(contact->getJID())) { +				eventStream_->send(boost::make_shared<RemoveRosterItemUIEvent>(contact->getJID())); +			} +		} +	} +	else if (GroupRosterItem* group = dynamic_cast<GroupRosterItem*>(item)) { +		QAction* renameGroupAction = contextMenu.addAction(tr("Rename")); +		QAction* result = contextMenu.exec(event->globalPos()); +		if (result == renameGroupAction) { +			renameGroup(group); +		} +	} +} + +void QtRosterWidget::renameGroup(GroupRosterItem* group) { +	bool ok; +	QString newName = QInputDialog::getText(NULL, tr("Rename group"), tr("Enter a new name for group '%1':").arg(P2QSTRING(group->getDisplayName())), QLineEdit::Normal, P2QSTRING(group->getDisplayName()), &ok); +	if (ok) { +		eventStream_->send(boost::make_shared<RenameGroupUIEvent>(group->getDisplayName(), Q2PSTRING(newName))); +	} +} + +void QtRosterWidget::currentChanged(const QModelIndex& current, const QModelIndex& previous) { +	bool valid = false; +	QModelIndexList selectedIndexList = getSelectedIndexes(); +	if (selectedIndexList.empty() || !selectedIndexList[0].isValid()) { +		/* I didn't quite understand why using current didn't seem to work here.*/ +	} +	else if (current.isValid()) { +		RosterItem* item = static_cast<RosterItem*>(current.internalPointer()); +		if (dynamic_cast<ContactRosterItem*>(item)) { +			valid = true; +		} +	} +	onSomethingSelectedChanged(valid); +	QTreeView::currentChanged(current, previous); +} + +} diff --git a/Swift/QtUI/Roster/QtRosterWidget.h b/Swift/QtUI/Roster/QtRosterWidget.h new file mode 100644 index 0000000..7781e07 --- /dev/null +++ b/Swift/QtUI/Roster/QtRosterWidget.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2011 Kevin Smith + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#pragma once + +#include "Swift/QtUI/Roster/QtTreeWidget.h" + +namespace Swift { + +class QtRosterWidget : public QtTreeWidget { +	Q_OBJECT +	public: +		QtRosterWidget(UIEventStream* eventStream, QWidget* parent = 0); +		virtual ~QtRosterWidget(); +	public slots: +		void handleEditUserActionTriggered(bool checked); +	signals: +		void onSomethingSelectedChanged(bool); +	protected: +		void contextMenuEvent(QContextMenuEvent* event); +	protected slots: +		virtual void currentChanged(const QModelIndex& current, const QModelIndex& previous); +	private: +		void renameGroup(GroupRosterItem* group); +}; + +} diff --git a/Swift/QtUI/Roster/QtTreeWidget.cpp b/Swift/QtUI/Roster/QtTreeWidget.cpp index 1296872..7de4028 100644 --- a/Swift/QtUI/Roster/QtTreeWidget.cpp +++ b/Swift/QtUI/Roster/QtTreeWidget.cpp @@ -6,9 +6,6 @@  #include "Roster/QtTreeWidget.h" -#include <QMenu> -#include <QContextMenuEvent> -#include <QInputDialog>  #include <boost/smart_ptr/make_shared.hpp>  #include "Swiften/Base/Platform.h" @@ -16,15 +13,11 @@  #include "Swift/Controllers/Roster/GroupRosterItem.h"  #include "Swift/Controllers/UIEvents/UIEventStream.h"  #include "Swift/Controllers/UIEvents/RequestChatUIEvent.h" -#include "Swift/Controllers/UIEvents/RequestContactEditorUIEvent.h" -#include "Swift/Controllers/UIEvents/RemoveRosterItemUIEvent.h" -#include "Swift/Controllers/UIEvents/RenameGroupUIEvent.h"  #include "QtSwiftUtil.h" -#include "QtContactEditWindow.h"  namespace Swift { -QtTreeWidget::QtTreeWidget(UIEventStream* eventStream, QWidget* parent) : QTreeView(parent), editable_(false) { +QtTreeWidget::QtTreeWidget(UIEventStream* eventStream, QWidget* parent) : QTreeView(parent) {  	eventStream_ = eventStream;  	model_ = new RosterModel(this);  	setModel(model_); @@ -88,22 +81,6 @@ QModelIndexList QtTreeWidget::getSelectedIndexes() const {  	return selectedIndexList;  } -void QtTreeWidget::currentChanged(const QModelIndex& current, const QModelIndex& previous) { -	bool valid = false; -	QModelIndexList selectedIndexList = getSelectedIndexes(); -	if (!editable_ || selectedIndexList.empty() || !selectedIndexList[0].isValid()) { -		/* I didn't quite understand why using current didn't seem to work here.*/ -	} -	else if (current.isValid()) { -		RosterItem* item = static_cast<RosterItem*>(current.internalPointer()); -		if (dynamic_cast<ContactRosterItem*>(item)) { -			valid = true; -		} -	} -	onSomethingSelectedChanged(valid); -	QTreeView::currentChanged(current, previous); -} -  void QtTreeWidget::handleItemActivated(const QModelIndex& index) {  	RosterItem* item = static_cast<RosterItem*>(index.internalPointer());  	ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(item); @@ -112,64 +89,6 @@ void QtTreeWidget::handleItemActivated(const QModelIndex& index) {  	}  } -void QtTreeWidget::handleEditUserActionTriggered(bool /*checked*/) { -	if (!editable_) { -		return; -	} -	QModelIndexList selectedIndexList = getSelectedIndexes(); -	if (selectedIndexList.empty()) { -		return; -	} -	QModelIndex index = selectedIndexList[0]; -	if (!index.isValid()) { -		return; -	} -	RosterItem* item = static_cast<RosterItem*>(index.internalPointer()); -	if (ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(item)) { -		eventStream_->send(boost::make_shared<RequestContactEditorUIEvent>(contact->getJID())); -	} -} - -void QtTreeWidget::contextMenuEvent(QContextMenuEvent* event) { -	if (!editable_) { -		return; -	} -	QModelIndex index = indexAt(event->pos()); -	if (!index.isValid()) { -		return; -	} -	RosterItem* item = static_cast<RosterItem*>(index.internalPointer()); -	QMenu contextMenu; -	if (ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(item)) { -		QAction* editContact = contextMenu.addAction(tr("Edit")); -		QAction* removeContact = contextMenu.addAction(tr("Remove")); -		QAction* result = contextMenu.exec(event->globalPos()); -		if (result == editContact) { -			eventStream_->send(boost::make_shared<RequestContactEditorUIEvent>(contact->getJID())); -		} -		else if (result == removeContact) { -			if (QtContactEditWindow::confirmContactDeletion(contact->getJID())) { -				eventStream_->send(boost::make_shared<RemoveRosterItemUIEvent>(contact->getJID())); -			} -		} -	} -	else if (GroupRosterItem* group = dynamic_cast<GroupRosterItem*>(item)) { -		QAction* renameGroupAction = contextMenu.addAction(tr("Rename")); -		QAction* result = contextMenu.exec(event->globalPos()); -		if (result == renameGroupAction) { -			renameGroup(group); -		} -	} -} - -void QtTreeWidget::renameGroup(GroupRosterItem* group) { -	bool ok; -	QString newName = QInputDialog::getText(NULL, tr("Rename group"), tr("Enter a new name for group '%1':").arg(P2QSTRING(group->getDisplayName())), QLineEdit::Normal, P2QSTRING(group->getDisplayName()), &ok); -	if (ok) { -		eventStream_->send(boost::make_shared<RenameGroupUIEvent>(group->getDisplayName(), Q2PSTRING(newName))); -	} -} -  void QtTreeWidget::handleExpanded(const QModelIndex& index) {  	GroupRosterItem* item = dynamic_cast<GroupRosterItem*>(static_cast<RosterItem*>(index.internalPointer()));  	if (item) { diff --git a/Swift/QtUI/Roster/QtTreeWidget.h b/Swift/QtUI/Roster/QtTreeWidget.h index 4ecba83..c45a1cd 100644 --- a/Swift/QtUI/Roster/QtTreeWidget.h +++ b/Swift/QtUI/Roster/QtTreeWidget.h @@ -23,13 +23,6 @@ class QtTreeWidget : public QTreeView{  		QtTreeWidgetItem* getRoot();  		void setRosterModel(Roster* roster);  		Roster* getRoster() {return roster_;} -		void setEditable(bool b) { editable_ = b; } - -	signals: -		void onSomethingSelectedChanged(bool); - -	public slots: -		void handleEditUserActionTriggered(bool checked);  	private slots:  		void handleItemActivated(const QModelIndex&); @@ -37,23 +30,20 @@ class QtTreeWidget : public QTreeView{  		void handleExpanded(const QModelIndex&);  		void handleCollapsed(const QModelIndex&);  		void handleClicked(const QModelIndex&); -	protected: -		void contextMenuEvent(QContextMenuEvent* event); -	protected slots: -		virtual void currentChanged(const QModelIndex& current, const QModelIndex& previous); +	protected: +		QModelIndexList getSelectedIndexes() const;  	private: -		void renameGroup(GroupRosterItem* group);  		void drawBranches(QPainter*, const QRect&, const QModelIndex&) const; -		QModelIndexList getSelectedIndexes() const; +	protected: +		UIEventStream* eventStream_; +  	private:  		RosterModel* model_;  		Roster* roster_;  		RosterDelegate* delegate_;  		QtTreeWidgetItem* treeRoot_; -		UIEventStream* eventStream_; -		bool editable_;  };  } diff --git a/Swift/QtUI/SConscript b/Swift/QtUI/SConscript index 24299fb..33450ed 100644 --- a/Swift/QtUI/SConscript +++ b/Swift/QtUI/SConscript @@ -104,6 +104,8 @@ sources = [      "Roster/RosterDelegate.cpp",      "Roster/GroupItemDelegate.cpp",      "Roster/DelegateCommons.cpp", +    "Roster/QtRosterWidget.cpp", +    "Roster/QtOccupantListWidget.cpp",      "EventViewer/EventModel.cpp",      "EventViewer/EventDelegate.cpp",      "EventViewer/TwoLineDelegate.cpp", | 
 Swift
 Swift