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