Skip to content
Snippets Groups Projects
Commit 8b07a179 authored by Matthias Puchner's avatar Matthias Puchner
Browse files

add group delegate

copied from Qt source and modified according to our needs
parent d67d79cb
No related branches found
No related tags found
1 merge request!245More simplifications for SampleDesigner Toolbox
...@@ -16,17 +16,96 @@ ...@@ -16,17 +16,96 @@
#include "Base/Utils/Assert.h" #include "Base/Utils/Assert.h"
#include "GUI/Views/widgetbox/SampleToolBoxGroupView.h" #include "GUI/Views/widgetbox/SampleToolBoxGroupView.h"
// shared
#include "GUI/Views/widgetbox/sheet_delegate_p.h"
#include <QAction> #include <QAction>
#include <QActionGroup> #include <QActionGroup>
#include <QApplication> #include <QApplication>
#include <QContextMenuEvent> #include <QContextMenuEvent>
#include <QHeaderView> #include <QHeaderView>
#include <QItemDelegate>
#include <QMenu> #include <QMenu>
#include <QPainter>
#include <QTreeWidgetItem> #include <QTreeWidgetItem>
namespace {
//! Draws the group title items as buttons with an arrow to show "collapsed/expanded".
//! This work is based on qdesigner_internal::SheetDelegate
class GroupTitleDelegate : public QItemDelegate {
public:
GroupTitleDelegate(QTreeView* view, QWidget* parent) : QItemDelegate(parent), m_view(view) {}
virtual void paint(QPainter* painter, const QStyleOptionViewItem& option,
const QModelIndex& index) const override
{
const QAbstractItemModel* model = index.model();
const bool isGroupTitleItem = !model->parent(index).isValid();
if (!isGroupTitleItem) {
QItemDelegate::paint(painter, option, index);
return;
}
painter->save();
QColor buttonColor(230, 230, 230);
const QBrush buttonBrush = option.palette.button();
if (!buttonBrush.gradient() && buttonBrush.texture().isNull())
buttonColor = buttonBrush.color();
QColor outlineColor = buttonColor.darker(150);
QColor highlightColor = buttonColor.lighter(130);
// Only draw topline if the previous item is expanded
const QModelIndex previousIndex = model->index(index.row() - 1, index.column());
const bool drawTopline = (index.row() > 0 && m_view->isExpanded(previousIndex));
const int highlightOffset = drawTopline ? 1 : 0;
QLinearGradient gradient(option.rect.topLeft(), option.rect.bottomLeft());
gradient.setColorAt(0, buttonColor.lighter(102));
gradient.setColorAt(1, buttonColor.darker(106));
painter->setPen(Qt::NoPen);
painter->setBrush(gradient);
painter->drawRect(option.rect);
painter->setPen(highlightColor);
painter->drawLine(option.rect.topLeft() + QPoint(0, highlightOffset),
option.rect.topRight() + QPoint(0, highlightOffset));
painter->setPen(outlineColor);
if (drawTopline)
painter->drawLine(option.rect.topLeft(), option.rect.topRight());
painter->drawLine(option.rect.bottomLeft(), option.rect.bottomRight());
painter->restore();
QStyleOption branchOption;
static const int i = 9;
const QRect r = option.rect;
branchOption.rect = QRect(r.left() + i / 2, r.top() + (r.height() - i) / 2, i, i);
branchOption.palette = option.palette;
branchOption.state = QStyle::State_Children;
if (m_view->isExpanded(index))
branchOption.state |= QStyle::State_Open;
m_view->style()->drawPrimitive(QStyle::PE_IndicatorBranch, &branchOption, painter, m_view);
// draw text
const QRect textrect =
QRect(r.left() + i * 2, r.top(), r.width() - ((5 * i) / 2), r.height());
const QString text = elidedText(option.fontMetrics, textrect.width(), Qt::ElideMiddle,
model->data(index, Qt::DisplayRole).toString());
m_view->style()->drawItemText(painter, textrect, Qt::AlignCenter, option.palette,
m_view->isEnabled(), text);
}
virtual QSize sizeHint(const QStyleOptionViewItem& opt, const QModelIndex& index) const override
{
return QItemDelegate::sizeHint(opt, index) + QSize(2, 2);
}
private:
QTreeView* m_view;
};
} // namespace
SampleToolBoxTreeWidget::SampleToolBoxTreeWidget(QWidget* parent) SampleToolBoxTreeWidget::SampleToolBoxTreeWidget(QWidget* parent)
: QTreeWidget(parent), m_iconMode(false) : QTreeWidget(parent), m_iconMode(false)
{ {
...@@ -41,7 +120,7 @@ SampleToolBoxTreeWidget::SampleToolBoxTreeWidget(QWidget* parent) ...@@ -41,7 +120,7 @@ SampleToolBoxTreeWidget::SampleToolBoxTreeWidget(QWidget* parent)
setTextElideMode(Qt::ElideMiddle); setTextElideMode(Qt::ElideMiddle);
setVerticalScrollMode(ScrollPerPixel); setVerticalScrollMode(ScrollPerPixel);
setItemDelegate(new qdesigner_internal::SheetDelegate(this, this)); setItemDelegate(new GroupTitleDelegate(this, this));
connect(this, &QTreeWidget::itemPressed, this, &SampleToolBoxTreeWidget::handleMousePress); connect(this, &QTreeWidget::itemPressed, this, &SampleToolBoxTreeWidget::handleMousePress);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment