yacreader/YACReaderLibrary/yacreader_main_toolbar.cpp
2023-06-04 20:55:11 +02:00

152 lines
4.5 KiB
C++

#include "yacreader_main_toolbar.h"
#include <QPainter>
#include <QHBoxLayout>
#include <QToolButton>
#include <QLabel>
#include <QResizeEvent>
#include <QPaintEvent>
#include <QAction>
YACReaderMainToolBar::YACReaderMainToolBar(QWidget *parent)
: QWidget(parent)
{
mainLayout = new QHBoxLayout;
currentFolder = new QLabel(this);
// currentFolder->setAlignment(Qt::AlignCenter);
currentFolder->setStyleSheet(" QLabel {color:#404040; font-size:22px; font-weight:bold;}");
QFont f = currentFolder->font();
f.setStyleStrategy(QFont::PreferAntialias);
currentFolder->setFont(f);
QString qToolButtonStyleSheet = "QToolButton {border:none;}";
backButton = new QToolButton();
backButton->setStyleSheet(qToolButtonStyleSheet);
forwardButton = new QToolButton();
forwardButton->setStyleSheet(qToolButtonStyleSheet);
forwardButton->setDisabled(true);
settingsButton = new QToolButton();
settingsButton->setStyleSheet(qToolButtonStyleSheet);
settingsButton->setIconSize(QSize(24, 24));
serverButton = new QToolButton();
serverButton->setStyleSheet(qToolButtonStyleSheet);
serverButton->setIconSize(QSize(17, 24));
helpButton = new QToolButton();
helpButton->setStyleSheet(qToolButtonStyleSheet);
helpButton->setIconSize(QSize(14, 25));
toggleComicsViewButton = new QToolButton;
toggleComicsViewButton->setStyleSheet(qToolButtonStyleSheet);
toggleComicsViewButton->setIconSize(QSize(24, 24));
fullscreenButton = new QToolButton();
fullscreenButton->setStyleSheet(qToolButtonStyleSheet);
fullscreenButton->setIconSize(QSize(24, 24));
mainLayout->setContentsMargins(0, 0, 0, 0);
mainLayout->setSpacing(0);
mainLayout->addSpacing(12);
mainLayout->addWidget(backButton, 0, Qt::AlignVCenter);
addDivider();
mainLayout->addWidget(forwardButton, 0, Qt::AlignVCenter);
mainLayout->addSpacing(34);
mainLayout->addWidget(settingsButton, 0, Qt::AlignVCenter);
addWideDivider();
mainLayout->addWidget(serverButton, 0, Qt::AlignVCenter);
addWideDivider();
mainLayout->addWidget(helpButton, 0, Qt::AlignVCenter);
mainLayout->addStretch();
mainLayout->addWidget(toggleComicsViewButton, 0, Qt::AlignVCenter);
#ifndef Q_OS_MACOS
addWideDivider();
mainLayout->addWidget(fullscreenButton, 0, Qt::AlignVCenter);
#endif
setLayout(mainLayout);
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
}
QSize YACReaderMainToolBar::sizeHint() const
{
return QSize(200, 40);
}
void YACReaderMainToolBar::setSearchWidget(QWidget *w)
{
addWideDivider();
mainLayout->addWidget(w, 0, Qt::AlignVCenter);
mainLayout->addSpacing(6);
}
void YACReaderMainToolBar::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
QPainter painter(this);
painter.fillRect(0, 0, width(), height(), QColor("#F0F0F0"));
}
void YACReaderMainToolBar::resizeEvent(QResizeEvent *event)
{
// 210px x 2 = 420px
int freeWidth = event->size().width() - 420;
int maxLabelWidth = freeWidth >= 0 ? freeWidth : 0;
currentFolder->setMaximumWidth(maxLabelWidth);
currentFolder->adjustSize();
QFontMetrics metrix(currentFolder->font());
QString clippedText = metrix.elidedText(currentFolderName, Qt::ElideRight, maxLabelWidth);
currentFolder->setText(clippedText);
currentFolder->adjustSize();
currentFolder->move((event->size().width() - currentFolder->width()) / 2, (event->size().height() - currentFolder->height()) / 2);
}
void YACReaderMainToolBar::addDivider()
{
QPixmap img(":/images/main_toolbar/divider.svg");
QLabel *divider = new QLabel();
divider->setPixmap(img);
mainLayout->addSpacing(5);
mainLayout->addWidget(divider, 0, Qt::AlignVCenter);
mainLayout->addSpacing(5);
}
void YACReaderMainToolBar::addWideDivider()
{
mainLayout->addSpacing(3);
addDivider();
mainLayout->addSpacing(3);
}
void YACReaderMainToolBar::setCurrentFolderName(const QString &name)
{
currentFolder->setText(name);
currentFolderName = name;
currentFolder->adjustSize();
int freeWidth = size().width() - 420;
int maxLabelWidth = freeWidth >= 0 ? freeWidth : 0;
currentFolder->setMaximumWidth(maxLabelWidth);
QFontMetrics metrix(currentFolder->font());
QString clippedText = metrix.elidedText(currentFolderName, Qt::ElideRight, maxLabelWidth);
currentFolder->setText(clippedText);
currentFolder->adjustSize();
currentFolder->move((width() - currentFolder->width()) / 2, (height() - currentFolder->height()) / 2);
}