From 0a4ca595edbc3011884ace55baee658514be9cc0 Mon Sep 17 00:00:00 2001 From: Max Paperno Date: Tue, 5 Jun 2018 03:34:42 -0400 Subject: [PATCH] [Companion][MixersListWidget] Enable multiple selection capability on Inputs and Mixes editors (closes #5029); Fix bug with custom style propagation; cosmetics. --- companion/src/modeledit/mixerslistwidget.cpp | 24 ++++++++++++-------- companion/src/modeledit/mixerslistwidget.h | 7 +++--- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/companion/src/modeledit/mixerslistwidget.cpp b/companion/src/modeledit/mixerslistwidget.cpp index fcdf4d8ec..d44bad3ce 100644 --- a/companion/src/modeledit/mixerslistwidget.cpp +++ b/companion/src/modeledit/mixerslistwidget.cpp @@ -20,6 +20,14 @@ #include "mixerslistwidget.h" +#include +#include +#include +#include +#include +#include +#include + #define GRP_IS_PARENT 0x01 #define GRP_HAS_SIBLING 0x02 #define GRP_HAS_DATA 0x04 @@ -44,14 +52,14 @@ MixersListWidget::MixersListWidget(QWidget * parent, bool expo) : setFont(defaultFont); setContextMenuPolicy(Qt::CustomContextMenu); - setSelectionMode(QAbstractItemView::SingleSelection); + setSelectionMode(QAbstractItemView::ExtendedSelection); setSelectionBehavior(QAbstractItemView::SelectRows); setDragEnabled(true); setAcceptDrops(true); setDragDropMode(QAbstractItemView::DragDrop); setDropIndicatorShown(true); setItemDelegate(new MixersDelegate(this)); // set custom paint handler - setStyle(new MixerItemViewProxyStyle(style())); // custom element style painter + setStyle(new MixerItemViewProxyStyle()); // custom element style painter itemMimeFmt = (expo ? "application/x-companion-expo-item" : "application/x-companion-mix-item"); @@ -186,8 +194,7 @@ void MixersDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option options.text.clear(); QAbstractTextDocumentLayout::PaintContext ctx; - if (options.widget) - ctx.palette = options.widget->palette(); + ctx.palette = (options.widget ? options.widget->palette() : QApplication::palette("QListWidgetItem")); QBrush brush = ((index.data(GroupIdRole).toUInt() % 2) ? ctx.palette.base() : ctx.palette.alternateBase()); options.backgroundBrush = brush; @@ -206,17 +213,16 @@ void MixersDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option QStyle * style = (options.widget ? options.widget->style() : QApplication::style()); style->drawControl(QStyle::CE_ItemViewItem, &options, painter, options.widget); - QRect textRect = style->subElementRect(QStyle::SE_ItemViewItemText, &options); + QRect textRect = style->subElementRect(QStyle::SE_ItemViewItemText, &options, options.widget); #ifdef Q_OS_LINUX // Workaround for buggy Linux native styles (https://github.com/opentx/opentx/issues/5633) - if (options.widget && textRect.width() < options.widget->geometry().width() * 0.75f) + if (options.widget && textRect.width() < options.widget->geometry().width() / 2) textRect.setWidth(options.widget->geometry().width()); #endif - QRectF clipRect = textRect.translated(-textRect.topLeft()); - ctx.clip = clipRect; + ctx.clip = textRect.translated(-textRect.topLeft()); painter->save(); painter->translate(textRect.topLeft()); - painter->setClipRect(clipRect); + painter->setClipRect(ctx.clip); doc.documentLayout()->draw(painter, ctx); painter->restore(); } diff --git a/companion/src/modeledit/mixerslistwidget.h b/companion/src/modeledit/mixerslistwidget.h index 83d948bf5..cbdb800cc 100644 --- a/companion/src/modeledit/mixerslistwidget.h +++ b/companion/src/modeledit/mixerslistwidget.h @@ -21,10 +21,11 @@ #ifndef _MIXERSLISTWIDGET_H_ #define _MIXERSLISTWIDGET_H_ -#include +#include #include #include #include +#include class MixersListWidget : public QListWidget { @@ -78,9 +79,9 @@ class MixersDelegate : public QStyledItemDelegate class MixerItemViewProxyStyle: public QProxyStyle { public: - explicit MixerItemViewProxyStyle(QStyle * style = 0) : QProxyStyle(style) {} + explicit MixerItemViewProxyStyle(QStyle * style = nullptr) : QProxyStyle(style) {} - void drawPrimitive(PrimitiveElement element, const QStyleOption * option, QPainter * painter, const QWidget * widget = 0) const; + virtual void drawPrimitive(PrimitiveElement element, const QStyleOption * option, QPainter * painter, const QWidget * widget = nullptr) const override; }; #endif // _MIXERSLISTWIDGET_H_