5f0c6a7b0e
9960137Add developer notes about blocking GUI code (Russell Yanofsky)9a61eedUse WalletBalances struct in Qt (Russell Yanofsky)56f33caRemove direct bitcoin calls from qt/sendcoinsdialog.cpp (Russell Yanofsky)e872c93Remove direct bitcoin access from qt/guiutil.cpp (Russell Yanofsky)5884558Remove direct bitcoin calls from qt transaction table files (Russell Yanofsky)3cab2ceRemove direct bitcoin calls from qt/paymentserver.cpp (Russell Yanofsky)3ec2ebcRemove direct bitcoin calls from qt/addresstablemodel.cpp (Russell Yanofsky)827de03Remove direct bitcoin calls from qt/coincontroldialog.cpp (Russell Yanofsky)a0704a8Remove most direct bitcoin calls from qt/walletmodel.cpp (Russell Yanofsky)90d4640Remove direct bitcoin calls from qt/optionsdialog.cpp (Russell Yanofsky)582daf6Remove direct bitcoin calls from qt/rpcconsole.cpp (Russell Yanofsky)3034a46Remove direct bitcoin calls from qt/bantablemodel.cpp (Russell Yanofsky)e0b66a3Remove direct bitcoin calls from qt/peertablemodel.cpp (Russell Yanofsky)d7c2c95Remove direct bitcoin calls from qt/intro.cpp (Russell Yanofsky)fe6f27eRemove direct bitcoin calls from qt/clientmodel.cpp (Russell Yanofsky)5fba3afRemove direct bitcoin calls from qt/splashscreen.cpp (Russell Yanofsky)c2f672fRemove direct bitcoin calls from qt/utilitydialog.cpp (Russell Yanofsky)3d619e9Remove direct bitcoin calls from qt/bitcoingui.cpp (Russell Yanofsky)c0f2756Remove direct bitcoin calls from qt/optionsmodel.cpp (Russell Yanofsky)71e0d90Remove direct bitcoin calls from qt/bitcoin.cpp (Russell Yanofsky)ea73b84Add src/interface/README.md (Russell Yanofsky) Pull request description: This is a refactoring PR that does not change behavior in any way. This change: 1. Creates abstract [`Node`](https://github.com/ryanofsky/bitcoin/blob/pr/ipc-local/src/interface/node.h) and [`Wallet`](https://github.com/ryanofsky/bitcoin/blob/pr/ipc-local/src/interface/wallet.h) interfaces in [`src/interface/`](https://github.com/ryanofsky/bitcoin/tree/pr/ipc-local/src/interface) 1. Updates Qt code to call the new interfaces. This largely consists of diffs of the form: ```diff - InitLogging(); - InitParameterInteraction(); + node.initLogging(); + node.initParameterInteraction(); ``` This change allows followup PR #10102 (makes `bitcoin-qt` control `bitcoind` over an IPC socket) to work without any significant updates to Qt code. Additionally: * It provides a single place to describe the interface between GUI and daemon code. * It can make better GUI testing possible, because Node and Wallet objects have virtual methods that can be overloaded for mocking. * It can be used to help make the GUI more responsive (see https://github.com/bitcoin/bitcoin/issues/10504) Other notes: * I used python scripts [hide-globals.py](https://github.com/ryanofsky/home/blob/master/src/2017/hide-globals/hide-globals.py) and [replace-syms.py](https://github.com/ryanofsky/home/blob/master/src/2017/hide-globals/replace-syms.py) to identify all the places where Qt code was accessing libbitcoin global variables and calling functions accessing those global variables. * These changes were originally part of #10102. Thanks to @JeremyRubin for the suggestion of splitting them out. Commits: - [`ea73b84d2d` Add src/interface/README.md](https://github.com/bitcoin/bitcoin/pull/10244/commits/ea73b84d2ddde22487dee0f71d7a619051e067f2) - [`71e0d90876` Remove direct bitcoin calls from qt/bitcoin.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/71e0d90876efd11e2a4aeb8f3f806c5a1fd54b42) - [`c0f2756be5` Remove direct bitcoin calls from qt/optionsmodel.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/c0f2756be517feddacd7c6b89b9faa888b3fef8e) - [`3d619e9d36` Remove direct bitcoin calls from qt/bitcoingui.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/3d619e9d3658e36cba4a19a5bed33e5538317b27) - [`c2f672fb19` Remove direct bitcoin calls from qt/utilitydialog.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/c2f672fb1960399389dea9cdd8f76d7156c2c88b) - [`5fba3af21e` Remove direct bitcoin calls from qt/splashscreen.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/5fba3af21e44ab7552c57782de430c1f4cfd6697) - [`fe6f27e6ea` Remove direct bitcoin calls from qt/clientmodel.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/fe6f27e6ea68a139d3a98b30a53706008ef8b132) - [`d7c2c95948` Remove direct bitcoin calls from qt/intro.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/d7c2c9594897c39df6739b92610dfb5a7a1cb3ec) - [`e0b66a3b7c` Remove direct bitcoin calls from qt/peertablemodel.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/e0b66a3b7c5d3a079636d61fcf611bb6b36c7bc1) - [`3034a462a5` Remove direct bitcoin calls from qt/bantablemodel.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/3034a462a5d30144cf0ec801d07f0c8c36d560f3) - [`582daf6d22` Remove direct bitcoin calls from qt/rpcconsole.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/582daf6d22da5394d02a12003b9542d9f5865ae2) - [`90d4640b7e` Remove direct bitcoin calls from qt/optionsdialog.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/90d4640b7eff3154a0750c5acb52d39bd41e0bbb) - [`a0704a8996` Remove most direct bitcoin calls from qt/walletmodel.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/a0704a8996bb950ae3c4d5b5a30e9dfe34cde1d3) - [`827de038ab` Remove direct bitcoin calls from qt/coincontroldialog.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/827de038ab6fa58aa3d46151eb2f8dc6add7743e) - [`3ec2ebcd9b` Remove direct bitcoin calls from qt/addresstablemodel.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/3ec2ebcd9b4beb4277f1f4791c6acbc538784f70) - [`3cab2ce5f9` Remove direct bitcoin calls from qt/paymentserver.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/3cab2ce5f9e159ad5a2e9ed682f28121b5248580) - [`58845587e1` Remove direct bitcoin calls from qt transaction table files](https://github.com/bitcoin/bitcoin/pull/10244/commits/58845587e11140e81f087a74c3db76a4d1fc3a1a) - [`e872c93ee8` Remove direct bitcoin access from qt/guiutil.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/e872c93ee87477130fb877da1a536b4c693bbab9) - [`56f33ca349` Remove direct bitcoin calls from qt/sendcoinsdialog.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/56f33ca349b3721a15fce3bf0b6d4fd7fd788970) - [`9a61eed1fc` Use WalletBalances struct in Qt](https://github.com/bitcoin/bitcoin/pull/10244/commits/9a61eed1fcc16ddcedc315045f470e1958b0760b) - [`9960137697` Add developer notes about blocking GUI code](https://github.com/bitcoin/bitcoin/pull/10244/commits/996013769711bd507cdcd6dde88cbd59fcd4fbad) Tree-SHA512: 7b9eff2f37d4ea21972d7cc6a3dbe144248595d6c330524396d867f3cd2841d666cdc040fd3605af559dab51b075812402f61d628d16cf13719335c1d8bf8ed3
81 lines
1.9 KiB
C++
81 lines
1.9 KiB
C++
// Copyright (c) 2011-2017 The Bitcoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#ifndef BITCOIN_QT_BANTABLEMODEL_H
|
|
#define BITCOIN_QT_BANTABLEMODEL_H
|
|
|
|
#include <net.h>
|
|
|
|
#include <memory>
|
|
|
|
#include <QAbstractTableModel>
|
|
#include <QStringList>
|
|
|
|
class ClientModel;
|
|
class BanTablePriv;
|
|
|
|
namespace interface {
|
|
class Node;
|
|
}
|
|
|
|
struct CCombinedBan {
|
|
CSubNet subnet;
|
|
CBanEntry banEntry;
|
|
};
|
|
|
|
class BannedNodeLessThan
|
|
{
|
|
public:
|
|
BannedNodeLessThan(int nColumn, Qt::SortOrder fOrder) :
|
|
column(nColumn), order(fOrder) {}
|
|
bool operator()(const CCombinedBan& left, const CCombinedBan& right) const;
|
|
|
|
private:
|
|
int column;
|
|
Qt::SortOrder order;
|
|
};
|
|
|
|
/**
|
|
Qt model providing information about connected peers, similar to the
|
|
"getpeerinfo" RPC call. Used by the rpc console UI.
|
|
*/
|
|
class BanTableModel : public QAbstractTableModel
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
explicit BanTableModel(interface::Node& node, ClientModel *parent = 0);
|
|
~BanTableModel();
|
|
void startAutoRefresh();
|
|
void stopAutoRefresh();
|
|
|
|
enum ColumnIndex {
|
|
Address = 0,
|
|
Bantime = 1
|
|
};
|
|
|
|
/** @name Methods overridden from QAbstractTableModel
|
|
@{*/
|
|
int rowCount(const QModelIndex &parent) const;
|
|
int columnCount(const QModelIndex &parent) const;
|
|
QVariant data(const QModelIndex &index, int role) const;
|
|
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
|
|
QModelIndex index(int row, int column, const QModelIndex &parent) const;
|
|
Qt::ItemFlags flags(const QModelIndex &index) const;
|
|
void sort(int column, Qt::SortOrder order);
|
|
bool shouldShow();
|
|
/*@}*/
|
|
|
|
public Q_SLOTS:
|
|
void refresh();
|
|
|
|
private:
|
|
interface::Node& m_node;
|
|
ClientModel *clientModel;
|
|
QStringList columns;
|
|
std::unique_ptr<BanTablePriv> priv;
|
|
};
|
|
|
|
#endif // BITCOIN_QT_BANTABLEMODEL_H
|