From 4636fb155afcb2d7084e7a0debfa093780488f22 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Remko=20Tron=C3=A7on?= <git@el-tramo.be>
Date: Mon, 7 Feb 2011 21:21:28 +0100
Subject: Split contact editing out into separate widget.


diff --git a/Swift/QtUI/QtContactEditWidget.cpp b/Swift/QtUI/QtContactEditWidget.cpp
new file mode 100644
index 0000000..50d964b
--- /dev/null
+++ b/Swift/QtUI/QtContactEditWidget.cpp
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2010 Kevin Smith
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#include "QtContactEditWidget.h"
+
+#include <algorithm>
+
+#include <QScrollArea>
+#include <QBoxLayout>
+#include <QLabel>
+#include <QCheckBox>
+#include <QLineEdit>
+
+#include "Swift/QtUI/QtSwiftUtil.h"
+
+namespace Swift {
+
+QtContactEditWidget::QtContactEditWidget(const std::set<String>& allGroups, QWidget* parent) : QWidget(parent), groups_(NULL) {
+	QBoxLayout* layout = new QVBoxLayout(this);
+	setContentsMargins(0,0,0,0);
+
+	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));
+
+	QScrollArea* groupsArea = new QScrollArea(this);
+	layout->addWidget(groupsArea);
+	groupsArea->setWidgetResizable(true);
+	groupsArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
+	groupsArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
+
+	QWidget* 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);
+	}
+
+	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 QtContactEditWidget::setName(const String& name) {
+	name_->setText(P2QSTRING(name));
+}
+
+String QtContactEditWidget::getName() const {
+	return Q2PSTRING(name_->text());
+}
+
+void QtContactEditWidget::setSelectedGroups(const std::vector<String>& groups) {
+	foreach (String group, groups) {
+		checkBoxes_[group]->setCheckState(Qt::Checked);
+	}
+}
+
+std::set<String> QtContactEditWidget::getSelectedGroups() const {
+	std::set<String> groups;
+	foreach(const CheckBoxMap::value_type& group, checkBoxes_) {
+		if (group.second->checkState() == Qt::Checked) {
+			groups.insert(group.first);
+		}
+	}
+	if (newGroup_->checkState() == Qt::Checked && !newGroupName_->text().isEmpty()) {
+		groups.insert(Q2PSTRING(newGroupName_->text()));
+	}
+	return groups;
+}
+
+}
diff --git a/Swift/QtUI/QtContactEditWidget.h b/Swift/QtUI/QtContactEditWidget.h
new file mode 100644
index 0000000..b855b6c
--- /dev/null
+++ b/Swift/QtUI/QtContactEditWidget.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2010 Kevin Smith
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#pragma once
+
+#include <map>
+#include <set>
+#include <boost/shared_ptr.hpp>
+
+#include <QWidget>
+
+#include <Swiften/Base/String.h>
+
+class QLineEdit;
+class QCheckBox;
+
+namespace Swift {
+	class QtContactEditWidget : public QWidget {
+			Q_OBJECT
+
+		public:
+			QtContactEditWidget(const std::set<String>& allGroups, QWidget* parent);
+
+			void setName(const String&);
+			String getName() const;
+
+			void setSelectedGroups(const std::vector<String>& groups);
+			std::set<String> getSelectedGroups() const;
+
+		private:
+			typedef std::map<String, QCheckBox*> CheckBoxMap;
+			CheckBoxMap checkBoxes_;
+			QLineEdit* name_;
+			QWidget* groups_;
+			QCheckBox* newGroup_;
+			QLineEdit* newGroupName_;
+	};
+}
+
-- 
cgit v0.10.2-6-g49f6