mirror of
https://github.com/kiwix/kiwix-desktop.git
synced 2025-09-23 03:58:56 -04:00
Introduce ZimItemWidget to Delegate Item Display
Decouple complex item creation from button. Used later for styling.
This commit is contained in:
parent
e9c7421fc1
commit
e489712787
@ -42,12 +42,8 @@ void MultiZimButton::updateDisplay()
|
||||
item->setData(Qt::UserRole, bookId);
|
||||
item->setData(Qt::DisplayRole, bookTitle);
|
||||
|
||||
const auto radioBt = new QRadioButton(bookTitle);
|
||||
radioBt->setIcon(zimIcon);
|
||||
mp_radioButtonGroup->addButton(radioBt);
|
||||
|
||||
mp_buttonList->addItem(item);
|
||||
mp_buttonList->setItemWidget(item, radioBt);
|
||||
setItemZimWidget(item, bookTitle, zimIcon);
|
||||
}
|
||||
|
||||
mp_buttonList->sortItems();
|
||||
@ -58,9 +54,8 @@ void MultiZimButton::updateDisplay()
|
||||
|
||||
setDisabled(mp_buttonList->model()->rowCount() == 0);
|
||||
|
||||
const auto firstWidget = mp_buttonList->itemWidget(mp_buttonList->item(0));
|
||||
if (const auto firstBt = qobject_cast<QRadioButton *>(firstWidget))
|
||||
firstBt->setChecked(true);
|
||||
if (const auto firstWidget = getZimWidget(0))
|
||||
firstWidget->getRadioButton()->setChecked(true);
|
||||
}
|
||||
|
||||
QStringList MultiZimButton::getZimIds() const
|
||||
@ -68,10 +63,44 @@ QStringList MultiZimButton::getZimIds() const
|
||||
QStringList idList;
|
||||
for (int row = 0; row < mp_buttonList->count(); row++)
|
||||
{
|
||||
const auto listItem = mp_buttonList->item(row);
|
||||
const auto radioBt = qobject_cast<QRadioButton *>(mp_buttonList->itemWidget(listItem));
|
||||
if (radioBt && radioBt->isChecked())
|
||||
idList.append(listItem->data(Qt::UserRole).toString());
|
||||
const auto widget = getZimWidget(row);
|
||||
if (widget && widget->getRadioButton()->isChecked())
|
||||
idList.append(mp_buttonList->item(row)->data(Qt::UserRole).toString());
|
||||
}
|
||||
return idList;
|
||||
}
|
||||
|
||||
ZimItemWidget *MultiZimButton::getZimWidget(int row) const
|
||||
{
|
||||
const auto widget = mp_buttonList->itemWidget(mp_buttonList->item(row));
|
||||
return qobject_cast<ZimItemWidget *>(widget);
|
||||
}
|
||||
|
||||
void MultiZimButton::setItemZimWidget(QListWidgetItem *item,
|
||||
const QString &title, const QIcon &icon)
|
||||
{
|
||||
const auto zimWidget = new ZimItemWidget(title, icon);
|
||||
mp_radioButtonGroup->addButton(zimWidget->getRadioButton());
|
||||
mp_buttonList->setItemWidget(item, zimWidget);
|
||||
}
|
||||
|
||||
ZimItemWidget::ZimItemWidget(QString text, QIcon icon, QWidget *parent) :
|
||||
QWidget(parent),
|
||||
textLabel(new QLabel(this)),
|
||||
iconLabel(new QLabel(this)),
|
||||
radioBt(new QRadioButton(this))
|
||||
{
|
||||
setLayout(new QHBoxLayout);
|
||||
layout()->setSpacing(0);
|
||||
layout()->setContentsMargins(0, 0, 0, 0);
|
||||
|
||||
textLabel->setText(text);
|
||||
|
||||
/* TODO: change temporary values once size is defined laters */
|
||||
const QSize iconSize = QSize(24, 24);
|
||||
iconLabel->setPixmap(icon.pixmap(iconSize));
|
||||
|
||||
layout()->addWidget(iconLabel);
|
||||
layout()->addWidget(textLabel);
|
||||
layout()->addWidget(radioBt);
|
||||
}
|
||||
|
@ -5,6 +5,23 @@
|
||||
|
||||
class QListWidget;
|
||||
class QButtonGroup;
|
||||
class QListWidgetItem;
|
||||
class QRadioButton;
|
||||
class QLabel;
|
||||
|
||||
class ZimItemWidget : public QWidget {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
ZimItemWidget(QString text, QIcon icon, QWidget *parent = nullptr);
|
||||
|
||||
QRadioButton* getRadioButton() const { return radioBt; }
|
||||
|
||||
private:
|
||||
QLabel* textLabel;
|
||||
QLabel* iconLabel;
|
||||
QRadioButton* radioBt;
|
||||
};
|
||||
|
||||
class MultiZimButton : public QToolButton {
|
||||
Q_OBJECT
|
||||
@ -19,6 +36,9 @@ public slots:
|
||||
private:
|
||||
QListWidget* mp_buttonList;
|
||||
QButtonGroup* mp_radioButtonGroup;
|
||||
|
||||
ZimItemWidget* getZimWidget(int row) const;
|
||||
void setItemZimWidget(QListWidgetItem* item, const QString& title, const QIcon& icon);
|
||||
};
|
||||
|
||||
#endif // MULTIZIMBUTTON_H
|
||||
|
Loading…
x
Reference in New Issue
Block a user