Merge branch '0.5.0.x' into 0.5.x
authorLuke Dashjr <luke-jr+git@utopios.org>
Wed, 4 Apr 2012 19:41:07 +0000 (15:41 -0400)
committerLuke Dashjr <luke-jr+git@utopios.org>
Wed, 4 Apr 2012 19:41:07 +0000 (15:41 -0400)
Conflicts:
src/qt/bitcoingui.h

1  2 
src/bitcoinrpc.cpp
src/qt/bitcoin.cpp
src/qt/bitcoingui.h

diff --combined src/bitcoinrpc.cpp
@@@ -36,8 -36,6 +36,8 @@@ void ThreadRPCServer2(void* parg)
  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;
  
@@@ -128,7 -126,6 +128,7 @@@ Value help(const Array& params, bool fH
          // 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)
@@@ -184,13 -181,12 +184,13 @@@ Value getblockcount(const Array& params
  }
  
  
 +// 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;
  }
@@@ -1860,7 -1856,7 +1860,7 @@@ string pAllowInSafeMode[] 
      "help",
      "stop",
      "getblockcount",
 -    "getblocknumber",
 +    "getblocknumber",  // deprecated
      "getconnectioncount",
      "getdifficulty",
      "getgenerate",
@@@ -2031,7 -2027,12 +2031,7 @@@ bool HTTPAuthorized(map<string, string>
          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;
  }
  
  //
@@@ -2164,8 -2165,7 +2164,8 @@@ void ThreadRPCServer2(void* parg
  {
      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
diff --combined src/qt/bitcoin.cpp
@@@ -41,12 -41,19 +41,19 @@@ int MyMessageBox(const std::string& mes
  
  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
      {
@@@ -164,7 -171,7 +171,7 @@@ int main(int argc, char *argv[]
          {
              {
                  // 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();
  
diff --combined src/qt/bitcoingui.h
@@@ -24,10 -24,6 +24,10 @@@ class QStackedWidget
  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
@@@ -35,16 -31,17 +35,16 @@@ public
      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);
@@@ -90,70 -87,43 +90,70 @@@ private
  
      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();
  };