📄 mcugui.c
字号:
switch (input_v)
{
case 1: //password1
LoadWin(ctrl->data_index);
break;
case 2: //password2
LoadWin(ctrl->data_index+1);
break;
case 3: //password2
break;
case 0: //cancel input
break;
}
}
else
LoadWin(ctrl->data_index);
}
else if (ctrl->data_type == CMD_COMMAND)
{
if (ctrl->style & BS_PASSWORD1 || ctrl->style & BS_PASSWORD2)
{
input_v = PasswordBox("输入密码", ctrl->style);
if (input_v == 1) //password1
{
if (ctrl->style & BS_CMDSYNC)
{
CommandProc(ctrl->data_index);
}
else
{
PostMsg(MSG_COMMAND, ctrl->data_index);
}
}
if (input_v == 2) //password2
{
if (ctrl->style & BS_CMDSYNC)
{
CommandProc(ctrl->data_index);
}
else
{
PostMsg(MSG_COMMAND, ctrl->data_index);
}
}
}
else
{
if (ctrl->style & BS_CMDSYNC)
{
CommandProc(ctrl->data_index);
}
else
{
PostMsg(MSG_COMMAND, ctrl->data_index);
}
}
}
}
break;
case MSG_PAINT:
if (Gui.active_ctrl == index)//bright show
{
TextOut(ctrl->x, ctrl->y - Gui.page_topy, ctrl->caption, ctrl->style|FONT_BRIGHT);
}
else //show
{
TextOut(ctrl->x, ctrl->y - Gui.page_topy, ctrl->caption, ctrl->style);
}
break;
default: break;
}
}
/*****************************************************************************/
void PwCtrlProc(int index, uchar msg_type, uchar msg_data)
{
const CONTROL *ctrl;
// uchar format_type;
ctrl = &Win[Gui.active_win].controls[index];
switch (msg_type)
{
case MSG_KEY:
switch (msg_data)
{
case KEY_OK:/* edit or save*/
EditOff(index);
break;
case KEY_ESC: EditOff(index); break;
case KEY_UP: TextChangeUp(); break;
case KEY_DOWN: TextChangeDown(); break;
case KEY_LEFT: CursorLeft(); break;
case KEY_RIGHT: CursorRight(); break;
default:
break;
}
break;
case MSG_PAINT:
// value = GetModuleData(ctrl->data_type, ctrl->data_index, Gui.module);
if (Gui.active_ctrl == index)
{//is focus
if (!(ctrl->style&ES_NOCAPTION))
{
TextOut(ctrl->x, ctrl->y - Gui.page_topy, ctrl->caption, ctrl->style|FONT_BRIGHT);
if (!(ctrl->style&ES_NODATA))
{
TextOut(2+ctrl->x + ctrl->w/2, ctrl->y - Gui.page_topy, Gui.focus_buf, ctrl->style);
TextFocus(2+ctrl->x + ctrl->w/2, ctrl->y - Gui.page_topy, Gui.focus_cursor, ctrl->style|FONT_BRIGHT);
}
}
else
{
if (!(ctrl->style&ES_NODATA))
{
TextOut(ctrl->x, ctrl->y - Gui.page_topy, Gui.focus_buf, ctrl->style);
TextFocus(ctrl->x, ctrl->y - Gui.page_topy, Gui.focus_cursor, ctrl->style|FONT_BRIGHT);
}
}
}
break;
default: break;
}
}
/*****************************************************************************/
void ClockCtrlProc(int index, uchar msg_type, uchar msg_data)
{
const CONTROL *ctrl;
ctrl = &Win[Gui.active_win].controls[index];
switch (msg_type)
{
case MSG_PAINT:
TextClear(ctrl->x, ctrl->y, ctrl->w, ctrl->style);
if (ctrl->style & CS_TIME)
{
time2s(Gui.time_buf[2], Gui.time_buf[1], Gui.time_buf[0], Gui.data_buf);
TextOut(ctrl->x, ctrl->y - Gui.page_topy, Gui.data_buf, ctrl->style);
}
else
{
date2s(Gui.time_buf[5], Gui.time_buf[4], Gui.time_buf[3], Gui.data_buf);
TextOut(ctrl->x, ctrl->y - Gui.page_topy, Gui.data_buf, ctrl->style);
}
// for (i = 0; i < 16; Gui.data_buf[i++] = ' ');
break;
default: break;
}
}
/*****************************************************************************/
void BmpCtrlProc(int index, uchar msg_type, uchar msg_data)
{
const CONTROL *ctrl;
uint vsource;
ctrl = &Win[Gui.active_win].controls[index];
switch (msg_type)
{
case MSG_PAINT:
vsource = (uint)ctrl->data_type<<8 + (uint)ctrl->data_index;
DrawBmp(ctrl->x*8, ctrl->y*8, ctrl->w, ctrl->h, &BMP[vsource], ctrl->style);
break;
default: break;
}
}
/*****************************************************************************/
void EditCtrlProc(int index, uchar msg_type, uchar msg_data)
{
const CONTROL *ctrl;
// uchar format_type;
int value, len, len2, data_x;
ctrl = &Win[Gui.active_win].controls[index];
if (ctrl->style & BS_HIDE)
{
return;
}
switch (msg_type)
{
case MSG_KEY:
switch (msg_data)
{
case KEY_OK:/* edit or save*/
if (Gui.win_status & WS_EDITON)
{
Gui.text_buf[0] = '\0';
if (EditSafe(Gui.data_buf, ctrl->tag, Gui.focus_value))
{
scat(Gui.text_buf, "范围是:");
scat(Gui.text_buf, Gui.data_buf);
MsgBox("输入数据超出范围", Gui.text_buf, MB_OK);
}
else
{
SetModuleData(ctrl->data_type, ctrl->data_index, Gui.module, Gui.focus_value);
SaveModuleData(ctrl->data_type, ctrl->data_index, Gui.module);
if ((ctrl->data_type & MASK_DATA_TYPE) != DATA_TEMP)
{
MsgBox("系统信息", "操作成功", MB_OK);
}
EditOff(index);
}
for (Gui.text_buf[0] = '\0', len = 1; len < 30; Gui.text_buf[len++] = ' ');
}
else
{
EditOn(Gui.active_ctrl);
}
for (Gui.text_buf[0] = '\0', len = 1; len < 30; Gui.text_buf[len++] = ' ');
break;
case KEY_ESC: EditOff(index); break;
case KEY_UP: TextChangeUp(); break;
case KEY_DOWN: TextChangeDown(); break;
case KEY_LEFT: CursorLeft(); break;
case KEY_RIGHT: CursorRight(); break;
case KEY_HELP:
if (Gui.win_status&WS_EDITON)
{
HelpBox("", HelpText[6], 0);
}
else
{
HelpBox("", HelpText[5], 0);
}
break;
default:
break;
}
PostMsg(MSG_PAINT, 0xFF);
break;
case MSG_PAINT:
TextClear(ctrl->x, ctrl->y, ctrl->w, ctrl->style);
value = GetModuleData(ctrl->data_type, ctrl->data_index, Gui.module);
len = strlen(ctrl->caption);
data_x = ctrl->x + ctrl->w/2;
len2 = data_x - ctrl->x;
if ( len >= len2 )
{
data_x += len - len2 + 1;
}
if ((Gui.active_ctrl == index) && !(ctrl->style & BS_NOFOCUS))
{//is focus
if (Gui.win_status&WS_EDITON)
{//edit
if (!(ctrl->style&ES_NOCAPTION))
{
TextOut(ctrl->x, ctrl->y - Gui.page_topy, ctrl->caption, ctrl->style);
if (!(ctrl->style&ES_NODATA))
{
TextOut(data_x, ctrl->y - Gui.page_topy, Gui.focus_buf, ctrl->style);
if (ctrl->style & FONT_SMALL)
{
LcdCursor(data_x + Gui.focus_cursor, ctrl->y - Gui.page_topy);
}
else
{
LcdCursor(data_x + Gui.focus_cursor, ctrl->y - Gui.page_topy+1);
}
}
}
else
{
if (!(ctrl->style&ES_NODATA))
{
TextOut(ctrl->x, ctrl->y - Gui.page_topy, Gui.focus_buf, ctrl->style);
if (ctrl->style & FONT_SMALL)
{
LcdCursor(ctrl->x + Gui.focus_cursor, ctrl->y - Gui.page_topy);
}
else
{
LcdCursor(ctrl->x + Gui.focus_cursor, ctrl->y - Gui.page_topy+1);
}
}
}
}
else
{//no edit
if (!(ctrl->style&ES_NOCAPTION))
{
TextOut(ctrl->x, ctrl->y - Gui.page_topy, ctrl->caption, ctrl->style);
if (!(ctrl->style&ES_NODATA))
{
len = TextFormat(Gui.data_buf, ctrl->tag, value);
if (Gui.focus_format == EF_NUM)
{
left_nrm(Gui.data_buf, len);
}
TextOut(data_x, ctrl->y - Gui.page_topy, Gui.data_buf, ctrl->style|FONT_BRIGHT);
}
}
else
{
if (!(ctrl->style&ES_NODATA))
{
len = TextFormat(Gui.data_buf, ctrl->tag, value);
if (Gui.focus_format == EF_NUM)
{
left_nrm(Gui.data_buf, len);
}
TextOut(ctrl->x, ctrl->y - Gui.page_topy, Gui.data_buf, ctrl->style|FONT_BRIGHT);
}
}
}
}
else
{//no focus
if (!(ctrl->style&ES_NOCAPTION))
{
TextOut(ctrl->x, ctrl->y - Gui.page_topy, ctrl->caption, ctrl->style);
if (!(ctrl->style&ES_NODATA))
{
len = TextFormat(Gui.data_buf, ctrl->tag, value);
left_nrm(Gui.data_buf, len);
TextOut(data_x, ctrl->y - Gui.page_topy, Gui.data_buf, ctrl->style);
}
}
else
{
if (!(ctrl->style&ES_NODATA))
{
len = TextFormat(Gui.data_buf, ctrl->tag, value);
left_nrm(Gui.data_buf, len);
TextOut(ctrl->x, ctrl->y - Gui.page_topy, Gui.data_buf, ctrl->style);
}
}
}
// for (len = 0; len < 16; Gui.data_buf[len++] = ' ');
break;
default:
break;
}
}
/*****************************************************************************/
void ListCtrlProc(int index, uchar msg_type, uchar msg_data)
{
const CONTROL *ctrl;
int value, len, len2, data_x;
ctrl = &Win[Gui.active_win].controls[index];
if (ctrl->style & BS_HIDE)
{
return;
}
switch (msg_type)
{
case MSG_KEY:
switch (msg_data)
{
case KEY_OK:/* edit or save*/
if (Gui.win_status & WS_EDITON)
{
SetModuleData(ctrl->data_type, ctrl->data_index, Gui.module, Gui.focus_value);
SaveModuleData(ctrl->data_type, ctrl->data_index, Gui.module);
if ((ctrl->data_type & MASK_DATA_TYPE) != DATA_TEMP)
{
MsgBox("系统信息", "操作成功", MB_OK);
}
EditOff(index);
}
else
{
EditOn(Gui.active_ctrl);
}
break;
PostMsg(MSG_PAINT, 0xFF);
case KEY_ESC:
EditOff(index);
break;
case KEY_UP:
if (Gui.focus_value)
{
Gui.focus_value--;
}
break;
case KEY_DOWN:
if (++Gui.focus_value > Gui.focus_len)
{
Gui.focus_value = Gui.focus_len;
}
break;
case KEY_LEFT:
Gui.focus_value = 0;
break;
case KEY_RIGHT:
Gui.focus_value = Gui.focus_len;
break;
case KEY_HELP:
if (Gui.win_status&WS_EDITON)
{
HelpBox("", HelpText[8], 0);
}
else
{
HelpBox("", HelpText[7], 0);
}
break;
default:
break;
}
break;
case MSG_PAINT:
TextClear(ctrl->x, ctrl->y, ctrl->w, ctrl->style);
value = GetModuleData(ctrl->data_type, ctrl->data_index, Gui.module);
len = strlen(ctrl->caption);
data_x = ctrl->x + ctrl->w/2;
len2 = data_x - ctrl->x;
if ( len >= len2 )
{
data_x += len - len2 + 1;
}
if ((Gui.active_ctrl == index) && !(ctrl->style & BS_NOFOCUS))
{//is focus
if (Gui.win_status&WS_EDITON)
{//edit
if (!(ctrl->style&ES_NOCAPTION))
{
TextOut(ctrl->x, ctrl->y - Gui.page_topy, ctrl->caption, ctrl->style);
if (!(ctrl->style&ES_NODATA))
{
GetItem(Gui.focus_value, ctrl->tag, Gui.data_buf);
TextOut(data_x, ctrl->y - Gui.page_topy, Gui.data_buf, ctrl->style);
if (ctrl->style & FONT_SMALL)
{
LcdCursor(data_x + Gui.focus_cursor, ctrl->y - Gui.page_topy);
}
else
{
LcdCursor(data_x + Gui.focus_cursor, ctrl->y - Gui.page_topy+1);
}
}
}
else
{
if (!(ctrl->style&ES_NODATA))
{
GetItem(Gui.focus_value, ctrl->tag, Gui.data_buf);
TextOut(ctrl->x, ctrl->y - Gui.page_topy, Gui.data_buf, ctrl->style);
if (ctrl->style & FONT_SMALL)
{
LcdCursor(ctrl->x + Gui.focus_cursor, ctrl->y - Gui.page_topy);
}
else
{
LcdCursor(ctrl->x + Gui.focus_cursor, ctrl->y - Gui.page_topy+1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -