BSD-style license.
[olsrd.git] / gui / win32 / Main / MyEdit.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: MyEdit.cpp,v 1.3 2004/11/21 01:21:10 tlopatic Exp $\r
40  */\r
41 \r
42 #include "stdafx.h"\r
43 #include "frontend.h"\r
44 #include "MyEdit.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 MyEdit::MyEdit()\r
53 {\r
54 }\r
55 \r
56 MyEdit::~MyEdit()\r
57 {\r
58 }\r
59 \r
60 \r
61 BEGIN_MESSAGE_MAP(MyEdit, CEdit)\r
62         //{{AFX_MSG_MAP(MyEdit)\r
63         ON_WM_CHAR()\r
64         ON_WM_KILLFOCUS()\r
65         //}}AFX_MSG_MAP\r
66 END_MESSAGE_MAP()\r
67 \r
68 void MyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) \r
69 {\r
70         static unsigned char *Allowed = (unsigned char *)"0123456789.";\r
71         int i;\r
72         CString Text;\r
73 \r
74         if (nChar >= 32)\r
75         {\r
76                 for (i = 0; Allowed[i] != 0; i++)\r
77                         if (nChar == Allowed[i])\r
78                                 break;\r
79 \r
80                 if (Allowed[i] == 0)\r
81                         return;\r
82 \r
83                 GetWindowText(Text);\r
84 \r
85                 if (nChar == '.' && Text.Find('.') >= 0)\r
86                         return;\r
87 \r
88                 if (Text.GetLength() > 2 && Text.Find('.') < 0 && nChar != '.')\r
89                         return;\r
90         }\r
91         \r
92         CEdit::OnChar(nChar, nRepCnt, nFlags);\r
93 }\r
94 \r
95 void MyEdit::OnKillFocus(CWnd* pNewWnd) \r
96 {\r
97         CString Text;\r
98         int Index;\r
99         int Len;\r
100 \r
101         GetWindowText(Text);\r
102 \r
103         Index = Text.Find('.');\r
104 \r
105         Len = Text.GetLength();\r
106 \r
107         if (Len == 0)\r
108                 SetWindowText("0.0");\r
109 \r
110         else if (Index < 0)\r
111                 SetWindowText(Text + ".0");\r
112 \r
113         else if (Index == Len - 1)\r
114                 SetWindowText(Text + "0");\r
115 \r
116         CEdit::OnKillFocus(pNewWnd);\r
117 }\r