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