LCOV - code coverage report
Current view: top level - src/qt - guiutil.h (source / functions) Hit Total Coverage
Test: total_coverage.info Lines: 0 2 0.0 %
Date: 2015-10-12 22:39:14 Functions: 0 4 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // Copyright (c) 2011-2013 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 "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             :     /** Return a field of the currently selected entry as a QString. Does nothing if nothing
      68             :         is selected.
      69             :        @param[in] column  Data column to extract from the model
      70             :        @param[in] role    Data role to extract from the model
      71             :        @see  TransactionView::copyLabel, TransactionView::copyAmount, TransactionView::copyAddress
      72             :      */
      73             :     QString getEntryData(QAbstractItemView *view, int column, int role);
      74             : 
      75             :     void setClipboard(const QString& str);
      76             : 
      77             :     /** Get save filename, mimics QFileDialog::getSaveFileName, except that it appends a default suffix
      78             :         when no suffix is provided by the user.
      79             : 
      80             :       @param[in] parent  Parent window (or 0)
      81             :       @param[in] caption Window caption (or empty, for default)
      82             :       @param[in] dir     Starting directory (or empty, to default to documents directory)
      83             :       @param[in] filter  Filter specification such as "Comma Separated Files (*.csv)"
      84             :       @param[out] selectedSuffixOut  Pointer to return the suffix (file type) that was selected (or 0).
      85             :                   Can be useful when choosing the save file format based on suffix.
      86             :      */
      87             :     QString getSaveFileName(QWidget *parent, const QString &caption, const QString &dir,
      88             :         const QString &filter,
      89             :         QString *selectedSuffixOut);
      90             : 
      91             :     /** Get open filename, convenience wrapper for QFileDialog::getOpenFileName.
      92             : 
      93             :       @param[in] parent  Parent window (or 0)
      94             :       @param[in] caption Window caption (or empty, for default)
      95             :       @param[in] dir     Starting directory (or empty, to default to documents directory)
      96             :       @param[in] filter  Filter specification such as "Comma Separated Files (*.csv)"
      97             :       @param[out] selectedSuffixOut  Pointer to return the suffix (file type) that was selected (or 0).
      98             :                   Can be useful when choosing the save file format based on suffix.
      99             :      */
     100             :     QString getOpenFileName(QWidget *parent, const QString &caption, const QString &dir,
     101             :         const QString &filter,
     102             :         QString *selectedSuffixOut);
     103             : 
     104             :     /** Get connection type to call object slot in GUI thread with invokeMethod. The call will be blocking.
     105             : 
     106             :        @returns If called from the GUI thread, return a Qt::DirectConnection.
     107             :                 If called from another thread, return a Qt::BlockingQueuedConnection.
     108             :     */
     109             :     Qt::ConnectionType blockingGUIThreadConnection();
     110             : 
     111             :     // Determine whether a widget is hidden behind other windows
     112             :     bool isObscured(QWidget *w);
     113             : 
     114             :     // Open debug.log
     115             :     void openDebugLogfile();
     116             : 
     117             :     // Replace invalid default fonts with known good ones
     118             :     void SubstituteFonts(const QString& language);
     119             : 
     120             :     /** Qt event filter that intercepts ToolTipChange events, and replaces the tooltip with a rich text
     121             :       representation if needed. This assures that Qt can word-wrap long tooltip messages.
     122             :       Tooltips longer than the provided size threshold (in characters) are wrapped.
     123             :      */
     124           0 :     class ToolTipToRichTextFilter : public QObject
     125             :     {
     126             :         Q_OBJECT
     127             : 
     128             :     public:
     129             :         explicit ToolTipToRichTextFilter(int size_threshold, QObject *parent = 0);
     130             : 
     131             :     protected:
     132             :         bool eventFilter(QObject *obj, QEvent *evt);
     133             : 
     134             :     private:
     135             :         int size_threshold;
     136             :     };
     137             : 
     138             :     /**
     139             :      * Makes a QTableView last column feel as if it was being resized from its left border.
     140             :      * Also makes sure the column widths are never larger than the table's viewport.
     141             :      * In Qt, all columns are resizable from the right, but it's not intuitive resizing the last column from the right.
     142             :      * Usually our second to last columns behave as if stretched, and when on strech mode, columns aren't resizable
     143             :      * interactively or programatically.
     144             :      *
     145             :      * This helper object takes care of this issue.
     146             :      *
     147             :      */
     148           0 :     class TableViewLastColumnResizingFixer: public QObject
     149             :     {
     150             :         Q_OBJECT
     151             : 
     152             :         public:
     153             :             TableViewLastColumnResizingFixer(QTableView* table, int lastColMinimumWidth, int allColsMinimumWidth);
     154             :             void stretchColumnWidth(int column);
     155             : 
     156             :         private:
     157             :             QTableView* tableView;
     158             :             int lastColumnMinimumWidth;
     159             :             int allColumnsMinimumWidth;
     160             :             int lastColumnIndex;
     161             :             int columnCount;
     162             :             int secondToLastColumnIndex;
     163             : 
     164             :             void adjustTableColumnsWidth();
     165             :             int getAvailableWidthForColumn(int column);
     166             :             int getColumnsWidth();
     167             :             void connectViewHeadersSignals();
     168             :             void disconnectViewHeadersSignals();
     169             :             void setViewHeaderResizeMode(int logicalIndex, QHeaderView::ResizeMode resizeMode);
     170             :             void resizeColumn(int nColumnIndex, int width);
     171             : 
     172             :         private Q_SLOTS:
     173             :             void on_sectionResized(int logicalIndex, int oldSize, int newSize);
     174             :             void on_geometriesChanged();
     175             :     };
     176             : 
     177             :     bool GetStartOnSystemStartup();
     178             :     bool SetStartOnSystemStartup(bool fAutoStart);
     179             : 
     180             :     /** Save window size and position */
     181             :     void saveWindowGeometry(const QString& strSetting, QWidget *parent);
     182             :     /** Restore window size and position */
     183             :     void restoreWindowGeometry(const QString& strSetting, const QSize &defaultSizeIn, QWidget *parent);
     184             : 
     185             :     /* Convert QString to OS specific boost path through UTF-8 */
     186             :     boost::filesystem::path qstringToBoostPath(const QString &path);
     187             : 
     188             :     /* Convert OS specific boost path to QString through UTF-8 */
     189             :     QString boostPathToQString(const boost::filesystem::path &path);
     190             : 
     191             :     /* Convert seconds into a QString with days, hours, mins, secs */
     192             :     QString formatDurationStr(int secs);
     193             : 
     194             :     /* Format CNodeStats.nServices bitmask into a user-readable string */
     195             :     QString formatServicesStr(quint64 mask);
     196             : 
     197             :     /* Format a CNodeCombinedStats.dPingTime into a user-readable string or display N/A, if 0*/
     198             :     QString formatPingTime(double dPingTime);
     199             : 
     200             :     /* Format a CNodeCombinedStats.nTimeOffset into a user-readable string. */
     201             :     QString formatTimeOffset(int64_t nTimeOffset);
     202             : 
     203             : #if defined(Q_OS_MAC) && QT_VERSION >= 0x050000
     204             :     // workaround for Qt OSX Bug:
     205             :     // https://bugreports.qt-project.org/browse/QTBUG-15631
     206             :     // QProgressBar uses around 10% CPU even when app is in background
     207             :     class ProgressBar : public QProgressBar
     208             :     {
     209             :         bool event(QEvent *e) {
     210             :             return (e->type() != QEvent::StyleAnimationUpdate) ? QProgressBar::event(e) : false;
     211             :         }
     212             :     };
     213             : #else
     214             :     typedef QProgressBar ProgressBar;
     215             : #endif
     216             : 
     217             : } // namespace GUIUtil
     218             : 
     219             : #endif // BITCOIN_QT_GUIUTIL_H

Generated by: LCOV version 1.11