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