Use a messagebox to display the error when -server is provided without providing a rpc password

(plus part of 7cfbe1fee465e82ddbdc8ed17dfcce791bd765f5)
This commit is contained in:
Wladimir J. van der Laan 2012-03-31 15:08:25 +02:00 committed by Luke Dashjr
parent 724c65c1f8
commit 91d7e847e0
6 changed files with 23 additions and 6 deletions

View File

@ -2174,7 +2174,7 @@ void ThreadRPCServer2(void* parg)
strWhatAmI = strprintf(_("To use the %s option"), "\"-server\"");
else if (mapArgs.count("-daemon"))
strWhatAmI = strprintf(_("To use the %s option"), "\"-daemon\"");
PrintConsole(
ThreadSafeMessageBox(strprintf(
_("Error: %s, you must set a rpcpassword in the configuration file:\n %s\n"
"It is recommended you use the following random password:\n"
"rpcuser=bitcoinrpc\n"
@ -2183,7 +2183,8 @@ void ThreadRPCServer2(void* parg)
"If the file does not exist, create it with owner-readable-only file permissions.\n"),
strWhatAmI.c_str(),
GetConfigFile().c_str(),
EncodeBase58(&rand_pwd[0],&rand_pwd[0]+32).c_str());
EncodeBase58(&rand_pwd[0],&rand_pwd[0]+32).c_str()),
_("Error"), wxOK | wxMODAL);
#ifndef QT_GUI
CreateThread(Shutdown, NULL);
#endif

View File

@ -36,6 +36,8 @@ typedef void wxWindow;
#define wxHELP 0x00008000
#define wxMORE 0x00010000
#define wxSETUP 0x00020000
// Force blocking, modal message box dialog (not just notification)
#define wxMODAL 0x00040000
inline int MyMessageBox(const std::string& message, const std::string& caption="Message", int style=wxOK, wxWindow* parent=NULL, int x=-1, int y=-1)
{

View File

@ -41,12 +41,19 @@ int MyMessageBox(const std::string& message, const std::string& caption, int sty
int ThreadSafeMessageBox(const std::string& message, const std::string& caption, int style, wxWindow* parent, int x, int y)
{
bool modal = style & wxMODAL;
if (modal)
while (!guiref)
sleep(1);
// Message from network thread
if(guiref)
{
QMetaObject::invokeMethod(guiref, "error", Qt::QueuedConnection,
Q_ARG(QString, QString::fromStdString(caption)),
Q_ARG(QString, QString::fromStdString(message)));
Q_ARG(QString, QString::fromStdString(message)),
Q_ARG(bool, modal));
}
else
{

View File

@ -516,10 +516,15 @@ void BitcoinGUI::refreshStatusBar()
setNumBlocks(clientModel->getNumBlocks());
}
void BitcoinGUI::error(const QString &title, const QString &message)
void BitcoinGUI::error(const QString &title, const QString &message, bool modal)
{
// Report errors from network/worker thread
notificator->notify(Notificator::Critical, title, message);
if (modal)
{
QMessageBox::critical(this, title, message, QMessageBox::Ok, QMessageBox::Ok);
} else {
notificator->notify(Notificator::Critical, title, message);
}
}
void BitcoinGUI::changeEvent(QEvent *e)

View File

@ -100,7 +100,7 @@ public slots:
/** Set the status bar text if there are any warnings (removes sync progress bar if applicable) */
void refreshStatusBar();
void error(const QString &title, const QString &message);
void error(const QString &title, const QString &message, bool modal = false);
/* It is currently not possible to pass a return value to another thread through
BlockingQueuedConnection, so use an indirected pointer.
http://bugreports.qt.nokia.com/browse/QTBUG-10440

View File

@ -35,6 +35,8 @@ typedef void wxWindow;
#define wxHELP 0x00008000
#define wxMORE 0x00010000
#define wxSETUP 0x00020000
// Force blocking, modal message box dialog (not just notification)
#define wxMODAL 0x00040000
extern int MyMessageBox(const std::string& message, const std::string& caption="Message", int style=wxOK, wxWindow* parent=NULL, int x=-1, int y=-1);
#define wxMessageBox MyMessageBox