Initial import
[olsrd.git] / gui / win32 / Main / MyDialog1.cpp
1 /*\r
2  * Windows GUI for olsr.org\r
3  * Copyright (C) 2004 Thomas Lopatic (thomas@lopatic.de)\r
4  *\r
5  * This file is part of olsr.org.\r
6  *\r
7  * olsr.org is free software; you can redistribute it and/or modify\r
8  * it under the terms of the GNU General Public License as published by\r
9  * the Free Software Foundation; either version 2 of the License, or\r
10  * (at your option) any later version.\r
11  *\r
12  * olsr.org is distributed in the hope that it will be useful,\r
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
15  * GNU General Public License for more details.\r
16  *\r
17  * You should have received a copy of the GNU General Public License\r
18  * along with olsr.org; if not, write to the Free Software\r
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
20  *\r
21  */\r
22 \r
23 #include "stdafx.h"\r
24 #include "Frontend.h"\r
25 #include "MyDialog1.h"\r
26 \r
27 #ifdef _DEBUG\r
28 #define new DEBUG_NEW\r
29 #undef THIS_FILE\r
30 static char THIS_FILE[] = __FILE__;\r
31 #endif\r
32 \r
33 MyDialog1::MyDialog1(CWnd* pParent)\r
34         : CDialog(MyDialog1::IDD, pParent)\r
35 {\r
36         //{{AFX_DATA_INIT(MyDialog1)\r
37         //}}AFX_DATA_INIT\r
38 }\r
39 \r
40 BOOL MyDialog1::Create(CWnd *Parent)\r
41 {\r
42         return CDialog::Create(MyDialog1::IDD, Parent);\r
43 }\r
44 \r
45 void MyDialog1::DoDataExchange(CDataExchange* pDX)\r
46 {\r
47         CDialog::DoDataExchange(pDX);\r
48         //{{AFX_DATA_MAP(MyDialog1)\r
49         DDX_Control(pDX, IDC_BUTTON4, m_SaveButton);\r
50         DDX_Control(pDX, IDC_BUTTON3, m_FreezeButton);\r
51         DDX_Control(pDX, IDC_BUTTON2, m_ContinueButton);\r
52         DDX_Control(pDX, IDC_BUTTON1, m_ClearButton);\r
53         DDX_Control(pDX, IDC_EDIT1, m_OutputWindow);\r
54         //}}AFX_DATA_MAP\r
55 }\r
56 \r
57 \r
58 BEGIN_MESSAGE_MAP(MyDialog1, CDialog)\r
59         //{{AFX_MSG_MAP(MyDialog1)\r
60         ON_BN_CLICKED(IDC_BUTTON1, OnClearButton)\r
61         ON_BN_CLICKED(IDC_BUTTON2, OnContinueButton)\r
62         ON_BN_CLICKED(IDC_BUTTON3, OnFreezeButton)\r
63         ON_WM_CTLCOLOR()\r
64         ON_BN_CLICKED(IDOK, OnOK)\r
65         ON_BN_CLICKED(IDCANCEL, OnCancel)\r
66         ON_BN_CLICKED(IDC_BUTTON4, OnSaveButton)\r
67         //}}AFX_MSG_MAP\r
68 END_MESSAGE_MAP()\r
69 \r
70 void MyDialog1::OnOK()\r
71 {\r
72 }\r
73 \r
74 void MyDialog1::OnCancel()\r
75 {\r
76 }\r
77 \r
78 void MyDialog1::AddOutputLine(CString Line)\r
79 {\r
80         CritSect.Lock();\r
81         Output += Line + "\r\n";\r
82         CritSect.Unlock();\r
83 \r
84         if (Frozen == 0)\r
85         {\r
86                 m_OutputWindow.SetWindowText(Output);\r
87                 m_OutputWindow.SetSel(Output.GetLength(), Output.GetLength());\r
88         }\r
89 }\r
90 \r
91 BOOL MyDialog1::OnInitDialog() \r
92 {\r
93         CDialog::OnInitDialog();\r
94         \r
95         CClientDC DevCont(&m_OutputWindow);\r
96 \r
97         EditFont.CreatePointFont(100, "Courier", NULL);\r
98         m_OutputWindow.SetFont(&EditFont);\r
99 \r
100         m_FreezeButton.EnableWindow(FALSE);\r
101         m_ContinueButton.EnableWindow(FALSE);\r
102 \r
103         Frozen = 0;\r
104 \r
105         WhiteBrush.CreateSolidBrush(RGB(255, 255, 255));\r
106 \r
107         return TRUE;\r
108 }\r
109 \r
110 void MyDialog1::OnClearButton() \r
111 {\r
112         CritSect.Lock();\r
113         Output.Empty();\r
114         CritSect.Unlock();\r
115 \r
116         m_OutputWindow.SetWindowText(Output);\r
117         m_OutputWindow.SetSel(0, 0);\r
118 }\r
119 \r
120 void MyDialog1::OnContinueButton()\r
121 {\r
122         CString Copy;\r
123         int Len;\r
124 \r
125         m_FreezeButton.EnableWindow(TRUE);\r
126         m_ContinueButton.EnableWindow(FALSE);\r
127 \r
128         Frozen = 0;\r
129 \r
130         CritSect.Lock();\r
131         Copy = Output;\r
132         Len = Output.GetLength();\r
133         CritSect.Unlock();\r
134 \r
135         m_OutputWindow.SetWindowText(Copy);\r
136         m_OutputWindow.SetSel(Len, Len);\r
137 }\r
138 \r
139 void MyDialog1::OnFreezeButton() \r
140 {\r
141         m_FreezeButton.EnableWindow(FALSE);\r
142         m_ContinueButton.EnableWindow(TRUE);\r
143 \r
144         Frozen = 1;\r
145 }\r
146 \r
147 void MyDialog1::HandleStart(void)\r
148 {\r
149         CString Copy;\r
150         int Len;\r
151 \r
152         m_FreezeButton.EnableWindow(TRUE);\r
153         m_ContinueButton.EnableWindow(FALSE);\r
154 \r
155         Frozen = 0;\r
156 \r
157         CritSect.Lock();\r
158         Copy = Output;\r
159         Len = Output.GetLength();\r
160         CritSect.Unlock();\r
161 \r
162         m_OutputWindow.SetWindowText(Copy);\r
163         m_OutputWindow.SetSel(Len, Len);\r
164 }\r
165 \r
166 void MyDialog1::HandleStop(void)\r
167 {\r
168         CString Copy;\r
169         int Len;\r
170 \r
171         m_FreezeButton.EnableWindow(FALSE);\r
172         m_ContinueButton.EnableWindow(FALSE);\r
173 \r
174         Frozen = 0;\r
175 \r
176         CritSect.Lock();\r
177         Copy = Output;\r
178         Len = Output.GetLength();\r
179         CritSect.Unlock();\r
180 \r
181         m_OutputWindow.SetWindowText(Copy);\r
182         m_OutputWindow.SetSel(Len, Len);\r
183 }\r
184 \r
185 HBRUSH MyDialog1::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) \r
186 {\r
187         HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);\r
188 \r
189         if (pWnd == &m_OutputWindow)\r
190         {\r
191                 pDC->SetBkColor(RGB(255, 255, 255));\r
192                 hbr = WhiteBrush;\r
193         }\r
194         \r
195         return hbr;\r
196 }\r
197 \r
198 void MyDialog1::OnSaveButton()\r
199 {\r
200         CString Copy;\r
201         int Len;\r
202         CFileDialog FileDialog(FALSE);\r
203         CString FileName = "OLSR log.txt";\r
204         CString PathName;\r
205         CFile File;\r
206 \r
207         CritSect.Lock();\r
208         Copy = Output;\r
209         Len = Output.GetLength();\r
210         CritSect.Unlock();\r
211 \r
212         FileDialog.m_ofn.lpstrFilter = "Text file (*.txt)\0*.txt\0";\r
213         FileDialog.m_ofn.nFilterIndex = 1;\r
214 \r
215         FileDialog.m_ofn.lpstrFile = FileName.GetBuffer(500);\r
216         FileDialog.m_ofn.nMaxFile = 500;\r
217 \r
218         if (FileDialog.DoModal() == IDOK)\r
219         {\r
220                 PathName = FileDialog.GetPathName();\r
221 \r
222                 if (File.Open(PathName, CFile::modeCreate | CFile::modeWrite |\r
223                         CFile::shareExclusive) == 0)\r
224                         AfxMessageBox("Cannot open logfile '" + PathName + "'.");\r
225 \r
226                 else\r
227                 {\r
228                         File.Write((const char *)Copy, Len);\r
229                         File.Close();\r
230                 }\r
231         }\r
232 \r
233         FileName.ReleaseBuffer();\r
234 }\r