diff options
Diffstat (limited to 'Swift/QtUI/QtContactEditWindow.cpp')
| -rw-r--r-- | Swift/QtUI/QtContactEditWindow.cpp | 136 | 
1 files changed, 136 insertions, 0 deletions
diff --git a/Swift/QtUI/QtContactEditWindow.cpp b/Swift/QtUI/QtContactEditWindow.cpp new file mode 100644 index 0000000..6eb4316 --- /dev/null +++ b/Swift/QtUI/QtContactEditWindow.cpp @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2010 Kevin Smith + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include "QtContactEditWindow.h" + +#include <algorithm> + +#include <QScrollArea> +#include <QBoxLayout> +#include <QLabel> +#include <QCheckBox> +#include <QLineEdit> +#include <QDialogButtonBox> +#include <QMessageBox> +#include <QPushButton> + +#include "Swift/QtUI/QtSwiftUtil.h" + +namespace Swift { + +QtContactEditWindow::QtContactEditWindow() : groups_(NULL) { +	resize(300,300); +	setWindowTitle("Edit contact"); + +	QBoxLayout* layout = new QVBoxLayout(this); +	setContentsMargins(0,0,0,0); + +	jidLabel_ = new QLabel(this); +	jidLabel_->setAlignment(Qt::AlignHCenter); +	layout->addWidget(jidLabel_); + +	QHBoxLayout* nameLayout = new QHBoxLayout(); +	 +	QLabel* label = new QLabel("Name:", this); +	nameLayout->addWidget(label); +	name_ = new QLineEdit(this); +	nameLayout->addWidget(name_); +	layout->addLayout(nameLayout); + +	layout->addWidget(new QLabel("Groups:", this)); + +	groupsArea_ = new QScrollArea(this); +	layout->addWidget(groupsArea_); +	groupsArea_->setWidgetResizable(true); +	groupsArea_->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); +	groupsArea_->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); + +	QHBoxLayout* buttonLayout = new QHBoxLayout(); +	layout->addLayout(buttonLayout); +	QPushButton* removeButton = new QPushButton("Remove contact", this); +	connect(removeButton, SIGNAL(clicked()), this, SLOT(handleRemoveContact())); +	buttonLayout->addWidget(removeButton); +	QPushButton* okButton = new QPushButton("Ok", this); +	connect(okButton, SIGNAL(clicked()), this, SLOT(handleUpdateContact())); +	buttonLayout->addStretch(); +	buttonLayout->addWidget(okButton); +} + +void QtContactEditWindow::setContact(const JID& jid, const String& name, const std::vector<String>& groups, const std::set<String>& allGroups) { +	jid_ = jid; +	 +	jidLabel_->setText("<b>" + P2QSTRING(jid.toString()) + "</b>"); +	name_->setText(P2QSTRING(name)); + +	delete groups_; +	checkBoxes_.clear(); +	groups_ = new QWidget(groupsArea_); +	groupsArea_->setWidget(groups_); +	QVBoxLayout* scrollLayout = new QVBoxLayout(groups_); + +	foreach (String group, allGroups) { +		QCheckBox* check = new QCheckBox(groups_); +		check->setText(P2QSTRING(group)); +		check->setCheckState(Qt::Unchecked); +		checkBoxes_[group] = check; +		scrollLayout->addWidget(check); +	} +	foreach (String group, groups) { +		checkBoxes_[group]->setCheckState(Qt::Checked); +	} + +	QHBoxLayout* newGroupLayout = new QHBoxLayout(); +	newGroup_ = new QCheckBox(groups_); +	newGroup_->setText("New Group:"); +	newGroup_->setCheckState(Qt::Unchecked); +	newGroupLayout->addWidget(newGroup_); +	newGroupName_ = new QLineEdit(groups_); +	newGroupLayout->addWidget(newGroupName_); +	scrollLayout->addLayout(newGroupLayout); + +	scrollLayout->addItem(new QSpacerItem(20, 73, QSizePolicy::Minimum, QSizePolicy::Expanding)); +} + +void QtContactEditWindow::setEnabled(bool b) { +	QWidget::setEnabled(b); +} + +void QtContactEditWindow::show() { +	QWidget::show(); +	QWidget::activateWindow(); +} + +void QtContactEditWindow::hide() { +	QWidget::hide(); +} + +void QtContactEditWindow::handleRemoveContact() { +	QMessageBox msgBox; +	msgBox.setWindowTitle("Confirm contact deletion"); +	msgBox.setText("Are you sure you want to delete this contact?"); +	msgBox.setInformativeText(QString("This will remove the contact '%1' from all groups they may be in.").arg(P2QSTRING(jid_.toString()))); +	msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); +	msgBox.setDefaultButton(QMessageBox::Yes); +	int ret = msgBox.exec(); +	if (ret == QMessageBox::Yes) { +		onRemoveContactRequest(); +	} +} + +void QtContactEditWindow::handleUpdateContact() { +	std::vector<String> groups; +	foreach(const CheckBoxMap::value_type& group, checkBoxes_) { +		if (group.second->checkState() == Qt::Checked) { +			groups.push_back(group.first); +		} +	} +	if (newGroup_->checkState() == Qt::Checked && !newGroupName_->text().isEmpty()) { +		groups.push_back(Q2PSTRING(newGroupName_->text())); +	} +	onChangeContactRequest(Q2PSTRING(name_->text()), groups); +} + +}  | 
 Swift