095a7c088c1990ecd1b084e610a6583b961f70e8
[olsrd.git] / gui / win32 / Main / MyDialog2.cpp
1 /*\r
2  * $Id: MyDialog2.cpp,v 1.5 2004/11/20 23:17:47 tlopatic Exp $\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 "MyDialog2.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 #define MAXIF 100\r
34 \r
35 MyDialog2::MyDialog2(CWnd* pParent)\r
36         : CDialog(MyDialog2::IDD, pParent)\r
37 {\r
38         Conf = NULL;\r
39 \r
40         //{{AFX_DATA_INIT(MyDialog2)\r
41         //}}AFX_DATA_INIT\r
42 }\r
43 \r
44 void MyDialog2::SetDebugLevel(int Level)\r
45 {\r
46         char LevelText[2];\r
47 \r
48         LevelText[0] = (char)(Level + '0');\r
49         LevelText[1] = 0;\r
50 \r
51         DebugLevel = Level;\r
52         m_DebugLevel.SetPos(Level);\r
53         m_DebugLevelText.SetWindowText(LevelText);\r
54 }\r
55 \r
56 BOOL MyDialog2::Create(CWnd *Parent)\r
57 {\r
58         return CDialog::Create(MyDialog2::IDD, Parent);\r
59 }\r
60 \r
61 void MyDialog2::DoDataExchange(CDataExchange* pDX)\r
62 {\r
63         CDialog::DoDataExchange(pDX);\r
64         //{{AFX_DATA_MAP(MyDialog2)\r
65         DDX_Control(pDX, IDC_RADIO2, m_EtxRadio2);\r
66         DDX_Control(pDX, IDC_RADIO1, m_EtxRadio1);\r
67         DDX_Control(pDX, IDC_EDIT14, m_EtxWindowSize);\r
68         DDX_Control(pDX, IDC_CHECK4, m_EtxCheck);\r
69         DDX_Control(pDX, IDC_CHECK3, m_Ipv6Check);\r
70         DDX_Control(pDX, IDC_CHECK2, m_InternetCheck);\r
71         DDX_Control(pDX, IDC_CHECK1, m_HystCheck);\r
72         DDX_Control(pDX, IDC_EDIT13, m_HystThresholdHigh);\r
73         DDX_Control(pDX, IDC_EDIT12, m_HystThresholdLow);\r
74         DDX_Control(pDX, IDC_EDIT11, m_HystScaling);\r
75         DDX_Control(pDX, IDC_EDIT10, m_HnaHold);\r
76         DDX_Control(pDX, IDC_EDIT9, m_MidHold);\r
77         DDX_Control(pDX, IDC_EDIT7, m_PollInt);\r
78         DDX_Control(pDX, IDC_EDIT6, m_TcHold);\r
79         DDX_Control(pDX, IDC_EDIT5, m_TcInt);\r
80         DDX_Control(pDX, IDC_EDIT4, m_HnaInt);\r
81         DDX_Control(pDX, IDC_EDIT3, m_MidInt);\r
82         DDX_Control(pDX, IDC_EDIT2, m_HelloHold);\r
83         DDX_Control(pDX, IDC_EDIT1, m_HelloInt);\r
84         DDX_Control(pDX, IDC_LIST1, m_InterfaceList);\r
85         DDX_Control(pDX, IDC_TEXT1, m_DebugLevelText);\r
86         DDX_Control(pDX, IDC_SLIDER2, m_DebugLevel);\r
87         //}}AFX_DATA_MAP\r
88 }\r
89 \r
90 BEGIN_MESSAGE_MAP(MyDialog2, CDialog)\r
91         //{{AFX_MSG_MAP(MyDialog2)\r
92         ON_WM_HSCROLL()\r
93         ON_BN_CLICKED(IDC_CHECK1, OnHystCheck)\r
94         ON_BN_CLICKED(IDC_BUTTON4, OnOpenButton)\r
95         ON_BN_CLICKED(IDC_BUTTON5, OnSaveButton)\r
96         ON_BN_CLICKED(IDC_BUTTON1, OnResetButton)\r
97         ON_BN_CLICKED(IDC_CHECK4, OnEtxCheck)\r
98         ON_BN_CLICKED(IDC_RADIO1, OnEtxRadio1)\r
99         ON_BN_CLICKED(IDC_RADIO2, OnEtxRadio2)\r
100         ON_BN_CLICKED(IDOK, OnOK)\r
101         ON_BN_CLICKED(IDCANCEL, OnCancel)\r
102         ON_EN_KILLFOCUS(IDC_EDIT14, OnKillfocusEtxWinSize)\r
103         //}}AFX_MSG_MAP\r
104 END_MESSAGE_MAP()\r
105 \r
106 void MyDialog2::OnOK()\r
107 {\r
108 }\r
109 \r
110 void MyDialog2::OnCancel()\r
111 {\r
112 }\r
113 \r
114 void MyDialog2::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) \r
115 {\r
116         if (pScrollBar == (CScrollBar *)&m_DebugLevel)\r
117                 SetDebugLevel(m_DebugLevel.GetPos());\r
118         \r
119         CDialog::OnHScroll(nSBCode, nPos, pScrollBar);\r
120 }\r
121 \r
122 void MyDialog2::Reset(void)\r
123 {\r
124         char PathName[MAX_PATH + 50];\r
125         char *Walker;\r
126         int i;\r
127 \r
128         ::GetModuleFileName(NULL, PathName, MAX_PATH);\r
129 \r
130         for (Walker = PathName; *Walker != 0; Walker++);\r
131         \r
132         while (*Walker != '\\')\r
133                 Walker--;\r
134 \r
135         lstrcpy(Walker + 1, "Default.olsr");\r
136 \r
137         if (OpenConfigFile(PathName) < 0)\r
138                 return;\r
139 \r
140         m_Ipv6Check.SetCheck(FALSE);\r
141 \r
142         if (Conf->interfaces == NULL)\r
143         {\r
144                 for (i = 0; i < Interfaces->GetSize(); i++)\r
145                 {\r
146                         if ((*IsWlan)[i] == "-")\r
147                                 m_InterfaceList.SetCheck(i, FALSE);\r
148 \r
149                         else\r
150                                 m_InterfaceList.SetCheck(i, TRUE);\r
151                 }\r
152         }\r
153 }\r
154 \r
155 BOOL MyDialog2::OnInitDialog() \r
156 {\r
157         int i;\r
158 \r
159         CDialog::OnInitDialog();\r
160         \r
161         m_DebugLevel.SetRange(0, 9, TRUE);\r
162 \r
163         m_InterfaceList.SetExtendedStyle(m_InterfaceList.GetExtendedStyle() |\r
164                         LVS_EX_CHECKBOXES);\r
165 \r
166         for (i = 0; i < Interfaces->GetSize(); i++)\r
167         {\r
168                 m_InterfaceList.InsertItem(i,\r
169                 (*Interfaces)[i] + " - " + (*Addresses)[i]);\r
170         }\r
171 \r
172         MIB_IPFORWARDROW IpFwdRow;\r
173 \r
174         if (::GetBestRoute(0, 0, &IpFwdRow) != NO_ERROR)\r
175                 m_InternetCheck.EnableWindow(FALSE);\r
176 \r
177         Reset();\r
178 \r
179         return TRUE;\r
180 }\r
181 \r
182 void MyDialog2::OnHystCheck() \r
183 {\r
184         BOOL EnaDis = m_HystCheck.GetCheck();\r
185 \r
186         m_HystThresholdLow.EnableWindow(EnaDis);\r
187         m_HystThresholdHigh.EnableWindow(EnaDis);\r
188         m_HystScaling.EnableWindow(EnaDis);\r
189 }\r
190 \r
191 void MyDialog2::OnEtxCheck() \r
192 {\r
193         BOOL EnaDis = m_EtxCheck.GetCheck();\r
194 \r
195         m_EtxWindowSize.EnableWindow(EnaDis);\r
196         m_EtxRadio1.EnableWindow(EnaDis);\r
197         m_EtxRadio2.EnableWindow(EnaDis);\r
198 }\r
199 \r
200 int MyDialog2::OpenConfigFile(CString PathName)\r
201 {\r
202         struct hna4_entry *Hna4;\r
203         struct olsr_if *Int, *PrevInt;\r
204         struct olsr_msg_params *MsgPar;\r
205         int NumInt = m_InterfaceList.GetItemCount();\r
206         int i;\r
207         CString IntName;\r
208         CString Conv;\r
209 \r
210         if (Conf != NULL)\r
211                 olsrd_free_cnf(Conf);\r
212 \r
213         Conf = olsrd_parse_cnf(PathName);\r
214 \r
215         if (Conf == NULL)\r
216                 return -1;\r
217 \r
218         for (i = 0; i < NumInt; i++)\r
219                 m_InterfaceList.SetCheck(i, FALSE);\r
220 \r
221         for (Int = Conf->interfaces; Int != NULL; Int = Int->next)\r
222         {\r
223                 IntName = Int->name;\r
224                 IntName.MakeUpper();\r
225 \r
226                 for (i = 0; i < NumInt; i++)\r
227                 {\r
228                         if (m_InterfaceList.GetItemText(i, 0).Mid(0, 4) == IntName)\r
229                                 m_InterfaceList.SetCheck(i, TRUE);\r
230                 }\r
231         }\r
232 \r
233         Int = Conf->interfaces;\r
234 \r
235         MsgPar = &Int->cnf->hello_params;\r
236 \r
237         Conv.Format("%.2f", MsgPar->emission_interval);\r
238         m_HelloInt.SetWindowText(Conv);\r
239 \r
240         Conv.Format("%.2f", MsgPar->validity_time);\r
241         m_HelloHold.SetWindowText(Conv);\r
242 \r
243         MsgPar = &Int->cnf->tc_params;\r
244         \r
245         Conv.Format("%.2f", MsgPar->emission_interval);\r
246         m_TcInt.SetWindowText(Conv);\r
247 \r
248         Conv.Format("%.2f", MsgPar->validity_time);\r
249         m_TcHold.SetWindowText(Conv);\r
250 \r
251         MsgPar = &Int->cnf->mid_params;\r
252         \r
253         Conv.Format("%.2f", MsgPar->emission_interval);\r
254         m_MidInt.SetWindowText(Conv);\r
255 \r
256         Conv.Format("%.2f", MsgPar->validity_time);\r
257         m_MidHold.SetWindowText(Conv);\r
258 \r
259         MsgPar = &Int->cnf->hna_params;\r
260         \r
261         Conv.Format("%.2f", MsgPar->emission_interval);\r
262         m_HnaInt.SetWindowText(Conv);\r
263 \r
264         Conv.Format("%.2f", MsgPar->validity_time);\r
265         m_HnaHold.SetWindowText(Conv);\r
266 \r
267         SetDebugLevel(Conf->debug_level);\r
268 \r
269         Conv.Format("%.2f", Conf->pollrate);\r
270         m_PollInt.SetWindowText(Conv);\r
271 \r
272         m_HystCheck.SetCheck(Conf->use_hysteresis);\r
273 \r
274         Conv.Format("%.2f", Conf->hysteresis_param.scaling);\r
275         m_HystScaling.SetWindowText(Conv);\r
276 \r
277         Conv.Format("%.2f", Conf->hysteresis_param.thr_high);\r
278         m_HystThresholdHigh.SetWindowText(Conv);\r
279 \r
280         Conv.Format("%.2f", Conf->hysteresis_param.thr_low);\r
281         m_HystThresholdLow.SetWindowText(Conv);\r
282 \r
283         OnHystCheck();\r
284 \r
285         m_EtxCheck.SetCheck(Conf->lq_level > 0);\r
286 \r
287         Conv.Format("%d", Conf->lq_wsize);\r
288         m_EtxWindowSize.SetWindowText(Conv);\r
289 \r
290         m_EtxRadio1.SetCheck(Conf->lq_level == 1);\r
291         m_EtxRadio2.SetCheck(Conf->lq_level == 0 || Conf->lq_level == 2);\r
292 \r
293         OnEtxCheck();\r
294 \r
295         m_InternetCheck.SetCheck(FALSE);\r
296 \r
297         for (Hna4 = Conf->hna4_entries; Hna4 != NULL; Hna4 = Hna4->next)\r
298                 if (Hna4->net.v4 == 0 && Hna4->netmask.v4 == 0 &&\r
299                         m_InternetCheck.IsWindowEnabled())\r
300                 m_InternetCheck.SetCheck(TRUE);\r
301 \r
302         PrevInt = NULL;\r
303 \r
304         for (Int = Conf->interfaces; Int != NULL; Int = Int->next)\r
305         {\r
306                 IntName = Int->name;\r
307 \r
308                 if (IntName.CompareNoCase("GUI") == 0)\r
309                         break;\r
310 \r
311                 PrevInt = Int;\r
312         }\r
313 \r
314         if (Int != NULL)\r
315         {\r
316                 if (PrevInt == NULL)\r
317                         Conf->interfaces = Int->next;\r
318 \r
319                 else\r
320                         PrevInt->next = Int->next;\r
321 \r
322                 olsrd_cnf_free(Int);\r
323         }\r
324 \r
325         return 0;\r
326 }\r
327 \r
328 static struct olsr_if *AddInterface(struct olsrd_config **Conf, CString Name)\r
329 {\r
330         struct olsr_if *Int;\r
331 \r
332         Int = (struct olsr_if *)olsrd_cnf_malloc(sizeof (struct olsr_if));\r
333 \r
334         if (Int == NULL)\r
335         {\r
336                 AfxMessageBox("Cannot allocate memory.");\r
337                 return NULL;\r
338         }\r
339 \r
340         Int->name = (char *)olsrd_cnf_malloc(Name.GetLength() + 1);\r
341 \r
342         if (Int->name == NULL)\r
343         {\r
344                 olsrd_cnf_free(Int);\r
345 \r
346                 AfxMessageBox("Cannot allocate memory.");\r
347                 return NULL;\r
348         }\r
349 \r
350         ::lstrcpy(Int->name, Name);\r
351 \r
352         Int->config = NULL;\r
353         Int->index = 0;\r
354         Int->configured = OLSR_FALSE;\r
355         Int->interf = NULL;\r
356 \r
357         Int->cnf = get_default_if_config();\r
358 \r
359         Int->next = (*Conf)->interfaces;\r
360         (*Conf)->interfaces = Int;\r
361 \r
362         return Int;\r
363 }\r
364 \r
365 int MyDialog2::SaveConfigFile(CString PathName, int Real)\r
366 {\r
367         struct olsr_if *Int, *PrevInt;\r
368         struct olsr_msg_params *MsgPar;\r
369         CString Conv;\r
370         struct hna4_entry *Hna4, *NewHna4, *PrevHna4;\r
371         int NumInt = m_InterfaceList.GetItemCount();\r
372         int i;\r
373         CString IntName, IntName2;\r
374         struct ipc_host *IpcHost;\r
375         unsigned int Local;\r
376 \r
377         PrevInt = NULL;\r
378 \r
379         // remove interfaces that we do not want\r
380         \r
381         for (Int = Conf->interfaces; Int != NULL; Int = Int->next)\r
382         {\r
383                 IntName = Int->name;\r
384                 IntName.MakeUpper();\r
385 \r
386                 for (i = 0; i < NumInt; i++)\r
387                         if (m_InterfaceList.GetItemText(i, 0).Mid(0, 4) == IntName)\r
388                                 break;\r
389 \r
390                 if (i == NumInt || !m_InterfaceList.GetCheck(i))\r
391                 {\r
392                         if (PrevInt != NULL)\r
393                                 PrevInt->next = Int->next;\r
394 \r
395                         else\r
396                                 Conf->interfaces = Int->next;\r
397                 }\r
398         }\r
399         \r
400         // add missing interfaces\r
401         \r
402         for (i = 0; i < NumInt; i++)\r
403         {\r
404                 if (!m_InterfaceList.GetCheck(i))\r
405                         continue;\r
406 \r
407                 IntName2 = m_InterfaceList.GetItemText(i, 0).Mid(0, 4);\r
408 \r
409                 for (Int = Conf->interfaces; Int != NULL; Int = Int->next)\r
410                 {\r
411                         IntName = Int->name;\r
412                         IntName.MakeUpper();\r
413 \r
414                         if (IntName2 == IntName)\r
415                                 break;\r
416                 }\r
417 \r
418                 if (Int == NULL)\r
419                         AddInterface(&Conf, m_InterfaceList.GetItemText(i, 0).Mid(0, 4));\r
420         }\r
421 \r
422         // add dummy interface, if there aren't any real interfaces\r
423 \r
424         if (Conf->interfaces == NULL && Real != 0)\r
425                 AddInterface(&Conf, "GUI");\r
426 \r
427         // per-interface settings\r
428 \r
429         for (Int = Conf->interfaces; Int != NULL; Int = Int->next)\r
430         {\r
431                 MsgPar = &Int->cnf->hello_params;\r
432 \r
433                 m_HelloInt.GetWindowText(Conv);\r
434                 MsgPar->emission_interval = (float)atof(Conv);\r
435 \r
436                 m_HelloHold.GetWindowText(Conv);\r
437                 MsgPar->validity_time = (float)atof(Conv);\r
438 \r
439                 MsgPar = &Int->cnf->tc_params;\r
440 \r
441                 m_TcInt.GetWindowText(Conv);\r
442                 MsgPar->emission_interval = (float)atof(Conv);\r
443 \r
444                 m_TcHold.GetWindowText(Conv);\r
445                 MsgPar->validity_time = (float)atof(Conv);\r
446 \r
447                 MsgPar = &Int->cnf->mid_params;\r
448 \r
449                 m_MidInt.GetWindowText(Conv);\r
450                 MsgPar->emission_interval = (float)atof(Conv);\r
451 \r
452                 m_MidHold.GetWindowText(Conv);\r
453                 MsgPar->validity_time = (float)atof(Conv);\r
454 \r
455                 MsgPar = &Int->cnf->hna_params;\r
456 \r
457                 m_HnaInt.GetWindowText(Conv);\r
458                 MsgPar->emission_interval = (float)atof(Conv);\r
459 \r
460                 m_HnaHold.GetWindowText(Conv);\r
461                 MsgPar->validity_time = (float)atof(Conv);\r
462         }\r
463 \r
464         // global settings\r
465 \r
466         Conf->debug_level = DebugLevel;\r
467 \r
468         m_PollInt.GetWindowText(Conv);\r
469         Conf->pollrate = (float)atof(Conv);\r
470 \r
471         Conf->use_hysteresis = m_HystCheck.GetCheck() ? OLSR_TRUE : OLSR_FALSE;\r
472 \r
473         m_HystScaling.GetWindowText(Conv);\r
474         Conf->hysteresis_param.scaling = (float)atof(Conv);\r
475 \r
476         m_HystThresholdHigh.GetWindowText(Conv);\r
477         Conf->hysteresis_param.thr_high = (float)atof(Conv);\r
478 \r
479         m_HystThresholdLow.GetWindowText(Conv);\r
480         Conf->hysteresis_param.thr_low = (float)atof(Conv);\r
481 \r
482         if (!m_EtxCheck.GetCheck())\r
483                 Conf->lq_level = 0;\r
484 \r
485         else if (m_EtxRadio1.GetCheck())\r
486                 Conf->lq_level = 1;\r
487 \r
488         else\r
489                 Conf->lq_level = 2;\r
490 \r
491         m_EtxWindowSize.GetWindowText(Conv);\r
492         Conf->lq_wsize = atoi(Conv);\r
493 \r
494         PrevHna4 = NULL;\r
495 \r
496         // check for a default gateway HNA4 entry\r
497 \r
498         for (Hna4 = Conf->hna4_entries; Hna4 != NULL; Hna4 = Hna4->next)\r
499         {\r
500                 if (Hna4->net.v4 == 0 && Hna4->netmask.v4 == 0)\r
501                         break;\r
502 \r
503                 PrevHna4 = Hna4;\r
504         }\r
505 \r
506         // add default gateway HNA4 entry\r
507 \r
508         if (m_InternetCheck.GetCheck() && Hna4 == NULL)\r
509         {\r
510                 NewHna4 = (struct hna4_entry * )\r
511                         olsrd_cnf_malloc(sizeof (struct hna4_entry));\r
512 \r
513                 if (NewHna4 == NULL)\r
514                 {\r
515                         AfxMessageBox("Cannot allocate memory.");\r
516                         return -1;\r
517                 }\r
518 \r
519                 NewHna4->net.v4 = 0;\r
520                 NewHna4->netmask.v4 = 0;\r
521 \r
522                 NewHna4->next = Conf->hna4_entries;\r
523                 Conf->hna4_entries = NewHna4;\r
524         }\r
525 \r
526         // remove default gateway HNA4 entry\r
527 \r
528         if (!m_InternetCheck.GetCheck() && Hna4 != NULL)\r
529         {\r
530                 if (PrevHna4 == NULL)\r
531                         Conf->hna4_entries = Hna4->next;\r
532 \r
533                 else\r
534                         PrevHna4->next = Hna4->next;\r
535 \r
536                 olsrd_cnf_free(Hna4);\r
537         }\r
538 \r
539         Local = inet_addr("127.0.0.1");\r
540 \r
541         for (IpcHost = Conf->ipc_hosts; IpcHost != NULL; IpcHost = IpcHost->next)\r
542                 if (IpcHost->host.v4 == Local)\r
543                         break;\r
544 \r
545         if (IpcHost == NULL && Real == 0)\r
546         {\r
547                 IpcHost = (struct ipc_host *)\r
548                         olsrd_cnf_malloc(sizeof (struct ipc_host));\r
549 \r
550                 if (IpcHost == NULL)\r
551                 {\r
552                         AfxMessageBox("Cannot allocate memory.");\r
553                         return -1;\r
554                 }\r
555 \r
556                 IpcHost->host.v4 = Local;\r
557 \r
558                 IpcHost->next = Conf->ipc_hosts;\r
559                 Conf->ipc_hosts = IpcHost;\r
560 \r
561                 Conf->ipc_connections++;\r
562                 Conf->open_ipc = OLSR_TRUE;\r
563         }\r
564 \r
565         // write configuration file\r
566 \r
567         if (olsrd_write_cnf(Conf, PathName) < 0)\r
568                 return -1;\r
569 \r
570         return 0;\r
571 }\r
572 \r
573 void MyDialog2::OnSaveButton()\r
574 {\r
575         CFileDialog FileDialog(FALSE);\r
576         CString FileName = "Default.olsr";\r
577         CString PathName;\r
578 \r
579         FileDialog.m_ofn.lpstrFilter = "Configuration file (*.olsr)\0*.olsr\0";\r
580         FileDialog.m_ofn.nFilterIndex = 1;\r
581 \r
582         FileDialog.m_ofn.lpstrFile = FileName.GetBuffer(500);\r
583         FileDialog.m_ofn.nMaxFile = 500;\r
584 \r
585         if (FileDialog.DoModal() == IDOK)\r
586         {\r
587                 PathName = FileDialog.GetPathName();\r
588 \r
589                 if (SaveConfigFile(PathName, 1) < 0)\r
590                         AfxMessageBox("Cannot save configuration file '" + PathName + "'.");\r
591         }\r
592 \r
593         FileName.ReleaseBuffer();\r
594 }\r
595 \r
596 void MyDialog2::OnOpenButton()\r
597 {\r
598         CFileDialog FileDialog(TRUE);\r
599         CString FileName = "Default.olsr";\r
600         CString PathName;\r
601 \r
602         FileDialog.m_ofn.lpstrFilter = "Configuration file (*.olsr)\0*.olsr\0";\r
603         FileDialog.m_ofn.nFilterIndex = 1;\r
604 \r
605         FileDialog.m_ofn.lpstrFile = FileName.GetBuffer(500);\r
606         FileDialog.m_ofn.nMaxFile = 500;\r
607 \r
608         if (FileDialog.DoModal() == IDOK)\r
609         {\r
610                 PathName = FileDialog.GetPathName();\r
611 \r
612                 if (OpenConfigFile(PathName) < 0)\r
613                         AfxMessageBox("Cannot open configuration file '" + PathName + "'.");\r
614         }\r
615 \r
616         FileName.ReleaseBuffer();\r
617 }\r
618 \r
619 void MyDialog2::OnResetButton() \r
620 {\r
621         Reset();\r
622 }\r
623 \r
624 void MyDialog2::OnEtxRadio1() \r
625 {\r
626         m_EtxRadio2.SetCheck(FALSE);\r
627 }\r
628 \r
629 void MyDialog2::OnEtxRadio2() \r
630 {\r
631         m_EtxRadio1.SetCheck(FALSE);\r
632 }\r
633 \r
634 void MyDialog2::OnKillfocusEtxWinSize() \r
635 {\r
636         CString Conv;\r
637         int WinSize;\r
638 \r
639         m_EtxWindowSize.GetWindowText(Conv);\r
640         WinSize = atoi(Conv);\r
641 \r
642         if (WinSize < 3)\r
643                 WinSize = 3;\r
644 \r
645         else if (WinSize > 128)\r
646                 WinSize = 128;\r
647 \r
648         Conv.Format("%d", WinSize);\r
649         m_EtxWindowSize.SetWindowText(Conv);\r
650 }\r