Proper MultiZim List Sizing

Set height&padding for list&items and stretch to menu width.
This commit is contained in:
ShaopengLin 2024-10-30 01:18:13 -04:00 committed by Kelson
parent 85d2790b75
commit c5f2f766b0
3 changed files with 35 additions and 2 deletions

View File

@ -75,6 +75,18 @@ SearchBar > QToolButton:hover {
border-radius: 3px;
}
MultiZimButton QListWidget {
border: 0px;
outline: 0px;
padding: 5px 0px; /* XXX: duplicated in css_constants.h */
background-color: white;
}
ZimItemWidget QLabel {
font-size: 16px;
line-height: 24px; /* XXX: duplicated in css_constants.h */
}
TopWidget QToolButton:pressed,
TopWidget QToolButton::hover {
border: 1px solid #3366CC;

View File

@ -28,6 +28,18 @@ namespace SearchBar{
const int border = 1;
}
namespace MultiZimButton {
namespace QListWidget {
const int paddingVertical = 5;
}
}
namespace ZimItemWidget {
namespace QLabel {
const int lineHeight = 24;
}
}
namespace TopWidget {
namespace QToolButton {
namespace backButton {

View File

@ -5,6 +5,7 @@
#include <QRadioButton>
#include "kiwixapp.h"
#include "multizimbutton.h"
#include "css_constants.h"
MultiZimButton::MultiZimButton(QWidget *parent) :
QToolButton(parent),
@ -36,6 +37,8 @@ void MultiZimButton::updateDisplay()
const auto view = KiwixApp::instance()->getTabWidget()->currentWebView();
QListWidgetItem* currentItem = nullptr;
QIcon currentIcon;
const int paddingTopBot = CSS::MultiZimButton::QListWidget::paddingVertical * 2;
const int itemHeight = paddingTopBot + CSS::ZimItemWidget::QLabel::lineHeight;
for (const auto& bookId : library->getBookIds())
{
try
@ -49,6 +52,7 @@ void MultiZimButton::updateDisplay()
const auto item = new QListWidgetItem();
item->setData(Qt::UserRole, bookId);
item->setData(Qt::DisplayRole, bookTitle);
item->setSizeHint(QSize(0, itemHeight));
if (view && view->zimId() == bookId)
{
@ -78,6 +82,11 @@ void MultiZimButton::updateDisplay()
mp_buttonList->scrollToTop();
mp_buttonList->setCurrentRow(0);
/* We set a maximum display height for list. Respect padding. */
const int listHeight = itemHeight * std::min(7, mp_buttonList->count());
mp_buttonList->setFixedHeight(listHeight + paddingTopBot);
mp_buttonList->setFixedWidth(menu()->width());
}
QStringList MultiZimButton::getZimIds() const
@ -118,8 +127,8 @@ ZimItemWidget::ZimItemWidget(QString text, QIcon icon, QWidget *parent) :
textLabel->setText(text);
/* TODO: change temporary values once size is defined laters */
const QSize iconSize = QSize(24, 24);
const int iconWidth = CSS::ZimItemWidget::QLabel::lineHeight;
const QSize iconSize = QSize(iconWidth, iconWidth);
iconLabel->setPixmap(icon.pixmap(iconSize));
layout()->addWidget(iconLabel);