mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-29 12:37:30 -03:00
be55f545d5
This is an extraction of ArgsManager related functions from util/system into their own common file. Config file related functions are moved to common/config.cpp. The background of this commit is an ongoing effort to decouple the libbitcoinkernel library from the ArgsManager. The ArgsManager belongs into the common library, since the kernel library should not depend on it. See doc/design/libraries.md for more information on this rationale.
170 lines
5.5 KiB
C++
170 lines
5.5 KiB
C++
// Copyright (c) 2011-2022 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/guiutil.h>
|
|
|
|
#include <clientversion.h>
|
|
#include <common/args.h>
|
|
#include <init.h>
|
|
#include <util/strencodings.h>
|
|
|
|
#include <cstdio>
|
|
|
|
#include <QCloseEvent>
|
|
#include <QLabel>
|
|
#include <QMainWindow>
|
|
#include <QRegularExpression>
|
|
#include <QString>
|
|
#include <QTextCursor>
|
|
#include <QTextTable>
|
|
#include <QVBoxLayout>
|
|
|
|
/** "Help message" or "About" dialog box */
|
|
HelpMessageDialog::HelpMessageDialog(QWidget *parent, bool about) :
|
|
QDialog(parent, GUIUtil::dialog_flags),
|
|
ui(new Ui::HelpMessageDialog)
|
|
{
|
|
ui->setupUi(this);
|
|
|
|
QString version = QString{PACKAGE_NAME} + " " + tr("version") + " " + QString::fromStdString(FormatFullVersion());
|
|
|
|
if (about)
|
|
{
|
|
setWindowTitle(tr("About %1").arg(PACKAGE_NAME));
|
|
|
|
std::string licenseInfo = LicenseInfo();
|
|
/// HTML-format the license message from the core
|
|
QString licenseInfoHTML = QString::fromStdString(LicenseInfo());
|
|
// Make URLs clickable
|
|
QRegularExpression uri(QStringLiteral("<(.*)>"), QRegularExpression::InvertedGreedinessOption);
|
|
licenseInfoHTML.replace(uri, QStringLiteral("<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" + QString::fromStdString(FormatParagraph(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: 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\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);
|
|
}
|
|
|
|
GUIUtil::handleCloseWindowShortcut(this);
|
|
}
|
|
|
|
HelpMessageDialog::~HelpMessageDialog()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
void HelpMessageDialog::printToConsole()
|
|
{
|
|
// On other operating systems, the expected action is to print the message to the console.
|
|
tfm::format(std::cout, "%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(PACKAGE_NAME) + "<br /><br />" +
|
|
tr("Do not shut down the computer until this window disappears.")));
|
|
setLayout(layout);
|
|
|
|
GUIUtil::handleCloseWindowShortcut(this);
|
|
}
|
|
|
|
QWidget* ShutdownWindow::showShutdownWindow(QMainWindow* window)
|
|
{
|
|
assert(window != 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();
|
|
}
|