From c4d22c9c1429e799cbebff8004baa7c82df94ac4 Mon Sep 17 00:00:00 2001 From: blue Date: Mon, 21 Oct 2019 18:02:41 +0300 Subject: [PATCH] some methods to cVard --- ui/utils/image.cpp | 37 ++++++++++++++++++------- ui/utils/image.h | 28 ++++++------------- ui/widgets/vcard.cpp | 65 ++++++++++++++++++++++++++++++++++++++++++-- ui/widgets/vcard.h | 14 +++++++++- ui/widgets/vcard.ui | 33 ++++++++++++++++++---- 5 files changed, 139 insertions(+), 38 deletions(-) diff --git a/ui/utils/image.cpp b/ui/utils/image.cpp index 0abccf1..6a2ce1c 100644 --- a/ui/utils/image.cpp +++ b/ui/utils/image.cpp @@ -19,19 +19,13 @@ #include #include "image.h" -Image::Image(const QString& path, QWidget* parent): +Image::Image(const QString& path, quint16 p_minWidth, QWidget* parent): QLabel(parent), pixmap(path), - aspectRatio(0) + aspectRatio(0), + minWidth(p_minWidth) { - - qreal height = pixmap.height(); - qreal width = pixmap.width(); - aspectRatio = width / height; - setPixmap(pixmap); setScaledContents(true); - setMinimumHeight(50 / aspectRatio); - setMinimumWidth(50); } Image::~Image() @@ -42,7 +36,6 @@ Image::~Image() int Image::heightForWidth(int width) const { int height = width / aspectRatio; - //qDebug() << height << width << aspectRatio; return height; } @@ -50,3 +43,27 @@ bool Image::hasHeightForWidth() const { return true; } + +void Image::recalculateAspectRatio() +{ + qreal height = pixmap.height(); + qreal width = pixmap.width(); + aspectRatio = width / height; + setPixmap(pixmap); + setMinimumHeight(minWidth / aspectRatio); + setMinimumWidth(minWidth); +} + +void Image::setMinWidth(quint16 p_minWidth) +{ + if (minWidth != p_minWidth) { + minWidth = p_minWidth; + recalculateAspectRatio(); + } +} + +void Image::setPath(const QString& path) +{ + pixmap = QPixmap(path); + recalculateAspectRatio(); +} diff --git a/ui/utils/image.h b/ui/utils/image.h index 7d61202..a583f94 100644 --- a/ui/utils/image.h +++ b/ui/utils/image.h @@ -28,34 +28,22 @@ class Image : public QLabel { public: - /** - * Default constructor - */ - Image(const QString& path, QWidget* parent = nullptr); + Image(const QString& path, quint16 minWidth = 50, QWidget* parent = nullptr); - /** - * Destructor - */ ~Image(); - /** - * @todo write docs - * - * @param TODO - * @return TODO - */ int heightForWidth(int width) const override; - - /** - * @todo write docs - * - * @return TODO - */ - virtual bool hasHeightForWidth() const; + bool hasHeightForWidth() const override; + void setPath(const QString& path); + void setMinWidth(quint16 minWidth); private: QPixmap pixmap; qreal aspectRatio; + quint16 minWidth; + +private: + void recalculateAspectRatio(); }; #endif // IMAGE_H diff --git a/ui/widgets/vcard.cpp b/ui/widgets/vcard.cpp index f2db0e9..7072ca1 100644 --- a/ui/widgets/vcard.cpp +++ b/ui/widgets/vcard.cpp @@ -19,13 +19,74 @@ #include "vcard.h" #include "ui_vcard.h" -VCard::VCard(QWidget* parent): +VCard::VCard(bool edit, QWidget* parent): QWidget(parent), - m_ui(new Ui::VCard()) + m_ui(new Ui::VCard()), + avatar(":/images/logo.svg", 64) { m_ui->setupUi(this); + + if (edit) { + + } else { + m_ui->buttonBox->hide(); + m_ui->firstName->setReadOnly(true); + m_ui->middleName->setReadOnly(true); + m_ui->lastName->setReadOnly(true); + m_ui->nickName->setReadOnly(true); + m_ui->birthday->setReadOnly(true); + m_ui->organizationName->setReadOnly(true); + m_ui->organizationDepartment->setReadOnly(true); + m_ui->organizationTitle->setReadOnly(true); + m_ui->organizationRole->setReadOnly(true); + m_ui->description->setReadOnly(true); + m_ui->jabberID->setReadOnly(true); + } + + connect(m_ui->buttonBox, &QDialogButtonBox::accepted, this, &VCard::onButtonBoxAccepted); + connect(m_ui->buttonBox, &QDialogButtonBox::rejected, m_ui->buttonBox, &QDialogButtonBox::deleteLater); } VCard::~VCard() { } + +void VCard::setVCard(const QString& jid, const Shared::VCard& card) +{ + m_ui->jabberID->setText(jid); + m_ui->firstName->setText(card.getFirstName()); + m_ui->middleName->setText(card.getMiddleName()); + m_ui->lastName->setText(card.getLastName()); + m_ui->nickName->setText(card.getNickName()); + m_ui->birthday->setDate(card.getBirthday()); + //m_ui->organizationName->setText(card.get()); + //m_ui->organizationDepartment->setText(card.get()); + //m_ui->organizationTitle->setText(card.get()); + //m_ui->organizationRole->setText(card.get()); + m_ui->description->setText(card.getDescription()); + + QString path; + switch (card.getAvatarType()) { + case Shared::Avatar::empty: + path = QApplication::palette().window().color().lightnessF() > 0.5 ? ":/images/fallback/dark/big/user.svg" : ":/images/fallback/light/big/user.svg"; + break; + case Shared::Avatar::autocreated: + case Shared::Avatar::valid: + path = card.getAvatarPath(); + break; + } + avatar.setPath(path); +} + +void VCard::onButtonBoxAccepted() +{ + Shared::VCard card; + card.setFirstName(m_ui->firstName->text()); + card.setMiddleName(m_ui->middleName->text()); + card.setLastName(m_ui->lastName->text()); + card.setNickName(m_ui->nickName->text()); + card.setBirthday(m_ui->birthday->date()); + card.setDescription(m_ui->description->toPlainText()); + + emit saveVCard(m_ui->jabberID->text(), card); +} diff --git a/ui/widgets/vcard.h b/ui/widgets/vcard.h index c9fe19d..dc14172 100644 --- a/ui/widgets/vcard.h +++ b/ui/widgets/vcard.h @@ -22,6 +22,9 @@ #include #include +#include "../../global.h" +#include "../utils/image.h" + namespace Ui { class VCard; @@ -34,11 +37,20 @@ class VCard : public QWidget { Q_OBJECT public: - VCard(QWidget* parent = nullptr); + VCard(bool edit = false, QWidget* parent = nullptr); ~VCard(); + void setVCard(const QString& jid, const Shared::VCard& card); + +signals: + void saveVCard(const QString& jid, const Shared::VCard& card); + +private slots: + void onButtonBoxAccepted(); + private: QScopedPointer m_ui; + Image avatar; }; #endif // VCARD_H diff --git a/ui/widgets/vcard.ui b/ui/widgets/vcard.ui index 5658d2c..2ebae41 100644 --- a/ui/widgets/vcard.ui +++ b/ui/widgets/vcard.ui @@ -6,7 +6,7 @@ 0 0 - 434 + 544 534 @@ -49,7 +49,7 @@ false - + General @@ -433,7 +433,7 @@ - + Contact @@ -479,7 +479,7 @@ 0 0 - 422 + 532 410 @@ -539,13 +539,36 @@ - JabberID + Jabber ID jabberID + + + + + 150 + 0 + + + + + 300 + 16777215 + + + + + + + + Web site + + +