Wireshark 5.1.0
The Wireshark network protocol analyzer
Loading...
Searching...
No Matches
pinned_overlay_view.h
Go to the documentation of this file.
1
12
13#ifndef PINNED_OVERLAY_VIEW_H
14#define PINNED_OVERLAY_VIEW_H
15
16#include <QTreeView>
17#include <QHeaderView>
18#include <QHelpEvent>
19#include <QStyledItemDelegate>
20#include <QWidget>
21#include <QPalette>
22
23#include <functional>
24
33
41class FixedRowHeightDelegate : public QStyledItemDelegate
42{
43public:
44 FixedRowHeightDelegate(QAbstractItemDelegate *inner, std::function<int()> row_height, QObject *parent) :
45 QStyledItemDelegate(parent), inner_(inner), row_height_(std::move(row_height)) {}
46
47 void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
48 {
49 if (inner_) {
50 inner_->paint(painter, option, index);
51 } else {
52 QStyledItemDelegate::paint(painter, option, index);
53 }
54 }
55
56 QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override
57 {
58 QSize size = inner_ ? inner_->sizeHint(option, index) : QStyledItemDelegate::sizeHint(option, index);
59 int height = row_height_ ? row_height_() : 0;
60 if (height > 0) {
61 size.setHeight(height);
62 }
63 return size;
64 }
65
66 bool helpEvent(QHelpEvent *event, QAbstractItemView *view, const QStyleOptionViewItem &option, const QModelIndex &index) override
67 {
68 return inner_ ? inner_->helpEvent(event, view, option, index)
69 : QStyledItemDelegate::helpEvent(event, view, option, index);
70 }
71
72private:
73 QAbstractItemDelegate *inner_;
74 std::function<int()> row_height_;
75};
76
86inline void applyCommonTreeViewSetup(QTreeView *view)
87{
88 view->setItemsExpandable(false);
89 view->setRootIsDecorated(false);
90 view->setUniformRowHeights(true);
91 view->setFocusPolicy(Qt::NoFocus);
92 view->setMouseTracking(true);
93 view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
94 view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
95 view->setFrameShape(QFrame::NoFrame);
96 view->setVisible(false);
97}
98
110inline QWidget *createBoundaryDivider(QTreeView *view)
111{
112 QWidget *divider = new QWidget(view);
113 divider->setAutoFillBackground(true);
114 QPalette divider_palette = divider->palette();
115 divider_palette.setColor(QPalette::Window, view->palette().color(QPalette::Mid));
116 divider->setPalette(divider_palette);
117 return divider;
118}
119
128inline void repositionBoundaryDivider(QWidget *divider, QTreeView *view)
129{
130 const int divider_width = 2;
131 divider->setGeometry(view->width() - divider_width, 0, divider_width, view->height());
132 divider->raise();
133}
134
143inline void mirrorSectionWidth(QTreeView *view, int column, int width)
144{
145 if (column < 0 || !view->header() || column >= view->header()->count()) {
146 return;
147 }
148 view->header()->resizeSection(column, width);
149}
150
151} // namespace PinnedOverlayView
152
153#endif // PINNED_OVERLAY_VIEW_H
Setup shared by PinnedColumnView and PinnedRowView, the two QTreeView-based overlay panes used to kee...
Definition pinned_overlay_view.h:32
void repositionBoundaryDivider(QWidget *divider, QTreeView *view)
Repositions a boundary divider widget (see createBoundaryDivider()) to hug the view's right edge,...
Definition pinned_overlay_view.h:128
void mirrorSectionWidth(QTreeView *view, int column, int width)
Mirrors a single section's width from the primary view's header onto this overlay view's own header,...
Definition pinned_overlay_view.h:143
void applyCommonTreeViewSetup(QTreeView *view)
Applies the QTreeView configuration common to every pinned overlay pane: no expand arrows,...
Definition pinned_overlay_view.h:86
QWidget * createBoundaryDivider(QTreeView *view)
Constructs the thin child widget marking the boundary between frozen and non-frozen columns,...
Definition pinned_overlay_view.h:110