// Squawk messenger. // Copyright (C) 2019 Yury Gubich // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . #include "info.h" #include "ui_info.h" UI::Info::Info(QWidget* parent): QWidget(parent), m_ui(new Ui::Info()), contactGeneral(nullptr), contactContacts(nullptr), description(nullptr), overlay(new QWidget()), progress(new Progress(100)), progressLabel(new QLabel()) { m_ui->setupUi(this); initializeOverlay(); } UI::Info::~Info() { if (contactGeneral != nullptr) contactGeneral->deleteLater(); if (contactContacts != nullptr) contactContacts->deleteLater(); if (description != nullptr) description->deleteLater(); overlay->deleteLater(); } void UI::Info::setData(const Shared::Info& info) { switch (info.type) { case Shared::EntryType::contact: initializeContactGeneral(info); initializeContactContacts(info); initializeDescription(info.editable); break; default: break; } } void UI::Info::initializeOverlay() { QGridLayout* gr = static_cast(layout()); gr->addWidget(overlay, 0, 0, 4, 1); QVBoxLayout* nl = new QVBoxLayout(); QGraphicsOpacityEffect* opacity = new QGraphicsOpacityEffect(); opacity->setOpacity(0.8); overlay->setLayout(nl); overlay->setBackgroundRole(QPalette::Base); overlay->setAutoFillBackground(true); overlay->setGraphicsEffect(opacity); progressLabel->setAlignment(Qt::AlignCenter); QFont pf = progressLabel->font(); pf.setBold(true); pf.setPointSize(26); progressLabel->setFont(pf); progressLabel->setWordWrap(true); nl->addStretch(); nl->addWidget(progress); nl->addWidget(progressLabel); nl->addStretch(); overlay->hide(); } void UI::Info::showProgress(const QString& line) { progressLabel->setText(line); overlay->show(); progress->start(); } void UI::Info::hideProgress() { overlay->hide(); progress->stop(); } void UI::Info::initializeContactGeneral(const Shared::Info& info) { if (contactGeneral == nullptr) { contactGeneral = new ContactGeneral; m_ui->tabWidget->addTab(contactGeneral, contactGeneral->title()); } contactGeneral->setVCard(info.jid, info.vcard, info.editable); }