mirror of
https://github.com/dashpay/dash.git
synced 2024-12-24 11:32:46 +01:00
Merge #6337: backport: merge bitcoin-core/gui#337, #354, #317, #349, #403, #418, #416, #449, #477, #563, #554, #615 (qt backports: part 2)
1a2c02a42d
merge bitcoin-core/gui#615: If -prune=0 is set, Uncheck Prune on Intro page (Kittywhiskers Van Gogh)3d5aca6a0b
merge bitcoin-core/gui#554: Add and improve translator comments and tooltips for peers tab address fields (Kittywhiskers Van Gogh)0c545ac0e9
merge bitcoin-core/gui#563: Remove network detection based on address in BIP21 (Kittywhiskers Van Gogh)f088334c8a
merge bitcoin-core/gui#477: Monospaced output in Console on macOS (Kittywhiskers Van Gogh)694f3e9cf1
merge bitcoin-core/gui#449: Restore "S" accelerator for "Start on system login" option (Kittywhiskers Van Gogh)063ef3a2d0
merge bitcoin-core/gui#416: Add RPC setting (Kittywhiskers Van Gogh)fa2f7acc2a
merge bitcoin-core/gui#418: fix bitcoin-qt app categorization on apple silicon (Kittywhiskers Van Gogh)594177d5fe
merge bitcoin-core/gui#403: Make paths to update Encryption and HD wallet statuses simpler (Kittywhiskers Van Gogh)ba5ad1fc6c
merge bitcoin-core/gui#349: replace QDateTime::fromTime_t with QDateTime::fromSecsSinceEpoch (Kittywhiskers Van Gogh)70d4e08011
merge bitcoin-core/gui#317: Add Direction column to Peers Tab (Kittywhiskers Van Gogh)0a5481cf44
merge bitcoin-core/gui#354: Refactor open date range to use std::optional (Kittywhiskers Van Gogh)17a7e9ba85
merge bitcoin-core/gui#337: Use Regex Search in Apptests (Kittywhiskers Van Gogh) Pull request description: ## Additional Information | `develop` (3a18f087
) | This PR | | ------------------------------------------------------------ | ------------------------------------------------------------ | | ![image](https://github.com/user-attachments/assets/e5d48b17-2eae-4e58-bbbf-6c011dc98c9c) | ![image](https://github.com/user-attachments/assets/fc47c1f1-d3c2-45dc-bdd5-2e94bc02489d) | | ![image](https://github.com/user-attachments/assets/e75bd85a-30a7-4e49-8a75-c8ce5090ba50) | ![image](https://github.com/user-attachments/assets/51fd865a-91fd-4742-b745-1cfb6866ae14) | ## Breaking changes None observed. ## Checklist - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas (note: N/A) - [x] I have added or updated relevant unit/integration/functional/e2e tests (note: N/A) - [x] I have made corresponding changes to the documentation (note: N/A) - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_ ACKs for top commit: UdjinM6: utACK1a2c02a42d
Tree-SHA512: d424a0ebe817c08a50c2455fea1c3bf798a1a53dd87bc9b71cd7173824d7892a83035f046dfccc85d1925b91705d4db7ac2a498e4299d91504a1a8306762e5b0
This commit is contained in:
commit
ceb1fe70cf
5
doc/release-notes-6337.md
Normal file
5
doc/release-notes-6337.md
Normal file
@ -0,0 +1,5 @@
|
||||
GUI changes
|
||||
-----------
|
||||
|
||||
A new option has been added in to the "Main" tab in "Options" that allow
|
||||
users to enable RPC server functionality.
|
@ -16,6 +16,11 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
|
||||
<key>CFBundleSupportedPlatforms</key>
|
||||
<array>
|
||||
<string>MacOSX</string>
|
||||
</array>
|
||||
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>@CLIENT_VERSION_MAJOR@.@CLIENT_VERSION_MINOR@.@CLIENT_VERSION_BUILD@</string>
|
||||
|
||||
|
@ -582,7 +582,7 @@ int GuiMain(int argc, char* argv[])
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
#ifdef ENABLE_WALLET
|
||||
// Parse URIs on command line -- this can affect Params()
|
||||
// Parse URIs on command line
|
||||
PaymentServer::ipcParseCommandLine(argc, argv);
|
||||
#endif
|
||||
|
||||
|
@ -112,14 +112,15 @@ BitcoinGUI::BitcoinGUI(interfaces::Node& node, const NetworkStyle* networkStyle,
|
||||
{
|
||||
/** Create wallet frame*/
|
||||
walletFrame = new WalletFrame(this);
|
||||
connect(walletFrame, &WalletFrame::message, [this](const QString& title, const QString& message, unsigned int style) {
|
||||
this->message(title, message, style);
|
||||
});
|
||||
connect(walletFrame, &WalletFrame::createWalletButtonClicked, [this] {
|
||||
auto activity = new CreateWalletActivity(getWalletController(), this);
|
||||
connect(activity, &CreateWalletActivity::finished, activity, &QObject::deleteLater);
|
||||
activity->create();
|
||||
});
|
||||
connect(walletFrame, &WalletFrame::message, [this](const QString& title, const QString& message, unsigned int style) {
|
||||
this->message(title, message, style);
|
||||
});
|
||||
connect(walletFrame, &WalletFrame::currentWalletSet, [this] { updateWalletStatus(); });
|
||||
} else
|
||||
#endif // ENABLE_WALLET
|
||||
{
|
||||
@ -819,8 +820,8 @@ void BitcoinGUI::setClientModel(ClientModel *_clientModel, interfaces::BlockAndH
|
||||
connect(_clientModel, &ClientModel::numConnectionsChanged, this, &BitcoinGUI::setNumConnections);
|
||||
connect(_clientModel, &ClientModel::networkActiveChanged, this, &BitcoinGUI::setNetworkActive);
|
||||
|
||||
modalOverlay->setKnownBestHeight(tip_info->header_height, QDateTime::fromTime_t(tip_info->header_time));
|
||||
setNumBlocks(tip_info->block_height, QDateTime::fromTime_t(tip_info->block_time), QString::fromStdString(tip_info->block_hash.ToString()), tip_info->verification_progress, false, SynchronizationState::INIT_DOWNLOAD);
|
||||
modalOverlay->setKnownBestHeight(tip_info->header_height, QDateTime::fromSecsSinceEpoch(tip_info->header_time));
|
||||
setNumBlocks(tip_info->block_height, QDateTime::fromSecsSinceEpoch(tip_info->block_time), QString::fromStdString(tip_info->block_hash.ToString()), tip_info->verification_progress, false, SynchronizationState::INIT_DOWNLOAD);
|
||||
connect(_clientModel, &ClientModel::numBlocksChanged, this, &BitcoinGUI::setNumBlocks);
|
||||
|
||||
connect(_clientModel, &ClientModel::additionalDataSyncProgressChanged, this, &BitcoinGUI::setAdditionalDataSyncProgress);
|
||||
@ -932,7 +933,6 @@ void BitcoinGUI::addWallet(WalletModel* walletModel)
|
||||
});
|
||||
connect(wallet_view, &WalletView::encryptionStatusChanged, this, &BitcoinGUI::updateWalletStatus);
|
||||
connect(wallet_view, &WalletView::incomingTransaction, this, &BitcoinGUI::incomingTransaction);
|
||||
connect(wallet_view, &WalletView::hdEnabledStatusChanged, this, &BitcoinGUI::updateWalletStatus);
|
||||
connect(this, &BitcoinGUI::setPrivacy, wallet_view, &WalletView::setPrivacy);
|
||||
wallet_view->setPrivacy(isPrivacyModeActivated());
|
||||
const QString display_name = walletModel->getDisplayName();
|
||||
@ -1281,7 +1281,7 @@ void BitcoinGUI::updateNetworkState()
|
||||
}
|
||||
|
||||
if (fNetworkBecameActive || fNetworkBecameInactive) {
|
||||
setNumBlocks(m_node.getNumBlocks(), QDateTime::fromTime_t(m_node.getLastBlockTime()), QString::fromStdString(m_node.getLastBlockHash()), m_node.getVerificationProgress(), false, SynchronizationState::INIT_DOWNLOAD);
|
||||
setNumBlocks(m_node.getNumBlocks(), QDateTime::fromSecsSinceEpoch(m_node.getLastBlockTime()), QString::fromStdString(m_node.getLastBlockHash()), m_node.getVerificationProgress(), false, SynchronizationState::INIT_DOWNLOAD);
|
||||
}
|
||||
|
||||
nCountPrev = count;
|
||||
@ -1545,7 +1545,7 @@ void BitcoinGUI::setAdditionalDataSyncProgress(double nSyncProgress)
|
||||
|
||||
// If masternodeSync->Reset() has been called make sure status bar shows the correct information.
|
||||
if (nSyncProgress == -1) {
|
||||
setNumBlocks(m_node.getNumBlocks(), QDateTime::fromTime_t(m_node.getLastBlockTime()), QString::fromStdString(m_node.getLastBlockHash()), m_node.getVerificationProgress(), false, SynchronizationState::INIT_DOWNLOAD);
|
||||
setNumBlocks(m_node.getNumBlocks(), QDateTime::fromSecsSinceEpoch(m_node.getLastBlockTime()), QString::fromStdString(m_node.getLastBlockHash()), m_node.getVerificationProgress(), false, SynchronizationState::INIT_DOWNLOAD);
|
||||
if (clientModel->getNumConnections()) {
|
||||
labelBlocksIcon->show();
|
||||
startSpinner();
|
||||
@ -1679,7 +1679,9 @@ void BitcoinGUI::changeEvent(QEvent *e)
|
||||
if (e->type() == QEvent::StyleChange) {
|
||||
updateNetworkState();
|
||||
#ifdef ENABLE_WALLET
|
||||
updateWalletStatus();
|
||||
if (walletFrame) {
|
||||
updateWalletStatus();
|
||||
}
|
||||
#endif
|
||||
if (m_node.masternodeSync().isSynced()) {
|
||||
labelBlocksIcon->setPixmap(GUIUtil::getIcon("synced", GUIUtil::ThemedColor::GREEN).pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
|
||||
@ -1911,9 +1913,8 @@ void BitcoinGUI::setEncryptionStatus(int status)
|
||||
|
||||
void BitcoinGUI::updateWalletStatus()
|
||||
{
|
||||
if (!walletFrame) {
|
||||
return;
|
||||
}
|
||||
assert(walletFrame);
|
||||
|
||||
WalletView * const walletView = walletFrame->currentWalletView();
|
||||
if (!walletView) {
|
||||
return;
|
||||
|
@ -251,7 +251,7 @@ bool ClientModel::isReleaseVersion() const
|
||||
|
||||
QString ClientModel::formatClientStartupTime() const
|
||||
{
|
||||
return QDateTime::fromTime_t(GetStartupTime()).toString();
|
||||
return QDateTime::fromSecsSinceEpoch(GetStartupTime()).toString();
|
||||
}
|
||||
|
||||
QString ClientModel::dataDir() const
|
||||
@ -329,7 +329,7 @@ static void BlockTipChanged(ClientModel* clientmodel, SynchronizationState sync_
|
||||
|
||||
bool invoked = QMetaObject::invokeMethod(clientmodel, "numBlocksChanged", Qt::QueuedConnection,
|
||||
Q_ARG(int, tip.block_height),
|
||||
Q_ARG(QDateTime, QDateTime::fromTime_t(tip.block_time)),
|
||||
Q_ARG(QDateTime, QDateTime::fromSecsSinceEpoch(tip.block_time)),
|
||||
Q_ARG(QString, QString::fromStdString(tip.block_hash.ToString())),
|
||||
Q_ARG(double, verificationProgress),
|
||||
Q_ARG(bool, fHeader),
|
||||
|
@ -1587,10 +1587,10 @@
|
||||
<item row="27" column="0">
|
||||
<widget class="QLabel" name="peerAddrRelayEnabledLabel">
|
||||
<property name="toolTip">
|
||||
<string extracomment="Tooltip text for the Address Relay field in the peer details area.">Whether we relay addresses to this peer.</string>
|
||||
<string extracomment="Tooltip text for the Address Relay field in the peer details area, which displays whether we relay addresses to this peer (Yes/No).">Whether we relay addresses to this peer.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Address Relay</string>
|
||||
<string extracomment="Text title for the Address Relay field in the peer details area, which displays whether we relay addresses to this peer (Yes/No).">Address Relay</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -1613,10 +1613,10 @@
|
||||
<item row="28" column="0">
|
||||
<widget class="QLabel" name="peerAddrProcessedLabel">
|
||||
<property name="toolTip">
|
||||
<string extracomment="Tooltip text for the Addresses Processed field in the peer details area.">Total number of addresses processed, excluding those dropped due to rate-limiting.</string>
|
||||
<string extracomment="Tooltip text for the Addresses Processed field in the peer details area, which displays the total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting).">The total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting).</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Addresses Processed</string>
|
||||
<string extracomment="Text title for the Addresses Processed field in the peer details area, which displays the total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting).">Addresses Processed</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -1639,10 +1639,10 @@
|
||||
<item row="29" column="0">
|
||||
<widget class="QLabel" name="peerAddrRateLimitedLabel">
|
||||
<property name="toolTip">
|
||||
<string extracomment="Tooltip text for the Addresses Rate-Limited field in the peer details area.">Total number of addresses dropped due to rate-limiting.</string>
|
||||
<string extracomment="Tooltip text for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting.">The total number of addresses received from this peer that were dropped (not processed) due to rate-limiting.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Addresses Rate-Limited</string>
|
||||
<string extracomment="Text title for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting.">Addresses Rate-Limited</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -291,13 +291,23 @@
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="enableServer">
|
||||
<property name="toolTip">
|
||||
<string extracomment="Tooltip text for Options window setting that enables the RPC server.">This allows you or a third party tool to communicate with the node through command-line and JSON-RPC commands.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string extracomment="An Options window setting to enable the RPC server.">Enable R&PC server</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_Main">
|
||||
<property name="orientation">
|
||||
|
@ -263,7 +263,7 @@ QString dateTimeStr(const QDateTime &date)
|
||||
|
||||
QString dateTimeStr(qint64 nTime)
|
||||
{
|
||||
return dateTimeStr(QDateTime::fromTime_t((qint32)nTime));
|
||||
return dateTimeStr(QDateTime::fromSecsSinceEpoch((qint32)nTime));
|
||||
}
|
||||
|
||||
QFont fixedPitchFont(bool use_embedded_font)
|
||||
|
@ -293,7 +293,7 @@ void Intro::setStatus(int status, const QString &message, quint64 bytesAvailable
|
||||
ui->freeSpace->setText("");
|
||||
} else {
|
||||
m_bytes_available = bytesAvailable;
|
||||
if (ui->prune->isEnabled()) {
|
||||
if (ui->prune->isEnabled() && !(gArgs.IsArgSet("-prune") && gArgs.GetArg("-prune", 0) == 0)) {
|
||||
ui->prune->setChecked(m_bytes_available < (m_blockchain_size_gb + m_chain_state_size_gb + 10) * GB_BYTES);
|
||||
}
|
||||
UpdateFreeSpaceLabel();
|
||||
|
@ -267,6 +267,7 @@ void OptionsDialog::setModel(OptionsModel *_model)
|
||||
connect(ui->spendZeroConfChange, &QCheckBox::clicked, this, &OptionsDialog::showRestartWarning);
|
||||
/* Network */
|
||||
connect(ui->allowIncoming, &QCheckBox::clicked, this, &OptionsDialog::showRestartWarning);
|
||||
connect(ui->enableServer, &QCheckBox::clicked, this, &OptionsDialog::showRestartWarning);
|
||||
connect(ui->connectSocks, &QCheckBox::clicked, this, &OptionsDialog::showRestartWarning);
|
||||
connect(ui->connectSocksTor, &QCheckBox::clicked, this, &OptionsDialog::showRestartWarning);
|
||||
/* Display */
|
||||
@ -344,6 +345,7 @@ void OptionsDialog::setMapper()
|
||||
mapper->addMapping(ui->mapPortUpnp, OptionsModel::MapPortUPnP);
|
||||
mapper->addMapping(ui->mapPortNatpmp, OptionsModel::MapPortNatpmp);
|
||||
mapper->addMapping(ui->allowIncoming, OptionsModel::Listen);
|
||||
mapper->addMapping(ui->enableServer, OptionsModel::Server);
|
||||
|
||||
mapper->addMapping(ui->connectSocks, OptionsModel::ProxyUse);
|
||||
mapper->addMapping(ui->proxyIp, OptionsModel::ProxyIP);
|
||||
|
@ -280,6 +280,13 @@ void OptionsModel::Init(bool resetSettings)
|
||||
gArgs.SoftSetBoolArg("-listenonion", false);
|
||||
}
|
||||
|
||||
if (!settings.contains("server")) {
|
||||
settings.setValue("server", false);
|
||||
}
|
||||
if (!gArgs.SoftSetBoolArg("-server", settings.value("server").toBool())) {
|
||||
addOverriddenOption("-server");
|
||||
}
|
||||
|
||||
if (!settings.contains("fUseProxy"))
|
||||
settings.setValue("fUseProxy", false);
|
||||
if (!settings.contains("addrProxy"))
|
||||
@ -536,6 +543,8 @@ QVariant OptionsModel::data(const QModelIndex & index, int role) const
|
||||
return settings.value("nThreadsScriptVerif");
|
||||
case Listen:
|
||||
return settings.value("fListen");
|
||||
case Server:
|
||||
return settings.value("server");
|
||||
default:
|
||||
return QVariant();
|
||||
}
|
||||
@ -806,6 +815,12 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in
|
||||
setRestartRequired(true);
|
||||
}
|
||||
break;
|
||||
case Server:
|
||||
if (settings.value("server") != value) {
|
||||
settings.setValue("server", value);
|
||||
setRestartRequired(true);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -86,6 +86,7 @@ public:
|
||||
CoinJoinDenomsHardCap,// int
|
||||
CoinJoinMultiSession, // bool
|
||||
Listen, // bool
|
||||
Server, // bool
|
||||
OptionIDRowCount,
|
||||
};
|
||||
|
||||
|
@ -79,32 +79,11 @@ void PaymentServer::ipcParseCommandLine(int argc, char* argv[])
|
||||
for (int i = 1; i < argc; i++)
|
||||
{
|
||||
QString arg(argv[i]);
|
||||
if (arg.startsWith("-"))
|
||||
continue;
|
||||
if (arg.startsWith("-")) continue;
|
||||
|
||||
// If the dash: URI contains a payment request, we are not able to detect the
|
||||
// network as that would require fetching and parsing the payment request.
|
||||
// That means clicking such an URI which contains a testnet payment request
|
||||
// will start a mainnet instance and throw a "wrong network" error.
|
||||
if (arg.startsWith(BITCOIN_IPC_PREFIX, Qt::CaseInsensitive)) // dash: URI
|
||||
{
|
||||
if (savedPaymentRequests.contains(arg)) continue;
|
||||
savedPaymentRequests.insert(arg);
|
||||
|
||||
SendCoinsRecipient r;
|
||||
if (GUIUtil::parseBitcoinURI(arg, &r) && !r.address.isEmpty())
|
||||
{
|
||||
auto tempChainParams = CreateChainParams(gArgs, CBaseChainParams::MAIN);
|
||||
|
||||
if (IsValidDestinationString(r.address.toStdString(), *tempChainParams)) {
|
||||
SelectParams(CBaseChainParams::MAIN);
|
||||
} else {
|
||||
tempChainParams = CreateChainParams(gArgs, CBaseChainParams::TESTNET);
|
||||
if (IsValidDestinationString(r.address.toStdString(), *tempChainParams)) {
|
||||
SelectParams(CBaseChainParams::TESTNET);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -74,8 +74,13 @@ QVariant PeerTableModel::data(const QModelIndex& index, int role) const
|
||||
case Age:
|
||||
return GUIUtil::FormatPeerAge(rec->nodeStats.m_connected);
|
||||
case Address:
|
||||
// prepend to peer address down-arrow symbol for inbound connection and up-arrow for outbound connection
|
||||
return QString::fromStdString((rec->nodeStats.fInbound ? "↓ " : "↑ ") + rec->nodeStats.m_addr_name);
|
||||
return QString::fromStdString(rec->nodeStats.m_addr_name);
|
||||
case Direction:
|
||||
return QString(rec->nodeStats.fInbound ?
|
||||
//: An Inbound Connection from a Peer.
|
||||
tr("Inbound") :
|
||||
//: An Outbound Connection to a Peer.
|
||||
tr("Outbound"));
|
||||
case ConnectionType:
|
||||
return GUIUtil::ConnectionTypeToQString(rec->nodeStats.m_conn_type, /* prepend_direction */ false);
|
||||
case Network:
|
||||
@ -97,6 +102,7 @@ QVariant PeerTableModel::data(const QModelIndex& index, int role) const
|
||||
return QVariant(Qt::AlignRight | Qt::AlignVCenter);
|
||||
case Address:
|
||||
return {};
|
||||
case Direction:
|
||||
case ConnectionType:
|
||||
case Network:
|
||||
return QVariant(Qt::AlignCenter);
|
||||
|
@ -49,6 +49,7 @@ public:
|
||||
NetNodeId = 0,
|
||||
Age,
|
||||
Address,
|
||||
Direction,
|
||||
ConnectionType,
|
||||
Network,
|
||||
Ping,
|
||||
@ -88,6 +89,9 @@ private:
|
||||
/*: Title of Peers Table column which contains the
|
||||
IP/Onion/I2P address of the connected peer. */
|
||||
tr("Address"),
|
||||
/*: Title of Peers Table column which indicates the direction
|
||||
the peer connection was initiated from. */
|
||||
tr("Direction"),
|
||||
/*: Title of Peers Table column which describes the type of
|
||||
peer connection. The "type" describes why the connection exists. */
|
||||
tr("Type"),
|
||||
|
@ -28,6 +28,8 @@ bool PeerTableSortProxy::lessThan(const QModelIndex& left_index, const QModelInd
|
||||
return left_stats.m_connected > right_stats.m_connected;
|
||||
case PeerTableModel::Address:
|
||||
return left_stats.m_addr_name.compare(right_stats.m_addr_name) < 0;
|
||||
case PeerTableModel::Direction:
|
||||
return left_stats.fInbound > right_stats.fInbound; // default sort Inbound, then Outbound
|
||||
case PeerTableModel::ConnectionType:
|
||||
return left_stats.m_conn_type < right_stats.m_conn_type;
|
||||
case PeerTableModel::Network:
|
||||
|
@ -234,7 +234,7 @@ bool RecentRequestEntryLessThan::operator()(const RecentRequestEntry& left, cons
|
||||
switch(column)
|
||||
{
|
||||
case RecentRequestsTableModel::Date:
|
||||
return pLeft->date.toTime_t() < pRight->date.toTime_t();
|
||||
return pLeft->date.toSecsSinceEpoch() < pRight->date.toSecsSinceEpoch();
|
||||
case RecentRequestsTableModel::Label:
|
||||
return pLeft->recipient.label < pRight->recipient.label;
|
||||
case RecentRequestsTableModel::Message:
|
||||
|
@ -7,6 +7,8 @@
|
||||
|
||||
#include <qt/sendcoinsrecipient.h>
|
||||
|
||||
#include <string>
|
||||
|
||||
#include <QAbstractTableModel>
|
||||
#include <QStringList>
|
||||
#include <QDateTime>
|
||||
@ -26,9 +28,9 @@ public:
|
||||
|
||||
SERIALIZE_METHODS(RecentRequestEntry, obj) {
|
||||
unsigned int date_timet;
|
||||
SER_WRITE(obj, date_timet = obj.date.toTime_t());
|
||||
SER_WRITE(obj, date_timet = obj.date.toSecsSinceEpoch());
|
||||
READWRITE(obj.nVersion, obj.id, date_timet, obj.recipient);
|
||||
SER_READ(obj, obj.date = QDateTime::fromTime_t(date_timet));
|
||||
SER_READ(obj, obj.date = QDateTime::fromSecsSinceEpoch(date_timet));
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -697,7 +697,7 @@ void RPCConsole::setClientModel(ClientModel *model, int bestblock_height, int64_
|
||||
setNumConnections(model->getNumConnections());
|
||||
connect(model, &ClientModel::numConnectionsChanged, this, &RPCConsole::setNumConnections);
|
||||
|
||||
setNumBlocks(bestblock_height, QDateTime::fromTime_t(bestblock_date), QString::fromStdString(bestblock_hash.ToString()), verification_progress, false);
|
||||
setNumBlocks(bestblock_height, QDateTime::fromSecsSinceEpoch(bestblock_date), QString::fromStdString(bestblock_hash.ToString()), verification_progress, false);
|
||||
connect(model, &ClientModel::numBlocksChanged, this, &RPCConsole::setNumBlocks);
|
||||
|
||||
connect(model, &ClientModel::chainLockChanged, this, &RPCConsole::setChainLock);
|
||||
@ -963,7 +963,11 @@ void RPCConsole::clear(bool keep_prompt)
|
||||
ui->lineEdit->setFocus();
|
||||
|
||||
// Set default style sheet
|
||||
#ifdef Q_OS_MAC
|
||||
ui->messagesWidget->setFont(GUIUtil::fixedPitchFont(/*use_embedded_font=*/true));
|
||||
#else
|
||||
ui->messagesWidget->setFont(GUIUtil::fixedPitchFont());
|
||||
#endif
|
||||
ui->messagesWidget->document()->setDefaultStyleSheet(
|
||||
QString(
|
||||
"table { }"
|
||||
|
@ -12,7 +12,6 @@
|
||||
#include <qt/rpcconsole.h>
|
||||
#include <shutdown.h>
|
||||
#include <test/util/setup_common.h>
|
||||
#include <univalue.h>
|
||||
#include <validation.h>
|
||||
|
||||
#if defined(HAVE_CONFIG_H)
|
||||
@ -21,9 +20,11 @@
|
||||
|
||||
#include <QAction>
|
||||
#include <QLineEdit>
|
||||
#include <QRegularExpression>
|
||||
#include <QScopedPointer>
|
||||
#include <QSettings>
|
||||
#include <QSignalSpy>
|
||||
#include <QString>
|
||||
#include <QTest>
|
||||
#include <QTextEdit>
|
||||
#include <QtGlobal>
|
||||
@ -31,6 +32,13 @@
|
||||
#include <QtTest/QtTestGui>
|
||||
|
||||
namespace {
|
||||
//! Regex find a string group inside of the console output
|
||||
QString FindInConsole(const QString& output, const QString& pattern)
|
||||
{
|
||||
const QRegularExpression re(pattern);
|
||||
return re.match(output).captured(1);
|
||||
}
|
||||
|
||||
//! Call getblockchaininfo RPC and check first field of JSON output.
|
||||
void TestRpcCommand(RPCConsole* console)
|
||||
{
|
||||
@ -42,10 +50,9 @@ void TestRpcCommand(RPCConsole* console)
|
||||
QTest::keyClick(lineEdit, Qt::Key_Return);
|
||||
QVERIFY(mw_spy.wait(1000));
|
||||
QCOMPARE(mw_spy.count(), 4);
|
||||
QString output = messagesWidget->toPlainText();
|
||||
UniValue value;
|
||||
value.read(output.right(output.size() - output.indexOf("{")).toStdString());
|
||||
QCOMPARE(value["chain"].get_str(), std::string("regtest"));
|
||||
const QString output = messagesWidget->toPlainText();
|
||||
const QString pattern = QStringLiteral("\"chain\": \"(\\w+)\"");
|
||||
QCOMPARE(FindInConsole(output, pattern), QString("regtest"));
|
||||
}
|
||||
} // namespace
|
||||
|
||||
|
@ -7,17 +7,12 @@
|
||||
#include <qt/transactiontablemodel.h>
|
||||
#include <qt/transactionrecord.h>
|
||||
|
||||
#include <algorithm>
|
||||
#include <cstdlib>
|
||||
|
||||
// Earliest date that can be represented (far in the past)
|
||||
const QDateTime TransactionFilterProxy::MIN_DATE = QDateTime::fromTime_t(0);
|
||||
// Last date that can be represented (far in the future)
|
||||
const QDateTime TransactionFilterProxy::MAX_DATE = QDateTime::fromTime_t(0xFFFFFFFF);
|
||||
#include <optional>
|
||||
|
||||
TransactionFilterProxy::TransactionFilterProxy(QObject *parent) :
|
||||
QSortFilterProxyModel(parent),
|
||||
dateFrom(MIN_DATE.toTime_t()),
|
||||
dateTo(MAX_DATE.toTime_t()),
|
||||
m_search_string(),
|
||||
typeFilter(COMMON_TYPES),
|
||||
watchOnlyFilter(WatchOnlyFilter_All),
|
||||
@ -44,9 +39,10 @@ bool TransactionFilterProxy::filterAcceptsRow(int sourceRow, const QModelIndex &
|
||||
return false;
|
||||
if (!involvesWatchAddress && watchOnlyFilter == WatchOnlyFilter_Yes)
|
||||
return false;
|
||||
qint64 datetime = index.data(TransactionTableModel::DateRoleInt).toLongLong();
|
||||
if (datetime < dateFrom || datetime > dateTo)
|
||||
return false;
|
||||
|
||||
QDateTime datetime = index.data(TransactionTableModel::DateRole).toDateTime();
|
||||
if (dateFrom && datetime < *dateFrom) return false;
|
||||
if (dateTo && datetime > *dateTo) return false;
|
||||
|
||||
QString address = index.data(TransactionTableModel::AddressRole).toString();
|
||||
QString label = index.data(TransactionTableModel::LabelRole).toString();
|
||||
@ -64,10 +60,10 @@ bool TransactionFilterProxy::filterAcceptsRow(int sourceRow, const QModelIndex &
|
||||
return true;
|
||||
}
|
||||
|
||||
void TransactionFilterProxy::setDateRange(const QDateTime &from, const QDateTime &to)
|
||||
void TransactionFilterProxy::setDateRange(const std::optional<QDateTime>& from, const std::optional<QDateTime>& to)
|
||||
{
|
||||
this->dateFrom = from.toTime_t();
|
||||
this->dateTo = to.toTime_t();
|
||||
dateFrom = from;
|
||||
dateTo = to;
|
||||
invalidateFilter();
|
||||
}
|
||||
|
||||
|
@ -10,6 +10,8 @@
|
||||
#include <QDateTime>
|
||||
#include <QSortFilterProxyModel>
|
||||
|
||||
#include <optional>
|
||||
|
||||
/** Filter the transaction list according to pre-specified rules. */
|
||||
class TransactionFilterProxy : public QSortFilterProxyModel
|
||||
{
|
||||
@ -18,10 +20,6 @@ class TransactionFilterProxy : public QSortFilterProxyModel
|
||||
public:
|
||||
explicit TransactionFilterProxy(QObject *parent = nullptr);
|
||||
|
||||
/** Earliest date that can be represented (far in the past) */
|
||||
static const QDateTime MIN_DATE;
|
||||
/** Last date that can be represented (far in the future) */
|
||||
static const QDateTime MAX_DATE;
|
||||
/** Type filter bit field (all types) */
|
||||
static const quint32 ALL_TYPES = 0xFFFFFFFF;
|
||||
/** Type filter bit field (all types but Darksend-SPAM) */
|
||||
@ -36,7 +34,8 @@ public:
|
||||
WatchOnlyFilter_No
|
||||
};
|
||||
|
||||
void setDateRange(const QDateTime &from, const QDateTime &to);
|
||||
/** Filter transactions between date range. Use std::nullopt for open range. */
|
||||
void setDateRange(const std::optional<QDateTime>& from, const std::optional<QDateTime>& to);
|
||||
void setSearchString(const QString &);
|
||||
/**
|
||||
@note Type filter takes a bit field created with TYPE() or ALL_TYPES
|
||||
@ -57,8 +56,8 @@ protected:
|
||||
bool filterAcceptsRow(int source_row, const QModelIndex & source_parent) const override;
|
||||
|
||||
private:
|
||||
qint64 dateFrom;
|
||||
qint64 dateTo;
|
||||
std::optional<QDateTime> dateFrom;
|
||||
std::optional<QDateTime> dateTo;
|
||||
QString m_search_string;
|
||||
quint32 typeFilter;
|
||||
WatchOnlyFilter watchOnlyFilter;
|
||||
|
@ -694,7 +694,7 @@ QVariant TransactionTableModel::data(const QModelIndex &index, int role) const
|
||||
case TypeRole:
|
||||
return rec->type;
|
||||
case DateRole:
|
||||
return QDateTime::fromTime_t(static_cast<uint>(rec->time));
|
||||
return QDateTime::fromSecsSinceEpoch(rec->time);
|
||||
case DateRoleInt:
|
||||
return qint64(rec->time);
|
||||
case WatchonlyRole:
|
||||
|
@ -20,6 +20,8 @@
|
||||
#include <interfaces/node.h>
|
||||
#include <node/ui_interface.h>
|
||||
|
||||
#include <optional>
|
||||
|
||||
#include <QCalendarWidget>
|
||||
#include <QComboBox>
|
||||
#include <QDateTimeEdit>
|
||||
@ -265,26 +267,26 @@ void TransactionView::chooseDate(int idx)
|
||||
{
|
||||
case All:
|
||||
transactionProxyModel->setDateRange(
|
||||
TransactionFilterProxy::MIN_DATE,
|
||||
TransactionFilterProxy::MAX_DATE);
|
||||
std::nullopt,
|
||||
std::nullopt);
|
||||
break;
|
||||
case Today:
|
||||
transactionProxyModel->setDateRange(
|
||||
GUIUtil::StartOfDay(current),
|
||||
TransactionFilterProxy::MAX_DATE);
|
||||
std::nullopt);
|
||||
break;
|
||||
case ThisWeek: {
|
||||
// Find last Monday
|
||||
QDate startOfWeek = current.addDays(-(current.dayOfWeek()-1));
|
||||
transactionProxyModel->setDateRange(
|
||||
GUIUtil::StartOfDay(startOfWeek),
|
||||
TransactionFilterProxy::MAX_DATE);
|
||||
std::nullopt);
|
||||
|
||||
} break;
|
||||
case ThisMonth:
|
||||
transactionProxyModel->setDateRange(
|
||||
GUIUtil::StartOfDay(QDate(current.year(), current.month(), 1)),
|
||||
TransactionFilterProxy::MAX_DATE);
|
||||
std::nullopt);
|
||||
break;
|
||||
case LastMonth:
|
||||
transactionProxyModel->setDateRange(
|
||||
@ -294,7 +296,7 @@ void TransactionView::chooseDate(int idx)
|
||||
case ThisYear:
|
||||
transactionProxyModel->setDateRange(
|
||||
GUIUtil::StartOfDay(QDate(current.year(), 1, 1)),
|
||||
TransactionFilterProxy::MAX_DATE);
|
||||
std::nullopt);
|
||||
break;
|
||||
case Range:
|
||||
dateRangeWidget->setVisible(true);
|
||||
|
@ -123,7 +123,8 @@ void WalletFrame::setCurrentWallet(WalletModel* wallet_model)
|
||||
walletView->updateGeometry();
|
||||
|
||||
walletStack->setCurrentWidget(walletView);
|
||||
walletView->updateEncryptionStatus();
|
||||
|
||||
Q_EMIT currentWalletSet();
|
||||
}
|
||||
|
||||
void WalletFrame::removeWallet(WalletModel* wallet_model)
|
||||
|
@ -50,6 +50,7 @@ public:
|
||||
|
||||
Q_SIGNALS:
|
||||
void message(const QString& title, const QString& message, unsigned int style);
|
||||
void currentWalletSet();
|
||||
|
||||
void createWalletButtonClicked();
|
||||
|
||||
|
@ -177,10 +177,6 @@ void WalletView::setWalletModel(WalletModel *_walletModel)
|
||||
|
||||
// Handle changes in encryption status
|
||||
connect(_walletModel, &WalletModel::encryptionStatusChanged, this, &WalletView::encryptionStatusChanged);
|
||||
updateEncryptionStatus();
|
||||
|
||||
// update HD status
|
||||
Q_EMIT hdEnabledStatusChanged();
|
||||
|
||||
// Balloon pop-up for new transaction
|
||||
connect(_walletModel->getTransactionTableModel(), &TransactionTableModel::rowsInserted, this, &WalletView::processNewTransaction);
|
||||
@ -304,11 +300,6 @@ void WalletView::showOutOfSyncWarning(bool fShow)
|
||||
overviewPage->showOutOfSyncWarning(fShow);
|
||||
}
|
||||
|
||||
void WalletView::updateEncryptionStatus()
|
||||
{
|
||||
Q_EMIT encryptionStatusChanged();
|
||||
}
|
||||
|
||||
void WalletView::encryptWallet()
|
||||
{
|
||||
if(!walletModel)
|
||||
@ -317,7 +308,7 @@ void WalletView::encryptWallet()
|
||||
dlg.setModel(walletModel);
|
||||
dlg.exec();
|
||||
|
||||
updateEncryptionStatus();
|
||||
Q_EMIT encryptionStatusChanged();
|
||||
}
|
||||
|
||||
void WalletView::backupWallet()
|
||||
|
@ -116,9 +116,6 @@ public Q_SLOTS:
|
||||
/** Show used receiving addresses */
|
||||
void usedReceivingAddresses();
|
||||
|
||||
/** Re-emit encryption status signal */
|
||||
void updateEncryptionStatus();
|
||||
|
||||
/** Show progress dialog e.g. for rescan */
|
||||
void showProgress(const QString &title, int nProgress);
|
||||
|
||||
@ -132,8 +129,6 @@ Q_SIGNALS:
|
||||
void message(const QString &title, const QString &message, unsigned int style);
|
||||
/** Encryption status of wallet changed */
|
||||
void encryptionStatusChanged();
|
||||
/** HD-Enabled status of wallet changed (only possible during startup) */
|
||||
void hdEnabledStatusChanged();
|
||||
/** Notify that a new transaction appeared */
|
||||
void incomingTransaction(const QString& date, int unit, const CAmount& amount, const QString& type, const QString& address, const QString& label, const QString& walletName);
|
||||
/** Notify that the out of sync warning icon has been pressed */
|
||||
|
Loading…
Reference in New Issue
Block a user