summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swift/QtUI/QtVCardWidget/QtVCardEMailField.cpp')
-rw-r--r--Swift/QtUI/QtVCardWidget/QtVCardEMailField.cpp127
1 files changed, 127 insertions, 0 deletions
diff --git a/Swift/QtUI/QtVCardWidget/QtVCardEMailField.cpp b/Swift/QtUI/QtVCardWidget/QtVCardEMailField.cpp
new file mode 100644
index 0000000..58372c2
--- /dev/null
+++ b/Swift/QtUI/QtVCardWidget/QtVCardEMailField.cpp
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 2012 Tobias Markmann
+ * Licensed under the simplified BSD license.
+ * See Documentation/Licenses/BSD-simplified.txt for more information.
+ */
+
+#include "QtVCardEMailField.h"
+#include "ui_QtVCardEMailField.h"
+
+#include <QVariant>
+
+namespace Swift {
+
+QtVCardEMailField::QtVCardEMailField(QWidget* parent, bool editable) :
+ QWidget(parent),
+ ui(new Ui::QtVCardEMailField) {
+ ui->setupUi(this);
+ connect(ui->lineEditEMAIL, SIGNAL(textChanged(QString)), SLOT(onTextChanged(QString)));
+ connect(ui->comboBoxType, SIGNAL(currentIndexChanged(int)), SLOT(onEMailTypeChanged(int)));
+ setEditable(editable);
+}
+
+QtVCardEMailField::~QtVCardEMailField() {
+ delete ui;
+}
+
+bool QtVCardEMailField::isEditable() const {
+ return editable;
+}
+
+void QtVCardEMailField::setEditable(bool editable) {
+ this->editable = editable;
+ if (this->editable) {
+ ui->label->show();
+ ui->comboBoxType->show();
+ ui->lineEditEMAIL->show();
+ ui->labelEMAIL->hide();
+ } else {
+ ui->label->hide();
+ ui->comboBoxType->hide();
+ ui->lineEditEMAIL->hide();
+ ui->labelEMAIL->show();
+ }
+
+ foreach(QObject* widget, children()) {
+ if (!dynamic_cast<QWidget*>(widget)) continue;
+ if (widget->property("editable").isValid()) {
+ widget->setProperty("editable", QVariant(editable));
+ }
+
+ if (widget->property("readOnly").isValid()) {
+ widget->setProperty("readOnly", QVariant(!editable));
+ widget->setProperty("frame", QVariant(editable));
+ }
+
+ QCheckBox* checkbox;
+ if ((checkbox = dynamic_cast<QCheckBox*>(widget))) {
+ checkbox->setProperty("enabled", QVariant(editable));
+ }
+ }
+}
+
+bool QtVCardEMailField::isEmpty() const {
+ return ui->lineEditEMAIL->text().isEmpty();
+}
+
+void QtVCardEMailField::setAddress(const QString address) {
+ ui->lineEditEMAIL->setText(address);
+}
+
+QString QtVCardEMailField::getAddress() const {
+ return ui->lineEditEMAIL->text();
+}
+
+void QtVCardEMailField::setPreferred(const bool preferred) {
+ ui->checkBoxPREF->setChecked(preferred);
+}
+
+bool QtVCardEMailField::getPreferred() const {
+ return ui->checkBoxPREF->checkState() == Qt::Checked;
+}
+
+void QtVCardEMailField::setHome(const bool home) {
+ ui->checkBoxHOME->setChecked(home);
+}
+
+bool QtVCardEMailField::getHome() const {
+ return ui->checkBoxHOME->checkState() == Qt::Checked;
+}
+
+void QtVCardEMailField::setWork(const bool work) {
+ ui->checkBoxWORK->setChecked(work);
+}
+
+bool QtVCardEMailField::getWork() const {
+ return ui->checkBoxWORK->checkState() == Qt::Checked;
+}
+
+void QtVCardEMailField::setType(EMailType type) {
+ ui->comboBoxType->setCurrentIndex(type);
+}
+
+QtVCardEMailField::EMailType QtVCardEMailField::getType() const {
+ return ui->comboBoxType->currentIndex() == 1 ? X_400 : Internet;
+}
+
+void QtVCardEMailField::onTextChanged(const QString& text) {
+ if (ui->comboBoxType->currentIndex() == Internet && isEmailAddress(text)) {
+ ui->labelEMAIL->setText(QString("<a href=\"mailto:%1\">%1</a>").arg(text));
+ } else {
+ ui->labelEMAIL->setText(text);
+ }
+}
+
+void QtVCardEMailField::onEMailTypeChanged(int) {
+ onTextChanged(ui->labelEMAIL->text());
+}
+
+bool QtVCardEMailField::isEmailAddress(const QString& emailAddress) {
+ if ( emailAddress.length() == 0 ) {
+ return false;
+ }
+ QRegExp regex(QString("\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}\\b"), Qt::CaseInsensitive);
+ return regex.exactMatch(emailAddress);
+}
+
+}