diff --git a/resources/css/style.css b/resources/css/style.css index e3b08c8..f334bb2 100644 --- a/resources/css/style.css +++ b/resources/css/style.css @@ -121,6 +121,32 @@ ZimItemWidget QRadioButton::indicator:checked { image: url(:/icons/tick.svg); } +#selectAllButton { + background-color: white; + font-size: 16px; + line-height: 24px; + font-weight: 500; + padding: 5px 10px 10px; + outline: none; +} + +#selectAllButton::indicator { + width: 24px; + height: 24px; +} + +#selectAllButton::indicator:focus { + background-color: #D9E9FF; +} + +#selectAllButton::indicator:unchecked { + image: url(:/icons/checkbox.svg); +} + +#selectAllButton::indicator:checked { + image: url(:/icons/checkbox-active.svg); +} + TopWidget QToolButton:pressed, TopWidget QToolButton::hover { border: 1px solid #3366CC; diff --git a/resources/i18n/en.json b/resources/i18n/en.json index b884f12..5fd9359 100644 --- a/resources/i18n/en.json +++ b/resources/i18n/en.json @@ -173,5 +173,6 @@ "scroll-next-tab": "Scroll to next tab", "scroll-previous-tab": "Scroll to previous tab", "kiwix-search": "Kiwix search", - "search-options": "Search Options" + "search-options": "Search Options", + "select-all": "Select all" } diff --git a/resources/i18n/qqq.json b/resources/i18n/qqq.json index 2fdc8c7..e9ea37b 100644 --- a/resources/i18n/qqq.json +++ b/resources/i18n/qqq.json @@ -181,5 +181,6 @@ "scroll-next-tab": "Represents the action of scrolling to the next tab of the current tab which toward the end of the tab bar.", "scroll-previous-tab": "Represents the action of scrolling to the previous tab of the current tab which toward the start of the tab bar.", "kiwix-search": "Title text for a list of search results, which notes to the user those are from Kiwix's Search Engine", - "search-options": "The term for a collection of additional search filtering options to help users narrow down search results." + "search-options": "The term for a collection of additional search filtering options to help users narrow down search results.", + "select-all": "Represents the action of selecting all items in a collection." } diff --git a/src/multizimbutton.cpp b/src/multizimbutton.cpp index 25b5379..c991866 100644 --- a/src/multizimbutton.cpp +++ b/src/multizimbutton.cpp @@ -12,16 +12,23 @@ QString getElidedText(const QFont& font, int length, const QString& text); MultiZimButton::MultiZimButton(QWidget *parent) : QToolButton(parent), mp_buttonList(new QListWidget), - mp_radioButtonGroup(new QButtonGroup(this)) + mp_radioButtonGroup(new QButtonGroup(this)), + mp_selectAllButton(new QCheckBox(gt("select-all"), this)) { setMenu(new QMenu(this)); setPopupMode(QToolButton::InstantPopup); setDefaultAction(KiwixApp::instance()->getAction(KiwixApp::OpenMultiZimAction)); connect(this, &QToolButton::triggered, this, &MultiZimButton::showMenu); - const auto popupAction = new QWidgetAction(menu()); - popupAction->setDefaultWidget(mp_buttonList); - menu()->addAction(popupAction); + mp_selectAllButton->setObjectName("selectAllButton"); + const auto align = KiwixApp::isRightToLeft() ? Qt::LeftToRight : Qt::RightToLeft; + mp_selectAllButton->setLayoutDirection(align); + + const auto buttonListAction = new QWidgetAction(menu()); + const auto selectAllAction = new QWidgetAction(menu()); + buttonListAction->setDefaultWidget(mp_buttonList); + selectAllAction->setDefaultWidget(mp_selectAllButton); + menu()->addActions({buttonListAction, selectAllAction}); connect(mp_buttonList, &QListWidget::currentRowChanged, this, [=](int row){ if (const auto widget = getZimWidget(row)) diff --git a/src/multizimbutton.h b/src/multizimbutton.h index 0f20ffe..7444ba3 100644 --- a/src/multizimbutton.h +++ b/src/multizimbutton.h @@ -8,6 +8,7 @@ class QButtonGroup; class QListWidgetItem; class QRadioButton; class QLabel; +class QCheckBox; class ZimItemWidget : public QWidget { Q_OBJECT @@ -36,6 +37,7 @@ public slots: private: QListWidget* mp_buttonList; QButtonGroup* mp_radioButtonGroup; + QCheckBox* mp_selectAllButton; ZimItemWidget* getZimWidget(int row) const; void setItemZimWidget(QListWidgetItem* item, const QString& title, const QIcon& icon);