]> Git Repo - VerusCoin.git/blob - src/qt/guiutil.h
print the caught error instead of raising an error
[VerusCoin.git] / src / qt / guiutil.h
1 // Copyright (c) 2011-2013 The Bitcoin developers
2 // Distributed under the MIT/X11 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 "amount.h"
9
10 #include <QEvent>
11 #include <QHeaderView>
12 #include <QMessageBox>
13 #include <QObject>
14 #include <QProgressBar>
15 #include <QString>
16 #include <QTableView>
17
18 #include <boost/filesystem.hpp>
19
20 class QValidatedLineEdit;
21 class SendCoinsRecipient;
22
23 QT_BEGIN_NAMESPACE
24 class QAbstractItemView;
25 class QDateTime;
26 class QFont;
27 class QLineEdit;
28 class QUrl;
29 class QWidget;
30 QT_END_NAMESPACE
31
32 /** Utility functions used by the Bitcoin Qt UI.
33  */
34 namespace GUIUtil
35 {
36     // Create human-readable string from date
37     QString dateTimeStr(const QDateTime &datetime);
38     QString dateTimeStr(qint64 nTime);
39
40     // Render Bitcoin addresses in monospace font
41     QFont bitcoinAddressFont();
42
43     // Set up widgets for address and amounts
44     void setupAddressWidget(QValidatedLineEdit *widget, QWidget *parent);
45     void setupAmountWidget(QLineEdit *widget, QWidget *parent);
46
47     // Parse "bitcoin:" URI into recipient object, return true on successful parsing
48     bool parseBitcoinURI(const QUrl &uri, SendCoinsRecipient *out);
49     bool parseBitcoinURI(QString uri, SendCoinsRecipient *out);
50     QString formatBitcoinURI(const SendCoinsRecipient &info);
51
52     // Returns true if given address+amount meets "dust" definition
53     bool isDust(const QString& address, const CAmount& amount);
54
55     // HTML escaping for rich text controls
56     QString HtmlEscape(const QString& str, bool fMultiLine=false);
57     QString HtmlEscape(const std::string& str, bool fMultiLine=false);
58
59     /** Copy a field of the currently selected entry of a view to the clipboard. Does nothing if nothing
60         is selected.
61        @param[in] column  Data column to extract from the model
62        @param[in] role    Data role to extract from the model
63        @see  TransactionView::copyLabel, TransactionView::copyAmount, TransactionView::copyAddress
64      */
65     void copyEntryData(QAbstractItemView *view, int column, int role=Qt::EditRole);
66
67     void setClipboard(const QString& str);
68
69     /** Get save filename, mimics QFileDialog::getSaveFileName, except that it appends a default suffix
70         when no suffix is provided by the user.
71
72       @param[in] parent  Parent window (or 0)
73       @param[in] caption Window caption (or empty, for default)
74       @param[in] dir     Starting directory (or empty, to default to documents directory)
75       @param[in] filter  Filter specification such as "Comma Separated Files (*.csv)"
76       @param[out] selectedSuffixOut  Pointer to return the suffix (file type) that was selected (or 0).
77                   Can be useful when choosing the save file format based on suffix.
78      */
79     QString getSaveFileName(QWidget *parent, const QString &caption, const QString &dir,
80         const QString &filter,
81         QString *selectedSuffixOut);
82
83     /** Get open filename, convenience wrapper for QFileDialog::getOpenFileName.
84
85       @param[in] parent  Parent window (or 0)
86       @param[in] caption Window caption (or empty, for default)
87       @param[in] dir     Starting directory (or empty, to default to documents directory)
88       @param[in] filter  Filter specification such as "Comma Separated Files (*.csv)"
89       @param[out] selectedSuffixOut  Pointer to return the suffix (file type) that was selected (or 0).
90                   Can be useful when choosing the save file format based on suffix.
91      */
92     QString getOpenFileName(QWidget *parent, const QString &caption, const QString &dir,
93         const QString &filter,
94         QString *selectedSuffixOut);
95
96     /** Get connection type to call object slot in GUI thread with invokeMethod. The call will be blocking.
97
98        @returns If called from the GUI thread, return a Qt::DirectConnection.
99                 If called from another thread, return a Qt::BlockingQueuedConnection.
100     */
101     Qt::ConnectionType blockingGUIThreadConnection();
102
103     // Determine whether a widget is hidden behind other windows
104     bool isObscured(QWidget *w);
105
106     // Open debug.log
107     void openDebugLogfile();
108
109     // Replace invalid default fonts with known good ones
110     void SubstituteFonts();
111
112     /** Qt event filter that intercepts ToolTipChange events, and replaces the tooltip with a rich text
113       representation if needed. This assures that Qt can word-wrap long tooltip messages.
114       Tooltips longer than the provided size threshold (in characters) are wrapped.
115      */
116     class ToolTipToRichTextFilter : public QObject
117     {
118         Q_OBJECT
119
120     public:
121         explicit ToolTipToRichTextFilter(int size_threshold, QObject *parent = 0);
122
123     protected:
124         bool eventFilter(QObject *obj, QEvent *evt);
125
126     private:
127         int size_threshold;
128     };
129
130     /**
131      * Makes a QTableView last column feel as if it was being resized from its left border.
132      * Also makes sure the column widths are never larger than the table's viewport.
133      * In Qt, all columns are resizable from the right, but it's not intuitive resizing the last column from the right.
134      * Usually our second to last columns behave as if stretched, and when on strech mode, columns aren't resizable
135      * interactively or programatically.
136      *
137      * This helper object takes care of this issue.
138      *
139      */
140     class TableViewLastColumnResizingFixer: public QObject
141     {
142         Q_OBJECT
143
144         public:
145             TableViewLastColumnResizingFixer(QTableView* table, int lastColMinimumWidth, int allColsMinimumWidth);
146             void stretchColumnWidth(int column);
147
148         private:
149             QTableView* tableView;
150             int lastColumnMinimumWidth;
151             int allColumnsMinimumWidth;
152             int lastColumnIndex;
153             int columnCount;
154             int secondToLastColumnIndex;
155
156             void adjustTableColumnsWidth();
157             int getAvailableWidthForColumn(int column);
158             int getColumnsWidth();
159             void connectViewHeadersSignals();
160             void disconnectViewHeadersSignals();
161             void setViewHeaderResizeMode(int logicalIndex, QHeaderView::ResizeMode resizeMode);
162             void resizeColumn(int nColumnIndex, int width);
163
164         private slots:
165             void on_sectionResized(int logicalIndex, int oldSize, int newSize);
166             void on_geometriesChanged();
167     };
168
169     bool GetStartOnSystemStartup();
170     bool SetStartOnSystemStartup(bool fAutoStart);
171
172     /** Save window size and position */
173     void saveWindowGeometry(const QString& strSetting, QWidget *parent);
174     /** Restore window size and position */
175     void restoreWindowGeometry(const QString& strSetting, const QSize &defaultSizeIn, QWidget *parent);
176
177     /* Convert QString to OS specific boost path through UTF-8 */
178     boost::filesystem::path qstringToBoostPath(const QString &path);
179
180     /* Convert OS specific boost path to QString through UTF-8 */
181     QString boostPathToQString(const boost::filesystem::path &path);
182
183     /* Convert seconds into a QString with days, hours, mins, secs */
184     QString formatDurationStr(int secs);
185
186     /* Format CNodeStats.nServices bitmask into a user-readable string */
187     QString formatServicesStr(quint64 mask);
188
189     /* Format a CNodeCombinedStats.dPingTime into a user-readable string or display N/A, if 0*/
190     QString formatPingTime(double dPingTime);
191     
192 #if defined(Q_OS_MAC) && QT_VERSION >= 0x050000
193     // workaround for Qt OSX Bug:
194     // https://bugreports.qt-project.org/browse/QTBUG-15631
195     // QProgressBar uses around 10% CPU even when app is in background
196     class ProgressBar : public QProgressBar
197     {
198         bool event(QEvent *e) {
199             return (e->type() != QEvent::StyleAnimationUpdate) ? QProgressBar::event(e) : false;
200         }
201     };
202 #else
203     typedef QProgressBar ProgressBar;
204 #endif
205     
206 } // namespace GUIUtil
207
208 #endif // BITCOIN_QT_GUIUTIL_H
This page took 0.035283 seconds and 4 git commands to generate.