typedef Value(*rpcfn_type)(const Array& params, bool fHelp);
extern map<string, rpcfn_type> mapCallTable;
+static std::string strRPCUserColonPass;
+
static int64 nWalletUnlockTime;
static CCriticalSection cs_nWalletUnlockTime;
// We already filter duplicates, but these deprecated screw up the sort order
if (strMethod == "getamountreceived" ||
strMethod == "getallreceived" ||
+ strMethod == "getblocknumber" || // deprecated
(strMethod.find("label") != string::npos))
continue;
if (strCommand != "" && strMethod != strCommand)
}
+// deprecated
Value getblocknumber(const Array& params, bool fHelp)
{
if (fHelp || params.size() != 0)
throw runtime_error(
"getblocknumber\n"
- "Returns the block number of the latest block in the longest block chain.");
+ "Deprecated. Use getblockcount.");
return nBestHeight;
}
"help",
"stop",
"getblockcount",
- "getblocknumber",
+ "getblocknumber", // deprecated
"getconnectioncount",
"getdifficulty",
"getgenerate",
return false;
string strUserPass64 = strAuth.substr(6); boost::trim(strUserPass64);
string strUserPass = DecodeBase64(strUserPass64);
- string::size_type nColon = strUserPass.find(":");
- if (nColon == string::npos)
- return false;
- string strUser = strUserPass.substr(0, nColon);
- string strPassword = strUserPass.substr(nColon+1);
- return (strUser == mapArgs["-rpcuser"] && strPassword == mapArgs["-rpcpassword"]);
+ return strUserPass == strRPCUserColonPass;
}
//
{
printf("ThreadRPCServer started\n");
- if (mapArgs["-rpcuser"] == "" && mapArgs["-rpcpassword"] == "")
+ strRPCUserColonPass = mapArgs["-rpcuser"] + ":" + mapArgs["-rpcpassword"];
+ if (strRPCUserColonPass == ":")
{
unsigned char rand_pwd[32];
RAND_bytes(rand_pwd, 32);
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"
"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
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
{
{
{
// Put this in a block, so that BitcoinGUI is cleaned up properly before
- // calling Shutdown().
+ // calling Shutdown() in case of exceptions.
BitcoinGUI window;
if (splashref)
splash.finish(&window);
window.setClientModel(&clientModel);
window.setWalletModel(&walletModel);
- window.show();
+ // If -min option passed, start window minimized.
+ if(GetBoolArg("-min"))
+ {
+ window.showMinimized();
+ }
+ else
+ {
+ window.show();
+ }
app.exec();
class QUrl;
QT_END_NAMESPACE
+/**
+ Bitcoin GUI main class. This class represents the main window of the Bitcoin UI. It communicates with both the client and
+ wallet models to give the user an up-to-date view of the current core state.
+*/
class BitcoinGUI : public QMainWindow
{
Q_OBJECT
explicit BitcoinGUI(QWidget *parent = 0);
~BitcoinGUI();
+ /** Set the client model.
+ The client model represents the part of the core that communicates with the P2P network, and is wallet-agnostic.
+ */
void setClientModel(ClientModel *clientModel);
+ /** Set the wallet model.
+ The wallet model represents a bitcoin wallet, and offers access to the list of transactions, address book and sending
+ functionality.
+ */
void setWalletModel(WalletModel *walletModel);
- /* Transaction table tab indices */
- enum {
- AllTransactions = 0,
- SentReceived = 1,
- Sent = 2,
- Received = 3
- } TabIndex;
-
protected:
void changeEvent(QEvent *e);
void closeEvent(QCloseEvent *event);
QMovie *syncIconMovie;
+ /** Create the main UI actions. */
void createActions();
+ /** Create the menu bar and submenus. */
void createMenuBar();
+ /** Create the toolbars */
void createToolBars();
- QWidget *createTabs();
+ /** Create system tray (notification) icon */
void createTrayIcon();
public slots:
+ /** Set number of connections shown in the UI */
void setNumConnections(int count);
+ /** Set number of blocks shown in the UI */
void setNumBlocks(int count);
+ /** Set the encryption status as shown in the UI.
+ @param[in] status current encryption status
+ @see WalletModel::EncryptionStatus
+ */
void setEncryptionStatus(int status);
/** Set the status bar text if there are any warnings (removes sync progress bar if applicable) */
void refreshStatusBar();
+ /** 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 = false);
- /* It is currently not possible to pass a return value to another thread through
- BlockingQueuedConnection, so use an indirected pointer.
+ /** 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.
http://bugreports.qt.nokia.com/browse/QTBUG-10440
+
+ @param[in] nFeeRequired the required fee
+ @param[out] payFee true to pay the fee, false to not pay the fee
*/
void askFee(qint64 nFeeRequired, bool *payFee);
private slots:
- // UI pages
+ /** Switch to overview (home) page */
void gotoOverviewPage();
+ /** Switch to history (transactions) page */
void gotoHistoryPage();
+ /** Switch to address book page */
void gotoAddressBookPage();
+ /** Switch to receive coins page */
void gotoReceiveCoinsPage();
+ /** Switch to send coins page */
void gotoSendCoinsPage();
- // Misc actions
+ /** Show configuration dialog */
void optionsClicked();
+ /** Show about dialog */
void aboutClicked();
#ifndef Q_WS_MAC
+ /** Handle tray icon clicked */
void trayIconActivated(QSystemTrayIcon::ActivationReason reason);
#endif
+ /** Show incoming transaction notification for new transactions.
+
+ The new items are those between start and end inclusive, under the given parent item.
+ */
void incomingTransaction(const QModelIndex & parent, int start, int end);
+ /** Encrypt the wallet */
void encryptWallet(bool status);
+ /** Change encrypted wallet passphrase */
void changePassphrase();
+ /** Ask for pass phrase to unlock wallet temporarily */
void unlockWallet();
};