diff options
Diffstat (limited to 'src/modlistview.cpp')
| -rw-r--r-- | src/modlistview.cpp | 47 |
1 files changed, 47 insertions, 0 deletions
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 <widgetutility.h>
#include <QUrl>
#include <QMimeData>
+#include <QProxyStyle>
+
+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<const QTreeView*>(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)
|
