/* * 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 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(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(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("%1").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); } }