Bitcoin ABC 0.31.6
P2P Digital Currency
guiutil.h
Go to the documentation of this file.
1// Copyright (c) 2011-2016 The Bitcoin Core developers
2// Distributed under the MIT software license, see the accompanying
3// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5#ifndef BITCOIN_QT_GUIUTIL_H
6#define BITCOIN_QT_GUIUTIL_H
7
8#include <consensus/amount.h>
9#include <netaddress.h>
10#include <util/fs.h>
11
12#include <QEvent>
13#include <QHeaderView>
14#include <QItemDelegate>
15#include <QLabel>
16#include <QMessageBox>
17#include <QObject>
18#include <QProgressBar>
19#include <QString>
20#include <QTableView>
21
22#include <chrono>
23
26class CChainParams;
27class Config;
28
29namespace interfaces {
30class Node;
31}
32
33QT_BEGIN_NAMESPACE
34class QAbstractItemView;
35class QAction;
36class QDateTime;
37class QDialog;
38class QFont;
39class QLineEdit;
40class QMenu;
41class QPoint;
42class QProgressDialog;
43class QUrl;
44class QWidget;
45QT_END_NAMESPACE
46
50namespace GUIUtil {
51
52// Create human-readable string from date
53QString dateTimeStr(const QDateTime &datetime);
54QString dateTimeStr(qint64 nTime);
55
56// Return a monospace font
57QFont fixedPitchFont();
58
59// Generate an invalid, but convincing address.
60std::string DummyAddress(const CChainParams &params);
61
62// Convert any address into cashaddr
63QString convertToCashAddr(const CChainParams &params, const QString &addr);
64
65// Set up widget for address
66void setupAddressWidget(QValidatedLineEdit *widget, QWidget *parent);
67
68// Parse "bitcoincash:" URI into recipient object, return true on successful
69// parsing
70bool parseBitcoinURI(const QString &scheme, const QUrl &uri,
72bool parseBitcoinURI(const QString &scheme, QString uri,
74QString formatBitcoinURI(const SendCoinsRecipient &info);
75QString formatBitcoinURI(const CChainParams &params,
76 const SendCoinsRecipient &info);
77
78// Returns true if given address+amount meets "dust" definition
79bool isDust(interfaces::Node &node, const QString &address, const Amount amount,
80 const CChainParams &chainParams);
81
82// HTML escaping for rich text controls
83QString HtmlEscape(const QString &str, bool fMultiLine = false);
84QString HtmlEscape(const std::string &str, bool fMultiLine = false);
85
94void copyEntryData(const QAbstractItemView *view, int column,
95 int role = Qt::EditRole);
96
104QList<QModelIndex> getEntryData(const QAbstractItemView *view, int column);
105
113bool hasEntryData(const QAbstractItemView *view, int column, int role);
114
115void setClipboard(const QString &str);
116
121
130QString ExtractFirstSuffixFromFilter(const QString &filter);
131
146QString getSaveFileName(QWidget *parent, const QString &caption,
147 const QString &dir, const QString &filter,
148 QString *selectedSuffixOut);
149
162QString getOpenFileName(QWidget *parent, const QString &caption,
163 const QString &dir, const QString &filter,
164 QString *selectedSuffixOut);
165
174
175// Determine whether a widget is hidden behind other windows
176bool isObscured(QWidget *w);
177
178// Activate, show and raise the widget
179void bringToFront(QWidget *w);
180
181// Set shortcut to close window
182void handleCloseWindowShortcut(QWidget *w);
183
184// Open debug.log
185void openDebugLogfile();
186
187// Open the config file
188bool openBitcoinConf();
189
190// Split a QString using given separator, skipping the empty parts
191QStringList splitSkipEmptyParts(const QString &s, const QString &separator);
192
198class ToolTipToRichTextFilter : public QObject {
199 Q_OBJECT
200
201public:
202 explicit ToolTipToRichTextFilter(int size_threshold, QObject *parent = 0);
203
204protected:
205 bool eventFilter(QObject *obj, QEvent *evt) override;
206
207private:
209};
210
218class LabelOutOfFocusEventFilter : public QObject {
219 Q_OBJECT
220
221public:
222 explicit LabelOutOfFocusEventFilter(QObject *parent);
223 bool eventFilter(QObject *watched, QEvent *event) override;
224};
225
238class TableViewLastColumnResizingFixer : public QObject {
239 Q_OBJECT
240
241public:
242 TableViewLastColumnResizingFixer(QTableView *table, int lastColMinimumWidth,
243 int allColsMinimumWidth, QObject *parent);
244 void stretchColumnWidth(int column);
245
246private:
247 QTableView *tableView;
253
255 int getAvailableWidthForColumn(int column);
256 int getColumnsWidth();
259 void setViewHeaderResizeMode(int logicalIndex,
260 QHeaderView::ResizeMode resizeMode);
261 void resizeColumn(int nColumnIndex, int width);
262
263private Q_SLOTS:
264 void on_sectionResized(int logicalIndex, int oldSize, int newSize);
266};
267
269bool SetStartOnSystemStartup(bool fAutoStart);
270
272fs::path qstringToBoostPath(const QString &path);
273
275QString boostPathToQString(const fs::path &path);
276
278QString NetworkToQString(Network net);
279
281QString formatDurationStr(std::chrono::seconds dur);
282
284QString formatServicesStr(quint64 mask);
285
290QString formatPingTime(std::chrono::microseconds ping_time);
291
293QString formatTimeOffset(int64_t nTimeOffset);
294
295QString formatNiceTimeOffset(qint64 secs);
296
297QString formatBytes(uint64_t bytes);
298
299qreal calculateIdealFontSize(int width, const QString &text, QFont font,
300 qreal minPointSize = 4, qreal startPointSize = 14);
301
302class ClickableLabel : public QLabel {
303 Q_OBJECT
304
305public:
306 bool hasPixmap() const;
307
308Q_SIGNALS:
312 void clicked(const QPoint &point);
313
314protected:
315 void mouseReleaseEvent(QMouseEvent *event) override;
316};
317
318class ClickableProgressBar : public QProgressBar {
319 Q_OBJECT
320
321Q_SIGNALS:
325 void clicked(const QPoint &point);
326
327protected:
328 void mouseReleaseEvent(QMouseEvent *event) override;
329};
330
332
333class ItemDelegate : public QItemDelegate {
334 Q_OBJECT
335public:
336 ItemDelegate(QObject *parent) : QItemDelegate(parent) {}
337
338Q_SIGNALS:
340
341private:
342 bool eventFilter(QObject *object, QEvent *event) override;
343};
344
353int TextWidth(const QFontMetrics &fm, const QString &text);
354
358void LogQtInfo();
359
363void PopupMenu(QMenu *menu, const QPoint &point, QAction *at_action = nullptr);
364
365// Fix known bugs in QProgressDialog class.
366void PolishProgressDialog(QProgressDialog *dialog);
367
371void ShowModalDialogAsynchronously(QDialog *dialog);
372} // namespace GUIUtil
373
374#endif // BITCOIN_QT_GUIUTIL_H
CChainParams defines various tweakable parameters of a given instance of the Bitcoin system.
Definition: chainparams.h:86
Definition: config.h:19
void mouseReleaseEvent(QMouseEvent *event) override
Definition: guiutil.cpp:934
bool hasPixmap() const
Definition: guiutil.cpp:913
void clicked(const QPoint &point)
Emitted when the label is clicked.
void mouseReleaseEvent(QMouseEvent *event) override
Definition: guiutil.cpp:938
void clicked(const QPoint &point)
Emitted when the progressbar is clicked.
ItemDelegate(QObject *parent)
Definition: guiutil.h:336
bool eventFilter(QObject *object, QEvent *event) override
Definition: guiutil.cpp:942
Qt event filter that intercepts QEvent::FocusOut events for QLabel objects, and resets their ‘textInt...
Definition: guiutil.h:218
bool eventFilter(QObject *watched, QEvent *event) override
Definition: guiutil.cpp:484
LabelOutOfFocusEventFilter(QObject *parent)
Definition: guiutil.cpp:481
Makes a QTableView last column feel as if it was being resized from its left border.
Definition: guiutil.h:238
void setViewHeaderResizeMode(int logicalIndex, QHeaderView::ResizeMode resizeMode)
Definition: guiutil.cpp:519
void resizeColumn(int nColumnIndex, int width)
Definition: guiutil.cpp:525
void on_sectionResized(int logicalIndex, int oldSize, int newSize)
Definition: guiutil.cpp:575
TableViewLastColumnResizingFixer(QTableView *table, int lastColMinimumWidth, int allColsMinimumWidth, QObject *parent)
Initializes all internal variables and prepares the the resize modes of the last 2 columns of the tab...
Definition: guiutil.cpp:602
Qt event filter that intercepts ToolTipChange events, and replaces the tooltip with a rich text repre...
Definition: guiutil.h:198
bool eventFilter(QObject *obj, QEvent *evt) override
Definition: guiutil.cpp:465
ToolTipToRichTextFilter(int size_threshold, QObject *parent=0)
Definition: guiutil.cpp:461
Line edit that can be marked as "invalid" to show input validation feedback.
Path class wrapper to block calls to the fs::path(std::string) implicit constructor and the fs::path:...
Definition: fs.h:30
Top-level interface for a bitcoin node (bitcoind process).
Definition: node.h:59
ConnectionType
Different types of connections to a peer.
Utility functions used by the Bitcoin Qt UI.
Definition: bitcoingui.h:58
QString NetworkToQString(Network net)
Convert enum Network to QString.
Definition: guiutil.cpp:795
fs::path qstringToBoostPath(const QString &path)
Convert QString to OS specific boost path through UTF-8.
Definition: guiutil.cpp:787
bool isObscured(QWidget *w)
Definition: guiutil.cpp:385
bool parseBitcoinURI(const QString &scheme, const QUrl &uri, SendCoinsRecipient *out)
Definition: guiutil.cpp:149
bool openBitcoinConf()
Definition: guiutil.cpp:425
bool isDust(interfaces::Node &node, const QString &address, const Amount amount, const CChainParams &chainParams)
Definition: guiutil.cpp:248
Qt::ConnectionType blockingGUIThreadConnection()
Get connection type to call object slot in GUI thread with invokeMethod.
Definition: guiutil.cpp:369
QString HtmlEscape(const QString &str, bool fMultiLine)
Definition: guiutil.cpp:256
void PopupMenu(QMenu *menu, const QPoint &point, QAction *at_action)
Call QMenu::popup() only on supported QT_QPA_PLATFORM.
Definition: guiutil.cpp:992
QList< QModelIndex > getEntryData(const QAbstractItemView *view, int column)
Return a field of the currently selected entry as a QString.
Definition: guiutil.cpp:280
QString formatBytes(uint64_t bytes)
Definition: guiutil.cpp:899
void ShowModalDialogAsynchronously(QDialog *dialog)
Shows a QDialog instance asynchronously, and deletes it on close.
Definition: guiutil.cpp:1000
QString formatDurationStr(std::chrono::seconds dur)
Convert seconds into a QString with days, hours, mins, secs.
Definition: guiutil.cpp:817
void handleCloseWindowShortcut(QWidget *w)
Definition: guiutil.cpp:410
QString ExtractFirstSuffixFromFilter(const QString &filter)
Extract first suffix from filter pattern "Description (*.foo)" or "Description (*....
Definition: guiutil.cpp:299
void PolishProgressDialog(QProgressDialog *dialog)
Definition: guiutil.cpp:959
QString getOpenFileName(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedSuffixOut)
Get open filename, convenience wrapper for QFileDialog::getOpenFileName.
Definition: guiutil.cpp:347
std::string DummyAddress(const CChainParams &params)
Definition: guiutil.cpp:111
QString getDefaultDataDirectory()
Determine default data directory for operating system.
Definition: guiutil.cpp:295
void copyEntryData(const QAbstractItemView *view, int column, int role)
Copy a field of the currently selected entry of a view to the clipboard.
Definition: guiutil.cpp:268
QString getSaveFileName(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedSuffixOut)
Get save filename, mimics QFileDialog::getSaveFileName, except that it appends a default suffix when ...
Definition: guiutil.cpp:310
QString boostPathToQString(const fs::path &path)
Convert OS specific boost path to QString through UTF-8.
Definition: guiutil.cpp:791
bool SetStartOnSystemStartup(bool fAutoStart)
Definition: guiutil.cpp:776
ClickableProgressBar ProgressBar
Definition: guiutil.h:331
void bringToFront(QWidget *w)
Definition: guiutil.cpp:393
void LogQtInfo()
Writes to debug.log short info about the used Qt and the host system.
Definition: guiutil.cpp:970
QString formatPingTime(std::chrono::microseconds ping_time)
Format a CNodeStats.m_last_ping_time into a user-readable string or display N/A, if 0.
Definition: guiutil.cpp:857
void openDebugLogfile()
Definition: guiutil.cpp:415
QString dateTimeStr(const QDateTime &date)
Definition: guiutil.cpp:83
QString formatBitcoinURI(const SendCoinsRecipient &info)
Definition: guiutil.cpp:215
QString formatTimeOffset(int64_t nTimeOffset)
Format a CNodeCombinedStats.nTimeOffset into a user-readable string.
Definition: guiutil.cpp:865
QString convertToCashAddr(const CChainParams &params, const QString &addr)
Definition: guiutil.cpp:126
QString formatServicesStr(quint64 mask)
Format CNodeStats.nServices bitmask into a user-readable string.
Definition: guiutil.cpp:841
QString formatNiceTimeOffset(qint64 secs)
Definition: guiutil.cpp:870
bool GetStartOnSystemStartup()
Definition: guiutil.cpp:773
QStringList splitSkipEmptyParts(const QString &s, const QString &separator)
Definition: guiutil.cpp:451
int TextWidth(const QFontMetrics &fm, const QString &text)
Returns the distance in pixels appropriate for drawing a subsequent character after text.
Definition: guiutil.cpp:951
void setupAddressWidget(QValidatedLineEdit *widget, QWidget *parent)
Definition: guiutil.cpp:135
void setClipboard(const QString &str)
Definition: guiutil.cpp:782
bool hasEntryData(const QAbstractItemView *view, int column, int role)
Returns true if the specified field of the currently selected view entry is not empty.
Definition: guiutil.cpp:287
QFont fixedPitchFont()
Definition: guiutil.cpp:92
qreal calculateIdealFontSize(int width, const QString &text, QFont font, qreal minPointSize, qreal font_size)
Definition: guiutil.cpp:921
Definition: init.h:31
Network
A network type.
Definition: netaddress.h:44
Definition: amount.h:19