[Qt] add utilitydialog.cpp/h and helpmessage class

- adds a nice and well formated dialog, which displays our -? help message
  (all options/paramaters)
- moves aboutdialog.cpp/h to the new utilitydialog
- move GUI shutdown window to utilitydialog
This commit is contained in:
Philip Kaufmann 2014-01-16 16:05:44 +01:00
parent 490d6a3046
commit 7b50bb2f1b
13 changed files with 343 additions and 162 deletions

View file

@ -4,6 +4,7 @@ FORMS += \
../src/qt/forms/askpassphrasedialog.ui \ ../src/qt/forms/askpassphrasedialog.ui \
../src/qt/forms/coincontroldialog.ui \ ../src/qt/forms/coincontroldialog.ui \
../src/qt/forms/editaddressdialog.ui \ ../src/qt/forms/editaddressdialog.ui \
../src/qt/forms/helpmessagedialog.ui \
../src/qt/forms/intro.ui \ ../src/qt/forms/intro.ui \
../src/qt/forms/openuridialog.ui \ ../src/qt/forms/openuridialog.ui \
../src/qt/forms/optionsdialog.ui \ ../src/qt/forms/optionsdialog.ui \

View file

@ -80,6 +80,7 @@ QT_FORMS_UI = \
forms/askpassphrasedialog.ui \ forms/askpassphrasedialog.ui \
forms/coincontroldialog.ui \ forms/coincontroldialog.ui \
forms/editaddressdialog.ui \ forms/editaddressdialog.ui \
forms/helpmessagedialog.ui \
forms/intro.ui \ forms/intro.ui \
forms/openuridialog.ui \ forms/openuridialog.ui \
forms/optionsdialog.ui \ forms/optionsdialog.ui \
@ -93,7 +94,6 @@ QT_FORMS_UI = \
forms/transactiondescdialog.ui forms/transactiondescdialog.ui
QT_MOC_CPP = \ QT_MOC_CPP = \
moc_aboutdialog.cpp \
moc_addressbookpage.cpp \ moc_addressbookpage.cpp \
moc_addresstablemodel.cpp \ moc_addresstablemodel.cpp \
moc_askpassphrasedialog.cpp \ moc_askpassphrasedialog.cpp \
@ -133,6 +133,7 @@ QT_MOC_CPP = \
moc_transactionfilterproxy.cpp \ moc_transactionfilterproxy.cpp \
moc_transactiontablemodel.cpp \ moc_transactiontablemodel.cpp \
moc_transactionview.cpp \ moc_transactionview.cpp \
moc_utilitydialog.cpp \
moc_walletframe.cpp \ moc_walletframe.cpp \
moc_walletmodel.cpp \ moc_walletmodel.cpp \
moc_walletview.cpp moc_walletview.cpp
@ -155,7 +156,6 @@ PROTOBUF_H = paymentrequest.pb.h
PROTOBUF_PROTO = paymentrequest.proto PROTOBUF_PROTO = paymentrequest.proto
BITCOIN_QT_H = \ BITCOIN_QT_H = \
aboutdialog.h \
addressbookpage.h \ addressbookpage.h \
addresstablemodel.h \ addresstablemodel.h \
askpassphrasedialog.h \ askpassphrasedialog.h \
@ -198,6 +198,7 @@ BITCOIN_QT_H = \
transactionrecord.h \ transactionrecord.h \
transactiontablemodel.h \ transactiontablemodel.h \
transactionview.h \ transactionview.h \
utilitydialog.h \
walletframe.h \ walletframe.h \
walletmodel.h \ walletmodel.h \
walletmodeltransaction.h \ walletmodeltransaction.h \
@ -248,7 +249,6 @@ RES_ICONS = \
res/icons/tx_mined.png res/icons/tx_mined.png
BITCOIN_QT_CPP = \ BITCOIN_QT_CPP = \
aboutdialog.cpp \
bitcoin.cpp \ bitcoin.cpp \
bitcoinaddressvalidator.cpp \ bitcoinaddressvalidator.cpp \
bitcoinamountfield.cpp \ bitcoinamountfield.cpp \
@ -267,7 +267,8 @@ BITCOIN_QT_CPP = \
rpcconsole.cpp \ rpcconsole.cpp \
signverifymessagedialog.cpp \ signverifymessagedialog.cpp \
splashscreen.cpp \ splashscreen.cpp \
trafficgraphwidget.cpp trafficgraphwidget.cpp \
utilitydialog.cpp
if ENABLE_WALLET if ENABLE_WALLET
BITCOIN_QT_CPP += \ BITCOIN_QT_CPP += \

View file

@ -1,38 +0,0 @@
// Copyright (c) 2011-2013 The Bitcoin developers
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#include "aboutdialog.h"
#include "ui_aboutdialog.h"
#include "clientmodel.h"
#include "clientversion.h"
AboutDialog::AboutDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::AboutDialog)
{
ui->setupUi(this);
// Set current copyright year
ui->copyrightLabel->setText(tr("Copyright") + QString(" © 2009-%1 ").arg(COPYRIGHT_YEAR) + tr("The Bitcoin Core developers"));
}
void AboutDialog::setModel(ClientModel *model)
{
if(model)
{
ui->versionLabel->setText(model->formatFullVersion());
}
}
AboutDialog::~AboutDialog()
{
delete ui;
}
void AboutDialog::on_buttonBox_accepted()
{
close();
}

View file

@ -1,34 +0,0 @@
// Copyright (c) 2011-2013 The Bitcoin developers
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef ABOUTDIALOG_H
#define ABOUTDIALOG_H
#include <QDialog>
class ClientModel;
namespace Ui {
class AboutDialog;
}
/** "About" dialog box */
class AboutDialog : public QDialog
{
Q_OBJECT
public:
explicit AboutDialog(QWidget *parent);
~AboutDialog();
void setModel(ClientModel *model);
private:
Ui::AboutDialog *ui;
private slots:
void on_buttonBox_accepted();
};
#endif // ABOUTDIALOG_H

View file

@ -14,6 +14,7 @@
#include "intro.h" #include "intro.h"
#include "optionsmodel.h" #include "optionsmodel.h"
#include "splashscreen.h" #include "splashscreen.h"
#include "utilitydialog.h"
#ifdef ENABLE_WALLET #ifdef ENABLE_WALLET
#include "paymentserver.h" #include "paymentserver.h"
#include "walletmodel.h" #include "walletmodel.h"
@ -36,8 +37,6 @@
#include <QTimer> #include <QTimer>
#include <QTranslator> #include <QTranslator>
#include <QThread> #include <QThread>
#include <QVBoxLayout>
#include <QLabel>
#if defined(QT_STATICPLUGIN) #if defined(QT_STATICPLUGIN)
#include <QtPlugin> #include <QtPlugin>
@ -356,17 +355,7 @@ void BitcoinApplication::requestShutdown()
clientModel = 0; clientModel = 0;
// Show a simple window indicating shutdown status // Show a simple window indicating shutdown status
QWidget *shutdownWindow = new QWidget(); ShutdownWindow::showShutdownWindow(window);
QVBoxLayout *layout = new QVBoxLayout();
layout->addWidget(new QLabel(
tr("Bitcoin Core is shutting down...") + "<br /><br />" +
tr("Do not shut down the computer until this window disappears.")));
shutdownWindow->setLayout(layout);
// 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();
// Request shutdown from core thread // Request shutdown from core thread
emit requestedShutdown(); emit requestedShutdown();
@ -503,7 +492,7 @@ int main(int argc, char *argv[])
// but before showing splash screen. // but before showing splash screen.
if (mapArgs.count("-?") || mapArgs.count("--help")) if (mapArgs.count("-?") || mapArgs.count("--help"))
{ {
GUIUtil::HelpMessageBox help; HelpMessageDialog help(NULL);
help.showOrPrint(); help.showOrPrint();
return 1; return 1;
} }

View file

@ -4,7 +4,6 @@
#include "bitcoingui.h" #include "bitcoingui.h"
#include "aboutdialog.h"
#include "bitcoinunits.h" #include "bitcoinunits.h"
#include "clientmodel.h" #include "clientmodel.h"
#include "guiconstants.h" #include "guiconstants.h"
@ -14,6 +13,7 @@
#include "optionsdialog.h" #include "optionsdialog.h"
#include "optionsmodel.h" #include "optionsmodel.h"
#include "rpcconsole.h" #include "rpcconsole.h"
#include "utilitydialog.h"
#ifdef ENABLE_WALLET #ifdef ENABLE_WALLET
#include "walletframe.h" #include "walletframe.h"
#include "walletmodel.h" #include "walletmodel.h"

View file

@ -160,12 +160,12 @@ This product includes software developed by the OpenSSL Project for use in the O
<slot>accept()</slot> <slot>accept()</slot>
<hints> <hints>
<hint type="sourcelabel"> <hint type="sourcelabel">
<x>360</x> <x>20</x>
<y>308</y> <y>20</y>
</hint> </hint>
<hint type="destinationlabel"> <hint type="destinationlabel">
<x>157</x> <x>20</x>
<y>274</y> <y>20</y>
</hint> </hint>
</hints> </hints>
</connection> </connection>
@ -176,12 +176,12 @@ This product includes software developed by the OpenSSL Project for use in the O
<slot>reject()</slot> <slot>reject()</slot>
<hints> <hints>
<hint type="sourcelabel"> <hint type="sourcelabel">
<x>428</x> <x>20</x>
<y>308</y> <y>20</y>
</hint> </hint>
<hint type="destinationlabel"> <hint type="destinationlabel">
<x>286</x> <x>20</x>
<y>274</y> <y>20</y>
</hint> </hint>
</hints> </hints>
</connection> </connection>

View file

@ -0,0 +1,128 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>HelpMessageDialog</class>
<widget class="QDialog" name="HelpMessageDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>400</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="windowTitle">
<string>Bitcoin Core - Command-line options</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="graphic">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Ignored">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="pixmap">
<pixmap resource="../bitcoin.qrc">:/images/about</pixmap>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QScrollArea" name="scrollArea">
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOn</enum>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>659</width>
<height>348</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="helpMessageLabel">
<property name="font">
<font>
<family>Terminal</family>
</font>
</property>
<property name="cursor">
<cursorShape>IBeamCursor</cursorShape>
</property>
<property name="textFormat">
<enum>Qt::PlainText</enum>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="okButton">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources>
<include location="../bitcoin.qrc"/>
</resources>
<connections>
<connection>
<sender>okButton</sender>
<signal>accepted()</signal>
<receiver>HelpMessageDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>20</x>
<y>20</y>
</hint>
<hint type="destinationlabel">
<x>20</x>
<y>20</y>
</hint>
</hints>
</connection>
<connection>
<sender>okButton</sender>
<signal>rejected()</signal>
<receiver>HelpMessageDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>20</x>
<y>20</y>
</hint>
<hint type="destinationlabel">
<x>20</x>
<y>20</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View file

@ -591,47 +591,6 @@ void restoreWindowGeometry(const QString& strSetting, const QSize& defaultSize,
parent->move(pos); parent->move(pos);
} }
HelpMessageBox::HelpMessageBox(QWidget *parent) :
QMessageBox(parent)
{
header = tr("Bitcoin Core") + " " + tr("version") + " " +
QString::fromStdString(FormatFullVersion()) + "\n\n" +
tr("Usage:") + "\n" +
" bitcoin-qt [" + tr("command-line options") + "] " + "\n";
coreOptions = QString::fromStdString(HelpMessage(HMM_BITCOIN_QT));
uiOptions = tr("UI options") + ":\n" +
" -lang=<lang> " + tr("Set language, for example \"de_DE\" (default: system locale)") + "\n" +
" -min " + tr("Start minimized") + "\n" +
" -splash " + tr("Show splash screen on startup (default: 1)") + "\n" +
" -choosedatadir " + tr("Choose data directory on startup (default: 0)") + "\n";
setWindowTitle(tr("Bitcoin Core"));
setTextFormat(Qt::PlainText);
// setMinimumWidth is ignored for QMessageBox so put in non-breaking spaces to make it wider.
setText(header + QString(QChar(0x2003)).repeated(50));
setDetailedText(coreOptions + "\n" + uiOptions);
}
void HelpMessageBox::printToConsole()
{
// On other operating systems, the expected action is to print the message to the console.
QString strUsage = header + "\n" + coreOptions + "\n" + uiOptions;
fprintf(stdout, "%s", strUsage.toStdString().c_str());
}
void HelpMessageBox::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 setClipboard(const QString& str) void setClipboard(const QString& str)
{ {
QApplication::clipboard()->setText(str, QClipboard::Clipboard); QApplication::clipboard()->setText(str, QClipboard::Clipboard);

View file

@ -123,26 +123,6 @@ namespace GUIUtil
/** Restore window size and position */ /** Restore window size and position */
void restoreWindowGeometry(const QString& strSetting, const QSize &defaultSizeIn, QWidget *parent); void restoreWindowGeometry(const QString& strSetting, const QSize &defaultSizeIn, QWidget *parent);
/** Help message for Bitcoin-Qt, shown with --help. */
class HelpMessageBox : public QMessageBox
{
Q_OBJECT
public:
HelpMessageBox(QWidget *parent = 0);
/** Show message box or print help message to standard output, based on operating system. */
void showOrPrint();
/** Print help message to console */
void printToConsole();
private:
QString header;
QString coreOptions;
QString uiOptions;
};
} // namespace GUIUtil } // namespace GUIUtil
#endif // GUIUTIL_H #endif // GUIUTIL_H

View file

@ -7,6 +7,7 @@
#include "clientmodel.h" #include "clientmodel.h"
#include "guiutil.h" #include "guiutil.h"
#include "utilitydialog.h"
#include "rpcserver.h" #include "rpcserver.h"
#include "rpcclient.h" #include "rpcclient.h"
@ -443,8 +444,8 @@ void RPCConsole::scrollToEnd()
void RPCConsole::on_showCLOptionsButton_clicked() void RPCConsole::on_showCLOptionsButton_clicked()
{ {
GUIUtil::HelpMessageBox help; HelpMessageDialog *help = new HelpMessageDialog(this);
help.exec(); help->show();
} }
void RPCConsole::on_sldGraphRange_valueChanged(int value) void RPCConsole::on_sldGraphRange_valueChanged(int value)

125
src/qt/utilitydialog.cpp Normal file
View file

@ -0,0 +1,125 @@
// Copyright (c) 2011-2014 The Bitcoin developers
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#include "utilitydialog.h"
#include "ui_aboutdialog.h"
#include "ui_helpmessagedialog.h"
#include "bitcoingui.h"
#include "clientmodel.h"
#include "guiutil.h"
#include "clientversion.h"
#include "init.h"
#include "util.h"
#include <QLabel>
#include <QVBoxLayout>
/** "About" dialog box */
AboutDialog::AboutDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::AboutDialog)
{
ui->setupUi(this);
// Set current copyright year
ui->copyrightLabel->setText(tr("Copyright") + QString(" &copy; 2009-%1 ").arg(COPYRIGHT_YEAR) + tr("The Bitcoin Core developers"));
}
void AboutDialog::setModel(ClientModel *model)
{
if(model)
{
ui->versionLabel->setText(model->formatFullVersion());
}
}
AboutDialog::~AboutDialog()
{
delete ui;
}
void AboutDialog::on_buttonBox_accepted()
{
close();
}
/** "Help message" dialog box */
HelpMessageDialog::HelpMessageDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::HelpMessageDialog)
{
ui->setupUi(this);
GUIUtil::restoreWindowGeometry("nHelpMessageDialogWindow", this->size(), this);
header = tr("Bitcoin Core") + " " + tr("version") + " " +
QString::fromStdString(FormatFullVersion()) + "\n\n" +
tr("Usage:") + "\n" +
" bitcoin-qt [" + tr("command-line options") + "] " + "\n";
coreOptions = QString::fromStdString(HelpMessage(HMM_BITCOIN_QT));
uiOptions = tr("UI options") + ":\n" +
" -lang=<lang> " + tr("Set language, for example \"de_DE\" (default: system locale)") + "\n" +
" -min " + tr("Start minimized") + "\n" +
" -splash " + tr("Show splash screen on startup (default: 1)") + "\n" +
" -choosedatadir " + tr("Choose data directory on startup (default: 0)");
ui->helpMessageLabel->setFont(GUIUtil::bitcoinAddressFont());
// Set help message text
ui->helpMessageLabel->setText(header + "\n" + coreOptions + "\n" + uiOptions);
}
HelpMessageDialog::~HelpMessageDialog()
{
GUIUtil::saveWindowGeometry("nHelpMessageDialogWindow", this);
delete ui;
}
void HelpMessageDialog::printToConsole()
{
// On other operating systems, the expected action is to print the message to the console.
QString strUsage = header + "\n" + coreOptions + "\n" + uiOptions;
fprintf(stdout, "%s", strUsage.toStdString().c_str());
}
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 */
void ShutdownWindow::showShutdownWindow(BitcoinGUI *window)
{
if (!window)
return;
// Show a simple window indicating shutdown status
QWidget *shutdownWindow = new QWidget();
QVBoxLayout *layout = new QVBoxLayout();
layout->addWidget(new QLabel(
tr("Bitcoin Core is shutting down...") + "<br /><br />" +
tr("Do not shut down the computer until this window disappears.")));
shutdownWindow->setLayout(layout);
// 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();
}

69
src/qt/utilitydialog.h Normal file
View file

@ -0,0 +1,69 @@
// Copyright (c) 2011-2014 The Bitcoin developers
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef UTILITYDIALOG_H
#define UTILITYDIALOG_H
#include <QDialog>
#include <QObject>
class BitcoinGUI;
class ClientModel;
namespace Ui {
class AboutDialog;
class HelpMessageDialog;
}
/** "About" dialog box */
class AboutDialog : public QDialog
{
Q_OBJECT
public:
explicit AboutDialog(QWidget *parent);
~AboutDialog();
void setModel(ClientModel *model);
private:
Ui::AboutDialog *ui;
private slots:
void on_buttonBox_accepted();
};
/** "Help message" dialog box */
class HelpMessageDialog : public QDialog
{
Q_OBJECT
public:
explicit HelpMessageDialog(QWidget *parent);
~HelpMessageDialog();
void printToConsole();
void showOrPrint();
private:
Ui::HelpMessageDialog *ui;
QString header;
QString coreOptions;
QString uiOptions;
private slots:
void on_okButton_accepted();
};
/** "Shutdown" window */
class ShutdownWindow : public QObject
{
Q_OBJECT
public:
static void showShutdownWindow(BitcoinGUI *window);
};
#endif // UTILITYDIALOG_H