Better wording for transaction fee notification messages
[novacoin.git] / src / ui.h
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.
4
5 DECLARE_EVENT_TYPE(wxEVT_UITHREADCALL, -1)
6
7
8
9 extern wxLocale g_locale;
10
11
12
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);
21
22
23
24
25 inline int MyMessageBox(const wxString& message, const wxString& caption="Message", int style=wxOK, wxWindow* parent=NULL, int x=-1, int y=-1)
26 {
27 #ifdef GUI
28     if (!fDaemon)
29         return wxMessageBox(message, caption, style, parent, x, y);
30 #endif
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());
33     return wxOK;
34 }
35 #define wxMessageBox  MyMessageBox
36
37
38
39
40
41
42 class CMainFrame : public CMainFrameBase
43 {
44 protected:
45     // Event handlers
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);
71         
72 public:
73     /** Constructor */
74     CMainFrame(wxWindow* parent);
75     ~CMainFrame();
76
77     // Custom
78     enum
79     {
80         ALL = 0,
81         SENTRECEIVED = 1,
82         SENT = 2,
83         RECEIVED = 3,
84     };
85     int nPage;
86     wxListCtrl* m_listCtrl;
87     bool fShowGenerated;
88     bool fShowSent;
89     bool fShowReceived;
90     bool fRefreshListCtrl;
91     bool fRefreshListCtrlRunning;
92     bool fOnSetFocusAddress;
93     unsigned int nListViewUpdated;
94     bool fRefresh;
95
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();
103 };
104
105
106
107
108 class CTxDetailsDialog : public CTxDetailsDialogBase
109 {
110 protected:
111     // Event handlers
112     void OnButtonOK(wxCommandEvent& event);
113
114 public:
115     /** Constructor */
116     CTxDetailsDialog(wxWindow* parent, CWalletTx wtx);
117
118     // State
119     CWalletTx wtx;
120 };
121
122
123
124 class COptionsDialog : public COptionsDialogBase
125 {
126 protected:
127     // Event handlers
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);
133
134     void OnButtonOK(wxCommandEvent& event);
135     void OnButtonCancel(wxCommandEvent& event);
136     void OnButtonApply(wxCommandEvent& event);
137
138 public:
139     /** Constructor */
140     COptionsDialog(wxWindow* parent);
141
142     // Custom
143     bool fTmpStartOnSystemStartup;
144     bool fTmpMinimizeOnClose;
145     void SelectPage(int nPage);
146     CAddress GetProxyAddr();
147 };
148
149
150
151 class CAboutDialog : public CAboutDialogBase
152 {
153 protected:
154     // Event handlers
155     void OnButtonOK(wxCommandEvent& event);
156
157 public:
158     /** Constructor */
159     CAboutDialog(wxWindow* parent);
160 };
161
162
163
164 class CSendDialog : public CSendDialogBase
165 {
166 protected:
167     // Event handlers
168     void OnKeyDown(wxKeyEvent& event) { HandleCtrlA(event); }
169     void OnKillFocusAmount(wxFocusEvent& event);
170     void OnButtonAddressBook(wxCommandEvent& event);
171     void OnButtonPaste(wxCommandEvent& event);
172     void OnButtonSend(wxCommandEvent& event);
173     void OnButtonCancel(wxCommandEvent& event);
174         
175 public:
176     /** Constructor */
177     CSendDialog(wxWindow* parent, const wxString& strAddress="");
178
179     // Custom
180     bool fEnabledPrev;
181     string strFromSave;
182     string strMessageSave;
183 };
184
185
186
187 class CSendingDialog : public CSendingDialogBase
188 {
189 public:
190     // Event handlers
191     void OnClose(wxCloseEvent& event);
192     void OnButtonOK(wxCommandEvent& event);
193     void OnButtonCancel(wxCommandEvent& event);
194     void OnPaint(wxPaintEvent& event);
195         
196 public:
197     /** Constructor */
198     CSendingDialog(wxWindow* parent, const CAddress& addrIn, int64 nPriceIn, const CWalletTx& wtxIn);
199     ~CSendingDialog();
200
201     // State
202     CAddress addr;
203     int64 nPrice;
204     CWalletTx wtx;
205     wxDateTime start;
206     char pszStatus[10000];
207     bool fCanCancel;
208     bool fAbort;
209     bool fSuccess;
210     bool fUIDone;
211     bool fWorkDone;
212
213     void Close();
214     void Repaint();
215     bool Status();
216     bool Status(const string& str);
217     bool Error(const string& str);
218     void StartTransfer();
219     void OnReply2(CDataStream& vRecv);
220     void OnReply3(CDataStream& vRecv);
221 };
222
223 void SendingDialogStartTransfer(void* parg);
224 void SendingDialogOnReply2(void* parg, CDataStream& vRecv);
225 void SendingDialogOnReply3(void* parg, CDataStream& vRecv);
226
227
228
229 class CAddressBookDialog : public CAddressBookDialogBase
230 {
231 protected:
232     // Event handlers
233     void OnNotebookPageChanged(wxNotebookEvent& event);
234     void OnListEndLabelEdit(wxListEvent& event);
235     void OnListItemSelected(wxListEvent& event);
236     void OnListItemActivated(wxListEvent& event);
237     void OnButtonDelete(wxCommandEvent& event);
238     void OnButtonCopy(wxCommandEvent& event);
239     void OnButtonEdit(wxCommandEvent& event);
240     void OnButtonNew(wxCommandEvent& event);
241     void OnButtonOK(wxCommandEvent& event);
242     void OnButtonCancel(wxCommandEvent& event);
243     void OnClose(wxCloseEvent& event);
244
245 public:
246     /** Constructor */
247     CAddressBookDialog(wxWindow* parent, const wxString& strInitSelected, int nPageIn, bool fDuringSendIn);
248
249     // Custom
250     enum
251     {
252         SENDING = 0,
253         RECEIVING = 1,
254     };
255     int nPage;
256     wxListCtrl* m_listCtrl;
257     bool fDuringSend;
258     wxString GetAddress();
259     wxString GetSelectedAddress();
260     wxString GetSelectedSendingAddress();
261     wxString GetSelectedReceivingAddress();
262     bool CheckIfMine(const string& strAddress, const string& strTitle);
263 };
264
265
266
267 class CGetTextFromUserDialog : public CGetTextFromUserDialogBase
268 {
269 protected:
270     // Event handlers
271     void OnButtonOK(wxCommandEvent& event)     { EndModal(true); }
272     void OnButtonCancel(wxCommandEvent& event) { EndModal(false); }
273     void OnClose(wxCloseEvent& event)          { EndModal(false); }
274
275     void OnKeyDown(wxKeyEvent& event)
276     {
277         if (event.GetKeyCode() == '\r' || event.GetKeyCode() == WXK_NUMPAD_ENTER)
278             EndModal(true);
279         else
280             HandleCtrlA(event);
281     }
282
283 public:
284     /** Constructor */
285     CGetTextFromUserDialog(wxWindow* parent,
286                            const string& strCaption,
287                            const string& strMessage1,
288                            const string& strValue1="",
289                            const string& strMessage2="",
290                            const string& strValue2="") : CGetTextFromUserDialogBase(parent, wxID_ANY, strCaption)
291     {
292         int x = GetSize().GetWidth();
293         int y = GetSize().GetHeight();
294         m_staticTextMessage1->SetLabel(strMessage1);
295         m_textCtrl1->SetValue(strValue1);
296         y += wxString(strMessage1).Freq('\n') * 14;
297         if (!strMessage2.empty())
298         {
299             m_staticTextMessage2->Show(true);
300             m_staticTextMessage2->SetLabel(strMessage2);
301             m_textCtrl2->Show(true);
302             m_textCtrl2->SetValue(strValue2);
303             y += 46 + wxString(strMessage2).Freq('\n') * 14;
304         }
305 #ifndef __WXMSW__
306         x = x * 114 / 100;
307         y = y * 114 / 100;
308 #endif
309         SetSize(x, y);
310     }
311
312     // Custom
313     string GetValue()  { return (string)m_textCtrl1->GetValue(); }
314     string GetValue1() { return (string)m_textCtrl1->GetValue(); }
315     string GetValue2() { return (string)m_textCtrl2->GetValue(); }
316 };
317
318
319
320 class CMyTaskBarIcon : public wxTaskBarIcon
321 {
322 protected:
323     // Event handlers
324     void OnLeftButtonDClick(wxTaskBarIconEvent& event);
325     void OnMenuRestore(wxCommandEvent& event);
326     void OnMenuOptions(wxCommandEvent& event);
327     void OnUpdateUIGenerate(wxUpdateUIEvent& event);
328     void OnMenuGenerate(wxCommandEvent& event);
329     void OnMenuExit(wxCommandEvent& event);
330
331 public:
332     CMyTaskBarIcon() : wxTaskBarIcon()
333     {
334         Show(true);
335     }
336
337     void Show(bool fShow=true);
338     void Hide();
339     void Restore();
340     void UpdateTooltip();
341     virtual wxMenu* CreatePopupMenu();
342
343 DECLARE_EVENT_TABLE()
344 };