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; 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:pressed,
TopWidget QToolButton::hover { TopWidget QToolButton::hover {
border: 1px solid #3366CC; border: 1px solid #3366CC;

View File

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

View File

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