Skip to content

Commit 9dce0d1

Browse files
committed
Add number status mode in STYLE_ALL_BOARD type keyboard
1 parent 69063d6 commit 9dce0d1

File tree

2 files changed

+203
-3
lines changed

2 files changed

+203
-3
lines changed

Diff for: GuiLite.h

+102-2
Original file line numberDiff line numberDiff line change
@@ -1896,7 +1896,8 @@ class c_dialog : public c_wnd
18961896
typedef enum
18971897
{
18981898
STATUS_UPPERCASE,
1899-
STATUS_LOWERCASE
1899+
STATUS_LOWERCASE,
1900+
STATUS_NUMBER,
19001901
}KEYBOARD_STATUS;
19011902
typedef enum
19021903
{
@@ -1914,6 +1915,46 @@ extern WND_TREE g_number_board_children[];
19141915
class c_keyboard: public c_wnd
19151916
{
19161917
public:
1918+
virtual char convert_char2num(char id)
1919+
{
1920+
char num = id;
1921+
switch (id)
1922+
{
1923+
case 'Q':
1924+
num = '1';
1925+
break;
1926+
case 'W':
1927+
num = '2';
1928+
break;
1929+
case 'E':
1930+
num = '3';
1931+
break;
1932+
case 'R':
1933+
num = '4';
1934+
break;
1935+
case 'T':
1936+
num = '5';
1937+
break;
1938+
case 'Y':
1939+
num = '6';
1940+
break;
1941+
case 'U':
1942+
num = '7';
1943+
break;
1944+
case 'I':
1945+
num = '8';
1946+
break;
1947+
case 'O':
1948+
num = '9';
1949+
break;
1950+
case 'P':
1951+
num = '0';
1952+
break;
1953+
default:
1954+
break;
1955+
}
1956+
return num;
1957+
}
19171958
virtual int connect(c_wnd *user, unsigned short resource_id, KEYBOARD_STYLE style)
19181959
{
19191960
c_rect user_rect;
@@ -1979,6 +2020,9 @@ class c_keyboard: public c_wnd
19792020
case 0x7F:
19802021
on_del_clicked(id, param);
19812022
break;
2023+
case 0x90:
2024+
on_num_switch_clicked(id, param);
2025+
break;
19822026
default:
19832027
on_char_clicked(id, param);
19842028
break;
@@ -2000,6 +2044,10 @@ class c_keyboard: public c_wnd
20002044
{
20012045
id += 0x20;
20022046
}
2047+
else if (STATUS_NUMBER == m_cap_status)
2048+
{
2049+
id = convert_char2num(id);
2050+
}
20032051
goto InputChar;
20042052
}
20052053
ASSERT(false);
@@ -2021,6 +2069,11 @@ class c_keyboard: public c_wnd
20212069
m_cap_status = (m_cap_status == STATUS_LOWERCASE) ? STATUS_UPPERCASE : STATUS_LOWERCASE;
20222070
show_window();
20232071
}
2072+
void on_num_switch_clicked(int id, int param)
2073+
{
2074+
m_cap_status = (m_cap_status == STATUS_NUMBER) ? STATUS_UPPERCASE : STATUS_NUMBER;
2075+
show_window();
2076+
}
20242077
void on_enter_clicked(int id, int param)
20252078
{
20262079
memset(m_str, 0, sizeof(m_str));
@@ -2040,6 +2093,46 @@ class c_keyboard: public c_wnd
20402093
class c_keyboard_button : public c_button
20412094
{
20422095
protected:
2096+
virtual char convert_char2num(unsigned short id)
2097+
{
2098+
char num = 0;
2099+
switch(id)
2100+
{
2101+
case 'Q':
2102+
num = '1';
2103+
break;
2104+
case 'W':
2105+
num = '2';
2106+
break;
2107+
case 'E':
2108+
num = '3';
2109+
break;
2110+
case 'R':
2111+
num = '4';
2112+
break;
2113+
case 'T':
2114+
num = '5';
2115+
break;
2116+
case 'Y':
2117+
num = '6';
2118+
break;
2119+
case 'U':
2120+
num = '7';
2121+
break;
2122+
case 'I':
2123+
num = '8';
2124+
break;
2125+
case 'O':
2126+
num = '9';
2127+
break;
2128+
case 'P':
2129+
num = '0';
2130+
break;
2131+
default:
2132+
break;
2133+
}
2134+
return num;
2135+
}
20432136
virtual void on_paint()
20442137
{
20452138
c_rect rect;
@@ -2091,7 +2184,14 @@ class c_keyboard_button : public c_button
20912184
char letter[] = { 0, 0 };
20922185
if (m_id >= 'A' && m_id <= 'Z')
20932186
{
2094-
letter[0] = (((c_keyboard*)m_parent)->get_cap_status() == STATUS_UPPERCASE) ? m_id : (m_id + 0x20);
2187+
if (((c_keyboard*)m_parent)->get_cap_status() == STATUS_NUMBER)
2188+
{
2189+
letter[0] = convert_char2num(m_id);
2190+
}
2191+
else
2192+
{
2193+
letter[0] = (((c_keyboard*)m_parent)->get_cap_status() == STATUS_UPPERCASE) ? m_id : (m_id + 0x20);
2194+
}
20952195
}
20962196
else if (m_id >= '0' && m_id <= '9')
20972197
{

Diff for: src/widgets_include/keyboard.h

+101-1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ typedef enum
3737
{
3838
STATUS_UPPERCASE,
3939
STATUS_LOWERCASE
40+
STATUS_NUMBER,
4041
}KEYBOARD_STATUS;
4142

4243
typedef enum
@@ -57,6 +58,46 @@ extern WND_TREE g_number_board_children[];
5758
class c_keyboard: public c_wnd
5859
{
5960
public:
61+
virtual char convert_char2num(char id)
62+
{
63+
char num = id;
64+
switch (id)
65+
{
66+
case 'Q':
67+
num = '1';
68+
break;
69+
case 'W':
70+
num = '2';
71+
break;
72+
case 'E':
73+
num = '3';
74+
break;
75+
case 'R':
76+
num = '4';
77+
break;
78+
case 'T':
79+
num = '5';
80+
break;
81+
case 'Y':
82+
num = '6';
83+
break;
84+
case 'U':
85+
num = '7';
86+
break;
87+
case 'I':
88+
num = '8';
89+
break;
90+
case 'O':
91+
num = '9';
92+
break;
93+
case 'P':
94+
num = '0';
95+
break;
96+
default:
97+
break;
98+
}
99+
return num;
100+
}
60101
virtual int connect(c_wnd *user, unsigned short resource_id, KEYBOARD_STYLE style)
61102
{
62103
c_rect user_rect;
@@ -124,6 +165,9 @@ class c_keyboard: public c_wnd
124165
case 0x7F:
125166
on_del_clicked(id, param);
126167
break;
168+
case 0x90:
169+
on_num_switch_clicked(id, param);
170+
break;
127171
default:
128172
on_char_clicked(id, param);
129173
break;
@@ -146,6 +190,10 @@ class c_keyboard: public c_wnd
146190
{
147191
id += 0x20;
148192
}
193+
else if (STATUS_NUMBER == m_cap_status)
194+
{
195+
id = convert_char2num(id);
196+
}
149197
goto InputChar;
150198
}
151199
ASSERT(false);
@@ -167,6 +215,11 @@ class c_keyboard: public c_wnd
167215
m_cap_status = (m_cap_status == STATUS_LOWERCASE) ? STATUS_UPPERCASE : STATUS_LOWERCASE;
168216
show_window();
169217
}
218+
void on_num_switch_clicked(int id, int param)
219+
{
220+
m_cap_status = (m_cap_status == STATUS_NUMBER) ? STATUS_UPPERCASE : STATUS_NUMBER;
221+
show_window();
222+
}
170223
void on_enter_clicked(int id, int param)
171224
{
172225
memset(m_str, 0, sizeof(m_str));
@@ -187,6 +240,46 @@ class c_keyboard: public c_wnd
187240
class c_keyboard_button : public c_button
188241
{
189242
protected:
243+
virtual char convert_char2num(unsigned short id)
244+
{
245+
char num = id;
246+
switch(id)
247+
{
248+
case 'Q':
249+
num = '1';
250+
break;
251+
case 'W':
252+
num = '2';
253+
break;
254+
case 'E':
255+
num = '3';
256+
break;
257+
case 'R':
258+
num = '4';
259+
break;
260+
case 'T':
261+
num = '5';
262+
break;
263+
case 'Y':
264+
num = '6';
265+
break;
266+
case 'U':
267+
num = '7';
268+
break;
269+
case 'I':
270+
num = '8';
271+
break;
272+
case 'O':
273+
num = '9';
274+
break;
275+
case 'P':
276+
num = '0';
277+
break;
278+
default:
279+
break;
280+
}
281+
return num;
282+
}
190283
virtual void on_paint()
191284
{
192285
c_rect rect;
@@ -240,7 +333,14 @@ class c_keyboard_button : public c_button
240333
char letter[] = { 0, 0 };
241334
if (m_id >= 'A' && m_id <= 'Z')
242335
{
243-
letter[0] = (((c_keyboard*)m_parent)->get_cap_status() == STATUS_UPPERCASE) ? m_id : (m_id + 0x20);
336+
if (((c_keyboard*)m_parent)->get_cap_status() == STATUS_NUMBER)
337+
{
338+
letter[0] = convert_char2num(m_id);
339+
}
340+
else
341+
{
342+
letter[0] = (((c_keyboard*)m_parent)->get_cap_status() == STATUS_UPPERCASE) ? m_id : (m_id + 0x20);
343+
}
244344
}
245345
else if (m_id >= '0' && m_id <= '9')
246346
{

0 commit comments

Comments
 (0)