From de87a105b0cbcc73440a2613af6446d0e8819fb6 Mon Sep 17 00:00:00 2001 From: Mikaƫl Capelle Date: Tue, 29 Dec 2020 14:24:33 +0100 Subject: Fix indentation and drop indicator. --- src/modlistview.cpp | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'src/modlistview.cpp') diff --git a/src/modlistview.cpp b/src/modlistview.cpp index bfc8e385..593d3772 100644 --- a/src/modlistview.cpp +++ b/src/modlistview.cpp @@ -2,6 +2,49 @@ #include #include #include +#include + +class ModListProxyStyle : public QProxyStyle { +public: + + using QProxyStyle::QProxyStyle; + + void drawPrimitive(PrimitiveElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget) const + { + if (element == QStyle::PE_IndicatorItemViewItemDrop) + { + QStyleOption opt(*option); + opt.rect.setLeft(20); + if (auto* view = qobject_cast(widget)) { + opt.rect.setRight(widget->width()); + } + QProxyStyle::drawPrimitive(element, &opt, painter, widget); + } + else { + QProxyStyle::drawPrimitive(element, option, painter, widget); + } + } +}; + +class ModListStyledItemDelegated : public QStyledItemDelegate +{ +public: + using QStyledItemDelegate::QStyledItemDelegate; + void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override { + QStyleOptionViewItem opt(option); + if (index.column() == 0) + opt.rect.adjust(opt.rect.height(), 0, 0, 0); + QStyledItemDelegate::paint(painter, opt, index); + if (index.column() == 0) { + QStyleOptionViewItem branch; + branch.rect = QRect(0, opt.rect.y(), opt.rect.height(), opt.rect.height()); + branch.state = option.state; + const QWidget* widget = option.widget; + QStyle* style = widget ? widget->style() : QApplication::style(); + style->drawPrimitive(QStyle::PE_IndicatorBranch, &branch, painter, widget); + } + } +}; ModListView::ModListView(QWidget* parent) : QTreeView(parent) @@ -10,6 +53,10 @@ ModListView::ModListView(QWidget* parent) setVerticalScrollBar(m_scrollbar); MOBase::setCustomizableColumns(this); setAutoExpandDelay(1000); + + setIndentation(0); + setStyle(new ModListProxyStyle(style())); + setItemDelegate(new ModListStyledItemDelegated(this)); } void ModListView::setModel(QAbstractItemModel* model) -- cgit v1.3.1