flush wallet.dat, multi-proc, reorg options, revert to startup folder shortcut
[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     void InsertTransaction(const CWalletTx& wtx, bool fNew, int nIndex=-1);\r
92     void RefreshListCtrl();\r
93     void RefreshStatus();\r
94 };\r
95 \r
96 \r
97 \r
98 \r
99 class CTxDetailsDialog : public CTxDetailsDialogBase\r
100 {\r
101 protected:\r
102     // Event handlers\r
103     void OnButtonOK(wxCommandEvent& event);\r
104 \r
105 public:\r
106     /** Constructor */\r
107     CTxDetailsDialog(wxWindow* parent, CWalletTx wtx);\r
108 \r
109     // State\r
110     CWalletTx wtx;\r
111 };\r
112 \r
113 \r
114 \r
115 class COptionsDialog : public COptionsDialogBase\r
116 {\r
117 protected:\r
118     // Event handlers\r
119     void OnListBox(wxCommandEvent& event);\r
120     void OnKillFocusTransactionFee(wxFocusEvent& event);\r
121     void OnCheckBoxLimitProcessors(wxCommandEvent& event);\r
122     void OnCheckBoxMinimizeToTray(wxCommandEvent& event);\r
123     void OnButtonOK(wxCommandEvent& event);\r
124     void OnButtonCancel(wxCommandEvent& event);\r
125     void OnButtonApply(wxCommandEvent& event);\r
126 \r
127 public:\r
128     /** Constructor */\r
129     COptionsDialog(wxWindow* parent);\r
130 \r
131     // Custom\r
132     bool fTmpStartOnSystemStartup;\r
133     bool fTmpMinimizeOnClose;\r
134     void SelectPage(int nPage);\r
135 };\r
136 \r
137 \r
138 \r
139 class CAboutDialog : public CAboutDialogBase\r
140 {\r
141 protected:\r
142     // Event handlers\r
143     void OnButtonOK(wxCommandEvent& event);\r
144 \r
145 public:\r
146     /** Constructor */\r
147     CAboutDialog(wxWindow* parent);\r
148 };\r
149 \r
150 \r
151 \r
152 class CSendDialog : public CSendDialogBase\r
153 {\r
154 protected:\r
155     // Event handlers\r
156     void OnKeyDown(wxKeyEvent& event) { HandleCtrlA(event); }\r
157     void OnTextAddress(wxCommandEvent& event);\r
158     void OnKillFocusAmount(wxFocusEvent& event);\r
159     void OnButtonAddressBook(wxCommandEvent& event);\r
160     void OnButtonPaste(wxCommandEvent& event);\r
161     void OnButtonSend(wxCommandEvent& event);\r
162     void OnButtonCancel(wxCommandEvent& event);\r
163         \r
164 public:\r
165     /** Constructor */\r
166     CSendDialog(wxWindow* parent, const wxString& strAddress="");\r
167 \r
168     // Custom\r
169     bool fEnabledPrev;\r
170     string strFromSave;\r
171     string strMessageSave;\r
172 };\r
173 \r
174 \r
175 \r
176 class CSendingDialog : public CSendingDialogBase\r
177 {\r
178 public:\r
179     // Event handlers\r
180     void OnClose(wxCloseEvent& event);\r
181     void OnButtonOK(wxCommandEvent& event);\r
182     void OnButtonCancel(wxCommandEvent& event);\r
183     void OnPaint(wxPaintEvent& event);\r
184         \r
185 public:\r
186     /** Constructor */\r
187     CSendingDialog(wxWindow* parent, const CAddress& addrIn, int64 nPriceIn, const CWalletTx& wtxIn);\r
188     ~CSendingDialog();\r
189 \r
190     // State\r
191     CAddress addr;\r
192     int64 nPrice;\r
193     CWalletTx wtx;\r
194     wxDateTime start;\r
195     string strStatus;\r
196     bool fCanCancel;\r
197     bool fAbort;\r
198     bool fSuccess;\r
199     bool fUIDone;\r
200     bool fWorkDone;\r
201 \r
202     void Close();\r
203     void Repaint();\r
204     bool Status();\r
205     bool Status(const string& str);\r
206     bool Error(const string& str);\r
207     void StartTransfer();\r
208     void OnReply2(CDataStream& vRecv);\r
209     void OnReply3(CDataStream& vRecv);\r
210 };\r
211 \r
212 void SendingDialogStartTransfer(void* parg);\r
213 void SendingDialogOnReply2(void* parg, CDataStream& vRecv);\r
214 void SendingDialogOnReply3(void* parg, CDataStream& vRecv);\r
215 \r
216 \r
217 \r
218 class CYourAddressDialog : public CYourAddressDialogBase\r
219 {\r
220 protected:\r
221     // Event handlers\r
222     void OnListEndLabelEdit(wxListEvent& event);\r
223     void OnListItemSelected(wxListEvent& event);\r
224     void OnListItemActivated(wxListEvent& event);\r
225     void OnButtonRename(wxCommandEvent& event);\r
226     void OnButtonNew(wxCommandEvent& event);\r
227     void OnButtonCopy(wxCommandEvent& event);\r
228     void OnButtonOK(wxCommandEvent& event);\r
229     void OnButtonCancel(wxCommandEvent& event);\r
230     void OnClose(wxCloseEvent& event);\r
231 \r
232 public:\r
233     /** Constructor */\r
234     CYourAddressDialog(wxWindow* parent);\r
235     CYourAddressDialog(wxWindow* parent, const string& strInitSelected);\r
236 \r
237     // Custom\r
238     wxString GetAddress();\r
239 };\r
240 \r
241 \r
242 \r
243 class CAddressBookDialog : public CAddressBookDialogBase\r
244 {\r
245 protected:\r
246     // Event handlers\r
247     void OnListEndLabelEdit(wxListEvent& event);\r
248     void OnListItemSelected(wxListEvent& event);\r
249     void OnListItemActivated(wxListEvent& event);\r
250     void OnButtonEdit(wxCommandEvent& event);\r
251     void OnButtonDelete(wxCommandEvent& event);\r
252     void OnButtonNew(wxCommandEvent& event);\r
253     void OnButtonCopy(wxCommandEvent& event);\r
254     void OnButtonOK(wxCommandEvent& event);\r
255     void OnButtonCancel(wxCommandEvent& event);\r
256     void OnClose(wxCloseEvent& event);\r
257 \r
258 public:\r
259     /** Constructor */\r
260     CAddressBookDialog(wxWindow* parent, const wxString& strInitSelected, bool fSendingIn);\r
261 \r
262     // Custom\r
263     bool fSending;\r
264     wxString GetAddress();\r
265     bool CheckIfMine(const string& strAddress, const string& strTitle);\r
266 };\r
267 \r
268 \r
269 \r
270 class CProductsDialog : public CProductsDialogBase\r
271 {\r
272 protected:\r
273     // Event handlers\r
274     void OnKeyDown(wxKeyEvent& event) { HandleCtrlA(event); }\r
275     void OnCombobox(wxCommandEvent& event);\r
276     void OnButtonSearch(wxCommandEvent& event);\r
277     void OnListItemActivated(wxListEvent& event);\r
278 \r
279 public:\r
280     /** Constructor */\r
281     CProductsDialog(wxWindow* parent);\r
282 \r
283     // Custom\r
284     vector<CProduct> m_vProduct;\r
285 };\r
286 \r
287 \r
288 \r
289 class CEditProductDialog : public CEditProductDialogBase\r
290 {\r
291 protected:\r
292     // Event handlers\r
293     void OnKeyDown(wxKeyEvent& event) { HandleCtrlA(event); }\r
294     void OnButtonDel0(wxCommandEvent& event);\r
295     void OnButtonDel1(wxCommandEvent& event);\r
296     void OnButtonDel2(wxCommandEvent& event);\r
297     void OnButtonDel3(wxCommandEvent& event);\r
298     void OnButtonDel4(wxCommandEvent& event);\r
299     void OnButtonDel5(wxCommandEvent& event);\r
300     void OnButtonDel6(wxCommandEvent& event);\r
301     void OnButtonDel7(wxCommandEvent& event);\r
302     void OnButtonDel8(wxCommandEvent& event);\r
303     void OnButtonDel9(wxCommandEvent& event);\r
304     void OnButtonDel10(wxCommandEvent& event);\r
305     void OnButtonDel11(wxCommandEvent& event);\r
306     void OnButtonDel12(wxCommandEvent& event);\r
307     void OnButtonDel13(wxCommandEvent& event);\r
308     void OnButtonDel14(wxCommandEvent& event);\r
309     void OnButtonDel15(wxCommandEvent& event);\r
310     void OnButtonDel16(wxCommandEvent& event);\r
311     void OnButtonDel17(wxCommandEvent& event);\r
312     void OnButtonDel18(wxCommandEvent& event);\r
313     void OnButtonDel19(wxCommandEvent& event);\r
314     void OnButtonAddField(wxCommandEvent& event);\r
315     void OnButtonSend(wxCommandEvent& event);\r
316     void OnButtonPreview(wxCommandEvent& event);\r
317     void OnButtonCancel(wxCommandEvent& event);\r
318 \r
319 public:\r
320     /** Constructor */\r
321     CEditProductDialog(wxWindow* parent);\r
322 \r
323     // Custom\r
324     enum { FIELDS_MAX = 20 };\r
325     wxTextCtrl* m_textCtrlLabel[FIELDS_MAX];\r
326     wxTextCtrl* m_textCtrlField[FIELDS_MAX];\r
327     wxButton*   m_buttonDel[FIELDS_MAX];\r
328 \r
329     void LayoutAll();\r
330     void ShowLine(int i, bool fShow=true);\r
331     void OnButtonDel(wxCommandEvent& event, int n);\r
332     void SetProduct(const CProduct& productIn);\r
333     void GetProduct(CProduct& product);\r
334 \r
335 };\r
336 \r
337 \r
338 \r
339 class CViewProductDialog : public CViewProductDialogBase\r
340 {\r
341 protected:\r
342     // Event handlers\r
343     void OnButtonSubmitForm(wxCommandEvent& event);\r
344     void OnButtonCancelForm(wxCommandEvent& event);\r
345     void OnButtonBack(wxCommandEvent& event);\r
346     void OnButtonNext(wxCommandEvent& event);\r
347     void OnButtonCancel(wxCommandEvent& event);\r
348 \r
349 public:\r
350     /** Constructor */\r
351     CViewProductDialog(wxWindow* parent, const CProduct& productIn);\r
352     ~CViewProductDialog();\r
353 \r
354     // Custom\r
355     CProduct product;\r
356     enum { FIELDS_MAX = 20 };\r
357     wxStaticText* m_staticTextLabel[FIELDS_MAX];\r
358     wxTextCtrl*   m_textCtrlField[FIELDS_MAX];\r
359     wxChoice*     m_choiceField[FIELDS_MAX];\r
360 \r
361     void GetOrder(CWalletTx& order);\r
362     void UpdateProductDisplay(bool fDetails);\r
363     void OnReply1(wxCommandEvent& event);\r
364 };\r
365 \r
366 \r
367 \r
368 class CViewOrderDialog : public CViewOrderDialogBase\r
369 {\r
370 protected:\r
371     // Event handlers\r
372     void OnButtonOK(wxCommandEvent& event);\r
373 \r
374 public:\r
375     /** Constructor */\r
376     CViewOrderDialog(wxWindow* parent, CWalletTx order, bool fReceived);\r
377 \r
378     // Custom\r
379     bool fReceived;\r
380 };\r
381 \r
382 \r
383 \r
384 class CEditReviewDialog : public CEditReviewDialogBase\r
385 {\r
386 protected:\r
387     // Event handlers\r
388     void OnKeyDown(wxKeyEvent& event) { HandleCtrlA(event); }\r
389     void OnButtonSubmit(wxCommandEvent& event);\r
390     void OnButtonCancel(wxCommandEvent& event);\r
391 \r
392 public:\r
393     /** Constructor */\r
394     CEditReviewDialog(wxWindow* parent);\r
395 \r
396     // Custom\r
397     void GetReview(CReview& review);\r
398 };\r
399 \r
400 \r
401 \r
402 class CGetTextFromUserDialog : public CGetTextFromUserDialogBase\r
403 {\r
404 protected:\r
405     // Event handlers\r
406     void OnButtonOK(wxCommandEvent& event)     { EndModal(true); }\r
407     void OnButtonCancel(wxCommandEvent& event) { EndModal(false); }\r
408     void OnClose(wxCloseEvent& event)          { EndModal(false); }\r
409 \r
410     void OnKeyDown(wxKeyEvent& event)\r
411     {\r
412         if (event.GetKeyCode() == '\r' || event.GetKeyCode() == WXK_NUMPAD_ENTER)\r
413             EndModal(true);\r
414         else\r
415             HandleCtrlA(event);\r
416     }\r
417 \r
418 public:\r
419     /** Constructor */\r
420     CGetTextFromUserDialog(wxWindow* parent,\r
421                            const string& strCaption,\r
422                            const string& strMessage1,\r
423                            const string& strValue1="",\r
424                            const string& strMessage2="",\r
425                            const string& strValue2="") : CGetTextFromUserDialogBase(parent, wxID_ANY, strCaption)\r
426     {\r
427         m_staticTextMessage1->SetLabel(strMessage1);\r
428         m_textCtrl1->SetValue(strValue1);\r
429         if (!strMessage2.empty())\r
430         {\r
431             m_staticTextMessage2->Show(true);\r
432             m_staticTextMessage2->SetLabel(strMessage2);\r
433             m_textCtrl2->Show(true);\r
434             m_textCtrl2->SetValue(strValue2);\r
435             SetSize(wxDefaultCoord, 180);\r
436         }\r
437     }\r
438 \r
439     // Custom\r
440     string GetValue()  { return (string)m_textCtrl1->GetValue(); }\r
441     string GetValue1() { return (string)m_textCtrl1->GetValue(); }\r
442     string GetValue2() { return (string)m_textCtrl2->GetValue(); }\r
443 };\r
444 \r
445 \r
446 \r
447 class CMyTaskBarIcon : public wxTaskBarIcon\r
448 {\r
449 protected:\r
450     // Event handlers\r
451     void OnLeftButtonDClick(wxTaskBarIconEvent& event);\r
452     void OnMenuRestore(wxCommandEvent& event);\r
453     void OnUpdateUIGenerate(wxUpdateUIEvent& event);\r
454     void OnMenuGenerate(wxCommandEvent& event);\r
455     void OnMenuExit(wxCommandEvent& event);\r
456 \r
457 public:\r
458     CMyTaskBarIcon() : wxTaskBarIcon()\r
459     {\r
460         Show(true);\r
461     }\r
462 \r
463     void Show(bool fShow=true);\r
464     void Hide();\r
465     void Restore();\r
466     void UpdateTooltip();\r
467     virtual wxMenu* CreatePopupMenu();\r
468 \r
469 DECLARE_EVENT_TABLE()\r
470 };\r
471 \r
472 \r
473 \r
474 \r
475 \r
476 \r