Skip to content

Commit 0be52df

Browse files
committed
Add number status mode in STYLE_ALL_BOARD type keyboard
1 parent 7e6c7f7 commit 0be52df

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
@@ -1860,7 +1860,8 @@ class c_dialog : public c_wnd
18601860
typedef enum
18611861
{
18621862
STATUS_UPPERCASE,
1863-
STATUS_LOWERCASE
1863+
STATUS_LOWERCASE,
1864+
STATUS_NUMBER,
18641865
}KEYBOARD_STATUS;
18651866
typedef enum
18661867
{
@@ -1878,6 +1879,46 @@ extern WND_TREE g_number_board_children[];
18781879
class c_keyboard: public c_wnd
18791880
{
18801881
public:
1882+
virtual char convert_char2num(char id)
1883+
{
1884+
char num = id;
1885+
switch (id)
1886+
{
1887+
case 'Q':
1888+
num = '1';
1889+
break;
1890+
case 'W':
1891+
num = '2';
1892+
break;
1893+
case 'E':
1894+
num = '3';
1895+
break;
1896+
case 'R':
1897+
num = '4';
1898+
break;
1899+
case 'T':
1900+
num = '5';
1901+
break;
1902+
case 'Y':
1903+
num = '6';
1904+
break;
1905+
case 'U':
1906+
num = '7';
1907+
break;
1908+
case 'I':
1909+
num = '8';
1910+
break;
1911+
case 'O':
1912+
num = '9';
1913+
break;
1914+
case 'P':
1915+
num = '0';
1916+
break;
1917+
default:
1918+
break;
1919+
}
1920+
return num;
1921+
}
18811922
virtual int connect(c_wnd *user, unsigned short resource_id, KEYBOARD_STYLE style)
18821923
{
18831924
c_rect user_rect;
@@ -1943,6 +1984,9 @@ class c_keyboard: public c_wnd
19431984
case 0x7F:
19441985
on_del_clicked(id, param);
19451986
break;
1987+
case 0x90:
1988+
on_num_switch_clicked(id, param);
1989+
break;
19461990
default:
19471991
on_char_clicked(id, param);
19481992
break;
@@ -1964,6 +2008,10 @@ class c_keyboard: public c_wnd
19642008
{
19652009
id += 0x20;
19662010
}
2011+
else if (STATUS_NUMBER == m_cap_status)
2012+
{
2013+
id = convert_char2num(id);
2014+
}
19672015
goto InputChar;
19682016
}
19692017
ASSERT(false);
@@ -1985,6 +2033,11 @@ class c_keyboard: public c_wnd
19852033
m_cap_status = (m_cap_status == STATUS_LOWERCASE) ? STATUS_UPPERCASE : STATUS_LOWERCASE;
19862034
show_window();
19872035
}
2036+
void on_num_switch_clicked(int id, int param)
2037+
{
2038+
m_cap_status = (m_cap_status == STATUS_NUMBER) ? STATUS_UPPERCASE : STATUS_NUMBER;
2039+
show_window();
2040+
}
19882041
void on_enter_clicked(int id, int param)
19892042
{
19902043
memset(m_str, 0, sizeof(m_str));
@@ -2004,6 +2057,46 @@ class c_keyboard: public c_wnd
20042057
class c_keyboard_button : public c_button
20052058
{
20062059
protected:
2060+
virtual char convert_char2num(unsigned short id)
2061+
{
2062+
char num = 0;
2063+
switch(id)
2064+
{
2065+
case 'Q':
2066+
num = '1';
2067+
break;
2068+
case 'W':
2069+
num = '2';
2070+
break;
2071+
case 'E':
2072+
num = '3';
2073+
break;
2074+
case 'R':
2075+
num = '4';
2076+
break;
2077+
case 'T':
2078+
num = '5';
2079+
break;
2080+
case 'Y':
2081+
num = '6';
2082+
break;
2083+
case 'U':
2084+
num = '7';
2085+
break;
2086+
case 'I':
2087+
num = '8';
2088+
break;
2089+
case 'O':
2090+
num = '9';
2091+
break;
2092+
case 'P':
2093+
num = '0';
2094+
break;
2095+
default:
2096+
break;
2097+
}
2098+
return num;
2099+
}
20072100
virtual void on_paint()
20082101
{
20092102
c_rect rect;
@@ -2055,7 +2148,14 @@ class c_keyboard_button : public c_button
20552148
char letter[] = { 0, 0 };
20562149
if (m_id >= 'A' && m_id <= 'Z')
20572150
{
2058-
letter[0] = (((c_keyboard*)m_parent)->get_cap_status() == STATUS_UPPERCASE) ? m_id : (m_id + 0x20);
2151+
if (((c_keyboard*)m_parent)->get_cap_status() == STATUS_NUMBER)
2152+
{
2153+
letter[0] = convert_char2num(m_id);
2154+
}
2155+
else
2156+
{
2157+
letter[0] = (((c_keyboard*)m_parent)->get_cap_status() == STATUS_UPPERCASE) ? m_id : (m_id + 0x20);
2158+
}
20592159
}
20602160
else if (m_id >= '0' && m_id <= '9')
20612161
{

Diff for: src/widgets/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)