Wireshark 5.1.0
The Wireshark network protocol analyzer
Loading...
Searching...
No Matches
theme_preview_pick.h
Go to the documentation of this file.
1
9
10#ifndef THEME_PREVIEW_PICK_H
11#define THEME_PREVIEW_PICK_H
12
14
15#include <QColor>
16#include <QCoreApplication>
17#include <QFont>
18#include <QHash>
19#include <QImage>
20#include <QList>
21#include <QPalette>
22#include <QPoint>
23#include <QSize>
24#include <QString>
25
26#include <functional>
27
28class QMouseEvent;
29class QPainter;
30class QRect;
31class QWidget;
32
53{
54 Q_DECLARE_TR_FUNCTIONS(ThemePreviewPick)
55public:
57 enum class Role { Text, Background, Border };
58
60 struct Layer {
61 ThemeManager::ThemeToken token = ThemeManager::NoRole;
62 Role role = Role::Background;
63 bool link = false;
64 };
65
66 using TokenMap = QHash<ThemeManager::ThemeToken, ThemeColorPair>;
67
72 static constexpr int kLinkKey = 0x3fff;
73
79 static QColor keyColor(int key);
80
87 static Layer decode(QRgb rgb);
88
90 static TokenMap keyTokens();
91
97 static QPalette keyPalette();
98
100 static QFont keyFont(const QFont &font);
101
108 static QImage keyCanvas(const QSize &size);
109
119 static void paintKeyGlyph(QPainter *painter, const QString &svg_path, const QRect &rect,
120 ThemeManager::ThemeToken token);
121
132 static Layer layerAt(const QImage &keys, const QPoint &pos, int text_height);
133
141 static QList<Layer> layersAt(const QImage &keys, const QPoint &pos, int text_height);
142
144 static QString roleName(const Layer &layer);
145
155 static void saveImage(QWidget *source, const QString &suggested_name,
156 const std::function<void()> &dialog_closed);
157};
158
171{
172public:
174 using Render = std::function<QImage()>;
176 using TextHeight = std::function<int()>;
177
187 using HoverChanged = std::function<void(const ThemePreviewPick::Layer &layer, const QPoint &global_pos)>;
188
194 ThemePreviewPicker(QWidget *owner, Render render, TextHeight text_height);
195
200 void setEnabled(bool enabled);
201
203 bool isEnabled() const { return enabled_; }
204
209 void invalidate();
210
212 void setHoverChanged(HoverChanged hover_changed);
213
219 void resetHover();
220
222 ThemePreviewPick::Layer layerAt(const QPoint &pos);
223
225 QList<ThemePreviewPick::Layer> layersAt(const QPoint &pos);
226
234 bool hover(const QPoint &pos);
235
237 bool isPickClick(const QMouseEvent *event) const;
238
239private:
241 const QImage &keyImage();
242
243 QWidget *owner_;
244 Render render_;
245 TextHeight text_height_;
246 bool enabled_ = false;
247 QImage image_;
248 bool hover_token_ = false; // The last move was over a color
249 HoverChanged hover_changed_;
250
251 Q_DISABLE_COPY_MOVE(ThemePreviewPicker)
252};
253
254#endif // THEME_PREVIEW_PICK_H
Definition theme_preview_pick.h:53
static void paintKeyGlyph(QPainter *painter, const QString &svg_path, const QRect &rect, ThemeManager::ThemeToken token)
Definition theme_preview_pick.cpp:422
static QString roleName(const Layer &layer)
Definition theme_preview_pick.cpp:498
static TokenMap keyTokens()
Definition theme_preview_pick.cpp:377
static Layer decode(QRgb rgb)
Definition theme_preview_pick.cpp:359
static QFont keyFont(const QFont &font)
Definition theme_preview_pick.cpp:408
Role
Definition theme_preview_pick.h:57
static QPalette keyPalette()
Definition theme_preview_pick.cpp:391
static QColor keyColor(int key)
Definition theme_preview_pick.cpp:353
static constexpr int kLinkKey
Definition theme_preview_pick.h:72
static QList< Layer > layersAt(const QImage &keys, const QPoint &pos, int text_height)
Definition theme_preview_pick.cpp:448
static void saveImage(QWidget *source, const QString &suggested_name, const std::function< void()> &dialog_closed)
Definition theme_preview_pick.cpp:513
static QImage keyCanvas(const QSize &size)
Definition theme_preview_pick.cpp:415
static Layer layerAt(const QImage &keys, const QPoint &pos, int text_height)
Definition theme_preview_pick.cpp:436
Definition theme_preview_pick.h:171
bool isEnabled() const
Definition theme_preview_pick.h:203
ThemePreviewPick::Layer layerAt(const QPoint &pos)
Definition theme_preview_pick.cpp:587
std::function< int()> TextHeight
Definition theme_preview_pick.h:176
void setEnabled(bool enabled)
Definition theme_preview_pick.cpp:548
void resetHover()
Definition theme_preview_pick.cpp:572
std::function< QImage()> Render
Definition theme_preview_pick.h:174
QList< ThemePreviewPick::Layer > layersAt(const QPoint &pos)
Definition theme_preview_pick.cpp:597
bool hover(const QPoint &pos)
Definition theme_preview_pick.cpp:605
std::function< void(const ThemePreviewPick::Layer &layer, const QPoint &global_pos)> HoverChanged
Definition theme_preview_pick.h:187
void setHoverChanged(HoverChanged hover_changed)
Definition theme_preview_pick.cpp:567
void invalidate()
Definition theme_preview_pick.cpp:561
ThemePreviewPicker(QWidget *owner, Render render, TextHeight text_height)
Definition theme_preview_pick.cpp:541
bool isPickClick(const QMouseEvent *event) const
Definition theme_preview_pick.cpp:625
Definition theme_preview_pick.h:60
bool link
Painted with QPalette::Link, which follows token.
Definition theme_preview_pick.h:63