Browse Source

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
pull/1/head
Wladimir J. van der Laan 11 years ago
parent
commit
7cfbe1fee4
  1. 18
      src/init.cpp
  2. 2
      src/main.cpp
  3. 13
      src/noui.h
  4. 31
      src/qt/bitcoin.cpp
  5. 13
      src/qt/bitcoingui.cpp
  6. 2
      src/qt/bitcoingui.h
  7. 2
      src/qt/clientmodel.h
  8. 2
      src/qt/walletmodel.cpp
  9. 2
      src/qt/walletmodel.h
  10. 9
      src/qtui.h
  11. 2
      src/util.cpp
  12. 2
      src/wallet.cpp

18
src/init.cpp

@ -237,7 +237,7 @@ bool AppInit2(int argc, char* argv[]) @@ -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[]) @@ -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[]) @@ -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[]) @@ -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[]) @@ -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[]) @@ -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[]) @@ -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[]) @@ -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);

2
src/main.cpp

@ -1811,7 +1811,7 @@ bool CheckDiskSpace(uint64 nAdditionalBytes) @@ -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

@ -9,7 +9,6 @@ @@ -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; @@ -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;
}

31
src/qt/bitcoin.cpp

@ -38,23 +38,18 @@ static QSplashScreen *splashref; @@ -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, @@ -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[]) @@ -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[]) @@ -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[]) @@ -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;

13
src/qt/bitcoingui.cpp

@ -336,7 +336,7 @@ void BitcoinGUI::setClientModel(ClientModel *clientModel) @@ -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) @@ -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) @@ -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)

2
src/qt/bitcoingui.h

@ -115,7 +115,7 @@ public slots: @@ -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.

2
src/qt/clientmodel.h

@ -52,7 +52,7 @@ signals: @@ -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:

2
src/qt/walletmodel.cpp

@ -140,7 +140,7 @@ WalletModel::SendCoinsReturn WalletModel::sendCoins(const QList<SendCoinsRecipie @@ -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;
}

2
src/qt/walletmodel.h

@ -135,7 +135,7 @@ signals: @@ -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();

9
src/qtui.h

@ -7,7 +7,6 @@ @@ -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; @@ -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();

2
src/util.cpp

@ -1041,7 +1041,7 @@ void AddTimeData(const CNetAddr& ip, int64 nTime) @@ -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);
}
}
}

2
src/wallet.cpp

@ -1219,7 +1219,7 @@ string CWallet::SendMoney(CScript scriptPubKey, int64 nValue, CWalletTx& wtxNew, @@ -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…
Cancel
Save