/* * 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 "badge.h" Badge::Badge(const QString& p_id, const QString& p_text, const QIcon& icon, QWidget* parent): QFrame(parent), id(p_id), image(new QLabel()), text(new QLabel(p_text)), closeButton(new QPushButton()), layout(new QHBoxLayout(this)) { createMandatoryComponents(); image->setPixmap(icon.pixmap(25, 25)); layout->addWidget(image); layout->addWidget(text); layout->addWidget(closeButton); } Badge::Badge(QWidget* parent): QFrame(parent), id(Shared::generateUUID()), image(nullptr), text(nullptr), closeButton(new QPushButton()), layout(new QHBoxLayout(this)) { createMandatoryComponents(); layout->addWidget(closeButton); } void Badge::setIcon(const QIcon& icon) { if (image == nullptr) { image = new QLabel(); image->setPixmap(icon.pixmap(25, 25)); layout->insertWidget(0, image); } else { image->setPixmap(icon.pixmap(25, 25)); } } void Badge::setText(const QString& p_text) { if (text == nullptr) { text = new QLabel(p_text); int index = 0; if (image != nullptr) { index = 1; } layout->insertWidget(index, text); } else { text->setText(p_text); } } Badge::~Badge() { if (image != nullptr) { delete image; } if (text != nullptr) { delete text; } delete closeButton; } bool Badge::Comparator::operator()(const Badge* a, const Badge* b) const { return a->id < b->id; } bool Badge::Comparator::operator()(const Badge& a, const Badge& b) const { return a.id < b.id; } void Badge::createMandatoryComponents() { setBackgroundRole(QPalette::Base); //setAutoFillBackground(true); setFrameStyle(QFrame::StyledPanel); setFrameShadow(QFrame::Raised); QIcon tabCloseIcon = QIcon::fromTheme("tab-close"); if (tabCloseIcon.isNull()) { tabCloseIcon.addFile(QString::fromUtf8(":/images/fallback/dark/big/edit-none.svg"), QSize(), QIcon::Normal, QIcon::Off); } closeButton->setIcon(tabCloseIcon); closeButton->setMaximumHeight(25); closeButton->setMaximumWidth(25); layout->setContentsMargins(2, 2, 2, 2); connect(closeButton, &QPushButton::clicked, this, &Badge::close); }