1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Distributed under the MIT/X11 software license, see the accompanying
3 // file license.txt or http://www.opensource.org/licenses/mit-license.php.
5 DECLARE_EVENT_TYPE(wxEVT_UITHREADCALL
, -1)
9 extern wxLocale g_locale
;
13 void HandleCtrlA(wxKeyEvent
& event
);
14 void UIThreadCall(boost::function0
<void>);
15 int ThreadSafeMessageBox(const string
& message
, const string
& caption
="Message", int style
=wxOK
, wxWindow
* parent
=NULL
, int x
=-1, int y
=-1);
16 bool ThreadSafeAskFee(int64 nFeeRequired
, const string
& strCaption
, wxWindow
* parent
);
17 void CalledSetStatusBar(const string
& strText
, int nField
);
18 void MainFrameRepaint();
19 void CreateMainWindow();
20 void SetStartOnSystemStartup(bool fAutoStart
);
25 inline int MyMessageBox(const wxString
& message
, const wxString
& caption
="Message", int style
=wxOK
, wxWindow
* parent
=NULL
, int x
=-1, int y
=-1)
29 return wxMessageBox(message
, caption
, style
, parent
, x
, y
);
31 printf("wxMessageBox %s: %s\n", string(caption
).c_str(), string(message
).c_str());
32 fprintf(stderr
, "%s: %s\n", string(caption
).c_str(), string(message
).c_str());
35 #define wxMessageBox MyMessageBox
42 class CMainFrame
: public CMainFrameBase
46 void OnNotebookPageChanged(wxNotebookEvent
& event
);
47 void OnClose(wxCloseEvent
& event
);
48 void OnIconize(wxIconizeEvent
& event
);
49 void OnMouseEvents(wxMouseEvent
& event
);
50 void OnKeyDown(wxKeyEvent
& event
) { HandleCtrlA(event
); }
51 void OnIdle(wxIdleEvent
& event
);
52 void OnPaint(wxPaintEvent
& event
);
53 void OnPaintListCtrl(wxPaintEvent
& event
);
54 void OnMenuFileExit(wxCommandEvent
& event
);
55 void OnMenuOptionsGenerate(wxCommandEvent
& event
);
56 void OnUpdateUIOptionsGenerate(wxUpdateUIEvent
& event
);
57 void OnMenuOptionsChangeYourAddress(wxCommandEvent
& event
);
58 void OnMenuOptionsOptions(wxCommandEvent
& event
);
59 void OnMenuHelpAbout(wxCommandEvent
& event
);
60 void OnButtonSend(wxCommandEvent
& event
);
61 void OnButtonAddressBook(wxCommandEvent
& event
);
62 void OnSetFocusAddress(wxFocusEvent
& event
);
63 void OnMouseEventsAddress(wxMouseEvent
& event
);
64 void OnButtonNew(wxCommandEvent
& event
);
65 void OnButtonCopy(wxCommandEvent
& event
);
66 void OnListColBeginDrag(wxListEvent
& event
);
67 void OnListItemActivated(wxListEvent
& event
);
68 void OnListItemActivatedProductsSent(wxListEvent
& event
);
69 void OnListItemActivatedOrdersSent(wxListEvent
& event
);
70 void OnListItemActivatedOrdersReceived(wxListEvent
& event
);
74 CMainFrame(wxWindow
* parent
);
86 wxListCtrl
* m_listCtrl
;
90 bool fRefreshListCtrl
;
91 bool fRefreshListCtrlRunning
;
92 bool fOnSetFocusAddress
;
93 unsigned int nListViewUpdated
;
96 void OnUIThreadCall(wxCommandEvent
& event
);
97 int GetSortIndex(const string
& strSort
);
98 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
);
99 bool DeleteLine(uint256 hashKey
);
100 bool InsertTransaction(const CWalletTx
& wtx
, bool fNew
, int nIndex
=-1);
101 void RefreshListCtrl();
102 void RefreshStatusColumn();
108 class CTxDetailsDialog
: public CTxDetailsDialogBase
112 void OnButtonOK(wxCommandEvent
& event
);
116 CTxDetailsDialog(wxWindow
* parent
, CWalletTx wtx
);
124 class COptionsDialog
: public COptionsDialogBase
128 void OnListBox(wxCommandEvent
& event
);
129 void OnKillFocusTransactionFee(wxFocusEvent
& event
);
130 void OnCheckBoxLimitProcessors(wxCommandEvent
& event
);
131 void OnCheckBoxUseProxy(wxCommandEvent
& event
);
132 void OnKillFocusProxy(wxFocusEvent
& event
);
134 void OnButtonOK(wxCommandEvent
& event
);
135 void OnButtonCancel(wxCommandEvent
& event
);
136 void OnButtonApply(wxCommandEvent
& event
);
140 COptionsDialog(wxWindow
* parent
);
143 bool fTmpStartOnSystemStartup
;
144 bool fTmpMinimizeOnClose
;
145 void SelectPage(int nPage
);
146 CAddress
GetProxyAddr();
151 class CAboutDialog
: public CAboutDialogBase
155 void OnButtonOK(wxCommandEvent
& event
);
159 CAboutDialog(wxWindow
* parent
);
164 class CSendDialog
: public CSendDialogBase
168 void OnKeyDown(wxKeyEvent
& event
) { HandleCtrlA(event
); }
169 void OnTextAddress(wxCommandEvent
& event
);
170 void OnKillFocusAmount(wxFocusEvent
& event
);
171 void OnButtonAddressBook(wxCommandEvent
& event
);
172 void OnButtonPaste(wxCommandEvent
& event
);
173 void OnButtonSend(wxCommandEvent
& event
);
174 void OnButtonCancel(wxCommandEvent
& event
);
178 CSendDialog(wxWindow
* parent
, const wxString
& strAddress
="");
183 string strMessageSave
;
188 class CSendingDialog
: public CSendingDialogBase
192 void OnClose(wxCloseEvent
& event
);
193 void OnButtonOK(wxCommandEvent
& event
);
194 void OnButtonCancel(wxCommandEvent
& event
);
195 void OnPaint(wxPaintEvent
& event
);
199 CSendingDialog(wxWindow
* parent
, const CAddress
& addrIn
, int64 nPriceIn
, const CWalletTx
& wtxIn
);
207 char pszStatus
[10000];
217 bool Status(const string
& str
);
218 bool Error(const string
& str
);
219 void StartTransfer();
220 void OnReply2(CDataStream
& vRecv
);
221 void OnReply3(CDataStream
& vRecv
);
224 void SendingDialogStartTransfer(void* parg
);
225 void SendingDialogOnReply2(void* parg
, CDataStream
& vRecv
);
226 void SendingDialogOnReply3(void* parg
, CDataStream
& vRecv
);
230 class CAddressBookDialog
: public CAddressBookDialogBase
234 void OnNotebookPageChanged(wxNotebookEvent
& event
);
235 void OnListEndLabelEdit(wxListEvent
& event
);
236 void OnListItemSelected(wxListEvent
& event
);
237 void OnListItemActivated(wxListEvent
& event
);
238 void OnButtonDelete(wxCommandEvent
& event
);
239 void OnButtonCopy(wxCommandEvent
& event
);
240 void OnButtonEdit(wxCommandEvent
& event
);
241 void OnButtonNew(wxCommandEvent
& event
);
242 void OnButtonOK(wxCommandEvent
& event
);
243 void OnButtonCancel(wxCommandEvent
& event
);
244 void OnClose(wxCloseEvent
& event
);
248 CAddressBookDialog(wxWindow
* parent
, const wxString
& strInitSelected
, int nPageIn
, bool fDuringSendIn
);
257 wxListCtrl
* m_listCtrl
;
259 wxString
GetAddress();
260 wxString
GetSelectedAddress();
261 wxString
GetSelectedSendingAddress();
262 wxString
GetSelectedReceivingAddress();
263 bool CheckIfMine(const string
& strAddress
, const string
& strTitle
);
268 class CGetTextFromUserDialog
: public CGetTextFromUserDialogBase
272 void OnButtonOK(wxCommandEvent
& event
) { EndModal(true); }
273 void OnButtonCancel(wxCommandEvent
& event
) { EndModal(false); }
274 void OnClose(wxCloseEvent
& event
) { EndModal(false); }
276 void OnKeyDown(wxKeyEvent
& event
)
278 if (event
.GetKeyCode() == '\r' || event
.GetKeyCode() == WXK_NUMPAD_ENTER
)
286 CGetTextFromUserDialog(wxWindow
* parent
,
287 const string
& strCaption
,
288 const string
& strMessage1
,
289 const string
& strValue1
="",
290 const string
& strMessage2
="",
291 const string
& strValue2
="") : CGetTextFromUserDialogBase(parent
, wxID_ANY
, strCaption
)
293 int x
= GetSize().GetWidth();
294 int y
= GetSize().GetHeight();
295 m_staticTextMessage1
->SetLabel(strMessage1
);
296 m_textCtrl1
->SetValue(strValue1
);
297 y
+= wxString(strMessage1
).Freq('\n') * 14;
298 if (!strMessage2
.empty())
300 m_staticTextMessage2
->Show(true);
301 m_staticTextMessage2
->SetLabel(strMessage2
);
302 m_textCtrl2
->Show(true);
303 m_textCtrl2
->SetValue(strValue2
);
304 y
+= 46 + wxString(strMessage2
).Freq('\n') * 14;
314 string
GetValue() { return (string
)m_textCtrl1
->GetValue(); }
315 string
GetValue1() { return (string
)m_textCtrl1
->GetValue(); }
316 string
GetValue2() { return (string
)m_textCtrl2
->GetValue(); }
321 class CMyTaskBarIcon
: public wxTaskBarIcon
325 void OnLeftButtonDClick(wxTaskBarIconEvent
& event
);
326 void OnMenuRestore(wxCommandEvent
& event
);
327 void OnMenuOptions(wxCommandEvent
& event
);
328 void OnUpdateUIGenerate(wxUpdateUIEvent
& event
);
329 void OnMenuGenerate(wxCommandEvent
& event
);
330 void OnMenuExit(wxCommandEvent
& event
);
333 CMyTaskBarIcon() : wxTaskBarIcon()
338 void Show(bool fShow
=true);
341 void UpdateTooltip();
342 virtual wxMenu
* CreatePopupMenu();
344 DECLARE_EVENT_TABLE()