diff options
| author | Kevin Smith <git@kismith.co.uk> | 2011-10-07 14:09:27 (GMT) | 
|---|---|---|
| committer | Kevin Smith <git@kismith.co.uk> | 2011-10-07 14:11:23 (GMT) | 
| commit | b2f58c4f3eb93e3a32062670df5eb6682aed273a (patch) | |
| tree | 737884f5e3e826407466290cf7c324c4f0069dd0 /Swift/QtUI/QtAffiliationEditor.cpp | |
| parent | 7f7b05d8d242a9b73b7d9f971779c6af19980f76 (diff) | |
| download | swift-contrib-b2f58c4f3eb93e3a32062670df5eb6682aed273a.zip swift-contrib-b2f58c4f3eb93e3a32062670df5eb6682aed273a.tar.bz2  | |
Allow affiliation editing in MUCs.
Resolves: #986
Resolves: #988
Diffstat (limited to 'Swift/QtUI/QtAffiliationEditor.cpp')
| -rw-r--r-- | Swift/QtUI/QtAffiliationEditor.cpp | 79 | 
1 files changed, 79 insertions, 0 deletions
diff --git a/Swift/QtUI/QtAffiliationEditor.cpp b/Swift/QtUI/QtAffiliationEditor.cpp new file mode 100644 index 0000000..ed03c23 --- /dev/null +++ b/Swift/QtUI/QtAffiliationEditor.cpp @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2011 Kevin Smith + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include "QtAffiliationEditor.h" + +#include <QListWidgetItem> +#include <QInputDialog> + +#include "QtSwiftUtil.h" + + +namespace Swift { +QtAffiliationEditor::QtAffiliationEditor(QWidget* parent) : QDialog(parent){ +	ui_.setupUi(this); +	setAttribute(Qt::WA_DeleteOnClose); +	connect(ui_.affiliation, SIGNAL(currentIndexChanged(int)), this, SLOT(handleCurrentIndexChanged(int))); +	connect(ui_.addJID, SIGNAL(clicked()), this, SLOT(handleAddClicked())); +	connect(ui_.removeJID, SIGNAL(clicked()), this, SLOT(handleRemoveClicked())); +} + +QtAffiliationEditor::~QtAffiliationEditor() { +	 +} + +void QtAffiliationEditor::setAffiliations(MUCOccupant::Affiliation affiliation, const std::vector<JID>& jids) { +	affiliations_[affiliation] = jids; +	if (affiliationFromIndex(ui_.affiliation->currentIndex()) == affiliation) { +		handleCurrentIndexChanged(ui_.affiliation->currentIndex()); +	} +} + +const std::vector<std::pair<MUCOccupant::Affiliation, JID> >& QtAffiliationEditor::getChanges() const { +	return changes_; +} + +void QtAffiliationEditor::handleCurrentIndexChanged(int index) { +	ui_.list->clear(); +	foreach (const JID& jid, affiliations_[affiliationFromIndex(index)]) { +		ui_.list->addItem(P2QSTRING(jid.toString())); +	} +} + +void QtAffiliationEditor::handleAddClicked() { +	bool ok = false; +	JID jid = JID(Q2PSTRING(QInputDialog::getText(this, tr("Add User"), tr("Added User's Address:"), QLineEdit::Normal, "", &ok))); +	if (ok && jid.isValid()) { +		//FIXME: validation +		MUCOccupant::Affiliation affiliation = affiliationFromIndex(ui_.affiliation->currentIndex()); +		changes_.push_back(ChangePair(affiliation, jid)); +		ui_.list->addItem(P2QSTRING(jid.toString())); +		affiliations_[affiliation].push_back(jid); +	} +} + +void QtAffiliationEditor::handleRemoveClicked() { +	QListWidgetItem* item = ui_.list->currentItem(); +	if (item) { +		JID jid(Q2PSTRING(item->text())); +		changes_.push_back(ChangePair(MUCOccupant::NoAffiliation, jid)); +		std::vector<JID>& jids = affiliations_[affiliationFromIndex(ui_.affiliation->currentIndex())]; +		jids.erase(std::remove(jids.begin(), jids.end(), jid), jids.end()); +		handleCurrentIndexChanged(ui_.affiliation->currentIndex()); +	} +} + +MUCOccupant::Affiliation QtAffiliationEditor::affiliationFromIndex(int affiliation) { +	switch (affiliation) { +		case 0: return MUCOccupant::Owner; +		case 1: return MUCOccupant::Admin; +		case 2: return MUCOccupant::Member; +		case 3: return MUCOccupant::Outcast; +		default: return MUCOccupant::Outcast; +	} +} + +}
\ No newline at end of file  | 
 Swift