-// Copyright (c) 2009-2010 Satoshi Nakamoto\r
-// Distributed under the MIT/X11 software license, see the accompanying\r
-// file license.txt or http://www.opensource.org/licenses/mit-license.php.\r
-\r
-\r
-\r
-\r
-DECLARE_EVENT_TYPE(wxEVT_UITHREADCALL, -1)\r
-\r
-extern map<string, string> mapArgs;\r
-\r
-// Settings\r
-extern int fShowGenerated;\r
-extern int fMinimizeToTray;\r
-extern int fMinimizeOnClose;\r
-\r
-\r
-\r
-void HandleCtrlA(wxKeyEvent& event);\r
-string FormatTxStatus(const CWalletTx& wtx);\r
-void UIThreadCall(boost::function0<void>);\r
-void MainFrameRepaint();\r
-void Shutdown(void* parg);\r
-int ThreadSafeMessageBox(const string& message, const string& caption="Message", int style=wxOK, wxWindow* parent=NULL, int x=-1, int y=-1);\r
-\r
-\r
-\r
-\r
-\r
-\r
-class CMainFrame : public CMainFrameBase\r
-{\r
-protected:\r
- // Event handlers\r
- void OnClose(wxCloseEvent& event);\r
- void OnIconize(wxIconizeEvent& event);\r
- void OnMouseEvents(wxMouseEvent& event);\r
- void OnKeyDown(wxKeyEvent& event) { HandleCtrlA(event); }\r
- void OnIdle(wxIdleEvent& event);\r
- void OnPaint(wxPaintEvent& event);\r
- void OnPaintListCtrl(wxPaintEvent& event);\r
- void OnMenuFileExit(wxCommandEvent& event);\r
- void OnMenuViewShowGenerated(wxCommandEvent& event);\r
- void OnUpdateUIViewShowGenerated(wxUpdateUIEvent& event);\r
- void OnMenuOptionsGenerate(wxCommandEvent& event);\r
- void OnUpdateUIOptionsGenerate(wxUpdateUIEvent& event);\r
- void OnMenuOptionsChangeYourAddress(wxCommandEvent& event);\r
- void OnMenuOptionsOptions(wxCommandEvent& event);\r
- void OnMenuHelpAbout(wxCommandEvent& event);\r
- void OnButtonSend(wxCommandEvent& event);\r
- void OnButtonAddressBook(wxCommandEvent& event);\r
- void OnSetFocusAddress(wxFocusEvent& event);\r
- void OnMouseEventsAddress(wxMouseEvent& event);\r
- void OnButtonChange(wxCommandEvent& event);\r
- void OnButtonCopy(wxCommandEvent& event);\r
- void OnListColBeginDrag(wxListEvent& event);\r
- void OnListItemActivated(wxListEvent& event);\r
- void OnListItemActivatedProductsSent(wxListEvent& event);\r
- void OnListItemActivatedOrdersSent(wxListEvent& event);\r
- void OnListItemActivatedOrdersReceived(wxListEvent& event);\r
- \r
-public:\r
- /** Constructor */\r
- CMainFrame(wxWindow* parent);\r
- ~CMainFrame();\r
-\r
- // Custom\r
- bool fRefreshListCtrl;\r
- bool fRefreshListCtrlRunning;\r
- bool fOnSetFocusAddress;\r
- unsigned int nListViewUpdated;\r
- bool fRefresh;\r
-\r
- void OnUIThreadCall(wxCommandEvent& event);\r
- int GetSortIndex(const string& strSort);\r
- void InsertLine(bool fNew, int nIndex, uint256 hashKey, string strSort, const wxString& str1, const wxString& str2, const wxString& str3, const wxString& str4, const wxString& str5);\r
- bool DeleteLine(uint256 hashKey);\r
- bool InsertTransaction(const CWalletTx& wtx, bool fNew, int nIndex=-1);\r
- void RefreshListCtrl();\r
- void RefreshStatusColumn();\r
-};\r
-\r
-\r
-\r
-\r
-class CTxDetailsDialog : public CTxDetailsDialogBase\r
-{\r
-protected:\r
- // Event handlers\r
- void OnButtonOK(wxCommandEvent& event);\r
-\r
-public:\r
- /** Constructor */\r
- CTxDetailsDialog(wxWindow* parent, CWalletTx wtx);\r
-\r
- // State\r
- CWalletTx wtx;\r
-};\r
-\r
-\r
-\r
-class COptionsDialog : public COptionsDialogBase\r
-{\r
-protected:\r
- // Event handlers\r
- void OnListBox(wxCommandEvent& event);\r
- void OnKillFocusTransactionFee(wxFocusEvent& event);\r
- void OnCheckBoxLimitProcessors(wxCommandEvent& event);\r
- void OnCheckBoxUseProxy(wxCommandEvent& event);\r
- void OnKillFocusProxy(wxFocusEvent& event);\r
-\r
- void OnButtonOK(wxCommandEvent& event);\r
- void OnButtonCancel(wxCommandEvent& event);\r
- void OnButtonApply(wxCommandEvent& event);\r
-\r
-public:\r
- /** Constructor */\r
- COptionsDialog(wxWindow* parent);\r
-\r
- // Custom\r
- bool fTmpStartOnSystemStartup;\r
- bool fTmpMinimizeOnClose;\r
- void SelectPage(int nPage);\r
- CAddress GetProxyAddr();\r
-};\r
-\r
-\r
-\r
-class CAboutDialog : public CAboutDialogBase\r
-{\r
-protected:\r
- // Event handlers\r
- void OnButtonOK(wxCommandEvent& event);\r
-\r
-public:\r
- /** Constructor */\r
- CAboutDialog(wxWindow* parent);\r
-};\r
-\r
-\r
-\r
-class CSendDialog : public CSendDialogBase\r
-{\r
-protected:\r
- // Event handlers\r
- void OnKeyDown(wxKeyEvent& event) { HandleCtrlA(event); }\r
- void OnTextAddress(wxCommandEvent& event);\r
- void OnKillFocusAmount(wxFocusEvent& event);\r
- void OnButtonAddressBook(wxCommandEvent& event);\r
- void OnButtonPaste(wxCommandEvent& event);\r
- void OnButtonSend(wxCommandEvent& event);\r
- void OnButtonCancel(wxCommandEvent& event);\r
- \r
-public:\r
- /** Constructor */\r
- CSendDialog(wxWindow* parent, const wxString& strAddress="");\r
-\r
- // Custom\r
- bool fEnabledPrev;\r
- string strFromSave;\r
- string strMessageSave;\r
-};\r
-\r
-\r
-\r
-class CSendingDialog : public CSendingDialogBase\r
-{\r
-public:\r
- // Event handlers\r
- void OnClose(wxCloseEvent& event);\r
- void OnButtonOK(wxCommandEvent& event);\r
- void OnButtonCancel(wxCommandEvent& event);\r
- void OnPaint(wxPaintEvent& event);\r
- \r
-public:\r
- /** Constructor */\r
- CSendingDialog(wxWindow* parent, const CAddress& addrIn, int64 nPriceIn, const CWalletTx& wtxIn);\r
- ~CSendingDialog();\r
-\r
- // State\r
- CAddress addr;\r
- int64 nPrice;\r
- CWalletTx wtx;\r
- wxDateTime start;\r
- char pszStatus[10000];\r
- bool fCanCancel;\r
- bool fAbort;\r
- bool fSuccess;\r
- bool fUIDone;\r
- bool fWorkDone;\r
-\r
- void Close();\r
- void Repaint();\r
- bool Status();\r
- bool Status(const string& str);\r
- bool Error(const string& str);\r
- void StartTransfer();\r
- void OnReply2(CDataStream& vRecv);\r
- void OnReply3(CDataStream& vRecv);\r
-};\r
-\r
-void SendingDialogStartTransfer(void* parg);\r
-void SendingDialogOnReply2(void* parg, CDataStream& vRecv);\r
-void SendingDialogOnReply3(void* parg, CDataStream& vRecv);\r
-\r
-\r
-\r
-class CYourAddressDialog : public CYourAddressDialogBase\r
-{\r
-protected:\r
- // Event handlers\r
- void OnListEndLabelEdit(wxListEvent& event);\r
- void OnListItemSelected(wxListEvent& event);\r
- void OnListItemActivated(wxListEvent& event);\r
- void OnButtonRename(wxCommandEvent& event);\r
- void OnButtonNew(wxCommandEvent& event);\r
- void OnButtonCopy(wxCommandEvent& event);\r
- void OnButtonOK(wxCommandEvent& event);\r
- void OnButtonCancel(wxCommandEvent& event);\r
- void OnClose(wxCloseEvent& event);\r
-\r
-public:\r
- /** Constructor */\r
- CYourAddressDialog(wxWindow* parent);\r
- CYourAddressDialog(wxWindow* parent, const string& strInitSelected);\r
-\r
- // Custom\r
- wxString GetAddress();\r
-};\r
-\r
-\r
-\r
-class CAddressBookDialog : public CAddressBookDialogBase\r
-{\r
-protected:\r
- // Event handlers\r
- void OnListEndLabelEdit(wxListEvent& event);\r
- void OnListItemSelected(wxListEvent& event);\r
- void OnListItemActivated(wxListEvent& event);\r
- void OnButtonEdit(wxCommandEvent& event);\r
- void OnButtonDelete(wxCommandEvent& event);\r
- void OnButtonNew(wxCommandEvent& event);\r
- void OnButtonCopy(wxCommandEvent& event);\r
- void OnButtonOK(wxCommandEvent& event);\r
- void OnButtonCancel(wxCommandEvent& event);\r
- void OnClose(wxCloseEvent& event);\r
-\r
-public:\r
- /** Constructor */\r
- CAddressBookDialog(wxWindow* parent, const wxString& strInitSelected, bool fSendingIn);\r
-\r
- // Custom\r
- bool fSending;\r
- wxString GetAddress();\r
- bool CheckIfMine(const string& strAddress, const string& strTitle);\r
-};\r
-\r
-\r
-\r
-class CGetTextFromUserDialog : public CGetTextFromUserDialogBase\r
-{\r
-protected:\r
- // Event handlers\r
- void OnButtonOK(wxCommandEvent& event) { EndModal(true); }\r
- void OnButtonCancel(wxCommandEvent& event) { EndModal(false); }\r
- void OnClose(wxCloseEvent& event) { EndModal(false); }\r
-\r
- void OnKeyDown(wxKeyEvent& event)\r
- {\r
- if (event.GetKeyCode() == '\r' || event.GetKeyCode() == WXK_NUMPAD_ENTER)\r
- EndModal(true);\r
- else\r
- HandleCtrlA(event);\r
- }\r
-\r
-public:\r
- /** Constructor */\r
- CGetTextFromUserDialog(wxWindow* parent,\r
- const string& strCaption,\r
- const string& strMessage1,\r
- const string& strValue1="",\r
- const string& strMessage2="",\r
- const string& strValue2="") : CGetTextFromUserDialogBase(parent, wxID_ANY, strCaption)\r
- {\r
- m_staticTextMessage1->SetLabel(strMessage1);\r
- m_textCtrl1->SetValue(strValue1);\r
- if (!strMessage2.empty())\r
- {\r
- m_staticTextMessage2->Show(true);\r
- m_staticTextMessage2->SetLabel(strMessage2);\r
- m_textCtrl2->Show(true);\r
- m_textCtrl2->SetValue(strValue2);\r
- SetSize(wxDefaultCoord, 180);\r
- }\r
- if (!fWindows)\r
- SetSize(1.14 * GetSize().GetWidth(), 1.14 * GetSize().GetHeight());\r
- }\r
-\r
- // Custom\r
- string GetValue() { return (string)m_textCtrl1->GetValue(); }\r
- string GetValue1() { return (string)m_textCtrl1->GetValue(); }\r
- string GetValue2() { return (string)m_textCtrl2->GetValue(); }\r
-};\r
-\r
-\r
-\r
-class CMyTaskBarIcon : public wxTaskBarIcon\r
-{\r
-protected:\r
- // Event handlers\r
- void OnLeftButtonDClick(wxTaskBarIconEvent& event);\r
- void OnMenuRestore(wxCommandEvent& event);\r
- void OnMenuOptions(wxCommandEvent& event);\r
- void OnUpdateUIGenerate(wxUpdateUIEvent& event);\r
- void OnMenuGenerate(wxCommandEvent& event);\r
- void OnMenuExit(wxCommandEvent& event);\r
-\r
-public:\r
- CMyTaskBarIcon() : wxTaskBarIcon()\r
- {\r
- Show(true);\r
- }\r
-\r
- void Show(bool fShow=true);\r
- void Hide();\r
- void Restore();\r
- void UpdateTooltip();\r
- virtual wxMenu* CreatePopupMenu();\r
-\r
-DECLARE_EVENT_TABLE()\r
-};\r
+// Copyright (c) 2009-2010 Satoshi Nakamoto
+// Distributed under the MIT/X11 software license, see the accompanying
+// file license.txt or http://www.opensource.org/licenses/mit-license.php.
+
+DECLARE_EVENT_TYPE(wxEVT_UITHREADCALL, -1)
+
+
+
+extern wxLocale g_locale;
+
+
+
+void HandleCtrlA(wxKeyEvent& event);
+void UIThreadCall(boost::function0<void>);
+int ThreadSafeMessageBox(const string& message, const string& caption="Message", int style=wxOK, wxWindow* parent=NULL, int x=-1, int y=-1);
+bool ThreadSafeAskFee(int64 nFeeRequired, const string& strCaption, wxWindow* parent);
+void CalledSetStatusBar(const string& strText, int nField);
+void MainFrameRepaint();
+void CreateMainWindow();
+void SetStartOnSystemStartup(bool fAutoStart);
+
+
+
+
+inline int MyMessageBox(const wxString& message, const wxString& caption="Message", int style=wxOK, wxWindow* parent=NULL, int x=-1, int y=-1)
+{
+#ifdef GUI
+ if (!fDaemon)
+ return wxMessageBox(message, caption, style, parent, x, y);
+#endif
+ printf("wxMessageBox %s: %s\n", string(caption).c_str(), string(message).c_str());
+ fprintf(stderr, "%s: %s\n", string(caption).c_str(), string(message).c_str());
+ return wxOK;
+}
+#define wxMessageBox MyMessageBox
+
+
+
+
+
+
+class CMainFrame : public CMainFrameBase
+{
+protected:
+ // Event handlers
+ void OnNotebookPageChanged(wxNotebookEvent& event);
+ void OnClose(wxCloseEvent& event);
+ void OnIconize(wxIconizeEvent& event);
+ void OnMouseEvents(wxMouseEvent& event);
+ void OnKeyDown(wxKeyEvent& event) { HandleCtrlA(event); }
+ void OnIdle(wxIdleEvent& event);
+ void OnPaint(wxPaintEvent& event);
+ void OnPaintListCtrl(wxPaintEvent& event);
+ void OnMenuFileExit(wxCommandEvent& event);
+ void OnMenuOptionsGenerate(wxCommandEvent& event);
+ void OnUpdateUIOptionsGenerate(wxUpdateUIEvent& event);
+ void OnMenuOptionsChangeYourAddress(wxCommandEvent& event);
+ void OnMenuOptionsOptions(wxCommandEvent& event);
+ void OnMenuHelpAbout(wxCommandEvent& event);
+ void OnButtonSend(wxCommandEvent& event);
+ void OnButtonAddressBook(wxCommandEvent& event);
+ void OnSetFocusAddress(wxFocusEvent& event);
+ void OnMouseEventsAddress(wxMouseEvent& event);
+ void OnButtonNew(wxCommandEvent& event);
+ void OnButtonCopy(wxCommandEvent& event);
+ void OnListColBeginDrag(wxListEvent& event);
+ void OnListItemActivated(wxListEvent& event);
+ void OnListItemActivatedProductsSent(wxListEvent& event);
+ void OnListItemActivatedOrdersSent(wxListEvent& event);
+ void OnListItemActivatedOrdersReceived(wxListEvent& event);
+
+public:
+ /** Constructor */
+ CMainFrame(wxWindow* parent);
+ ~CMainFrame();
+
+ // Custom
+ enum
+ {
+ ALL = 0,
+ SENTRECEIVED = 1,
+ SENT = 2,
+ RECEIVED = 3,
+ };
+ int nPage;
+ wxListCtrl* m_listCtrl;
+ bool fShowGenerated;
+ bool fShowSent;
+ bool fShowReceived;
+ bool fRefreshListCtrl;
+ bool fRefreshListCtrlRunning;
+ bool fOnSetFocusAddress;
+ unsigned int nListViewUpdated;
+ bool fRefresh;
+
+ void OnUIThreadCall(wxCommandEvent& event);
+ int GetSortIndex(const string& strSort);
+ void InsertLine(bool fNew, int nIndex, uint256 hashKey, string strSort, const wxColour& colour, const wxString& str1, const wxString& str2, const wxString& str3, const wxString& str4, const wxString& str5);
+ bool DeleteLine(uint256 hashKey);
+ bool InsertTransaction(const CWalletTx& wtx, bool fNew, int nIndex=-1);
+ void RefreshListCtrl();
+ void RefreshStatusColumn();
+};
+
+
+
+
+class CTxDetailsDialog : public CTxDetailsDialogBase
+{
+protected:
+ // Event handlers
+ void OnButtonOK(wxCommandEvent& event);
+
+public:
+ /** Constructor */
+ CTxDetailsDialog(wxWindow* parent, CWalletTx wtx);
+
+ // State
+ CWalletTx wtx;
+};
+
+
+
+class COptionsDialog : public COptionsDialogBase
+{
+protected:
+ // Event handlers
+ void OnListBox(wxCommandEvent& event);
+ void OnKillFocusTransactionFee(wxFocusEvent& event);
+ void OnCheckBoxLimitProcessors(wxCommandEvent& event);
+ void OnCheckBoxUseProxy(wxCommandEvent& event);
+ void OnKillFocusProxy(wxFocusEvent& event);
+
+ void OnButtonOK(wxCommandEvent& event);
+ void OnButtonCancel(wxCommandEvent& event);
+ void OnButtonApply(wxCommandEvent& event);
+
+public:
+ /** Constructor */
+ COptionsDialog(wxWindow* parent);
+
+ // Custom
+ bool fTmpStartOnSystemStartup;
+ bool fTmpMinimizeOnClose;
+ void SelectPage(int nPage);
+ CAddress GetProxyAddr();
+};
+
+
+
+class CAboutDialog : public CAboutDialogBase
+{
+protected:
+ // Event handlers
+ void OnButtonOK(wxCommandEvent& event);
+
+public:
+ /** Constructor */
+ CAboutDialog(wxWindow* parent);
+};
+
+
+
+class CSendDialog : public CSendDialogBase
+{
+protected:
+ // Event handlers
+ void OnKeyDown(wxKeyEvent& event) { HandleCtrlA(event); }
+ void OnKillFocusAmount(wxFocusEvent& event);
+ void OnButtonAddressBook(wxCommandEvent& event);
+ void OnButtonPaste(wxCommandEvent& event);
+ void OnButtonSend(wxCommandEvent& event);
+ void OnButtonCancel(wxCommandEvent& event);
+
+public:
+ /** Constructor */
+ CSendDialog(wxWindow* parent, const wxString& strAddress="");
+
+ // Custom
+ bool fEnabledPrev;
+ string strFromSave;
+ string strMessageSave;
+};
+
+
+
+class CSendingDialog : public CSendingDialogBase
+{
+public:
+ // Event handlers
+ void OnClose(wxCloseEvent& event);
+ void OnButtonOK(wxCommandEvent& event);
+ void OnButtonCancel(wxCommandEvent& event);
+ void OnPaint(wxPaintEvent& event);
+
+public:
+ /** Constructor */
+ CSendingDialog(wxWindow* parent, const CAddress& addrIn, int64 nPriceIn, const CWalletTx& wtxIn);
+ ~CSendingDialog();
+
+ // State
+ CAddress addr;
+ int64 nPrice;
+ CWalletTx wtx;
+ wxDateTime start;
+ char pszStatus[10000];
+ bool fCanCancel;
+ bool fAbort;
+ bool fSuccess;
+ bool fUIDone;
+ bool fWorkDone;
+
+ void Close();
+ void Repaint();
+ bool Status();
+ bool Status(const string& str);
+ bool Error(const string& str);
+ void StartTransfer();
+ void OnReply2(CDataStream& vRecv);
+ void OnReply3(CDataStream& vRecv);
+};
+
+void SendingDialogStartTransfer(void* parg);
+void SendingDialogOnReply2(void* parg, CDataStream& vRecv);
+void SendingDialogOnReply3(void* parg, CDataStream& vRecv);
+
+
+
+class CAddressBookDialog : public CAddressBookDialogBase
+{
+protected:
+ // Event handlers
+ void OnNotebookPageChanged(wxNotebookEvent& event);
+ void OnListEndLabelEdit(wxListEvent& event);
+ void OnListItemSelected(wxListEvent& event);
+ void OnListItemActivated(wxListEvent& event);
+ void OnButtonDelete(wxCommandEvent& event);
+ void OnButtonCopy(wxCommandEvent& event);
+ void OnButtonEdit(wxCommandEvent& event);
+ void OnButtonNew(wxCommandEvent& event);
+ void OnButtonOK(wxCommandEvent& event);
+ void OnButtonCancel(wxCommandEvent& event);
+ void OnClose(wxCloseEvent& event);
+
+public:
+ /** Constructor */
+ CAddressBookDialog(wxWindow* parent, const wxString& strInitSelected, int nPageIn, bool fDuringSendIn);
+
+ // Custom
+ enum
+ {
+ SENDING = 0,
+ RECEIVING = 1,
+ };
+ int nPage;
+ wxListCtrl* m_listCtrl;
+ bool fDuringSend;
+ wxString GetAddress();
+ wxString GetSelectedAddress();
+ wxString GetSelectedSendingAddress();
+ wxString GetSelectedReceivingAddress();
+ bool CheckIfMine(const string& strAddress, const string& strTitle);
+};
+
+
+
+class CGetTextFromUserDialog : public CGetTextFromUserDialogBase
+{
+protected:
+ // Event handlers
+ void OnButtonOK(wxCommandEvent& event) { EndModal(true); }
+ void OnButtonCancel(wxCommandEvent& event) { EndModal(false); }
+ void OnClose(wxCloseEvent& event) { EndModal(false); }
+
+ void OnKeyDown(wxKeyEvent& event)
+ {
+ if (event.GetKeyCode() == '\r' || event.GetKeyCode() == WXK_NUMPAD_ENTER)
+ EndModal(true);
+ else
+ HandleCtrlA(event);
+ }
+
+public:
+ /** Constructor */
+ CGetTextFromUserDialog(wxWindow* parent,
+ const string& strCaption,
+ const string& strMessage1,
+ const string& strValue1="",
+ const string& strMessage2="",
+ const string& strValue2="") : CGetTextFromUserDialogBase(parent, wxID_ANY, strCaption)
+ {
+ int x = GetSize().GetWidth();
+ int y = GetSize().GetHeight();
+ m_staticTextMessage1->SetLabel(strMessage1);
+ m_textCtrl1->SetValue(strValue1);
+ y += wxString(strMessage1).Freq('\n') * 14;
+ if (!strMessage2.empty())
+ {
+ m_staticTextMessage2->Show(true);
+ m_staticTextMessage2->SetLabel(strMessage2);
+ m_textCtrl2->Show(true);
+ m_textCtrl2->SetValue(strValue2);
+ y += 46 + wxString(strMessage2).Freq('\n') * 14;
+ }
+#ifndef __WXMSW__
+ x = x * 114 / 100;
+ y = y * 114 / 100;
+#endif
+ SetSize(x, y);
+ }
+
+ // Custom
+ string GetValue() { return (string)m_textCtrl1->GetValue(); }
+ string GetValue1() { return (string)m_textCtrl1->GetValue(); }
+ string GetValue2() { return (string)m_textCtrl2->GetValue(); }
+};
+
+
+
+class CMyTaskBarIcon : public wxTaskBarIcon
+{
+protected:
+ // Event handlers
+ void OnLeftButtonDClick(wxTaskBarIconEvent& event);
+ void OnMenuRestore(wxCommandEvent& event);
+ void OnMenuOptions(wxCommandEvent& event);
+ void OnUpdateUIGenerate(wxUpdateUIEvent& event);
+ void OnMenuGenerate(wxCommandEvent& event);
+ void OnMenuExit(wxCommandEvent& event);
+
+public:
+ CMyTaskBarIcon() : wxTaskBarIcon()
+ {
+ Show(true);
+ }
+
+ void Show(bool fShow=true);
+ void Hide();
+ void Restore();
+ void UpdateTooltip();
+ virtual wxMenu* CreatePopupMenu();
+
+DECLARE_EVENT_TABLE()
+};