Use a slightly smaller font.
[olsrd.git] / gui / win32 / Main / MyDialog1.cpp
1 /*\r
2  * The olsr.org Optimized Link-State Routing daemon (olsrd)\r
3  * Copyright (c) 2004, Thomas Lopatic (thomas@lopatic.de)\r
4  * All rights reserved.\r
5  *\r
6  * Redistribution and use in source and binary forms, with or without \r
7  * modification, are permitted provided that the following conditions \r
8  * are met:\r
9  *\r
10  * * Redistributions of source code must retain the above copyright \r
11  *   notice, this list of conditions and the following disclaimer.\r
12  * * Redistributions in binary form must reproduce the above copyright \r
13  *   notice, this list of conditions and the following disclaimer in \r
14  *   the documentation and/or other materials provided with the \r
15  *   distribution.\r
16  * * Neither the name of olsr.org, olsrd nor the names of its \r
17  *   contributors may be used to endorse or promote products derived \r
18  *   from this software without specific prior written permission.\r
19  *\r
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS \r
23  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE \r
24  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, \r
25  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, \r
26  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; \r
27  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER \r
28  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT \r
29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN \r
30  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \r
31  * POSSIBILITY OF SUCH DAMAGE.\r
32  *\r
33  * Visit http://www.olsr.org for more information.\r
34  *\r
35  * If you find this software useful feel free to make a donation\r
36  * to the project. For more information see the website or contact\r
37  * the copyright holders.\r
38  *\r
39  * $Id: MyDialog1.cpp,v 1.6 2004/11/24 16:46:21 tlopatic Exp $\r
40  */\r
41 \r
42 #include "stdafx.h"\r
43 #include "Frontend.h"\r
44 #include "MyDialog1.h"\r
45 \r
46 #ifdef _DEBUG\r
47 #define new DEBUG_NEW\r
48 #undef THIS_FILE\r
49 static char THIS_FILE[] = __FILE__;\r
50 #endif\r
51 \r
52 MyDialog1::MyDialog1(CWnd* pParent)\r
53         : CDialog(MyDialog1::IDD, pParent)\r
54 {\r
55         NumLines = 0;\r
56 \r
57         //{{AFX_DATA_INIT(MyDialog1)\r
58         //}}AFX_DATA_INIT\r
59 }\r
60 \r
61 BOOL MyDialog1::Create(CWnd *Parent)\r
62 {\r
63         return CDialog::Create(MyDialog1::IDD, Parent);\r
64 }\r
65 \r
66 void MyDialog1::DoDataExchange(CDataExchange* pDX)\r
67 {\r
68         CDialog::DoDataExchange(pDX);\r
69         //{{AFX_DATA_MAP(MyDialog1)\r
70         DDX_Control(pDX, IDC_BUTTON4, m_SaveButton);\r
71         DDX_Control(pDX, IDC_BUTTON3, m_FreezeButton);\r
72         DDX_Control(pDX, IDC_BUTTON2, m_ContinueButton);\r
73         DDX_Control(pDX, IDC_BUTTON1, m_ClearButton);\r
74         DDX_Control(pDX, IDC_EDIT1, m_OutputWindow);\r
75         //}}AFX_DATA_MAP\r
76 }\r
77 \r
78 \r
79 BEGIN_MESSAGE_MAP(MyDialog1, CDialog)\r
80         //{{AFX_MSG_MAP(MyDialog1)\r
81         ON_BN_CLICKED(IDC_BUTTON1, OnClearButton)\r
82         ON_BN_CLICKED(IDC_BUTTON2, OnContinueButton)\r
83         ON_BN_CLICKED(IDC_BUTTON3, OnFreezeButton)\r
84         ON_WM_CTLCOLOR()\r
85         ON_BN_CLICKED(IDOK, OnOK)\r
86         ON_BN_CLICKED(IDCANCEL, OnCancel)\r
87         ON_BN_CLICKED(IDC_BUTTON4, OnSaveButton)\r
88         //}}AFX_MSG_MAP\r
89 END_MESSAGE_MAP()\r
90 \r
91 void MyDialog1::OnOK()\r
92 {\r
93 }\r
94 \r
95 void MyDialog1::OnCancel()\r
96 {\r
97 }\r
98 \r
99 void MyDialog1::AddOutputLine(CString Line)\r
100 {\r
101         int Index;\r
102 \r
103         CritSect.Lock();\r
104 \r
105         Output += Line + "\r\n";\r
106 \r
107         if (NumLines == 1000)\r
108         {\r
109                 Index = Output.Find("\r\n");\r
110                 Output.Delete(0, Index + 2);\r
111         }\r
112 \r
113         else\r
114                 NumLines++;\r
115 \r
116         CritSect.Unlock();\r
117 \r
118         if (Frozen == 0)\r
119         {\r
120                 m_OutputWindow.SetWindowText(Output);\r
121                 m_OutputWindow.SetSel(Output.GetLength(), Output.GetLength());\r
122         }\r
123 }\r
124 \r
125 void MyDialog1::SetFrozen(int NewFrozen)\r
126 {\r
127         Frozen = NewFrozen;\r
128 }\r
129 \r
130 BOOL MyDialog1::OnInitDialog() \r
131 {\r
132         CDialog::OnInitDialog();\r
133         \r
134         CClientDC DevCont(&m_OutputWindow);\r
135 \r
136         EditFont.CreatePointFont(90, "Courier New", NULL);\r
137         m_OutputWindow.SetFont(&EditFont);\r
138 \r
139         m_FreezeButton.EnableWindow(FALSE);\r
140         m_ContinueButton.EnableWindow(FALSE);\r
141 \r
142         Frozen = 0;\r
143 \r
144         WhiteBrush.CreateSolidBrush(RGB(255, 255, 255));\r
145 \r
146         return TRUE;\r
147 }\r
148 \r
149 void MyDialog1::OnClearButton() \r
150 {\r
151         CritSect.Lock();\r
152         Output.Empty();\r
153         NumLines = 0;\r
154         CritSect.Unlock();\r
155 \r
156         m_OutputWindow.SetWindowText(Output);\r
157         m_OutputWindow.SetSel(0, 0);\r
158 }\r
159 \r
160 void MyDialog1::OnContinueButton()\r
161 {\r
162         CString Copy;\r
163         int Len;\r
164 \r
165         m_FreezeButton.EnableWindow(TRUE);\r
166         m_ContinueButton.EnableWindow(FALSE);\r
167 \r
168         Frozen = 0;\r
169 \r
170         CritSect.Lock();\r
171         Copy = Output;\r
172         Len = Output.GetLength();\r
173         CritSect.Unlock();\r
174 \r
175         m_OutputWindow.SetWindowText(Copy);\r
176         m_OutputWindow.SetSel(Len, Len);\r
177 }\r
178 \r
179 void MyDialog1::OnFreezeButton() \r
180 {\r
181         m_FreezeButton.EnableWindow(FALSE);\r
182         m_ContinueButton.EnableWindow(TRUE);\r
183 \r
184         Frozen = 1;\r
185 }\r
186 \r
187 void MyDialog1::HandleStart(void)\r
188 {\r
189         CString Copy;\r
190         int Len;\r
191 \r
192         m_FreezeButton.EnableWindow(TRUE);\r
193         m_ContinueButton.EnableWindow(FALSE);\r
194 \r
195         Frozen = 0;\r
196 \r
197         CritSect.Lock();\r
198         Copy = Output;\r
199         Len = Output.GetLength();\r
200         CritSect.Unlock();\r
201 \r
202         m_OutputWindow.SetWindowText(Copy);\r
203         m_OutputWindow.SetSel(Len, Len);\r
204 }\r
205 \r
206 void MyDialog1::HandleStop(void)\r
207 {\r
208         CString Copy;\r
209         int Len;\r
210 \r
211         m_FreezeButton.EnableWindow(FALSE);\r
212         m_ContinueButton.EnableWindow(FALSE);\r
213 \r
214         Frozen = 0;\r
215 \r
216         CritSect.Lock();\r
217         Copy = Output;\r
218         Len = Output.GetLength();\r
219         CritSect.Unlock();\r
220 \r
221         m_OutputWindow.SetWindowText(Copy);\r
222         m_OutputWindow.SetSel(Len, Len);\r
223 }\r
224 \r
225 HBRUSH MyDialog1::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) \r
226 {\r
227         HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);\r
228 \r
229         if (pWnd == &m_OutputWindow)\r
230         {\r
231                 pDC->SetBkColor(RGB(255, 255, 255));\r
232                 hbr = WhiteBrush;\r
233         }\r
234         \r
235         return hbr;\r
236 }\r
237 \r
238 void MyDialog1::OnSaveButton()\r
239 {\r
240         CString Copy;\r
241         int Len;\r
242         CFileDialog FileDialog(FALSE);\r
243         CString FileName = "OLSR log.txt";\r
244         CString PathName;\r
245         CFile File;\r
246 \r
247         CritSect.Lock();\r
248         Copy = Output;\r
249         Len = Output.GetLength();\r
250         CritSect.Unlock();\r
251 \r
252         FileDialog.m_ofn.lpstrFilter = "Text file (*.txt)\0*.txt\0";\r
253         FileDialog.m_ofn.nFilterIndex = 1;\r
254 \r
255         FileDialog.m_ofn.lpstrFile = FileName.GetBuffer(500);\r
256         FileDialog.m_ofn.nMaxFile = 500;\r
257 \r
258         if (FileDialog.DoModal() == IDOK)\r
259         {\r
260                 PathName = FileDialog.GetPathName();\r
261 \r
262                 if (File.Open(PathName, CFile::modeCreate | CFile::modeWrite |\r
263                         CFile::shareExclusive) == 0)\r
264                         AfxMessageBox("Cannot open logfile '" + PathName + "'.");\r
265 \r
266                 else\r
267                 {\r
268                         File.Write((const char *)Copy, Len);\r
269                         File.Close();\r
270                 }\r
271         }\r
272 \r
273         FileName.ReleaseBuffer();\r
274 }\r