Replace CheckBox with Arrow in transferlistfilterswidget.cpp

This commit is contained in:
Prince Gupta 2019-05-22 21:06:39 +05:30
parent 3d6dccc689
commit e283026a3c

View File

@ -30,10 +30,13 @@
#include <QCheckBox> #include <QCheckBox>
#include <QDebug> #include <QDebug>
#include <QGuiApplication>
#include <QIcon> #include <QIcon>
#include <QListWidgetItem> #include <QListWidgetItem>
#include <QMenu> #include <QMenu>
#include <QPainter>
#include <QScrollArea> #include <QScrollArea>
#include <QStyleOptionButton>
#include <QUrl> #include <QUrl>
#include <QVBoxLayout> #include <QVBoxLayout>
@ -66,6 +69,30 @@ namespace
scheme = "http"; scheme = "http";
return scheme; return scheme;
} }
class ArrowCheckBox : public QCheckBox
{
public:
using QCheckBox::QCheckBox;
private:
void paintEvent(QPaintEvent *) override
{
QPainter painter(this);
QStyleOption indicatorOption;
indicatorOption.initFrom(this);
indicatorOption.rect = style()->subElementRect(QStyle::SE_CheckBoxIndicator, &indicatorOption, this);
style()->drawPrimitive((isChecked() ? QStyle::PE_IndicatorArrowDown
: (QGuiApplication::isLeftToRight() ? QStyle::PE_IndicatorArrowRight : QStyle::PE_IndicatorArrowLeft))
, &indicatorOption, &painter, this);
QStyleOptionButton labelOption;
initStyleOption(&labelOption);
labelOption.rect = style()->subElementRect(QStyle::SE_CheckBoxContents, &labelOption, this);
style()->drawControl(QStyle::CE_CheckBoxLabel, &labelOption, &painter, this);
}
};
} }
BaseFilterWidget::BaseFilterWidget(QWidget *parent, TransferListWidget *transferList) BaseFilterWidget::BaseFilterWidget(QWidget *parent, TransferListWidget *transferList)
@ -575,7 +602,7 @@ TransferListFiltersWidget::TransferListFiltersWidget(QWidget *parent, TransferLi
vLayout->addWidget(scroll); vLayout->addWidget(scroll);
setLayout(vLayout); setLayout(vLayout);
QCheckBox *statusLabel = new QCheckBox(tr("Status"), this); QCheckBox *statusLabel = new ArrowCheckBox(tr("Status"), this);
statusLabel->setChecked(pref->getStatusFilterState()); statusLabel->setChecked(pref->getStatusFilterState());
statusLabel->setFont(font); statusLabel->setFont(font);
frameLayout->addWidget(statusLabel); frameLayout->addWidget(statusLabel);
@ -583,7 +610,7 @@ TransferListFiltersWidget::TransferListFiltersWidget(QWidget *parent, TransferLi
auto *statusFilters = new StatusFilterWidget(this, transferList); auto *statusFilters = new StatusFilterWidget(this, transferList);
frameLayout->addWidget(statusFilters); frameLayout->addWidget(statusFilters);
QCheckBox *categoryLabel = new QCheckBox(tr("Categories"), this); QCheckBox *categoryLabel = new ArrowCheckBox(tr("Categories"), this);
categoryLabel->setChecked(pref->getCategoryFilterState()); categoryLabel->setChecked(pref->getCategoryFilterState());
categoryLabel->setFont(font); categoryLabel->setFont(font);
connect(categoryLabel, &QCheckBox::toggled, this connect(categoryLabel, &QCheckBox::toggled, this
@ -602,7 +629,7 @@ TransferListFiltersWidget::TransferListFiltersWidget(QWidget *parent, TransferLi
toggleCategoryFilter(pref->getCategoryFilterState()); toggleCategoryFilter(pref->getCategoryFilterState());
frameLayout->addWidget(m_categoryFilterWidget); frameLayout->addWidget(m_categoryFilterWidget);
QCheckBox *tagsLabel = new QCheckBox(tr("Tags"), this); QCheckBox *tagsLabel = new ArrowCheckBox(tr("Tags"), this);
tagsLabel->setChecked(pref->getTagFilterState()); tagsLabel->setChecked(pref->getTagFilterState());
tagsLabel->setFont(font); tagsLabel->setFont(font);
connect(tagsLabel, &QCheckBox::toggled, this, &TransferListFiltersWidget::onTagFilterStateChanged); connect(tagsLabel, &QCheckBox::toggled, this, &TransferListFiltersWidget::onTagFilterStateChanged);
@ -620,7 +647,7 @@ TransferListFiltersWidget::TransferListFiltersWidget(QWidget *parent, TransferLi
toggleTagFilter(pref->getTagFilterState()); toggleTagFilter(pref->getTagFilterState());
frameLayout->addWidget(m_tagFilterWidget); frameLayout->addWidget(m_tagFilterWidget);
QCheckBox *trackerLabel = new QCheckBox(tr("Trackers"), this); QCheckBox *trackerLabel = new ArrowCheckBox(tr("Trackers"), this);
trackerLabel->setChecked(pref->getTrackerFilterState()); trackerLabel->setChecked(pref->getTrackerFilterState());
trackerLabel->setFont(font); trackerLabel->setFont(font);
frameLayout->addWidget(trackerLabel); frameLayout->addWidget(trackerLabel);