diff options
Diffstat (limited to 'Swift/QtUI/QtVCardWidget/QtVCardEMailField.cpp')
-rw-r--r-- | Swift/QtUI/QtVCardWidget/QtVCardEMailField.cpp | 127 |
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); +} + +} |