diff options
Diffstat (limited to 'Swift/QtUI/QtRosterHeader.cpp')
-rw-r--r-- | Swift/QtUI/QtRosterHeader.cpp | 171 |
1 files changed, 99 insertions, 72 deletions
diff --git a/Swift/QtUI/QtRosterHeader.cpp b/Swift/QtUI/QtRosterHeader.cpp index 44459d5..b405d10 100644 --- a/Swift/QtUI/QtRosterHeader.cpp +++ b/Swift/QtUI/QtRosterHeader.cpp @@ -1,112 +1,139 @@ /* - * Copyright (c) 2010 Kevin Smith - * Licensed under the GNU General Public License v3. - * See Documentation/Licenses/GPLv3.txt for more information. + * Copyright (c) 2010-2016 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. */ -#include "QtRosterHeader.h" +#include <Swift/QtUI/QtRosterHeader.h> -#include <QHBoxLayout> -#include <QVBoxLayout> +#include <QBitmap> #include <QFileInfo> +#include <QHBoxLayout> +#include <QHelpEvent> #include <QIcon> -#include <QSizePolicy> -#include <qdebug.h> #include <QMouseEvent> #include <QPainter> -#include <QBitmap> +#include <QSizePolicy> +#include <QToolTip> +#include <QVBoxLayout> + +#include <qdebug.h> -#include "QtStatusWidget.h" -#include <Swift/QtUI/QtElidingLabel.h> #include <Swift/QtUI/QtClickableLabel.h> +#include <Swift/QtUI/QtElidingLabel.h> #include <Swift/QtUI/QtNameWidget.h> -#include "QtScaledAvatarCache.h" +#include <Swift/QtUI/QtScaledAvatarCache.h> +#include <Swift/QtUI/QtStatusWidget.h> +#include <Swift/QtUI/Roster/RosterTooltip.h> namespace Swift { -QtRosterHeader::QtRosterHeader(SettingsProvider* settings, StatusCache* statusCache, QWidget* parent) : QWidget(parent) { - QHBoxLayout* topLayout = new QHBoxLayout(); - topLayout->setSpacing(3); - topLayout->setContentsMargins(4,4,4,4); - setLayout(topLayout); - setMinimumHeight(50); - setMaximumHeight(50); - - avatarLabel_ = new QtClickableLabel(this); - avatarLabel_->setMinimumSize(avatarSize_, avatarSize_); - avatarLabel_->setMaximumSize(avatarSize_, avatarSize_); - avatarLabel_->setAlignment(Qt::AlignCenter); - setAvatar(":/icons/avatar.png"); - avatarLabel_->setScaledContents(false); - topLayout->addWidget(avatarLabel_); - connect(avatarLabel_, SIGNAL(clicked()), this, SIGNAL(onEditProfileRequest())); - - QVBoxLayout* rightLayout = new QVBoxLayout(); - rightLayout->setSpacing(4); - rightLayout->setContentsMargins(4,0,0,0); - topLayout->addLayout(rightLayout); - - QHBoxLayout* nameAndSecurityLayout = new QHBoxLayout(); - nameAndSecurityLayout->setContentsMargins(4,0,0,0); - - nameWidget_ = new QtNameWidget(settings, this); - connect(nameWidget_, SIGNAL(onChangeNickRequest()), this, SIGNAL(onEditProfileRequest())); - nameAndSecurityLayout->addWidget(nameWidget_); - - securityInfoButton_ = new QToolButton(this); - securityInfoButton_->setStyleSheet("QToolButton { border: none; } QToolButton:hover { border: 1px solid #bebebe; } QToolButton:pressed { border: 1px solid #757575; background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #777777, stop: 1 #d4d4d4);}"); - //securityInfoButton_->setAutoRaise(true); - securityInfoButton_->setIcon(QIcon(":/icons/lock.png")); - securityInfoButton_->setToolTip(tr("Connection is secured")); - connect(securityInfoButton_, SIGNAL(clicked()), this, SIGNAL(onShowCertificateInfo())); - nameAndSecurityLayout->addWidget(securityInfoButton_); - - rightLayout->addLayout(nameAndSecurityLayout); - - statusWidget_ = new QtStatusWidget(statusCache, this); - connect(statusWidget_, SIGNAL(onChangeStatusRequest(StatusShow::Type, const QString&)), this, SLOT(handleChangeStatusRequest(StatusShow::Type, const QString&))); - rightLayout->addWidget(statusWidget_); - - show(); +QtRosterHeader::QtRosterHeader(SettingsProvider* settings, StatusCache* statusCache, QWidget* parent) : QWidget(parent), statusEdit_(nullptr) { + QHBoxLayout* topLayout = new QHBoxLayout(); + topLayout->setSpacing(3); + topLayout->setContentsMargins(4,4,4,4); + setLayout(topLayout); + setMinimumHeight(50); + setMaximumHeight(50); + + avatarLabel_ = new QtClickableLabel(this); + avatarLabel_->setMinimumSize(avatarSize_, avatarSize_); + avatarLabel_->setMaximumSize(avatarSize_, avatarSize_); + avatarLabel_->setAlignment(Qt::AlignCenter); + setAvatar(":/icons/avatar.png"); + avatarLabel_->setScaledContents(false); + topLayout->addWidget(avatarLabel_); + connect(avatarLabel_, SIGNAL(clicked()), this, SIGNAL(onEditProfileRequest())); + + QVBoxLayout* rightLayout = new QVBoxLayout(); + rightLayout->setSpacing(4); + rightLayout->setContentsMargins(4,0,0,0); + topLayout->addLayout(rightLayout); + + QHBoxLayout* nameAndSecurityLayout = new QHBoxLayout(); + nameAndSecurityLayout->setContentsMargins(4,0,0,0); + + nameWidget_ = new QtNameWidget(settings, this); + connect(nameWidget_, SIGNAL(onChangeNickRequest()), this, SIGNAL(onEditProfileRequest())); + nameAndSecurityLayout->addWidget(nameWidget_); + + securityInfoButton_ = new QToolButton(this); + securityInfoButton_->setStyleSheet("QToolButton { border: none; } QToolButton:hover { border: 1px solid #bebebe; } QToolButton:pressed { border: 1px solid #757575; background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #777777, stop: 1 #d4d4d4);}"); + //securityInfoButton_->setAutoRaise(true); + securityInfoButton_->setIcon(QIcon(":/icons/lock.png")); + securityInfoButton_->setToolTip(tr("Connection is secured")); + connect(securityInfoButton_, SIGNAL(clicked()), this, SIGNAL(onShowCertificateInfo())); + nameAndSecurityLayout->addWidget(securityInfoButton_); + + rightLayout->addLayout(nameAndSecurityLayout); + + statusWidget_ = new QtStatusWidget(statusCache, this); + connect(statusWidget_, SIGNAL(onChangeStatusRequest(StatusShow::Type, const QString&)), this, SLOT(handleChangeStatusRequest(StatusShow::Type, const QString&))); + rightLayout->addWidget(statusWidget_); + + show(); } void QtRosterHeader::handleChangeStatusRequest(StatusShow::Type type, const QString& text) { - emit onChangeStatusRequest(type, text); + emit onChangeStatusRequest(type, text); } void QtRosterHeader::setStatusText(const QString& statusMessage) { - statusWidget_->setStatusText(statusMessage); + statusWidget_->setStatusText(statusMessage); } void QtRosterHeader::setStatusType(StatusShow::Type type) { - statusWidget_->setStatusType(type); + statusWidget_->setStatusType(type); + if (type == StatusShow::None) { + nameWidget_->setOnline(false); + disconnect(avatarLabel_, SIGNAL(clicked()), this, SIGNAL(onEditProfileRequest())); + } + else { + nameWidget_->setOnline(true); + connect(avatarLabel_, SIGNAL(clicked()), this, SIGNAL(onEditProfileRequest()), Qt::UniqueConnection); + } } void QtRosterHeader::setConnecting() { - statusWidget_->setConnecting(); + statusWidget_->setConnecting(); } void QtRosterHeader::setStreamEncryptionStatus(bool tlsInPlace) { - securityInfoButton_->setVisible(tlsInPlace); + securityInfoButton_->setVisible(tlsInPlace); +} + +bool QtRosterHeader::event(QEvent* event) { + if (event->type() == QEvent::ToolTip) { + QHelpEvent *helpEvent = static_cast<QHelpEvent *>(event); + QtScaledAvatarCache scaledAvatarCache(avatarSize_); + QString text = RosterTooltip::buildDetailedTooltip(contact_.get(), &scaledAvatarCache); + QToolTip::showText(helpEvent->globalPos(), text); + return true; + } + return QWidget::event(event); } void QtRosterHeader::setAvatar(const QString& path) { - QString scaledAvatarPath = QtScaledAvatarCache(avatarSize_).getScaledAvatarPath(path); - QPixmap avatar; - if (QFileInfo(scaledAvatarPath).exists()) { - avatar.load(scaledAvatarPath); - } - else { - avatar = QPixmap(":/icons/avatar.png").scaled(avatarSize_, avatarSize_, Qt::KeepAspectRatio, Qt::SmoothTransformation); - } - avatarLabel_->setPixmap(avatar); + QString scaledAvatarPath = QtScaledAvatarCache(avatarSize_).getScaledAvatarPath(path); + QPixmap avatar; + if (QFileInfo(scaledAvatarPath).exists()) { + avatar.load(scaledAvatarPath); + } + else { + avatar = QPixmap(":/icons/avatar.svg").scaled(avatarSize_, avatarSize_, Qt::KeepAspectRatio, Qt::SmoothTransformation); + } + avatarLabel_->setPixmap(avatar); } void QtRosterHeader::setNick(const QString& nick) { - nameWidget_->setNick(nick); + nameWidget_->setNick(nick); +} + +void QtRosterHeader::setContactRosterItem(std::shared_ptr<ContactRosterItem> contact) { + contact_ = contact; } void QtRosterHeader::setJID(const QString& jid) { - nameWidget_->setJID(jid); + nameWidget_->setJID(jid); } |