mirror of
https://github.com/kiwix/kiwix-desktop.git
synced 2025-09-24 04:32:15 -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::UserRole, bookId);
|
||||||
item->setData(Qt::DisplayRole, bookTitle);
|
item->setData(Qt::DisplayRole, bookTitle);
|
||||||
|
|
||||||
const auto radioBt = new QRadioButton(bookTitle);
|
|
||||||
radioBt->setIcon(zimIcon);
|
|
||||||
mp_radioButtonGroup->addButton(radioBt);
|
|
||||||
|
|
||||||
mp_buttonList->addItem(item);
|
mp_buttonList->addItem(item);
|
||||||
mp_buttonList->setItemWidget(item, radioBt);
|
setItemZimWidget(item, bookTitle, zimIcon);
|
||||||
}
|
}
|
||||||
|
|
||||||
mp_buttonList->sortItems();
|
mp_buttonList->sortItems();
|
||||||
@ -58,9 +54,8 @@ void MultiZimButton::updateDisplay()
|
|||||||
|
|
||||||
setDisabled(mp_buttonList->model()->rowCount() == 0);
|
setDisabled(mp_buttonList->model()->rowCount() == 0);
|
||||||
|
|
||||||
const auto firstWidget = mp_buttonList->itemWidget(mp_buttonList->item(0));
|
if (const auto firstWidget = getZimWidget(0))
|
||||||
if (const auto firstBt = qobject_cast<QRadioButton *>(firstWidget))
|
firstWidget->getRadioButton()->setChecked(true);
|
||||||
firstBt->setChecked(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList MultiZimButton::getZimIds() const
|
QStringList MultiZimButton::getZimIds() const
|
||||||
@ -68,10 +63,44 @@ QStringList MultiZimButton::getZimIds() const
|
|||||||
QStringList idList;
|
QStringList idList;
|
||||||
for (int row = 0; row < mp_buttonList->count(); row++)
|
for (int row = 0; row < mp_buttonList->count(); row++)
|
||||||
{
|
{
|
||||||
const auto listItem = mp_buttonList->item(row);
|
const auto widget = getZimWidget(row);
|
||||||
const auto radioBt = qobject_cast<QRadioButton *>(mp_buttonList->itemWidget(listItem));
|
if (widget && widget->getRadioButton()->isChecked())
|
||||||
if (radioBt && radioBt->isChecked())
|
idList.append(mp_buttonList->item(row)->data(Qt::UserRole).toString());
|
||||||
idList.append(listItem->data(Qt::UserRole).toString());
|
|
||||||
}
|
}
|
||||||
return idList;
|
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 QListWidget;
|
||||||
class QButtonGroup;
|
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 {
|
class MultiZimButton : public QToolButton {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@ -19,6 +36,9 @@ public slots:
|
|||||||
private:
|
private:
|
||||||
QListWidget* mp_buttonList;
|
QListWidget* mp_buttonList;
|
||||||
QButtonGroup* mp_radioButtonGroup;
|
QButtonGroup* mp_radioButtonGroup;
|
||||||
|
|
||||||
|
ZimItemWidget* getZimWidget(int row) const;
|
||||||
|
void setItemZimWidget(QListWidgetItem* item, const QString& title, const QIcon& icon);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MULTIZIMBUTTON_H
|
#endif // MULTIZIMBUTTON_H
|
||||||
|
Loading…
x
Reference in New Issue
Block a user