aboutsummaryrefslogtreecommitdiff
path: root/src/qt
diff options
context:
space:
mode:
Diffstat (limited to 'src/qt')
-rw-r--r--src/qt/Makefile2
-rw-r--r--src/qt/README.md121
-rw-r--r--src/qt/addressbookpage.cpp35
-rw-r--r--src/qt/addressbookpage.h1
-rw-r--r--src/qt/addresstablemodel.cpp44
-rw-r--r--src/qt/android/AndroidManifest.xml38
-rw-r--r--src/qt/android/build.gradle52
-rw-r--r--src/qt/android/gradle.properties4
-rw-r--r--src/qt/android/res/drawable-hdpi/bitcoin.pngbin0 -> 4536 bytes
-rw-r--r--src/qt/android/res/drawable-ldpi/bitcoin.pngbin0 -> 1697 bytes
-rw-r--r--src/qt/android/res/drawable-mdpi/bitcoin.pngbin0 -> 2558 bytes
-rw-r--r--src/qt/android/res/drawable-xhdpi/bitcoin.pngbin0 -> 6832 bytes
-rw-r--r--src/qt/android/res/drawable-xxhdpi/bitcoin.pngbin0 -> 11479 bytes
-rw-r--r--src/qt/android/res/drawable-xxxhdpi/bitcoin.pngbin0 -> 17034 bytes
-rw-r--r--src/qt/android/src/org/bitcoincore/qt/BitcoinQtActivity.java29
-rw-r--r--src/qt/askpassphrasedialog.cpp2
-rw-r--r--src/qt/bantablemodel.cpp15
-rw-r--r--src/qt/bitcoin.cpp40
-rw-r--r--src/qt/bitcoin.h8
-rw-r--r--src/qt/bitcoin.qrc3
-rw-r--r--src/qt/bitcoinamountfield.cpp2
-rw-r--r--src/qt/bitcoingui.cpp52
-rw-r--r--src/qt/bitcoinstrings.cpp51
-rw-r--r--src/qt/clientmodel.cpp20
-rw-r--r--src/qt/clientmodel.h3
-rw-r--r--src/qt/coincontroldialog.cpp30
-rw-r--r--src/qt/createwalletdialog.cpp10
-rw-r--r--src/qt/editaddressdialog.cpp2
-rw-r--r--src/qt/forms/debugwindow.ui174
-rw-r--r--src/qt/forms/intro.ui53
-rw-r--r--src/qt/forms/modaloverlay.ui18
-rw-r--r--src/qt/forms/optionsdialog.ui100
-rw-r--r--src/qt/forms/overviewpage.ui66
-rw-r--r--src/qt/forms/psbtoperationsdialog.ui2
-rw-r--r--src/qt/forms/receiverequestdialog.ui8
-rw-r--r--src/qt/forms/sendcoinsdialog.ui6
-rw-r--r--src/qt/guiutil.cpp212
-rw-r--r--src/qt/guiutil.h109
-rw-r--r--src/qt/intro.cpp39
-rw-r--r--src/qt/intro.h5
-rw-r--r--src/qt/locale/bitcoin_en.ts906
-rw-r--r--src/qt/locale/bitcoin_en.xlf5688
-rw-r--r--src/qt/modaloverlay.cpp5
-rw-r--r--src/qt/networkstyle.cpp13
-rw-r--r--src/qt/openuridialog.cpp2
-rw-r--r--src/qt/optionsdialog.cpp25
-rw-r--r--src/qt/optionsdialog.h2
-rw-r--r--src/qt/optionsmodel.cpp13
-rw-r--r--src/qt/optionsmodel.h4
-rw-r--r--src/qt/overviewpage.cpp17
-rw-r--r--src/qt/overviewpage.h1
-rw-r--r--src/qt/paymentserver.cpp12
-rw-r--r--src/qt/peertablemodel.cpp105
-rw-r--r--src/qt/peertablemodel.h29
-rw-r--r--src/qt/peertablesortproxy.cpp43
-rw-r--r--src/qt/peertablesortproxy.h25
-rw-r--r--src/qt/platformstyle.cpp17
-rw-r--r--src/qt/psbtoperationsdialog.cpp6
-rw-r--r--src/qt/qrimagewidget.cpp12
-rw-r--r--src/qt/qvaluecombobox.cpp2
-rw-r--r--src/qt/receivecoinsdialog.cpp87
-rw-r--r--src/qt/receivecoinsdialog.h6
-rw-r--r--src/qt/receiverequestdialog.cpp2
-rw-r--r--src/qt/recentrequeststablemodel.cpp2
-rw-r--r--src/qt/res/fonts/RobotoMono-Bold.ttfbin0 -> 87008 bytes
-rw-r--r--src/qt/rpcconsole.cpp166
-rw-r--r--src/qt/rpcconsole.h14
-rw-r--r--src/qt/sendcoinsdialog.cpp45
-rw-r--r--src/qt/sendcoinsdialog.h5
-rw-r--r--src/qt/signverifymessagedialog.cpp2
-rw-r--r--src/qt/test/addressbooktests.cpp2
-rw-r--r--src/qt/test/compattests.cpp25
-rw-r--r--src/qt/test/compattests.h19
-rw-r--r--src/qt/test/rpcnestedtests.cpp29
-rw-r--r--src/qt/test/test_main.cpp12
-rw-r--r--src/qt/test/wallettests.cpp4
-rw-r--r--src/qt/trafficgraphwidget.cpp10
-rw-r--r--src/qt/transactiondescdialog.cpp2
-rw-r--r--src/qt/transactiontablemodel.cpp30
-rw-r--r--src/qt/transactionview.cpp138
-rw-r--r--src/qt/transactionview.h7
-rw-r--r--src/qt/utilitydialog.cpp4
-rw-r--r--src/qt/walletcontroller.cpp4
-rw-r--r--src/qt/walletmodel.cpp7
-rw-r--r--src/qt/walletmodel.h2
-rw-r--r--src/qt/walletview.cpp6
86 files changed, 7596 insertions, 1317 deletions
diff --git a/src/qt/Makefile b/src/qt/Makefile
index b9dcf0c599..3bd6199059 100644
--- a/src/qt/Makefile
+++ b/src/qt/Makefile
@@ -7,3 +7,5 @@ check: FORCE
$(MAKE) -C .. test_bitcoin_qt_check
bitcoin-qt bitcoin-qt.exe: FORCE
$(MAKE) -C .. bitcoin_qt
+apk: FORCE
+ $(MAKE) -C .. bitcoin_qt_apk
diff --git a/src/qt/README.md b/src/qt/README.md
index 30c68db15b..20c712c98d 100644
--- a/src/qt/README.md
+++ b/src/qt/README.md
@@ -1,10 +1,12 @@
-This directory contains the BitcoinQT graphical user interface (GUI). It uses the cross-platform framework [Qt](https://www1.qt.io/developers/).
+This directory contains the source code for the Bitcoin Core graphical user interface (GUI). It uses the [Qt](https://www1.qt.io/developers/) cross-platform framework.
The current precise version for Qt 5 is specified in [qt.mk](/depends/packages/qt.mk).
## Compile and run
-See build instructions ([macOS](/doc/build-osx.md), [Windows](/doc/build-windows.md), [Unix](/doc/build-unix.md), etc).
+See build instructions: [Unix](/doc/build-unix.md), [macOS](/doc/build-osx.md), [Windows](/doc/build-windows.md), [FreeBSD](/doc/build-freebsd.md), [NetBSD](/doc/build-netbsd.md), [OpenBSD](/doc/build-openbsd.md)
+
+When following your systems build instructions, make sure to install the `Qt` dependencies.
To run:
@@ -12,84 +14,111 @@ To run:
./src/qt/bitcoin-qt
```
-## Files and directories
-
-### forms
+## Files and Directories
-Contains [Designer UI](https://doc.qt.io/qt-5.9/designer-using-a-ui-file.html) files. They are created with [Qt Creator](#using-qt-creator-as-ide), but can be edited using any text editor.
+#### forms/
-### locale
+- A directory that contains [Designer UI](https://doc.qt.io/qt-5.9/designer-using-a-ui-file.html) files. These files specify the characteristics of form elements in XML. Qt UI files can be edited with [Qt Creator](#using-qt-creator-as-ide) or using any text editor.
-Contains translations. They are periodically updated. The process is described [here](/doc/translation_process.md).
+#### locale/
-### res
+- Contains translations. They are periodically updated and an effort is made to support as many languages as possible. The process of contributing translations is described in [doc/translation_process.md](/doc/translation_process.md).
-Resources such as the icon.
+#### res/
-### test
+ - Contains graphical resources used to enhance the UI experience.
-Tests.
+#### test/
-### bitcoingui.(h/cpp)
+- Functional tests used to ensure proper functionality of the GUI. Significant changes to the GUI code normally require new or updated tests.
-Represents the main window of the Bitcoin UI.
+#### bitcoingui.(h/cpp)
-### \*model.(h/cpp)
+- Represents the main window of the Bitcoin UI.
-The model. When it has a corresponding controller, it generally inherits from [QAbstractTableModel](https://doc.qt.io/qt-5/qabstracttablemodel.html). Models that are used by controllers as helpers inherit from other Qt classes like [QValidator](https://doc.qt.io/qt-5/qvalidator.html).
+#### \*model.(h/cpp)
-ClientModel is used by the main application `bitcoingui` and several models like `peertablemodel`.
+- The model. When it has a corresponding controller, it generally inherits from [QAbstractTableModel](https://doc.qt.io/qt-5/qabstracttablemodel.html). Models that are used by controllers as helpers inherit from other Qt classes like [QValidator](https://doc.qt.io/qt-5/qvalidator.html).
+- ClientModel is used by the main application `bitcoingui` and several models like `peertablemodel`.
-### \*page.(h/cpp)
+#### \*page.(h/cpp)
-A controller. `:NAMEpage.cpp` generally includes `:NAMEmodel.h` and `forms/:NAME.page.ui` with a similar `:NAME`.
+- A controller. `:NAMEpage.cpp` generally includes `:NAMEmodel.h` and `forms/:NAME.page.ui` with a similar `:NAME`.
-### \*dialog.(h/cpp)
+#### \*dialog.(h/cpp)
-Various dialogs, e.g. to open a URL. Inherit from [QDialog](https://doc.qt.io/qt-5/qdialog.html).
+- Various dialogs, e.g. to open a URL. Inherit from [QDialog](https://doc.qt.io/qt-5/qdialog.html).
-### paymentserver.(h/cpp)
+#### paymentserver.(h/cpp)
-Used to process BIP21 payment URI requests. Also handles URI based application switching (e.g. when following a bitcoin:... link from a browser).
+- (Deprecated) Used to process BIP21 payment URI requests. Also handles URI-based application switching (e.g. when following a bitcoin:... link from a browser).
-### walletview.(h/cpp)
+#### walletview.(h/cpp)
-Represents the view to a single wallet.
+- Represents the view to a single wallet.
-### Other .h/cpp files
+#### Other .h/cpp files
* UI elements like BitcoinAmountField, which inherit from QWidget.
* `bitcoinstrings.cpp`: automatically generated
-* `bitcoinunits.(h/cpp)`: BTC / mBTC / etc handling
+* `bitcoinunits.(h/cpp)`: BTC / mBTC / etc. handling
* `callback.h`
-* `guiconstants.h`: UI colors, app name, etc
+* `guiconstants.h`: UI colors, app name, etc.
* `guiutil.h`: several helper functions
* `macdockiconhandler.(h/mm)`: macOS dock icon handler
* `macnotificationhandler.(h/mm)`: display notifications in macOS
## Contribute
-See [CONTRIBUTING.md](/CONTRIBUTING.md) for general guidelines. Specifically for Qt:
+See [CONTRIBUTING.md](/CONTRIBUTING.md) for general guidelines.
+
+**Note:** Do not change `local/bitcoin_en.ts`. It is updated [automatically](/doc/translation_process.md#writing-code-with-translations).
+
+## Using Qt Creator as an IDE
+
+[Qt Creator](https://www.qt.io/product/development-tools) is a powerful tool which packages a UI designer tool (Qt Designer) and a C++ IDE into one application. This is especially useful if you want to change the UI layout.
+
+#### Download Qt Creator
+
+On Unix and macOS, Qt Creator can be installed through your package manager. Alternatively, you can download a binary from the [Qt Website](https://www.qt.io/download/).
+
+**Note:** If installing from a binary grabbed from the Qt Website: During the installation process, uncheck everything except for `Qt Creator`.
+
+##### macOS
+
+```sh
+brew install qt-creator
+```
+
+##### Ubuntu & Debian
+
+```sh
+sudo apt-get install qtcreator
+```
+
+#### Setup Qt Creator
-* don't change `local/bitcoin_en.ts`; this happens [automatically](/doc/translation_process.md#writing-code-with-translations)
+1. Make sure you've installed all dependencies specified in your systems build instructions
+2. Follow the compile instructions for your system, run `./configure` with the `--enable-debug` flag
+3. Start Qt Creator. At the start page, do: `New` -> `Import Project` -> `Import Existing Project`
+4. Enter `bitcoin-qt` as the Project Name and enter the absolute path to `src/qt` as Location
+5. Check over the file selection, you may need to select the `forms` directory (necessary if you intend to edit *.ui files)
+6. Confirm the `Summary` page
+7. In the `Projects` tab, select `Manage Kits...`
-## Using Qt Creator as IDE
+ **macOS**
+ - Under `Kits`: select the default "Desktop" kit
+ - Under `Compilers`: select `"Clang (x86 64bit in /usr/bin)"`
+ - Under `Debuggers`: select `"LLDB"` as debugger (you might need to set the path to your LLDB installation)
-You can use Qt Creator as an IDE. This is especially useful if you want to change
-the UI layout.
+ **Ubuntu & Debian**
-Download and install the community edition of [Qt Creator](https://www.qt.io/download/).
-Uncheck everything except Qt Creator during the installation process.
+ Note: Some of these options may already be set
-Instructions for macOS:
+ - Under `Kits`: select the default "Desktop" kit
+ - Under `Compilers`: select `"GCC (x86 64bit in /usr/bin)"`
+ - Under `Debuggers`: select `"GDB"` as debugger
-1. Make sure you installed everything through Homebrew mentioned in the [macOS build instructions](/doc/build-osx.md)
-2. Use `./configure` with the `--enable-debug` flag
-3. In Qt Creator do "New Project" -> Import Project -> Import Existing Project
-4. Enter "bitcoin-qt" as project name, enter src/qt as location
-5. Leave the file selection as it is
-6. Confirm the "summary page"
-7. In the "Projects" tab select "Manage Kits..."
-8. Select the default "Desktop" kit and select "Clang (x86 64bit in /usr/bin)" as compiler
-9. Select LLDB as debugger (you might need to set the path to your installation)
-10. Start debugging with Qt Creator (you might need to the executable to "bitcoin-qt" under "Run", which is where you can also add command line arguments)
+8. While in the `Projects` tab, ensure that you have the `bitcoin-qt` executable specified under `Run`
+ - If the executable is not specified: click `"Choose..."`, navigate to `src/qt`, and select `bitcoin-qt`
+9. You're all set! Start developing, building, and debugging the Bitcoin Core GUI
diff --git a/src/qt/addressbookpage.cpp b/src/qt/addressbookpage.cpp
index 0fa52359a8..a816a0764c 100644
--- a/src/qt/addressbookpage.cpp
+++ b/src/qt/addressbookpage.cpp
@@ -56,7 +56,7 @@ protected:
};
AddressBookPage::AddressBookPage(const PlatformStyle *platformStyle, Mode _mode, Tabs _tab, QWidget *parent) :
- QDialog(parent),
+ QDialog(parent, GUIUtil::dialog_flags),
ui(new Ui::AddressBookPage),
model(nullptr),
mode(_mode),
@@ -112,29 +112,17 @@ AddressBookPage::AddressBookPage(const PlatformStyle *platformStyle, Mode _mode,
break;
}
- // Context menu actions
- QAction *copyAddressAction = new QAction(tr("&Copy Address"), this);
- QAction *copyLabelAction = new QAction(tr("Copy &Label"), this);
- QAction *editAction = new QAction(tr("&Edit"), this);
- deleteAction = new QAction(ui->deleteAddress->text(), this);
-
// Build context menu
contextMenu = new QMenu(this);
- contextMenu->addAction(copyAddressAction);
- contextMenu->addAction(copyLabelAction);
- contextMenu->addAction(editAction);
- if(tab == SendingTab)
- contextMenu->addAction(deleteAction);
- contextMenu->addSeparator();
-
- // Connect signals for context menu actions
- connect(copyAddressAction, &QAction::triggered, this, &AddressBookPage::on_copyAddress_clicked);
- connect(copyLabelAction, &QAction::triggered, this, &AddressBookPage::onCopyLabelAction);
- connect(editAction, &QAction::triggered, this, &AddressBookPage::onEditAction);
- connect(deleteAction, &QAction::triggered, this, &AddressBookPage::on_deleteAddress_clicked);
+ contextMenu->addAction(tr("Copy Address"), this, &AddressBookPage::on_copyAddress_clicked);
+ contextMenu->addAction(tr("Copy Label"), this, &AddressBookPage::onCopyLabelAction);
+ contextMenu->addAction(tr("Edit"), this, &AddressBookPage::onEditAction);
- connect(ui->tableView, &QWidget::customContextMenuRequested, this, &AddressBookPage::contextualMenu);
+ if (tab == SendingTab) {
+ contextMenu->addAction(tr("Delete"), this, &AddressBookPage::on_deleteAddress_clicked);
+ }
+ connect(ui->tableView, &QWidget::customContextMenuRequested, this, &AddressBookPage::contextualMenu);
connect(ui->closeButton, &QPushButton::clicked, this, &QDialog::accept);
GUIUtil::handleCloseWindowShortcut(this);
@@ -249,13 +237,11 @@ void AddressBookPage::selectionChanged()
// In sending tab, allow deletion of selection
ui->deleteAddress->setEnabled(true);
ui->deleteAddress->setVisible(true);
- deleteAction->setEnabled(true);
break;
case ReceivingTab:
// Deleting receiving addresses, however, is not allowed
ui->deleteAddress->setEnabled(false);
ui->deleteAddress->setVisible(false);
- deleteAction->setEnabled(false);
break;
}
ui->copyAddress->setEnabled(true);
@@ -295,7 +281,7 @@ void AddressBookPage::on_exportButton_clicked()
// CSV is currently the only supported format
QString filename = GUIUtil::getSaveFileName(this,
tr("Export Address List"), QString(),
- tr("Comma separated file (*.csv)"), nullptr);
+ tr("Comma separated file", "Name of CSV file format") + QLatin1String(" (*.csv)"), nullptr);
if (filename.isNull())
return;
@@ -309,7 +295,8 @@ void AddressBookPage::on_exportButton_clicked()
if(!writer.write()) {
QMessageBox::critical(this, tr("Exporting Failed"),
- tr("There was an error trying to save the address list to %1. Please try again.").arg(filename));
+ //: %1 is a name of the file (e.g., "addrbook.csv") that the bitcoin addresses were exported to.
+ tr("There was an error trying to save the address list to %1. Please try again.", "An error message.").arg(filename));
}
}
diff --git a/src/qt/addressbookpage.h b/src/qt/addressbookpage.h
index c6a364ccbd..93feac9e23 100644
--- a/src/qt/addressbookpage.h
+++ b/src/qt/addressbookpage.h
@@ -55,7 +55,6 @@ private:
QString returnValue;
AddressBookSortFilterProxyModel *proxyModel;
QMenu *contextMenu;
- QAction *deleteAction; // to be able to explicitly disable it
QString newAddressToSelect;
private Q_SLOTS:
diff --git a/src/qt/addresstablemodel.cpp b/src/qt/addresstablemodel.cpp
index bb444f22b3..ee2462ed74 100644
--- a/src/qt/addresstablemodel.cpp
+++ b/src/qt/addresstablemodel.cpp
@@ -198,42 +198,38 @@ QVariant AddressTableModel::data(const QModelIndex &index, int role) const
AddressTableEntry *rec = static_cast<AddressTableEntry*>(index.internalPointer());
- if(role == Qt::DisplayRole || role == Qt::EditRole)
- {
- switch(index.column())
- {
+ const auto column = static_cast<ColumnIndex>(index.column());
+ if (role == Qt::DisplayRole || role == Qt::EditRole) {
+ switch (column) {
case Label:
- if(rec->label.isEmpty() && role == Qt::DisplayRole)
- {
+ if (rec->label.isEmpty() && role == Qt::DisplayRole) {
return tr("(no label)");
- }
- else
- {
+ } else {
return rec->label;
}
case Address:
return rec->address;
- }
- }
- else if (role == Qt::FontRole)
- {
- QFont font;
- if(index.column() == Address)
- {
- font = GUIUtil::fixedPitchFont();
- }
- return font;
- }
- else if (role == TypeRole)
- {
+ } // no default case, so the compiler can warn about missing cases
+ assert(false);
+ } else if (role == Qt::FontRole) {
+ switch (column) {
+ case Label:
+ return QFont();
+ case Address:
+ return GUIUtil::fixedPitchFont();
+ } // no default case, so the compiler can warn about missing cases
+ assert(false);
+ } else if (role == TypeRole) {
switch(rec->type)
{
case AddressTableEntry::Sending:
return Send;
case AddressTableEntry::Receiving:
return Receive;
- default: break;
- }
+ case AddressTableEntry::Hidden:
+ return {};
+ } // no default case, so the compiler can warn about missing cases
+ assert(false);
}
return QVariant();
}
diff --git a/src/qt/android/AndroidManifest.xml b/src/qt/android/AndroidManifest.xml
new file mode 100644
index 0000000000..abb88fe89d
--- /dev/null
+++ b/src/qt/android/AndroidManifest.xml
@@ -0,0 +1,38 @@
+<?xml version='1.0' encoding='utf-8'?>
+<manifest package="org.bitcoincore.qt" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.0" android:versionCode="1" android:installLocation="auto">
+ <uses-sdk android:targetSdkVersion="24"/>
+
+ <uses-permission android:name="android.permission.INTERNET" />
+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+
+ <uses-feature android:glEsVersion="0x00020000" android:required="true" />
+
+ <supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>
+
+ <application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="Bitcoin Core">
+ <activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density"
+ android:name="org.bitcoincore.qt.BitcoinQtActivity"
+ android:label="Bitcoin Core"
+ android:icon="@drawable/bitcoin"
+ android:screenOrientation="unspecified"
+ android:launchMode="singleTop">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN"/>
+ <category android:name="android.intent.category.LAUNCHER"/>
+ </intent-filter>
+
+ <meta-data android:name="android.app.arguments" android:value="-testnet"/>
+ <meta-data android:name="android.app.lib_name" android:value="bitcoin-qt"/>
+ <meta-data android:name="android.app.repository" android:value="default"/>
+ <meta-data android:name="android.app.bundle_local_qt_libs" android:value="1"/>
+ <meta-data android:name="android.app.use_local_qt_libs" android:value="1"/>
+ <meta-data android:name="android.app.libs_prefix" android:value="/data/local/tmp/qt/"/>
+ <meta-data android:name="android.app.system_libs_prefix" android:value="/system/lib/"/>
+ <meta-data android:name="android.app.background_running" android:value="true"/>
+ <meta-data android:name="android.app.auto_screen_scale_factor" android:value="true"/>
+ <meta-data android:name="android.app.extract_android_style" android:value="default"/>
+ </activity>
+
+ </application>
+</manifest>
diff --git a/src/qt/android/build.gradle b/src/qt/android/build.gradle
new file mode 100644
index 0000000000..4c36e79db8
--- /dev/null
+++ b/src/qt/android/build.gradle
@@ -0,0 +1,52 @@
+buildscript {
+ repositories {
+ google()
+ jcenter()
+ }
+
+ dependencies {
+ classpath 'com.android.tools.build:gradle:3.1.0'
+ }
+}
+
+repositories {
+ google()
+ jcenter()
+}
+
+apply plugin: 'com.android.application'
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+}
+
+android {
+ compileSdkVersion androidCompileSdkVersion.toInteger()
+
+ buildToolsVersion androidBuildToolsVersion
+
+ sourceSets {
+ main {
+ manifest.srcFile 'AndroidManifest.xml'
+ java.srcDirs = [qt5AndroidDir + '/src', 'src', 'java']
+ aidl.srcDirs = [qt5AndroidDir + '/src', 'src', 'aidl']
+ res.srcDirs = [qt5AndroidDir + '/res', 'res']
+ resources.srcDirs = ['src']
+ renderscript.srcDirs = ['src']
+ assets.srcDirs = ['assets']
+ jniLibs.srcDirs = ['libs']
+ }
+ }
+
+ lintOptions {
+ abortOnError false
+ }
+
+ dexOptions {
+ javaMaxHeapSize '4g'
+ }
+
+ defaultConfig {
+ minSdkVersion 24
+ }
+}
diff --git a/src/qt/android/gradle.properties b/src/qt/android/gradle.properties
new file mode 100644
index 0000000000..838870f62d
--- /dev/null
+++ b/src/qt/android/gradle.properties
@@ -0,0 +1,4 @@
+androidBuildToolsVersion=28.0.3
+androidCompileSdkVersion=28
+qt5AndroidDir=new File(".").absolutePath
+org.gradle.jvmargs=-Xmx4608M
diff --git a/src/qt/android/res/drawable-hdpi/bitcoin.png b/src/qt/android/res/drawable-hdpi/bitcoin.png
new file mode 100644
index 0000000000..31a556a35f
--- /dev/null
+++ b/src/qt/android/res/drawable-hdpi/bitcoin.png
Binary files differ
diff --git a/src/qt/android/res/drawable-ldpi/bitcoin.png b/src/qt/android/res/drawable-ldpi/bitcoin.png
new file mode 100644
index 0000000000..76d80d4196
--- /dev/null
+++ b/src/qt/android/res/drawable-ldpi/bitcoin.png
Binary files differ
diff --git a/src/qt/android/res/drawable-mdpi/bitcoin.png b/src/qt/android/res/drawable-mdpi/bitcoin.png
new file mode 100644
index 0000000000..c2aeab851a
--- /dev/null
+++ b/src/qt/android/res/drawable-mdpi/bitcoin.png
Binary files differ
diff --git a/src/qt/android/res/drawable-xhdpi/bitcoin.png b/src/qt/android/res/drawable-xhdpi/bitcoin.png
new file mode 100644
index 0000000000..2bd5e3defc
--- /dev/null
+++ b/src/qt/android/res/drawable-xhdpi/bitcoin.png
Binary files differ
diff --git a/src/qt/android/res/drawable-xxhdpi/bitcoin.png b/src/qt/android/res/drawable-xxhdpi/bitcoin.png
new file mode 100644
index 0000000000..d236cf2132
--- /dev/null
+++ b/src/qt/android/res/drawable-xxhdpi/bitcoin.png
Binary files differ
diff --git a/src/qt/android/res/drawable-xxxhdpi/bitcoin.png b/src/qt/android/res/drawable-xxxhdpi/bitcoin.png
new file mode 100644
index 0000000000..bb1dbc3554
--- /dev/null
+++ b/src/qt/android/res/drawable-xxxhdpi/bitcoin.png
Binary files differ
diff --git a/src/qt/android/src/org/bitcoincore/qt/BitcoinQtActivity.java b/src/qt/android/src/org/bitcoincore/qt/BitcoinQtActivity.java
new file mode 100644
index 0000000000..cf3b4f6668
--- /dev/null
+++ b/src/qt/android/src/org/bitcoincore/qt/BitcoinQtActivity.java
@@ -0,0 +1,29 @@
+package org.bitcoincore.qt;
+
+import android.os.Bundle;
+import android.system.ErrnoException;
+import android.system.Os;
+
+import org.qtproject.qt5.android.bindings.QtActivity;
+
+import java.io.File;
+
+public class BitcoinQtActivity extends QtActivity
+{
+ @Override
+ public void onCreate(Bundle savedInstanceState)
+ {
+ final File bitcoinDir = new File(getFilesDir().getAbsolutePath() + "/.bitcoin");
+ if (!bitcoinDir.exists()) {
+ bitcoinDir.mkdir();
+ }
+
+ try {
+ Os.setenv("QT_QPA_PLATFORM", "android", true);
+ } catch (ErrnoException e) {
+ e.printStackTrace();
+ }
+
+ super.onCreate(savedInstanceState);
+ }
+}
diff --git a/src/qt/askpassphrasedialog.cpp b/src/qt/askpassphrasedialog.cpp
index c2349b78f9..5b1330b81b 100644
--- a/src/qt/askpassphrasedialog.cpp
+++ b/src/qt/askpassphrasedialog.cpp
@@ -20,7 +20,7 @@
#include <QPushButton>
AskPassphraseDialog::AskPassphraseDialog(Mode _mode, QWidget *parent, SecureString* passphrase_out) :
- QDialog(parent),
+ QDialog(parent, GUIUtil::dialog_flags),
ui(new Ui::AskPassphraseDialog),
mode(_mode),
model(nullptr),
diff --git a/src/qt/bantablemodel.cpp b/src/qt/bantablemodel.cpp
index a01a7bc386..6cb4a4c546 100644
--- a/src/qt/bantablemodel.cpp
+++ b/src/qt/bantablemodel.cpp
@@ -23,15 +23,13 @@ bool BannedNodeLessThan::operator()(const CCombinedBan& left, const CCombinedBan
if (order == Qt::DescendingOrder)
std::swap(pLeft, pRight);
- switch(column)
- {
+ switch (static_cast<BanTableModel::ColumnIndex>(column)) {
case BanTableModel::Address:
return pLeft->subnet.ToString().compare(pRight->subnet.ToString()) < 0;
case BanTableModel::Bantime:
return pLeft->banEntry.nBanUntil < pRight->banEntry.nBanUntil;
- }
-
- return false;
+ } // no default case, so the compiler can warn about missing cases
+ assert(false);
}
// private implementation
@@ -119,16 +117,17 @@ QVariant BanTableModel::data(const QModelIndex &index, int role) const
CCombinedBan *rec = static_cast<CCombinedBan*>(index.internalPointer());
+ const auto column = static_cast<ColumnIndex>(index.column());
if (role == Qt::DisplayRole) {
- switch(index.column())
- {
+ switch (column) {
case Address:
return QString::fromStdString(rec->subnet.ToString());
case Bantime:
QDateTime date = QDateTime::fromMSecsSinceEpoch(0);
date = date.addSecs(rec->banEntry.nBanUntil);
return QLocale::system().toString(date, QLocale::LongFormat);
- }
+ } // no default case, so the compiler can warn about missing cases
+ assert(false);
}
return QVariant();
diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp
index 8efb0e35d0..686772e6bb 100644
--- a/src/qt/bitcoin.cpp
+++ b/src/qt/bitcoin.cpp
@@ -44,10 +44,13 @@
#include <QApplication>
#include <QDebug>
+#include <QFontDatabase>
+#include <QLatin1String>
#include <QLibraryInfo>
#include <QLocale>
#include <QMessageBox>
#include <QSettings>
+#include <QStringBuilder>
#include <QThread>
#include <QTimer>
#include <QTranslator>
@@ -60,6 +63,7 @@ Q_IMPORT_PLUGIN(QXcbIntegrationPlugin);
Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin);
#elif defined(QT_QPA_PLATFORM_COCOA)
Q_IMPORT_PLUGIN(QCocoaIntegrationPlugin);
+Q_IMPORT_PLUGIN(QMacStylePlugin);
#endif
#endif
@@ -315,11 +319,9 @@ void BitcoinApplication::parameterSetup()
InitParameterInteraction(gArgs);
}
-void BitcoinApplication::InitializePruneSetting(bool prune)
+void BitcoinApplication::InitPruneSetting(int64_t prune_MiB)
{
- // If prune is set, intentionally override existing prune size with
- // the default size since this is called when choosing a new datadir.
- optionsModel->SetPruneTargetGB(prune ? DEFAULT_PRUNE_TARGET_GB : 0, true);
+ optionsModel->SetPruneTargetGB(PruneMiBtoGB(prune_MiB), true);
}
void BitcoinApplication::requestInitialize()
@@ -415,10 +417,23 @@ void BitcoinApplication::shutdownResult()
void BitcoinApplication::handleRunawayException(const QString &message)
{
- QMessageBox::critical(nullptr, "Runaway exception", BitcoinGUI::tr("A fatal error occurred. %1 can no longer continue safely and will quit.").arg(PACKAGE_NAME) + QString("<br><br>") + message);
+ QMessageBox::critical(
+ nullptr, tr("Runaway exception"),
+ tr("A fatal error occurred. %1 can no longer continue safely and will quit.").arg(PACKAGE_NAME) %
+ QLatin1String("<br><br>") % GUIUtil::MakeHtmlLink(message, PACKAGE_BUGREPORT));
::exit(EXIT_FAILURE);
}
+void BitcoinApplication::handleNonFatalException(const QString& message)
+{
+ assert(QThread::currentThread() == thread());
+ QMessageBox::warning(
+ nullptr, tr("Internal error"),
+ tr("An internal error occurred. %1 will attempt to continue safely. This is "
+ "an unexpected bug which can be reported as described below.").arg(PACKAGE_NAME) %
+ QLatin1String("<br><br>") % GUIUtil::MakeHtmlLink(message, PACKAGE_BUGREPORT));
+}
+
WId BitcoinApplication::getMainWinId() const
{
if (!window)
@@ -462,11 +477,16 @@ int GuiMain(int argc, char* argv[])
// Generate high-dpi pixmaps
QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
-#if QT_VERSION >= 0x050600
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
+
+#if defined(QT_QPA_PLATFORM_ANDROID)
+ QApplication::setAttribute(Qt::AA_DontUseNativeMenuBar);
+ QApplication::setAttribute(Qt::AA_DontCreateNativeWidgetSiblings);
+ QApplication::setAttribute(Qt::AA_DontUseNativeDialogs);
#endif
BitcoinApplication app;
+ QFontDatabase::addApplicationFont(":/fonts/monospace");
/// 2. Parse command-line options. We do this after qt in order to show an error if there are problems parsing these
// Command-line options take precedence:
@@ -511,9 +531,9 @@ int GuiMain(int argc, char* argv[])
/// 5. Now that settings and translations are available, ask user for data directory
// User language is set up: pick a data directory
bool did_show_intro = false;
- bool prune = false; // Intro dialog prune check box
+ int64_t prune_MiB = 0; // Intro dialog prune configuration
// Gracefully exit if the user cancels
- if (!Intro::showIfNeeded(did_show_intro, prune)) return EXIT_SUCCESS;
+ if (!Intro::showIfNeeded(did_show_intro, prune_MiB)) return EXIT_SUCCESS;
/// 6. Determine availability of data directory and parse bitcoin.conf
/// - Do not call GetDataDir(true) before this step finishes
@@ -595,7 +615,7 @@ int GuiMain(int argc, char* argv[])
if (did_show_intro) {
// Store intro dialog settings other than datadir (network specific)
- app.InitializePruneSetting(prune);
+ app.InitPruneSetting(prune_MiB);
}
if (gArgs.GetBoolArg("-splash", DEFAULT_SPLASHSCREEN) && !gArgs.GetBoolArg("-min", false))
@@ -613,7 +633,7 @@ int GuiMain(int argc, char* argv[])
if (app.baseInitialize()) {
app.requestInitialize();
#if defined(Q_OS_WIN)
- WinShutdownMonitor::registerShutdownBlockReason(QObject::tr("%1 didn't yet exit safely...").arg(PACKAGE_NAME), (HWND)app.getMainWinId());
+ WinShutdownMonitor::registerShutdownBlockReason(QObject::tr("%1 didn't yet exit safely…").arg(PACKAGE_NAME), (HWND)app.getMainWinId());
#endif
app.exec();
app.requestShutdown();
diff --git a/src/qt/bitcoin.h b/src/qt/bitcoin.h
index 69e0a5921e..f9fab0534b 100644
--- a/src/qt/bitcoin.h
+++ b/src/qt/bitcoin.h
@@ -68,7 +68,7 @@ public:
/// Create options model
void createOptionsModel(bool resetSettings);
/// Initialize prune setting
- void InitializePruneSetting(bool prune);
+ void InitPruneSetting(int64_t prune_MiB);
/// Create main window
void createWindow(const NetworkStyle *networkStyle);
/// Create splash screen
@@ -99,6 +99,12 @@ public Q_SLOTS:
/// Handle runaway exceptions. Shows a message box with the problem and quits the program.
void handleRunawayException(const QString &message);
+ /**
+ * A helper function that shows a message box
+ * with details about a non-fatal exception.
+ */
+ void handleNonFatalException(const QString& message);
+
Q_SIGNALS:
void requestedInitialize();
void requestedShutdown();
diff --git a/src/qt/bitcoin.qrc b/src/qt/bitcoin.qrc
index 7115459808..fed373e551 100644
--- a/src/qt/bitcoin.qrc
+++ b/src/qt/bitcoin.qrc
@@ -83,4 +83,7 @@
<file alias="spinner-034">res/animation/spinner-034.png</file>
<file alias="spinner-035">res/animation/spinner-035.png</file>
</qresource>
+ <qresource prefix="/fonts">
+ <file alias="monospace">res/fonts/RobotoMono-Bold.ttf</file>
+ </qresource>
</RCC>
diff --git a/src/qt/bitcoinamountfield.cpp b/src/qt/bitcoinamountfield.cpp
index 2af3502be3..ba59bcc660 100644
--- a/src/qt/bitcoinamountfield.cpp
+++ b/src/qt/bitcoinamountfield.cpp
@@ -239,7 +239,7 @@ BitcoinAmountField::BitcoinAmountField(QWidget *parent) :
// If one if the widgets changes, the combined content changes as well
connect(amount, &AmountSpinBox::valueChanged, this, &BitcoinAmountField::valueChanged);
- connect(unit, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &BitcoinAmountField::unitChanged);
+ connect(unit, qOverload<int>(&QComboBox::currentIndexChanged), this, &BitcoinAmountField::unitChanged);
// Set default based on configuration
unitChanged(unit->currentIndex());
diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp
index ccc0a6828c..17fffe2087 100644
--- a/src/qt/bitcoingui.cpp
+++ b/src/qt/bitcoingui.cpp
@@ -88,6 +88,8 @@ BitcoinGUI::BitcoinGUI(interfaces::Node& node, const PlatformStyle *_platformSty
move(QGuiApplication::primaryScreen()->availableGeometry().center() - frameGeometry().center());
}
+ setContextMenuPolicy(Qt::PreventContextMenu);
+
#ifdef ENABLE_WALLET
enableWallet = WalletModel::isWalletEnabled();
#endif // ENABLE_WALLET
@@ -306,27 +308,27 @@ void BitcoinGUI::createActions()
aboutQtAction = new QAction(tr("About &Qt"), this);
aboutQtAction->setStatusTip(tr("Show information about Qt"));
aboutQtAction->setMenuRole(QAction::AboutQtRole);
- optionsAction = new QAction(tr("&Options..."), this);
+ optionsAction = new QAction(tr("&Options…"), this);
optionsAction->setStatusTip(tr("Modify configuration options for %1").arg(PACKAGE_NAME));
optionsAction->setMenuRole(QAction::PreferencesRole);
optionsAction->setEnabled(false);
toggleHideAction = new QAction(tr("&Show / Hide"), this);
toggleHideAction->setStatusTip(tr("Show or hide the main Window"));
- encryptWalletAction = new QAction(tr("&Encrypt Wallet..."), this);
+ encryptWalletAction = new QAction(tr("&Encrypt Wallet…"), this);
encryptWalletAction->setStatusTip(tr("Encrypt the private keys that belong to your wallet"));
encryptWalletAction->setCheckable(true);
- backupWalletAction = new QAction(tr("&Backup Wallet..."), this);
+ backupWalletAction = new QAction(tr("&Backup Wallet…"), this);
backupWalletAction->setStatusTip(tr("Backup wallet to another location"));
- changePassphraseAction = new QAction(tr("&Change Passphrase..."), this);
+ changePassphraseAction = new QAction(tr("&Change Passphrase…"), this);
changePassphraseAction->setStatusTip(tr("Change the passphrase used for wallet encryption"));
- signMessageAction = new QAction(tr("Sign &message..."), this);
+ signMessageAction = new QAction(tr("Sign &message…"), this);
signMessageAction->setStatusTip(tr("Sign messages with your Bitcoin addresses to prove you own them"));
- verifyMessageAction = new QAction(tr("&Verify message..."), this);
+ verifyMessageAction = new QAction(tr("&Verify message…"), this);
verifyMessageAction->setStatusTip(tr("Verify messages to ensure they were signed with specified Bitcoin addresses"));
- m_load_psbt_action = new QAction(tr("&Load PSBT from file..."), this);
+ m_load_psbt_action = new QAction(tr("&Load PSBT from file…"), this);
m_load_psbt_action->setStatusTip(tr("Load Partially Signed Bitcoin Transaction"));
- m_load_psbt_clipboard_action = new QAction(tr("Load PSBT from clipboard..."), this);
+ m_load_psbt_clipboard_action = new QAction(tr("Load PSBT from clipboard…"), this);
m_load_psbt_clipboard_action->setStatusTip(tr("Load Partially Signed Bitcoin Transaction from clipboard"));
openRPCConsoleAction = new QAction(tr("Node window"), this);
@@ -340,7 +342,7 @@ void BitcoinGUI::createActions()
usedReceivingAddressesAction = new QAction(tr("&Receiving addresses"), this);
usedReceivingAddressesAction->setStatusTip(tr("Show the list of used receiving addresses and labels"));
- openAction = new QAction(tr("Open &URI..."), this);
+ openAction = new QAction(tr("Open &URI…"), this);
openAction->setStatusTip(tr("Open a bitcoin: URI"));
m_open_wallet_action = new QAction(tr("Open Wallet"), this);
@@ -348,14 +350,14 @@ void BitcoinGUI::createActions()
m_open_wallet_action->setStatusTip(tr("Open a wallet"));
m_open_wallet_menu = new QMenu(this);
- m_close_wallet_action = new QAction(tr("Close Wallet..."), this);
+ m_close_wallet_action = new QAction(tr("Close Wallet…"), this);
m_close_wallet_action->setStatusTip(tr("Close wallet"));
- m_create_wallet_action = new QAction(tr("Create Wallet..."), this);
+ m_create_wallet_action = new QAction(tr("Create Wallet…"), this);
m_create_wallet_action->setEnabled(false);
m_create_wallet_action->setStatusTip(tr("Create a new wallet"));
- m_close_all_wallets_action = new QAction(tr("Close All Wallets..."), this);
+ m_close_all_wallets_action = new QAction(tr("Close All Wallets…"), this);
m_close_all_wallets_action->setStatusTip(tr("Close all wallets"));
showHelpMessageAction = new QAction(tr("&Command-line options"), this);
@@ -544,7 +546,6 @@ void BitcoinGUI::createToolBars()
{
QToolBar *toolbar = addToolBar(tr("Tabs toolbar"));
appToolBar = toolbar;
- toolbar->setContextMenuPolicy(Qt::PreventContextMenu);
toolbar->setMovable(false);
toolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
toolbar->addAction(overviewAction);
@@ -560,7 +561,7 @@ void BitcoinGUI::createToolBars()
m_wallet_selector = new QComboBox();
m_wallet_selector->setSizeAdjustPolicy(QComboBox::AdjustToContents);
- connect(m_wallet_selector, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &BitcoinGUI::setCurrentWalletBySelectorIndex);
+ connect(m_wallet_selector, qOverload<int>(&QComboBox::currentIndexChanged), this, &BitcoinGUI::setCurrentWalletBySelectorIndex);
m_wallet_selector_label = new QLabel();
m_wallet_selector_label->setText(tr("Wallet:") + " ");
@@ -653,7 +654,7 @@ void BitcoinGUI::setWalletController(WalletController* wallet_controller)
m_open_wallet_action->setEnabled(true);
m_open_wallet_action->setMenu(m_open_wallet_menu);
- connect(wallet_controller, &WalletController::walletAdded, this, &BitcoinGUI::addWallet);
+ GUIUtil::ExceptionSafeConnect(wallet_controller, &WalletController::walletAdded, this, &BitcoinGUI::addWallet);
connect(wallet_controller, &WalletController::walletRemoved, this, &BitcoinGUI::removeWallet);
for (WalletModel* wallet_model : m_wallet_controller->getOpenWallets()) {
@@ -943,7 +944,7 @@ void BitcoinGUI::updateHeadersSyncProgressLabel()
int headersTipHeight = clientModel->getHeaderTipHeight();
int estHeadersLeft = (GetTime() - headersTipTime) / Params().GetConsensus().nPowTargetSpacing;
if (estHeadersLeft > HEADER_HEIGHT_DELTA_SYNC)
- progressBarLabel->setText(tr("Syncing Headers (%1%)...").arg(QString::number(100.0 / (headersTipHeight+estHeadersLeft)*headersTipHeight, 'f', 1)));
+ progressBarLabel->setText(tr("Syncing Headers (%1%)…").arg(QString::number(100.0 / (headersTipHeight+estHeadersLeft)*headersTipHeight, 'f', 1)));
}
void BitcoinGUI::openOptionsDialogWithTab(OptionsDialog::Tab tab)
@@ -989,24 +990,24 @@ void BitcoinGUI::setNumBlocks(int count, const QDateTime& blockDate, double nVer
updateHeadersSyncProgressLabel();
return;
}
- progressBarLabel->setText(tr("Synchronizing with network..."));
+ progressBarLabel->setText(tr("Synchronizing with network…"));
updateHeadersSyncProgressLabel();
break;
case BlockSource::DISK:
if (header) {
- progressBarLabel->setText(tr("Indexing blocks on disk..."));
+ progressBarLabel->setText(tr("Indexing blocks on disk…"));
} else {
- progressBarLabel->setText(tr("Processing blocks on disk..."));
+ progressBarLabel->setText(tr("Processing blocks on disk…"));
}
break;
case BlockSource::REINDEX:
- progressBarLabel->setText(tr("Reindexing blocks on disk..."));
+ progressBarLabel->setText(tr("Reindexing blocks on disk…"));
break;
case BlockSource::NONE:
if (header) {
return;
}
- progressBarLabel->setText(tr("Connecting to peers..."));
+ progressBarLabel->setText(tr("Connecting to peers…"));
break;
}
@@ -1043,7 +1044,7 @@ void BitcoinGUI::setNumBlocks(int count, const QDateTime& blockDate, double nVer
progressBar->setValue(nVerificationProgress * 1000000000.0 + 0.5);
progressBar->setVisible(true);
- tooltip = tr("Catching up...") + QString("<br>") + tooltip;
+ tooltip = tr("Catching up…") + QString("<br>") + tooltip;
if(count != prevBlocks)
{
labelBlocksIcon->setPixmap(platformStyle->SingleColorIcon(QString(
@@ -1467,11 +1468,8 @@ void UnitDisplayStatusBarControl::mousePressEvent(QMouseEvent *event)
void UnitDisplayStatusBarControl::createContextMenu()
{
menu = new QMenu(this);
- for (const BitcoinUnits::Unit u : BitcoinUnits::availableUnits())
- {
- QAction *menuAction = new QAction(QString(BitcoinUnits::longName(u)), this);
- menuAction->setData(QVariant(u));
- menu->addAction(menuAction);
+ for (const BitcoinUnits::Unit u : BitcoinUnits::availableUnits()) {
+ menu->addAction(BitcoinUnits::longName(u))->setData(QVariant(u));
}
connect(menu, &QMenu::triggered, this, &UnitDisplayStatusBarControl::onMenuSelection);
}
diff --git a/src/qt/bitcoinstrings.cpp b/src/qt/bitcoinstrings.cpp
index 27e512d075..ab631459fb 100644
--- a/src/qt/bitcoinstrings.cpp
+++ b/src/qt/bitcoinstrings.cpp
@@ -17,13 +17,17 @@ QT_TRANSLATE_NOOP("bitcoin-core", ""
"-maxtxfee is set very high! Fees this large could be paid on a single "
"transaction."),
QT_TRANSLATE_NOOP("bitcoin-core", ""
+"Cannot downgrade wallet from version %i to version %i. Wallet version "
+"unchanged."),
+QT_TRANSLATE_NOOP("bitcoin-core", ""
"Cannot obtain a lock on data directory %s. %s is probably already running."),
QT_TRANSLATE_NOOP("bitcoin-core", ""
"Cannot provide specific connections and have addrman find outgoing "
"connections at the same."),
QT_TRANSLATE_NOOP("bitcoin-core", ""
-"Cannot upgrade a non HD split wallet without upgrading to support pre split "
-"keypool. Please use version 169900 or no version specified."),
+"Cannot upgrade a non HD split wallet from version %i to version %i without "
+"upgrading to support pre-split keypool. Please use version %i or no version "
+"specified."),
QT_TRANSLATE_NOOP("bitcoin-core", ""
"Distributed under the MIT software license, see the accompanying file %s or "
"%s"),
@@ -31,17 +35,35 @@ QT_TRANSLATE_NOOP("bitcoin-core", ""
"Error reading %s! All keys read correctly, but transaction data or address "
"book entries might be missing or incorrect."),
QT_TRANSLATE_NOOP("bitcoin-core", ""
+"Error: Dumpfile format record is incorrect. Got \"%s\", expected \"format\"."),
+QT_TRANSLATE_NOOP("bitcoin-core", ""
+"Error: Dumpfile identifier record is incorrect. Got \"%s\", expected \"%s\"."),
+QT_TRANSLATE_NOOP("bitcoin-core", ""
+"Error: Dumpfile version is not supported. This version of bitcoin-wallet "
+"only supports version 1 dumpfiles. Got dumpfile with version %s"),
+QT_TRANSLATE_NOOP("bitcoin-core", ""
"Error: Listening for incoming connections failed (listen returned error %s)"),
QT_TRANSLATE_NOOP("bitcoin-core", ""
"Fee estimation failed. Fallbackfee is disabled. Wait a few blocks or enable -"
"fallbackfee."),
QT_TRANSLATE_NOOP("bitcoin-core", ""
+"File %s already exists. If you are sure this is what you want, move it out "
+"of the way first."),
+QT_TRANSLATE_NOOP("bitcoin-core", ""
"Invalid amount for -maxtxfee=<amount>: '%s' (must be at least the minrelay "
"fee of %s to prevent stuck transactions)"),
QT_TRANSLATE_NOOP("bitcoin-core", ""
"More than one onion bind address is provided. Using %s for the automatically "
"created Tor onion service."),
QT_TRANSLATE_NOOP("bitcoin-core", ""
+"No dump file provided. To use createfromdump, -dumpfile=<filename> must be "
+"provided."),
+QT_TRANSLATE_NOOP("bitcoin-core", ""
+"No dump file provided. To use dump, -dumpfile=<filename> must be provided."),
+QT_TRANSLATE_NOOP("bitcoin-core", ""
+"No wallet file format provided. To use createfromdump, -format=<format> must "
+"be provided."),
+QT_TRANSLATE_NOOP("bitcoin-core", ""
"Please check that your computer's date and time are correct! If your clock "
"is wrong, %s will not work properly."),
QT_TRANSLATE_NOOP("bitcoin-core", ""
@@ -96,10 +118,13 @@ QT_TRANSLATE_NOOP("bitcoin-core", ""
"Unable to rewind the database to a pre-fork state. You will need to "
"redownload the blockchain"),
QT_TRANSLATE_NOOP("bitcoin-core", ""
-"Warning: Private keys detected in wallet {%s} with disabled private keys"),
+"Unknown wallet file format \"%s\" provided. Please provide one of \"bdb\" or "
+"\"sqlite\"."),
QT_TRANSLATE_NOOP("bitcoin-core", ""
-"Warning: The network does not appear to fully agree! Some miners appear to "
-"be experiencing issues."),
+"Warning: Dumpfile wallet format \"%s\" does not match command line specified "
+"format \"%s\"."),
+QT_TRANSLATE_NOOP("bitcoin-core", ""
+"Warning: Private keys detected in wallet {%s} with disabled private keys"),
QT_TRANSLATE_NOOP("bitcoin-core", ""
"Warning: We do not appear to fully agree with our peers! You may need to "
"upgrade, or other nodes may need to upgrade."),
@@ -109,7 +134,6 @@ QT_TRANSLATE_NOOP("bitcoin-core", ""
QT_TRANSLATE_NOOP("bitcoin-core", "%s is set very high!"),
QT_TRANSLATE_NOOP("bitcoin-core", "-maxmempool must be at least %d MB"),
QT_TRANSLATE_NOOP("bitcoin-core", "A fatal internal error occurred, see debug.log for details"),
-QT_TRANSLATE_NOOP("bitcoin-core", "Cannot downgrade wallet"),
QT_TRANSLATE_NOOP("bitcoin-core", "Cannot resolve -%s address: '%s'"),
QT_TRANSLATE_NOOP("bitcoin-core", "Cannot set -peerblockfilters without -blockfilterindex."),
QT_TRANSLATE_NOOP("bitcoin-core", "Cannot write to data directory '%s'; check permissions."),
@@ -122,6 +146,8 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Could not parse asmap file %s"),
QT_TRANSLATE_NOOP("bitcoin-core", "Disk space is too low!"),
QT_TRANSLATE_NOOP("bitcoin-core", "Do you want to rebuild the block database now?"),
QT_TRANSLATE_NOOP("bitcoin-core", "Done loading"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Dump file %s does not exist."),
+QT_TRANSLATE_NOOP("bitcoin-core", "Error creating %s"),
QT_TRANSLATE_NOOP("bitcoin-core", "Error initializing block database"),
QT_TRANSLATE_NOOP("bitcoin-core", "Error initializing wallet database environment %s!"),
QT_TRANSLATE_NOOP("bitcoin-core", "Error loading %s"),
@@ -131,9 +157,17 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Error loading %s: Wallet requires newer versi
QT_TRANSLATE_NOOP("bitcoin-core", "Error loading block database"),
QT_TRANSLATE_NOOP("bitcoin-core", "Error opening block database"),
QT_TRANSLATE_NOOP("bitcoin-core", "Error reading from database, shutting down."),
+QT_TRANSLATE_NOOP("bitcoin-core", "Error reading next record from wallet database"),
QT_TRANSLATE_NOOP("bitcoin-core", "Error upgrading chainstate database"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Error: Couldn't create cursor into database"),
QT_TRANSLATE_NOOP("bitcoin-core", "Error: Disk space is low for %s"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Error: Dumpfile checksum does not match. Computed %s, expected %s"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Error: Got key that was not hex: %s"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Error: Got value that was not hex: %s"),
QT_TRANSLATE_NOOP("bitcoin-core", "Error: Keypool ran out, please call keypoolrefill first"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Error: Missing checksum"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Error: Unable to parse version %u as a uint32_t"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Error: Unable to write record to new wallet"),
QT_TRANSLATE_NOOP("bitcoin-core", "Failed to listen on any port. Use -listen=0 if you want this."),
QT_TRANSLATE_NOOP("bitcoin-core", "Failed to rescan the wallet during initialization"),
QT_TRANSLATE_NOOP("bitcoin-core", "Failed to verify database"),
@@ -143,6 +177,7 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Importing..."),
QT_TRANSLATE_NOOP("bitcoin-core", "Incorrect or no genesis block found. Wrong datadir for network?"),
QT_TRANSLATE_NOOP("bitcoin-core", "Initialization sanity check failed. %s is shutting down."),
QT_TRANSLATE_NOOP("bitcoin-core", "Insufficient funds"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Invalid -i2psam address or hostname: '%s'"),
QT_TRANSLATE_NOOP("bitcoin-core", "Invalid -onion address or hostname: '%s'"),
QT_TRANSLATE_NOOP("bitcoin-core", "Invalid -proxy address or hostname: '%s'"),
QT_TRANSLATE_NOOP("bitcoin-core", "Invalid P2P permission: '%s'"),
@@ -159,7 +194,6 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Need to specify a port with -whitebind: '%s'"
QT_TRANSLATE_NOOP("bitcoin-core", "No proxy server specified. Use -proxy=<ip> or -proxy=<ip:port>."),
QT_TRANSLATE_NOOP("bitcoin-core", "Not enough file descriptors available."),
QT_TRANSLATE_NOOP("bitcoin-core", "Prune cannot be configured with a negative value."),
-QT_TRANSLATE_NOOP("bitcoin-core", "Prune mode is incompatible with -blockfilterindex."),
QT_TRANSLATE_NOOP("bitcoin-core", "Prune mode is incompatible with -txindex."),
QT_TRANSLATE_NOOP("bitcoin-core", "Pruning blockstore..."),
QT_TRANSLATE_NOOP("bitcoin-core", "Reducing -maxconnections from %d to %d, because of system limitations."),
@@ -180,7 +214,7 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Specified -walletdir \"%s\" is not a director
QT_TRANSLATE_NOOP("bitcoin-core", "Specified blocks directory \"%s\" does not exist."),
QT_TRANSLATE_NOOP("bitcoin-core", "Starting network threads..."),
QT_TRANSLATE_NOOP("bitcoin-core", "The source code is available from %s."),
-QT_TRANSLATE_NOOP("bitcoin-core", "The specified config file %s does not exist\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "The specified config file %s does not exist"),
QT_TRANSLATE_NOOP("bitcoin-core", "The transaction amount is too small to pay the fee"),
QT_TRANSLATE_NOOP("bitcoin-core", "The wallet will avoid paying less than the minimum relay fee."),
QT_TRANSLATE_NOOP("bitcoin-core", "This is experimental software."),
@@ -197,6 +231,7 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Unable to bind to %s on this computer. %s is
QT_TRANSLATE_NOOP("bitcoin-core", "Unable to create the PID file '%s': %s"),
QT_TRANSLATE_NOOP("bitcoin-core", "Unable to generate initial keys"),
QT_TRANSLATE_NOOP("bitcoin-core", "Unable to generate keys"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Unable to open %s for writing"),
QT_TRANSLATE_NOOP("bitcoin-core", "Unable to start HTTP server. See debug log for details."),
QT_TRANSLATE_NOOP("bitcoin-core", "Unknown -blockfilterindex value %s."),
QT_TRANSLATE_NOOP("bitcoin-core", "Unknown address type '%s'"),
diff --git a/src/qt/clientmodel.cpp b/src/qt/clientmodel.cpp
index 56813b2d19..04161020b2 100644
--- a/src/qt/clientmodel.cpp
+++ b/src/qt/clientmodel.cpp
@@ -8,6 +8,7 @@
#include <qt/guiconstants.h>
#include <qt/guiutil.h>
#include <qt/peertablemodel.h>
+#include <qt/peertablesortproxy.h>
#include <clientversion.h>
#include <interfaces/handler.h>
@@ -38,7 +39,11 @@ ClientModel::ClientModel(interfaces::Node& node, OptionsModel *_optionsModel, QO
{
cachedBestHeaderHeight = -1;
cachedBestHeaderTime = -1;
+
peerTableModel = new PeerTableModel(m_node, this);
+ m_peer_table_sort_proxy = new PeerTableSortProxy(this);
+ m_peer_table_sort_proxy->setSourceModel(peerTableModel);
+
banTableModel = new BanTableModel(m_node, this);
QTimer* timer = new QTimer;
@@ -71,14 +76,14 @@ ClientModel::~ClientModel()
int ClientModel::getNumConnections(unsigned int flags) const
{
- CConnman::NumConnections connections = CConnman::CONNECTIONS_NONE;
+ ConnectionDirection connections = ConnectionDirection::None;
if(flags == CONNECTIONS_IN)
- connections = CConnman::CONNECTIONS_IN;
+ connections = ConnectionDirection::In;
else if (flags == CONNECTIONS_OUT)
- connections = CConnman::CONNECTIONS_OUT;
+ connections = ConnectionDirection::Out;
else if (flags == CONNECTIONS_ALL)
- connections = CConnman::CONNECTIONS_ALL;
+ connections = ConnectionDirection::Both;
return m_node.getNodeCount(connections);
}
@@ -184,6 +189,11 @@ PeerTableModel *ClientModel::getPeerTableModel()
return peerTableModel;
}
+PeerTableSortProxy* ClientModel::peerTableSortProxy()
+{
+ return m_peer_table_sort_proxy;
+}
+
BanTableModel *ClientModel::getBanTableModel()
{
return banTableModel;
@@ -216,7 +226,7 @@ QString ClientModel::dataDir() const
QString ClientModel::blocksDir() const
{
- return GUIUtil::boostPathToQString(GetBlocksDir());
+ return GUIUtil::boostPathToQString(gArgs.GetBlocksDirPath());
}
void ClientModel::updateBanlist()
diff --git a/src/qt/clientmodel.h b/src/qt/clientmodel.h
index 7ac4cc040b..7a199ef19c 100644
--- a/src/qt/clientmodel.h
+++ b/src/qt/clientmodel.h
@@ -17,6 +17,7 @@ class BanTableModel;
class CBlockIndex;
class OptionsModel;
class PeerTableModel;
+class PeerTableSortProxy;
enum class SynchronizationState;
namespace interfaces {
@@ -54,6 +55,7 @@ public:
interfaces::Node& node() const { return m_node; }
OptionsModel *getOptionsModel();
PeerTableModel *getPeerTableModel();
+ PeerTableSortProxy* peerTableSortProxy();
BanTableModel *getBanTableModel();
//! Return number of connections, default is in- and outbound (total)
@@ -96,6 +98,7 @@ private:
std::unique_ptr<interfaces::Handler> m_handler_notify_header_tip;
OptionsModel *optionsModel;
PeerTableModel *peerTableModel;
+ PeerTableSortProxy* m_peer_table_sort_proxy{nullptr};
BanTableModel *banTableModel;
//! A thread to interact with m_node asynchronously
diff --git a/src/qt/coincontroldialog.cpp b/src/qt/coincontroldialog.cpp
index 08abef7866..daea2f9cab 100644
--- a/src/qt/coincontroldialog.cpp
+++ b/src/qt/coincontroldialog.cpp
@@ -42,7 +42,7 @@ bool CCoinControlWidgetItem::operator<(const QTreeWidgetItem &other) const {
}
CoinControlDialog::CoinControlDialog(CCoinControl& coin_control, WalletModel* _model, const PlatformStyle *_platformStyle, QWidget *parent) :
- QDialog(parent),
+ QDialog(parent, GUIUtil::dialog_flags),
ui(new Ui::CoinControlDialog),
m_coin_control(coin_control),
model(_model),
@@ -50,32 +50,16 @@ CoinControlDialog::CoinControlDialog(CCoinControl& coin_control, WalletModel* _m
{
ui->setupUi(this);
- // context menu actions
- QAction *copyAddressAction = new QAction(tr("Copy address"), this);
- QAction *copyLabelAction = new QAction(tr("Copy label"), this);
- QAction *copyAmountAction = new QAction(tr("Copy amount"), this);
- copyTransactionHashAction = new QAction(tr("Copy transaction ID"), this); // we need to enable/disable this
- lockAction = new QAction(tr("Lock unspent"), this); // we need to enable/disable this
- unlockAction = new QAction(tr("Unlock unspent"), this); // we need to enable/disable this
-
// context menu
contextMenu = new QMenu(this);
- contextMenu->addAction(copyAddressAction);
- contextMenu->addAction(copyLabelAction);
- contextMenu->addAction(copyAmountAction);
- contextMenu->addAction(copyTransactionHashAction);
+ contextMenu->addAction(tr("Copy address"), this, &CoinControlDialog::copyAddress);
+ contextMenu->addAction(tr("Copy label"), this, &CoinControlDialog::copyLabel);
+ contextMenu->addAction(tr("Copy amount"), this, &CoinControlDialog::copyAmount);
+ copyTransactionHashAction = contextMenu->addAction(tr("Copy transaction ID"), this, &CoinControlDialog::copyTransactionHash);
contextMenu->addSeparator();
- contextMenu->addAction(lockAction);
- contextMenu->addAction(unlockAction);
-
- // context menu signals
+ lockAction = contextMenu->addAction(tr("Lock unspent"), this, &CoinControlDialog::lockCoin);
+ unlockAction = contextMenu->addAction(tr("Unlock unspent"), this, &CoinControlDialog::unlockCoin);
connect(ui->treeWidget, &QWidget::customContextMenuRequested, this, &CoinControlDialog::showMenu);
- connect(copyAddressAction, &QAction::triggered, this, &CoinControlDialog::copyAddress);
- connect(copyLabelAction, &QAction::triggered, this, &CoinControlDialog::copyLabel);
- connect(copyAmountAction, &QAction::triggered, this, &CoinControlDialog::copyAmount);
- connect(copyTransactionHashAction, &QAction::triggered, this, &CoinControlDialog::copyTransactionHash);
- connect(lockAction, &QAction::triggered, this, &CoinControlDialog::lockCoin);
- connect(unlockAction, &QAction::triggered, this, &CoinControlDialog::unlockCoin);
// clipboard actions
QAction *clipboardQuantityAction = new QAction(tr("Copy quantity"), this);
diff --git a/src/qt/createwalletdialog.cpp b/src/qt/createwalletdialog.cpp
index 70f080f4de..113bd30a0c 100644
--- a/src/qt/createwalletdialog.cpp
+++ b/src/qt/createwalletdialog.cpp
@@ -9,10 +9,12 @@
#include <qt/createwalletdialog.h>
#include <qt/forms/ui_createwalletdialog.h>
+#include <qt/guiutil.h>
+
#include <QPushButton>
CreateWalletDialog::CreateWalletDialog(QWidget* parent) :
- QDialog(parent),
+ QDialog(parent, GUIUtil::dialog_flags),
ui(new Ui::CreateWalletDialog)
{
ui->setupUi(this);
@@ -51,6 +53,12 @@ CreateWalletDialog::CreateWalletDialog(QWidget* parent) :
}
});
+ connect(ui->blank_wallet_checkbox, &QCheckBox::toggled, [this](bool checked) {
+ if (!checked) {
+ ui->disable_privkeys_checkbox->setChecked(false);
+ }
+ });
+
#ifndef USE_SQLITE
ui->descriptor_checkbox->setToolTip(tr("Compiled without sqlite support (required for descriptor wallets)"));
ui->descriptor_checkbox->setEnabled(false);
diff --git a/src/qt/editaddressdialog.cpp b/src/qt/editaddressdialog.cpp
index cd25f856a2..e51ed9e656 100644
--- a/src/qt/editaddressdialog.cpp
+++ b/src/qt/editaddressdialog.cpp
@@ -13,7 +13,7 @@
EditAddressDialog::EditAddressDialog(Mode _mode, QWidget *parent) :
- QDialog(parent),
+ QDialog(parent, GUIUtil::dialog_flags),
ui(new Ui::EditAddressDialog),
mapper(nullptr),
mode(_mode),
diff --git a/src/qt/forms/debugwindow.ui b/src/qt/forms/debugwindow.ui
index 3831852185..61ecea1cac 100644
--- a/src/qt/forms/debugwindow.ui
+++ b/src/qt/forms/debugwindow.ui
@@ -923,9 +923,18 @@
<property name="tabKeyNavigation">
<bool>false</bool>
</property>
+ <property name="alternatingRowColors">
+ <bool>true</bool>
+ </property>
+ <property name="textElideMode">
+ <enum>Qt::ElideMiddle</enum>
+ </property>
<property name="sortingEnabled">
<bool>true</bool>
</property>
+ <property name="wordWrap">
+ <bool>false</bool>
+ </property>
<attribute name="horizontalHeaderHighlightSections">
<bool>false</bool>
</attribute>
@@ -978,6 +987,9 @@
<property name="tabKeyNavigation">
<bool>false</bool>
</property>
+ <property name="alternatingRowColors">
+ <bool>true</bool>
+ </property>
<property name="sortingEnabled">
<bool>true</bool>
</property>
@@ -988,7 +1000,7 @@
</item>
</layout>
</widget>
- <widget class="QWidget" name="widget_2" native="true">
+ <widget class="QWidget" name="peersTabRightPanel" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
@@ -1079,10 +1091,10 @@
<item row="1" column="0">
<widget class="QLabel" name="peerConnectionTypeLabel">
<property name="toolTip">
- <string>The type of peer connection: %1</string>
+ <string>The direction and type of peer connection: %1</string>
</property>
<property name="text">
- <string>Connection Type</string>
+ <string>Direction/Type</string>
</property>
</widget>
</item>
@@ -1198,13 +1210,65 @@
</widget>
</item>
<item row="6" column="0">
+ <widget class="QLabel" name="peerRelayTxesLabel">
+ <property name="toolTip">
+ <string>Whether the peer requested us to relay transactions.</string>
+ </property>
+ <property name="text">
+ <string>Wants Tx Relay</string>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="1">
+ <widget class="QLabel" name="peerRelayTxes">
+ <property name="cursor">
+ <cursorShape>IBeamCursor</cursorShape>
+ </property>
+ <property name="text">
+ <string>N/A</string>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::PlainText</enum>
+ </property>
+ <property name="textInteractionFlags">
+ <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="0">
+ <widget class="QLabel" name="peerHighBandwidthLabel">
+ <property name="toolTip">
+ <string>High bandwidth BIP152 compact block relay: %1</string>
+ </property>
+ <property name="text">
+ <string>High Bandwidth</string>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="1">
+ <widget class="QLabel" name="peerHighBandwidth">
+ <property name="cursor">
+ <cursorShape>IBeamCursor</cursorShape>
+ </property>
+ <property name="text">
+ <string>N/A</string>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::PlainText</enum>
+ </property>
+ <property name="textInteractionFlags">
+ <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
+ </property>
+ </widget>
+ </item>
+ <item row="8" column="0">
<widget class="QLabel" name="label_29">
<property name="text">
<string>Starting Block</string>
</property>
</widget>
</item>
- <item row="6" column="1">
+ <item row="8" column="1">
<widget class="QLabel" name="peerHeight">
<property name="cursor">
<cursorShape>IBeamCursor</cursorShape>
@@ -1220,14 +1284,14 @@
</property>
</widget>
</item>
- <item row="7" column="0">
+ <item row="9" column="0">
<widget class="QLabel" name="label_27">
<property name="text">
<string>Synced Headers</string>
</property>
</widget>
</item>
- <item row="7" column="1">
+ <item row="9" column="1">
<widget class="QLabel" name="peerSyncHeight">
<property name="cursor">
<cursorShape>IBeamCursor</cursorShape>
@@ -1243,14 +1307,14 @@
</property>
</widget>
</item>
- <item row="8" column="0">
+ <item row="10" column="0">
<widget class="QLabel" name="label_25">
<property name="text">
<string>Synced Blocks</string>
</property>
</widget>
</item>
- <item row="8" column="1">
+ <item row="10" column="1">
<widget class="QLabel" name="peerCommonHeight">
<property name="cursor">
<cursorShape>IBeamCursor</cursorShape>
@@ -1266,14 +1330,14 @@
</property>
</widget>
</item>
- <item row="9" column="0">
+ <item row="11" column="0">
<widget class="QLabel" name="label_22">
<property name="text">
<string>Connection Time</string>
</property>
</widget>
</item>
- <item row="9" column="1">
+ <item row="11" column="1">
<widget class="QLabel" name="peerConnTime">
<property name="cursor">
<cursorShape>IBeamCursor</cursorShape>
@@ -1289,14 +1353,66 @@
</property>
</widget>
</item>
- <item row="10" column="0">
+ <item row="12" column="0">
+ <widget class="QLabel" name="peerLastBlockLabel">
+ <property name="toolTip">
+ <string>Elapsed time since a novel block passing initial validity checks was received from this peer.</string>
+ </property>
+ <property name="text">
+ <string>Last Block</string>
+ </property>
+ </widget>
+ </item>
+ <item row="12" column="1">
+ <widget class="QLabel" name="peerLastBlock">
+ <property name="cursor">
+ <cursorShape>IBeamCursor</cursorShape>
+ </property>
+ <property name="text">
+ <string>N/A</string>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::PlainText</enum>
+ </property>
+ <property name="textInteractionFlags">
+ <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
+ </property>
+ </widget>
+ </item>
+ <item row="13" column="0">
+ <widget class="QLabel" name="peerLastTxLabel">
+ <property name="toolTip">
+ <string>Elapsed time since a novel transaction accepted into our mempool was received from this peer.</string>
+ </property>
+ <property name="text">
+ <string>Last Tx</string>
+ </property>
+ </widget>
+ </item>
+ <item row="13" column="1">
+ <widget class="QLabel" name="peerLastTx">
+ <property name="cursor">
+ <cursorShape>IBeamCursor</cursorShape>
+ </property>
+ <property name="text">
+ <string>N/A</string>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::PlainText</enum>
+ </property>
+ <property name="textInteractionFlags">
+ <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
+ </property>
+ </widget>
+ </item>
+ <item row="14" column="0">
<widget class="QLabel" name="label_15">
<property name="text">
<string>Last Send</string>
</property>
</widget>
</item>
- <item row="10" column="1">
+ <item row="14" column="1">
<widget class="QLabel" name="peerLastSend">
<property name="cursor">
<cursorShape>IBeamCursor</cursorShape>
@@ -1312,14 +1428,14 @@
</property>
</widget>
</item>
- <item row="11" column="0">
+ <item row="15" column="0">
<widget class="QLabel" name="label_19">
<property name="text">
<string>Last Receive</string>
</property>
</widget>
</item>
- <item row="11" column="1">
+ <item row="15" column="1">
<widget class="QLabel" name="peerLastRecv">
<property name="cursor">
<cursorShape>IBeamCursor</cursorShape>
@@ -1335,14 +1451,14 @@
</property>
</widget>
</item>
- <item row="12" column="0">
+ <item row="16" column="0">
<widget class="QLabel" name="label_18">
<property name="text">
<string>Sent</string>
</property>
</widget>
</item>
- <item row="12" column="1">
+ <item row="16" column="1">
<widget class="QLabel" name="peerBytesSent">
<property name="cursor">
<cursorShape>IBeamCursor</cursorShape>
@@ -1358,14 +1474,14 @@
</property>
</widget>
</item>
- <item row="13" column="0">
+ <item row="17" column="0">
<widget class="QLabel" name="label_20">
<property name="text">
<string>Received</string>
</property>
</widget>
</item>
- <item row="13" column="1">
+ <item row="17" column="1">
<widget class="QLabel" name="peerBytesRecv">
<property name="cursor">
<cursorShape>IBeamCursor</cursorShape>
@@ -1381,14 +1497,14 @@
</property>
</widget>
</item>
- <item row="14" column="0">
+ <item row="18" column="0">
<widget class="QLabel" name="label_26">
<property name="text">
<string>Ping Time</string>
</property>
</widget>
</item>
- <item row="14" column="1">
+ <item row="18" column="1">
<widget class="QLabel" name="peerPingTime">
<property name="cursor">
<cursorShape>IBeamCursor</cursorShape>
@@ -1404,7 +1520,7 @@
</property>
</widget>
</item>
- <item row="15" column="0">
+ <item row="19" column="0">
<widget class="QLabel" name="peerPingWaitLabel">
<property name="toolTip">
<string>The duration of a currently outstanding ping.</string>
@@ -1414,7 +1530,7 @@
</property>
</widget>
</item>
- <item row="15" column="1">
+ <item row="19" column="1">
<widget class="QLabel" name="peerPingWait">
<property name="cursor">
<cursorShape>IBeamCursor</cursorShape>
@@ -1430,14 +1546,14 @@
</property>
</widget>
</item>
- <item row="16" column="0">
+ <item row="20" column="0">
<widget class="QLabel" name="peerMinPingLabel">
<property name="text">
<string>Min Ping</string>
</property>
</widget>
</item>
- <item row="16" column="1">
+ <item row="20" column="1">
<widget class="QLabel" name="peerMinPing">
<property name="cursor">
<cursorShape>IBeamCursor</cursorShape>
@@ -1453,14 +1569,14 @@
</property>
</widget>
</item>
- <item row="17" column="0">
+ <item row="21" column="0">
<widget class="QLabel" name="label_timeoffset">
<property name="text">
<string>Time Offset</string>
</property>
</widget>
</item>
- <item row="17" column="1">
+ <item row="21" column="1">
<widget class="QLabel" name="timeoffset">
<property name="cursor">
<cursorShape>IBeamCursor</cursorShape>
@@ -1476,7 +1592,7 @@
</property>
</widget>
</item>
- <item row="18" column="0">
+ <item row="22" column="0">
<widget class="QLabel" name="peerMappedASLabel">
<property name="toolTip">
<string>The mapped Autonomous System used for diversifying peer selection.</string>
@@ -1486,7 +1602,7 @@
</property>
</widget>
</item>
- <item row="18" column="1">
+ <item row="22" column="1">
<widget class="QLabel" name="peerMappedAS">
<property name="cursor">
<cursorShape>IBeamCursor</cursorShape>
@@ -1502,7 +1618,7 @@
</property>
</widget>
</item>
- <item row="19" column="0">
+ <item row="23" column="0">
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
diff --git a/src/qt/forms/intro.ui b/src/qt/forms/intro.ui
index f27a4ebe44..a1e94f99e6 100644
--- a/src/qt/forms/intro.ui
+++ b/src/qt/forms/intro.ui
@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>674</width>
- <height>415</height>
+ <height>447</height>
</rect>
</property>
<property name="windowTitle">
@@ -211,16 +211,6 @@
</widget>
</item>
<item>
- <widget class="QCheckBox" name="prune">
- <property name="toolTip">
- <string>Reverting this setting requires re-downloading the entire blockchain. It is faster to download the full chain first and prune it later. Disables some advanced features.</string>
- </property>
- <property name="text">
- <string></string>
- </property>
- </widget>
- </item>
- <item>
<widget class="QLabel" name="lblExplanation2">
<property name="text">
<string>This initial synchronisation is very demanding, and may expose hardware problems with your computer that had previously gone unnoticed. Each time you run %1, it will continue downloading where it left off.</string>
@@ -241,6 +231,47 @@
</widget>
</item>
<item>
+ <layout class="QHBoxLayout" name="pruneOptLayout">
+ <item>
+ <widget class="QCheckBox" name="prune">
+ <property name="text">
+ <string>Limit block chain storage to</string>
+ </property>
+ <property name="toolTip">
+ <string>Reverting this setting requires re-downloading the entire blockchain. It is faster to download the full chain first and prune it later. Disables some advanced features.</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="pruneGB">
+ <property name="suffix">
+ <string> GB</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="lblPruneSuffix">
+ <property name="buddy">
+ <cstring>pruneGB</cstring>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
diff --git a/src/qt/forms/modaloverlay.ui b/src/qt/forms/modaloverlay.ui
index d2e7ca8f06..dbdeadfc00 100644
--- a/src/qt/forms/modaloverlay.ui
+++ b/src/qt/forms/modaloverlay.ui
@@ -219,7 +219,7 @@ QLabel { color: rgb(40,40,40); }</string>
<item row="0" column="1">
<widget class="QLabel" name="numberOfBlocksLeft">
<property name="text">
- <string>Unknown...</string>
+ <string>Unknown…</string>
</property>
</widget>
</item>
@@ -245,7 +245,7 @@ QLabel { color: rgb(40,40,40); }</string>
</sizepolicy>
</property>
<property name="text">
- <string>Unknown...</string>
+ <string>Unknown…</string>
</property>
</widget>
</item>
@@ -271,16 +271,6 @@ QLabel { color: rgb(40,40,40); }</string>
</property>
</widget>
</item>
- <item>
- <widget class="QProgressBar" name="progressBar">
- <property name="value">
- <number>24</number>
- </property>
- <property name="format">
- <string/>
- </property>
- </widget>
- </item>
</layout>
</item>
<item row="4" column="0">
@@ -299,7 +289,7 @@ QLabel { color: rgb(40,40,40); }</string>
<item row="4" column="1">
<widget class="QLabel" name="progressIncreasePerH">
<property name="text">
- <string>calculating...</string>
+ <string>calculating…</string>
</property>
</widget>
</item>
@@ -319,7 +309,7 @@ QLabel { color: rgb(40,40,40); }</string>
<item row="5" column="1">
<widget class="QLabel" name="expectedTimeLeft">
<property name="text">
- <string>calculating...</string>
+ <string>calculating…</string>
</property>
</widget>
</item>
diff --git a/src/qt/forms/optionsdialog.ui b/src/qt/forms/optionsdialog.ui
index 8181cc47e2..6d279540e9 100644
--- a/src/qt/forms/optionsdialog.ui
+++ b/src/qt/forms/optionsdialog.ui
@@ -706,6 +706,106 @@
</layout>
</item>
<item>
+ <widget class="QGroupBox" name="font_groupBox">
+ <property name="title">
+ <string>Monospaced font in the Overview tab:</string>
+ </property>
+ <layout class="QVBoxLayout" name="font_verticalLayout">
+ <item>
+ <layout class="QHBoxLayout" name="embeddedFont_horizontalLayout">
+ <item>
+ <widget class="QRadioButton" name="embeddedFont_radioButton">
+ <property name="text">
+ <string>embedded &quot;%1&quot;</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="embeddedFont_horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="embeddedFont_verticalLayout">
+ <item>
+ <widget class="QLabel" name="embeddedFont_label_1">
+ <property name="text">
+ <string>111.11111111 BTC</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="embeddedFont_label_9">
+ <property name="text">
+ <string>909.09090909 BTC</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="Line" name="font_line">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="systemFont_horizontalLayout">
+ <item>
+ <widget class="QRadioButton" name="systemFont_radioButton">
+ <property name="text">
+ <string>closest matching &quot;%1&quot;</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="systemFont_horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="systemFont_verticalLayout">
+ <item>
+ <widget class="QLabel" name="systemFont_label_1">
+ <property name="text">
+ <string>111.11111111 BTC</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="systemFont_label_9">
+ <property name="text">
+ <string>909.09090909 BTC</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
<spacer name="verticalSpacer_Display">
<property name="orientation">
<enum>Qt::Vertical</enum>
diff --git a/src/qt/forms/overviewpage.ui b/src/qt/forms/overviewpage.ui
index ee9d4a113c..f85de0811a 100644
--- a/src/qt/forms/overviewpage.ui
+++ b/src/qt/forms/overviewpage.ui
@@ -68,7 +68,7 @@
</property>
<property name="maximumSize">
<size>
- <width>30</width>
+ <width>45</width>
<height>16777215</height>
</size>
</property>
@@ -89,9 +89,6 @@
<height>24</height>
</size>
</property>
- <property name="flat">
- <bool>true</bool>
- </property>
</widget>
</item>
<item>
@@ -116,13 +113,6 @@
</property>
<item row="2" column="2">
<widget class="QLabel" name="labelWatchPending">
- <property name="font">
- <font>
- <family>Monospace</family>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
<property name="cursor">
<cursorShape>IBeamCursor</cursorShape>
</property>
@@ -142,13 +132,6 @@
</item>
<item row="2" column="1">
<widget class="QLabel" name="labelUnconfirmed">
- <property name="font">
- <font>
- <family>Monospace</family>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
<property name="cursor">
<cursorShape>IBeamCursor</cursorShape>
</property>
@@ -168,13 +151,6 @@
</item>
<item row="3" column="2">
<widget class="QLabel" name="labelWatchImmature">
- <property name="font">
- <font>
- <family>Monospace</family>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
<property name="cursor">
<cursorShape>IBeamCursor</cursorShape>
</property>
@@ -227,13 +203,6 @@
</item>
<item row="3" column="1">
<widget class="QLabel" name="labelImmature">
- <property name="font">
- <font>
- <family>Monospace</family>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
<property name="cursor">
<cursorShape>IBeamCursor</cursorShape>
</property>
@@ -273,13 +242,6 @@
</item>
<item row="5" column="1">
<widget class="QLabel" name="labelTotal">
- <property name="font">
- <font>
- <family>Monospace</family>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
<property name="cursor">
<cursorShape>IBeamCursor</cursorShape>
</property>
@@ -299,13 +261,6 @@
</item>
<item row="5" column="2">
<widget class="QLabel" name="labelWatchTotal">
- <property name="font">
- <font>
- <family>Monospace</family>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
<property name="cursor">
<cursorShape>IBeamCursor</cursorShape>
</property>
@@ -342,13 +297,6 @@
</item>
<item row="1" column="1">
<widget class="QLabel" name="labelBalance">
- <property name="font">
- <font>
- <family>Monospace</family>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
<property name="cursor">
<cursorShape>IBeamCursor</cursorShape>
</property>
@@ -368,13 +316,6 @@
</item>
<item row="1" column="2">
<widget class="QLabel" name="labelWatchAvailable">
- <property name="font">
- <font>
- <family>Monospace</family>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
<property name="cursor">
<cursorShape>IBeamCursor</cursorShape>
</property>
@@ -462,7 +403,7 @@
</property>
<property name="maximumSize">
<size>
- <width>30</width>
+ <width>45</width>
<height>16777215</height>
</size>
</property>
@@ -483,9 +424,6 @@
<height>24</height>
</size>
</property>
- <property name="flat">
- <bool>true</bool>
- </property>
</widget>
</item>
<item>
diff --git a/src/qt/forms/psbtoperationsdialog.ui b/src/qt/forms/psbtoperationsdialog.ui
index c2e2f5035b..caae0dab2a 100644
--- a/src/qt/forms/psbtoperationsdialog.ui
+++ b/src/qt/forms/psbtoperationsdialog.ui
@@ -126,7 +126,7 @@
<item>
<widget class="QPushButton" name="saveButton">
<property name="text">
- <string>Save...</string>
+ <string>Save…</string>
</property>
</widget>
</item>
diff --git a/src/qt/forms/receiverequestdialog.ui b/src/qt/forms/receiverequestdialog.ui
index f6d4723465..7d95a8bc90 100644
--- a/src/qt/forms/receiverequestdialog.ui
+++ b/src/qt/forms/receiverequestdialog.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Request payment to ...</string>
+ <string>Request payment to …</string>
</property>
<layout class="QGridLayout" name="gridLayout" columnstretch="0,1">
<property name="sizeConstraint">
@@ -65,7 +65,7 @@
<item row="2" column="1" alignment="Qt::AlignTop">
<widget class="QLabel" name="uri_content">
<property name="text">
- <string notr="true">bitcoin:BC1...</string>
+ <string notr="true">bitcoin:BC1…</string>
</property>
<property name="textFormat">
<enum>Qt::RichText</enum>
@@ -97,7 +97,7 @@
<item row="3" column="1" alignment="Qt::AlignTop">
<widget class="QLabel" name="address_content">
<property name="text">
- <string notr="true">bc1...</string>
+ <string notr="true">bc1…</string>
</property>
<property name="textFormat">
<enum>Qt::PlainText</enum>
@@ -257,7 +257,7 @@
<item>
<widget class="QPushButton" name="btnSaveAs">
<property name="text">
- <string>&amp;Save Image...</string>
+ <string>&amp;Save Image…</string>
</property>
<property name="autoDefault">
<bool>false</bool>
diff --git a/src/qt/forms/sendcoinsdialog.ui b/src/qt/forms/sendcoinsdialog.ui
index cfd4bf33d4..1c0f91f736 100644
--- a/src/qt/forms/sendcoinsdialog.ui
+++ b/src/qt/forms/sendcoinsdialog.ui
@@ -107,7 +107,7 @@
<string notr="true"/>
</property>
<property name="text">
- <string>Inputs...</string>
+ <string>Inputs…</string>
</property>
<property name="autoDefault">
<bool>false</bool>
@@ -738,7 +738,7 @@
<item>
<widget class="QPushButton" name="buttonChooseFee">
<property name="text">
- <string>Choose...</string>
+ <string>Choose…</string>
</property>
</widget>
</item>
@@ -991,7 +991,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p
<item>
<widget class="QLabel" name="labelSmartFee2">
<property name="text">
- <string>(Smart fee not initialized yet. This usually takes a few blocks...)</string>
+ <string>(Smart fee not initialized yet. This usually takes a few blocks…)</string>
</property>
</widget>
</item>
diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp
index 99785b6a53..d10bf9f9ae 100644
--- a/src/qt/guiutil.cpp
+++ b/src/qt/guiutil.cpp
@@ -40,23 +40,29 @@
#include <QFontDatabase>
#include <QFontMetrics>
#include <QGuiApplication>
+#include <QJsonObject>
#include <QKeyEvent>
+#include <QLatin1String>
#include <QLineEdit>
#include <QList>
#include <QLocale>
#include <QMenu>
#include <QMouseEvent>
+#include <QPluginLoader>
#include <QProgressDialog>
#include <QScreen>
#include <QSettings>
#include <QShortcut>
#include <QSize>
#include <QString>
+#include <QStringBuilder>
#include <QTextDocument> // for Qt::mightBeRichText
#include <QThread>
#include <QUrlQuery>
#include <QtGlobal>
+#include <chrono>
+
#if defined(Q_OS_MAC)
#include <QProcess>
@@ -76,8 +82,11 @@ QString dateTimeStr(qint64 nTime)
return dateTimeStr(QDateTime::fromTime_t((qint32)nTime));
}
-QFont fixedPitchFont()
+QFont fixedPitchFont(bool use_embedded_font)
{
+ if (use_embedded_font) {
+ return {"Roboto Mono"};
+ }
return QFontDatabase::systemFont(QFontDatabase::FixedFont);
}
@@ -468,120 +477,6 @@ bool LabelOutOfFocusEventFilter::eventFilter(QObject* watched, QEvent* event)
return QObject::eventFilter(watched, event);
}
-void TableViewLastColumnResizingFixer::connectViewHeadersSignals()
-{
- connect(tableView->horizontalHeader(), &QHeaderView::sectionResized, this, &TableViewLastColumnResizingFixer::on_sectionResized);
- connect(tableView->horizontalHeader(), &QHeaderView::geometriesChanged, this, &TableViewLastColumnResizingFixer::on_geometriesChanged);
-}
-
-// We need to disconnect these while handling the resize events, otherwise we can enter infinite loops.
-void TableViewLastColumnResizingFixer::disconnectViewHeadersSignals()
-{
- disconnect(tableView->horizontalHeader(), &QHeaderView::sectionResized, this, &TableViewLastColumnResizingFixer::on_sectionResized);
- disconnect(tableView->horizontalHeader(), &QHeaderView::geometriesChanged, this, &TableViewLastColumnResizingFixer::on_geometriesChanged);
-}
-
-// Setup the resize mode, handles compatibility for Qt5 and below as the method signatures changed.
-// Refactored here for readability.
-void TableViewLastColumnResizingFixer::setViewHeaderResizeMode(int logicalIndex, QHeaderView::ResizeMode resizeMode)
-{
- tableView->horizontalHeader()->setSectionResizeMode(logicalIndex, resizeMode);
-}
-
-void TableViewLastColumnResizingFixer::resizeColumn(int nColumnIndex, int width)
-{
- tableView->setColumnWidth(nColumnIndex, width);
- tableView->horizontalHeader()->resizeSection(nColumnIndex, width);
-}
-
-int TableViewLastColumnResizingFixer::getColumnsWidth()
-{
- int nColumnsWidthSum = 0;
- for (int i = 0; i < columnCount; i++)
- {
- nColumnsWidthSum += tableView->horizontalHeader()->sectionSize(i);
- }
- return nColumnsWidthSum;
-}
-
-int TableViewLastColumnResizingFixer::getAvailableWidthForColumn(int column)
-{
- int nResult = lastColumnMinimumWidth;
- int nTableWidth = tableView->horizontalHeader()->width();
-
- if (nTableWidth > 0)
- {
- int nOtherColsWidth = getColumnsWidth() - tableView->horizontalHeader()->sectionSize(column);
- nResult = std::max(nResult, nTableWidth - nOtherColsWidth);
- }
-
- return nResult;
-}
-
-// Make sure we don't make the columns wider than the table's viewport width.
-void TableViewLastColumnResizingFixer::adjustTableColumnsWidth()
-{
- disconnectViewHeadersSignals();
- resizeColumn(lastColumnIndex, getAvailableWidthForColumn(lastColumnIndex));
- connectViewHeadersSignals();
-
- int nTableWidth = tableView->horizontalHeader()->width();
- int nColsWidth = getColumnsWidth();
- if (nColsWidth > nTableWidth)
- {
- resizeColumn(secondToLastColumnIndex,getAvailableWidthForColumn(secondToLastColumnIndex));
- }
-}
-
-// Make column use all the space available, useful during window resizing.
-void TableViewLastColumnResizingFixer::stretchColumnWidth(int column)
-{
- disconnectViewHeadersSignals();
- resizeColumn(column, getAvailableWidthForColumn(column));
- connectViewHeadersSignals();
-}
-
-// When a section is resized this is a slot-proxy for ajustAmountColumnWidth().
-void TableViewLastColumnResizingFixer::on_sectionResized(int logicalIndex, int oldSize, int newSize)
-{
- adjustTableColumnsWidth();
- int remainingWidth = getAvailableWidthForColumn(logicalIndex);
- if (newSize > remainingWidth)
- {
- resizeColumn(logicalIndex, remainingWidth);
- }
-}
-
-// When the table's geometry is ready, we manually perform the stretch of the "Message" column,
-// as the "Stretch" resize mode does not allow for interactive resizing.
-void TableViewLastColumnResizingFixer::on_geometriesChanged()
-{
- if ((getColumnsWidth() - this->tableView->horizontalHeader()->width()) != 0)
- {
- disconnectViewHeadersSignals();
- resizeColumn(secondToLastColumnIndex, getAvailableWidthForColumn(secondToLastColumnIndex));
- connectViewHeadersSignals();
- }
-}
-
-/**
- * Initializes all internal variables and prepares the
- * the resize modes of the last 2 columns of the table and
- */
-TableViewLastColumnResizingFixer::TableViewLastColumnResizingFixer(QTableView* table, int lastColMinimumWidth, int allColsMinimumWidth, QObject *parent) :
- QObject(parent),
- tableView(table),
- lastColumnMinimumWidth(lastColMinimumWidth),
- allColumnsMinimumWidth(allColsMinimumWidth)
-{
- columnCount = tableView->horizontalHeader()->count();
- lastColumnIndex = columnCount - 1;
- secondToLastColumnIndex = columnCount - 2;
- tableView->horizontalHeader()->setMinimumSectionSize(allColumnsMinimumWidth);
- setViewHeaderResizeMode(secondToLastColumnIndex, QHeaderView::Interactive);
- setViewHeaderResizeMode(lastColumnIndex, QHeaderView::Interactive);
-}
-
#ifdef WIN32
fs::path static StartupShortcutPath()
{
@@ -735,8 +630,11 @@ bool SetStartOnSystemStartup(bool fAutoStart) { return false; }
void setClipboard(const QString& str)
{
- QApplication::clipboard()->setText(str, QClipboard::Clipboard);
- QApplication::clipboard()->setText(str, QClipboard::Selection);
+ QClipboard* clipboard = QApplication::clipboard();
+ clipboard->setText(str, QClipboard::Clipboard);
+ if (clipboard->supportsSelection()) {
+ clipboard->setText(str, QClipboard::Selection);
+ }
}
fs::path qstringToBoostPath(const QString &path)
@@ -764,15 +662,19 @@ QString NetworkToQString(Network net)
assert(false);
}
-QString ConnectionTypeToQString(ConnectionType conn_type, bool relay_txes)
+QString ConnectionTypeToQString(ConnectionType conn_type, bool prepend_direction)
{
+ QString prefix;
+ if (prepend_direction) {
+ prefix = (conn_type == ConnectionType::INBOUND) ? QObject::tr("Inbound") : QObject::tr("Outbound") + " ";
+ }
switch (conn_type) {
- case ConnectionType::INBOUND: return relay_txes ? QObject::tr("Inbound Full Relay") : QObject::tr("Inbound Block Relay");
- case ConnectionType::OUTBOUND_FULL_RELAY: return QObject::tr("Outbound Full Relay");
- case ConnectionType::BLOCK_RELAY: return QObject::tr("Outbound Block Relay");
- case ConnectionType::MANUAL: return QObject::tr("Outbound Manual");
- case ConnectionType::FEELER: return QObject::tr("Outbound Feeler");
- case ConnectionType::ADDR_FETCH: return QObject::tr("Outbound Address Fetch");
+ case ConnectionType::INBOUND: return prefix;
+ case ConnectionType::OUTBOUND_FULL_RELAY: return prefix + QObject::tr("Full Relay");
+ case ConnectionType::BLOCK_RELAY: return prefix + QObject::tr("Block Relay");
+ case ConnectionType::MANUAL: return prefix + QObject::tr("Manual");
+ case ConnectionType::FEELER: return prefix + QObject::tr("Feeler");
+ case ConnectionType::ADDR_FETCH: return prefix + QObject::tr("Address Fetch");
} // no default case, so the compiler can warn about missing cases
assert(false);
}
@@ -786,13 +688,13 @@ QString formatDurationStr(int secs)
int seconds = secs % 60;
if (days)
- strList.append(QString(QObject::tr("%1 d")).arg(days));
+ strList.append(QObject::tr("%1 d").arg(days));
if (hours)
- strList.append(QString(QObject::tr("%1 h")).arg(hours));
+ strList.append(QObject::tr("%1 h").arg(hours));
if (mins)
- strList.append(QString(QObject::tr("%1 m")).arg(mins));
+ strList.append(QObject::tr("%1 m").arg(mins));
if (seconds || (!days && !hours && !mins))
- strList.append(QString(QObject::tr("%1 s")).arg(seconds));
+ strList.append(QObject::tr("%1 s").arg(seconds));
return strList.join(" ");
}
@@ -811,14 +713,16 @@ QString formatServicesStr(quint64 mask)
return QObject::tr("None");
}
-QString formatPingTime(int64_t ping_usec)
+QString formatPingTime(std::chrono::microseconds ping_time)
{
- return (ping_usec == std::numeric_limits<int64_t>::max() || ping_usec == 0) ? QObject::tr("N/A") : QString(QObject::tr("%1 ms")).arg(QString::number((int)(ping_usec / 1000), 10));
+ return (ping_time == std::chrono::microseconds::max() || ping_time == 0us) ?
+ QObject::tr("N/A") :
+ QObject::tr("%1 ms").arg(QString::number((int)(count_microseconds(ping_time) / 1000), 10));
}
QString formatTimeOffset(int64_t nTimeOffset)
{
- return QString(QObject::tr("%1 s")).arg(QString::number((int)nTimeOffset, 10));
+ return QObject::tr("%1 s").arg(QString::number((int)nTimeOffset, 10));
}
QString formatNiceTimeOffset(qint64 secs)
@@ -860,14 +764,14 @@ QString formatNiceTimeOffset(qint64 secs)
QString formatBytes(uint64_t bytes)
{
- if(bytes < 1024)
- return QString(QObject::tr("%1 B")).arg(bytes);
- if(bytes < 1024 * 1024)
- return QString(QObject::tr("%1 KB")).arg(bytes / 1024);
- if(bytes < 1024 * 1024 * 1024)
- return QString(QObject::tr("%1 MB")).arg(bytes / 1024 / 1024);
+ if (bytes < 1'000)
+ return QObject::tr("%1 B").arg(bytes);
+ if (bytes < 1'000'000)
+ return QObject::tr("%1 kB").arg(bytes / 1'000);
+ if (bytes < 1'000'000'000)
+ return QObject::tr("%1 MB").arg(bytes / 1'000'000);
- return QString(QObject::tr("%1 GB")).arg(bytes / 1024 / 1024 / 1024);
+ return QObject::tr("%1 GB").arg(bytes / 1'000'000'000);
}
qreal calculateIdealFontSize(int width, const QString& text, QFont font, qreal minPointSize, qreal font_size) {
@@ -936,6 +840,20 @@ void LogQtInfo()
const std::string plugin_link{"dynamic"};
#endif
LogPrintf("Qt %s (%s), plugin=%s (%s)\n", qVersion(), qt_link, QGuiApplication::platformName().toStdString(), plugin_link);
+ const auto static_plugins = QPluginLoader::staticPlugins();
+ if (static_plugins.empty()) {
+ LogPrintf("No static plugins.\n");
+ } else {
+ LogPrintf("Static plugins:\n");
+ for (const QStaticPlugin& p : static_plugins) {
+ QJsonObject meta_data = p.metaData();
+ const std::string plugin_class = meta_data.take(QString("className")).toString().toStdString();
+ const int plugin_version = meta_data.take(QString("version")).toInt();
+ LogPrintf(" %s, version %d\n", plugin_class, plugin_version);
+ }
+ }
+
+ LogPrintf("Style: %s / %s\n", QApplication::style()->objectName().toStdString(), QApplication::style()->metaObject()->className());
LogPrintf("System: %s, %s\n", QSysInfo::prettyProductName().toStdString(), QSysInfo::buildAbi().toStdString());
for (const QScreen* s : QGuiApplication::screens()) {
LogPrintf("Screen: %s %dx%d, pixel ratio=%.1f\n", s->name().toStdString(), s->size().width(), s->size().height(), s->devicePixelRatio());
@@ -980,4 +898,22 @@ QImage GetImage(const QLabel* label)
#endif
}
+QString MakeHtmlLink(const QString& source, const QString& link)
+{
+ return QString(source).replace(
+ link,
+ QLatin1String("<a href=\"") % link % QLatin1String("\">") % link % QLatin1String("</a>"));
+}
+
+void PrintSlotException(
+ const std::exception* exception,
+ const QObject* sender,
+ const QObject* receiver)
+{
+ std::string description = sender->metaObject()->className();
+ description += "->";
+ description += receiver->metaObject()->className();
+ PrintExceptionContinue(exception, description.c_str());
+}
+
} // namespace GUIUtil
diff --git a/src/qt/guiutil.h b/src/qt/guiutil.h
index fcde439307..a1cf274354 100644
--- a/src/qt/guiutil.h
+++ b/src/qt/guiutil.h
@@ -9,17 +9,24 @@
#include <fs.h>
#include <net.h>
#include <netaddress.h>
+#include <util/check.h>
+#include <QApplication>
#include <QEvent>
#include <QHeaderView>
#include <QItemDelegate>
#include <QLabel>
#include <QMessageBox>
+#include <QMetaObject>
#include <QObject>
#include <QProgressBar>
#include <QString>
#include <QTableView>
+#include <cassert>
+#include <chrono>
+#include <utility>
+
class QValidatedLineEdit;
class SendCoinsRecipient;
@@ -45,12 +52,15 @@ QT_END_NAMESPACE
*/
namespace GUIUtil
{
+ // Use this flags to prevent a "What's This" button in the title bar of the dialog on Windows.
+ constexpr auto dialog_flags = Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint;
+
// Create human-readable string from date
QString dateTimeStr(const QDateTime &datetime);
QString dateTimeStr(qint64 nTime);
// Return a monospace font
- QFont fixedPitchFont();
+ QFont fixedPitchFont(bool use_embedded_font = false);
// Set up widget for address
void setupAddressWidget(QValidatedLineEdit *widget, QWidget *parent);
@@ -178,45 +188,6 @@ namespace GUIUtil
bool eventFilter(QObject* watched, QEvent* event) override;
};
- /**
- * Makes a QTableView last column feel as if it was being resized from its left border.
- * Also makes sure the column widths are never larger than the table's viewport.
- * In Qt, all columns are resizable from the right, but it's not intuitive resizing the last column from the right.
- * Usually our second to last columns behave as if stretched, and when on stretch mode, columns aren't resizable
- * interactively or programmatically.
- *
- * This helper object takes care of this issue.
- *
- */
- class TableViewLastColumnResizingFixer: public QObject
- {
- Q_OBJECT
-
- public:
- TableViewLastColumnResizingFixer(QTableView* table, int lastColMinimumWidth, int allColsMinimumWidth, QObject *parent);
- void stretchColumnWidth(int column);
-
- private:
- QTableView* tableView;
- int lastColumnMinimumWidth;
- int allColumnsMinimumWidth;
- int lastColumnIndex;
- int columnCount;
- int secondToLastColumnIndex;
-
- void adjustTableColumnsWidth();
- int getAvailableWidthForColumn(int column);
- int getColumnsWidth();
- void connectViewHeadersSignals();
- void disconnectViewHeadersSignals();
- void setViewHeaderResizeMode(int logicalIndex, QHeaderView::ResizeMode resizeMode);
- void resizeColumn(int nColumnIndex, int width);
-
- private Q_SLOTS:
- void on_sectionResized(int logicalIndex, int oldSize, int newSize);
- void on_geometriesChanged();
- };
-
bool GetStartOnSystemStartup();
bool SetStartOnSystemStartup(bool fAutoStart);
@@ -230,7 +201,7 @@ namespace GUIUtil
QString NetworkToQString(Network net);
/** Convert enum ConnectionType to QString */
- QString ConnectionTypeToQString(ConnectionType conn_type, bool relay_txes);
+ QString ConnectionTypeToQString(ConnectionType conn_type, bool prepend_direction);
/** Convert seconds into a QString with days, hours, mins, secs */
QString formatDurationStr(int secs);
@@ -238,8 +209,8 @@ namespace GUIUtil
/** Format CNodeStats.nServices bitmask into a user-readable string */
QString formatServicesStr(quint64 mask);
- /** Format a CNodeStats.m_ping_usec into a user-readable string or display N/A, if 0 */
- QString formatPingTime(int64_t ping_usec);
+ /** Format a CNodeStats.m_last_ping_time into a user-readable string or display N/A, if 0 */
+ QString formatPingTime(std::chrono::microseconds ping_time);
/** Format a CNodeCombinedStats.nTimeOffset into a user-readable string */
QString formatTimeOffset(int64_t nTimeOffset);
@@ -361,6 +332,58 @@ namespace GUIUtil
QObject::connect(&source, &QObject::destroyed, object, std::forward<Fn>(function), connection);
}
+ /**
+ * Replaces a plain text link with an HTML tagged one.
+ */
+ QString MakeHtmlLink(const QString& source, const QString& link);
+
+ void PrintSlotException(
+ const std::exception* exception,
+ const QObject* sender,
+ const QObject* receiver);
+
+ /**
+ * A drop-in replacement of QObject::connect function
+ * (see: https://doc.qt.io/qt-5/qobject.html#connect-3), that
+ * guaranties that all exceptions are handled within the slot.
+ *
+ * NOTE: This function is incompatible with Qt private signals.
+ */
+ template <typename Sender, typename Signal, typename Receiver, typename Slot>
+ auto ExceptionSafeConnect(
+ Sender sender, Signal signal, Receiver receiver, Slot method,
+ Qt::ConnectionType type = Qt::AutoConnection)
+ {
+ return QObject::connect(
+ sender, signal, receiver,
+ [sender, receiver, method](auto&&... args) {
+ bool ok{true};
+ try {
+ (receiver->*method)(std::forward<decltype(args)>(args)...);
+ } catch (const NonFatalCheckError& e) {
+ PrintSlotException(&e, sender, receiver);
+ ok = QMetaObject::invokeMethod(
+ qApp, "handleNonFatalException",
+ blockingGUIThreadConnection(),
+ Q_ARG(QString, QString::fromStdString(e.what())));
+ } catch (const std::exception& e) {
+ PrintSlotException(&e, sender, receiver);
+ ok = QMetaObject::invokeMethod(
+ qApp, "handleRunawayException",
+ blockingGUIThreadConnection(),
+ Q_ARG(QString, QString::fromStdString(e.what())));
+ } catch (...) {
+ PrintSlotException(nullptr, sender, receiver);
+ ok = QMetaObject::invokeMethod(
+ qApp, "handleRunawayException",
+ blockingGUIThreadConnection(),
+ Q_ARG(QString, "Unknown failure occurred."));
+ }
+ assert(ok);
+ },
+ type);
+ }
+
} // namespace GUIUtil
#endif // BITCOIN_QT_GUIUTIL_H
diff --git a/src/qt/intro.cpp b/src/qt/intro.cpp
index 235722d091..15b14c35ec 100644
--- a/src/qt/intro.cpp
+++ b/src/qt/intro.cpp
@@ -17,6 +17,7 @@
#include <interfaces/node.h>
#include <util/system.h>
+#include <validation.h>
#include <QFileDialog>
#include <QSettings>
@@ -119,7 +120,7 @@ int GetPruneTargetGB()
} // namespace
Intro::Intro(QWidget *parent, int64_t blockchain_size_gb, int64_t chain_state_size_gb) :
- QDialog(parent),
+ QDialog(parent, GUIUtil::dialog_flags),
ui(new Ui::Intro),
thread(nullptr),
signalled(false),
@@ -139,17 +140,26 @@ Intro::Intro(QWidget *parent, int64_t blockchain_size_gb, int64_t chain_state_si
);
ui->lblExplanation2->setText(ui->lblExplanation2->text().arg(PACKAGE_NAME));
+ const int min_prune_target_GB = std::ceil(MIN_DISK_SPACE_FOR_BLOCK_FILES / 1e9);
+ ui->pruneGB->setRange(min_prune_target_GB, std::numeric_limits<int>::max());
if (gArgs.GetArg("-prune", 0) > 1) { // -prune=1 means enabled, above that it's a size in MiB
ui->prune->setChecked(true);
ui->prune->setEnabled(false);
}
- ui->prune->setText(tr("Discard blocks after verification, except most recent %1 GB (prune)").arg(m_prune_target_gb));
+ ui->pruneGB->setValue(m_prune_target_gb);
+ ui->pruneGB->setToolTip(ui->prune->toolTip());
+ ui->lblPruneSuffix->setToolTip(ui->prune->toolTip());
UpdatePruneLabels(ui->prune->isChecked());
connect(ui->prune, &QCheckBox::toggled, [this](bool prune_checked) {
UpdatePruneLabels(prune_checked);
UpdateFreeSpaceLabel();
});
+ connect(ui->pruneGB, qOverload<int>(&QSpinBox::valueChanged), [this](int prune_GB) {
+ m_prune_target_gb = prune_GB;
+ UpdatePruneLabels(ui->prune->isChecked());
+ UpdateFreeSpaceLabel();
+ });
startThread();
}
@@ -182,7 +192,17 @@ void Intro::setDataDirectory(const QString &dataDir)
}
}
-bool Intro::showIfNeeded(bool& did_show_intro, bool& prune)
+int64_t Intro::getPruneMiB() const
+{
+ switch (ui->prune->checkState()) {
+ case Qt::Checked:
+ return PruneGBtoMiB(m_prune_target_gb);
+ case Qt::Unchecked: default:
+ return 0;
+ }
+}
+
+bool Intro::showIfNeeded(bool& did_show_intro, int64_t& prune_MiB)
{
did_show_intro = false;
@@ -233,7 +253,7 @@ bool Intro::showIfNeeded(bool& did_show_intro, bool& prune)
}
// Additional preferences:
- prune = intro.ui->prune->isChecked();
+ prune_MiB = intro.getPruneMiB();
settings.setValue("strDataDir", dataDir);
settings.setValue("fReset", false);
@@ -278,12 +298,12 @@ void Intro::setStatus(int status, const QString &message, quint64 bytesAvailable
void Intro::UpdateFreeSpaceLabel()
{
- QString freeString = tr("%n GB of free space available", "", m_bytes_available / GB_BYTES);
+ QString freeString = tr("%1 GB of free space available").arg(m_bytes_available / GB_BYTES);
if (m_bytes_available < m_required_space_gb * GB_BYTES) {
- freeString += " " + tr("(of %n GB needed)", "", m_required_space_gb);
+ freeString += " " + tr("(of %1 GB needed)").arg(m_required_space_gb);
ui->freeSpace->setStyleSheet("QLabel { color: #800000 }");
} else if (m_bytes_available / GB_BYTES - m_required_space_gb < 10) {
- freeString += " " + tr("(%n GB needed for full chain)", "", m_required_space_gb);
+ freeString += " " + tr("(%1 GB needed for full chain)").arg(m_required_space_gb);
ui->freeSpace->setStyleSheet("QLabel { color: #999900 }");
} else {
ui->freeSpace->setStyleSheet("");
@@ -361,6 +381,11 @@ void Intro::UpdatePruneLabels(bool prune_checked)
storageRequiresMsg = tr("Approximately %1 GB of data will be stored in this directory.");
}
ui->lblExplanation3->setVisible(prune_checked);
+ ui->pruneGB->setEnabled(prune_checked);
+ static constexpr uint64_t nPowTargetSpacing = 10 * 60; // from chainparams, which we don't have at this stage
+ static constexpr uint32_t expected_block_data_size = 2250000; // includes undo data
+ const uint64_t expected_backup_days = m_prune_target_gb * 1e9 / (uint64_t(expected_block_data_size) * 86400 / nPowTargetSpacing);
+ ui->lblPruneSuffix->setText(tr("(sufficient to restore backups %n day(s) old)", "block chain pruning", expected_backup_days));
ui->sizeWarningLabel->setText(
tr("%1 will download and store a copy of the Bitcoin block chain.").arg(PACKAGE_NAME) + " " +
storageRequiresMsg.arg(m_required_space_gb) + " " +
diff --git a/src/qt/intro.h b/src/qt/intro.h
index 51f42de7ac..88fe2b722d 100644
--- a/src/qt/intro.h
+++ b/src/qt/intro.h
@@ -36,6 +36,7 @@ public:
QString getDataDirectory();
void setDataDirectory(const QString &dataDir);
+ int64_t getPruneMiB() const;
/**
* Determine data directory. Let the user choose if the current one doesn't exist.
@@ -47,7 +48,7 @@ public:
* @note do NOT call global GetDataDir() before calling this function, this
* will cause the wrong path to be cached.
*/
- static bool showIfNeeded(bool& did_show_intro, bool& prune);
+ static bool showIfNeeded(bool& did_show_intro, int64_t& prune_MiB);
Q_SIGNALS:
void requestCheck();
@@ -72,7 +73,7 @@ private:
//! Total required space (in GB) depending on user choice (prune or not prune).
int64_t m_required_space_gb{0};
uint64_t m_bytes_available{0};
- const int64_t m_prune_target_gb;
+ int64_t m_prune_target_gb;
void startThread();
void checkPath(const QString &dataDir);
diff --git a/src/qt/locale/bitcoin_en.ts b/src/qt/locale/bitcoin_en.ts
index c55cc65b63..e2640c8884 100644
--- a/src/qt/locale/bitcoin_en.ts
+++ b/src/qt/locale/bitcoin_en.ts
@@ -116,17 +116,20 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
</message>
<message>
<location line="+1"/>
- <source>Comma separated file (*.csv)</source>
+ <source>Comma separated file</source>
+ <comment>Name of CSV file format</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+13"/>
- <source>Exporting Failed</source>
+ <location line="+15"/>
+ <source>There was an error trying to save the address list to %1. Please try again.</source>
+ <comment>An error message.</comment>
+ <extracomment>%1 is a name of the file (e.g., &quot;addrbook.csv&quot;) that the bitcoin addresses were exported to.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+1"/>
- <source>There was an error trying to save the address list to %1. Please try again.</source>
+ <location line="-2"/>
+ <source>Exporting Failed</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -143,7 +146,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+36"/>
+ <location line="+38"/>
<source>(no label)</source>
<translation type="unfinished"></translation>
</message>
@@ -192,16 +195,6 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
</message>
<message>
<location line="+3"/>
- <source>This operation needs your wallet passphrase to decrypt the wallet.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+5"/>
- <source>Decrypt wallet</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+3"/>
<source>Change passphrase</source>
<translation type="unfinished"></translation>
</message>
@@ -221,18 +214,18 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+19"/>
- <location line="+57"/>
+ <location line="+18"/>
+ <location line="+44"/>
<source>Wallet encrypted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-147"/>
+ <location line="-125"/>
<source>Enter the new passphrase for the wallet.&lt;br/&gt;Please use a passphrase of &lt;b&gt;ten or more random characters&lt;/b&gt;, or &lt;b&gt;eight or more words&lt;/b&gt;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+23"/>
+ <location line="+15"/>
<source>Enter the old passphrase and new passphrase for the wallet.</source>
<translation type="unfinished"></translation>
</message>
@@ -252,7 +245,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+8"/>
+ <location line="+7"/>
<source>Your wallet is now encrypted. </source>
<translation type="unfinished"></translation>
</message>
@@ -262,49 +255,43 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+6"/>
<location line="+8"/>
- <location line="+8"/>
- <location line="+43"/>
+ <location line="+32"/>
<location line="+6"/>
<source>Wallet encryption failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-56"/>
+ <location line="-45"/>
<source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+8"/>
- <location line="+49"/>
+ <location line="+38"/>
<source>The supplied passphrases do not match.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-38"/>
+ <location line="-27"/>
<location line="+6"/>
<source>Wallet unlock failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="-5"/>
- <location line="+12"/>
- <location line="+19"/>
+ <location line="+20"/>
<source>The passphrase entered for the wallet decryption was incorrect.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-20"/>
- <source>Wallet decryption failed</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+14"/>
+ <location line="-6"/>
<source>Wallet passphrase was successfully changed.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+47"/>
+ <location line="+46"/>
<location line="+33"/>
<source>Warning: The Caps Lock key is on!</source>
<translation type="unfinished"></translation>
@@ -313,7 +300,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<context>
<name>BanTableModel</name>
<message>
- <location filename="../bantablemodel.cpp" line="+86"/>
+ <location filename="../bantablemodel.cpp" line="+85"/>
<source>IP/Netmask</source>
<translation type="unfinished"></translation>
</message>
@@ -324,19 +311,42 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
</message>
</context>
<context>
+ <name>BitcoinApplication</name>
+ <message>
+ <location filename="../bitcoin.cpp" line="+423"/>
+ <source>Runaway exception</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>A fatal error occurred. %1 can no longer continue safely and will quit.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Internal error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>An internal error occurred. %1 will attempt to continue safely. This is an unexpected bug which can be reported as described below.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>BitcoinGUI</name>
<message>
- <location filename="../bitcoingui.cpp" line="+322"/>
+ <location filename="../bitcoingui.cpp" line="+325"/>
<source>Sign &amp;message...</source>
<translation>Sign &amp;message...</translation>
</message>
<message>
- <location line="+669"/>
+ <location line="+668"/>
<source>Synchronizing with network...</source>
<translation>Synchronizing with network...</translation>
</message>
<message>
- <location line="-747"/>
+ <location line="-746"/>
<source>&amp;Overview</source>
<translation>&amp;Overview</translation>
</message>
@@ -426,7 +436,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+210"/>
+ <location line="+209"/>
<source>Wallet:</source>
<translation type="unfinished"></translation>
</message>
@@ -461,7 +471,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-1065"/>
+ <location line="-1064"/>
<source>Send coins to a Bitcoin address</source>
<translation>Send coins to a Bitcoin address</translation>
</message>
@@ -556,7 +566,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message numerus="yes">
- <location line="+556"/>
+ <location line="+555"/>
<source>%n active connection(s) to Bitcoin network</source>
<translation>
<numerusform>%n active connection to Bitcoin network</numerusform>
@@ -617,7 +627,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation>Up to date</translation>
</message>
<message>
- <location line="-695"/>
+ <location line="-694"/>
<source>&amp;Load PSBT from file...</source>
<translation type="unfinished"></translation>
</message>
@@ -737,7 +747,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+246"/>
+ <location line="+245"/>
<source>%1 client</source>
<translation type="unfinished"></translation>
</message>
@@ -833,15 +843,10 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;locked&lt;/b&gt;</translation>
</message>
<message>
- <location line="+129"/>
+ <location line="+121"/>
<source>Original message:</source>
<translation type="unfinished"></translation>
</message>
- <message>
- <location filename="../bitcoin.cpp" line="+418"/>
- <source>A fatal error occurred. %1 can no longer continue safely and will quit.</source>
- <translation type="unfinished"></translation>
- </message>
</context>
<context>
<name>CoinControlDialog</name>
@@ -1036,7 +1041,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<context>
<name>CreateWalletActivity</name>
<message>
- <location filename="../walletcontroller.cpp" line="+241"/>
+ <location filename="../walletcontroller.cpp" line="+250"/>
<source>Creating Wallet &lt;b&gt;%1&lt;/b&gt;...</source>
<translation type="unfinished"></translation>
</message>
@@ -1059,12 +1064,17 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+38"/>
+ <location line="+11"/>
<source>Wallet Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+13"/>
+ <source>Wallet</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+9"/>
<source>Encrypt the wallet. The wallet will be encrypted with a passphrase of your choice.</source>
<translation type="unfinished"></translation>
</message>
@@ -1074,7 +1084,12 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+19"/>
+ <location line="+26"/>
+ <source>Advanced Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+9"/>
<source>Disable private keys for this wallet. Wallets with private keys disabled will have no private keys and cannot have an HD seed or imported private keys. This is ideal for watch-only wallets.</source>
<translation type="unfinished"></translation>
</message>
@@ -1084,7 +1099,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+13"/>
+ <location line="+7"/>
<source>Make a blank wallet. Blank wallets do not initially have private keys or scripts. Private keys and addresses can be imported, or an HD seed can be set, at a later time.</source>
<translation type="unfinished"></translation>
</message>
@@ -1094,7 +1109,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+13"/>
+ <location line="+7"/>
<source>Use descriptors for scriptPubKey management</source>
<translation type="unfinished"></translation>
</message>
@@ -1104,12 +1119,12 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../createwalletdialog.cpp" line="+19"/>
+ <location filename="../createwalletdialog.cpp" line="+21"/>
<source>Create</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+20"/>
+ <location line="+42"/>
<source>Compiled without sqlite support (required for descriptor wallets)</source>
<translation type="unfinished"></translation>
</message>
@@ -1475,7 +1490,12 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+72"/>
+ <location line="+22"/>
+ <source>Enabling pruning significantly reduces the disk space required to store transactions. All blocks are still fully validated. Reverting this setting requires re-downloading the entire blockchain.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+50"/>
<source>Size of &amp;database cache</source>
<translation type="unfinished"></translation>
</message>
@@ -1485,7 +1505,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+161"/>
+ <location line="+171"/>
<location line="+187"/>
<source>IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1)</source>
<translation type="unfinished"></translation>
@@ -1498,17 +1518,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+146"/>
- <source>Hide the icon from the system tray.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+3"/>
- <source>&amp;Hide tray icon</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+17"/>
+ <location line="+169"/>
<source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Exit in the menu.</source>
<translation type="unfinished"></translation>
</message>
@@ -1519,7 +1529,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+79"/>
+ <location line="+179"/>
<source>Open the %1 configuration file from the working directory.</source>
<translation type="unfinished"></translation>
</message>
@@ -1539,17 +1549,12 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation>&amp;Reset Options</translation>
</message>
<message>
- <location line="-532"/>
+ <location line="-645"/>
<source>&amp;Network</source>
<translation>&amp;Network</translation>
</message>
<message>
- <location line="-191"/>
- <source>Disables some advanced features but all blocks will still be fully validated. Reverting this setting requires re-downloading the entire blockchain. Actual disk usage may be somewhat higher.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+3"/>
+ <location line="-188"/>
<source>Prune &amp;block storage to</source>
<translation type="unfinished"></translation>
</message>
@@ -1610,6 +1615,16 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
</message>
<message>
<location line="+7"/>
+ <source>Automatically open the Bitcoin client port on the router. This only works when your router supports NAT-PMP and it is enabled. The external port could be random.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Map port using NA&amp;T-PMP</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+7"/>
<source>Accept connections from outside.</source>
<translation type="unfinished"></translation>
</message>
@@ -1672,7 +1687,17 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation>&amp;Window</translation>
</message>
<message>
- <location line="+16"/>
+ <location line="+6"/>
+ <source>Show the icon in the system tray.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>&amp;Show tray icon</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+10"/>
<source>Show only a tray icon after minimizing the window.</source>
<translation>Show only a tray icon after minimizing the window.</translation>
</message>
@@ -1712,12 +1737,12 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation>Choose the default subdivision unit to show in the interface and when sending coins.</translation>
</message>
<message>
- <location line="-450"/>
+ <location line="-463"/>
<source>Whether to show coin control features or not.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+250"/>
+ <location line="+260"/>
<source>Connect to the Bitcoin network through a separate SOCKS5 proxy for Tor onion services.</source>
<translation type="unfinished"></translation>
</message>
@@ -1727,12 +1752,39 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+211"/>
+ <location line="+214"/>
<source>&amp;Third party transaction URLs</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+44"/>
+ <location line="+22"/>
+ <source>Monospaced font in the Overview tab:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+8"/>
+ <source>embedded &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+22"/>
+ <location line="+49"/>
+ <source>111.11111111 BTC</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="-42"/>
+ <location line="+49"/>
+ <source>909.09090909 BTC</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="-29"/>
+ <source>closest matching &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+65"/>
<source>Options set in this dialog are overridden by the command line or in the configuration file:</source>
<translation type="unfinished"></translation>
</message>
@@ -1747,28 +1799,28 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation>&amp;Cancel</translation>
</message>
<message>
- <location filename="../optionsdialog.cpp" line="+96"/>
+ <location filename="../optionsdialog.cpp" line="+104"/>
<source>default</source>
<translation>default</translation>
</message>
<message>
- <location line="+67"/>
+ <location line="+81"/>
<source>none</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+89"/>
+ <location line="+91"/>
<source>Confirm options reset</source>
<translation>Confirm options reset</translation>
</message>
<message>
<location line="+1"/>
- <location line="+60"/>
+ <location line="+57"/>
<source>Client restart required to activate changes.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-60"/>
+ <location line="-57"/>
<source>Client will be shut down. Do you want to proceed?</source>
<translation type="unfinished"></translation>
</message>
@@ -1793,7 +1845,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+43"/>
+ <location line="+40"/>
<source>This change would require a client restart.</source>
<translation type="unfinished"></translation>
</message>
@@ -1812,12 +1864,12 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
</message>
<message>
<location line="+62"/>
- <location line="+394"/>
+ <location line="+335"/>
<source>The displayed information may be out of date. Your wallet automatically synchronizes with the Bitcoin network after a connection is established, but this process has not completed yet.</source>
<translation>The displayed information may be out of date. Your wallet automatically synchronizes with the Bitcoin network after a connection is established, but this process has not completed yet.</translation>
</message>
<message>
- <location line="-141"/>
+ <location line="-127"/>
<source>Watch-only:</source>
<translation type="unfinished"></translation>
</message>
@@ -1827,22 +1879,22 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+17"/>
+ <location line="+10"/>
<source>Your current spendable balance</source>
<translation>Your current spendable balance</translation>
</message>
<message>
- <location line="+42"/>
+ <location line="+35"/>
<source>Pending:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-242"/>
+ <location line="-200"/>
<source>Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance</source>
<translation>Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance</translation>
</message>
<message>
- <location line="+114"/>
+ <location line="+100"/>
<source>Immature:</source>
<translation>Immature:</translation>
</message>
@@ -1852,22 +1904,22 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation>Mined balance that has not yet matured</translation>
</message>
<message>
- <location line="-181"/>
+ <location line="-150"/>
<source>Balances</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+164"/>
+ <location line="+140"/>
<source>Total:</source>
<translation>Total:</translation>
</message>
<message>
- <location line="+63"/>
+ <location line="+49"/>
<source>Your current total balance</source>
<translation>Your current total balance</translation>
</message>
<message>
- <location line="+95"/>
+ <location line="+74"/>
<source>Your current balance in watch-only addresses</source>
<translation type="unfinished"></translation>
</message>
@@ -1882,22 +1934,22 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-324"/>
+ <location line="-275"/>
<source>Unconfirmed transactions to watch-only addresses</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+52"/>
+ <location line="+38"/>
<source>Mined balance in watch-only addresses that has not yet matured</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+131"/>
+ <location line="+110"/>
<source>Current total balance in watch-only addresses</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../overviewpage.cpp" line="+166"/>
+ <location filename="../overviewpage.cpp" line="+191"/>
<source>Privacy mode activated for the Overview tab. To unmask the values, uncheck Settings-&gt;Mask values.</source>
<translation type="unfinished"></translation>
</message>
@@ -1986,7 +2038,8 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
</message>
<message>
<location line="+1"/>
- <source>Partially Signed Transaction (Binary) (*.psbt)</source>
+ <source>Partially Signed Transaction (Binary)</source>
+ <comment>Name of binary PSBT file format</comment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2058,7 +2111,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<context>
<name>PaymentServer</name>
<message>
- <location filename="../paymentserver.cpp" line="+174"/>
+ <location filename="../paymentserver.cpp" line="+173"/>
<source>Payment request error</source>
<translation type="unfinished"></translation>
</message>
@@ -2083,23 +2136,13 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<message>
<location line="+14"/>
<location line="+23"/>
- <source>Cannot process payment request because BIP70 is not supported.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="-22"/>
- <location line="+23"/>
- <source>Due to widespread security flaws in BIP70 it&apos;s strongly recommended that any merchant instructions to switch wallets be ignored.</source>
+ <source>Cannot process payment request because BIP70 is not supported.
+Due to widespread security flaws in BIP70 it&apos;s strongly recommended that any merchant instructions to switch wallets be ignored.
+If you are receiving this error you should request the merchant provide a BIP21 compatible URI.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-22"/>
- <location line="+23"/>
- <source>If you are receiving this error you should request the merchant provide a BIP21 compatible URI.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="-20"/>
+ <location line="-18"/>
<source>Invalid payment address %1</source>
<translation type="unfinished"></translation>
</message>
@@ -2117,50 +2160,105 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<context>
<name>PeerTableModel</name>
<message>
- <location filename="../peertablemodel.cpp" line="+107"/>
+ <location filename="../peertablemodel.h" line="+91"/>
<source>User Agent</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+0"/>
- <source>Node/Service</source>
+ <source>Ping</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+0"/>
- <source>NodeId</source>
+ <source>Sent</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+0"/>
- <source>Ping</source>
+ <source>Received</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+0"/>
- <source>Sent</source>
+ <source>Peer Id</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+0"/>
- <source>Received</source>
+ <source>Address</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location line="+0"/>
+ <source>Type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+0"/>
+ <source>Network</source>
+ <translation type="unfinished">Network</translation>
+ </message>
</context>
<context>
<name>QObject</name>
<message>
- <location filename="../bitcoinunits.cpp" line="+209"/>
+ <location filename="../bitcoinunits.cpp" line="+213"/>
<source>Amount</source>
<translation type="unfinished">Amount</translation>
</message>
<message>
- <location filename="../guiutil.cpp" line="+108"/>
+ <location filename="../guiutil.cpp" line="+118"/>
<source>Enter a Bitcoin address (e.g. %1)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+652"/>
+ <location line="+532"/>
+ <source>Unroutable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Internal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>Inbound</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+0"/>
+ <source>Outbound</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Full Relay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Block Relay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Manual</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Feeler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Address Fetch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+14"/>
<source>%1 d</source>
<translation type="unfinished"></translation>
</message>
@@ -2176,22 +2274,22 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
</message>
<message>
<location line="+2"/>
- <location line="+26"/>
+ <location line="+28"/>
<source>%1 s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-10"/>
+ <location line="-12"/>
<source>None</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+5"/>
+ <location line="+6"/>
<source>N/A</source>
<translation type="unfinished">N/A</translation>
</message>
<message>
- <location line="+0"/>
+ <location line="+1"/>
<source>%1 ms</source>
<translation type="unfinished"></translation>
</message>
@@ -2256,7 +2354,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
</message>
<message>
<location line="+2"/>
- <source>%1 KB</source>
+ <source>%1 kB</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2270,7 +2368,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../bitcoin.cpp" line="+105"/>
+ <location filename="../bitcoin.cpp" line="+111"/>
<source>Error: Specified data directory &quot;%1&quot; does not exist.</source>
<translation type="unfinished"></translation>
</message>
@@ -2328,13 +2426,14 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+32"/>
+ <location line="+30"/>
<source>Save QR Code</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+0"/>
- <source>PNG Image (*.png)</source>
+ <location line="+1"/>
+ <source>PNG Image</source>
+ <comment>Name of PNG file format</comment>
<translation type="unfinished"></translation>
</message>
</context>
@@ -2344,7 +2443,6 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<location filename="../forms/debugwindow.ui" line="+75"/>
<location line="+26"/>
<location line="+26"/>
- <location line="+26"/>
<location line="+29"/>
<location line="+26"/>
<location line="+36"/>
@@ -2354,14 +2452,19 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<location line="+36"/>
<location line="+23"/>
<location line="+710"/>
+ <location line="+26"/>
+ <location line="+26"/>
<location line="+23"/>
<location line="+23"/>
<location line="+23"/>
+ <location line="+26"/>
+ <location line="+26"/>
<location line="+23"/>
<location line="+23"/>
<location line="+23"/>
<location line="+23"/>
- <location line="+23"/>
+ <location line="+26"/>
+ <location line="+26"/>
<location line="+23"/>
<location line="+23"/>
<location line="+23"/>
@@ -2371,13 +2474,12 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<location line="+23"/>
<location line="+23"/>
<location line="+26"/>
- <location filename="../rpcconsole.cpp" line="+1127"/>
- <location line="+8"/>
+ <location filename="../rpcconsole.h" line="+141"/>
<source>N/A</source>
<translation>N/A</translation>
</message>
<message>
- <location line="-1427"/>
+ <location line="-1534"/>
<source>Client version</source>
<translation>Client version</translation>
</message>
@@ -2393,11 +2495,6 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
</message>
<message>
<location line="+56"/>
- <source>Using BerkeleyDB version</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+26"/>
<source>Datadir</source>
<translation type="unfinished"></translation>
</message>
@@ -2423,11 +2520,12 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
</message>
<message>
<location line="+29"/>
+ <location line="+910"/>
<source>Network</source>
<translation>Network</translation>
</message>
<message>
- <location line="+7"/>
+ <location line="-903"/>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
@@ -2473,18 +2571,18 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
</message>
<message>
<location line="+80"/>
- <location line="+560"/>
+ <location line="+693"/>
<source>Received</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-480"/>
- <location line="+457"/>
+ <location line="-613"/>
+ <location line="+590"/>
<source>Sent</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-416"/>
+ <location line="-549"/>
<source>&amp;Peers</source>
<translation type="unfinished"></translation>
</message>
@@ -2495,23 +2593,17 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
</message>
<message>
<location line="+65"/>
- <location filename="../rpcconsole.cpp" line="-637"/>
- <location line="+766"/>
+ <location filename="../rpcconsole.cpp" line="+1104"/>
<source>Select a peer to view detailed information.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+54"/>
- <source>Direction</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+23"/>
+ <location line="+106"/>
<source>Version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+69"/>
+ <location line="+121"/>
<source>Starting Block</source>
<translation type="unfinished"></translation>
</message>
@@ -2526,7 +2618,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+233"/>
+ <location line="+285"/>
<source>The mapped Autonomous System used for diversifying peer selection.</source>
<translation type="unfinished"></translation>
</message>
@@ -2536,18 +2628,18 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-1394"/>
- <location line="+1066"/>
+ <location line="-1501"/>
+ <location line="+1069"/>
<source>User Agent</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-1140"/>
+ <location line="-1143"/>
<source>Node window</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+279"/>
+ <location line="+253"/>
<source>Current block height</source>
<translation type="unfinished"></translation>
</message>
@@ -2572,17 +2664,72 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+92"/>
+ <location line="+23"/>
+ <source>The direction and type of peer connection: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Direction/Type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+23"/>
+ <source>The network protocol this peer is connected through: IPv4, IPv6, Onion, I2P, or CJDNS.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+72"/>
<source>Services</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+23"/>
+ <source>Whether the peer requested us to relay transactions.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Wants Tx Relay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+23"/>
+ <source>High bandwidth BIP152 compact block relay: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>High Bandwidth</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location line="+92"/>
<source>Connection Time</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+23"/>
+ <source>Elapsed time since a novel block passing initial validity checks was received from this peer.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Last Block</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+23"/>
+ <source>Elapsed time since a novel transaction accepted into our mempool was received from this peer.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Last Tx</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+23"/>
<source>Last Send</source>
<translation type="unfinished"></translation>
</message>
@@ -2617,7 +2764,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-1140"/>
+ <location line="-1273"/>
<source>Last block time</source>
<translation>Last block time</translation>
</message>
@@ -2642,7 +2789,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../rpcconsole.cpp" line="-416"/>
+ <location filename="../rpcconsole.cpp" line="-242"/>
<source>In:</source>
<translation type="unfinished"></translation>
</message>
@@ -2662,7 +2809,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation>Clear console</translation>
</message>
<message>
- <location filename="../rpcconsole.cpp" line="-243"/>
+ <location filename="../rpcconsole.cpp" line="-242"/>
<source>1 &amp;hour</source>
<translation type="unfinished"></translation>
</message>
@@ -2687,15 +2834,82 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../rpcconsole.h" line="-1"/>
+ <source>Yes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+0"/>
+ <source>No</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+0"/>
+ <source>To</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+0"/>
+ <source>From</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location line="+1"/>
+ <source>Ban for</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+37"/>
+ <source>Never</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../rpcconsole.cpp" line="-155"/>
+ <source>Inbound: initiated by peer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location line="+1"/>
+ <source>Outbound Full Relay: default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location line="+1"/>
+ <source>Outbound Block Relay: does not relay transactions or addresses</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location line="+1"/>
- <source>Ban for</source>
+ <source>Outbound Manual: added using RPC %1 or %2/%3 configuration options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+38"/>
+ <location line="+4"/>
+ <source>Outbound Feeler: short-lived, for testing addresses</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Outbound Address Fetch: short-lived, for soliciting addresses</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>we selected the peer for high bandwidth relay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>the peer selected us for high bandwidth relay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>no high bandwidth relay selected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+182"/>
<source>&amp;Unban</source>
<translation type="unfinished"></translation>
</message>
@@ -2735,39 +2949,22 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-2"/>
- <source>Executing command using &quot;%1&quot; wallet</source>
+ <location line="+178"/>
+ <source>(peer id: %1)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+192"/>
- <source>(node id: %1)</source>
+ <location line="-180"/>
+ <source>Executing command using &quot;%1&quot; wallet</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+2"/>
+ <location line="+182"/>
<source>via %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <location line="+1"/>
- <source>never</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+10"/>
- <source>Inbound</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+0"/>
- <source>Outbound</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+20"/>
- <location line="+6"/>
+ <location filename="../rpcconsole.h" line="-37"/>
<source>Unknown</source>
<translation type="unfinished"></translation>
</message>
@@ -2871,12 +3068,17 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../receivecoinsdialog.cpp" line="+45"/>
+ <location filename="../receivecoinsdialog.cpp" line="+46"/>
<source>Copy URI</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1"/>
+ <source>Copy address</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+1"/>
<source>Copy label</source>
<translation type="unfinished"></translation>
</message>
@@ -2891,7 +3093,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+131"/>
+ <location line="+140"/>
<source>Could not unlock wallet.</source>
<translation type="unfinished"></translation>
</message>
@@ -2977,7 +3179,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+39"/>
+ <location line="+41"/>
<source>(no label)</source>
<translation type="unfinished"></translation>
</message>
@@ -3001,7 +3203,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<name>SendCoinsDialog</name>
<message>
<location filename="../forms/sendcoinsdialog.ui" line="+14"/>
- <location filename="../sendcoinsdialog.cpp" line="+664"/>
+ <location filename="../sendcoinsdialog.cpp" line="+673"/>
<source>Send Coins</source>
<translation>Send Coins</translation>
</message>
@@ -3188,7 +3390,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of &quot;100 satos
<translation>S&amp;end</translation>
</message>
<message>
- <location filename="../sendcoinsdialog.cpp" line="-572"/>
+ <location filename="../sendcoinsdialog.cpp" line="-581"/>
<source>Copy quantity</source>
<translation type="unfinished"></translation>
</message>
@@ -3223,12 +3425,12 @@ Note: Since the fee is calculated on a per-byte basis, a fee of &quot;100 satos
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+74"/>
+ <location line="+76"/>
<source>%1 (%2 blocks)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+22"/>
+ <location line="+29"/>
<source>Cr&amp;eate Unsigned</source>
<translation type="unfinished"></translation>
</message>
@@ -3273,12 +3475,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of &quot;100 satos
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+1"/>
- <source>Partially Signed Transaction (Binary) (*.psbt)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+7"/>
+ <location line="+8"/>
<source>PSBT saved</source>
<translation type="unfinished"></translation>
</message>
@@ -3338,7 +3535,13 @@ Note: Since the fee is calculated on a per-byte basis, a fee of &quot;100 satos
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+228"/>
+ <location line="+45"/>
+ <source>Partially Signed Transaction (Binary)</source>
+ <comment>Name of binary PSBT file format</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+183"/>
<source>Watch-only balance:</source>
<translation type="unfinished"></translation>
</message>
@@ -3743,7 +3946,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of &quot;100 satos
<name>TrafficGraphWidget</name>
<message>
<location filename="../trafficgraphwidget.cpp" line="+82"/>
- <source>KB/s</source>
+ <source>kB/s</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -3996,7 +4199,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of &quot;100 satos
<context>
<name>TransactionTableModel</name>
<message>
- <location filename="../transactiontablemodel.cpp" line="+251"/>
+ <location filename="../transactiontablemodel.cpp" line="+252"/>
<source>Date</source>
<translation type="unfinished">Date</translation>
</message>
@@ -4011,7 +4214,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of &quot;100 satos
<translation type="unfinished"></translation>
</message>
<message numerus="yes">
- <location line="+58"/>
+ <location line="+62"/>
<source>Open for %n more block(s)</source>
<translation>
<numerusform>Open for %n more block</numerusform>
@@ -4094,7 +4297,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of &quot;100 satos
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+208"/>
+ <location line="+210"/>
<source>(no label)</source>
<translation type="unfinished"></translation>
</message>
@@ -4132,7 +4335,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of &quot;100 satos
<context>
<name>TransactionView</name>
<message>
- <location filename="../transactionview.cpp" line="+69"/>
+ <location filename="../transactionview.cpp" line="+70"/>
<location line="+16"/>
<source>All</source>
<translation type="unfinished"></translation>
@@ -4203,7 +4406,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of &quot;100 satos
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+51"/>
+ <location line="+63"/>
<source>Abandon transaction</source>
<translation type="unfinished"></translation>
</message>
@@ -4244,26 +4447,27 @@ Note: Since the fee is calculated on a per-byte basis, a fee of &quot;100 satos
</message>
<message>
<location line="+1"/>
- <source>Edit label</source>
+ <source>Edit address label</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+1"/>
- <source>Show transaction details</source>
+ <location line="+186"/>
+ <source>Comma separated file</source>
+ <comment>Name of CSV file format</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+194"/>
- <source>Export Transaction History</source>
+ <location line="-185"/>
+ <source>Show transaction details</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+1"/>
- <source>Comma separated file (*.csv)</source>
+ <location line="+184"/>
+ <source>Export Transaction History</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+9"/>
+ <location line="+10"/>
<source>Confirmed</source>
<translation type="unfinished">Confirmed</translation>
</message>
@@ -4339,7 +4543,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of &quot;100 satos
<context>
<name>WalletController</name>
<message>
- <location filename="../walletcontroller.cpp" line="-238"/>
+ <location filename="../walletcontroller.cpp" line="-247"/>
<source>Close wallet</source>
<translation type="unfinished"></translation>
</message>
@@ -4382,20 +4586,20 @@ Go to File &gt; Open Wallet to load a wallet.
<context>
<name>WalletModel</name>
<message>
- <location filename="../walletmodel.cpp" line="+214"/>
+ <location filename="../walletmodel.cpp" line="+218"/>
<source>Send Coins</source>
<translation type="unfinished">Send Coins</translation>
</message>
<message>
- <location line="+282"/>
- <location line="+45"/>
+ <location line="+279"/>
+ <location line="+52"/>
<location line="+13"/>
<location line="+5"/>
<source>Fee bump error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-63"/>
+ <location line="-70"/>
<source>Increasing transaction fee failed</source>
<translation type="unfinished"></translation>
</message>
@@ -4425,7 +4629,12 @@ Go to File &gt; Open Wallet to load a wallet.
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+4"/>
+ <location line="+8"/>
+ <source>Warning: This may pay the additional fee by reducing change outputs or adding inputs, when necessary. It may add a new change output if one does not already exist. These changes may potentially leak privacy.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
<source>Confirm fee bump</source>
<translation type="unfinished"></translation>
</message>
@@ -4506,7 +4715,8 @@ Go to File &gt; Open Wallet to load a wallet.
</message>
<message>
<location line="+1"/>
- <source>Wallet Data (*.dat)</source>
+ <source>Wallet Data</source>
+ <comment>Name of wallet data file format</comment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -4538,12 +4748,12 @@ Go to File &gt; Open Wallet to load a wallet.
<context>
<name>bitcoin-core</name>
<message>
- <location filename="../bitcoinstrings.cpp" line="+27"/>
+ <location filename="../bitcoinstrings.cpp" line="+31"/>
<source>Distributed under the MIT software license, see the accompanying file %s or %s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+23"/>
+ <location line="+41"/>
<source>Prune configured below the minimum of %d MiB. Please use a higher number.</source>
<translation type="unfinished"></translation>
</message>
@@ -4553,22 +4763,22 @@ Go to File &gt; Open Wallet to load a wallet.
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+112"/>
+ <location line="+124"/>
<source>Pruning blockstore...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+36"/>
+ <location line="+37"/>
<source>Unable to start HTTP server. See debug log for details.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-188"/>
+ <location line="-223"/>
<source>The %s developers</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+7"/>
+ <location line="+10"/>
<source>Cannot obtain a lock on data directory %s. %s is probably already running.</source>
<translation type="unfinished"></translation>
</message>
@@ -4578,17 +4788,17 @@ Go to File &gt; Open Wallet to load a wallet.
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+9"/>
+ <location line="+10"/>
<source>Error reading %s! All keys read correctly, but transaction data or address book entries might be missing or incorrect.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+11"/>
+ <location line="+21"/>
<source>More than one onion bind address is provided. Using %s for the automatically created Tor onion service.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
+ <location line="+11"/>
<source>Please check that your computer&apos;s date and time are correct! If your clock is wrong, %s will not work properly.</source>
<translation type="unfinished"></translation>
</message>
@@ -4638,12 +4848,7 @@ Go to File &gt; Open Wallet to load a wallet.
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+5"/>
- <source>Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+3"/>
+ <location line="+11"/>
<source>Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade.</source>
<translation type="unfinished"></translation>
</message>
@@ -4653,7 +4858,7 @@ Go to File &gt; Open Wallet to load a wallet.
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
+ <location line="+2"/>
<source>Cannot resolve -%s address: &apos;%s&apos;</source>
<translation type="unfinished"></translation>
</message>
@@ -4694,6 +4899,16 @@ Go to File &gt; Open Wallet to load a wallet.
</message>
<message>
<location line="+2"/>
+ <source>Dump file %s does not exist.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Error creating %s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+1"/>
<source>Error initializing block database</source>
<translation>Error initializing block database</translation>
</message>
@@ -4733,7 +4948,47 @@ Go to File &gt; Open Wallet to load a wallet.
<translation>Error opening block database</translation>
</message>
<message>
- <location line="+5"/>
+ <location line="+2"/>
+ <source>Error reading next record from wallet database</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Error: Couldn&apos;t create cursor into database</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Error: Dumpfile checksum does not match. Computed %s, expected %s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Error: Got key that was not hex: %s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Error: Got value that was not hex: %s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Error: Missing checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Error: Unable to parse version %u as a uint32_t</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Error: Unable to write record to new wallet</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+1"/>
<source>Failed to listen on any port. Use -listen=0 if you want this.</source>
<translation>Failed to listen on any port. Use -listen=0 if you want this.</translation>
</message>
@@ -4768,7 +5023,12 @@ Go to File &gt; Open Wallet to load a wallet.
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+4"/>
+ <location line="+2"/>
+ <source>Invalid -i2psam address or hostname: &apos;%s&apos;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
<source>Invalid P2P permission: &apos;%s&apos;</source>
<translation type="unfinished"></translation>
</message>
@@ -4788,7 +5048,7 @@ Go to File &gt; Open Wallet to load a wallet.
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+18"/>
+ <location line="+17"/>
<source>SQLiteDatabase: Failed to execute statement to verify database: %s</source>
<translation type="unfinished"></translation>
</message>
@@ -4823,7 +5083,17 @@ Go to File &gt; Open Wallet to load a wallet.
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+22"/>
+ <location line="+3"/>
+ <source>The specified config file %s does not exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+17"/>
+ <source>Unable to open %s for writing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
<source>Unknown address type &apos;%s&apos;</source>
<translation type="unfinished"></translation>
</message>
@@ -4843,7 +5113,62 @@ Go to File &gt; Open Wallet to load a wallet.
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+1"/>
+ <location line="-170"/>
+ <source>Cannot downgrade wallet from version %i to version %i. Wallet version unchanged.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+8"/>
+ <source>Cannot upgrade a non HD split wallet from version %i to version %i without upgrading to support pre-split keypool. Please use version %i or no version specified.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>Error: Dumpfile format record is incorrect. Got &quot;%s&quot;, expected &quot;format&quot;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Error: Dumpfile identifier record is incorrect. Got &quot;%s&quot;, expected &quot;%s&quot;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Error: Dumpfile version is not supported. This version of bitcoin-wallet only supports version 1 dumpfiles. Got dumpfile with version %s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+8"/>
+ <source>File %s already exists. If you are sure this is what you want, move it out of the way first.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>No dump file provided. To use createfromdump, -dumpfile=&lt;filename&gt; must be provided.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>No dump file provided. To use dump, -dumpfile=&lt;filename&gt; must be provided.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>No wallet file format provided. To use createfromdump, -format=&lt;format&gt; must be provided.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+57"/>
+ <source>Unknown wallet file format &quot;%s&quot; provided. Please provide one of &quot;bdb&quot; or &quot;sqlite&quot;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Warning: Dumpfile wallet format &quot;%s&quot; does not match command line specified format &quot;%s&quot;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+67"/>
<source>Loading banlist...</source>
<translation type="unfinished"></translation>
</message>
@@ -4858,7 +5183,7 @@ Go to File &gt; Open Wallet to load a wallet.
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+2"/>
+ <location line="+1"/>
<source>Prune mode is incompatible with -txindex.</source>
<translation type="unfinished"></translation>
</message>
@@ -4893,7 +5218,7 @@ Go to File &gt; Open Wallet to load a wallet.
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+6"/>
+ <location line="+7"/>
<source>Unsupported logging category %s=%s.</source>
<translation type="unfinished"></translation>
</message>
@@ -4918,27 +5243,22 @@ Go to File &gt; Open Wallet to load a wallet.
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-178"/>
+ <location line="-202"/>
<source>Error: Listening for incoming connections failed (listen returned error %s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-20"/>
+ <location line="-31"/>
<source>%s corrupt. Try using the wallet tool bitcoin-wallet to salvage or restoring a backup.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+11"/>
- <source>Cannot upgrade a non HD split wallet without upgrading to support pre split keypool. Please use version 169900 or no version specified.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+14"/>
+ <location line="+39"/>
<source>Invalid amount for -maxtxfee=&lt;amount&gt;: &apos;%s&apos; (must be at least the minrelay fee of %s to prevent stuck transactions)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+31"/>
+ <location line="+39"/>
<source>The transaction amount is too small to send after the fee has been deducted</source>
<translation type="unfinished"></translation>
</message>
@@ -4958,7 +5278,7 @@ Go to File &gt; Open Wallet to load a wallet.
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+17"/>
+ <location line="+20"/>
<source>You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain</source>
<translation type="unfinished"></translation>
</message>
@@ -4968,7 +5288,7 @@ Go to File &gt; Open Wallet to load a wallet.
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
+ <location line="+2"/>
<source>Cannot set -peerblockfilters without -blockfilterindex.</source>
<translation type="unfinished"></translation>
</message>
@@ -4978,32 +5298,32 @@ Go to File &gt; Open Wallet to load a wallet.
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+11"/>
+ <location line="+13"/>
<source>Error reading from database, shutting down.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+1"/>
+ <location line="+2"/>
<source>Error upgrading chainstate database</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+1"/>
+ <location line="+2"/>
<source>Error: Disk space is low for %s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+1"/>
+ <location line="+4"/>
<source>Error: Keypool ran out, please call keypoolrefill first</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+4"/>
+ <location line="+7"/>
<source>Fee rate (%s) is lower than the minimum fee rate setting (%s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+6"/>
+ <location line="+7"/>
<source>Invalid -onion address or hostname: &apos;%s&apos;</source>
<translation type="unfinished"></translation>
</message>
@@ -5033,12 +5353,7 @@ Go to File &gt; Open Wallet to load a wallet.
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Prune mode is incompatible with -blockfilterindex.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+3"/>
+ <location line="+5"/>
<source>Reducing -maxconnections from %d to %d, because of system limitations.</source>
<translation type="unfinished"></translation>
</message>
@@ -5068,13 +5383,7 @@ Go to File &gt; Open Wallet to load a wallet.
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+4"/>
- <source>The specified config file %s does not exist
-</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+1"/>
+ <location line="+5"/>
<source>The transaction amount is too small to pay the fee</source>
<translation type="unfinished"></translation>
</message>
@@ -5109,7 +5418,7 @@ Go to File &gt; Open Wallet to load a wallet.
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
+ <location line="+4"/>
<source>Unknown -blockfilterindex value %s.</source>
<translation type="unfinished"></translation>
</message>
@@ -5124,12 +5433,12 @@ Go to File &gt; Open Wallet to load a wallet.
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-196"/>
+ <location line="-231"/>
<source>-maxtxfee is set very high! Fees this large could be paid on a single transaction.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+68"/>
+ <location line="+90"/>
<source>This is the transaction fee you may pay when fee estimates are not available.</source>
<translation type="unfinished"></translation>
</message>
@@ -5139,12 +5448,12 @@ Go to File &gt; Open Wallet to load a wallet.
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+23"/>
+ <location line="+26"/>
<source>%s is set very high!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+72"/>
+ <location line="+81"/>
<source>Starting network threads...</source>
<translation type="unfinished"></translation>
</message>
@@ -5179,32 +5488,32 @@ Go to File &gt; Open Wallet to load a wallet.
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+11"/>
+ <location line="+12"/>
<source>Unknown network specified in -onlynet: &apos;%s&apos;</source>
<translation>Unknown network specified in -onlynet: &apos;%s&apos;</translation>
</message>
<message>
- <location line="-59"/>
+ <location line="-60"/>
<source>Insufficient funds</source>
<translation>Insufficient funds</translation>
</message>
<message>
- <location line="-110"/>
+ <location line="-133"/>
<source>Fee estimation failed. Fallbackfee is disabled. Wait a few blocks or enable -fallbackfee.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+63"/>
+ <location line="+80"/>
<source>Warning: Private keys detected in wallet {%s} with disabled private keys</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+17"/>
+ <location line="+13"/>
<source>Cannot write to data directory &apos;%s&apos;; check permissions.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+41"/>
+ <location line="+52"/>
<source>Loading block index...</source>
<translation>Loading block index...</translation>
</message>
@@ -5214,17 +5523,12 @@ Go to File &gt; Open Wallet to load a wallet.
<translation>Loading wallet...</translation>
</message>
<message>
- <location line="-45"/>
- <source>Cannot downgrade wallet</source>
- <translation>Cannot downgrade wallet</translation>
- </message>
- <message>
- <location line="+55"/>
+ <location line="+9"/>
<source>Rescanning...</source>
<translation>Rescanning...</translation>
</message>
<message>
- <location line="-43"/>
+ <location line="-53"/>
<source>Done loading</source>
<translation>Done loading</translation>
</message>
diff --git a/src/qt/locale/bitcoin_en.xlf b/src/qt/locale/bitcoin_en.xlf
new file mode 100644
index 0000000000..a8a5f57f15
--- /dev/null
+++ b/src/qt/locale/bitcoin_en.xlf
@@ -0,0 +1,5688 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:trolltech="urn:trolltech:names:ts:document:1.0">
+ <file original="../forms/addressbookpage.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="AddressBookPage">
+ <trans-unit id="_msg1">
+ <source xml:space="preserve">Right-click to edit address or label</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">37</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg2" approved="yes">
+ <source xml:space="preserve">Create a new address</source>
+ <target xml:space="preserve">Create a new address</target>
+ <context-group purpose="location"><context context-type="linenumber">64</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg3">
+ <source xml:space="preserve">&amp;New</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">67</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg4" approved="yes">
+ <source xml:space="preserve">Copy the currently selected address to the system clipboard</source>
+ <target xml:space="preserve">Copy the currently selected address to the system clipboard</target>
+ <context-group purpose="location"><context context-type="linenumber">81</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg5">
+ <source xml:space="preserve">&amp;Copy</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">84</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg6">
+ <source xml:space="preserve">C&amp;lose</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">151</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg7" approved="yes">
+ <source xml:space="preserve">Delete the currently selected address from the list</source>
+ <target xml:space="preserve">Delete the currently selected address from the list</target>
+ <context-group purpose="location"><context context-type="linenumber">98</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg8">
+ <source xml:space="preserve">Enter address or label to search</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">27</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg9" approved="yes">
+ <source xml:space="preserve">Export the data in the current tab to a file</source>
+ <target xml:space="preserve">Export the data in the current tab to a file</target>
+ <context-group purpose="location"><context context-type="linenumber">128</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg10" approved="yes">
+ <source xml:space="preserve">&amp;Export</source>
+ <target xml:space="preserve">&amp;Export</target>
+ <context-group purpose="location"><context context-type="linenumber">131</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg11" approved="yes">
+ <source xml:space="preserve">&amp;Delete</source>
+ <target xml:space="preserve">&amp;Delete</target>
+ <context-group purpose="location"><context context-type="linenumber">101</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../addressbookpage.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="AddressBookPage">
+ <trans-unit id="_msg12">
+ <source xml:space="preserve">Choose the address to send coins to</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">84</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg13">
+ <source xml:space="preserve">Choose the address to receive coins with</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">85</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg14">
+ <source xml:space="preserve">C&amp;hoose</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">90</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg15">
+ <source xml:space="preserve">Sending addresses</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">96</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg16">
+ <source xml:space="preserve">Receiving addresses</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">97</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg17">
+ <source xml:space="preserve">These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">104</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg18">
+ <source xml:space="preserve">These are your Bitcoin addresses for receiving payments. Use the &apos;Create new receiving address&apos; button in the receive tab to create new addresses.
+Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">109</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg19">
+ <source xml:space="preserve">&amp;Copy Address</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">116</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg20">
+ <source xml:space="preserve">Copy &amp;Label</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">117</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg21">
+ <source xml:space="preserve">&amp;Edit</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">118</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg22">
+ <source xml:space="preserve">Export Address List</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">297</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg23">
+ <source xml:space="preserve">Comma separated file</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">298</context></context-group>
+ <context-group><context context-type="x-gettext-msgctxt">Name of CSV file format</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg24">
+ <source xml:space="preserve">There was an error trying to save the address list to %1. Please try again.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">313</context></context-group>
+ <context-group><context context-type="x-gettext-msgctxt">An error message.</context></context-group>
+ <note annotates="source" from="developer">%1 is a name of the file (e.g., &quot;addrbook.csv&quot;) that the bitcoin addresses were exported to.</note>
+ </trans-unit>
+ <trans-unit id="_msg25">
+ <source xml:space="preserve">Exporting Failed</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">311</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../addresstablemodel.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="AddressTableModel">
+ <trans-unit id="_msg26">
+ <source xml:space="preserve">Label</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">168</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg27">
+ <source xml:space="preserve">Address</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">168</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg28">
+ <source xml:space="preserve">(no label)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">206</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../forms/askpassphrasedialog.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="AskPassphraseDialog">
+ <trans-unit id="_msg29" approved="yes">
+ <source xml:space="preserve">Passphrase Dialog</source>
+ <target xml:space="preserve">Passphrase Dialog</target>
+ <context-group purpose="location"><context context-type="linenumber">26</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg30" approved="yes">
+ <source xml:space="preserve">Enter passphrase</source>
+ <target xml:space="preserve">Enter passphrase</target>
+ <context-group purpose="location"><context context-type="linenumber">56</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg31" approved="yes">
+ <source xml:space="preserve">New passphrase</source>
+ <target xml:space="preserve">New passphrase</target>
+ <context-group purpose="location"><context context-type="linenumber">70</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg32" approved="yes">
+ <source xml:space="preserve">Repeat new passphrase</source>
+ <target xml:space="preserve">Repeat new passphrase</target>
+ <context-group purpose="location"><context context-type="linenumber">84</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg33">
+ <source xml:space="preserve">Show passphrase</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">98</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../askpassphrasedialog.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="AskPassphraseDialog">
+ <trans-unit id="_msg34">
+ <source xml:space="preserve">Encrypt wallet</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">51</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg35">
+ <source xml:space="preserve">This operation needs your wallet passphrase to unlock the wallet.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">54</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg36">
+ <source xml:space="preserve">Unlock wallet</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">59</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg37">
+ <source xml:space="preserve">Change passphrase</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">62</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg38">
+ <source xml:space="preserve">Confirm wallet encryption</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">110</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg39">
+ <source xml:space="preserve">Warning: If you encrypt your wallet and lose your passphrase, you will &lt;b&gt;LOSE ALL OF YOUR BITCOINS&lt;/b&gt;!</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">111</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg40">
+ <source xml:space="preserve">Are you sure you wish to encrypt your wallet?</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">111</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg41">
+ <source xml:space="preserve">Wallet encrypted</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">129</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">173</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg42">
+ <source xml:space="preserve">Enter the new passphrase for the wallet.&lt;br/&gt;Please use a passphrase of &lt;b&gt;ten or more random characters&lt;/b&gt;, or &lt;b&gt;eight or more words&lt;/b&gt;.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">48</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg43">
+ <source xml:space="preserve">Enter the old passphrase and new passphrase for the wallet.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">63</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg44">
+ <source xml:space="preserve">Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">118</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg45">
+ <source xml:space="preserve">Wallet to be encrypted</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">122</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg46">
+ <source xml:space="preserve">Your wallet is about to be encrypted. </source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">124</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg47">
+ <source xml:space="preserve">Your wallet is now encrypted. </source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">131</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg48">
+ <source xml:space="preserve">IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">133</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg49">
+ <source xml:space="preserve">Wallet encryption failed</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">139</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">147</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">179</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">185</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg50">
+ <source xml:space="preserve">Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">140</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg51">
+ <source xml:space="preserve">The supplied passphrases do not match.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">148</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">186</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg52">
+ <source xml:space="preserve">Wallet unlock failed</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">159</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">165</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg53">
+ <source xml:space="preserve">The passphrase entered for the wallet decryption was incorrect.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">160</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">180</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg54">
+ <source xml:space="preserve">Wallet passphrase was successfully changed.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">174</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg55">
+ <source xml:space="preserve">Warning: The Caps Lock key is on!</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">220</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">253</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../bantablemodel.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="BanTableModel">
+ <trans-unit id="_msg56">
+ <source xml:space="preserve">IP/Netmask</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">85</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg57">
+ <source xml:space="preserve">Banned Until</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">85</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../bitcoin.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="BitcoinApplication">
+ <trans-unit id="_msg58">
+ <source xml:space="preserve">Runaway exception</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">423</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg59">
+ <source xml:space="preserve">A fatal error occurred. %1 can no longer continue safely and will quit.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">424</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg60">
+ <source xml:space="preserve">Internal error</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">433</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg61">
+ <source xml:space="preserve">An internal error occurred. %1 will attempt to continue safely. This is an unexpected bug which can be reported as described below.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">434</context></context-group>
+ </trans-unit>
+ </group>
+ <group restype="x-trolltech-linguist-context" resname="QObject">
+ <trans-unit id="_msg62">
+ <source xml:space="preserve">Error: Specified data directory &quot;%1&quot; does not exist.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">545</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg63">
+ <source xml:space="preserve">Error: Cannot parse configuration file: %1.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">551</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg64">
+ <source xml:space="preserve">Error: %1</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">566</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg65">
+ <source xml:space="preserve">Error initializing settings: %1</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">575</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg66">
+ <source xml:space="preserve">%1 didn&apos;t yet exit safely...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">638</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../bitcoingui.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="BitcoinGUI">
+ <trans-unit id="_msg67" approved="yes">
+ <source xml:space="preserve">Sign &amp;message...</source>
+ <target xml:space="preserve">Sign &amp;message...</target>
+ <context-group purpose="location"><context context-type="linenumber">325</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg68" approved="yes">
+ <source xml:space="preserve">Synchronizing with network...</source>
+ <target xml:space="preserve">Synchronizing with network...</target>
+ <context-group purpose="location"><context context-type="linenumber">993</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg69" approved="yes">
+ <source xml:space="preserve">&amp;Overview</source>
+ <target xml:space="preserve">&amp;Overview</target>
+ <context-group purpose="location"><context context-type="linenumber">247</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg70" approved="yes">
+ <source xml:space="preserve">Show general overview of wallet</source>
+ <target xml:space="preserve">Show general overview of wallet</target>
+ <context-group purpose="location"><context context-type="linenumber">248</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg71" approved="yes">
+ <source xml:space="preserve">&amp;Transactions</source>
+ <target xml:space="preserve">&amp;Transactions</target>
+ <context-group purpose="location"><context context-type="linenumber">276</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg72" approved="yes">
+ <source xml:space="preserve">Browse transaction history</source>
+ <target xml:space="preserve">Browse transaction history</target>
+ <context-group purpose="location"><context context-type="linenumber">277</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg73" approved="yes">
+ <source xml:space="preserve">E&amp;xit</source>
+ <target xml:space="preserve">E&amp;xit</target>
+ <context-group purpose="location"><context context-type="linenumber">300</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg74" approved="yes">
+ <source xml:space="preserve">Quit application</source>
+ <target xml:space="preserve">Quit application</target>
+ <context-group purpose="location"><context context-type="linenumber">301</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg75">
+ <source xml:space="preserve">&amp;About %1</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">304</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg76">
+ <source xml:space="preserve">Show information about %1</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">305</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg77" approved="yes">
+ <source xml:space="preserve">About &amp;Qt</source>
+ <target xml:space="preserve">About &amp;Qt</target>
+ <context-group purpose="location"><context context-type="linenumber">308</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg78" approved="yes">
+ <source xml:space="preserve">Show information about Qt</source>
+ <target xml:space="preserve">Show information about Qt</target>
+ <context-group purpose="location"><context context-type="linenumber">309</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg79" approved="yes">
+ <source xml:space="preserve">&amp;Options...</source>
+ <target xml:space="preserve">&amp;Options...</target>
+ <context-group purpose="location"><context context-type="linenumber">311</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg80">
+ <source xml:space="preserve">Modify configuration options for %1</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">312</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg81" approved="yes">
+ <source xml:space="preserve">&amp;Encrypt Wallet...</source>
+ <target xml:space="preserve">&amp;Encrypt Wallet...</target>
+ <context-group purpose="location"><context context-type="linenumber">318</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg82" approved="yes">
+ <source xml:space="preserve">&amp;Backup Wallet...</source>
+ <target xml:space="preserve">&amp;Backup Wallet...</target>
+ <context-group purpose="location"><context context-type="linenumber">321</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg83" approved="yes">
+ <source xml:space="preserve">&amp;Change Passphrase...</source>
+ <target xml:space="preserve">&amp;Change Passphrase...</target>
+ <context-group purpose="location"><context context-type="linenumber">323</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg84">
+ <source xml:space="preserve">Open &amp;URI...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">345</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg85">
+ <source xml:space="preserve">Create Wallet...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">356</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg86">
+ <source xml:space="preserve">Create a new wallet</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">358</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg87">
+ <source xml:space="preserve">Wallet:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">567</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg88">
+ <source xml:space="preserve">Click to disable network activity.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">918</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg89">
+ <source xml:space="preserve">Network activity disabled.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">920</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg90">
+ <source xml:space="preserve">Click to enable network activity again.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">920</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg91">
+ <source xml:space="preserve">Syncing Headers (%1%)...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">947</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg92" approved="yes">
+ <source xml:space="preserve">Reindexing blocks on disk...</source>
+ <target xml:space="preserve">Reindexing blocks on disk...</target>
+ <context-group purpose="location"><context context-type="linenumber">1004</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg93">
+ <source xml:space="preserve">Proxy is &lt;b&gt;enabled&lt;/b&gt;: %1</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1319</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg94" approved="yes">
+ <source xml:space="preserve">Send coins to a Bitcoin address</source>
+ <target xml:space="preserve">Send coins to a Bitcoin address</target>
+ <context-group purpose="location"><context context-type="linenumber">255</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg95" approved="yes">
+ <source xml:space="preserve">Backup wallet to another location</source>
+ <target xml:space="preserve">Backup wallet to another location</target>
+ <context-group purpose="location"><context context-type="linenumber">322</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg96" approved="yes">
+ <source xml:space="preserve">Change the passphrase used for wallet encryption</source>
+ <target xml:space="preserve">Change the passphrase used for wallet encryption</target>
+ <context-group purpose="location"><context context-type="linenumber">324</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg97" approved="yes">
+ <source xml:space="preserve">&amp;Verify message...</source>
+ <target xml:space="preserve">&amp;Verify message...</target>
+ <context-group purpose="location"><context context-type="linenumber">327</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg98" approved="yes">
+ <source xml:space="preserve">&amp;Send</source>
+ <target xml:space="preserve">&amp;Send</target>
+ <context-group purpose="location"><context context-type="linenumber">254</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg99" approved="yes">
+ <source xml:space="preserve">&amp;Receive</source>
+ <target xml:space="preserve">&amp;Receive</target>
+ <context-group purpose="location"><context context-type="linenumber">265</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg100" approved="yes">
+ <source xml:space="preserve">&amp;Show / Hide</source>
+ <target xml:space="preserve">&amp;Show / Hide</target>
+ <context-group purpose="location"><context context-type="linenumber">315</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg101" approved="yes">
+ <source xml:space="preserve">Show or hide the main Window</source>
+ <target xml:space="preserve">Show or hide the main Window</target>
+ <context-group purpose="location"><context context-type="linenumber">316</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg102" approved="yes">
+ <source xml:space="preserve">Encrypt the private keys that belong to your wallet</source>
+ <target xml:space="preserve">Encrypt the private keys that belong to your wallet</target>
+ <context-group purpose="location"><context context-type="linenumber">319</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg103" approved="yes">
+ <source xml:space="preserve">Sign messages with your Bitcoin addresses to prove you own them</source>
+ <target xml:space="preserve">Sign messages with your Bitcoin addresses to prove you own them</target>
+ <context-group purpose="location"><context context-type="linenumber">326</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg104" approved="yes">
+ <source xml:space="preserve">Verify messages to ensure they were signed with specified Bitcoin addresses</source>
+ <target xml:space="preserve">Verify messages to ensure they were signed with specified Bitcoin addresses</target>
+ <context-group purpose="location"><context context-type="linenumber">328</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg105" approved="yes">
+ <source xml:space="preserve">&amp;File</source>
+ <target xml:space="preserve">&amp;File</target>
+ <context-group purpose="location"><context context-type="linenumber">457</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg106" approved="yes">
+ <source xml:space="preserve">&amp;Settings</source>
+ <target xml:space="preserve">&amp;Settings</target>
+ <context-group purpose="location"><context context-type="linenumber">475</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg107" approved="yes">
+ <source xml:space="preserve">&amp;Help</source>
+ <target xml:space="preserve">&amp;Help</target>
+ <context-group purpose="location"><context context-type="linenumber">536</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg108" approved="yes">
+ <source xml:space="preserve">Tabs toolbar</source>
+ <target xml:space="preserve">Tabs toolbar</target>
+ <context-group purpose="location"><context context-type="linenumber">547</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg109">
+ <source xml:space="preserve">Request payments (generates QR codes and bitcoin: URIs)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">266</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg110">
+ <source xml:space="preserve">Show the list of used sending addresses and labels</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">341</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg111">
+ <source xml:space="preserve">Show the list of used receiving addresses and labels</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">343</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg112">
+ <source xml:space="preserve">&amp;Command-line options</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">363</context></context-group>
+ </trans-unit>
+ <group restype="x-gettext-plurals">
+ <context-group purpose="location"><context context-type="linenumber">918</context></context-group>
+ <trans-unit id="_msg113[0]" approved="yes">
+ <source xml:space="preserve">%n active connection(s) to Bitcoin network</source>
+ <target xml:space="preserve">%n active connection to Bitcoin network</target>
+ </trans-unit>
+ <trans-unit id="_msg113[1]" approved="yes">
+ <source xml:space="preserve">%n active connection(s) to Bitcoin network</source>
+ <target xml:space="preserve">%n active connections to Bitcoin network</target>
+ </trans-unit>
+ </group>
+ <trans-unit id="_msg114">
+ <source xml:space="preserve">Indexing blocks on disk...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">998</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg115">
+ <source xml:space="preserve">Processing blocks on disk...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1000</context></context-group>
+ </trans-unit>
+ <group restype="x-gettext-plurals">
+ <context-group purpose="location"><context context-type="linenumber">1019</context></context-group>
+ <trans-unit id="_msg116[0]" approved="yes">
+ <source xml:space="preserve">Processed %n block(s) of transaction history.</source>
+ <target xml:space="preserve">Processed %n block of transaction history.</target>
+ </trans-unit>
+ <trans-unit id="_msg116[1]" approved="yes">
+ <source xml:space="preserve">Processed %n block(s) of transaction history.</source>
+ <target xml:space="preserve">Processed %n blocks of transaction history.</target>
+ </trans-unit>
+ </group>
+ <trans-unit id="_msg117" approved="yes">
+ <source xml:space="preserve">%1 behind</source>
+ <target xml:space="preserve">%1 behind</target>
+ <context-group purpose="location"><context context-type="linenumber">1042</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg118" approved="yes">
+ <source xml:space="preserve">Last received block was generated %1 ago.</source>
+ <target xml:space="preserve">Last received block was generated %1 ago.</target>
+ <context-group purpose="location"><context context-type="linenumber">1066</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg119" approved="yes">
+ <source xml:space="preserve">Transactions after this will not yet be visible.</source>
+ <target xml:space="preserve">Transactions after this will not yet be visible.</target>
+ <context-group purpose="location"><context context-type="linenumber">1068</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg120" approved="yes">
+ <source xml:space="preserve">Error</source>
+ <target xml:space="preserve">Error</target>
+ <context-group purpose="location"><context context-type="linenumber">1093</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg121" approved="yes">
+ <source xml:space="preserve">Warning</source>
+ <target xml:space="preserve">Warning</target>
+ <context-group purpose="location"><context context-type="linenumber">1097</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg122" approved="yes">
+ <source xml:space="preserve">Information</source>
+ <target xml:space="preserve">Information</target>
+ <context-group purpose="location"><context context-type="linenumber">1101</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg123" approved="yes">
+ <source xml:space="preserve">Up to date</source>
+ <target xml:space="preserve">Up to date</target>
+ <context-group purpose="location"><context context-type="linenumber">1023</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg124">
+ <source xml:space="preserve">&amp;Load PSBT from file...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">329</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg125">
+ <source xml:space="preserve">Load Partially Signed Bitcoin Transaction</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">330</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg126">
+ <source xml:space="preserve">Load PSBT from clipboard...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">331</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg127">
+ <source xml:space="preserve">Load Partially Signed Bitcoin Transaction from clipboard</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">332</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg128">
+ <source xml:space="preserve">Node window</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">334</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg129">
+ <source xml:space="preserve">Open node debugging and diagnostic console</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">335</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg130">
+ <source xml:space="preserve">&amp;Sending addresses</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">340</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg131">
+ <source xml:space="preserve">&amp;Receiving addresses</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">342</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg132">
+ <source xml:space="preserve">Open a bitcoin: URI</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">346</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg133">
+ <source xml:space="preserve">Open Wallet</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">348</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg134">
+ <source xml:space="preserve">Open a wallet</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">350</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg135">
+ <source xml:space="preserve">Close Wallet...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">353</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg136">
+ <source xml:space="preserve">Close wallet</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">354</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg137">
+ <source xml:space="preserve">Close All Wallets...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">360</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg138">
+ <source xml:space="preserve">Close all wallets</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">361</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg139">
+ <source xml:space="preserve">Show the %1 help message to get a list with possible Bitcoin command-line options</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">365</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg140">
+ <source xml:space="preserve">&amp;Mask values</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">367</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg141">
+ <source xml:space="preserve">Mask the values in the Overview tab</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">369</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg142">
+ <source xml:space="preserve">default wallet</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">401</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg143">
+ <source xml:space="preserve">No wallets available</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">422</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg144">
+ <source xml:space="preserve">&amp;Window</source>
+ <target xml:space="preserve" state="needs-review-translation">&amp;Window</target>
+ <context-group purpose="location"><context context-type="linenumber">486</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg145">
+ <source xml:space="preserve">Minimize</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">488</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg146">
+ <source xml:space="preserve">Zoom</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">498</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg147">
+ <source xml:space="preserve">Main Window</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">516</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg148">
+ <source xml:space="preserve">%1 client</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">761</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg149">
+ <source xml:space="preserve">Connecting to peers...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1010</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg150" approved="yes">
+ <source xml:space="preserve">Catching up...</source>
+ <target xml:space="preserve">Catching up...</target>
+ <context-group purpose="location"><context context-type="linenumber">1047</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg151">
+ <source xml:space="preserve">Error: %1</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1094</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg152">
+ <source xml:space="preserve">Warning: %1</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1098</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg153">
+ <source xml:space="preserve">Date: %1
+</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1198</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg154">
+ <source xml:space="preserve">Amount: %1
+</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1199</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg155">
+ <source xml:space="preserve">Wallet: %1
+</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1201</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg156">
+ <source xml:space="preserve">Type: %1
+</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1203</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg157">
+ <source xml:space="preserve">Label: %1
+</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1205</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg158">
+ <source xml:space="preserve">Address: %1
+</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1207</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg159" approved="yes">
+ <source xml:space="preserve">Sent transaction</source>
+ <target xml:space="preserve">Sent transaction</target>
+ <context-group purpose="location"><context context-type="linenumber">1208</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg160" approved="yes">
+ <source xml:space="preserve">Incoming transaction</source>
+ <target xml:space="preserve">Incoming transaction</target>
+ <context-group purpose="location"><context context-type="linenumber">1208</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg161">
+ <source xml:space="preserve">HD key generation is &lt;b&gt;enabled&lt;/b&gt;</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1260</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg162">
+ <source xml:space="preserve">HD key generation is &lt;b&gt;disabled&lt;/b&gt;</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1260</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg163">
+ <source xml:space="preserve">Private key &lt;b&gt;disabled&lt;/b&gt;</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1260</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg164" approved="yes">
+ <source xml:space="preserve">Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
+ <target xml:space="preserve">Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</target>
+ <context-group purpose="location"><context context-type="linenumber">1279</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg165" approved="yes">
+ <source xml:space="preserve">Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;locked&lt;/b&gt;</source>
+ <target xml:space="preserve">Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;locked&lt;/b&gt;</target>
+ <context-group purpose="location"><context context-type="linenumber">1287</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg166">
+ <source xml:space="preserve">Original message:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1408</context></context-group>
+ </trans-unit>
+ </group>
+ <group restype="x-trolltech-linguist-context" resname="UnitDisplayStatusBarControl">
+ <trans-unit id="_msg167">
+ <source xml:space="preserve">Unit to show amounts in. Click to select another unit.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1448</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../forms/coincontroldialog.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="CoinControlDialog">
+ <trans-unit id="_msg168">
+ <source xml:space="preserve">Coin Selection</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">14</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg169">
+ <source xml:space="preserve">Quantity:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">48</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg170">
+ <source xml:space="preserve">Bytes:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">77</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg171">
+ <source xml:space="preserve">Amount:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">122</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg172">
+ <source xml:space="preserve">Fee:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">202</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg173">
+ <source xml:space="preserve">Dust:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">154</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg174">
+ <source xml:space="preserve">After Fee:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">247</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg175">
+ <source xml:space="preserve">Change:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">279</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg176">
+ <source xml:space="preserve">(un)select all</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">335</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg177">
+ <source xml:space="preserve">Tree mode</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">351</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg178">
+ <source xml:space="preserve">List mode</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">364</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg179">
+ <source xml:space="preserve">Amount</source>
+ <target xml:space="preserve" state="needs-review-translation">Amount</target>
+ <context-group purpose="location"><context context-type="linenumber">420</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg180">
+ <source xml:space="preserve">Received with label</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">425</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg181">
+ <source xml:space="preserve">Received with address</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">430</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg182">
+ <source xml:space="preserve">Date</source>
+ <target xml:space="preserve" state="needs-review-translation">Date</target>
+ <context-group purpose="location"><context context-type="linenumber">435</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg183">
+ <source xml:space="preserve">Confirmations</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">440</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg184">
+ <source xml:space="preserve">Confirmed</source>
+ <target xml:space="preserve" state="needs-review-translation">Confirmed</target>
+ <context-group purpose="location"><context context-type="linenumber">443</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../coincontroldialog.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="CoinControlDialog">
+ <trans-unit id="_msg185">
+ <source xml:space="preserve">Copy address</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">54</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg186">
+ <source xml:space="preserve">Copy label</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">55</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg187">
+ <source xml:space="preserve">Copy amount</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">56</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">82</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg188">
+ <source xml:space="preserve">Copy transaction ID</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">57</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg189">
+ <source xml:space="preserve">Lock unspent</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">58</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg190">
+ <source xml:space="preserve">Unlock unspent</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">59</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg191">
+ <source xml:space="preserve">Copy quantity</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">81</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg192">
+ <source xml:space="preserve">Copy fee</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">83</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg193">
+ <source xml:space="preserve">Copy after fee</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">84</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg194">
+ <source xml:space="preserve">Copy bytes</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">85</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg195">
+ <source xml:space="preserve">Copy dust</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">86</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg196">
+ <source xml:space="preserve">Copy change</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">87</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg197">
+ <source xml:space="preserve">(%1 locked)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">389</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg198">
+ <source xml:space="preserve">yes</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">544</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg199">
+ <source xml:space="preserve">no</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">544</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg200">
+ <source xml:space="preserve">This label turns red if any recipient receives an amount smaller than the current dust threshold.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">558</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg201">
+ <source xml:space="preserve">Can vary +/- %1 satoshi(s) per input.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">563</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg202">
+ <source xml:space="preserve">(no label)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">601</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">655</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg203">
+ <source xml:space="preserve">change from %1 (%2)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">648</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg204">
+ <source xml:space="preserve">(change)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">649</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../walletcontroller.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="CreateWalletActivity">
+ <trans-unit id="_msg205">
+ <source xml:space="preserve">Creating Wallet &lt;b&gt;%1&lt;/b&gt;...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">250</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg206">
+ <source xml:space="preserve">Create wallet failed</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">278</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg207">
+ <source xml:space="preserve">Create wallet warning</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">280</context></context-group>
+ </trans-unit>
+ </group>
+ <group restype="x-trolltech-linguist-context" resname="OpenWalletActivity">
+ <trans-unit id="_msg208">
+ <source xml:space="preserve">Open wallet failed</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">319</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg209">
+ <source xml:space="preserve">Open wallet warning</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">321</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg210">
+ <source xml:space="preserve">default wallet</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">331</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg211">
+ <source xml:space="preserve">Opening Wallet &lt;b&gt;%1&lt;/b&gt;...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">333</context></context-group>
+ </trans-unit>
+ </group>
+ <group restype="x-trolltech-linguist-context" resname="WalletController">
+ <trans-unit id="_msg212">
+ <source xml:space="preserve">Close wallet</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">86</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg213">
+ <source xml:space="preserve">Are you sure you wish to close the wallet &lt;i&gt;%1&lt;/i&gt;?</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">87</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg214">
+ <source xml:space="preserve">Closing the wallet for too long can result in having to resync the entire chain if pruning is enabled.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">88</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg215">
+ <source xml:space="preserve">Close all wallets</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">101</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg216">
+ <source xml:space="preserve">Are you sure you wish to close all wallets?</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">102</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../forms/createwalletdialog.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="CreateWalletDialog">
+ <trans-unit id="_msg217">
+ <source xml:space="preserve">Create Wallet</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">14</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg218">
+ <source xml:space="preserve">Wallet Name</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">25</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg219">
+ <source xml:space="preserve">Wallet</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">38</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg220">
+ <source xml:space="preserve">Encrypt the wallet. The wallet will be encrypted with a passphrase of your choice.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">47</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg221">
+ <source xml:space="preserve">Encrypt Wallet</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">50</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg222">
+ <source xml:space="preserve">Advanced Options</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">76</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg223">
+ <source xml:space="preserve">Disable private keys for this wallet. Wallets with private keys disabled will have no private keys and cannot have an HD seed or imported private keys. This is ideal for watch-only wallets.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">85</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg224">
+ <source xml:space="preserve">Disable Private Keys</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">88</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg225">
+ <source xml:space="preserve">Make a blank wallet. Blank wallets do not initially have private keys or scripts. Private keys and addresses can be imported, or an HD seed can be set, at a later time.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">95</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg226">
+ <source xml:space="preserve">Make Blank Wallet</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">98</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg227">
+ <source xml:space="preserve">Use descriptors for scriptPubKey management</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">105</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg228">
+ <source xml:space="preserve">Descriptor Wallet</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">108</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../createwalletdialog.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="CreateWalletDialog">
+ <trans-unit id="_msg229">
+ <source xml:space="preserve">Create</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">21</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg230">
+ <source xml:space="preserve">Compiled without sqlite support (required for descriptor wallets)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">63</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../forms/editaddressdialog.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="EditAddressDialog">
+ <trans-unit id="_msg231" approved="yes">
+ <source xml:space="preserve">Edit Address</source>
+ <target xml:space="preserve">Edit Address</target>
+ <context-group purpose="location"><context context-type="linenumber">14</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg232" approved="yes">
+ <source xml:space="preserve">&amp;Label</source>
+ <target xml:space="preserve">&amp;Label</target>
+ <context-group purpose="location"><context context-type="linenumber">25</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg233">
+ <source xml:space="preserve">The label associated with this address list entry</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">35</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg234">
+ <source xml:space="preserve">The address associated with this address list entry. This can only be modified for sending addresses.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">52</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg235" approved="yes">
+ <source xml:space="preserve">&amp;Address</source>
+ <target xml:space="preserve">&amp;Address</target>
+ <context-group purpose="location"><context context-type="linenumber">42</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../editaddressdialog.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="EditAddressDialog">
+ <trans-unit id="_msg236">
+ <source xml:space="preserve">New sending address</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">29</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg237">
+ <source xml:space="preserve">Edit receiving address</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">32</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg238">
+ <source xml:space="preserve">Edit sending address</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">36</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg239">
+ <source xml:space="preserve">The entered address &quot;%1&quot; is not a valid Bitcoin address.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">113</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg240">
+ <source xml:space="preserve">Address &quot;%1&quot; already exists as a receiving address with label &quot;%2&quot; and so cannot be added as a sending address.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">146</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg241">
+ <source xml:space="preserve">The entered address &quot;%1&quot; is already in the address book with label &quot;%2&quot;.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">151</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg242">
+ <source xml:space="preserve">Could not unlock wallet.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">123</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg243">
+ <source xml:space="preserve">New key generation failed.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">128</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../intro.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="FreespaceChecker">
+ <trans-unit id="_msg244" approved="yes">
+ <source xml:space="preserve">A new data directory will be created.</source>
+ <target xml:space="preserve">A new data directory will be created.</target>
+ <context-group purpose="location"><context context-type="linenumber">72</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg245" approved="yes">
+ <source xml:space="preserve">name</source>
+ <target xml:space="preserve">name</target>
+ <context-group purpose="location"><context context-type="linenumber">94</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg246" approved="yes">
+ <source xml:space="preserve">Directory already exists. Add %1 if you intend to create a new directory here.</source>
+ <target xml:space="preserve">Directory already exists. Add %1 if you intend to create a new directory here.</target>
+ <context-group purpose="location"><context context-type="linenumber">96</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg247" approved="yes">
+ <source xml:space="preserve">Path already exists, and is not a directory.</source>
+ <target xml:space="preserve">Path already exists, and is not a directory.</target>
+ <context-group purpose="location"><context context-type="linenumber">99</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg248" approved="yes">
+ <source xml:space="preserve">Cannot create data directory here.</source>
+ <target xml:space="preserve">Cannot create data directory here.</target>
+ <context-group purpose="location"><context context-type="linenumber">106</context></context-group>
+ </trans-unit>
+ </group>
+ <group restype="x-trolltech-linguist-context" resname="Intro">
+ <trans-unit id="_msg249">
+ <source xml:space="preserve">Bitcoin</source>
+ <target xml:space="preserve" state="needs-review-translation">Bitcoin</target>
+ <context-group purpose="location"><context context-type="linenumber">138</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg250">
+ <source xml:space="preserve">Discard blocks after verification, except most recent %1 GB (prune)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">146</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg251">
+ <source xml:space="preserve">At least %1 GB of data will be stored in this directory, and it will grow over time.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">358</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg252">
+ <source xml:space="preserve">Approximately %1 GB of data will be stored in this directory.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">361</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg253">
+ <source xml:space="preserve">%1 will download and store a copy of the Bitcoin block chain.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">365</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg254">
+ <source xml:space="preserve">The wallet will also be stored in this directory.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">367</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg255">
+ <source xml:space="preserve">Error: Specified data directory &quot;%1&quot; cannot be created.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">230</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg256" approved="yes">
+ <source xml:space="preserve">Error</source>
+ <target xml:space="preserve">Error</target>
+ <context-group purpose="location"><context context-type="linenumber">260</context></context-group>
+ </trans-unit>
+ <group restype="x-gettext-plurals">
+ <context-group purpose="location"><context context-type="linenumber">281</context></context-group>
+ <trans-unit id="_msg257[0]" approved="yes">
+ <source xml:space="preserve">%n GB of free space available</source>
+ <target xml:space="preserve">%n GB of free space available</target>
+ </trans-unit>
+ <trans-unit id="_msg257[1]" approved="yes">
+ <source xml:space="preserve">%n GB of free space available</source>
+ <target xml:space="preserve">%n GB of free space available</target>
+ </trans-unit>
+ </group>
+ <group restype="x-gettext-plurals">
+ <context-group purpose="location"><context context-type="linenumber">283</context></context-group>
+ <trans-unit id="_msg258[0]" approved="yes">
+ <source xml:space="preserve">(of %n GB needed)</source>
+ <target xml:space="preserve">(of %n GB needed)</target>
+ </trans-unit>
+ <trans-unit id="_msg258[1]" approved="yes">
+ <source xml:space="preserve">(of %n GB needed)</source>
+ <target xml:space="preserve">(of %n GB needed)</target>
+ </trans-unit>
+ </group>
+ <group restype="x-gettext-plurals">
+ <context-group purpose="location"><context context-type="linenumber">286</context></context-group>
+ <trans-unit id="_msg259[0]">
+ <source xml:space="preserve">(%n GB needed for full chain)</source>
+ <target xml:space="preserve"></target>
+ </trans-unit>
+ <trans-unit id="_msg259[1]">
+ <source xml:space="preserve">(%n GB needed for full chain)</source>
+ <target xml:space="preserve"></target>
+ </trans-unit>
+ </group>
+ </group>
+ </body></file>
+ <file original="../utilitydialog.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="HelpMessageDialog">
+ <trans-unit id="_msg260">
+ <source xml:space="preserve">version</source>
+ <target xml:space="preserve" state="needs-review-translation">version</target>
+ <context-group purpose="location"><context context-type="linenumber">37</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg261">
+ <source xml:space="preserve">About %1</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">41</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg262">
+ <source xml:space="preserve">Command-line options</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">60</context></context-group>
+ </trans-unit>
+ </group>
+ <group restype="x-trolltech-linguist-context" resname="ShutdownWindow">
+ <trans-unit id="_msg263">
+ <source xml:space="preserve">%1 is shutting down...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">145</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg264">
+ <source xml:space="preserve">Do not shut down the computer until this window disappears.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">146</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../forms/intro.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="Intro">
+ <trans-unit id="_msg265" approved="yes">
+ <source xml:space="preserve">Welcome</source>
+ <target xml:space="preserve">Welcome</target>
+ <context-group purpose="location"><context context-type="linenumber">14</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg266">
+ <source xml:space="preserve">Welcome to %1.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">23</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg267">
+ <source xml:space="preserve">As this is the first time the program is launched, you can choose where %1 will store its data.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">49</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg268">
+ <source xml:space="preserve">When you click OK, %1 will begin to download and process the full %4 block chain (%2GB) starting with the earliest transactions in %3 when %4 initially launched.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">206</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg269">
+ <source xml:space="preserve">Reverting this setting requires re-downloading the entire blockchain. It is faster to download the full chain first and prune it later. Disables some advanced features.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">216</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg270">
+ <source xml:space="preserve">This initial synchronisation is very demanding, and may expose hardware problems with your computer that had previously gone unnoticed. Each time you run %1, it will continue downloading where it left off.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">226</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg271">
+ <source xml:space="preserve">If you have chosen to limit block chain storage (pruning), the historical data must still be downloaded and processed, but will be deleted afterward to keep your disk usage low.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">236</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg272" approved="yes">
+ <source xml:space="preserve">Use the default data directory</source>
+ <target xml:space="preserve">Use the default data directory</target>
+ <context-group purpose="location"><context context-type="linenumber">66</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg273" approved="yes">
+ <source xml:space="preserve">Use a custom data directory:</source>
+ <target xml:space="preserve">Use a custom data directory:</target>
+ <context-group purpose="location"><context context-type="linenumber">73</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../forms/modaloverlay.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="ModalOverlay">
+ <trans-unit id="_msg274">
+ <source xml:space="preserve">Form</source>
+ <target xml:space="preserve" state="needs-review-translation">Form</target>
+ <context-group purpose="location"><context context-type="linenumber">14</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg275">
+ <source xml:space="preserve">Recent transactions may not yet be visible, and therefore your wallet&apos;s balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the bitcoin network, as detailed below.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">133</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg276">
+ <source xml:space="preserve">Attempting to spend bitcoins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">152</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg277">
+ <source xml:space="preserve">Number of blocks left</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">215</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg278">
+ <source xml:space="preserve">Unknown...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">222</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">248</context></context-group>
+ <context-group purpose="location"><context context-type="sourcefile">../modaloverlay.cpp</context><context context-type="linenumber">153</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg279">
+ <source xml:space="preserve">Last block time</source>
+ <target xml:space="preserve" state="needs-review-translation">Last block time</target>
+ <context-group purpose="location"><context context-type="linenumber">235</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg280">
+ <source xml:space="preserve">Progress</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">261</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg281">
+ <source xml:space="preserve">Progress increase per hour</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">295</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg282">
+ <source xml:space="preserve">calculating...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">302</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">322</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg283">
+ <source xml:space="preserve">Estimated time left until synced</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">315</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg284">
+ <source xml:space="preserve">Hide</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">352</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg285">
+ <source xml:space="preserve">Esc</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">355</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../modaloverlay.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="ModalOverlay">
+ <trans-unit id="_msg286">
+ <source xml:space="preserve">%1 is currently syncing. It will download headers and blocks from peers and validate them until reaching the tip of the block chain.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">34</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg287">
+ <source xml:space="preserve">Unknown. Syncing Headers (%1, %2%)...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">159</context></context-group>
+ </trans-unit>
+ </group>
+ <group restype="x-trolltech-linguist-context" resname="QObject">
+ <trans-unit id="_msg288">
+ <source xml:space="preserve">unknown</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">123</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../forms/openuridialog.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="OpenURIDialog">
+ <trans-unit id="_msg289">
+ <source xml:space="preserve">Open bitcoin URI</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">14</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg290">
+ <source xml:space="preserve">URI:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">22</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../forms/optionsdialog.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="OptionsDialog">
+ <trans-unit id="_msg291" approved="yes">
+ <source xml:space="preserve">Options</source>
+ <target xml:space="preserve">Options</target>
+ <context-group purpose="location"><context context-type="linenumber">14</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg292" approved="yes">
+ <source xml:space="preserve">&amp;Main</source>
+ <target xml:space="preserve">&amp;Main</target>
+ <context-group purpose="location"><context context-type="linenumber">27</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg293">
+ <source xml:space="preserve">Automatically start %1 after logging in to the system.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">33</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg294">
+ <source xml:space="preserve">&amp;Start %1 on system login</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">36</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg295">
+ <source xml:space="preserve">Enabling pruning significantly reduces the disk space required to store transactions. All blocks are still fully validated. Reverting this setting requires re-downloading the entire blockchain.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">58</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg296">
+ <source xml:space="preserve">Size of &amp;database cache</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">108</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg297">
+ <source xml:space="preserve">Number of script &amp;verification threads</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">151</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg298">
+ <source xml:space="preserve">IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">322</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">509</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg299">
+ <source xml:space="preserve">Shows if the supplied default SOCKS5 proxy is used to reach peers via this network type.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">391</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">414</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">437</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg300">
+ <source xml:space="preserve">Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Exit in the menu.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">606</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg301">
+ <source xml:space="preserve">Third party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">686</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">699</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg302">
+ <source xml:space="preserve">Open the %1 configuration file from the working directory.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">878</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg303">
+ <source xml:space="preserve">Open Configuration File</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">881</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg304" approved="yes">
+ <source xml:space="preserve">Reset all client options to default.</source>
+ <target xml:space="preserve">Reset all client options to default.</target>
+ <context-group purpose="location"><context context-type="linenumber">891</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg305" approved="yes">
+ <source xml:space="preserve">&amp;Reset Options</source>
+ <target xml:space="preserve">&amp;Reset Options</target>
+ <context-group purpose="location"><context context-type="linenumber">894</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg306" approved="yes">
+ <source xml:space="preserve">&amp;Network</source>
+ <target xml:space="preserve">&amp;Network</target>
+ <context-group purpose="location"><context context-type="linenumber">249</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg307">
+ <source xml:space="preserve">Prune &amp;block storage to</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">61</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg308">
+ <source xml:space="preserve">GB</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">71</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg309">
+ <source xml:space="preserve">Reverting this setting requires re-downloading the entire blockchain.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">96</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg310">
+ <source xml:space="preserve">MiB</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">124</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg311">
+ <source xml:space="preserve">(0 = auto, &lt;0 = leave that many cores free)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">164</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg312">
+ <source xml:space="preserve">W&amp;allet</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">200</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg313">
+ <source xml:space="preserve">Expert</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">206</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg314">
+ <source xml:space="preserve">Enable coin &amp;control features</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">215</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg315">
+ <source xml:space="preserve">If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">222</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg316">
+ <source xml:space="preserve">&amp;Spend unconfirmed change</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">225</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg317" approved="yes">
+ <source xml:space="preserve">Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
+ <target xml:space="preserve">Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</target>
+ <context-group purpose="location"><context context-type="linenumber">255</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg318" approved="yes">
+ <source xml:space="preserve">Map port using &amp;UPnP</source>
+ <target xml:space="preserve">Map port using &amp;UPnP</target>
+ <context-group purpose="location"><context context-type="linenumber">258</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg319">
+ <source xml:space="preserve">Automatically open the Bitcoin client port on the router. This only works when your router supports NAT-PMP and it is enabled. The external port could be random.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">265</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg320">
+ <source xml:space="preserve">Map port using NA&amp;T-PMP</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">268</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg321">
+ <source xml:space="preserve">Accept connections from outside.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">275</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg322">
+ <source xml:space="preserve">Allow incomin&amp;g connections</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">278</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg323">
+ <source xml:space="preserve">Connect to the Bitcoin network through a SOCKS5 proxy.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">285</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg324">
+ <source xml:space="preserve">&amp;Connect through SOCKS5 proxy (default proxy):</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">288</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg325" approved="yes">
+ <source xml:space="preserve">Proxy &amp;IP:</source>
+ <target xml:space="preserve">Proxy &amp;IP:</target>
+ <context-group purpose="location"><context context-type="linenumber">297</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">484</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg326" approved="yes">
+ <source xml:space="preserve">&amp;Port:</source>
+ <target xml:space="preserve">&amp;Port:</target>
+ <context-group purpose="location"><context context-type="linenumber">329</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">516</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg327" approved="yes">
+ <source xml:space="preserve">Port of the proxy (e.g. 9050)</source>
+ <target xml:space="preserve">Port of the proxy (e.g. 9050)</target>
+ <context-group purpose="location"><context context-type="linenumber">354</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">541</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg328">
+ <source xml:space="preserve">Used for reaching peers via:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">378</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg329">
+ <source xml:space="preserve">IPv4</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">401</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg330">
+ <source xml:space="preserve">IPv6</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">424</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg331">
+ <source xml:space="preserve">Tor</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">447</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg332" approved="yes">
+ <source xml:space="preserve">&amp;Window</source>
+ <target xml:space="preserve">&amp;Window</target>
+ <context-group purpose="location"><context context-type="linenumber">577</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg333">
+ <source xml:space="preserve">Show the icon in the system tray.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">583</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg334">
+ <source xml:space="preserve">&amp;Show tray icon</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">586</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg335" approved="yes">
+ <source xml:space="preserve">Show only a tray icon after minimizing the window.</source>
+ <target xml:space="preserve">Show only a tray icon after minimizing the window.</target>
+ <context-group purpose="location"><context context-type="linenumber">596</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg336" approved="yes">
+ <source xml:space="preserve">&amp;Minimize to the tray instead of the taskbar</source>
+ <target xml:space="preserve">&amp;Minimize to the tray instead of the taskbar</target>
+ <context-group purpose="location"><context context-type="linenumber">599</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg337" approved="yes">
+ <source xml:space="preserve">M&amp;inimize on close</source>
+ <target xml:space="preserve">M&amp;inimize on close</target>
+ <context-group purpose="location"><context context-type="linenumber">609</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg338" approved="yes">
+ <source xml:space="preserve">&amp;Display</source>
+ <target xml:space="preserve">&amp;Display</target>
+ <context-group purpose="location"><context context-type="linenumber">630</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg339" approved="yes">
+ <source xml:space="preserve">User Interface &amp;language:</source>
+ <target xml:space="preserve">User Interface &amp;language:</target>
+ <context-group purpose="location"><context context-type="linenumber">638</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg340">
+ <source xml:space="preserve">The user interface language can be set here. This setting will take effect after restarting %1.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">651</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg341" approved="yes">
+ <source xml:space="preserve">&amp;Unit to show amounts in:</source>
+ <target xml:space="preserve">&amp;Unit to show amounts in:</target>
+ <context-group purpose="location"><context context-type="linenumber">662</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg342" approved="yes">
+ <source xml:space="preserve">Choose the default subdivision unit to show in the interface and when sending coins.</source>
+ <target xml:space="preserve">Choose the default subdivision unit to show in the interface and when sending coins.</target>
+ <context-group purpose="location"><context context-type="linenumber">675</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg343">
+ <source xml:space="preserve">Whether to show coin control features or not.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">212</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg344">
+ <source xml:space="preserve">Connect to the Bitcoin network through a separate SOCKS5 proxy for Tor onion services.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">472</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg345">
+ <source xml:space="preserve">Use separate SOCKS&amp;5 proxy to reach peers via Tor onion services:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">475</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg346">
+ <source xml:space="preserve">&amp;Third party transaction URLs</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">689</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg347">
+ <source xml:space="preserve">Monospaced font in the Overview tab:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">711</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg348">
+ <source xml:space="preserve">embedded &quot;%1&quot;</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">719</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg349">
+ <source xml:space="preserve">111.11111111 BTC</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">741</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">790</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg350">
+ <source xml:space="preserve">909.09090909 BTC</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">748</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">797</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg351">
+ <source xml:space="preserve">closest matching &quot;%1&quot;</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">768</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg352">
+ <source xml:space="preserve">Options set in this dialog are overridden by the command line or in the configuration file:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">833</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg353" approved="yes">
+ <source xml:space="preserve">&amp;OK</source>
+ <target xml:space="preserve">&amp;OK</target>
+ <context-group purpose="location"><context context-type="linenumber">974</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg354" approved="yes">
+ <source xml:space="preserve">&amp;Cancel</source>
+ <target xml:space="preserve">&amp;Cancel</target>
+ <context-group purpose="location"><context context-type="linenumber">987</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../optionsdialog.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="OptionsDialog">
+ <trans-unit id="_msg355" approved="yes">
+ <source xml:space="preserve">default</source>
+ <target xml:space="preserve">default</target>
+ <context-group purpose="location"><context context-type="linenumber">104</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg356">
+ <source xml:space="preserve">none</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">185</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg357" approved="yes">
+ <source xml:space="preserve">Confirm options reset</source>
+ <target xml:space="preserve">Confirm options reset</target>
+ <context-group purpose="location"><context context-type="linenumber">276</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg358">
+ <source xml:space="preserve">Client restart required to activate changes.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">277</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">334</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg359">
+ <source xml:space="preserve">Client will be shut down. Do you want to proceed?</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">277</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg360">
+ <source xml:space="preserve">Configuration options</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">292</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg361">
+ <source xml:space="preserve">The configuration file is used to specify advanced user options which override GUI settings. Additionally, any command-line options will override this configuration file.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">293</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg362">
+ <source xml:space="preserve">Error</source>
+ <target xml:space="preserve" state="needs-review-translation">Error</target>
+ <context-group purpose="location"><context context-type="linenumber">298</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg363">
+ <source xml:space="preserve">The configuration file could not be opened.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">298</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg364">
+ <source xml:space="preserve">This change would require a client restart.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">338</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg365" approved="yes">
+ <source xml:space="preserve">The supplied proxy address is invalid.</source>
+ <target xml:space="preserve">The supplied proxy address is invalid.</target>
+ <context-group purpose="location"><context context-type="linenumber">366</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../forms/overviewpage.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="OverviewPage">
+ <trans-unit id="_msg366" approved="yes">
+ <source xml:space="preserve">Form</source>
+ <target xml:space="preserve">Form</target>
+ <context-group purpose="location"><context context-type="linenumber">14</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg367" approved="yes">
+ <source xml:space="preserve">The displayed information may be out of date. Your wallet automatically synchronizes with the Bitcoin network after a connection is established, but this process has not completed yet.</source>
+ <target xml:space="preserve">The displayed information may be out of date. Your wallet automatically synchronizes with the Bitcoin network after a connection is established, but this process has not completed yet.</target>
+ <context-group purpose="location"><context context-type="linenumber">76</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">411</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg368">
+ <source xml:space="preserve">Watch-only:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">284</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg369">
+ <source xml:space="preserve">Available:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">294</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg370" approved="yes">
+ <source xml:space="preserve">Your current spendable balance</source>
+ <target xml:space="preserve">Your current spendable balance</target>
+ <context-group purpose="location"><context context-type="linenumber">304</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg371">
+ <source xml:space="preserve">Pending:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">339</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg372" approved="yes">
+ <source xml:space="preserve">Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance</source>
+ <target xml:space="preserve">Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance</target>
+ <context-group purpose="location"><context context-type="linenumber">139</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg373" approved="yes">
+ <source xml:space="preserve">Immature:</source>
+ <target xml:space="preserve">Immature:</target>
+ <context-group purpose="location"><context context-type="linenumber">239</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg374" approved="yes">
+ <source xml:space="preserve">Mined balance that has not yet matured</source>
+ <target xml:space="preserve">Mined balance that has not yet matured</target>
+ <context-group purpose="location"><context context-type="linenumber">210</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg375">
+ <source xml:space="preserve">Balances</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">60</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg376" approved="yes">
+ <source xml:space="preserve">Total:</source>
+ <target xml:space="preserve">Total:</target>
+ <context-group purpose="location"><context context-type="linenumber">200</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg377" approved="yes">
+ <source xml:space="preserve">Your current total balance</source>
+ <target xml:space="preserve">Your current total balance</target>
+ <context-group purpose="location"><context context-type="linenumber">249</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg378">
+ <source xml:space="preserve">Your current balance in watch-only addresses</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">323</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg379">
+ <source xml:space="preserve">Spendable:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">346</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg380">
+ <source xml:space="preserve">Recent transactions</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">395</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg381">
+ <source xml:space="preserve">Unconfirmed transactions to watch-only addresses</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">120</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg382">
+ <source xml:space="preserve">Mined balance in watch-only addresses that has not yet matured</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">158</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg383">
+ <source xml:space="preserve">Current total balance in watch-only addresses</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">268</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../overviewpage.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="OverviewPage">
+ <trans-unit id="_msg384">
+ <source xml:space="preserve">Privacy mode activated for the Overview tab. To unmask the values, uncheck Settings-&gt;Mask values.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">191</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../forms/psbtoperationsdialog.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="PSBTOperationsDialog">
+ <trans-unit id="_msg385">
+ <source xml:space="preserve">Dialog</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">14</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg386">
+ <source xml:space="preserve">Sign Tx</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">86</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg387">
+ <source xml:space="preserve">Broadcast Tx</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">102</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg388">
+ <source xml:space="preserve">Copy to Clipboard</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">122</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg389">
+ <source xml:space="preserve">Save...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">129</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg390">
+ <source xml:space="preserve">Close</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">136</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../psbtoperationsdialog.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="PSBTOperationsDialog">
+ <trans-unit id="_msg391">
+ <source xml:space="preserve">Failed to load transaction: %1</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">55</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg392">
+ <source xml:space="preserve">Failed to sign transaction: %1</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">73</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg393">
+ <source xml:space="preserve">Could not sign any more inputs.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">81</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg394">
+ <source xml:space="preserve">Signed %1 inputs, but more signatures are still required.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">83</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg395">
+ <source xml:space="preserve">Signed transaction successfully. Transaction is ready to broadcast.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">86</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg396">
+ <source xml:space="preserve">Unknown error processing transaction.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">98</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg397">
+ <source xml:space="preserve">Transaction broadcast successfully! Transaction ID: %1</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">108</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg398">
+ <source xml:space="preserve">Transaction broadcast failed: %1</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">111</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg399">
+ <source xml:space="preserve">PSBT copied to clipboard.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">120</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg400">
+ <source xml:space="preserve">Save Transaction Data</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">143</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg401">
+ <source xml:space="preserve">Partially Signed Transaction (Binary)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">144</context></context-group>
+ <context-group><context context-type="x-gettext-msgctxt">Name of binary PSBT file format</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg402">
+ <source xml:space="preserve">PSBT saved to disk.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">151</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg403">
+ <source xml:space="preserve"> * Sends %1 to %2</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">167</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg404">
+ <source xml:space="preserve">Unable to calculate transaction fee or total transaction amount.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">177</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg405">
+ <source xml:space="preserve">Pays transaction fee: </source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">179</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg406">
+ <source xml:space="preserve">Total Amount</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">191</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg407">
+ <source xml:space="preserve">or</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">194</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg408">
+ <source xml:space="preserve">Transaction has %1 unsigned inputs.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">200</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg409">
+ <source xml:space="preserve">Transaction is missing some information about inputs.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">242</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg410">
+ <source xml:space="preserve">Transaction still needs signature(s).</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">246</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg411">
+ <source xml:space="preserve">(But this wallet cannot sign transactions.)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">249</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg412">
+ <source xml:space="preserve">(But this wallet does not have the right keys.)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">252</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg413">
+ <source xml:space="preserve">Transaction is fully signed and ready for broadcast.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">260</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg414">
+ <source xml:space="preserve">Transaction status is unknown.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">264</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../paymentserver.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="PaymentServer">
+ <trans-unit id="_msg415">
+ <source xml:space="preserve">Payment request error</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">173</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg416">
+ <source xml:space="preserve">Cannot start bitcoin: click-to-pay handler</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">174</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg417">
+ <source xml:space="preserve">URI handling</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">224</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">237</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">243</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">250</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg418">
+ <source xml:space="preserve">&apos;bitcoin://&apos; is not a valid URI. Use &apos;bitcoin:&apos; instead.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">224</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg419">
+ <source xml:space="preserve">Cannot process payment request because BIP70 is not supported.
+Due to widespread security flaws in BIP70 it&apos;s strongly recommended that any merchant instructions to switch wallets be ignored.
+If you are receiving this error you should request the merchant provide a BIP21 compatible URI.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">238</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">261</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg420">
+ <source xml:space="preserve">Invalid payment address %1</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">243</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg421">
+ <source xml:space="preserve">URI cannot be parsed! This can be caused by an invalid Bitcoin address or malformed URI parameters.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">251</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg422">
+ <source xml:space="preserve">Payment request file handling</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">260</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../peertablemodel.h" datatype="c" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="PeerTableModel">
+ <trans-unit id="_msg423">
+ <source xml:space="preserve">User Agent</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">91</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg424">
+ <source xml:space="preserve">Ping</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">91</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg425">
+ <source xml:space="preserve">Sent</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">91</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg426">
+ <source xml:space="preserve">Received</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">91</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg427">
+ <source xml:space="preserve">Peer Id</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">91</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg428">
+ <source xml:space="preserve">Address</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">91</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg429">
+ <source xml:space="preserve">Type</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">91</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg430">
+ <source xml:space="preserve">Network</source>
+ <target xml:space="preserve" state="needs-review-translation">Network</target>
+ <context-group purpose="location"><context context-type="linenumber">91</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../bitcoinunits.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="QObject">
+ <trans-unit id="_msg431">
+ <source xml:space="preserve">Amount</source>
+ <target xml:space="preserve" state="needs-review-translation">Amount</target>
+ <context-group purpose="location"><context context-type="linenumber">213</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../guiutil.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="QObject">
+ <trans-unit id="_msg432">
+ <source xml:space="preserve">Enter a Bitcoin address (e.g. %1)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">118</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg433">
+ <source xml:space="preserve">Unroutable</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">650</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg434">
+ <source xml:space="preserve">Internal</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">656</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg435">
+ <source xml:space="preserve">Inbound</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">666</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg436">
+ <source xml:space="preserve">Outbound</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">666</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg437">
+ <source xml:space="preserve">Full Relay</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">670</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg438">
+ <source xml:space="preserve">Block Relay</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">671</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg439">
+ <source xml:space="preserve">Manual</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">672</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg440">
+ <source xml:space="preserve">Feeler</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">673</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg441">
+ <source xml:space="preserve">Address Fetch</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">674</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg442">
+ <source xml:space="preserve">%1 d</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">688</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg443">
+ <source xml:space="preserve">%1 h</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">690</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg444">
+ <source xml:space="preserve">%1 m</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">692</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg445">
+ <source xml:space="preserve">%1 s</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">694</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">722</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg446">
+ <source xml:space="preserve">None</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">710</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg447">
+ <source xml:space="preserve">N/A</source>
+ <target xml:space="preserve" state="needs-review-translation">N/A</target>
+ <context-group purpose="location"><context context-type="linenumber">716</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg448">
+ <source xml:space="preserve">%1 ms</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">717</context></context-group>
+ </trans-unit>
+ <group restype="x-gettext-plurals">
+ <context-group purpose="location"><context context-type="linenumber">735</context></context-group>
+ <trans-unit id="_msg449[0]" approved="yes">
+ <source xml:space="preserve">%n second(s)</source>
+ <target xml:space="preserve">%n second</target>
+ </trans-unit>
+ <trans-unit id="_msg449[1]" approved="yes">
+ <source xml:space="preserve">%n second(s)</source>
+ <target xml:space="preserve">%n seconds</target>
+ </trans-unit>
+ </group>
+ <group restype="x-gettext-plurals">
+ <context-group purpose="location"><context context-type="linenumber">739</context></context-group>
+ <trans-unit id="_msg450[0]" approved="yes">
+ <source xml:space="preserve">%n minute(s)</source>
+ <target xml:space="preserve">%n minute</target>
+ </trans-unit>
+ <trans-unit id="_msg450[1]" approved="yes">
+ <source xml:space="preserve">%n minute(s)</source>
+ <target xml:space="preserve">%n minutes</target>
+ </trans-unit>
+ </group>
+ <group restype="x-gettext-plurals">
+ <context-group purpose="location"><context context-type="linenumber">743</context></context-group>
+ <trans-unit id="_msg451[0]">
+ <source xml:space="preserve">%n hour(s)</source>
+ <target xml:space="preserve" state="needs-review-translation">%n hour</target>
+ </trans-unit>
+ <trans-unit id="_msg451[1]">
+ <source xml:space="preserve">%n hour(s)</source>
+ <target xml:space="preserve" state="needs-review-translation">%n hours</target>
+ </trans-unit>
+ </group>
+ <group restype="x-gettext-plurals">
+ <context-group purpose="location"><context context-type="linenumber">747</context></context-group>
+ <trans-unit id="_msg452[0]">
+ <source xml:space="preserve">%n day(s)</source>
+ <target xml:space="preserve" state="needs-review-translation">%n day</target>
+ </trans-unit>
+ <trans-unit id="_msg452[1]">
+ <source xml:space="preserve">%n day(s)</source>
+ <target xml:space="preserve" state="needs-review-translation">%n days</target>
+ </trans-unit>
+ </group>
+ <group restype="x-gettext-plurals">
+ <context-group purpose="location"><context context-type="linenumber">751</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">757</context></context-group>
+ <trans-unit id="_msg453[0]">
+ <source xml:space="preserve">%n week(s)</source>
+ <target xml:space="preserve" state="needs-review-translation">%n week</target>
+ </trans-unit>
+ <trans-unit id="_msg453[1]">
+ <source xml:space="preserve">%n week(s)</source>
+ <target xml:space="preserve" state="needs-review-translation">%n weeks</target>
+ </trans-unit>
+ </group>
+ <trans-unit id="_msg454">
+ <source xml:space="preserve">%1 and %2</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">757</context></context-group>
+ </trans-unit>
+ <group restype="x-gettext-plurals">
+ <context-group purpose="location"><context context-type="linenumber">757</context></context-group>
+ <trans-unit id="_msg455[0]">
+ <source xml:space="preserve">%n year(s)</source>
+ <target xml:space="preserve" state="needs-review-translation">%n year</target>
+ </trans-unit>
+ <trans-unit id="_msg455[1]">
+ <source xml:space="preserve">%n year(s)</source>
+ <target xml:space="preserve" state="needs-review-translation">%n years</target>
+ </trans-unit>
+ </group>
+ <trans-unit id="_msg456">
+ <source xml:space="preserve">%1 B</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">765</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg457">
+ <source xml:space="preserve">%1 kB</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">767</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg458">
+ <source xml:space="preserve">%1 MB</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">769</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg459">
+ <source xml:space="preserve">%1 GB</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">771</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../qrimagewidget.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="QRImageWidget">
+ <trans-unit id="_msg460">
+ <source xml:space="preserve">&amp;Save Image...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">30</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg461">
+ <source xml:space="preserve">&amp;Copy Image</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">33</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg462">
+ <source xml:space="preserve">Resulting URI too long, try to reduce the text for label / message.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">46</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg463">
+ <source xml:space="preserve">Error encoding URI into QR Code.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">53</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg464">
+ <source xml:space="preserve">QR code support not available.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">94</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg465">
+ <source xml:space="preserve">Save QR Code</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">124</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg466">
+ <source xml:space="preserve">PNG Image</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">125</context></context-group>
+ <context-group><context context-type="x-gettext-msgctxt">Name of PNG file format</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../forms/debugwindow.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="RPCConsole">
+ <trans-unit id="_msg467" approved="yes">
+ <source xml:space="preserve">N/A</source>
+ <target xml:space="preserve">N/A</target>
+ <context-group purpose="location"><context context-type="linenumber">75</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">101</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">127</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">156</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">182</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">218</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">241</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">277</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">300</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">336</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">359</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1069</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1095</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1121</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1144</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1167</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1190</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1216</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1242</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1265</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1288</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1311</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1334</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1360</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1386</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1409</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1432</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1455</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1478</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1501</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1527</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1550</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1573</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1599</context></context-group>
+ <context-group purpose="location"><context context-type="sourcefile">../rpcconsole.h</context><context context-type="linenumber">141</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg468" approved="yes">
+ <source xml:space="preserve">Client version</source>
+ <target xml:space="preserve">Client version</target>
+ <context-group purpose="location"><context context-type="linenumber">65</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg469" approved="yes">
+ <source xml:space="preserve">&amp;Information</source>
+ <target xml:space="preserve">&amp;Information</target>
+ <context-group purpose="location"><context context-type="linenumber">43</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg470">
+ <source xml:space="preserve">General</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">58</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg471">
+ <source xml:space="preserve">Datadir</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">114</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg472">
+ <source xml:space="preserve">To specify a non-default location of the data directory use the &apos;%1&apos; option.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">124</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg473">
+ <source xml:space="preserve">Blocksdir</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">143</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg474">
+ <source xml:space="preserve">To specify a non-default location of the blocks directory use the &apos;%1&apos; option.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">153</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg475" approved="yes">
+ <source xml:space="preserve">Startup time</source>
+ <target xml:space="preserve">Startup time</target>
+ <context-group purpose="location"><context context-type="linenumber">172</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg476" approved="yes">
+ <source xml:space="preserve">Network</source>
+ <target xml:space="preserve">Network</target>
+ <context-group purpose="location"><context context-type="linenumber">201</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1111</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg477">
+ <source xml:space="preserve">Name</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">208</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg478" approved="yes">
+ <source xml:space="preserve">Number of connections</source>
+ <target xml:space="preserve">Number of connections</target>
+ <context-group purpose="location"><context context-type="linenumber">231</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg479" approved="yes">
+ <source xml:space="preserve">Block chain</source>
+ <target xml:space="preserve">Block chain</target>
+ <context-group purpose="location"><context context-type="linenumber">260</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg480">
+ <source xml:space="preserve">Memory Pool</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">319</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg481">
+ <source xml:space="preserve">Current number of transactions</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">326</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg482">
+ <source xml:space="preserve">Memory usage</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">349</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg483">
+ <source xml:space="preserve">Wallet: </source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">443</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg484">
+ <source xml:space="preserve">(none)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">454</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg485">
+ <source xml:space="preserve">&amp;Reset</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">695</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg486">
+ <source xml:space="preserve">Received</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">775</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1468</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg487">
+ <source xml:space="preserve">Sent</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">855</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1445</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg488">
+ <source xml:space="preserve">&amp;Peers</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">896</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg489">
+ <source xml:space="preserve">Banned peers</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">963</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg490">
+ <source xml:space="preserve">Select a peer to view detailed information.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1028</context></context-group>
+ <context-group purpose="location"><context context-type="sourcefile">../rpcconsole.cpp</context><context context-type="linenumber">1104</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg491">
+ <source xml:space="preserve">Version</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1134</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg492">
+ <source xml:space="preserve">Starting Block</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1255</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg493">
+ <source xml:space="preserve">Synced Headers</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1278</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg494">
+ <source xml:space="preserve">Synced Blocks</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1301</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg495">
+ <source xml:space="preserve">The mapped Autonomous System used for diversifying peer selection.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1586</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg496">
+ <source xml:space="preserve">Mapped AS</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1589</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg497">
+ <source xml:space="preserve">User Agent</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">88</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1157</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg498">
+ <source xml:space="preserve">Node window</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">14</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg499">
+ <source xml:space="preserve">Current block height</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">267</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg500">
+ <source xml:space="preserve">Open the %1 debug log file from the current data directory. This can take a few seconds for large log files.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">397</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg501">
+ <source xml:space="preserve">Decrease font size</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">481</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg502">
+ <source xml:space="preserve">Increase font size</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">513</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg503">
+ <source xml:space="preserve">Permissions</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1059</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg504">
+ <source xml:space="preserve">The direction and type of peer connection: %1</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1082</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg505">
+ <source xml:space="preserve">Direction/Type</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1085</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg506">
+ <source xml:space="preserve">The network protocol this peer is connected through: IPv4, IPv6, Onion, I2P, or CJDNS.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1108</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg507">
+ <source xml:space="preserve">Services</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1180</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg508">
+ <source xml:space="preserve">Whether the peer requested us to relay transactions.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1203</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg509">
+ <source xml:space="preserve">Wants Tx Relay</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1206</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg510">
+ <source xml:space="preserve">High bandwidth BIP152 compact block relay: %1</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1229</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg511">
+ <source xml:space="preserve">High Bandwidth</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1232</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg512">
+ <source xml:space="preserve">Connection Time</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1324</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg513">
+ <source xml:space="preserve">Elapsed time since a novel block passing initial validity checks was received from this peer.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1347</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg514">
+ <source xml:space="preserve">Last Block</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1350</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg515">
+ <source xml:space="preserve">Elapsed time since a novel transaction accepted into our mempool was received from this peer.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1373</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg516">
+ <source xml:space="preserve">Last Tx</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1376</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg517">
+ <source xml:space="preserve">Last Send</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1399</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg518">
+ <source xml:space="preserve">Last Receive</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1422</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg519">
+ <source xml:space="preserve">Ping Time</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1491</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg520">
+ <source xml:space="preserve">The duration of a currently outstanding ping.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1514</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg521">
+ <source xml:space="preserve">Ping Wait</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1517</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg522">
+ <source xml:space="preserve">Min Ping</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1540</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg523">
+ <source xml:space="preserve">Time Offset</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1563</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg524" approved="yes">
+ <source xml:space="preserve">Last block time</source>
+ <target xml:space="preserve">Last block time</target>
+ <context-group purpose="location"><context context-type="linenumber">290</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg525" approved="yes">
+ <source xml:space="preserve">&amp;Open</source>
+ <target xml:space="preserve">&amp;Open</target>
+ <context-group purpose="location"><context context-type="linenumber">400</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg526" approved="yes">
+ <source xml:space="preserve">&amp;Console</source>
+ <target xml:space="preserve">&amp;Console</target>
+ <context-group purpose="location"><context context-type="linenumber">426</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg527">
+ <source xml:space="preserve">&amp;Network Traffic</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">643</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg528">
+ <source xml:space="preserve">Totals</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">711</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg529" approved="yes">
+ <source xml:space="preserve">Debug log file</source>
+ <target xml:space="preserve">Debug log file</target>
+ <context-group purpose="location"><context context-type="linenumber">390</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg530" approved="yes">
+ <source xml:space="preserve">Clear console</source>
+ <target xml:space="preserve">Clear console</target>
+ <context-group purpose="location"><context context-type="linenumber">545</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../rpcconsole.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="RPCConsole">
+ <trans-unit id="_msg531">
+ <source xml:space="preserve">In:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">862</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg532">
+ <source xml:space="preserve">Out:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">863</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg533">
+ <source xml:space="preserve">1 &amp;hour</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">621</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg534">
+ <source xml:space="preserve">1 &amp;day</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">622</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg535">
+ <source xml:space="preserve">1 &amp;week</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">623</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg536">
+ <source xml:space="preserve">1 &amp;year</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">624</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg537">
+ <source xml:space="preserve">&amp;Disconnect</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">620</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg538">
+ <source xml:space="preserve">Inbound: initiated by peer</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">465</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg539">
+ <source xml:space="preserve">Outbound Full Relay: default</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">466</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg540">
+ <source xml:space="preserve">Outbound Block Relay: does not relay transactions or addresses</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">467</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg541">
+ <source xml:space="preserve">Outbound Manual: added using RPC %1 or %2/%3 configuration options</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">468</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg542">
+ <source xml:space="preserve">Outbound Feeler: short-lived, for testing addresses</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">472</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg543">
+ <source xml:space="preserve">Outbound Address Fetch: short-lived, for soliciting addresses</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">473</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg544">
+ <source xml:space="preserve">we selected the peer for high bandwidth relay</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">477</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg545">
+ <source xml:space="preserve">the peer selected us for high bandwidth relay</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">478</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg546">
+ <source xml:space="preserve">no high bandwidth relay selected</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">479</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg547">
+ <source xml:space="preserve">&amp;Unban</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">661</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg548">
+ <source xml:space="preserve">Welcome to the %1 RPC console.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">825</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg549">
+ <source xml:space="preserve">Use up and down arrows to navigate history, and %1 to clear screen.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">826</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg550">
+ <source xml:space="preserve">Type %1 for an overview of available commands.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">827</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg551">
+ <source xml:space="preserve">For more information on using this console type %1.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">828</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg552">
+ <source xml:space="preserve">WARNING: Scammers have been active, telling users to type commands here, stealing their wallet contents. Do not use this console without fully understanding the ramifications of a command.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">830</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg553">
+ <source xml:space="preserve">Network activity disabled</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">866</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg554">
+ <source xml:space="preserve">Executing command without any wallet</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">932</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg555">
+ <source xml:space="preserve">(peer id: %1)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1110</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg556">
+ <source xml:space="preserve">Executing command using &quot;%1&quot; wallet</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">930</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg557">
+ <source xml:space="preserve">via %1</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1112</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../rpcconsole.h" datatype="c" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="RPCConsole">
+ <trans-unit id="_msg558">
+ <source xml:space="preserve">Yes</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">140</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg559">
+ <source xml:space="preserve">No</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">140</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg560">
+ <source xml:space="preserve">To</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">140</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg561">
+ <source xml:space="preserve">From</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">140</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg562">
+ <source xml:space="preserve">Ban for</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">141</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg563">
+ <source xml:space="preserve">Never</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">178</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg564">
+ <source xml:space="preserve">Unknown</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">141</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../forms/receivecoinsdialog.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="ReceiveCoinsDialog">
+ <trans-unit id="_msg565">
+ <source xml:space="preserve">&amp;Amount:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">37</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg566">
+ <source xml:space="preserve">&amp;Label:</source>
+ <target xml:space="preserve" state="needs-review-translation">&amp;Label:</target>
+ <context-group purpose="location"><context context-type="linenumber">83</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg567">
+ <source xml:space="preserve">&amp;Message:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">53</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg568">
+ <source xml:space="preserve">An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Bitcoin network.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">50</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg569">
+ <source xml:space="preserve">An optional label to associate with the new receiving address.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">80</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg570">
+ <source xml:space="preserve">Use this form to request payments. All fields are &lt;b&gt;optional&lt;/b&gt;.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">73</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg571">
+ <source xml:space="preserve">An optional amount to request. Leave this empty or zero to not request a specific amount.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">34</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">193</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg572">
+ <source xml:space="preserve">An optional label to associate with the new receiving address (used by you to identify an invoice). It is also attached to the payment request.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">66</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg573">
+ <source xml:space="preserve">An optional message that is attached to the payment request and may be displayed to the sender.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">96</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg574">
+ <source xml:space="preserve">&amp;Create new receiving address</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">111</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg575">
+ <source xml:space="preserve">Clear all fields of the form.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">134</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg576">
+ <source xml:space="preserve">Clear</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">137</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg577">
+ <source xml:space="preserve">Native segwit addresses (aka Bech32 or BIP-173) reduce your transaction fees later on and offer better protection against typos, but old wallets don&apos;t support them. When unchecked, an address compatible with older wallets will be created instead.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">215</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg578">
+ <source xml:space="preserve">Generate native segwit (Bech32) address</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">218</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg579">
+ <source xml:space="preserve">Requested payments history</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">279</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg580">
+ <source xml:space="preserve">Show the selected request (does the same as double clicking an entry)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">304</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg581">
+ <source xml:space="preserve">Show</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">307</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg582">
+ <source xml:space="preserve">Remove the selected entries from the list</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">324</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg583">
+ <source xml:space="preserve">Remove</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">327</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../receivecoinsdialog.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="ReceiveCoinsDialog">
+ <trans-unit id="_msg584">
+ <source xml:space="preserve">Copy URI</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">46</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg585">
+ <source xml:space="preserve">Copy address</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">47</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg586">
+ <source xml:space="preserve">Copy label</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">48</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg587">
+ <source xml:space="preserve">Copy message</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">49</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg588">
+ <source xml:space="preserve">Copy amount</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">50</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg589">
+ <source xml:space="preserve">Could not unlock wallet.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">190</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg590">
+ <source xml:space="preserve">Could not generate new %1 address</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">195</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../forms/receiverequestdialog.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="ReceiveRequestDialog">
+ <trans-unit id="_msg591">
+ <source xml:space="preserve">Request payment to ...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">14</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg592">
+ <source xml:space="preserve">Address:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">90</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg593">
+ <source xml:space="preserve">Amount:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">119</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg594">
+ <source xml:space="preserve">Label:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">148</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg595">
+ <source xml:space="preserve">Message:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">180</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg596">
+ <source xml:space="preserve">Wallet:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">212</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg597">
+ <source xml:space="preserve">Copy &amp;URI</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">240</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg598">
+ <source xml:space="preserve">Copy &amp;Address</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">250</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg599">
+ <source xml:space="preserve">&amp;Save Image...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">260</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg600">
+ <source xml:space="preserve">Payment information</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">39</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../receiverequestdialog.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="ReceiveRequestDialog">
+ <trans-unit id="_msg601">
+ <source xml:space="preserve">Request payment to %1</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">49</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../recentrequeststablemodel.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="RecentRequestsTableModel">
+ <trans-unit id="_msg602">
+ <source xml:space="preserve">Date</source>
+ <target xml:space="preserve" state="needs-review-translation">Date</target>
+ <context-group purpose="location"><context context-type="linenumber">27</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg603">
+ <source xml:space="preserve">Label</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">27</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg604">
+ <source xml:space="preserve">Message</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">27</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg605">
+ <source xml:space="preserve">(no label)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">68</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg606">
+ <source xml:space="preserve">(no message)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">77</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg607">
+ <source xml:space="preserve">(no amount requested)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">85</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg608">
+ <source xml:space="preserve">Requested</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">127</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../forms/sendcoinsdialog.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="SendCoinsDialog">
+ <trans-unit id="_msg609" approved="yes">
+ <source xml:space="preserve">Send Coins</source>
+ <target xml:space="preserve">Send Coins</target>
+ <context-group purpose="location"><context context-type="linenumber">14</context></context-group>
+ <context-group purpose="location"><context context-type="sourcefile">../sendcoinsdialog.cpp</context><context context-type="linenumber">673</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg610">
+ <source xml:space="preserve">Coin Control Features</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">90</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg611">
+ <source xml:space="preserve">Inputs...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">110</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg612">
+ <source xml:space="preserve">automatically selected</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">120</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg613">
+ <source xml:space="preserve">Insufficient funds!</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">139</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg614">
+ <source xml:space="preserve">Quantity:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">228</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg615">
+ <source xml:space="preserve">Bytes:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">263</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg616">
+ <source xml:space="preserve">Amount:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">311</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg617">
+ <source xml:space="preserve">Fee:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">391</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg618">
+ <source xml:space="preserve">After Fee:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">442</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg619">
+ <source xml:space="preserve">Change:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">474</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg620">
+ <source xml:space="preserve">If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">518</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg621">
+ <source xml:space="preserve">Custom change address</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">521</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg622">
+ <source xml:space="preserve">Transaction Fee:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">727</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg623">
+ <source xml:space="preserve">Choose...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">741</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg624">
+ <source xml:space="preserve">Using the fallbackfee can result in sending a transaction that will take several hours or days (or never) to confirm. Consider choosing your fee manually or wait until you have validated the complete chain.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">765</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg625">
+ <source xml:space="preserve">Warning: Fee estimation is currently not possible.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">774</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg626">
+ <source xml:space="preserve">Specify a custom fee per kB (1,000 bytes) of the transaction&apos;s virtual size.
+
+Note: Since the fee is calculated on a per-byte basis, a fee of &quot;100 satoshis per kB&quot; for a transaction size of 500 bytes (half of 1 kB) would ultimately yield a fee of only 50 satoshis.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">851</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg627">
+ <source xml:space="preserve">per kilobyte</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">856</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg628">
+ <source xml:space="preserve">Hide</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">803</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg629">
+ <source xml:space="preserve">Recommended:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">915</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg630">
+ <source xml:space="preserve">Custom:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">945</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg631">
+ <source xml:space="preserve">(Smart fee not initialized yet. This usually takes a few blocks...)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">994</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg632" approved="yes">
+ <source xml:space="preserve">Send to multiple recipients at once</source>
+ <target xml:space="preserve">Send to multiple recipients at once</target>
+ <context-group purpose="location"><context context-type="linenumber">1160</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg633" approved="yes">
+ <source xml:space="preserve">Add &amp;Recipient</source>
+ <target xml:space="preserve">Add &amp;Recipient</target>
+ <context-group purpose="location"><context context-type="linenumber">1163</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg634">
+ <source xml:space="preserve">Clear all fields of the form.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1143</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg635">
+ <source xml:space="preserve">Dust:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">343</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg636">
+ <source xml:space="preserve">Hide transaction fee settings</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">800</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg637">
+ <source xml:space="preserve">When there is less transaction volume than space in the blocks, miners as well as relaying nodes may enforce a minimum fee. Paying only this minimum fee is just fine, but be aware that this can result in a never confirming transaction once there is more demand for bitcoin transactions than the network can process.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">886</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg638">
+ <source xml:space="preserve">A too low fee might result in a never confirming transaction (read the tooltip)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">889</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg639">
+ <source xml:space="preserve">Confirmation time target:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1020</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg640">
+ <source xml:space="preserve">Enable Replace-By-Fee</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1078</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg641">
+ <source xml:space="preserve">With Replace-By-Fee (BIP-125) you can increase a transaction&apos;s fee after it is sent. Without this, a higher fee may be recommended to compensate for increased transaction delay risk.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1081</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg642" approved="yes">
+ <source xml:space="preserve">Clear &amp;All</source>
+ <target xml:space="preserve">Clear &amp;All</target>
+ <context-group purpose="location"><context context-type="linenumber">1146</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg643" approved="yes">
+ <source xml:space="preserve">Balance:</source>
+ <target xml:space="preserve">Balance:</target>
+ <context-group purpose="location"><context context-type="linenumber">1201</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg644" approved="yes">
+ <source xml:space="preserve">Confirm the send action</source>
+ <target xml:space="preserve">Confirm the send action</target>
+ <context-group purpose="location"><context context-type="linenumber">1117</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg645" approved="yes">
+ <source xml:space="preserve">S&amp;end</source>
+ <target xml:space="preserve">S&amp;end</target>
+ <context-group purpose="location"><context context-type="linenumber">1120</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../sendcoinsdialog.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="SendCoinsDialog">
+ <trans-unit id="_msg646">
+ <source xml:space="preserve">Copy quantity</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">92</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg647">
+ <source xml:space="preserve">Copy amount</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">93</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg648">
+ <source xml:space="preserve">Copy fee</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">94</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg649">
+ <source xml:space="preserve">Copy after fee</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">95</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg650">
+ <source xml:space="preserve">Copy bytes</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">96</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg651">
+ <source xml:space="preserve">Copy dust</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">97</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg652">
+ <source xml:space="preserve">Copy change</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">98</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg653">
+ <source xml:space="preserve">%1 (%2 blocks)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">174</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg654">
+ <source xml:space="preserve">Cr&amp;eate Unsigned</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">203</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg655">
+ <source xml:space="preserve">Creates a Partially Signed Bitcoin Transaction (PSBT) for use with e.g. an offline %1 wallet, or a PSBT-compatible hardware wallet.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">204</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg656">
+ <source xml:space="preserve"> from wallet &apos;%1&apos;</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">294</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg657">
+ <source xml:space="preserve">%1 to &apos;%2&apos;</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">305</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg658">
+ <source xml:space="preserve">%1 to %2</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">310</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg659">
+ <source xml:space="preserve">Do you want to draft this transaction?</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">317</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg660">
+ <source xml:space="preserve">Are you sure you want to send?</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">319</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg661">
+ <source xml:space="preserve">Create Unsigned</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">390</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg662">
+ <source xml:space="preserve">Save Transaction Data</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">434</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg663">
+ <source xml:space="preserve">PSBT saved</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">442</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg664">
+ <source xml:space="preserve">or</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">367</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg665">
+ <source xml:space="preserve">You can increase the fee later (signals Replace-By-Fee, BIP-125).</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">348</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg666">
+ <source xml:space="preserve">Please, review your transaction proposal. This will produce a Partially Signed Bitcoin Transaction (PSBT) which you can save or copy and then sign with e.g. an offline %1 wallet, or a PSBT-compatible hardware wallet.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">324</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg667">
+ <source xml:space="preserve">Please, review your transaction.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">326</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg668">
+ <source xml:space="preserve">Transaction fee</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">334</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg669">
+ <source xml:space="preserve">Not signalling Replace-By-Fee, BIP-125.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">350</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg670">
+ <source xml:space="preserve">Total Amount</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">364</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg671">
+ <source xml:space="preserve">To review recipient list click &quot;Show Details...&quot;</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">371</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg672">
+ <source xml:space="preserve">Confirm send coins</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">389</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg673">
+ <source xml:space="preserve">Confirm transaction proposal</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">389</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg674">
+ <source xml:space="preserve">Send</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">390</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg675">
+ <source xml:space="preserve">Partially Signed Transaction (Binary)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">435</context></context-group>
+ <context-group><context context-type="x-gettext-msgctxt">Name of binary PSBT file format</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg676">
+ <source xml:space="preserve">Watch-only balance:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">618</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg677">
+ <source xml:space="preserve">The recipient address is not valid. Please recheck.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">642</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg678">
+ <source xml:space="preserve">The amount to pay must be larger than 0.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">645</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg679">
+ <source xml:space="preserve">The amount exceeds your balance.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">648</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg680">
+ <source xml:space="preserve">The total exceeds your balance when the %1 transaction fee is included.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">651</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg681">
+ <source xml:space="preserve">Duplicate address found: addresses should only be used once each.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">654</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg682">
+ <source xml:space="preserve">Transaction creation failed!</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">657</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg683">
+ <source xml:space="preserve">A fee higher than %1 is considered an absurdly high fee.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">661</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg684">
+ <source xml:space="preserve">Payment request expired.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">664</context></context-group>
+ </trans-unit>
+ <group restype="x-gettext-plurals">
+ <context-group purpose="location"><context context-type="linenumber">788</context></context-group>
+ <trans-unit id="_msg685[0]" approved="yes">
+ <source xml:space="preserve">Estimated to begin confirmation within %n block(s).</source>
+ <target xml:space="preserve">Estimated to begin confirmation within %n block.</target>
+ </trans-unit>
+ <trans-unit id="_msg685[1]" approved="yes">
+ <source xml:space="preserve">Estimated to begin confirmation within %n block(s).</source>
+ <target xml:space="preserve">Estimated to begin confirmation within %n blocks.</target>
+ </trans-unit>
+ </group>
+ <trans-unit id="_msg686">
+ <source xml:space="preserve">Warning: Invalid Bitcoin address</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">888</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg687">
+ <source xml:space="preserve">Warning: Unknown change address</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">893</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg688">
+ <source xml:space="preserve">Confirm custom change address</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">896</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg689">
+ <source xml:space="preserve">The address you selected for change is not part of this wallet. Any or all funds in your wallet may be sent to this address. Are you sure?</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">896</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg690">
+ <source xml:space="preserve">(no label)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">917</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../forms/sendcoinsentry.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="SendCoinsEntry">
+ <trans-unit id="_msg691" approved="yes">
+ <source xml:space="preserve">A&amp;mount:</source>
+ <target xml:space="preserve">A&amp;mount:</target>
+ <context-group purpose="location"><context context-type="linenumber">155</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">705</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1238</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg692" approved="yes">
+ <source xml:space="preserve">Pay &amp;To:</source>
+ <target xml:space="preserve">Pay &amp;To:</target>
+ <context-group purpose="location"><context context-type="linenumber">39</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg693" approved="yes">
+ <source xml:space="preserve">&amp;Label:</source>
+ <target xml:space="preserve">&amp;Label:</target>
+ <context-group purpose="location"><context context-type="linenumber">132</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg694">
+ <source xml:space="preserve">Choose previously used address</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">64</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg695">
+ <source xml:space="preserve">The Bitcoin address to send the payment to</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">57</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg696" approved="yes">
+ <source xml:space="preserve">Alt+A</source>
+ <target xml:space="preserve">Alt+A</target>
+ <context-group purpose="location"><context context-type="linenumber">80</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg697" approved="yes">
+ <source xml:space="preserve">Paste address from clipboard</source>
+ <target xml:space="preserve">Paste address from clipboard</target>
+ <context-group purpose="location"><context context-type="linenumber">87</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg698" approved="yes">
+ <source xml:space="preserve">Alt+P</source>
+ <target xml:space="preserve">Alt+P</target>
+ <context-group purpose="location"><context context-type="linenumber">103</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg699">
+ <source xml:space="preserve">Remove this entry</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">110</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">672</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1205</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg700">
+ <source xml:space="preserve">The amount to send in the selected unit</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">170</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg701">
+ <source xml:space="preserve">The fee will be deducted from the amount being sent. The recipient will receive less bitcoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">177</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg702">
+ <source xml:space="preserve">S&amp;ubtract fee from amount</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">180</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg703">
+ <source xml:space="preserve">Use available balance</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">187</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg704">
+ <source xml:space="preserve">Message:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">196</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg705">
+ <source xml:space="preserve">This is an unauthenticated payment request.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">639</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg706">
+ <source xml:space="preserve">This is an authenticated payment request.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1168</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg707">
+ <source xml:space="preserve">Enter a label for this address to add it to the list of used addresses</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">145</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">148</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg708">
+ <source xml:space="preserve">A message that was attached to the bitcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Bitcoin network.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">206</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg709">
+ <source xml:space="preserve">Pay To:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">654</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1183</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg710">
+ <source xml:space="preserve">Memo:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">688</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1221</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../forms/signverifymessagedialog.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="SignVerifyMessageDialog">
+ <trans-unit id="_msg711" approved="yes">
+ <source xml:space="preserve">Signatures - Sign / Verify a Message</source>
+ <target xml:space="preserve">Signatures - Sign / Verify a Message</target>
+ <context-group purpose="location"><context context-type="linenumber">14</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg712" approved="yes">
+ <source xml:space="preserve">&amp;Sign Message</source>
+ <target xml:space="preserve">&amp;Sign Message</target>
+ <context-group purpose="location"><context context-type="linenumber">27</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg713">
+ <source xml:space="preserve">You can sign messages/agreements with your addresses to prove you can receive bitcoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">33</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg714">
+ <source xml:space="preserve">The Bitcoin address to sign the message with</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">51</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg715">
+ <source xml:space="preserve">Choose previously used address</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">58</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">274</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg716" approved="yes">
+ <source xml:space="preserve">Alt+A</source>
+ <target xml:space="preserve">Alt+A</target>
+ <context-group purpose="location"><context context-type="linenumber">68</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">284</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg717" approved="yes">
+ <source xml:space="preserve">Paste address from clipboard</source>
+ <target xml:space="preserve">Paste address from clipboard</target>
+ <context-group purpose="location"><context context-type="linenumber">78</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg718" approved="yes">
+ <source xml:space="preserve">Alt+P</source>
+ <target xml:space="preserve">Alt+P</target>
+ <context-group purpose="location"><context context-type="linenumber">88</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg719" approved="yes">
+ <source xml:space="preserve">Enter the message you want to sign here</source>
+ <target xml:space="preserve">Enter the message you want to sign here</target>
+ <context-group purpose="location"><context context-type="linenumber">100</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">103</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg720" approved="yes">
+ <source xml:space="preserve">Signature</source>
+ <target xml:space="preserve">Signature</target>
+ <context-group purpose="location"><context context-type="linenumber">110</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg721" approved="yes">
+ <source xml:space="preserve">Copy the current signature to the system clipboard</source>
+ <target xml:space="preserve">Copy the current signature to the system clipboard</target>
+ <context-group purpose="location"><context context-type="linenumber">140</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg722" approved="yes">
+ <source xml:space="preserve">Sign the message to prove you own this Bitcoin address</source>
+ <target xml:space="preserve">Sign the message to prove you own this Bitcoin address</target>
+ <context-group purpose="location"><context context-type="linenumber">161</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg723" approved="yes">
+ <source xml:space="preserve">Sign &amp;Message</source>
+ <target xml:space="preserve">Sign &amp;Message</target>
+ <context-group purpose="location"><context context-type="linenumber">164</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg724" approved="yes">
+ <source xml:space="preserve">Reset all sign message fields</source>
+ <target xml:space="preserve">Reset all sign message fields</target>
+ <context-group purpose="location"><context context-type="linenumber">178</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg725" approved="yes">
+ <source xml:space="preserve">Clear &amp;All</source>
+ <target xml:space="preserve">Clear &amp;All</target>
+ <context-group purpose="location"><context context-type="linenumber">181</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">338</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg726" approved="yes">
+ <source xml:space="preserve">&amp;Verify Message</source>
+ <target xml:space="preserve">&amp;Verify Message</target>
+ <context-group purpose="location"><context context-type="linenumber">240</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg727">
+ <source xml:space="preserve">Enter the receiver&apos;s address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction!</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">246</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg728">
+ <source xml:space="preserve">The Bitcoin address the message was signed with</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">267</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg729">
+ <source xml:space="preserve">The signed message to verify</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">296</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">299</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg730">
+ <source xml:space="preserve">The signature given when the message was signed</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">306</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">309</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg731" approved="yes">
+ <source xml:space="preserve">Verify the message to ensure it was signed with the specified Bitcoin address</source>
+ <target xml:space="preserve">Verify the message to ensure it was signed with the specified Bitcoin address</target>
+ <context-group purpose="location"><context context-type="linenumber">318</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg732" approved="yes">
+ <source xml:space="preserve">Verify &amp;Message</source>
+ <target xml:space="preserve">Verify &amp;Message</target>
+ <context-group purpose="location"><context context-type="linenumber">321</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg733" approved="yes">
+ <source xml:space="preserve">Reset all verify message fields</source>
+ <target xml:space="preserve">Reset all verify message fields</target>
+ <context-group purpose="location"><context context-type="linenumber">335</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg734">
+ <source xml:space="preserve">Click &quot;Sign Message&quot; to generate signature</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">125</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../signverifymessagedialog.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="SignVerifyMessageDialog">
+ <trans-unit id="_msg735">
+ <source xml:space="preserve">The entered address is invalid.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">120</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">219</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg736">
+ <source xml:space="preserve">Please check the address and try again.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">120</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">127</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">220</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">227</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg737">
+ <source xml:space="preserve">The entered address does not refer to a key.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">127</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">226</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg738">
+ <source xml:space="preserve">Wallet unlock was cancelled.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">135</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg739">
+ <source xml:space="preserve">No error</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">146</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg740">
+ <source xml:space="preserve">Private key for the entered address is not available.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">149</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg741">
+ <source xml:space="preserve">Message signing failed.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">152</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg742">
+ <source xml:space="preserve">Message signed.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">164</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg743">
+ <source xml:space="preserve">The signature could not be decoded.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">233</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg744">
+ <source xml:space="preserve">Please check the signature and try again.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">234</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">241</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg745">
+ <source xml:space="preserve">The signature did not match the message digest.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">240</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg746">
+ <source xml:space="preserve">Message verification failed.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">246</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg747">
+ <source xml:space="preserve">Message verified.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">214</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../trafficgraphwidget.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="TrafficGraphWidget">
+ <trans-unit id="_msg748">
+ <source xml:space="preserve">kB/s</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">82</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../transactiondesc.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="TransactionDesc">
+ <group restype="x-gettext-plurals">
+ <context-group purpose="location"><context context-type="linenumber">34</context></context-group>
+ <trans-unit id="_msg749[0]" approved="yes">
+ <source xml:space="preserve">Open for %n more block(s)</source>
+ <target xml:space="preserve">Open for %n more block</target>
+ </trans-unit>
+ <trans-unit id="_msg749[1]" approved="yes">
+ <source xml:space="preserve">Open for %n more block(s)</source>
+ <target xml:space="preserve">Open for %n more blocks</target>
+ </trans-unit>
+ </group>
+ <trans-unit id="_msg750">
+ <source xml:space="preserve">Open until %1</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">36</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg751">
+ <source xml:space="preserve">conflicted with a transaction with %1 confirmations</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">42</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg752">
+ <source xml:space="preserve">0/unconfirmed, %1</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">44</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg753">
+ <source xml:space="preserve">in memory pool</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">44</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg754">
+ <source xml:space="preserve">not in memory pool</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">44</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg755">
+ <source xml:space="preserve">abandoned</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">44</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg756">
+ <source xml:space="preserve">%1/unconfirmed</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">46</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg757">
+ <source xml:space="preserve">%1 confirmations</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">48</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg758">
+ <source xml:space="preserve">Status</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">98</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg759">
+ <source xml:space="preserve">Date</source>
+ <target xml:space="preserve" state="needs-review-translation">Date</target>
+ <context-group purpose="location"><context context-type="linenumber">101</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg760">
+ <source xml:space="preserve">Source</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">108</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg761">
+ <source xml:space="preserve">Generated</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">108</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg762">
+ <source xml:space="preserve">From</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">113</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">127</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">199</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg763">
+ <source xml:space="preserve">unknown</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">127</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg764">
+ <source xml:space="preserve">To</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">128</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">148</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">218</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg765">
+ <source xml:space="preserve">own address</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">130</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg766">
+ <source xml:space="preserve">watch-only</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">130</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">199</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg767">
+ <source xml:space="preserve">label</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">132</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg768">
+ <source xml:space="preserve">Credit</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">168</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">180</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">234</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">264</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">324</context></context-group>
+ </trans-unit>
+ <group restype="x-gettext-plurals">
+ <context-group purpose="location"><context context-type="linenumber">170</context></context-group>
+ <trans-unit id="_msg769[0]" approved="yes">
+ <source xml:space="preserve">matures in %n more block(s)</source>
+ <target xml:space="preserve">matures in %n more block</target>
+ </trans-unit>
+ <trans-unit id="_msg769[1]" approved="yes">
+ <source xml:space="preserve">matures in %n more block(s)</source>
+ <target xml:space="preserve">matures in %n more blocks</target>
+ </trans-unit>
+ </group>
+ <trans-unit id="_msg770">
+ <source xml:space="preserve">not accepted</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">172</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg771">
+ <source xml:space="preserve">Debit</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">232</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">258</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">321</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg772">
+ <source xml:space="preserve">Total debit</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">242</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg773">
+ <source xml:space="preserve">Total credit</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">243</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg774">
+ <source xml:space="preserve">Transaction fee</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">248</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg775">
+ <source xml:space="preserve">Net amount</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">270</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg776">
+ <source xml:space="preserve">Message</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">276</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">288</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg777">
+ <source xml:space="preserve">Comment</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">278</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg778">
+ <source xml:space="preserve">Transaction ID</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">280</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg779">
+ <source xml:space="preserve">Transaction total size</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">281</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg780">
+ <source xml:space="preserve">Transaction virtual size</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">282</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg781">
+ <source xml:space="preserve">Output index</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">283</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg782">
+ <source xml:space="preserve"> (Certificate was not verified)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">299</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg783">
+ <source xml:space="preserve">Merchant</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">302</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg784">
+ <source xml:space="preserve">Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to &quot;not accepted&quot; and it won&apos;t be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">310</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg785">
+ <source xml:space="preserve">Debug information</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">318</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg786">
+ <source xml:space="preserve">Transaction</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">326</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg787">
+ <source xml:space="preserve">Inputs</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">329</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg788">
+ <source xml:space="preserve">Amount</source>
+ <target xml:space="preserve" state="needs-review-translation">Amount</target>
+ <context-group purpose="location"><context context-type="linenumber">350</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg789">
+ <source xml:space="preserve">true</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">351</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">352</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg790">
+ <source xml:space="preserve">false</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">351</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">352</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../forms/transactiondescdialog.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="TransactionDescDialog">
+ <trans-unit id="_msg791" approved="yes">
+ <source xml:space="preserve">This pane shows a detailed description of the transaction</source>
+ <target xml:space="preserve">This pane shows a detailed description of the transaction</target>
+ <context-group purpose="location"><context context-type="linenumber">20</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../transactiondescdialog.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="TransactionDescDialog">
+ <trans-unit id="_msg792">
+ <source xml:space="preserve">Details for %1</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">18</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../transactiontablemodel.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="TransactionTableModel">
+ <trans-unit id="_msg793">
+ <source xml:space="preserve">Date</source>
+ <target xml:space="preserve" state="needs-review-translation">Date</target>
+ <context-group purpose="location"><context context-type="linenumber">252</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg794">
+ <source xml:space="preserve">Type</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">252</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg795">
+ <source xml:space="preserve">Label</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">252</context></context-group>
+ </trans-unit>
+ <group restype="x-gettext-plurals">
+ <context-group purpose="location"><context context-type="linenumber">314</context></context-group>
+ <trans-unit id="_msg796[0]" approved="yes">
+ <source xml:space="preserve">Open for %n more block(s)</source>
+ <target xml:space="preserve">Open for %n more block</target>
+ </trans-unit>
+ <trans-unit id="_msg796[1]" approved="yes">
+ <source xml:space="preserve">Open for %n more block(s)</source>
+ <target xml:space="preserve">Open for %n more blocks</target>
+ </trans-unit>
+ </group>
+ <trans-unit id="_msg797">
+ <source xml:space="preserve">Open until %1</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">317</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg798">
+ <source xml:space="preserve">Unconfirmed</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">320</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg799">
+ <source xml:space="preserve">Abandoned</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">323</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg800">
+ <source xml:space="preserve">Confirming (%1 of %2 recommended confirmations)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">326</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg801">
+ <source xml:space="preserve">Confirmed (%1 confirmations)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">329</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg802">
+ <source xml:space="preserve">Conflicted</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">332</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg803">
+ <source xml:space="preserve">Immature (%1 confirmations, will be available after %2)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">335</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg804">
+ <source xml:space="preserve">Generated but not accepted</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">338</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg805">
+ <source xml:space="preserve">Received with</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">377</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg806">
+ <source xml:space="preserve">Received from</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">379</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg807">
+ <source xml:space="preserve">Sent to</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">382</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg808">
+ <source xml:space="preserve">Payment to yourself</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">384</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg809">
+ <source xml:space="preserve">Mined</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">386</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg810">
+ <source xml:space="preserve">watch-only</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">414</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg811">
+ <source xml:space="preserve">(n/a)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">430</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg812">
+ <source xml:space="preserve">(no label)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">640</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg813">
+ <source xml:space="preserve">Transaction status. Hover over this field to show number of confirmations.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">679</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg814">
+ <source xml:space="preserve">Date and time that the transaction was received.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">681</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg815">
+ <source xml:space="preserve">Type of transaction.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">683</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg816">
+ <source xml:space="preserve">Whether or not a watch-only address is involved in this transaction.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">685</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg817">
+ <source xml:space="preserve">User-defined intent/purpose of the transaction.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">687</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg818">
+ <source xml:space="preserve">Amount removed from or added to balance.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">689</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../transactionview.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="TransactionView">
+ <trans-unit id="_msg819">
+ <source xml:space="preserve">All</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">70</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">86</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg820">
+ <source xml:space="preserve">Today</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">71</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg821">
+ <source xml:space="preserve">This week</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">72</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg822">
+ <source xml:space="preserve">This month</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">73</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg823">
+ <source xml:space="preserve">Last month</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">74</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg824">
+ <source xml:space="preserve">This year</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">75</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg825">
+ <source xml:space="preserve">Range...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">76</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg826">
+ <source xml:space="preserve">Received with</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">87</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg827">
+ <source xml:space="preserve">Sent to</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">89</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg828">
+ <source xml:space="preserve">To yourself</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">91</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg829">
+ <source xml:space="preserve">Mined</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">92</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg830">
+ <source xml:space="preserve">Other</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">93</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg831">
+ <source xml:space="preserve">Enter address, transaction id, or label to search</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">98</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg832">
+ <source xml:space="preserve">Min amount</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">102</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg833">
+ <source xml:space="preserve">Abandon transaction</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">165</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg834">
+ <source xml:space="preserve">Increase transaction fee</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">166</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg835">
+ <source xml:space="preserve">Copy address</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">168</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg836">
+ <source xml:space="preserve">Copy label</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">169</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg837">
+ <source xml:space="preserve">Copy amount</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">170</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg838">
+ <source xml:space="preserve">Copy transaction ID</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">171</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg839">
+ <source xml:space="preserve">Copy raw transaction</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">172</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg840">
+ <source xml:space="preserve">Copy full transaction details</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">173</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg841">
+ <source xml:space="preserve">Edit address label</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">174</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg842">
+ <source xml:space="preserve">Comma separated file</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">360</context></context-group>
+ <context-group><context context-type="x-gettext-msgctxt">Name of CSV file format</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg843">
+ <source xml:space="preserve">Show transaction details</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">175</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg844">
+ <source xml:space="preserve">Export Transaction History</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">359</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg845">
+ <source xml:space="preserve">Confirmed</source>
+ <target xml:space="preserve" state="needs-review-translation">Confirmed</target>
+ <context-group purpose="location"><context context-type="linenumber">369</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg846">
+ <source xml:space="preserve">Watch-only</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">371</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg847">
+ <source xml:space="preserve">Date</source>
+ <target xml:space="preserve" state="needs-review-translation">Date</target>
+ <context-group purpose="location"><context context-type="linenumber">372</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg848">
+ <source xml:space="preserve">Type</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">373</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg849">
+ <source xml:space="preserve">Label</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">374</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg850">
+ <source xml:space="preserve">Address</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">375</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg851">
+ <source xml:space="preserve">ID</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">377</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg852">
+ <source xml:space="preserve">Exporting Failed</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">380</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg853">
+ <source xml:space="preserve">There was an error trying to save the transaction history to %1.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">380</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg854">
+ <source xml:space="preserve">Exporting Successful</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">384</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg855">
+ <source xml:space="preserve">The transaction history was successfully saved to %1.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">384</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg856">
+ <source xml:space="preserve">Range:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">556</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg857">
+ <source xml:space="preserve">to</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">564</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../walletframe.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="WalletFrame">
+ <trans-unit id="_msg858">
+ <source xml:space="preserve">No wallet has been loaded.
+Go to File &gt; Open Wallet to load a wallet.
+- OR -</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">39</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg859">
+ <source xml:space="preserve">Create a new wallet</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">44</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../walletmodel.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="WalletModel">
+ <trans-unit id="_msg860">
+ <source xml:space="preserve">Send Coins</source>
+ <target xml:space="preserve" state="needs-review-translation">Send Coins</target>
+ <context-group purpose="location"><context context-type="linenumber">218</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg861">
+ <source xml:space="preserve">Fee bump error</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">497</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">549</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">562</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">567</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg862">
+ <source xml:space="preserve">Increasing transaction fee failed</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">497</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg863">
+ <source xml:space="preserve">Do you want to increase the fee?</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">505</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg864">
+ <source xml:space="preserve">Do you want to draft a transaction with fee increase?</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">505</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg865">
+ <source xml:space="preserve">Current fee:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">509</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg866">
+ <source xml:space="preserve">Increase:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">513</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg867">
+ <source xml:space="preserve">New fee:</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">517</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg868">
+ <source xml:space="preserve">Warning: This may pay the additional fee by reducing change outputs or adding inputs, when necessary. It may add a new change output if one does not already exist. These changes may potentially leak privacy.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">525</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg869">
+ <source xml:space="preserve">Confirm fee bump</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">528</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg870">
+ <source xml:space="preserve">Can&apos;t draft transaction.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">549</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg871">
+ <source xml:space="preserve">PSBT copied</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">556</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg872">
+ <source xml:space="preserve">Can&apos;t sign transaction.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">562</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg873">
+ <source xml:space="preserve">Could not commit transaction</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">567</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg874">
+ <source xml:space="preserve">default wallet</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">587</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../walletview.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="WalletView">
+ <trans-unit id="_msg875">
+ <source xml:space="preserve">&amp;Export</source>
+ <target xml:space="preserve" state="needs-review-translation">&amp;Export</target>
+ <context-group purpose="location"><context context-type="linenumber">51</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg876">
+ <source xml:space="preserve">Export the data in the current tab to a file</source>
+ <target xml:space="preserve" state="needs-review-translation">Export the data in the current tab to a file</target>
+ <context-group purpose="location"><context context-type="linenumber">52</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg877">
+ <source xml:space="preserve">Error</source>
+ <target xml:space="preserve" state="needs-review-translation">Error</target>
+ <context-group purpose="location"><context context-type="linenumber">217</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">226</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">236</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg878">
+ <source xml:space="preserve">Unable to decode PSBT from clipboard (invalid base64)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">217</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg879">
+ <source xml:space="preserve">Load Transaction Data</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">222</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg880">
+ <source xml:space="preserve">Partially Signed Transaction (*.psbt)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">223</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg881">
+ <source xml:space="preserve">PSBT file must be smaller than 100 MiB</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">226</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg882">
+ <source xml:space="preserve">Unable to decode PSBT</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">236</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg883">
+ <source xml:space="preserve">Backup Wallet</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">275</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg884">
+ <source xml:space="preserve">Wallet Data</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">276</context></context-group>
+ <context-group><context context-type="x-gettext-msgctxt">Name of wallet data file format</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg885">
+ <source xml:space="preserve">Backup Failed</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">282</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg886">
+ <source xml:space="preserve">There was an error trying to save the wallet data to %1.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">282</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg887">
+ <source xml:space="preserve">Backup Successful</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">286</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg888">
+ <source xml:space="preserve">The wallet data was successfully saved to %1.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">286</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg889">
+ <source xml:space="preserve">Cancel</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">330</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+ <file original="../bitcoinstrings.cpp" datatype="cpp" source-language="en" target-language="en"><body>
+ <group restype="x-trolltech-linguist-context" resname="bitcoin-core">
+ <trans-unit id="_msg890">
+ <source xml:space="preserve">Distributed under the MIT software license, see the accompanying file %s or %s</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">31</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg891">
+ <source xml:space="preserve">Prune configured below the minimum of %d MiB. Please use a higher number.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">72</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg892">
+ <source xml:space="preserve">Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">74</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg893">
+ <source xml:space="preserve">Pruning blockstore...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">198</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg894">
+ <source xml:space="preserve">Unable to start HTTP server. See debug log for details.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">235</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg895">
+ <source xml:space="preserve">The %s developers</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">12</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg896">
+ <source xml:space="preserve">Cannot obtain a lock on data directory %s. %s is probably already running.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">22</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg897">
+ <source xml:space="preserve">Cannot provide specific connections and have addrman find outgoing connections at the same.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">24</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg898">
+ <source xml:space="preserve">Error reading %s! All keys read correctly, but transaction data or address book entries might be missing or incorrect.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">34</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg899">
+ <source xml:space="preserve">More than one onion bind address is provided. Using %s for the automatically created Tor onion service.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">55</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg900">
+ <source xml:space="preserve">Please check that your computer&apos;s date and time are correct! If your clock is wrong, %s will not work properly.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">66</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg901">
+ <source xml:space="preserve">Please contribute if you find %s useful. Visit %s for further information about the software.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">69</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg902">
+ <source xml:space="preserve">SQLiteDatabase: Failed to prepare the statement to fetch sqlite wallet schema version: %s</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">77</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg903">
+ <source xml:space="preserve">SQLiteDatabase: Failed to prepare the statement to fetch the application id: %s</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">80</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg904">
+ <source xml:space="preserve">SQLiteDatabase: Unknown sqlite wallet schema version %d. Only version %d is supported</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">83</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg905">
+ <source xml:space="preserve">The block database contains a block which appears to be from the future. This may be due to your computer&apos;s date and time being set incorrectly. Only rebuild the block database if you are sure that your computer&apos;s date and time are correct</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">86</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg906">
+ <source xml:space="preserve">This is a pre-release test build - use at your own risk - do not use for mining or merchant applications</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">97</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg907">
+ <source xml:space="preserve">This is the transaction fee you may discard if change is smaller than dust at this level</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">103</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg908">
+ <source xml:space="preserve">Unable to replay blocks. You will need to rebuild the database using -reindex-chainstate.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">114</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg909">
+ <source xml:space="preserve">Unable to rewind the database to a pre-fork state. You will need to redownload the blockchain</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">117</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg910">
+ <source xml:space="preserve">Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">128</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg911">
+ <source xml:space="preserve">-maxmempool must be at least %d MB</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">135</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg912">
+ <source xml:space="preserve">Cannot resolve -%s address: &apos;%s&apos;</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">137</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg913">
+ <source xml:space="preserve">Change index out of range</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">140</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg914">
+ <source xml:space="preserve">Config setting for %s only applied on %s network when in [%s] section.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">141</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg915">
+ <source xml:space="preserve">Copyright (C) %i-%i</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">142</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg916" approved="yes">
+ <source xml:space="preserve">Corrupted block database detected</source>
+ <target xml:space="preserve">Corrupted block database detected</target>
+ <context-group purpose="location"><context context-type="linenumber">143</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg917">
+ <source xml:space="preserve">Could not find asmap file %s</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">144</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg918">
+ <source xml:space="preserve">Could not parse asmap file %s</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">145</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg919" approved="yes">
+ <source xml:space="preserve">Do you want to rebuild the block database now?</source>
+ <target xml:space="preserve">Do you want to rebuild the block database now?</target>
+ <context-group purpose="location"><context context-type="linenumber">147</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg920">
+ <source xml:space="preserve">Dump file %s does not exist.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">149</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg921">
+ <source xml:space="preserve">Error creating %s</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">150</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg922" approved="yes">
+ <source xml:space="preserve">Error initializing block database</source>
+ <target xml:space="preserve">Error initializing block database</target>
+ <context-group purpose="location"><context context-type="linenumber">151</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg923" approved="yes">
+ <source xml:space="preserve">Error initializing wallet database environment %s!</source>
+ <target xml:space="preserve">Error initializing wallet database environment %s!</target>
+ <context-group purpose="location"><context context-type="linenumber">152</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg924">
+ <source xml:space="preserve">Error loading %s</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">153</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg925">
+ <source xml:space="preserve">Error loading %s: Private keys can only be disabled during creation</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">154</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg926">
+ <source xml:space="preserve">Error loading %s: Wallet corrupted</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">155</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg927">
+ <source xml:space="preserve">Error loading %s: Wallet requires newer version of %s</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">156</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg928" approved="yes">
+ <source xml:space="preserve">Error loading block database</source>
+ <target xml:space="preserve">Error loading block database</target>
+ <context-group purpose="location"><context context-type="linenumber">157</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg929" approved="yes">
+ <source xml:space="preserve">Error opening block database</source>
+ <target xml:space="preserve">Error opening block database</target>
+ <context-group purpose="location"><context context-type="linenumber">158</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg930">
+ <source xml:space="preserve">Error reading next record from wallet database</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">160</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg931">
+ <source xml:space="preserve">Error: Couldn&apos;t create cursor into database</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">162</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg932">
+ <source xml:space="preserve">Error: Dumpfile checksum does not match. Computed %s, expected %s</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">164</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg933">
+ <source xml:space="preserve">Error: Got key that was not hex: %s</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">165</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg934">
+ <source xml:space="preserve">Error: Got value that was not hex: %s</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">166</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg935">
+ <source xml:space="preserve">Error: Missing checksum</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">168</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg936">
+ <source xml:space="preserve">Error: Unable to parse version %u as a uint32_t</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">169</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg937">
+ <source xml:space="preserve">Error: Unable to write record to new wallet</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">170</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg938" approved="yes">
+ <source xml:space="preserve">Failed to listen on any port. Use -listen=0 if you want this.</source>
+ <target xml:space="preserve">Failed to listen on any port. Use -listen=0 if you want this.</target>
+ <context-group purpose="location"><context context-type="linenumber">171</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg939">
+ <source xml:space="preserve">Failed to rescan the wallet during initialization</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">172</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg940">
+ <source xml:space="preserve">Failed to verify database</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">173</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg941">
+ <source xml:space="preserve">Ignoring duplicate -wallet %s.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">175</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg942">
+ <source xml:space="preserve">Importing...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">176</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg943" approved="yes">
+ <source xml:space="preserve">Incorrect or no genesis block found. Wrong datadir for network?</source>
+ <target xml:space="preserve">Incorrect or no genesis block found. Wrong datadir for network?</target>
+ <context-group purpose="location"><context context-type="linenumber">177</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg944">
+ <source xml:space="preserve">Initialization sanity check failed. %s is shutting down.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">178</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg945">
+ <source xml:space="preserve">Invalid -i2psam address or hostname: &apos;%s&apos;</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">180</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg946">
+ <source xml:space="preserve">Invalid P2P permission: &apos;%s&apos;</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">183</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg947">
+ <source xml:space="preserve">Invalid amount for -%s=&lt;amount&gt;: &apos;%s&apos;</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">184</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg948">
+ <source xml:space="preserve">Invalid amount for -discardfee=&lt;amount&gt;: &apos;%s&apos;</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">185</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg949">
+ <source xml:space="preserve">Invalid amount for -fallbackfee=&lt;amount&gt;: &apos;%s&apos;</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">186</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg950">
+ <source xml:space="preserve">SQLiteDatabase: Failed to execute statement to verify database: %s</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">203</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg951">
+ <source xml:space="preserve">SQLiteDatabase: Failed to fetch sqlite wallet schema version: %s</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">204</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg952">
+ <source xml:space="preserve">SQLiteDatabase: Failed to fetch the application id: %s</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">205</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg953">
+ <source xml:space="preserve">SQLiteDatabase: Failed to prepare statement to verify database: %s</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">206</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg954">
+ <source xml:space="preserve">SQLiteDatabase: Failed to read database verification error: %s</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">207</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg955">
+ <source xml:space="preserve">SQLiteDatabase: Unexpected application id. Expected %u, got %u</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">208</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg956">
+ <source xml:space="preserve">Specified blocks directory &quot;%s&quot; does not exist.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">214</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg957">
+ <source xml:space="preserve">The specified config file %s does not exist</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">217</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg958">
+ <source xml:space="preserve">Unable to open %s for writing</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">234</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg959">
+ <source xml:space="preserve">Unknown address type &apos;%s&apos;</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">237</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg960">
+ <source xml:space="preserve">Unknown change type &apos;%s&apos;</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">238</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg961">
+ <source xml:space="preserve">Upgrading txindex database</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">242</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg962">
+ <source xml:space="preserve">Loading P2P addresses...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">189</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg963">
+ <source xml:space="preserve">Cannot downgrade wallet from version %i to version %i. Wallet version unchanged.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">19</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg964">
+ <source xml:space="preserve">Cannot upgrade a non HD split wallet from version %i to version %i without upgrading to support pre-split keypool. Please use version %i or no version specified.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">27</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg965">
+ <source xml:space="preserve">Error: Dumpfile format record is incorrect. Got &quot;%s&quot;, expected &quot;format&quot;.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">37</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg966">
+ <source xml:space="preserve">Error: Dumpfile identifier record is incorrect. Got &quot;%s&quot;, expected &quot;%s&quot;.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">39</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg967">
+ <source xml:space="preserve">Error: Dumpfile version is not supported. This version of bitcoin-wallet only supports version 1 dumpfiles. Got dumpfile with version %s</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">41</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg968">
+ <source xml:space="preserve">File %s already exists. If you are sure this is what you want, move it out of the way first.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">49</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg969">
+ <source xml:space="preserve">No dump file provided. To use createfromdump, -dumpfile=&lt;filename&gt; must be provided.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">58</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg970">
+ <source xml:space="preserve">No dump file provided. To use dump, -dumpfile=&lt;filename&gt; must be provided.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">61</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg971">
+ <source xml:space="preserve">No wallet file format provided. To use createfromdump, -format=&lt;format&gt; must be provided.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">63</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg972">
+ <source xml:space="preserve">Unknown wallet file format &quot;%s&quot; provided. Please provide one of &quot;bdb&quot; or &quot;sqlite&quot;.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">120</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg973">
+ <source xml:space="preserve">Warning: Dumpfile wallet format &quot;%s&quot; does not match command line specified format &quot;%s&quot;.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">123</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg974">
+ <source xml:space="preserve">Loading banlist...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">190</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg975" approved="yes">
+ <source xml:space="preserve">Not enough file descriptors available.</source>
+ <target xml:space="preserve">Not enough file descriptors available.</target>
+ <context-group purpose="location"><context context-type="linenumber">195</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg976">
+ <source xml:space="preserve">Prune cannot be configured with a negative value.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">196</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg977">
+ <source xml:space="preserve">Prune mode is incompatible with -txindex.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">197</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg978">
+ <source xml:space="preserve">Replaying blocks...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">200</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg979">
+ <source xml:space="preserve">Rewinding blocks...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">202</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg980">
+ <source xml:space="preserve">The source code is available from %s.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">216</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg981">
+ <source xml:space="preserve">Transaction fee and change calculation failed</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">225</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg982">
+ <source xml:space="preserve">Unable to bind to %s on this computer. %s is probably already running.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">230</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg983">
+ <source xml:space="preserve">Unable to generate keys</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">233</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg984">
+ <source xml:space="preserve">Unsupported logging category %s=%s.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">240</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg985">
+ <source xml:space="preserve">Upgrading UTXO database</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">241</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg986">
+ <source xml:space="preserve">User Agent comment (%s) contains unsafe characters.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">243</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg987" approved="yes">
+ <source xml:space="preserve">Verifying blocks...</source>
+ <target xml:space="preserve">Verifying blocks...</target>
+ <context-group purpose="location"><context context-type="linenumber">244</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg988">
+ <source xml:space="preserve">Wallet needed to be rewritten: restart %s to complete</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">246</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg989">
+ <source xml:space="preserve">Error: Listening for incoming connections failed (listen returned error %s)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">44</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg990">
+ <source xml:space="preserve">%s corrupt. Try using the wallet tool bitcoin-wallet to salvage or restoring a backup.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">13</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg991">
+ <source xml:space="preserve">Invalid amount for -maxtxfee=&lt;amount&gt;: &apos;%s&apos; (must be at least the minrelay fee of %s to prevent stuck transactions)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">52</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg992">
+ <source xml:space="preserve">The transaction amount is too small to send after the fee has been deducted</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">91</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg993">
+ <source xml:space="preserve">This error could occur if this wallet was not shutdown cleanly and was last loaded using a build with a newer version of Berkeley DB. If so, please use the software that last loaded this wallet</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">93</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg994">
+ <source xml:space="preserve">This is the maximum transaction fee you pay (in addition to the normal fee) to prioritize partial spend avoidance over regular coin selection.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">100</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg995">
+ <source xml:space="preserve">Transaction needs a change address, but we can&apos;t generate it. Please call keypoolrefill first.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">111</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg996">
+ <source xml:space="preserve">You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">131</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg997">
+ <source xml:space="preserve">A fatal internal error occurred, see debug.log for details</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">136</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg998">
+ <source xml:space="preserve">Cannot set -peerblockfilters without -blockfilterindex.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">138</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg999">
+ <source xml:space="preserve">Disk space is too low!</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">146</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1000">
+ <source xml:space="preserve">Error reading from database, shutting down.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">159</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1001">
+ <source xml:space="preserve">Error upgrading chainstate database</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">161</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1002">
+ <source xml:space="preserve">Error: Disk space is low for %s</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">163</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1003">
+ <source xml:space="preserve">Error: Keypool ran out, please call keypoolrefill first</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">167</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1004">
+ <source xml:space="preserve">Fee rate (%s) is lower than the minimum fee rate setting (%s)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">174</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1005">
+ <source xml:space="preserve">Invalid -onion address or hostname: &apos;%s&apos;</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">181</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1006">
+ <source xml:space="preserve">Invalid -proxy address or hostname: &apos;%s&apos;</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">182</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1007">
+ <source xml:space="preserve">Invalid amount for -paytxfee=&lt;amount&gt;: &apos;%s&apos; (must be at least %s)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">187</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1008">
+ <source xml:space="preserve">Invalid netmask specified in -whitelist: &apos;%s&apos;</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">188</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1009">
+ <source xml:space="preserve">Need to specify a port with -whitebind: &apos;%s&apos;</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">193</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1010">
+ <source xml:space="preserve">No proxy server specified. Use -proxy=&lt;ip&gt; or -proxy=&lt;ip:port&gt;.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">194</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1011">
+ <source xml:space="preserve">Reducing -maxconnections from %d to %d, because of system limitations.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">199</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1012">
+ <source xml:space="preserve">Section [%s] is not recognized.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">209</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1013" approved="yes">
+ <source xml:space="preserve">Signing transaction failed</source>
+ <target xml:space="preserve">Signing transaction failed</target>
+ <context-group purpose="location"><context context-type="linenumber">210</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1014">
+ <source xml:space="preserve">Specified -walletdir &quot;%s&quot; does not exist</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">211</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1015">
+ <source xml:space="preserve">Specified -walletdir &quot;%s&quot; is a relative path</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">212</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1016">
+ <source xml:space="preserve">Specified -walletdir &quot;%s&quot; is not a directory</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">213</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1017">
+ <source xml:space="preserve">The transaction amount is too small to pay the fee</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">218</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1018">
+ <source xml:space="preserve">This is experimental software.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">220</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1019" approved="yes">
+ <source xml:space="preserve">Transaction amount too small</source>
+ <target xml:space="preserve">Transaction amount too small</target>
+ <context-group purpose="location"><context context-type="linenumber">223</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1020" approved="yes">
+ <source xml:space="preserve">Transaction too large</source>
+ <target xml:space="preserve">Transaction too large</target>
+ <context-group purpose="location"><context context-type="linenumber">228</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1021">
+ <source xml:space="preserve">Unable to bind to %s on this computer (bind returned error %s)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">229</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1022">
+ <source xml:space="preserve">Unable to create the PID file &apos;%s&apos;: %s</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">231</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1023">
+ <source xml:space="preserve">Unable to generate initial keys</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">232</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1024">
+ <source xml:space="preserve">Unknown -blockfilterindex value %s.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">236</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1025">
+ <source xml:space="preserve">Verifying wallet(s)...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">245</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1026">
+ <source xml:space="preserve">Warning: unknown new rules activated (versionbit %i)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">247</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1027">
+ <source xml:space="preserve">-maxtxfee is set very high! Fees this large could be paid on a single transaction.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">16</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1028">
+ <source xml:space="preserve">This is the transaction fee you may pay when fee estimates are not available.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">106</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1029">
+ <source xml:space="preserve">Total length of network version string (%i) exceeds maximum length (%i). Reduce the number or size of uacomments.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">108</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1030">
+ <source xml:space="preserve">%s is set very high!</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">134</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1031">
+ <source xml:space="preserve">Starting network threads...</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">215</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1032">
+ <source xml:space="preserve">The wallet will avoid paying less than the minimum relay fee.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">219</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1033">
+ <source xml:space="preserve">This is the minimum transaction fee you pay on every transaction.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">221</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1034">
+ <source xml:space="preserve">This is the transaction fee you will pay if you send a transaction.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">222</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1035">
+ <source xml:space="preserve">Transaction amounts must not be negative</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">224</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1036">
+ <source xml:space="preserve">Transaction has too long of a mempool chain</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">226</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1037">
+ <source xml:space="preserve">Transaction must have at least one recipient</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">227</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1038" approved="yes">
+ <source xml:space="preserve">Unknown network specified in -onlynet: &apos;%s&apos;</source>
+ <target xml:space="preserve">Unknown network specified in -onlynet: &apos;%s&apos;</target>
+ <context-group purpose="location"><context context-type="linenumber">239</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1039" approved="yes">
+ <source xml:space="preserve">Insufficient funds</source>
+ <target xml:space="preserve">Insufficient funds</target>
+ <context-group purpose="location"><context context-type="linenumber">179</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1040">
+ <source xml:space="preserve">Fee estimation failed. Fallbackfee is disabled. Wait a few blocks or enable -fallbackfee.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">46</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1041">
+ <source xml:space="preserve">Warning: Private keys detected in wallet {%s} with disabled private keys</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">126</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1042">
+ <source xml:space="preserve">Cannot write to data directory &apos;%s&apos;; check permissions.</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">139</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1043" approved="yes">
+ <source xml:space="preserve">Loading block index...</source>
+ <target xml:space="preserve">Loading block index...</target>
+ <context-group purpose="location"><context context-type="linenumber">191</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1044" approved="yes">
+ <source xml:space="preserve">Loading wallet...</source>
+ <target xml:space="preserve">Loading wallet...</target>
+ <context-group purpose="location"><context context-type="linenumber">192</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1045" approved="yes">
+ <source xml:space="preserve">Rescanning...</source>
+ <target xml:space="preserve">Rescanning...</target>
+ <context-group purpose="location"><context context-type="linenumber">201</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg1046" approved="yes">
+ <source xml:space="preserve">Done loading</source>
+ <target xml:space="preserve">Done loading</target>
+ <context-group purpose="location"><context context-type="linenumber">148</context></context-group>
+ </trans-unit>
+ </group>
+ </body></file>
+</xliff>
diff --git a/src/qt/modaloverlay.cpp b/src/qt/modaloverlay.cpp
index 8070aa627c..ae27cad477 100644
--- a/src/qt/modaloverlay.cpp
+++ b/src/qt/modaloverlay.cpp
@@ -134,7 +134,6 @@ void ModalOverlay::tipUpdate(int count, const QDateTime& blockDate, double nVeri
// show the percentage done according to nVerificationProgress
ui->percentageProgress->setText(QString::number(nVerificationProgress*100, 'f', 2)+"%");
- ui->progressBar->setValue(nVerificationProgress*100);
if (!bestHeaderDate.isValid())
// not syncing
@@ -150,13 +149,13 @@ void ModalOverlay::tipUpdate(int count, const QDateTime& blockDate, double nVeri
ui->numberOfBlocksLeft->setText(QString::number(bestHeaderHeight - count));
} else {
UpdateHeaderSyncLabel();
- ui->expectedTimeLeft->setText(tr("Unknown..."));
+ ui->expectedTimeLeft->setText(tr("Unknown…"));
}
}
void ModalOverlay::UpdateHeaderSyncLabel() {
int est_headers_left = bestHeaderDate.secsTo(QDateTime::currentDateTime()) / Params().GetConsensus().nPowTargetSpacing;
- ui->numberOfBlocksLeft->setText(tr("Unknown. Syncing Headers (%1, %2%)...").arg(bestHeaderHeight).arg(QString::number(100.0 / (bestHeaderHeight + est_headers_left) * bestHeaderHeight, 'f', 1)));
+ ui->numberOfBlocksLeft->setText(tr("Unknown. Syncing Headers (%1, %2%)…").arg(bestHeaderHeight).arg(QString::number(100.0 / (bestHeaderHeight + est_headers_left) * bestHeaderHeight, 'f', 1)));
}
void ModalOverlay::toggleVisibility()
diff --git a/src/qt/networkstyle.cpp b/src/qt/networkstyle.cpp
index b1081f6aee..ee70c1bc30 100644
--- a/src/qt/networkstyle.cpp
+++ b/src/qt/networkstyle.cpp
@@ -22,7 +22,6 @@ static const struct {
{"signet", QAPP_APP_NAME_SIGNET, 35, 15},
{"regtest", QAPP_APP_NAME_REGTEST, 160, 30},
};
-static const unsigned network_styles_count = sizeof(network_styles)/sizeof(*network_styles);
// titleAddText needs to be const char* for tr()
NetworkStyle::NetworkStyle(const QString &_appName, const int iconColorHueShift, const int iconColorSaturationReduction, const char *_titleAddText):
@@ -81,14 +80,12 @@ NetworkStyle::NetworkStyle(const QString &_appName, const int iconColorHueShift,
const NetworkStyle* NetworkStyle::instantiate(const std::string& networkId)
{
std::string titleAddText = networkId == CBaseChainParams::MAIN ? "" : strprintf("[%s]", networkId);
- for (unsigned x=0; x<network_styles_count; ++x)
- {
- if (networkId == network_styles[x].networkId)
- {
+ for (const auto& network_style : network_styles) {
+ if (networkId == network_style.networkId) {
return new NetworkStyle(
- network_styles[x].appName,
- network_styles[x].iconColorHueShift,
- network_styles[x].iconColorSaturationReduction,
+ network_style.appName,
+ network_style.iconColorHueShift,
+ network_style.iconColorSaturationReduction,
titleAddText.c_str());
}
}
diff --git a/src/qt/openuridialog.cpp b/src/qt/openuridialog.cpp
index 9a3d43c2a6..10bf82d532 100644
--- a/src/qt/openuridialog.cpp
+++ b/src/qt/openuridialog.cpp
@@ -11,7 +11,7 @@
#include <QUrl>
OpenURIDialog::OpenURIDialog(QWidget *parent) :
- QDialog(parent),
+ QDialog(parent, GUIUtil::dialog_flags),
ui(new Ui::OpenURIDialog)
{
ui->setupUi(this);
diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp
index 416b9c83c9..8a32994e3f 100644
--- a/src/qt/optionsdialog.cpp
+++ b/src/qt/optionsdialog.cpp
@@ -29,7 +29,7 @@
#include <QTimer>
OptionsDialog::OptionsDialog(QWidget *parent, bool enableWallet) :
- QDialog(parent),
+ QDialog(parent, GUIUtil::dialog_flags),
ui(new Ui::OptionsDialog),
model(nullptr),
mapper(nullptr)
@@ -144,6 +144,20 @@ OptionsDialog::OptionsDialog(QWidget *parent, bool enableWallet) :
ui->minimizeToTray->setEnabled(false);
}
+ QFont embedded_font{GUIUtil::fixedPitchFont(true)};
+ ui->embeddedFont_radioButton->setText(ui->embeddedFont_radioButton->text().arg(QFontInfo(embedded_font).family()));
+ embedded_font.setWeight(QFont::Bold);
+ ui->embeddedFont_label_1->setFont(embedded_font);
+ ui->embeddedFont_label_9->setFont(embedded_font);
+
+ QFont system_font{GUIUtil::fixedPitchFont(false)};
+ ui->systemFont_radioButton->setText(ui->systemFont_radioButton->text().arg(QFontInfo(system_font).family()));
+ system_font.setWeight(QFont::Bold);
+ ui->systemFont_label_1->setFont(system_font);
+ ui->systemFont_label_9->setFont(system_font);
+ // Checking the embeddedFont_radioButton automatically unchecks the systemFont_radioButton.
+ ui->systemFont_radioButton->setChecked(true);
+
GUIUtil::handleCloseWindowShortcut(this);
}
@@ -183,9 +197,9 @@ void OptionsDialog::setModel(OptionsModel *_model)
/* Main */
connect(ui->prune, &QCheckBox::clicked, this, &OptionsDialog::showRestartWarning);
connect(ui->prune, &QCheckBox::clicked, this, &OptionsDialog::togglePruneWarning);
- connect(ui->pruneSize, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &OptionsDialog::showRestartWarning);
- connect(ui->databaseCache, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &OptionsDialog::showRestartWarning);
- connect(ui->threadsScriptVerif, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &OptionsDialog::showRestartWarning);
+ connect(ui->pruneSize, qOverload<int>(&QSpinBox::valueChanged), this, &OptionsDialog::showRestartWarning);
+ connect(ui->databaseCache, qOverload<int>(&QSpinBox::valueChanged), this, &OptionsDialog::showRestartWarning);
+ connect(ui->threadsScriptVerif, qOverload<int>(&QSpinBox::valueChanged), this, &OptionsDialog::showRestartWarning);
/* Wallet */
connect(ui->spendZeroConfChange, &QCheckBox::clicked, this, &OptionsDialog::showRestartWarning);
/* Network */
@@ -193,7 +207,7 @@ void OptionsDialog::setModel(OptionsModel *_model)
connect(ui->connectSocks, &QCheckBox::clicked, this, &OptionsDialog::showRestartWarning);
connect(ui->connectSocksTor, &QCheckBox::clicked, this, &OptionsDialog::showRestartWarning);
/* Display */
- connect(ui->lang, static_cast<void (QValueComboBox::*)()>(&QValueComboBox::valueChanged), [this]{ showRestartWarning(); });
+ connect(ui->lang, qOverload<>(&QValueComboBox::valueChanged), [this]{ showRestartWarning(); });
connect(ui->thirdPartyTxUrls, &QLineEdit::textChanged, [this]{ showRestartWarning(); });
}
@@ -246,6 +260,7 @@ void OptionsDialog::setMapper()
mapper->addMapping(ui->lang, OptionsModel::Language);
mapper->addMapping(ui->unit, OptionsModel::DisplayUnit);
mapper->addMapping(ui->thirdPartyTxUrls, OptionsModel::ThirdPartyTxUrls);
+ mapper->addMapping(ui->embeddedFont_radioButton, OptionsModel::UseEmbeddedMonospacedFont);
}
void OptionsDialog::setOkButtonState(bool fState)
diff --git a/src/qt/optionsdialog.h b/src/qt/optionsdialog.h
index 1cc96035c6..ba35ff3b67 100644
--- a/src/qt/optionsdialog.h
+++ b/src/qt/optionsdialog.h
@@ -67,7 +67,7 @@ private Q_SLOTS:
void updateDefaultProxyNets();
Q_SIGNALS:
- void proxyIpChecks(QValidatedLineEdit *pUiProxyIp, int nProxyPort);
+ void proxyIpChecks(QValidatedLineEdit *pUiProxyIp, uint16_t nProxyPort);
private:
Ui::OptionsDialog *ui;
diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp
index 1e0391a35c..d51a5b06ff 100644
--- a/src/qt/optionsmodel.cpp
+++ b/src/qt/optionsmodel.cpp
@@ -163,6 +163,12 @@ void OptionsModel::Init(bool resetSettings)
addOverriddenOption("-lang");
language = settings.value("language").toString();
+
+ if (!settings.contains("UseEmbeddedMonospacedFont")) {
+ settings.setValue("UseEmbeddedMonospacedFont", "true");
+ }
+ m_use_embedded_monospaced_font = settings.value("UseEmbeddedMonospacedFont").toBool();
+ Q_EMIT useEmbeddedMonospacedFontChanged(m_use_embedded_monospaced_font);
}
/** Helper function to copy contents from one QSettings to another.
@@ -326,6 +332,8 @@ QVariant OptionsModel::data(const QModelIndex & index, int role) const
return strThirdPartyTxUrls;
case Language:
return settings.value("language");
+ case UseEmbeddedMonospacedFont:
+ return m_use_embedded_monospaced_font;
case CoinControlFeatures:
return fCoinControlFeatures;
case Prune:
@@ -453,6 +461,11 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in
setRestartRequired(true);
}
break;
+ case UseEmbeddedMonospacedFont:
+ m_use_embedded_monospaced_font = value.toBool();
+ settings.setValue("UseEmbeddedMonospacedFont", m_use_embedded_monospaced_font);
+ Q_EMIT useEmbeddedMonospacedFontChanged(m_use_embedded_monospaced_font);
+ break;
case CoinControlFeatures:
fCoinControlFeatures = value.toBool();
settings.setValue("fCoinControlFeatures", fCoinControlFeatures);
diff --git a/src/qt/optionsmodel.h b/src/qt/optionsmodel.h
index f7171951a1..4d012a9b8f 100644
--- a/src/qt/optionsmodel.h
+++ b/src/qt/optionsmodel.h
@@ -59,6 +59,7 @@ public:
DisplayUnit, // BitcoinUnits::Unit
ThirdPartyTxUrls, // QString
Language, // QString
+ UseEmbeddedMonospacedFont, // bool
CoinControlFeatures, // bool
ThreadsScriptVerif, // int
Prune, // bool
@@ -84,6 +85,7 @@ public:
bool getMinimizeOnClose() const { return fMinimizeOnClose; }
int getDisplayUnit() const { return nDisplayUnit; }
QString getThirdPartyTxUrls() const { return strThirdPartyTxUrls; }
+ bool getUseEmbeddedMonospacedFont() const { return m_use_embedded_monospaced_font; }
bool getCoinControlFeatures() const { return fCoinControlFeatures; }
const QString& getOverriddenByCommandLine() { return strOverriddenByCommandLine; }
@@ -107,6 +109,7 @@ private:
QString language;
int nDisplayUnit;
QString strThirdPartyTxUrls;
+ bool m_use_embedded_monospaced_font;
bool fCoinControlFeatures;
/* settings that were overridden by command-line */
QString strOverriddenByCommandLine;
@@ -120,6 +123,7 @@ Q_SIGNALS:
void displayUnitChanged(int unit);
void coinControlFeaturesChanged(bool);
void showTrayIconChanged(bool);
+ void useEmbeddedMonospacedFontChanged(bool);
};
#endif // BITCOIN_QT_OPTIONSMODEL_H
diff --git a/src/qt/overviewpage.cpp b/src/qt/overviewpage.cpp
index bc542a0833..7f12b1d2b5 100644
--- a/src/qt/overviewpage.cpp
+++ b/src/qt/overviewpage.cpp
@@ -257,6 +257,9 @@ void OverviewPage::setClientModel(ClientModel *model)
// Show warning, for example if this is a prerelease version
connect(model, &ClientModel::alertsChanged, this, &OverviewPage::updateAlerts);
updateAlerts(model->getStatusBarWarnings());
+
+ connect(model->getOptionsModel(), &OptionsModel::useEmbeddedMonospacedFontChanged, this, &OverviewPage::setMonospacedFont);
+ setMonospacedFont(model->getOptionsModel()->getUseEmbeddedMonospacedFont());
}
}
@@ -321,3 +324,17 @@ void OverviewPage::showOutOfSyncWarning(bool fShow)
ui->labelWalletStatus->setVisible(fShow);
ui->labelTransactionsStatus->setVisible(fShow);
}
+
+void OverviewPage::setMonospacedFont(bool use_embedded_font)
+{
+ QFont f = GUIUtil::fixedPitchFont(use_embedded_font);
+ f.setWeight(QFont::Bold);
+ ui->labelBalance->setFont(f);
+ ui->labelUnconfirmed->setFont(f);
+ ui->labelImmature->setFont(f);
+ ui->labelTotal->setFont(f);
+ ui->labelWatchAvailable->setFont(f);
+ ui->labelWatchPending->setFont(f);
+ ui->labelWatchImmature->setFont(f);
+ ui->labelWatchTotal->setFont(f);
+}
diff --git a/src/qt/overviewpage.h b/src/qt/overviewpage.h
index 578ef601fb..5158c81678 100644
--- a/src/qt/overviewpage.h
+++ b/src/qt/overviewpage.h
@@ -61,6 +61,7 @@ private Q_SLOTS:
void updateAlerts(const QString &warnings);
void updateWatchOnlyLabels(bool showWatchOnly);
void handleOutOfSyncWarningClicks();
+ void setMonospacedFont(bool use_embedded_font);
};
#endif // BITCOIN_QT_OVERVIEWPAGE_H
diff --git a/src/qt/paymentserver.cpp b/src/qt/paymentserver.cpp
index 96f6202874..58f6c14e7a 100644
--- a/src/qt/paymentserver.cpp
+++ b/src/qt/paymentserver.cpp
@@ -235,9 +235,9 @@ void PaymentServer::handleURIOrFile(const QString& s)
if (!IsValidDestinationString(recipient.address.toStdString())) {
if (uri.hasQueryItem("r")) { // payment request
Q_EMIT message(tr("URI handling"),
- tr("Cannot process payment request because BIP70 is not supported.")+
- tr("Due to widespread security flaws in BIP70 it's strongly recommended that any merchant instructions to switch wallets be ignored.")+
- tr("If you are receiving this error you should request the merchant provide a BIP21 compatible URI."),
+ tr("Cannot process payment request because BIP70 is not supported.\n"
+ "Due to widespread security flaws in BIP70 it's strongly recommended that any merchant instructions to switch wallets be ignored.\n"
+ "If you are receiving this error you should request the merchant provide a BIP21 compatible URI."),
CClientUIInterface::ICON_WARNING);
}
Q_EMIT message(tr("URI handling"), tr("Invalid payment address %1").arg(recipient.address),
@@ -258,9 +258,9 @@ void PaymentServer::handleURIOrFile(const QString& s)
if (QFile::exists(s)) // payment request file
{
Q_EMIT message(tr("Payment request file handling"),
- tr("Cannot process payment request because BIP70 is not supported.")+
- tr("Due to widespread security flaws in BIP70 it's strongly recommended that any merchant instructions to switch wallets be ignored.")+
- tr("If you are receiving this error you should request the merchant provide a BIP21 compatible URI."),
+ tr("Cannot process payment request because BIP70 is not supported.\n"
+ "Due to widespread security flaws in BIP70 it's strongly recommended that any merchant instructions to switch wallets be ignored.\n"
+ "If you are receiving this error you should request the merchant provide a BIP21 compatible URI."),
CClientUIInterface::ICON_WARNING);
}
}
diff --git a/src/qt/peertablemodel.cpp b/src/qt/peertablemodel.cpp
index bad81d894c..6c4e326011 100644
--- a/src/qt/peertablemodel.cpp
+++ b/src/qt/peertablemodel.cpp
@@ -11,56 +11,19 @@
#include <utility>
-#include <QDebug>
#include <QList>
#include <QTimer>
-bool NodeLessThan::operator()(const CNodeCombinedStats &left, const CNodeCombinedStats &right) const
-{
- const CNodeStats *pLeft = &(left.nodeStats);
- const CNodeStats *pRight = &(right.nodeStats);
-
- if (order == Qt::DescendingOrder)
- std::swap(pLeft, pRight);
-
- switch(column)
- {
- case PeerTableModel::NetNodeId:
- return pLeft->nodeid < pRight->nodeid;
- case PeerTableModel::Address:
- return pLeft->addrName.compare(pRight->addrName) < 0;
- case PeerTableModel::Network:
- return pLeft->m_network < pRight->m_network;
- case PeerTableModel::Ping:
- return pLeft->m_min_ping_usec < pRight->m_min_ping_usec;
- case PeerTableModel::Sent:
- return pLeft->nSendBytes < pRight->nSendBytes;
- case PeerTableModel::Received:
- return pLeft->nRecvBytes < pRight->nRecvBytes;
- case PeerTableModel::Subversion:
- return pLeft->cleanSubVer.compare(pRight->cleanSubVer) < 0;
- }
-
- return false;
-}
-
// private implementation
class PeerTablePriv
{
public:
/** Local cache of peer information */
QList<CNodeCombinedStats> cachedNodeStats;
- /** Column to sort nodes by (default to unsorted) */
- int sortColumn{-1};
- /** Order (ascending or descending) to sort nodes by */
- Qt::SortOrder sortOrder;
- /** Index of rows by node ID */
- std::map<NodeId, int> mapNodeRows;
/** Pull a full list of peers from vNodes into our cache */
void refreshPeers(interfaces::Node& node)
{
- {
cachedNodeStats.clear();
interfaces::Node::NodesStats nodes_stats;
@@ -74,17 +37,6 @@ public:
stats.nodeStateStats = std::get<2>(node_stats);
cachedNodeStats.append(stats);
}
- }
-
- if (sortColumn >= 0)
- // sort cacheNodeStats (use stable sort to prevent rows jumping around unnecessarily)
- std::stable_sort(cachedNodeStats.begin(), cachedNodeStats.end(), NodeLessThan(sortColumn, sortOrder));
-
- // build index map
- mapNodeRows.clear();
- int row = 0;
- for (const CNodeCombinedStats& stats : cachedNodeStats)
- mapNodeRows.insert(std::pair<NodeId, int>(stats.nodeStats.nodeid, row++));
}
int size() const
@@ -155,41 +107,46 @@ QVariant PeerTableModel::data(const QModelIndex &index, int role) const
CNodeCombinedStats *rec = static_cast<CNodeCombinedStats*>(index.internalPointer());
+ const auto column = static_cast<ColumnIndex>(index.column());
if (role == Qt::DisplayRole) {
- switch(index.column())
- {
+ switch (column) {
case NetNodeId:
return (qint64)rec->nodeStats.nodeid;
case Address:
// prepend to peer address down-arrow symbol for inbound connection and up-arrow for outbound connection
return QString(rec->nodeStats.fInbound ? "↓ " : "↑ ") + QString::fromStdString(rec->nodeStats.addrName);
+ case ConnectionType:
+ return GUIUtil::ConnectionTypeToQString(rec->nodeStats.m_conn_type, /* prepend_direction */ false);
case Network:
return GUIUtil::NetworkToQString(rec->nodeStats.m_network);
case Ping:
- return GUIUtil::formatPingTime(rec->nodeStats.m_min_ping_usec);
+ return GUIUtil::formatPingTime(rec->nodeStats.m_min_ping_time);
case Sent:
return GUIUtil::formatBytes(rec->nodeStats.nSendBytes);
case Received:
return GUIUtil::formatBytes(rec->nodeStats.nRecvBytes);
case Subversion:
return QString::fromStdString(rec->nodeStats.cleanSubVer);
- }
+ } // no default case, so the compiler can warn about missing cases
+ assert(false);
} else if (role == Qt::TextAlignmentRole) {
- switch (index.column()) {
- case Network:
- return QVariant(Qt::AlignCenter);
- case Ping:
- case Sent:
- case Received:
- return QVariant(Qt::AlignRight | Qt::AlignVCenter);
- default:
- return QVariant();
- }
+ switch (column) {
+ case NetNodeId:
+ case Address:
+ return {};
+ case ConnectionType:
+ case Network:
+ return QVariant(Qt::AlignCenter);
+ case Ping:
+ case Sent:
+ case Received:
+ return QVariant(Qt::AlignRight | Qt::AlignVCenter);
+ case Subversion:
+ return {};
+ } // no default case, so the compiler can warn about missing cases
+ assert(false);
} else if (role == StatsRole) {
- switch (index.column()) {
- case NetNodeId: return QVariant::fromValue(rec);
- default: return QVariant();
- }
+ return QVariant::fromValue(rec);
}
return QVariant();
@@ -231,19 +188,3 @@ void PeerTableModel::refresh()
priv->refreshPeers(m_node);
Q_EMIT layoutChanged();
}
-
-int PeerTableModel::getRowByNodeId(NodeId nodeid)
-{
- std::map<NodeId, int>::iterator it = priv->mapNodeRows.find(nodeid);
- if (it == priv->mapNodeRows.end())
- return -1;
-
- return it->second;
-}
-
-void PeerTableModel::sort(int column, Qt::SortOrder order)
-{
- priv->sortColumn = column;
- priv->sortOrder = order;
- refresh();
-}
diff --git a/src/qt/peertablemodel.h b/src/qt/peertablemodel.h
index 7bff239507..9c7bc25da2 100644
--- a/src/qt/peertablemodel.h
+++ b/src/qt/peertablemodel.h
@@ -30,18 +30,6 @@ struct CNodeCombinedStats {
};
Q_DECLARE_METATYPE(CNodeCombinedStats*)
-class NodeLessThan
-{
-public:
- NodeLessThan(int nColumn, Qt::SortOrder fOrder) :
- column(nColumn), order(fOrder) {}
- bool operator()(const CNodeCombinedStats &left, const CNodeCombinedStats &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.
@@ -53,18 +41,18 @@ class PeerTableModel : public QAbstractTableModel
public:
explicit PeerTableModel(interfaces::Node& node, QObject* parent);
~PeerTableModel();
- int getRowByNodeId(NodeId nodeid);
void startAutoRefresh();
void stopAutoRefresh();
enum ColumnIndex {
NetNodeId = 0,
- Address = 1,
- Network = 2,
- Ping = 3,
- Sent = 4,
- Received = 5,
- Subversion = 6
+ Address,
+ ConnectionType,
+ Network,
+ Ping,
+ Sent,
+ Received,
+ Subversion
};
enum {
@@ -79,7 +67,6 @@ public:
QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
QModelIndex index(int row, int column, const QModelIndex &parent) const override;
Qt::ItemFlags flags(const QModelIndex &index) const override;
- void sort(int column, Qt::SortOrder order) override;
/*@}*/
public Q_SLOTS:
@@ -87,7 +74,7 @@ public Q_SLOTS:
private:
interfaces::Node& m_node;
- const QStringList columns{tr("Peer Id"), tr("Address"), tr("Network"), tr("Ping"), tr("Sent"), tr("Received"), tr("User Agent")};
+ const QStringList columns{tr("Peer Id"), tr("Address"), tr("Type"), tr("Network"), tr("Ping"), tr("Sent"), tr("Received"), tr("User Agent")};
std::unique_ptr<PeerTablePriv> priv;
QTimer *timer;
};
diff --git a/src/qt/peertablesortproxy.cpp b/src/qt/peertablesortproxy.cpp
new file mode 100644
index 0000000000..78932da8d4
--- /dev/null
+++ b/src/qt/peertablesortproxy.cpp
@@ -0,0 +1,43 @@
+// Copyright (c) 2020 The Bitcoin Core developers
+// Distributed under the MIT software license, see the accompanying
+// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+#include <qt/peertablesortproxy.h>
+
+#include <qt/peertablemodel.h>
+#include <util/check.h>
+
+#include <QModelIndex>
+#include <QString>
+#include <QVariant>
+
+PeerTableSortProxy::PeerTableSortProxy(QObject* parent)
+ : QSortFilterProxyModel(parent)
+{
+}
+
+bool PeerTableSortProxy::lessThan(const QModelIndex& left_index, const QModelIndex& right_index) const
+{
+ const CNodeStats left_stats = Assert(sourceModel()->data(left_index, PeerTableModel::StatsRole).value<CNodeCombinedStats*>())->nodeStats;
+ const CNodeStats right_stats = Assert(sourceModel()->data(right_index, PeerTableModel::StatsRole).value<CNodeCombinedStats*>())->nodeStats;
+
+ switch (static_cast<PeerTableModel::ColumnIndex>(left_index.column())) {
+ case PeerTableModel::NetNodeId:
+ return left_stats.nodeid < right_stats.nodeid;
+ case PeerTableModel::Address:
+ return left_stats.addrName.compare(right_stats.addrName) < 0;
+ case PeerTableModel::ConnectionType:
+ return left_stats.m_conn_type < right_stats.m_conn_type;
+ case PeerTableModel::Network:
+ return left_stats.m_network < right_stats.m_network;
+ case PeerTableModel::Ping:
+ return left_stats.m_min_ping_time < right_stats.m_min_ping_time;
+ case PeerTableModel::Sent:
+ return left_stats.nSendBytes < right_stats.nSendBytes;
+ case PeerTableModel::Received:
+ return left_stats.nRecvBytes < right_stats.nRecvBytes;
+ case PeerTableModel::Subversion:
+ return left_stats.cleanSubVer.compare(right_stats.cleanSubVer) < 0;
+ } // no default case, so the compiler can warn about missing cases
+ assert(false);
+}
diff --git a/src/qt/peertablesortproxy.h b/src/qt/peertablesortproxy.h
new file mode 100644
index 0000000000..1879f6b400
--- /dev/null
+++ b/src/qt/peertablesortproxy.h
@@ -0,0 +1,25 @@
+// Copyright (c) 2020 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_PEERTABLESORTPROXY_H
+#define BITCOIN_QT_PEERTABLESORTPROXY_H
+
+#include <QSortFilterProxyModel>
+
+QT_BEGIN_NAMESPACE
+class QModelIndex;
+QT_END_NAMESPACE
+
+class PeerTableSortProxy : public QSortFilterProxyModel
+{
+ Q_OBJECT
+
+public:
+ explicit PeerTableSortProxy(QObject* parent = nullptr);
+
+protected:
+ bool lessThan(const QModelIndex& left_index, const QModelIndex& right_index) const override;
+};
+
+#endif // BITCOIN_QT_PEERTABLESORTPROXY_H
diff --git a/src/qt/platformstyle.cpp b/src/qt/platformstyle.cpp
index c6b80fd340..1d0605c903 100644
--- a/src/qt/platformstyle.cpp
+++ b/src/qt/platformstyle.cpp
@@ -18,12 +18,11 @@ static const struct {
/** Extra padding/spacing in transactionview */
const bool useExtraSpacing;
} platform_styles[] = {
- {"macosx", false, false, true},
+ {"macosx", false, true, true},
{"windows", true, false, false},
/* Other: linux, unix, ... */
{"other", true, true, false}
};
-static const unsigned platform_styles_count = sizeof(platform_styles)/sizeof(*platform_styles);
namespace {
/* Local functions for colorizing single-color images */
@@ -121,15 +120,13 @@ QIcon PlatformStyle::TextColorIcon(const QIcon& icon) const
const PlatformStyle *PlatformStyle::instantiate(const QString &platformId)
{
- for (unsigned x=0; x<platform_styles_count; ++x)
- {
- if (platformId == platform_styles[x].platformId)
- {
+ for (const auto& platform_style : platform_styles) {
+ if (platformId == platform_style.platformId) {
return new PlatformStyle(
- platform_styles[x].platformId,
- platform_styles[x].imagesOnButtons,
- platform_styles[x].colorizeIcons,
- platform_styles[x].useExtraSpacing);
+ platform_style.platformId,
+ platform_style.imagesOnButtons,
+ platform_style.colorizeIcons,
+ platform_style.useExtraSpacing);
}
}
return nullptr;
diff --git a/src/qt/psbtoperationsdialog.cpp b/src/qt/psbtoperationsdialog.cpp
index 58167d4bb4..17746b395b 100644
--- a/src/qt/psbtoperationsdialog.cpp
+++ b/src/qt/psbtoperationsdialog.cpp
@@ -19,7 +19,7 @@
PSBTOperationsDialog::PSBTOperationsDialog(
- QWidget* parent, WalletModel* wallet_model, ClientModel* client_model) : QDialog(parent),
+ QWidget* parent, WalletModel* wallet_model, ClientModel* client_model) : QDialog(parent, GUIUtil::dialog_flags),
m_ui(new Ui::PSBTOperationsDialog),
m_wallet_model(wallet_model),
m_client_model(client_model)
@@ -141,11 +141,11 @@ void PSBTOperationsDialog::saveTransaction() {
filename_suggestion.append(".psbt");
QString filename = GUIUtil::getSaveFileName(this,
tr("Save Transaction Data"), filename_suggestion,
- tr("Partially Signed Transaction (Binary) (*.psbt)"), &selected_filter);
+ tr("Partially Signed Transaction (Binary)", "Name of binary PSBT file format") + QLatin1String(" (*.psbt)"), &selected_filter);
if (filename.isEmpty()) {
return;
}
- std::ofstream out(filename.toLocal8Bit().data());
+ std::ofstream out(filename.toLocal8Bit().data(), std::ofstream::out | std::ofstream::binary);
out << ssTx.str();
out.close();
showStatus(tr("PSBT saved to disk."), StatusLevel::INFO);
diff --git a/src/qt/qrimagewidget.cpp b/src/qt/qrimagewidget.cpp
index 490826cbbb..3e1964915d 100644
--- a/src/qt/qrimagewidget.cpp
+++ b/src/qt/qrimagewidget.cpp
@@ -27,12 +27,8 @@ QRImageWidget::QRImageWidget(QWidget *parent):
QLabel(parent), contextMenu(nullptr)
{
contextMenu = new QMenu(this);
- QAction *saveImageAction = new QAction(tr("&Save Image..."), this);
- connect(saveImageAction, &QAction::triggered, this, &QRImageWidget::saveImage);
- contextMenu->addAction(saveImageAction);
- QAction *copyImageAction = new QAction(tr("&Copy Image"), this);
- connect(copyImageAction, &QAction::triggered, this, &QRImageWidget::copyImage);
- contextMenu->addAction(copyImageAction);
+ contextMenu->addAction(tr("Save Image…"), this, &QRImageWidget::saveImage);
+ contextMenu->addAction(tr("Copy Image"), this, &QRImageWidget::copyImage);
}
bool QRImageWidget::setQR(const QString& data, const QString& text)
@@ -120,7 +116,9 @@ void QRImageWidget::saveImage()
{
if (!GUIUtil::HasPixmap(this))
return;
- QString fn = GUIUtil::getSaveFileName(this, tr("Save QR Code"), QString(), tr("PNG Image (*.png)"), nullptr);
+ QString fn = GUIUtil::getSaveFileName(
+ this, tr("Save QR Code"), QString(),
+ tr("PNG Image", "Name of PNG file format") + QLatin1String(" (*.png)"), nullptr);
if (!fn.isEmpty())
{
exportImage().save(fn);
diff --git a/src/qt/qvaluecombobox.cpp b/src/qt/qvaluecombobox.cpp
index 76f94ecf85..5672396819 100644
--- a/src/qt/qvaluecombobox.cpp
+++ b/src/qt/qvaluecombobox.cpp
@@ -7,7 +7,7 @@
QValueComboBox::QValueComboBox(QWidget *parent) :
QComboBox(parent), role(Qt::UserRole)
{
- connect(this, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &QValueComboBox::handleSelectionChanged);
+ connect(this, qOverload<int>(&QComboBox::currentIndexChanged), this, &QValueComboBox::handleSelectionChanged);
}
QVariant QValueComboBox::value() const
diff --git a/src/qt/receivecoinsdialog.cpp b/src/qt/receivecoinsdialog.cpp
index 1a9cd78d1e..3f4d7f85e6 100644
--- a/src/qt/receivecoinsdialog.cpp
+++ b/src/qt/receivecoinsdialog.cpp
@@ -8,6 +8,7 @@
#include <qt/forms/ui_receivecoinsdialog.h>
#include <qt/addresstablemodel.h>
+#include <qt/guiutil.h>
#include <qt/optionsmodel.h>
#include <qt/platformstyle.h>
#include <qt/receiverequestdialog.h>
@@ -18,12 +19,12 @@
#include <QCursor>
#include <QMessageBox>
#include <QScrollBar>
+#include <QSettings>
#include <QTextDocument>
ReceiveCoinsDialog::ReceiveCoinsDialog(const PlatformStyle *_platformStyle, QWidget *parent) :
- QDialog(parent),
+ QDialog(parent, GUIUtil::dialog_flags),
ui(new Ui::ReceiveCoinsDialog),
- columnResizingFixer(nullptr),
model(nullptr),
platformStyle(_platformStyle)
{
@@ -41,27 +42,31 @@ ReceiveCoinsDialog::ReceiveCoinsDialog(const PlatformStyle *_platformStyle, QWid
ui->removeRequestButton->setIcon(_platformStyle->SingleColorIcon(":/icons/remove"));
}
- // context menu actions
- QAction *copyURIAction = new QAction(tr("Copy URI"), this);
- QAction *copyLabelAction = new QAction(tr("Copy label"), this);
- QAction *copyMessageAction = new QAction(tr("Copy message"), this);
- QAction *copyAmountAction = new QAction(tr("Copy amount"), this);
-
// context menu
contextMenu = new QMenu(this);
- contextMenu->addAction(copyURIAction);
- contextMenu->addAction(copyLabelAction);
- contextMenu->addAction(copyMessageAction);
- contextMenu->addAction(copyAmountAction);
-
- // context menu signals
+ contextMenu->addAction(tr("Copy URI"), this, &ReceiveCoinsDialog::copyURI);
+ contextMenu->addAction(tr("Copy address"), this, &ReceiveCoinsDialog::copyAddress);
+ copyLabelAction = contextMenu->addAction(tr("Copy label"), this, &ReceiveCoinsDialog::copyLabel);
+ copyMessageAction = contextMenu->addAction(tr("Copy message"), this, &ReceiveCoinsDialog::copyMessage);
+ copyAmountAction = contextMenu->addAction(tr("Copy amount"), this, &ReceiveCoinsDialog::copyAmount);
connect(ui->recentRequestsView, &QWidget::customContextMenuRequested, this, &ReceiveCoinsDialog::showMenu);
- connect(copyURIAction, &QAction::triggered, this, &ReceiveCoinsDialog::copyURI);
- connect(copyLabelAction, &QAction::triggered, this, &ReceiveCoinsDialog::copyLabel);
- connect(copyMessageAction, &QAction::triggered, this, &ReceiveCoinsDialog::copyMessage);
- connect(copyAmountAction, &QAction::triggered, this, &ReceiveCoinsDialog::copyAmount);
connect(ui->clearButton, &QPushButton::clicked, this, &ReceiveCoinsDialog::clear);
+
+ QTableView* tableView = ui->recentRequestsView;
+ tableView->verticalHeader()->hide();
+ tableView->setAlternatingRowColors(true);
+ tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
+ tableView->setSelectionMode(QAbstractItemView::ContiguousSelection);
+
+ QSettings settings;
+ if (!tableView->horizontalHeader()->restoreState(settings.value("RecentRequestsViewHeaderState").toByteArray())) {
+ tableView->setColumnWidth(RecentRequestsTableModel::Date, DATE_COLUMN_WIDTH);
+ tableView->setColumnWidth(RecentRequestsTableModel::Label, LABEL_COLUMN_WIDTH);
+ tableView->setColumnWidth(RecentRequestsTableModel::Amount, AMOUNT_MINIMUM_COLUMN_WIDTH);
+ tableView->horizontalHeader()->setMinimumSectionSize(MINIMUM_COLUMN_WIDTH);
+ tableView->horizontalHeader()->setStretchLastSection(true);
+ }
}
void ReceiveCoinsDialog::setModel(WalletModel *_model)
@@ -75,22 +80,12 @@ void ReceiveCoinsDialog::setModel(WalletModel *_model)
updateDisplayUnit();
QTableView* tableView = ui->recentRequestsView;
-
- tableView->verticalHeader()->hide();
- tableView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
tableView->setModel(_model->getRecentRequestsTableModel());
- tableView->setAlternatingRowColors(true);
- tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
- tableView->setSelectionMode(QAbstractItemView::ContiguousSelection);
- tableView->setColumnWidth(RecentRequestsTableModel::Date, DATE_COLUMN_WIDTH);
- tableView->setColumnWidth(RecentRequestsTableModel::Label, LABEL_COLUMN_WIDTH);
- tableView->setColumnWidth(RecentRequestsTableModel::Amount, AMOUNT_MINIMUM_COLUMN_WIDTH);
+ tableView->sortByColumn(RecentRequestsTableModel::Date, Qt::DescendingOrder);
connect(tableView->selectionModel(),
&QItemSelectionModel::selectionChanged, this,
&ReceiveCoinsDialog::recentRequestsView_selectionChanged);
- // Last 2 columns are set by the columnResizingFixer, when the table geometry is ready.
- columnResizingFixer = new GUIUtil::TableViewLastColumnResizingFixer(tableView, AMOUNT_MINIMUM_COLUMN_WIDTH, DATE_COLUMN_WIDTH, this);
if (model->wallet().getDefaultAddressType() == OutputType::BECH32) {
ui->useBech32->setCheckState(Qt::Checked);
@@ -110,6 +105,8 @@ void ReceiveCoinsDialog::setModel(WalletModel *_model)
ReceiveCoinsDialog::~ReceiveCoinsDialog()
{
+ QSettings settings;
+ settings.setValue("RecentRequestsViewHeaderState", ui->recentRequestsView->horizontalHeader()->saveState());
delete ui;
}
@@ -234,14 +231,6 @@ void ReceiveCoinsDialog::on_removeRequestButton_clicked()
model->getRecentRequestsTableModel()->removeRows(firstIndex.row(), selection.length(), firstIndex.parent());
}
-// We override the virtual resizeEvent of the QWidget to adjust tables column
-// sizes as the tables width is proportional to the dialogs width.
-void ReceiveCoinsDialog::resizeEvent(QResizeEvent *event)
-{
- QWidget::resizeEvent(event);
- columnResizingFixer->stretchColumnWidth(RecentRequestsTableModel::Message);
-}
-
QModelIndex ReceiveCoinsDialog::selectedRow()
{
if(!model || !model->getRecentRequestsTableModel() || !ui->recentRequestsView->selectionModel())
@@ -267,9 +256,18 @@ void ReceiveCoinsDialog::copyColumnToClipboard(int column)
// context menu
void ReceiveCoinsDialog::showMenu(const QPoint &point)
{
- if (!selectedRow().isValid()) {
+ const QModelIndex sel = selectedRow();
+ if (!sel.isValid()) {
return;
}
+
+ // disable context menu actions when appropriate
+ const RecentRequestsTableModel* const submodel = model->getRecentRequestsTableModel();
+ const RecentRequestEntry& req = submodel->entry(sel.row());
+ copyLabelAction->setDisabled(req.recipient.label.isEmpty());
+ copyMessageAction->setDisabled(req.recipient.message.isEmpty());
+ copyAmountAction->setDisabled(req.recipient.amount == 0);
+
contextMenu->exec(QCursor::pos());
}
@@ -286,6 +284,19 @@ void ReceiveCoinsDialog::copyURI()
GUIUtil::setClipboard(uri);
}
+// context menu action: copy address
+void ReceiveCoinsDialog::copyAddress()
+{
+ const QModelIndex sel = selectedRow();
+ if (!sel.isValid()) {
+ return;
+ }
+
+ const RecentRequestsTableModel* const submodel = model->getRecentRequestsTableModel();
+ const QString address = submodel->entry(sel.row()).recipient.address;
+ GUIUtil::setClipboard(address);
+}
+
// context menu action: copy label
void ReceiveCoinsDialog::copyLabel()
{
diff --git a/src/qt/receivecoinsdialog.h b/src/qt/receivecoinsdialog.h
index 9b89bd6a8b..fbbccc5a33 100644
--- a/src/qt/receivecoinsdialog.h
+++ b/src/qt/receivecoinsdialog.h
@@ -51,14 +51,15 @@ public Q_SLOTS:
private:
Ui::ReceiveCoinsDialog *ui;
- GUIUtil::TableViewLastColumnResizingFixer *columnResizingFixer;
WalletModel *model;
QMenu *contextMenu;
+ QAction* copyLabelAction;
+ QAction* copyMessageAction;
+ QAction* copyAmountAction;
const PlatformStyle *platformStyle;
QModelIndex selectedRow();
void copyColumnToClipboard(int column);
- virtual void resizeEvent(QResizeEvent *event) override;
private Q_SLOTS:
void on_receiveButton_clicked();
@@ -69,6 +70,7 @@ private Q_SLOTS:
void updateDisplayUnit();
void showMenu(const QPoint &point);
void copyURI();
+ void copyAddress();
void copyLabel();
void copyMessage();
void copyAmount();
diff --git a/src/qt/receiverequestdialog.cpp b/src/qt/receiverequestdialog.cpp
index bef3edc5fe..78ae5c07da 100644
--- a/src/qt/receiverequestdialog.cpp
+++ b/src/qt/receiverequestdialog.cpp
@@ -19,7 +19,7 @@
#endif
ReceiveRequestDialog::ReceiveRequestDialog(QWidget *parent) :
- QDialog(parent),
+ QDialog(parent, GUIUtil::dialog_flags),
ui(new Ui::ReceiveRequestDialog),
model(nullptr)
{
diff --git a/src/qt/recentrequeststablemodel.cpp b/src/qt/recentrequeststablemodel.cpp
index 18b913774b..03531a1381 100644
--- a/src/qt/recentrequeststablemodel.cpp
+++ b/src/qt/recentrequeststablemodel.cpp
@@ -181,7 +181,7 @@ void RecentRequestsTableModel::addNewRequest(const SendCoinsRecipient &recipient
// called from ctor when loading from wallet
void RecentRequestsTableModel::addNewRequest(const std::string &recipient)
{
- std::vector<char> data(recipient.begin(), recipient.end());
+ std::vector<uint8_t> data(recipient.begin(), recipient.end());
CDataStream ss(data, SER_DISK, CLIENT_VERSION);
RecentRequestEntry entry;
diff --git a/src/qt/res/fonts/RobotoMono-Bold.ttf b/src/qt/res/fonts/RobotoMono-Bold.ttf
new file mode 100644
index 0000000000..900fce6848
--- /dev/null
+++ b/src/qt/res/fonts/RobotoMono-Bold.ttf
Binary files differ
diff --git a/src/qt/rpcconsole.cpp b/src/qt/rpcconsole.cpp
index 01307b8519..58bca97c78 100644
--- a/src/qt/rpcconsole.cpp
+++ b/src/qt/rpcconsole.cpp
@@ -9,13 +9,14 @@
#include <qt/rpcconsole.h>
#include <qt/forms/ui_debugwindow.h>
+#include <chainparams.h>
+#include <interfaces/node.h>
+#include <netbase.h>
#include <qt/bantablemodel.h>
#include <qt/clientmodel.h>
+#include <qt/peertablesortproxy.h>
#include <qt/platformstyle.h>
#include <qt/walletmodel.h>
-#include <chainparams.h>
-#include <interfaces/node.h>
-#include <netbase.h>
#include <rpc/client.h>
#include <rpc/server.h>
#include <util/strencodings.h>
@@ -470,7 +471,7 @@ RPCConsole::RPCConsole(interfaces::Node& node, const PlatformStyle *_platformSty
constexpr QChar nonbreaking_hyphen(8209);
const std::vector<QString> CONNECTION_TYPE_DOC{
- tr("Inbound Full/Block Relay: initiated by peer"),
+ tr("Inbound: initiated by peer"),
tr("Outbound Full Relay: default"),
tr("Outbound Block Relay: does not relay transactions or addresses"),
tr("Outbound Manual: added using RPC %1 or %2/%3 configuration options")
@@ -481,6 +482,11 @@ RPCConsole::RPCConsole(interfaces::Node& node, const PlatformStyle *_platformSty
tr("Outbound Address Fetch: short-lived, for soliciting addresses")};
const QString list{"<ul><li>" + Join(CONNECTION_TYPE_DOC, QString("</li><li>")) + "</li></ul>"};
ui->peerConnectionTypeLabel->setToolTip(ui->peerConnectionTypeLabel->toolTip().arg(list));
+ const QString hb_list{"<ul><li>\""
+ + ts.to + "\" – " + tr("we selected the peer for high bandwidth relay") + "</li><li>\""
+ + ts.from + "\" – " + tr("the peer selected us for high bandwidth relay") + "</li><li>\""
+ + ts.no + "\" – " + tr("no high bandwidth relay selected") + "</li></ul>"};
+ ui->peerHighBandwidthLabel->setToolTip(ui->peerHighBandwidthLabel->toolTip().arg(hb_list));
ui->dataDir->setToolTip(ui->dataDir->toolTip().arg(QString(nonbreaking_hyphen) + "datadir"));
ui->blocksDir->setToolTip(ui->blocksDir->toolTip().arg(QString(nonbreaking_hyphen) + "blocksdir"));
ui->openDebugLogfileButton->setToolTip(ui->openDebugLogfileButton->toolTip().arg(PACKAGE_NAME));
@@ -619,9 +625,8 @@ void RPCConsole::setClientModel(ClientModel *model, int bestblock_height, int64_
connect(model, &ClientModel::mempoolSizeChanged, this, &RPCConsole::setMempoolSize);
// set up peer table
- ui->peerWidget->setModel(model->getPeerTableModel());
+ ui->peerWidget->setModel(model->peerTableSortProxy());
ui->peerWidget->verticalHeader()->hide();
- ui->peerWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
ui->peerWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->peerWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
ui->peerWidget->setContextMenuPolicy(Qt::CustomContextMenu);
@@ -630,41 +635,22 @@ void RPCConsole::setClientModel(ClientModel *model, int bestblock_height, int64_
ui->peerWidget->setColumnWidth(PeerTableModel::Ping, PING_COLUMN_WIDTH);
ui->peerWidget->horizontalHeader()->setStretchLastSection(true);
- // create peer table context menu actions
- QAction* disconnectAction = new QAction(tr("&Disconnect"), this);
- QAction* banAction1h = new QAction(tr("Ban for") + " " + tr("1 &hour"), this);
- QAction* banAction24h = new QAction(tr("Ban for") + " " + tr("1 &day"), this);
- QAction* banAction7d = new QAction(tr("Ban for") + " " + tr("1 &week"), this);
- QAction* banAction365d = new QAction(tr("Ban for") + " " + tr("1 &year"), this);
-
// create peer table context menu
peersTableContextMenu = new QMenu(this);
- peersTableContextMenu->addAction(disconnectAction);
- peersTableContextMenu->addAction(banAction1h);
- peersTableContextMenu->addAction(banAction24h);
- peersTableContextMenu->addAction(banAction7d);
- peersTableContextMenu->addAction(banAction365d);
-
- connect(banAction1h, &QAction::triggered, [this] { banSelectedNode(60 * 60); });
- connect(banAction24h, &QAction::triggered, [this] { banSelectedNode(60 * 60 * 24); });
- connect(banAction7d, &QAction::triggered, [this] { banSelectedNode(60 * 60 * 24 * 7); });
- connect(banAction365d, &QAction::triggered, [this] { banSelectedNode(60 * 60 * 24 * 365); });
-
- // peer table context menu signals
+ peersTableContextMenu->addAction(tr("Disconnect"), this, &RPCConsole::disconnectSelectedNode);
+ peersTableContextMenu->addAction(ts.ban_for + " " + tr("1 hour"), [this] { banSelectedNode(60 * 60); });
+ peersTableContextMenu->addAction(ts.ban_for + " " + tr("1 day"), [this] { banSelectedNode(60 * 60 * 24); });
+ peersTableContextMenu->addAction(ts.ban_for + " " + tr("1 week"), [this] { banSelectedNode(60 * 60 * 24 * 7); });
+ peersTableContextMenu->addAction(ts.ban_for + " " + tr("1 year"), [this] { banSelectedNode(60 * 60 * 24 * 365); });
connect(ui->peerWidget, &QTableView::customContextMenuRequested, this, &RPCConsole::showPeersTableContextMenu);
- connect(disconnectAction, &QAction::triggered, this, &RPCConsole::disconnectSelectedNode);
// peer table signal handling - update peer details when selecting new node
connect(ui->peerWidget->selectionModel(), &QItemSelectionModel::selectionChanged, this, &RPCConsole::updateDetailWidget);
- // peer table signal handling - update peer details when new nodes are added to the model
- connect(model->getPeerTableModel(), &PeerTableModel::layoutChanged, this, &RPCConsole::peerLayoutChanged);
- // peer table signal handling - cache selected node ids
- connect(model->getPeerTableModel(), &PeerTableModel::layoutAboutToBeChanged, this, &RPCConsole::peerLayoutAboutToChange);
+ connect(model->getPeerTableModel(), &PeerTableModel::layoutChanged, this, &RPCConsole::updateDetailWidget);
// set up ban table
ui->banlistWidget->setModel(model->getBanTableModel());
ui->banlistWidget->verticalHeader()->hide();
- ui->banlistWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
ui->banlistWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->banlistWidget->setSelectionMode(QAbstractItemView::SingleSelection);
ui->banlistWidget->setContextMenuPolicy(Qt::CustomContextMenu);
@@ -672,16 +658,10 @@ void RPCConsole::setClientModel(ClientModel *model, int bestblock_height, int64_
ui->banlistWidget->setColumnWidth(BanTableModel::Bantime, BANTIME_COLUMN_WIDTH);
ui->banlistWidget->horizontalHeader()->setStretchLastSection(true);
- // create ban table context menu action
- QAction* unbanAction = new QAction(tr("&Unban"), this);
-
// create ban table context menu
banTableContextMenu = new QMenu(this);
- banTableContextMenu->addAction(unbanAction);
-
- // ban table context menu signals
+ banTableContextMenu->addAction(tr("Unban"), this, &RPCConsole::unbanSelectedNode);
connect(ui->banlistWidget, &QTableView::customContextMenuRequested, this, &RPCConsole::showBanTableContextMenu);
- connect(unbanAction, &QAction::triggered, this, &RPCConsole::unbanSelectedNode);
// ban table signal handling - clear peer details when clicking a peer in the ban table
connect(ui->banlistWidget, &QTableView::clicked, this, &RPCConsole::clearSelectedNode);
@@ -997,7 +977,7 @@ void RPCConsole::startExecutor()
executor->moveToThread(&thread);
// Replies from executor object must go to this object
- connect(executor, &RPCExecutor::reply, this, static_cast<void (RPCConsole::*)(int, const QString&)>(&RPCConsole::message));
+ connect(executor, &RPCExecutor::reply, this, qOverload<int, const QString&>(&RPCConsole::message));
// Requests from this object must go to executor
connect(this, &RPCConsole::cmdRequest, executor, &RPCExecutor::request);
@@ -1050,72 +1030,11 @@ void RPCConsole::updateTrafficStats(quint64 totalBytesIn, quint64 totalBytesOut)
ui->lblBytesOut->setText(GUIUtil::formatBytes(totalBytesOut));
}
-void RPCConsole::peerLayoutAboutToChange()
-{
- cachedNodeids.clear();
- for (const QModelIndex& peer : GUIUtil::getEntryData(ui->peerWidget, PeerTableModel::NetNodeId)) {
- const auto stats = peer.data(PeerTableModel::StatsRole).value<CNodeCombinedStats*>();
- cachedNodeids.append(stats->nodeStats.nodeid);
- }
-}
-
-void RPCConsole::peerLayoutChanged()
-{
- if (!clientModel || !clientModel->getPeerTableModel())
- return;
-
- bool fUnselect = false;
- bool fReselect = false;
-
- if (cachedNodeids.empty()) // no node selected yet
- return;
-
- // find the currently selected row
- int selectedRow = -1;
- QModelIndexList selectedModelIndex = ui->peerWidget->selectionModel()->selectedIndexes();
- if (!selectedModelIndex.isEmpty()) {
- selectedRow = selectedModelIndex.first().row();
- }
-
- // check if our detail node has a row in the table (it may not necessarily
- // be at selectedRow since its position can change after a layout change)
- int detailNodeRow = clientModel->getPeerTableModel()->getRowByNodeId(cachedNodeids.first());
-
- if (detailNodeRow < 0)
- {
- // detail node disappeared from table (node disconnected)
- fUnselect = true;
- }
- else
- {
- if (detailNodeRow != selectedRow)
- {
- // detail node moved position
- fUnselect = true;
- fReselect = true;
- }
- }
-
- if (fUnselect && selectedRow >= 0) {
- clearSelectedNode();
- }
-
- if (fReselect)
- {
- for(int i = 0; i < cachedNodeids.size(); i++)
- {
- ui->peerWidget->selectRow(clientModel->getPeerTableModel()->getRowByNodeId(cachedNodeids.at(i)));
- }
- }
-
- updateDetailWidget();
-}
-
void RPCConsole::updateDetailWidget()
{
const QList<QModelIndex> selected_peers = GUIUtil::getEntryData(ui->peerWidget, PeerTableModel::NetNodeId);
if (!clientModel || !clientModel->getPeerTableModel() || selected_peers.size() != 1) {
- ui->detailWidget->hide();
+ ui->peersTabRightPanel->hide();
ui->peerHeading->setText(tr("Select a peer to view detailed information."));
return;
}
@@ -1127,21 +1046,29 @@ void RPCConsole::updateDetailWidget()
peerAddrDetails += "<br />" + tr("via %1").arg(QString::fromStdString(stats->nodeStats.addrLocal));
ui->peerHeading->setText(peerAddrDetails);
ui->peerServices->setText(GUIUtil::formatServicesStr(stats->nodeStats.nServices));
- ui->peerLastSend->setText(stats->nodeStats.nLastSend ? GUIUtil::formatDurationStr(GetSystemTimeInSeconds() - stats->nodeStats.nLastSend) : tr("never"));
- ui->peerLastRecv->setText(stats->nodeStats.nLastRecv ? GUIUtil::formatDurationStr(GetSystemTimeInSeconds() - stats->nodeStats.nLastRecv) : tr("never"));
+ ui->peerRelayTxes->setText(stats->nodeStats.fRelayTxes ? ts.yes : ts.no);
+ QString bip152_hb_settings;
+ if (stats->nodeStats.m_bip152_highbandwidth_to) bip152_hb_settings = ts.to;
+ if (stats->nodeStats.m_bip152_highbandwidth_from) bip152_hb_settings += (bip152_hb_settings.isEmpty() ? ts.from : QLatin1Char('/') + ts.from);
+ if (bip152_hb_settings.isEmpty()) bip152_hb_settings = ts.no;
+ ui->peerHighBandwidth->setText(bip152_hb_settings);
+ const int64_t time_now{GetSystemTimeInSeconds()};
+ ui->peerConnTime->setText(GUIUtil::formatDurationStr(time_now - stats->nodeStats.nTimeConnected));
+ ui->peerLastBlock->setText(TimeDurationField(time_now, stats->nodeStats.nLastBlockTime));
+ ui->peerLastTx->setText(TimeDurationField(time_now, stats->nodeStats.nLastTXTime));
+ ui->peerLastSend->setText(TimeDurationField(time_now, stats->nodeStats.nLastSend));
+ ui->peerLastRecv->setText(TimeDurationField(time_now, stats->nodeStats.nLastRecv));
ui->peerBytesSent->setText(GUIUtil::formatBytes(stats->nodeStats.nSendBytes));
ui->peerBytesRecv->setText(GUIUtil::formatBytes(stats->nodeStats.nRecvBytes));
- ui->peerConnTime->setText(GUIUtil::formatDurationStr(GetSystemTimeInSeconds() - stats->nodeStats.nTimeConnected));
- ui->peerPingTime->setText(GUIUtil::formatPingTime(stats->nodeStats.m_ping_usec));
- ui->peerPingWait->setText(GUIUtil::formatPingTime(stats->nodeStats.m_ping_wait_usec));
- ui->peerMinPing->setText(GUIUtil::formatPingTime(stats->nodeStats.m_min_ping_usec));
+ ui->peerPingTime->setText(GUIUtil::formatPingTime(stats->nodeStats.m_last_ping_time));
+ ui->peerMinPing->setText(GUIUtil::formatPingTime(stats->nodeStats.m_min_ping_time));
ui->timeoffset->setText(GUIUtil::formatTimeOffset(stats->nodeStats.nTimeOffset));
ui->peerVersion->setText(QString::number(stats->nodeStats.nVersion));
ui->peerSubversion->setText(QString::fromStdString(stats->nodeStats.cleanSubVer));
- ui->peerConnectionType->setText(GUIUtil::ConnectionTypeToQString(stats->nodeStats.m_conn_type, stats->nodeStats.fRelayTxes));
+ ui->peerConnectionType->setText(GUIUtil::ConnectionTypeToQString(stats->nodeStats.m_conn_type, /* prepend_direction */ true));
ui->peerNetwork->setText(GUIUtil::NetworkToQString(stats->nodeStats.m_network));
if (stats->nodeStats.m_permissionFlags == PF_NONE) {
- ui->peerPermissions->setText(tr("N/A"));
+ ui->peerPermissions->setText(ts.na);
} else {
QStringList permissions;
for (const auto& permission : NetPermissions::ToStrings(stats->nodeStats.m_permissionFlags)) {
@@ -1149,27 +1076,28 @@ void RPCConsole::updateDetailWidget()
}
ui->peerPermissions->setText(permissions.join(" & "));
}
- ui->peerMappedAS->setText(stats->nodeStats.m_mapped_as != 0 ? QString::number(stats->nodeStats.m_mapped_as) : tr("N/A"));
+ ui->peerMappedAS->setText(stats->nodeStats.m_mapped_as != 0 ? QString::number(stats->nodeStats.m_mapped_as) : ts.na);
// This check fails for example if the lock was busy and
// nodeStateStats couldn't be fetched.
if (stats->fNodeStateStatsAvailable) {
// Sync height is init to -1
- if (stats->nodeStateStats.nSyncHeight > -1)
+ if (stats->nodeStateStats.nSyncHeight > -1) {
ui->peerSyncHeight->setText(QString("%1").arg(stats->nodeStateStats.nSyncHeight));
- else
- ui->peerSyncHeight->setText(tr("Unknown"));
-
+ } else {
+ ui->peerSyncHeight->setText(ts.unknown);
+ }
// Common height is init to -1
- if (stats->nodeStateStats.nCommonHeight > -1)
+ if (stats->nodeStateStats.nCommonHeight > -1) {
ui->peerCommonHeight->setText(QString("%1").arg(stats->nodeStateStats.nCommonHeight));
- else
- ui->peerCommonHeight->setText(tr("Unknown"));
-
+ } else {
+ ui->peerCommonHeight->setText(ts.unknown);
+ }
ui->peerHeight->setText(QString::number(stats->nodeStateStats.m_starting_height));
+ ui->peerPingWait->setText(GUIUtil::formatPingTime(stats->nodeStateStats.m_ping_wait));
}
- ui->detailWidget->show();
+ ui->peersTabRightPanel->show();
}
void RPCConsole::resizeEvent(QResizeEvent *event)
diff --git a/src/qt/rpcconsole.h b/src/qt/rpcconsole.h
index 5f308dc36d..5182d60a0d 100644
--- a/src/qt/rpcconsole.h
+++ b/src/qt/rpcconsole.h
@@ -118,10 +118,6 @@ public Q_SLOTS:
void browseHistory(int offset);
/** Scroll console view to end */
void scrollToEnd();
- /** Handle selection caching before update */
- void peerLayoutAboutToChange();
- /** Handle updated peer information */
- void peerLayoutChanged();
/** Disconnect a selected node on the Peers tab */
void disconnectSelectedNode();
/** Ban a selected node on the Peers tab */
@@ -136,6 +132,11 @@ Q_SIGNALS:
void cmdRequest(const QString &command, const WalletModel* wallet_model);
private:
+ struct TranslatedStrings {
+ const QString yes{tr("Yes")}, no{tr("No")}, to{tr("To")}, from{tr("From")},
+ ban_for{tr("Ban for")}, na{tr("N/A")}, unknown{tr("Unknown")};
+ } const ts;
+
void startExecutor();
void setTrafficGraphRange(int mins);
@@ -168,6 +169,11 @@ private:
/** Update UI with latest network info from model. */
void updateNetworkState();
+ /** Helper for the output of a time duration field. Inputs are UNIX epoch times. */
+ QString TimeDurationField(uint64_t time_now, uint64_t time_at_event) const {
+ return time_at_event ? GUIUtil::formatDurationStr(time_now - time_at_event) : tr("Never");
+ }
+
private Q_SLOTS:
void updateAlerts(const QString& warnings);
};
diff --git a/src/qt/sendcoinsdialog.cpp b/src/qt/sendcoinsdialog.cpp
index 9eedd8cf75..1772f7cb56 100644
--- a/src/qt/sendcoinsdialog.cpp
+++ b/src/qt/sendcoinsdialog.cpp
@@ -55,7 +55,7 @@ int getIndexForConfTarget(int target) {
}
SendCoinsDialog::SendCoinsDialog(const PlatformStyle *_platformStyle, QWidget *parent) :
- QDialog(parent),
+ QDialog(parent, GUIUtil::dialog_flags),
ui(new Ui::SendCoinsDialog),
clientModel(nullptr),
model(nullptr),
@@ -129,6 +129,8 @@ SendCoinsDialog::SendCoinsDialog(const PlatformStyle *_platformStyle, QWidget *p
ui->customFee->SetAllowEmpty(false);
ui->customFee->setValue(settings.value("nTransactionFee").toLongLong());
minimizeFeeSection(settings.value("fFeeSectionMinimized").toBool());
+
+ GUIUtil::ExceptionSafeConnect(ui->sendButton, &QPushButton::clicked, this, &SendCoinsDialog::sendButtonClicked);
}
void SendCoinsDialog::setClientModel(ClientModel *_clientModel)
@@ -171,15 +173,15 @@ void SendCoinsDialog::setModel(WalletModel *_model)
for (const int n : confTargets) {
ui->confTargetSelector->addItem(tr("%1 (%2 blocks)").arg(GUIUtil::formatNiceTimeOffset(n*Params().GetConsensus().nPowTargetSpacing)).arg(n));
}
- connect(ui->confTargetSelector, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &SendCoinsDialog::updateSmartFeeLabel);
- connect(ui->confTargetSelector, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &SendCoinsDialog::coinControlUpdateLabels);
+ connect(ui->confTargetSelector, qOverload<int>(&QComboBox::currentIndexChanged), this, &SendCoinsDialog::updateSmartFeeLabel);
+ connect(ui->confTargetSelector, qOverload<int>(&QComboBox::currentIndexChanged), this, &SendCoinsDialog::coinControlUpdateLabels);
#if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0))
connect(ui->groupFee, &QButtonGroup::idClicked, this, &SendCoinsDialog::updateFeeSectionControls);
connect(ui->groupFee, &QButtonGroup::idClicked, this, &SendCoinsDialog::coinControlUpdateLabels);
#else
- connect(ui->groupFee, static_cast<void (QButtonGroup::*)(int)>(&QButtonGroup::buttonClicked), this, &SendCoinsDialog::updateFeeSectionControls);
- connect(ui->groupFee, static_cast<void (QButtonGroup::*)(int)>(&QButtonGroup::buttonClicked), this, &SendCoinsDialog::coinControlUpdateLabels);
+ connect(ui->groupFee, qOverload<int>(&QButtonGroup::buttonClicked), this, &SendCoinsDialog::updateFeeSectionControls);
+ connect(ui->groupFee, qOverload<int>(&QButtonGroup::buttonClicked), this, &SendCoinsDialog::coinControlUpdateLabels);
#endif
connect(ui->customFee, &BitcoinAmountField::valueChanged, this, &SendCoinsDialog::coinControlUpdateLabels);
@@ -266,10 +268,10 @@ bool SendCoinsDialog::PrepareSendText(QString& question_string, QString& informa
}
// prepare transaction for getting txFee earlier
- m_current_transaction = MakeUnique<WalletModelTransaction>(recipients);
+ m_current_transaction = std::make_unique<WalletModelTransaction>(recipients);
WalletModel::SendCoinsReturn prepareStatus;
- updateCoinControlState(*m_coin_control);
+ updateCoinControlState();
prepareStatus = model->prepareTransaction(*m_current_transaction, *m_coin_control);
@@ -366,7 +368,7 @@ bool SendCoinsDialog::PrepareSendText(QString& question_string, QString& informa
if (formatted.size() > 1) {
question_string = question_string.arg("");
- informative_text = tr("To review recipient list click \"Show Details...\"");
+ informative_text = tr("To review recipient list click \"Show Details…\"");
detailed_text = formatted.join("\n\n");
} else {
question_string = question_string.arg("<br /><br />" + formatted.at(0));
@@ -375,7 +377,7 @@ bool SendCoinsDialog::PrepareSendText(QString& question_string, QString& informa
return true;
}
-void SendCoinsDialog::on_sendButton_clicked()
+void SendCoinsDialog::sendButtonClicked([[maybe_unused]] bool checked)
{
if(!model || !model->getOptionsModel())
return;
@@ -430,11 +432,11 @@ void SendCoinsDialog::on_sendButton_clicked()
fileNameSuggestion.append(".psbt");
QString filename = GUIUtil::getSaveFileName(this,
tr("Save Transaction Data"), fileNameSuggestion,
- tr("Partially Signed Transaction (Binary) (*.psbt)"), &selectedFilter);
+ tr("Partially Signed Transaction (Binary)", "Name of binary PSBT file format") + QLatin1String(" (*.psbt)"), &selectedFilter);
if (filename.isEmpty()) {
return;
}
- std::ofstream out(filename.toLocal8Bit().data());
+ std::ofstream out(filename.toLocal8Bit().data(), std::ofstream::out | std::ofstream::binary);
out << ssTx.str();
out.close();
Q_EMIT message(tr("PSBT saved"), "PSBT saved to disk", CClientUIInterface::MSG_INFORMATION);
@@ -738,19 +740,19 @@ void SendCoinsDialog::updateFeeMinimizedLabel()
}
}
-void SendCoinsDialog::updateCoinControlState(CCoinControl& ctrl)
+void SendCoinsDialog::updateCoinControlState()
{
if (ui->radioCustomFee->isChecked()) {
- ctrl.m_feerate = CFeeRate(ui->customFee->value());
+ m_coin_control->m_feerate = CFeeRate(ui->customFee->value());
} else {
- ctrl.m_feerate.reset();
+ m_coin_control->m_feerate.reset();
}
// Avoid using global defaults when sending money from the GUI
// Either custom fee will be used or if not selected, the confirmation target from dropdown box
- ctrl.m_confirm_target = getConfTargetForIndex(ui->confTargetSelector->currentIndex());
- ctrl.m_signal_bip125_rbf = ui->optInRBF->isChecked();
+ m_coin_control->m_confirm_target = getConfTargetForIndex(ui->confTargetSelector->currentIndex());
+ m_coin_control->m_signal_bip125_rbf = ui->optInRBF->isChecked();
// Include watch-only for wallets without private key
- ctrl.fAllowWatchOnly = model->wallet().privateKeysDisabled();
+ m_coin_control->fAllowWatchOnly = model->wallet().privateKeysDisabled();
}
void SendCoinsDialog::updateNumberOfBlocks(int count, const QDateTime& blockDate, double nVerificationProgress, bool headers, SynchronizationState sync_state) {
@@ -763,7 +765,7 @@ void SendCoinsDialog::updateSmartFeeLabel()
{
if(!model || !model->getOptionsModel())
return;
- updateCoinControlState(*m_coin_control);
+ updateCoinControlState();
m_coin_control->m_feerate.reset(); // Explicitly use only fee estimation rate for smart fee labels
int returned_target;
FeeReason reason;
@@ -837,8 +839,9 @@ void SendCoinsDialog::coinControlFeatureChanged(bool checked)
{
ui->frameCoinControl->setVisible(checked);
- if (!checked && model) // coin control features disabled
- m_coin_control->SetNull();
+ if (!checked && model) { // coin control features disabled
+ m_coin_control = std::make_unique<CCoinControl>();
+ }
coinControlUpdateLabels();
}
@@ -926,7 +929,7 @@ void SendCoinsDialog::coinControlUpdateLabels()
if (!model || !model->getOptionsModel())
return;
- updateCoinControlState(*m_coin_control);
+ updateCoinControlState();
// set pay amounts
CoinControlDialog::payAmounts.clear();
diff --git a/src/qt/sendcoinsdialog.h b/src/qt/sendcoinsdialog.h
index 4fc2f57cd6..33736f8095 100644
--- a/src/qt/sendcoinsdialog.h
+++ b/src/qt/sendcoinsdialog.h
@@ -76,11 +76,10 @@ private:
// Format confirmation message
bool PrepareSendText(QString& question_string, QString& informative_text, QString& detailed_text);
void updateFeeMinimizedLabel();
- // Update the passed in CCoinControl with state from the GUI
- void updateCoinControlState(CCoinControl& ctrl);
+ void updateCoinControlState();
private Q_SLOTS:
- void on_sendButton_clicked();
+ void sendButtonClicked(bool checked);
void on_buttonChooseFee_clicked();
void on_buttonMinimizeFee_clicked();
void removeEntry(SendCoinsEntry* entry);
diff --git a/src/qt/signverifymessagedialog.cpp b/src/qt/signverifymessagedialog.cpp
index 6c110f0688..2e7df60574 100644
--- a/src/qt/signverifymessagedialog.cpp
+++ b/src/qt/signverifymessagedialog.cpp
@@ -19,7 +19,7 @@
#include <QClipboard>
SignVerifyMessageDialog::SignVerifyMessageDialog(const PlatformStyle *_platformStyle, QWidget *parent) :
- QDialog(parent),
+ QDialog(parent, GUIUtil::dialog_flags),
ui(new Ui::SignVerifyMessageDialog),
model(nullptr),
platformStyle(_platformStyle)
diff --git a/src/qt/test/addressbooktests.cpp b/src/qt/test/addressbooktests.cpp
index 35fcb2b0ca..a026069232 100644
--- a/src/qt/test/addressbooktests.cpp
+++ b/src/qt/test/addressbooktests.cpp
@@ -112,7 +112,7 @@ void TestAddAddressesToSendBook(interfaces::Node& node)
ClientModel clientModel(node, &optionsModel);
AddWallet(wallet);
WalletModel walletModel(interfaces::MakeWallet(wallet), clientModel, platformStyle.get());
- RemoveWallet(wallet, nullopt);
+ RemoveWallet(wallet, std::nullopt);
EditAddressDialog editAddressDialog(EditAddressDialog::NewSendingAddress);
editAddressDialog.setModel(walletModel.getAddressTableModel());
diff --git a/src/qt/test/compattests.cpp b/src/qt/test/compattests.cpp
deleted file mode 100644
index c76dee5091..0000000000
--- a/src/qt/test/compattests.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (c) 2016-2019 The Bitcoin Core developers
-// Distributed under the MIT software license, see the accompanying
-// file COPYING or http://www.opensource.org/licenses/mit-license.php.
-
-#if defined(HAVE_CONFIG_H)
-#include <config/bitcoin-config.h>
-#endif
-
-#include <qt/test/compattests.h>
-
-#include <compat/byteswap.h>
-
-void CompatTests::bswapTests()
-{
- // Sibling in bitcoin/src/test/bswap_tests.cpp
- uint16_t u1 = 0x1234;
- uint32_t u2 = 0x56789abc;
- uint64_t u3 = 0xdef0123456789abc;
- uint16_t e1 = 0x3412;
- uint32_t e2 = 0xbc9a7856;
- uint64_t e3 = 0xbc9a78563412f0de;
- QVERIFY(bswap_16(u1) == e1);
- QVERIFY(bswap_32(u2) == e2);
- QVERIFY(bswap_64(u3) == e3);
-}
diff --git a/src/qt/test/compattests.h b/src/qt/test/compattests.h
deleted file mode 100644
index 1af97696b2..0000000000
--- a/src/qt/test/compattests.h
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) 2009-2016 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_TEST_COMPATTESTS_H
-#define BITCOIN_QT_TEST_COMPATTESTS_H
-
-#include <QObject>
-#include <QTest>
-
-class CompatTests : public QObject
-{
- Q_OBJECT
-
-private Q_SLOTS:
- void bswapTests();
-};
-
-#endif // BITCOIN_QT_TEST_COMPATTESTS_H
diff --git a/src/qt/test/rpcnestedtests.cpp b/src/qt/test/rpcnestedtests.cpp
index 24d7735447..df3b85ea71 100644
--- a/src/qt/test/rpcnestedtests.cpp
+++ b/src/qt/test/rpcnestedtests.cpp
@@ -11,8 +11,10 @@
#include <univalue.h>
#include <util/system.h>
-#include <QDir>
-#include <QtGlobal>
+#include <QTest>
+
+#include <string>
+#include <stdexcept>
static RPCHelpMan rpcNestedTest_rpc()
{
@@ -24,23 +26,25 @@ static RPCHelpMan rpcNestedTest_rpc()
{"arg2", RPCArg::Type::STR, RPCArg::Optional::OMITTED, ""},
{"arg3", RPCArg::Type::STR, RPCArg::Optional::OMITTED, ""},
},
- {},
+ RPCResult{RPCResult::Type::ANY, "", ""},
RPCExamples{""},
- [](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue {
+ [&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue {
return request.params.write(0, 0);
},
};
}
static const CRPCCommand vRPCCommands[] = {
- {"test", "rpcNestedTest", &rpcNestedTest_rpc, {"arg1", "arg2", "arg3"}},
+ {"rpcNestedTest", &rpcNestedTest_rpc},
};
void RPCNestedTests::rpcNestedTests()
{
// do some test setup
// could be moved to a more generic place when we add more tests on QT level
- tableRPC.appendCommand("rpcNestedTest", &vRPCCommands[0]);
+ for (const auto& c : vRPCCommands) {
+ tableRPC.appendCommand(c.name, &c);
+ }
TestingSetup test;
m_node.setContext(&test.m_node);
@@ -68,13 +72,13 @@ void RPCNestedTests::rpcNestedTests()
RPCConsole::RPCExecuteCommandLine(m_node, result, "getblockchaininfo "); //whitespace at the end will be tolerated
QVERIFY(result.substr(0,1) == "{");
- (RPCConsole::RPCExecuteCommandLine(m_node, result, "getblockchaininfo()[\"chain\"]")); //Quote path identifier are allowed, but look after a child containing the quotes in the key
+ RPCConsole::RPCExecuteCommandLine(m_node, result, "getblockchaininfo()[\"chain\"]"); //Quote path identifier are allowed, but look after a child containing the quotes in the key
QVERIFY(result == "null");
- (RPCConsole::RPCExecuteCommandLine(m_node, result, "createrawtransaction [] {} 0")); //parameter not in brackets are allowed
- (RPCConsole::RPCExecuteCommandLine(m_node, result2, "createrawtransaction([],{},0)")); //parameter in brackets are allowed
+ RPCConsole::RPCExecuteCommandLine(m_node, result, "createrawtransaction [] {} 0"); //parameter not in brackets are allowed
+ RPCConsole::RPCExecuteCommandLine(m_node, result2, "createrawtransaction([],{},0)"); //parameter in brackets are allowed
QVERIFY(result == result2);
- (RPCConsole::RPCExecuteCommandLine(m_node, result2, "createrawtransaction( [], {} , 0 )")); //whitespace between parameters is allowed
+ RPCConsole::RPCExecuteCommandLine(m_node, result2, "createrawtransaction( [], {} , 0 )"); //whitespace between parameters is allowed
QVERIFY(result == result2);
RPCConsole::RPCExecuteCommandLine(m_node, result, "getblock(getbestblockhash())[tx][0]", &filtered);
@@ -123,11 +127,10 @@ void RPCNestedTests::rpcNestedTests()
RPCConsole::RPCExecuteCommandLine(m_node, result, "rpcNestedTest( abc , cba )");
QVERIFY(result == "[\"abc\",\"cba\"]");
- // do the QVERIFY_EXCEPTION_THROWN checks only with Qt5.3 and higher (QVERIFY_EXCEPTION_THROWN was introduced in Qt5.3)
QVERIFY_EXCEPTION_THROWN(RPCConsole::RPCExecuteCommandLine(m_node, result, "getblockchaininfo() .\n"), std::runtime_error); //invalid syntax
QVERIFY_EXCEPTION_THROWN(RPCConsole::RPCExecuteCommandLine(m_node, result, "getblockchaininfo() getblockchaininfo()"), std::runtime_error); //invalid syntax
- (RPCConsole::RPCExecuteCommandLine(m_node, result, "getblockchaininfo(")); //tolerate non closing brackets if we have no arguments
- (RPCConsole::RPCExecuteCommandLine(m_node, result, "getblockchaininfo()()()")); //tolerate non command brackets
+ RPCConsole::RPCExecuteCommandLine(m_node, result, "getblockchaininfo("); //tolerate non closing brackets if we have no arguments
+ RPCConsole::RPCExecuteCommandLine(m_node, result, "getblockchaininfo()()()"); //tolerate non command brackets
QVERIFY_EXCEPTION_THROWN(RPCConsole::RPCExecuteCommandLine(m_node, result, "getblockchaininfo(True)"), UniValue); //invalid argument
QVERIFY_EXCEPTION_THROWN(RPCConsole::RPCExecuteCommandLine(m_node, result, "a(getblockchaininfo(True))"), UniValue); //method not found
QVERIFY_EXCEPTION_THROWN(RPCConsole::RPCExecuteCommandLine(m_node, result, "rpcNestedTest abc,,abc"), std::runtime_error); //don't tolerate empty arguments when using ,
diff --git a/src/qt/test/test_main.cpp b/src/qt/test/test_main.cpp
index 9ef5fe8fc7..eb86f027ef 100644
--- a/src/qt/test/test_main.cpp
+++ b/src/qt/test/test_main.cpp
@@ -11,7 +11,6 @@
#include <qt/test/apptests.h>
#include <qt/test/rpcnestedtests.h>
#include <qt/test/uritests.h>
-#include <qt/test/compattests.h>
#include <test/util/setup_common.h>
#ifdef ENABLE_WALLET
@@ -54,6 +53,13 @@ int main(int argc, char* argv[])
NodeContext node_context;
std::unique_ptr<interfaces::Node> node = interfaces::MakeNode(&node_context);
+ gArgs.ForceSetArg("-listen", "0");
+ gArgs.ForceSetArg("-listenonion", "0");
+ gArgs.ForceSetArg("-discover", "0");
+ gArgs.ForceSetArg("-dnsseed", "0");
+ gArgs.ForceSetArg("-fixedseeds", "0");
+ gArgs.ForceSetArg("-upnp", "0");
+ gArgs.ForceSetArg("-natpmp", "0");
bool fInvalid = false;
@@ -85,10 +91,6 @@ int main(int argc, char* argv[])
if (QTest::qExec(&test3) != 0) {
fInvalid = true;
}
- CompatTests test4;
- if (QTest::qExec(&test4) != 0) {
- fInvalid = true;
- }
#ifdef ENABLE_WALLET
WalletTests test5(app.node());
if (QTest::qExec(&test5) != 0) {
diff --git a/src/qt/test/wallettests.cpp b/src/qt/test/wallettests.cpp
index d6d2d0e3df..03460cd6eb 100644
--- a/src/qt/test/wallettests.cpp
+++ b/src/qt/test/wallettests.cpp
@@ -73,7 +73,7 @@ uint256 SendCoins(CWallet& wallet, SendCoinsDialog& sendCoinsDialog, const CTxDe
if (status == CT_NEW) txid = hash;
}));
ConfirmSend();
- bool invoked = QMetaObject::invokeMethod(&sendCoinsDialog, "on_sendButton_clicked");
+ bool invoked = QMetaObject::invokeMethod(&sendCoinsDialog, "sendButtonClicked", Q_ARG(bool, false));
assert(invoked);
return txid;
}
@@ -167,7 +167,7 @@ void TestGUI(interfaces::Node& node)
ClientModel clientModel(node, &optionsModel);
AddWallet(wallet);
WalletModel walletModel(interfaces::MakeWallet(wallet), clientModel, platformStyle.get());
- RemoveWallet(wallet, nullopt);
+ RemoveWallet(wallet, std::nullopt);
sendCoinsDialog.setModel(&walletModel);
transactionView.setModel(&walletModel);
diff --git a/src/qt/trafficgraphwidget.cpp b/src/qt/trafficgraphwidget.cpp
index dabdf9d887..7e12410c80 100644
--- a/src/qt/trafficgraphwidget.cpp
+++ b/src/qt/trafficgraphwidget.cpp
@@ -79,7 +79,7 @@ void TrafficGraphWidget::paintEvent(QPaintEvent *)
int base = floor(log10(fMax));
float val = pow(10.0f, base);
- const QString units = tr("KB/s");
+ const QString units = tr("kB/s");
const float yMarginText = 2.0;
// draw lines
@@ -128,10 +128,10 @@ void TrafficGraphWidget::updateRates()
quint64 bytesIn = clientModel->node().getTotalBytesRecv(),
bytesOut = clientModel->node().getTotalBytesSent();
- float inRate = (bytesIn - nLastBytesIn) / 1024.0f * 1000 / timer->interval();
- float outRate = (bytesOut - nLastBytesOut) / 1024.0f * 1000 / timer->interval();
- vSamplesIn.push_front(inRate);
- vSamplesOut.push_front(outRate);
+ float in_rate_kilobytes_per_sec = static_cast<float>(bytesIn - nLastBytesIn) / timer->interval();
+ float out_rate_kilobytes_per_sec = static_cast<float>(bytesOut - nLastBytesOut) / timer->interval();
+ vSamplesIn.push_front(in_rate_kilobytes_per_sec);
+ vSamplesOut.push_front(out_rate_kilobytes_per_sec);
nLastBytesIn = bytesIn;
nLastBytesOut = bytesOut;
diff --git a/src/qt/transactiondescdialog.cpp b/src/qt/transactiondescdialog.cpp
index b547bf7645..6f31d8463f 100644
--- a/src/qt/transactiondescdialog.cpp
+++ b/src/qt/transactiondescdialog.cpp
@@ -11,7 +11,7 @@
#include <QModelIndex>
TransactionDescDialog::TransactionDescDialog(const QModelIndex &idx, QWidget *parent) :
- QDialog(parent),
+ QDialog(parent, GUIUtil::dialog_flags),
ui(new Ui::TransactionDescDialog)
{
ui->setupUi(this);
diff --git a/src/qt/transactiontablemodel.cpp b/src/qt/transactiontablemodel.cpp
index e6d483364c..a7556eed04 100644
--- a/src/qt/transactiontablemodel.cpp
+++ b/src/qt/transactiontablemodel.cpp
@@ -526,27 +526,30 @@ QVariant TransactionTableModel::data(const QModelIndex &index, int role) const
return QVariant();
TransactionRecord *rec = static_cast<TransactionRecord*>(index.internalPointer());
- switch(role)
- {
+ const auto column = static_cast<ColumnIndex>(index.column());
+ switch (role) {
case RawDecorationRole:
- switch(index.column())
- {
+ switch (column) {
case Status:
return txStatusDecoration(rec);
case Watchonly:
return txWatchonlyDecoration(rec);
+ case Date: return {};
+ case Type: return {};
case ToAddress:
return txAddressDecoration(rec);
- }
- break;
+ case Amount: return {};
+ } // no default case, so the compiler can warn about missing cases
+ assert(false);
case Qt::DecorationRole:
{
QIcon icon = qvariant_cast<QIcon>(index.data(RawDecorationRole));
return platformStyle->TextColorIcon(icon);
}
case Qt::DisplayRole:
- switch(index.column())
- {
+ switch (column) {
+ case Status: return {};
+ case Watchonly: return {};
case Date:
return formatTxDate(rec);
case Type:
@@ -555,12 +558,11 @@ QVariant TransactionTableModel::data(const QModelIndex &index, int role) const
return formatTxToAddress(rec, false);
case Amount:
return formatTxAmount(rec, true, BitcoinUnits::SeparatorStyle::ALWAYS);
- }
- break;
+ } // no default case, so the compiler can warn about missing cases
+ assert(false);
case Qt::EditRole:
// Edit role is used for sorting, so return the unformatted values
- switch(index.column())
- {
+ switch (column) {
case Status:
return QString::fromStdString(rec->status.sortKey);
case Date:
@@ -573,8 +575,8 @@ QVariant TransactionTableModel::data(const QModelIndex &index, int role) const
return formatTxToAddress(rec, true);
case Amount:
return qint64(rec->credit + rec->debit);
- }
- break;
+ } // no default case, so the compiler can warn about missing cases
+ assert(false);
case Qt::ToolTipRole:
return formatTooltip(rec);
case Qt::TextAlignmentRole:
diff --git a/src/qt/transactionview.cpp b/src/qt/transactionview.cpp
index 0cf6480b82..7a975dadae 100644
--- a/src/qt/transactionview.cpp
+++ b/src/qt/transactionview.cpp
@@ -31,6 +31,7 @@
#include <QMenu>
#include <QPoint>
#include <QScrollBar>
+#include <QSettings>
#include <QTableView>
#include <QTimer>
#include <QUrl>
@@ -72,7 +73,7 @@ TransactionView::TransactionView(const PlatformStyle *platformStyle, QWidget *pa
dateWidget->addItem(tr("This month"), ThisMonth);
dateWidget->addItem(tr("Last month"), LastMonth);
dateWidget->addItem(tr("This year"), ThisYear);
- dateWidget->addItem(tr("Range..."), Range);
+ dateWidget->addItem(tr("Range…"), Range);
hlayout->addWidget(dateWidget);
typeWidget = new QComboBox(this);
@@ -126,76 +127,67 @@ TransactionView::TransactionView(const PlatformStyle *platformStyle, QWidget *pa
vlayout->setContentsMargins(0,0,0,0);
vlayout->setSpacing(0);
- QTableView *view = new QTableView(this);
+ transactionView = new QTableView(this);
+ transactionView->setObjectName("transactionView");
vlayout->addLayout(hlayout);
vlayout->addWidget(createDateRangeWidget());
- vlayout->addWidget(view);
+ vlayout->addWidget(transactionView);
vlayout->setSpacing(0);
- int width = view->verticalScrollBar()->sizeHint().width();
+ int width = transactionView->verticalScrollBar()->sizeHint().width();
// Cover scroll bar width with spacing
if (platformStyle->getUseExtraSpacing()) {
hlayout->addSpacing(width+2);
} else {
hlayout->addSpacing(width);
}
- // Always show scroll bar
- view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
- view->setTabKeyNavigation(false);
- view->setContextMenuPolicy(Qt::CustomContextMenu);
-
- view->installEventFilter(this);
-
- transactionView = view;
- transactionView->setObjectName("transactionView");
-
- // Actions
- abandonAction = new QAction(tr("Abandon transaction"), this);
- bumpFeeAction = new QAction(tr("Increase transaction fee"), this);
- bumpFeeAction->setObjectName("bumpFeeAction");
- copyAddressAction = new QAction(tr("Copy address"), this);
- copyLabelAction = new QAction(tr("Copy label"), this);
- QAction *copyAmountAction = new QAction(tr("Copy amount"), this);
- QAction *copyTxIDAction = new QAction(tr("Copy transaction ID"), this);
- QAction *copyTxHexAction = new QAction(tr("Copy raw transaction"), this);
- QAction *copyTxPlainText = new QAction(tr("Copy full transaction details"), this);
- QAction *editLabelAction = new QAction(tr("Edit label"), this);
- QAction *showDetailsAction = new QAction(tr("Show transaction details"), this);
+ transactionView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
+ transactionView->setTabKeyNavigation(false);
+ transactionView->setContextMenuPolicy(Qt::CustomContextMenu);
+ transactionView->installEventFilter(this);
+ transactionView->setAlternatingRowColors(true);
+ transactionView->setSelectionBehavior(QAbstractItemView::SelectRows);
+ transactionView->setSelectionMode(QAbstractItemView::ExtendedSelection);
+ transactionView->setSortingEnabled(true);
+ transactionView->verticalHeader()->hide();
+
+ QSettings settings;
+ if (!transactionView->horizontalHeader()->restoreState(settings.value("TransactionViewHeaderState").toByteArray())) {
+ transactionView->setColumnWidth(TransactionTableModel::Status, STATUS_COLUMN_WIDTH);
+ transactionView->setColumnWidth(TransactionTableModel::Watchonly, WATCHONLY_COLUMN_WIDTH);
+ transactionView->setColumnWidth(TransactionTableModel::Date, DATE_COLUMN_WIDTH);
+ transactionView->setColumnWidth(TransactionTableModel::Type, TYPE_COLUMN_WIDTH);
+ transactionView->setColumnWidth(TransactionTableModel::Amount, AMOUNT_MINIMUM_COLUMN_WIDTH);
+ transactionView->horizontalHeader()->setMinimumSectionSize(MINIMUM_COLUMN_WIDTH);
+ transactionView->horizontalHeader()->setStretchLastSection(true);
+ }
contextMenu = new QMenu(this);
contextMenu->setObjectName("contextMenu");
- contextMenu->addAction(copyAddressAction);
- contextMenu->addAction(copyLabelAction);
- contextMenu->addAction(copyAmountAction);
- contextMenu->addAction(copyTxIDAction);
- contextMenu->addAction(copyTxHexAction);
- contextMenu->addAction(copyTxPlainText);
- contextMenu->addAction(showDetailsAction);
+ copyAddressAction = contextMenu->addAction(tr("Copy address"), this, &TransactionView::copyAddress);
+ copyLabelAction = contextMenu->addAction(tr("Copy label"), this, &TransactionView::copyLabel);
+ contextMenu->addAction(tr("Copy amount"), this, &TransactionView::copyAmount);
+ contextMenu->addAction(tr("Copy transaction ID"), this, &TransactionView::copyTxID);
+ contextMenu->addAction(tr("Copy raw transaction"), this, &TransactionView::copyTxHex);
+ contextMenu->addAction(tr("Copy full transaction details"), this, &TransactionView::copyTxPlainText);
+ contextMenu->addAction(tr("Show transaction details"), this, &TransactionView::showDetails);
contextMenu->addSeparator();
- contextMenu->addAction(bumpFeeAction);
- contextMenu->addAction(abandonAction);
- contextMenu->addAction(editLabelAction);
-
- connect(dateWidget, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, &TransactionView::chooseDate);
- connect(typeWidget, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, &TransactionView::chooseType);
- connect(watchOnlyWidget, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, &TransactionView::chooseWatchonly);
- connect(amountWidget, &QLineEdit::textChanged, amount_typing_delay, static_cast<void (QTimer::*)()>(&QTimer::start));
+ bumpFeeAction = contextMenu->addAction(tr("Increase transaction fee"));
+ GUIUtil::ExceptionSafeConnect(bumpFeeAction, &QAction::triggered, this, &TransactionView::bumpFee);
+ bumpFeeAction->setObjectName("bumpFeeAction");
+ abandonAction = contextMenu->addAction(tr("Abandon transaction"), this, &TransactionView::abandonTx);
+ contextMenu->addAction(tr("Edit address label"), this, &TransactionView::editLabel);
+
+ connect(dateWidget, qOverload<int>(&QComboBox::activated), this, &TransactionView::chooseDate);
+ connect(typeWidget, qOverload<int>(&QComboBox::activated), this, &TransactionView::chooseType);
+ connect(watchOnlyWidget, qOverload<int>(&QComboBox::activated), this, &TransactionView::chooseWatchonly);
+ connect(amountWidget, &QLineEdit::textChanged, amount_typing_delay, qOverload<>(&QTimer::start));
connect(amount_typing_delay, &QTimer::timeout, this, &TransactionView::changedAmount);
- connect(search_widget, &QLineEdit::textChanged, prefix_typing_delay, static_cast<void (QTimer::*)()>(&QTimer::start));
+ connect(search_widget, &QLineEdit::textChanged, prefix_typing_delay, qOverload<>(&QTimer::start));
connect(prefix_typing_delay, &QTimer::timeout, this, &TransactionView::changedSearch);
- connect(view, &QTableView::doubleClicked, this, &TransactionView::doubleClicked);
- connect(view, &QTableView::customContextMenuRequested, this, &TransactionView::contextualMenu);
-
- connect(bumpFeeAction, &QAction::triggered, this, &TransactionView::bumpFee);
- connect(abandonAction, &QAction::triggered, this, &TransactionView::abandonTx);
- connect(copyAddressAction, &QAction::triggered, this, &TransactionView::copyAddress);
- connect(copyLabelAction, &QAction::triggered, this, &TransactionView::copyLabel);
- connect(copyAmountAction, &QAction::triggered, this, &TransactionView::copyAmount);
- connect(copyTxIDAction, &QAction::triggered, this, &TransactionView::copyTxID);
- connect(copyTxHexAction, &QAction::triggered, this, &TransactionView::copyTxHex);
- connect(copyTxPlainText, &QAction::triggered, this, &TransactionView::copyTxPlainText);
- connect(editLabelAction, &QAction::triggered, this, &TransactionView::editLabel);
- connect(showDetailsAction, &QAction::triggered, this, &TransactionView::showDetails);
+ connect(transactionView, &QTableView::doubleClicked, this, &TransactionView::doubleClicked);
+ connect(transactionView, &QTableView::customContextMenuRequested, this, &TransactionView::contextualMenu);
+
// Double-clicking on a transaction on the transaction history page shows details
connect(this, &TransactionView::doubleClicked, this, &TransactionView::showDetails);
// Highlight transaction after fee bump
@@ -204,6 +196,12 @@ TransactionView::TransactionView(const PlatformStyle *platformStyle, QWidget *pa
});
}
+TransactionView::~TransactionView()
+{
+ QSettings settings;
+ settings.setValue("TransactionViewHeaderState", transactionView->horizontalHeader()->saveState());
+}
+
void TransactionView::setModel(WalletModel *_model)
{
this->model = _model;
@@ -214,25 +212,9 @@ void TransactionView::setModel(WalletModel *_model)
transactionProxyModel->setDynamicSortFilter(true);
transactionProxyModel->setSortCaseSensitivity(Qt::CaseInsensitive);
transactionProxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
-
transactionProxyModel->setSortRole(Qt::EditRole);
-
- transactionView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
transactionView->setModel(transactionProxyModel);
- transactionView->setAlternatingRowColors(true);
- transactionView->setSelectionBehavior(QAbstractItemView::SelectRows);
- transactionView->setSelectionMode(QAbstractItemView::ExtendedSelection);
- transactionView->horizontalHeader()->setSortIndicator(TransactionTableModel::Date, Qt::DescendingOrder);
- transactionView->setSortingEnabled(true);
- transactionView->verticalHeader()->hide();
-
- transactionView->setColumnWidth(TransactionTableModel::Status, STATUS_COLUMN_WIDTH);
- transactionView->setColumnWidth(TransactionTableModel::Watchonly, WATCHONLY_COLUMN_WIDTH);
- transactionView->setColumnWidth(TransactionTableModel::Date, DATE_COLUMN_WIDTH);
- transactionView->setColumnWidth(TransactionTableModel::Type, TYPE_COLUMN_WIDTH);
- transactionView->setColumnWidth(TransactionTableModel::Amount, AMOUNT_MINIMUM_COLUMN_WIDTH);
-
- columnResizingFixer = new GUIUtil::TableViewLastColumnResizingFixer(transactionView, AMOUNT_MINIMUM_COLUMN_WIDTH, MINIMUM_COLUMN_WIDTH, this);
+ transactionView->sortByColumn(TransactionTableModel::Date, Qt::DescendingOrder);
if (_model->getOptionsModel())
{
@@ -354,7 +336,7 @@ void TransactionView::exportClicked()
// CSV is currently the only supported format
QString filename = GUIUtil::getSaveFileName(this,
tr("Export Transaction History"), QString(),
- tr("Comma separated file (*.csv)"), nullptr);
+ tr("Comma separated file", "Name of CSV file format") + QLatin1String(" (*.csv)"), nullptr);
if (filename.isNull())
return;
@@ -421,7 +403,7 @@ void TransactionView::abandonTx()
model->getTransactionTableModel()->updateTransaction(hashQStr, CT_UPDATED, false);
}
-void TransactionView::bumpFee()
+void TransactionView::bumpFee([[maybe_unused]] bool checked)
{
if(!transactionView || !transactionView->selectionModel())
return;
@@ -623,14 +605,6 @@ void TransactionView::focusTransaction(const uint256& txid)
}
}
-// We override the virtual resizeEvent of the QWidget to adjust tables column
-// sizes as the tables width is proportional to the dialogs width.
-void TransactionView::resizeEvent(QResizeEvent* event)
-{
- QWidget::resizeEvent(event);
- columnResizingFixer->stretchColumnWidth(TransactionTableModel::ToAddress);
-}
-
// Need to override default Ctrl+C action for amount as default behaviour is just to copy DisplayRole text
bool TransactionView::eventFilter(QObject *obj, QEvent *event)
{
diff --git a/src/qt/transactionview.h b/src/qt/transactionview.h
index b268823066..66350bdc02 100644
--- a/src/qt/transactionview.h
+++ b/src/qt/transactionview.h
@@ -35,6 +35,7 @@ class TransactionView : public QWidget
public:
explicit TransactionView(const PlatformStyle *platformStyle, QWidget *parent = nullptr);
+ ~TransactionView();
void setModel(WalletModel *model);
@@ -82,10 +83,6 @@ private:
QWidget *createDateRangeWidget();
- GUIUtil::TableViewLastColumnResizingFixer *columnResizingFixer{nullptr};
-
- virtual void resizeEvent(QResizeEvent* event) override;
-
bool eventFilter(QObject *obj, QEvent *event) override;
private Q_SLOTS:
@@ -102,7 +99,7 @@ private Q_SLOTS:
void openThirdPartyTxUrl(QString url);
void updateWatchOnlyColumn(bool fHaveWatchOnly);
void abandonTx();
- void bumpFee();
+ void bumpFee(bool checked);
Q_SIGNALS:
void doubleClicked(const QModelIndex&);
diff --git a/src/qt/utilitydialog.cpp b/src/qt/utilitydialog.cpp
index b7f85446f4..4d246bc8dc 100644
--- a/src/qt/utilitydialog.cpp
+++ b/src/qt/utilitydialog.cpp
@@ -29,7 +29,7 @@
/** "Help message" or "About" dialog box */
HelpMessageDialog::HelpMessageDialog(QWidget *parent, bool about) :
- QDialog(parent),
+ QDialog(parent, GUIUtil::dialog_flags),
ui(new Ui::HelpMessageDialog)
{
ui->setupUi(this);
@@ -142,7 +142,7 @@ ShutdownWindow::ShutdownWindow(QWidget *parent, Qt::WindowFlags f):
{
QVBoxLayout *layout = new QVBoxLayout();
layout->addWidget(new QLabel(
- tr("%1 is shutting down...").arg(PACKAGE_NAME) + "<br /><br />" +
+ tr("%1 is shutting down…").arg(PACKAGE_NAME) + "<br /><br />" +
tr("Do not shut down the computer until this window disappears.")));
setLayout(layout);
diff --git a/src/qt/walletcontroller.cpp b/src/qt/walletcontroller.cpp
index 7a89325ddf..c152689f0b 100644
--- a/src/qt/walletcontroller.cpp
+++ b/src/qt/walletcontroller.cpp
@@ -247,7 +247,7 @@ void CreateWalletActivity::askPassphrase()
void CreateWalletActivity::createWallet()
{
- showProgressDialog(tr("Creating Wallet <b>%1</b>...").arg(m_create_wallet_dialog->walletName().toHtmlEscaped()));
+ showProgressDialog(tr("Creating Wallet <b>%1</b>…").arg(m_create_wallet_dialog->walletName().toHtmlEscaped()));
std::string name = m_create_wallet_dialog->walletName().toStdString();
uint64_t flags = 0;
@@ -330,7 +330,7 @@ void OpenWalletActivity::open(const std::string& path)
{
QString name = path.empty() ? QString("["+tr("default wallet")+"]") : QString::fromStdString(path);
- showProgressDialog(tr("Opening Wallet <b>%1</b>...").arg(name.toHtmlEscaped()));
+ showProgressDialog(tr("Opening Wallet <b>%1</b>…").arg(name.toHtmlEscaped()));
QTimer::singleShot(0, worker(), [this, path] {
std::unique_ptr<interfaces::Wallet> wallet = node().walletClient().loadWallet(path, m_error_message, m_warning_message);
diff --git a/src/qt/walletmodel.cpp b/src/qt/walletmodel.cpp
index 58427b42cc..cc6db8d33e 100644
--- a/src/qt/walletmodel.cpp
+++ b/src/qt/walletmodel.cpp
@@ -65,7 +65,10 @@ WalletModel::~WalletModel()
void WalletModel::startPollBalance()
{
// This timer will be fired repeatedly to update the balance
- connect(timer, &QTimer::timeout, this, &WalletModel::pollBalanceChanged);
+ // Since the QTimer::timeout is a private signal, it cannot be used
+ // in the GUIUtil::ExceptionSafeConnect directly.
+ connect(timer, &QTimer::timeout, this, &WalletModel::timerTimeout);
+ GUIUtil::ExceptionSafeConnect(this, &WalletModel::timerTimeout, this, &WalletModel::pollBalanceChanged);
timer->start(MODEL_UPDATE_DELAY);
}
@@ -245,7 +248,7 @@ WalletModel::SendCoinsReturn WalletModel::sendCoins(WalletModelTransaction &tran
CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION);
ssTx << *newTx;
- transaction_array.append(&(ssTx[0]), ssTx.size());
+ transaction_array.append((const char*)ssTx.data(), ssTx.size());
}
// Add addresses / update labels that we've sent to the address book,
diff --git a/src/qt/walletmodel.h b/src/qt/walletmodel.h
index 9a3c3f2f66..4ca8643444 100644
--- a/src/qt/walletmodel.h
+++ b/src/qt/walletmodel.h
@@ -223,6 +223,8 @@ Q_SIGNALS:
// Notify that there are now keys in the keypool
void canGetAddressesChanged();
+ void timerTimeout();
+
public Q_SLOTS:
/* Starts a timer to periodically update the balance */
void startPollBalance();
diff --git a/src/qt/walletview.cpp b/src/qt/walletview.cpp
index b1e6b43e60..67cc42725b 100644
--- a/src/qt/walletview.cpp
+++ b/src/qt/walletview.cpp
@@ -71,13 +71,13 @@ WalletView::WalletView(const PlatformStyle *_platformStyle, QWidget *parent):
connect(overviewPage, &OverviewPage::transactionClicked, this, &WalletView::transactionClicked);
// Clicking on a transaction on the overview pre-selects the transaction on the transaction history page
- connect(overviewPage, &OverviewPage::transactionClicked, transactionView, static_cast<void (TransactionView::*)(const QModelIndex&)>(&TransactionView::focusTransaction));
+ connect(overviewPage, &OverviewPage::transactionClicked, transactionView, qOverload<const QModelIndex&>(&TransactionView::focusTransaction));
connect(overviewPage, &OverviewPage::outOfSyncWarningClicked, this, &WalletView::requestedSyncWarningInfo);
connect(sendCoinsPage, &SendCoinsDialog::coinsSent, this, &WalletView::coinsSent);
// Highlight transaction after send
- connect(sendCoinsPage, &SendCoinsDialog::coinsSent, transactionView, static_cast<void (TransactionView::*)(const uint256&)>(&TransactionView::focusTransaction));
+ connect(sendCoinsPage, &SendCoinsDialog::coinsSent, transactionView, qOverload<const uint256&>(&TransactionView::focusTransaction));
// Clicking on "Export" allows to export the transaction list
connect(exportButton, &QPushButton::clicked, transactionView, &TransactionView::exportClicked);
@@ -273,7 +273,7 @@ void WalletView::backupWallet()
{
QString filename = GUIUtil::getSaveFileName(this,
tr("Backup Wallet"), QString(),
- tr("Wallet Data (*.dat)"), nullptr);
+ tr("Wallet Data", "Name of wallet data file format") + QLatin1String(" (*.dat)"), nullptr);
if (filename.isEmpty())
return;