qtui.h/noui.h interface cleanup
- rename wxMessageBox, remove redundant arguments to noui/qtui calls - also, add flag to force blocking, modal dialog box for disk space warning etc - clarify function naming - no more special MessageBox needed from AppInit2, as window object is created before calling AppInit2
This commit is contained in:
parent
1a3f0da922
commit
7cfbe1fee4
12 changed files with 47 additions and 51 deletions
18
src/init.cpp
18
src/init.cpp
|
@ -237,7 +237,7 @@ bool AppInit2(int argc, char* argv[])
|
|||
strUsage.erase(std::remove(strUsage.begin(), strUsage.end(), '\t'), strUsage.end());
|
||||
#if defined(QT_GUI) && defined(WIN32)
|
||||
// On windows, show a message box, as there is no stderr
|
||||
wxMessageBox(strUsage, "Usage");
|
||||
ThreadSafeMessageBox(strUsage, _("Usage"), wxOK | wxMODAL);
|
||||
#else
|
||||
fprintf(stderr, "%s", strUsage.c_str());
|
||||
#endif
|
||||
|
@ -326,7 +326,7 @@ bool AppInit2(int argc, char* argv[])
|
|||
static boost::interprocess::file_lock lock(strLockFile.c_str());
|
||||
if (!lock.try_lock())
|
||||
{
|
||||
wxMessageBox(strprintf(_("Cannot obtain a lock on data directory %s. Bitcoin is probably already running."), GetDataDir().c_str()), "Bitcoin");
|
||||
ThreadSafeMessageBox(strprintf(_("Cannot obtain a lock on data directory %s. Bitcoin is probably already running."), GetDataDir().c_str()), _("Bitcoin"), wxOK|wxMODAL);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -368,7 +368,7 @@ bool AppInit2(int argc, char* argv[])
|
|||
{
|
||||
strErrors << _("Wallet needed to be rewritten: restart Bitcoin to complete") << "\n";
|
||||
printf("%s", strErrors.str().c_str());
|
||||
wxMessageBox(strErrors.str(), "Bitcoin", wxOK | wxICON_ERROR);
|
||||
ThreadSafeMessageBox(strErrors.str(), _("Bitcoin"), wxOK | wxICON_ERROR | wxMODAL);
|
||||
return false;
|
||||
}
|
||||
else
|
||||
|
@ -440,7 +440,7 @@ bool AppInit2(int argc, char* argv[])
|
|||
|
||||
if (!strErrors.str().empty())
|
||||
{
|
||||
wxMessageBox(strErrors.str(), "Bitcoin", wxOK | wxICON_ERROR);
|
||||
ThreadSafeMessageBox(strErrors.str(), _("Bitcoin"), wxOK | wxICON_ERROR | wxMODAL);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -496,7 +496,7 @@ bool AppInit2(int argc, char* argv[])
|
|||
addrProxy = CService(mapArgs["-proxy"], 9050);
|
||||
if (!addrProxy.IsValid())
|
||||
{
|
||||
wxMessageBox(_("Invalid -proxy address"), "Bitcoin");
|
||||
ThreadSafeMessageBox(_("Invalid -proxy address"), _("Bitcoin"), wxOK | wxMODAL);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -527,7 +527,7 @@ bool AppInit2(int argc, char* argv[])
|
|||
std::string strError;
|
||||
if (!BindListenPort(strError))
|
||||
{
|
||||
wxMessageBox(strError, "Bitcoin");
|
||||
ThreadSafeMessageBox(strError, _("Bitcoin"), wxOK | wxMODAL);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -547,11 +547,11 @@ bool AppInit2(int argc, char* argv[])
|
|||
{
|
||||
if (!ParseMoney(mapArgs["-paytxfee"], nTransactionFee))
|
||||
{
|
||||
wxMessageBox(_("Invalid amount for -paytxfee=<amount>"), "Bitcoin");
|
||||
ThreadSafeMessageBox(_("Invalid amount for -paytxfee=<amount>"), _("Bitcoin"), wxOK | wxMODAL);
|
||||
return false;
|
||||
}
|
||||
if (nTransactionFee > 0.25 * COIN)
|
||||
wxMessageBox(_("Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction."), "Bitcoin", wxOK | wxICON_EXCLAMATION);
|
||||
ThreadSafeMessageBox(_("Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction."), _("Bitcoin"), wxOK | wxICON_EXCLAMATION | wxMODAL);
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -563,7 +563,7 @@ bool AppInit2(int argc, char* argv[])
|
|||
RandAddSeedPerfmon();
|
||||
|
||||
if (!CreateThread(StartNode, NULL))
|
||||
wxMessageBox(_("Error: CreateThread(StartNode) failed"), "Bitcoin");
|
||||
ThreadSafeMessageBox(_("Error: CreateThread(StartNode) failed"), _("Bitcoin"), wxOK | wxMODAL);
|
||||
|
||||
if (fServer)
|
||||
CreateThread(ThreadRPCServer, NULL);
|
||||
|
|
|
@ -1811,7 +1811,7 @@ bool CheckDiskSpace(uint64 nAdditionalBytes)
|
|||
string strMessage = _("Warning: Disk space is low ");
|
||||
strMiscWarning = strMessage;
|
||||
printf("*** %s\n", strMessage.c_str());
|
||||
ThreadSafeMessageBox(strMessage, "Bitcoin", wxOK | wxICON_EXCLAMATION);
|
||||
ThreadSafeMessageBox(strMessage, "Bitcoin", wxOK | wxICON_EXCLAMATION | wxMODAL);
|
||||
QueueShutdown();
|
||||
return false;
|
||||
}
|
||||
|
|
13
src/noui.h
13
src/noui.h
|
@ -9,7 +9,6 @@
|
|||
#include "wallet.h"
|
||||
#include "init.h"
|
||||
|
||||
typedef void wxWindow;
|
||||
#define wxYES 0x00000002
|
||||
#define wxOK 0x00000004
|
||||
#define wxNO 0x00000008
|
||||
|
@ -36,21 +35,17 @@ 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)
|
||||
inline int ThreadSafeMessageBox(const std::string& message, const std::string& caption, int style=wxOK)
|
||||
{
|
||||
printf("%s: %s\n", caption.c_str(), message.c_str());
|
||||
fprintf(stderr, "%s: %s\n", caption.c_str(), message.c_str());
|
||||
return 4;
|
||||
}
|
||||
#define wxMessageBox MyMessageBox
|
||||
|
||||
inline int ThreadSafeMessageBox(const std::string& message, const std::string& caption, int style=wxOK, wxWindow* parent=NULL, int x=-1, int y=-1)
|
||||
{
|
||||
return MyMessageBox(message, caption, style, parent, x, y);
|
||||
}
|
||||
|
||||
inline bool ThreadSafeAskFee(int64 nFeeRequired, const std::string& strCaption, wxWindow* parent)
|
||||
inline bool ThreadSafeAskFee(int64 nFeeRequired, const std::string& strCaption)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -38,23 +38,18 @@ static QSplashScreen *splashref;
|
|||
static WalletModel *walletmodel;
|
||||
static ClientModel *clientmodel;
|
||||
|
||||
int MyMessageBox(const std::string& message, const std::string& caption, int style, wxWindow* parent, int x, int y)
|
||||
{
|
||||
// Message from AppInit2(), always in main thread before main window is constructed
|
||||
QMessageBox::critical(0, QString::fromStdString(caption),
|
||||
QString::fromStdString(message),
|
||||
QMessageBox::Ok, QMessageBox::Ok);
|
||||
return 4;
|
||||
}
|
||||
|
||||
int ThreadSafeMessageBox(const std::string& message, const std::string& caption, int style, wxWindow* parent, int x, int y)
|
||||
int ThreadSafeMessageBox(const std::string& message, const std::string& caption, int style)
|
||||
{
|
||||
// Message from network thread
|
||||
if(guiref)
|
||||
{
|
||||
QMetaObject::invokeMethod(guiref, "error", Qt::QueuedConnection,
|
||||
bool modal = (style & wxMODAL);
|
||||
// in case of modal message, use blocking connection to wait for user to click OK
|
||||
QMetaObject::invokeMethod(guiref, "error",
|
||||
modal ? GUIUtil::blockingGUIThreadConnection() : 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
|
||||
{
|
||||
|
@ -64,7 +59,7 @@ int ThreadSafeMessageBox(const std::string& message, const std::string& caption,
|
|||
return 4;
|
||||
}
|
||||
|
||||
bool ThreadSafeAskFee(int64 nFeeRequired, const std::string& strCaption, wxWindow* parent)
|
||||
bool ThreadSafeAskFee(int64 nFeeRequired, const std::string& strCaption)
|
||||
{
|
||||
if(!guiref)
|
||||
return false;
|
||||
|
@ -222,15 +217,16 @@ int main(int argc, char *argv[])
|
|||
|
||||
try
|
||||
{
|
||||
BitcoinGUI window;
|
||||
guiref = &window;
|
||||
if(AppInit2(argc, argv))
|
||||
{
|
||||
{
|
||||
// Put this in a block, so that BitcoinGUI is cleaned up properly before
|
||||
// calling Shutdown() in case of exceptions.
|
||||
// Put this in a block, so that the Model objects are cleaned up before
|
||||
// calling Shutdown().
|
||||
|
||||
optionsModel.Upgrade(); // Must be done after AppInit2
|
||||
|
||||
BitcoinGUI window;
|
||||
if (splashref)
|
||||
splash.finish(&window);
|
||||
|
||||
|
@ -239,7 +235,6 @@ int main(int argc, char *argv[])
|
|||
WalletModel walletModel(pwalletMain, &optionsModel);
|
||||
walletmodel = &walletModel;
|
||||
|
||||
guiref = &window;
|
||||
window.setClientModel(&clientModel);
|
||||
window.setWalletModel(&walletModel);
|
||||
|
||||
|
@ -276,6 +271,8 @@ int main(int argc, char *argv[])
|
|||
#endif
|
||||
app.exec();
|
||||
|
||||
window.setClientModel(0);
|
||||
window.setWalletModel(0);
|
||||
guiref = 0;
|
||||
clientmodel = 0;
|
||||
walletmodel = 0;
|
||||
|
|
|
@ -336,7 +336,7 @@ void BitcoinGUI::setClientModel(ClientModel *clientModel)
|
|||
connect(clientModel, SIGNAL(numBlocksChanged(int)), this, SLOT(setNumBlocks(int)));
|
||||
|
||||
// Report errors from network/worker thread
|
||||
connect(clientModel, SIGNAL(error(QString,QString)), this, SLOT(error(QString,QString)));
|
||||
connect(clientModel, SIGNAL(error(QString,QString, bool)), this, SLOT(error(QString,QString,bool)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -346,7 +346,7 @@ void BitcoinGUI::setWalletModel(WalletModel *walletModel)
|
|||
if(walletModel)
|
||||
{
|
||||
// Report errors from wallet thread
|
||||
connect(walletModel, SIGNAL(error(QString,QString)), this, SLOT(error(QString,QString)));
|
||||
connect(walletModel, SIGNAL(error(QString,QString,bool)), this, SLOT(error(QString,QString,bool)));
|
||||
|
||||
// Put transaction list in tabs
|
||||
transactionView->setModel(walletModel);
|
||||
|
@ -538,10 +538,15 @@ void BitcoinGUI::setNumBlocks(int count)
|
|||
progressBar->setToolTip(tooltip);
|
||||
}
|
||||
|
||||
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)
|
||||
|
|
|
@ -115,7 +115,7 @@ public slots:
|
|||
void setEncryptionStatus(int status);
|
||||
|
||||
/** Notify the user of an error in the network or transaction handling code. */
|
||||
void error(const QString &title, const QString &message);
|
||||
void error(const QString &title, const QString &message, bool modal);
|
||||
/** Asks the user whether to pay the transaction fee or to cancel the transaction.
|
||||
It is currently not possible to pass a return value to another thread through
|
||||
BlockingQueuedConnection, so an indirected pointer is used.
|
||||
|
|
|
@ -52,7 +52,7 @@ signals:
|
|||
void numBlocksChanged(int count);
|
||||
|
||||
//! Asynchronous error notification
|
||||
void error(const QString &title, const QString &message);
|
||||
void error(const QString &title, const QString &message, bool modal);
|
||||
|
||||
public slots:
|
||||
|
||||
|
|
|
@ -140,7 +140,7 @@ WalletModel::SendCoinsReturn WalletModel::sendCoins(const QList<SendCoinsRecipie
|
|||
}
|
||||
return TransactionCreationFailed;
|
||||
}
|
||||
if(!ThreadSafeAskFee(nFeeRequired, tr("Sending...").toStdString(), NULL))
|
||||
if(!ThreadSafeAskFee(nFeeRequired, tr("Sending...").toStdString()))
|
||||
{
|
||||
return Aborted;
|
||||
}
|
||||
|
|
|
@ -135,7 +135,7 @@ signals:
|
|||
void requireUnlock();
|
||||
|
||||
// Asynchronous error notification
|
||||
void error(const QString &title, const QString &message);
|
||||
void error(const QString &title, const QString &message, bool modal);
|
||||
|
||||
public slots:
|
||||
void update();
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
#include <string>
|
||||
#include "wallet.h"
|
||||
|
||||
typedef void wxWindow;
|
||||
#define wxYES 0x00000002
|
||||
#define wxOK 0x00000004
|
||||
#define wxNO 0x00000008
|
||||
|
@ -34,11 +33,11 @@ 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
|
||||
extern int ThreadSafeMessageBox(const std::string& message, const std::string& caption, int style=wxOK, wxWindow* parent=NULL, int x=-1, int y=-1);
|
||||
extern bool ThreadSafeAskFee(int64 nFeeRequired, const std::string& strCaption, wxWindow* parent);
|
||||
extern int ThreadSafeMessageBox(const std::string& message, const std::string& caption, int style=wxOK);
|
||||
extern bool ThreadSafeAskFee(int64 nFeeRequired, const std::string& strCaption);
|
||||
extern void ThreadSafeHandleURL(const std::string& strURL);
|
||||
extern void MainFrameRepaint();
|
||||
extern void AddressBookRepaint();
|
||||
|
|
|
@ -1041,7 +1041,7 @@ void AddTimeData(const CNetAddr& ip, int64 nTime)
|
|||
string strMessage = _("Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.");
|
||||
strMiscWarning = strMessage;
|
||||
printf("*** %s\n", strMessage.c_str());
|
||||
boost::thread(boost::bind(ThreadSafeMessageBox, strMessage+" ", string("Bitcoin"), wxOK | wxICON_EXCLAMATION, (wxWindow*)NULL, -1, -1));
|
||||
ThreadSafeMessageBox(strMessage+" ", string("Bitcoin"), wxOK | wxICON_EXCLAMATION);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1219,7 +1219,7 @@ string CWallet::SendMoney(CScript scriptPubKey, int64 nValue, CWalletTx& wtxNew,
|
|||
return strError;
|
||||
}
|
||||
|
||||
if (fAskFee && !ThreadSafeAskFee(nFeeRequired, _("Sending..."), NULL))
|
||||
if (fAskFee && !ThreadSafeAskFee(nFeeRequired, _("Sending...")))
|
||||
return "ABORTED";
|
||||
|
||||
if (!CommitTransaction(wtxNew, reservekey))
|
||||
|
|
Loading…
Reference in a new issue