fix display of new generated coins, fix assertion in bitcoinminer
[novacoin.git] / ui.h
1 // Copyright (c) 2009 Satoshi Nakamoto\r
2 // Distributed under the MIT/X11 software license, see the accompanying\r
3 // file license.txt or http://www.opensource.org/licenses/mit-license.php.\r
4 \r
5 \r
6 \r
7 \r
8 DECLARE_EVENT_TYPE(wxEVT_CROSSTHREADCALL, -1)\r
9 DECLARE_EVENT_TYPE(wxEVT_REPLY1, -1)\r
10 DECLARE_EVENT_TYPE(wxEVT_REPLY2, -1)\r
11 DECLARE_EVENT_TYPE(wxEVT_REPLY3, -1)\r
12 DECLARE_EVENT_TYPE(wxEVT_TABLEADDED, -1)\r
13 DECLARE_EVENT_TYPE(wxEVT_TABLEUPDATED, -1)\r
14 DECLARE_EVENT_TYPE(wxEVT_TABLEDELETED, -1)\r
15 \r
16 enum\r
17 {\r
18     UICALL_ADDORDER = 1,\r
19     UICALL_UPDATEORDER,\r
20 };\r
21 \r
22 \r
23 \r
24 \r
25 extern map<string, string> mapArgs;\r
26 \r
27 // Settings\r
28 extern int fShowGenerated;\r
29 extern int fMinimizeToTray;\r
30 extern int fMinimizeOnClose;\r
31 \r
32 \r
33 \r
34 extern void HandleCtrlA(wxKeyEvent& event);\r
35 extern string DateTimeStr(int64 nTime);\r
36 extern string FormatTxStatus(const CWalletTx& wtx);\r
37 extern void CrossThreadCall(int nID, void* pdata);\r
38 extern void MainFrameRepaint();\r
39 extern void Shutdown(void* parg);\r
40 \r
41 \r
42 \r
43 \r
44 \r
45 \r
46 class CMainFrame : public CMainFrameBase\r
47 {\r
48 protected:\r
49     // Event handlers\r
50     void OnClose(wxCloseEvent& event);\r
51     void OnIconize(wxIconizeEvent& event);\r
52     void OnMouseEvents(wxMouseEvent& event);\r
53     void OnKeyDown(wxKeyEvent& event) { HandleCtrlA(event); }\r
54     void OnIdle(wxIdleEvent& event);\r
55     void OnPaint(wxPaintEvent& event);\r
56     void OnPaintListCtrl(wxPaintEvent& event);\r
57     void OnMenuFileExit(wxCommandEvent& event);\r
58     void OnMenuViewShowGenerated(wxCommandEvent& event);\r
59     void OnUpdateUIViewShowGenerated(wxUpdateUIEvent& event);\r
60     void OnMenuOptionsGenerate(wxCommandEvent& event);\r
61     void OnUpdateUIOptionsGenerate(wxUpdateUIEvent& event);\r
62     void OnMenuOptionsChangeYourAddress(wxCommandEvent& event);\r
63     void OnMenuOptionsOptions(wxCommandEvent& event);\r
64     void OnMenuHelpAbout(wxCommandEvent& event);\r
65     void OnButtonSend(wxCommandEvent& event);\r
66     void OnButtonAddressBook(wxCommandEvent& event);\r
67     void OnSetFocusAddress(wxFocusEvent& event);\r
68     void OnMouseEventsAddress(wxMouseEvent& event);\r
69     void OnButtonCopy(wxCommandEvent& event);\r
70     void OnButtonChange(wxCommandEvent& event);\r
71     void OnListColBeginDrag(wxListEvent& event);\r
72     void OnListItemActivatedAllTransactions(wxListEvent& event);\r
73     void OnListItemActivatedProductsSent(wxListEvent& event);\r
74     void OnListItemActivatedOrdersSent(wxListEvent& event);\r
75     void OnListItemActivatedOrdersReceived(wxListEvent& event);\r
76         \r
77 public:\r
78     /** Constructor */\r
79     CMainFrame(wxWindow* parent);\r
80     ~CMainFrame();\r
81 \r
82     // Custom\r
83     bool fRefreshListCtrl;\r
84     bool fRefreshListCtrlRunning;\r
85     bool fOnSetFocusAddress;\r
86     CBlockIndex* pindexBestLast;\r
87     set<uint256> setUnmaturedDisplayed;\r
88 \r
89     void OnCrossThreadCall(wxCommandEvent& event);\r
90     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
91     bool DeleteLine(uint256 hashKey);\r
92     void InsertTransaction(const CWalletTx& wtx, bool fNew, int nIndex=-1);\r
93     void RefreshListCtrl();\r
94     void RefreshStatus();\r
95 };\r
96 \r
97 \r
98 \r
99 \r
100 class CTxDetailsDialog : public CTxDetailsDialogBase\r
101 {\r
102 protected:\r
103     // Event handlers\r
104     void OnButtonOK(wxCommandEvent& event);\r
105 \r
106 public:\r
107     /** Constructor */\r
108     CTxDetailsDialog(wxWindow* parent, CWalletTx wtx);\r
109 \r
110     // State\r
111     CWalletTx wtx;\r
112 };\r
113 \r
114 \r
115 \r
116 class COptionsDialog : public COptionsDialogBase\r
117 {\r
118 protected:\r
119     // Event handlers\r
120     void OnListBox(wxCommandEvent& event);\r
121     void OnKillFocusTransactionFee(wxFocusEvent& event);\r
122     void OnCheckBoxLimitProcessors(wxCommandEvent& event);\r
123     void OnCheckBoxMinimizeToTray(wxCommandEvent& event);\r
124     void OnButtonOK(wxCommandEvent& event);\r
125     void OnButtonCancel(wxCommandEvent& event);\r
126     void OnButtonApply(wxCommandEvent& event);\r
127 \r
128 public:\r
129     /** Constructor */\r
130     COptionsDialog(wxWindow* parent);\r
131 \r
132     // Custom\r
133     bool fTmpStartOnSystemStartup;\r
134     bool fTmpMinimizeOnClose;\r
135     void SelectPage(int nPage);\r
136 };\r
137 \r
138 \r
139 \r
140 class CAboutDialog : public CAboutDialogBase\r
141 {\r
142 protected:\r
143     // Event handlers\r
144     void OnButtonOK(wxCommandEvent& event);\r
145 \r
146 public:\r
147     /** Constructor */\r
148     CAboutDialog(wxWindow* parent);\r
149 };\r
150 \r
151 \r
152 \r
153 class CSendDialog : public CSendDialogBase\r
154 {\r
155 protected:\r
156     // Event handlers\r
157     void OnKeyDown(wxKeyEvent& event) { HandleCtrlA(event); }\r
158     void OnTextAddress(wxCommandEvent& event);\r
159     void OnKillFocusAmount(wxFocusEvent& event);\r
160     void OnButtonAddressBook(wxCommandEvent& event);\r
161     void OnButtonPaste(wxCommandEvent& event);\r
162     void OnButtonSend(wxCommandEvent& event);\r
163     void OnButtonCancel(wxCommandEvent& event);\r
164         \r
165 public:\r
166     /** Constructor */\r
167     CSendDialog(wxWindow* parent, const wxString& strAddress="");\r
168 \r
169     // Custom\r
170     bool fEnabledPrev;\r
171     string strFromSave;\r
172     string strMessageSave;\r
173 };\r
174 \r
175 \r
176 \r
177 class CSendingDialog : public CSendingDialogBase\r
178 {\r
179 public:\r
180     // Event handlers\r
181     void OnClose(wxCloseEvent& event);\r
182     void OnButtonOK(wxCommandEvent& event);\r
183     void OnButtonCancel(wxCommandEvent& event);\r
184     void OnPaint(wxPaintEvent& event);\r
185         \r
186 public:\r
187     /** Constructor */\r
188     CSendingDialog(wxWindow* parent, const CAddress& addrIn, int64 nPriceIn, const CWalletTx& wtxIn);\r
189     ~CSendingDialog();\r
190 \r
191     // State\r
192     CAddress addr;\r
193     int64 nPrice;\r
194     CWalletTx wtx;\r
195     wxDateTime start;\r
196     string strStatus;\r
197     bool fCanCancel;\r
198     bool fAbort;\r
199     bool fSuccess;\r
200     bool fUIDone;\r
201     bool fWorkDone;\r
202 \r
203     void Close();\r
204     void Repaint();\r
205     bool Status();\r
206     bool Status(const string& str);\r
207     bool Error(const string& str);\r
208     void StartTransfer();\r
209     void OnReply2(CDataStream& vRecv);\r
210     void OnReply3(CDataStream& vRecv);\r
211 };\r
212 \r
213 void SendingDialogStartTransfer(void* parg);\r
214 void SendingDialogOnReply2(void* parg, CDataStream& vRecv);\r
215 void SendingDialogOnReply3(void* parg, CDataStream& vRecv);\r
216 \r
217 \r
218 \r
219 class CYourAddressDialog : public CYourAddressDialogBase\r
220 {\r
221 protected:\r
222     // Event handlers\r
223     void OnListEndLabelEdit(wxListEvent& event);\r
224     void OnListItemSelected(wxListEvent& event);\r
225     void OnListItemActivated(wxListEvent& event);\r
226     void OnButtonRename(wxCommandEvent& event);\r
227     void OnButtonNew(wxCommandEvent& event);\r
228     void OnButtonCopy(wxCommandEvent& event);\r
229     void OnButtonOK(wxCommandEvent& event);\r
230     void OnButtonCancel(wxCommandEvent& event);\r
231     void OnClose(wxCloseEvent& event);\r
232 \r
233 public:\r
234     /** Constructor */\r
235     CYourAddressDialog(wxWindow* parent);\r
236     CYourAddressDialog(wxWindow* parent, const string& strInitSelected);\r
237 \r
238     // Custom\r
239     wxString GetAddress();\r
240 };\r
241 \r
242 \r
243 \r
244 class CAddressBookDialog : public CAddressBookDialogBase\r
245 {\r
246 protected:\r
247     // Event handlers\r
248     void OnListEndLabelEdit(wxListEvent& event);\r
249     void OnListItemSelected(wxListEvent& event);\r
250     void OnListItemActivated(wxListEvent& event);\r
251     void OnButtonEdit(wxCommandEvent& event);\r
252     void OnButtonDelete(wxCommandEvent& event);\r
253     void OnButtonNew(wxCommandEvent& event);\r
254     void OnButtonCopy(wxCommandEvent& event);\r
255     void OnButtonOK(wxCommandEvent& event);\r
256     void OnButtonCancel(wxCommandEvent& event);\r
257     void OnClose(wxCloseEvent& event);\r
258 \r
259 public:\r
260     /** Constructor */\r
261     CAddressBookDialog(wxWindow* parent, const wxString& strInitSelected, bool fSendingIn);\r
262 \r
263     // Custom\r
264     bool fSending;\r
265     wxString GetAddress();\r
266     bool CheckIfMine(const string& strAddress, const string& strTitle);\r
267 };\r
268 \r
269 \r
270 \r
271 class CProductsDialog : public CProductsDialogBase\r
272 {\r
273 protected:\r
274     // Event handlers\r
275     void OnKeyDown(wxKeyEvent& event) { HandleCtrlA(event); }\r
276     void OnCombobox(wxCommandEvent& event);\r
277     void OnButtonSearch(wxCommandEvent& event);\r
278     void OnListItemActivated(wxListEvent& event);\r
279 \r
280 public:\r
281     /** Constructor */\r
282     CProductsDialog(wxWindow* parent);\r
283 \r
284     // Custom\r
285     vector<CProduct> m_vProduct;\r
286 };\r
287 \r
288 \r
289 \r
290 class CEditProductDialog : public CEditProductDialogBase\r
291 {\r
292 protected:\r
293     // Event handlers\r
294     void OnKeyDown(wxKeyEvent& event) { HandleCtrlA(event); }\r
295     void OnButtonDel0(wxCommandEvent& event);\r
296     void OnButtonDel1(wxCommandEvent& event);\r
297     void OnButtonDel2(wxCommandEvent& event);\r
298     void OnButtonDel3(wxCommandEvent& event);\r
299     void OnButtonDel4(wxCommandEvent& event);\r
300     void OnButtonDel5(wxCommandEvent& event);\r
301     void OnButtonDel6(wxCommandEvent& event);\r
302     void OnButtonDel7(wxCommandEvent& event);\r
303     void OnButtonDel8(wxCommandEvent& event);\r
304     void OnButtonDel9(wxCommandEvent& event);\r
305     void OnButtonDel10(wxCommandEvent& event);\r
306     void OnButtonDel11(wxCommandEvent& event);\r
307     void OnButtonDel12(wxCommandEvent& event);\r
308     void OnButtonDel13(wxCommandEvent& event);\r
309     void OnButtonDel14(wxCommandEvent& event);\r
310     void OnButtonDel15(wxCommandEvent& event);\r
311     void OnButtonDel16(wxCommandEvent& event);\r
312     void OnButtonDel17(wxCommandEvent& event);\r
313     void OnButtonDel18(wxCommandEvent& event);\r
314     void OnButtonDel19(wxCommandEvent& event);\r
315     void OnButtonAddField(wxCommandEvent& event);\r
316     void OnButtonSend(wxCommandEvent& event);\r
317     void OnButtonPreview(wxCommandEvent& event);\r
318     void OnButtonCancel(wxCommandEvent& event);\r
319 \r
320 public:\r
321     /** Constructor */\r
322     CEditProductDialog(wxWindow* parent);\r
323 \r
324     // Custom\r
325     enum { FIELDS_MAX = 20 };\r
326     wxTextCtrl* m_textCtrlLabel[FIELDS_MAX];\r
327     wxTextCtrl* m_textCtrlField[FIELDS_MAX];\r
328     wxButton*   m_buttonDel[FIELDS_MAX];\r
329 \r
330     void LayoutAll();\r
331     void ShowLine(int i, bool fShow=true);\r
332     void OnButtonDel(wxCommandEvent& event, int n);\r
333     void SetProduct(const CProduct& productIn);\r
334     void GetProduct(CProduct& product);\r
335 \r
336 };\r
337 \r
338 \r
339 \r
340 class CViewProductDialog : public CViewProductDialogBase\r
341 {\r
342 protected:\r
343     // Event handlers\r
344     void OnButtonSubmitForm(wxCommandEvent& event);\r
345     void OnButtonCancelForm(wxCommandEvent& event);\r
346     void OnButtonBack(wxCommandEvent& event);\r
347     void OnButtonNext(wxCommandEvent& event);\r
348     void OnButtonCancel(wxCommandEvent& event);\r
349 \r
350 public:\r
351     /** Constructor */\r
352     CViewProductDialog(wxWindow* parent, const CProduct& productIn);\r
353     ~CViewProductDialog();\r
354 \r
355     // Custom\r
356     CProduct product;\r
357     enum { FIELDS_MAX = 20 };\r
358     wxStaticText* m_staticTextLabel[FIELDS_MAX];\r
359     wxTextCtrl*   m_textCtrlField[FIELDS_MAX];\r
360     wxChoice*     m_choiceField[FIELDS_MAX];\r
361 \r
362     void GetOrder(CWalletTx& order);\r
363     void UpdateProductDisplay(bool fDetails);\r
364     void OnReply1(wxCommandEvent& event);\r
365 };\r
366 \r
367 \r
368 \r
369 class CViewOrderDialog : public CViewOrderDialogBase\r
370 {\r
371 protected:\r
372     // Event handlers\r
373     void OnButtonOK(wxCommandEvent& event);\r
374 \r
375 public:\r
376     /** Constructor */\r
377     CViewOrderDialog(wxWindow* parent, CWalletTx order, bool fReceived);\r
378 \r
379     // Custom\r
380     bool fReceived;\r
381 };\r
382 \r
383 \r
384 \r
385 class CEditReviewDialog : public CEditReviewDialogBase\r
386 {\r
387 protected:\r
388     // Event handlers\r
389     void OnKeyDown(wxKeyEvent& event) { HandleCtrlA(event); }\r
390     void OnButtonSubmit(wxCommandEvent& event);\r
391     void OnButtonCancel(wxCommandEvent& event);\r
392 \r
393 public:\r
394     /** Constructor */\r
395     CEditReviewDialog(wxWindow* parent);\r
396 \r
397     // Custom\r
398     void GetReview(CReview& review);\r
399 };\r
400 \r
401 \r
402 \r
403 class CGetTextFromUserDialog : public CGetTextFromUserDialogBase\r
404 {\r
405 protected:\r
406     // Event handlers\r
407     void OnButtonOK(wxCommandEvent& event)     { EndModal(true); }\r
408     void OnButtonCancel(wxCommandEvent& event) { EndModal(false); }\r
409     void OnClose(wxCloseEvent& event)          { EndModal(false); }\r
410 \r
411     void OnKeyDown(wxKeyEvent& event)\r
412     {\r
413         if (event.GetKeyCode() == '\r' || event.GetKeyCode() == WXK_NUMPAD_ENTER)\r
414             EndModal(true);\r
415         else\r
416             HandleCtrlA(event);\r
417     }\r
418 \r
419 public:\r
420     /** Constructor */\r
421     CGetTextFromUserDialog(wxWindow* parent,\r
422                            const string& strCaption,\r
423                            const string& strMessage1,\r
424                            const string& strValue1="",\r
425                            const string& strMessage2="",\r
426                            const string& strValue2="") : CGetTextFromUserDialogBase(parent, wxID_ANY, strCaption)\r
427     {\r
428         m_staticTextMessage1->SetLabel(strMessage1);\r
429         m_textCtrl1->SetValue(strValue1);\r
430         if (!strMessage2.empty())\r
431         {\r
432             m_staticTextMessage2->Show(true);\r
433             m_staticTextMessage2->SetLabel(strMessage2);\r
434             m_textCtrl2->Show(true);\r
435             m_textCtrl2->SetValue(strValue2);\r
436             SetSize(wxDefaultCoord, 180);\r
437         }\r
438     }\r
439 \r
440     // Custom\r
441     string GetValue()  { return (string)m_textCtrl1->GetValue(); }\r
442     string GetValue1() { return (string)m_textCtrl1->GetValue(); }\r
443     string GetValue2() { return (string)m_textCtrl2->GetValue(); }\r
444 };\r
445 \r
446 \r
447 \r
448 class CMyTaskBarIcon : public wxTaskBarIcon\r
449 {\r
450 protected:\r
451     // Event handlers\r
452     void OnLeftButtonDClick(wxTaskBarIconEvent& event);\r
453     void OnMenuRestore(wxCommandEvent& event);\r
454     void OnUpdateUIGenerate(wxUpdateUIEvent& event);\r
455     void OnMenuGenerate(wxCommandEvent& event);\r
456     void OnMenuExit(wxCommandEvent& event);\r
457 \r
458 public:\r
459     CMyTaskBarIcon() : wxTaskBarIcon()\r
460     {\r
461         Show(true);\r
462     }\r
463 \r
464     void Show(bool fShow=true);\r
465     void Hide();\r
466     void Restore();\r
467     void UpdateTooltip();\r
468     virtual wxMenu* CreatePopupMenu();\r
469 \r
470 DECLARE_EVENT_TABLE()\r
471 };\r
472 \r
473 \r
474 \r
475 \r
476 \r
477 \r