summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2011-02-07 20:21:28 (GMT)
committerRemko Tronçon <git@el-tramo.be>2011-02-07 20:21:28 (GMT)
commit4636fb155afcb2d7084e7a0debfa093780488f22 (patch)
treed5c5f26b4e0377c3e44732d8ad019bfbde17f422
parenta21d013c029bdeef960dad9327a3d07dfdcdaa30 (diff)
downloadswift-contrib-4636fb155afcb2d7084e7a0debfa093780488f22.zip
swift-contrib-4636fb155afcb2d7084e7a0debfa093780488f22.tar.bz2
Split contact editing out into separate widget.
-rw-r--r--Swift/QtUI/QtContactEditWidget.cpp92
-rw-r--r--Swift/QtUI/QtContactEditWidget.h42
2 files changed, 134 insertions, 0 deletions
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_;
+ };
+}
+