mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-05 10:17:30 -05:00
3d4fa83587
Many options are extremely technical, and refer internals, making it difficult to translate usefully. This came up in discussion of e.g. #10949. If a message is not understood by translators (which are typically end-users, not developers) they'll either translate it literally, making it harder to understand instead of easier, with the added drawback of the user no longer being able to google it. Also the translation was only working for bitcoin-qt as with the console programs, there is no translation backend. So it was injecting never-used translation messages for bitcoin-cli, -tx. For these reasons, stop translating options help completely. This should not affect the output **in any way** except for bitcoin-qt when a non-English language is configured in the locale. This implements #10962.
180 lines
5.8 KiB
C++
180 lines
5.8 KiB
C++
// Copyright (c) 2011-2017 The Bitcoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#if defined(HAVE_CONFIG_H)
|
|
#include <config/bitcoin-config.h>
|
|
#endif
|
|
|
|
#include <qt/utilitydialog.h>
|
|
|
|
#include <qt/forms/ui_helpmessagedialog.h>
|
|
|
|
#include <qt/bitcoingui.h>
|
|
#include <qt/clientmodel.h>
|
|
#include <qt/guiconstants.h>
|
|
#include <qt/intro.h>
|
|
#include <qt/paymentrequestplus.h>
|
|
#include <qt/guiutil.h>
|
|
|
|
#include <clientversion.h>
|
|
#include <init.h>
|
|
#include <interfaces/node.h>
|
|
#include <util.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <QCloseEvent>
|
|
#include <QLabel>
|
|
#include <QRegExp>
|
|
#include <QTextTable>
|
|
#include <QTextCursor>
|
|
#include <QVBoxLayout>
|
|
|
|
/** "Help message" or "About" dialog box */
|
|
HelpMessageDialog::HelpMessageDialog(interfaces::Node& node, QWidget *parent, bool about) :
|
|
QDialog(parent),
|
|
ui(new Ui::HelpMessageDialog)
|
|
{
|
|
ui->setupUi(this);
|
|
|
|
QString version = tr(PACKAGE_NAME) + " " + tr("version") + " " + QString::fromStdString(FormatFullVersion());
|
|
/* On x86 add a bit specifier to the version so that users can distinguish between
|
|
* 32 and 64 bit builds. On other architectures, 32/64 bit may be more ambiguous.
|
|
*/
|
|
#if defined(__x86_64__)
|
|
version += " " + tr("(%1-bit)").arg(64);
|
|
#elif defined(__i386__ )
|
|
version += " " + tr("(%1-bit)").arg(32);
|
|
#endif
|
|
|
|
if (about)
|
|
{
|
|
setWindowTitle(tr("About %1").arg(tr(PACKAGE_NAME)));
|
|
|
|
/// HTML-format the license message from the core
|
|
QString licenseInfo = QString::fromStdString(LicenseInfo());
|
|
QString licenseInfoHTML = licenseInfo;
|
|
// Make URLs clickable
|
|
QRegExp uri("<(.*)>", Qt::CaseSensitive, QRegExp::RegExp2);
|
|
uri.setMinimal(true); // use non-greedy matching
|
|
licenseInfoHTML.replace(uri, "<a href=\"\\1\">\\1</a>");
|
|
// Replace newlines with HTML breaks
|
|
licenseInfoHTML.replace("\n", "<br>");
|
|
|
|
ui->aboutMessage->setTextFormat(Qt::RichText);
|
|
ui->scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
|
|
text = version + "\n" + licenseInfo;
|
|
ui->aboutMessage->setText(version + "<br><br>" + licenseInfoHTML);
|
|
ui->aboutMessage->setWordWrap(true);
|
|
ui->helpMessage->setVisible(false);
|
|
} else {
|
|
setWindowTitle(tr("Command-line options"));
|
|
QString header = "Usage:\n"
|
|
" bitcoin-qt [command-line options] \n";
|
|
QTextCursor cursor(ui->helpMessage->document());
|
|
cursor.insertText(version);
|
|
cursor.insertBlock();
|
|
cursor.insertText(header);
|
|
cursor.insertBlock();
|
|
|
|
std::string strUsage = gArgs.GetHelpMessage();
|
|
QString coreOptions = QString::fromStdString(strUsage);
|
|
text = version + "\n" + header + "\n" + coreOptions;
|
|
|
|
QTextTableFormat tf;
|
|
tf.setBorderStyle(QTextFrameFormat::BorderStyle_None);
|
|
tf.setCellPadding(2);
|
|
QVector<QTextLength> widths;
|
|
widths << QTextLength(QTextLength::PercentageLength, 35);
|
|
widths << QTextLength(QTextLength::PercentageLength, 65);
|
|
tf.setColumnWidthConstraints(widths);
|
|
|
|
QTextCharFormat bold;
|
|
bold.setFontWeight(QFont::Bold);
|
|
|
|
for (const QString &line : coreOptions.split("\n")) {
|
|
if (line.startsWith(" -"))
|
|
{
|
|
cursor.currentTable()->appendRows(1);
|
|
cursor.movePosition(QTextCursor::PreviousCell);
|
|
cursor.movePosition(QTextCursor::NextRow);
|
|
cursor.insertText(line.trimmed());
|
|
cursor.movePosition(QTextCursor::NextCell);
|
|
} else if (line.startsWith(" ")) {
|
|
cursor.insertText(line.trimmed()+' ');
|
|
} else if (line.size() > 0) {
|
|
//Title of a group
|
|
if (cursor.currentTable())
|
|
cursor.currentTable()->appendRows(1);
|
|
cursor.movePosition(QTextCursor::Down);
|
|
cursor.insertText(line.trimmed(), bold);
|
|
cursor.insertTable(1, 2, tf);
|
|
}
|
|
}
|
|
|
|
ui->helpMessage->moveCursor(QTextCursor::Start);
|
|
ui->scrollArea->setVisible(false);
|
|
ui->aboutLogo->setVisible(false);
|
|
}
|
|
}
|
|
|
|
HelpMessageDialog::~HelpMessageDialog()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
void HelpMessageDialog::printToConsole()
|
|
{
|
|
// On other operating systems, the expected action is to print the message to the console.
|
|
fprintf(stdout, "%s\n", qPrintable(text));
|
|
}
|
|
|
|
void HelpMessageDialog::showOrPrint()
|
|
{
|
|
#if defined(WIN32)
|
|
// On Windows, show a message box, as there is no stderr/stdout in windowed applications
|
|
exec();
|
|
#else
|
|
// On other operating systems, print help text to console
|
|
printToConsole();
|
|
#endif
|
|
}
|
|
|
|
void HelpMessageDialog::on_okButton_accepted()
|
|
{
|
|
close();
|
|
}
|
|
|
|
|
|
/** "Shutdown" window */
|
|
ShutdownWindow::ShutdownWindow(QWidget *parent, Qt::WindowFlags f):
|
|
QWidget(parent, f)
|
|
{
|
|
QVBoxLayout *layout = new QVBoxLayout();
|
|
layout->addWidget(new QLabel(
|
|
tr("%1 is shutting down...").arg(tr(PACKAGE_NAME)) + "<br /><br />" +
|
|
tr("Do not shut down the computer until this window disappears.")));
|
|
setLayout(layout);
|
|
}
|
|
|
|
QWidget *ShutdownWindow::showShutdownWindow(BitcoinGUI *window)
|
|
{
|
|
if (!window)
|
|
return nullptr;
|
|
|
|
// Show a simple window indicating shutdown status
|
|
QWidget *shutdownWindow = new ShutdownWindow();
|
|
shutdownWindow->setWindowTitle(window->windowTitle());
|
|
|
|
// Center shutdown window at where main window was
|
|
const QPoint global = window->mapToGlobal(window->rect().center());
|
|
shutdownWindow->move(global.x() - shutdownWindow->width() / 2, global.y() - shutdownWindow->height() / 2);
|
|
shutdownWindow->show();
|
|
return shutdownWindow;
|
|
}
|
|
|
|
void ShutdownWindow::closeEvent(QCloseEvent *event)
|
|
{
|
|
event->ignore();
|
|
}
|