Better wording for transaction fee notification messages
[novacoin.git] / ui.h
diff --git a/ui.h b/ui.h
index a919c36..af97d5a 100644 (file)
--- a/ui.h
+++ b/ui.h
-// Copyright (c) 2009 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
-DECLARE_EVENT_TYPE(wxEVT_REPLY1, -1)\r
-DECLARE_EVENT_TYPE(wxEVT_REPLY2, -1)\r
-DECLARE_EVENT_TYPE(wxEVT_REPLY3, -1)\r
-\r
-\r
-\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
-extern void HandleCtrlA(wxKeyEvent& event);\r
-extern string FormatTxStatus(const CWalletTx& wtx);\r
-extern void UIThreadCall(boost::function0<void>);\r
-extern void MainFrameRepaint();\r
-extern void Shutdown(void* parg);\r
-extern 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 OnButtonCopy(wxCommandEvent& event);\r
-    void OnButtonChange(wxCommandEvent& event);\r
-    void OnListColBeginDrag(wxListEvent& event);\r
-    void OnListItemActivatedAllTransactions(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 OnCheckBoxMinimizeToTray(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 CProductsDialog : public CProductsDialogBase\r
-{\r
-protected:\r
-    // Event handlers\r
-    void OnKeyDown(wxKeyEvent& event) { HandleCtrlA(event); }\r
-    void OnCombobox(wxCommandEvent& event);\r
-    void OnButtonSearch(wxCommandEvent& event);\r
-    void OnListItemActivated(wxListEvent& event);\r
-\r
-public:\r
-    /** Constructor */\r
-    CProductsDialog(wxWindow* parent);\r
-\r
-    // Custom\r
-    vector<CProduct> m_vProduct;\r
-};\r
-\r
-\r
-\r
-class CEditProductDialog : public CEditProductDialogBase\r
-{\r
-protected:\r
-    // Event handlers\r
-    void OnKeyDown(wxKeyEvent& event) { HandleCtrlA(event); }\r
-    void OnButtonDel0(wxCommandEvent& event);\r
-    void OnButtonDel1(wxCommandEvent& event);\r
-    void OnButtonDel2(wxCommandEvent& event);\r
-    void OnButtonDel3(wxCommandEvent& event);\r
-    void OnButtonDel4(wxCommandEvent& event);\r
-    void OnButtonDel5(wxCommandEvent& event);\r
-    void OnButtonDel6(wxCommandEvent& event);\r
-    void OnButtonDel7(wxCommandEvent& event);\r
-    void OnButtonDel8(wxCommandEvent& event);\r
-    void OnButtonDel9(wxCommandEvent& event);\r
-    void OnButtonDel10(wxCommandEvent& event);\r
-    void OnButtonDel11(wxCommandEvent& event);\r
-    void OnButtonDel12(wxCommandEvent& event);\r
-    void OnButtonDel13(wxCommandEvent& event);\r
-    void OnButtonDel14(wxCommandEvent& event);\r
-    void OnButtonDel15(wxCommandEvent& event);\r
-    void OnButtonDel16(wxCommandEvent& event);\r
-    void OnButtonDel17(wxCommandEvent& event);\r
-    void OnButtonDel18(wxCommandEvent& event);\r
-    void OnButtonDel19(wxCommandEvent& event);\r
-    void OnButtonAddField(wxCommandEvent& event);\r
-    void OnButtonSend(wxCommandEvent& event);\r
-    void OnButtonPreview(wxCommandEvent& event);\r
-    void OnButtonCancel(wxCommandEvent& event);\r
-\r
-public:\r
-    /** Constructor */\r
-    CEditProductDialog(wxWindow* parent);\r
-\r
-    // Custom\r
-    enum { FIELDS_MAX = 20 };\r
-    wxTextCtrl* m_textCtrlLabel[FIELDS_MAX];\r
-    wxTextCtrl* m_textCtrlField[FIELDS_MAX];\r
-    wxButton*   m_buttonDel[FIELDS_MAX];\r
-\r
-    void LayoutAll();\r
-    void ShowLine(int i, bool fShow=true);\r
-    void OnButtonDel(wxCommandEvent& event, int n);\r
-    void SetProduct(const CProduct& productIn);\r
-    void GetProduct(CProduct& product);\r
-\r
-};\r
-\r
-\r
-\r
-class CViewProductDialog : public CViewProductDialogBase\r
-{\r
-protected:\r
-    // Event handlers\r
-    void OnButtonSubmitForm(wxCommandEvent& event);\r
-    void OnButtonCancelForm(wxCommandEvent& event);\r
-    void OnButtonBack(wxCommandEvent& event);\r
-    void OnButtonNext(wxCommandEvent& event);\r
-    void OnButtonCancel(wxCommandEvent& event);\r
-\r
-public:\r
-    /** Constructor */\r
-    CViewProductDialog(wxWindow* parent, const CProduct& productIn);\r
-    ~CViewProductDialog();\r
-\r
-    // Custom\r
-    CProduct product;\r
-    enum { FIELDS_MAX = 20 };\r
-    wxStaticText* m_staticTextLabel[FIELDS_MAX];\r
-    wxTextCtrl*   m_textCtrlField[FIELDS_MAX];\r
-    wxChoice*     m_choiceField[FIELDS_MAX];\r
-\r
-    void GetOrder(CWalletTx& order);\r
-    void UpdateProductDisplay(bool fDetails);\r
-    void OnReply1(wxCommandEvent& event);\r
-};\r
-\r
-\r
-\r
-class CViewOrderDialog : public CViewOrderDialogBase\r
-{\r
-protected:\r
-    // Event handlers\r
-    void OnButtonOK(wxCommandEvent& event);\r
-\r
-public:\r
-    /** Constructor */\r
-    CViewOrderDialog(wxWindow* parent, CWalletTx order, bool fReceived);\r
-\r
-    // Custom\r
-    bool fReceived;\r
-};\r
-\r
-\r
-\r
-class CEditReviewDialog : public CEditReviewDialogBase\r
-{\r
-protected:\r
-    // Event handlers\r
-    void OnKeyDown(wxKeyEvent& event) { HandleCtrlA(event); }\r
-    void OnButtonSubmit(wxCommandEvent& event);\r
-    void OnButtonCancel(wxCommandEvent& event);\r
-\r
-public:\r
-    /** Constructor */\r
-    CEditReviewDialog(wxWindow* parent);\r
-\r
-    // Custom\r
-    void GetReview(CReview& review);\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
-    }\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 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()
+};