📄 mcugui.c
字号:
}
}
}
}
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))
{
GetModuleData(ctrl->data_type, ctrl->data_index, Gui.module);
GetItem(value, ctrl->tag, Gui.data_buf);
TextOut(data_x, ctrl->y - Gui.page_topy, Gui.data_buf, ctrl->style|FONT_BRIGHT);
}
}
else
{
if (!(ctrl->style&ES_NODATA))
{
GetModuleData(ctrl->data_type, ctrl->data_index, Gui.module);
GetItem(value, ctrl->tag, Gui.data_buf);
TextOut(ctrl->x, ctrl->y - Gui.page_topy, Gui.data_buf, ctrl->style|FONT_BRIGHT);
}
}
}
}
else
{//no foucus
if (!(ctrl->style&ES_NOCAPTION))
{
TextOut(ctrl->x, ctrl->y - Gui.page_topy, ctrl->caption, ctrl->style);
if (!(ctrl->style&ES_NODATA))
{
GetItem(value, ctrl->tag, Gui.data_buf);
TextOut(data_x, ctrl->y - Gui.page_topy, Gui.data_buf, ctrl->style);
}
}
else
{
if (!(ctrl->style&ES_NODATA))
{
GetItem(value, ctrl->tag, Gui.data_buf);
TextOut(ctrl->x, ctrl->y - Gui.page_topy, Gui.data_buf, ctrl->style);
}
}
}
break;
default:
break;
}
}
/*****************************************************************************/
void GridCtrlProc(int index, uchar msg_type, uchar msg_data)
{
const CONTROL *ctrl;
msg_type = msg_type;
msg_data = msg_data;
ctrl = &Win[Gui.active_win].controls[index];
switch (msg_type)
{
case MSG_INIT:
break;
case MSG_KEY:
break;
case MSG_PAINT:
break;
default:
break;
}
}
/*****************************************************************************/
/* edit sub function*/
void EditOn(int index)
{
int i, data_x;
const CONTROL *ctrl;
ctrl = &Win[Gui.active_win].controls[index];
if ((ctrl->style & ES_READONLY) || (ctrl->style & BS_NOFOCUS))
{
return;
}
if ((ctrl->data_type & MASK_DATA_TYPE) != DATA_TEMP)
{
LoadModuleData(ctrl->data_type, ctrl->data_index, Gui.module);
}
Gui.focus_format = GetFormat(Win[Gui.active_win].controls[index].tag);
Gui.focus_value = GetModuleData(ctrl->data_type, ctrl->data_index, Gui.module);
Gui.win_status |= WS_EDITON;
for (i = 0; i < 16; i++)
{
Gui.focus_buf[i] = '\0';
}
switch (Win[Gui.active_win].controls[index].type&MASK_CTRLTYPE)
{
case CTRL_EDIT:
Gui.focus_len = TextFormat(Gui.focus_buf, ctrl->tag, Gui.focus_value);
Gui.focus_cursor = Gui.focus_len-1;
break;
case CTRL_LIST:
Gui.focus_len = GetItemCount(ctrl->tag);
Gui.focus_cursor = 0;
break;
default: break;
}
LcdCursorSize(7);
data_x = ctrl->x + ctrl->w/2;
if (!(ctrl->style&ES_NOCAPTION))
{
if (!(ctrl->style&ES_NODATA))
{
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))
{
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);
}
}
}
}
void EditOff(int index)
{
int value;
const CONTROL *ctrl;
ctrl = &Win[Gui.active_win].controls[index];
Gui.win_status &= ~WS_EDITON;
LcdCursorSize(0);
}
void SrcollUp(void)
{
uchar value;
char i;
const CONTROL *ctrls;
ctrls = &Win[Gui.active_win].controls[0];
if (Win[Gui.active_win].style & WS_PAGESCROLL)
{
value = 8;
}
else
{
value = 2;
}
if (Gui.ctrl_top == 0)
{
return;
}
else
{
/*srcoll over check*/
if (Gui.page_topy < value)
{
Gui.page_topy = 0;
}
else
{
Gui.page_topy -= value;
}
/* set ctrl_top */
for (i = 0; i <= Gui.ctrl_top; i++)
{
if (ctrls[i].y >= Gui.page_topy )
{
break;
}
}
Gui.ctrl_top = i;
/* set ctrl_bottom */
Gui.ctrl_bottom = Gui.ctrl_top;
for (i = Gui.ctrl_top; i <= Gui.ctrl_last; i++)
{
if (ctrls[i].y < Gui.page_topy + 8)
{
Gui.ctrl_bottom = i;
}
else
{
break;
}
}
if (Gui.page)
Gui.page--;
}
LcdCls();
PostMsg(MSG_PAINT, 0xFF);
}
void SrcollDown(void)
{
uchar value;
char i;
const CONTROL *ctrls;
ctrls = &Win[Gui.active_win].controls[0];
if (Win[Gui.active_win].style & WS_PAGESCROLL)
value = 8;
else
value = 2;
if (Gui.ctrl_bottom == Gui.ctrl_last)
return;
else
{
Gui.page_topy += value;
/*srcoll over check*/
if (ctrls[Gui.ctrl_last].y < Gui.page_topy+6)
{
Gui.ctrl_bottom = Gui.ctrl_last;
}
/* set ctrl_top */
for (i = Gui.ctrl_top; i <= Gui.ctrl_last; i++)
{
if (ctrls[i].y >= Gui.page_topy )
break;
}
Gui.ctrl_top = i;
/* set ctrl_bottom */
Gui.ctrl_bottom = Gui.ctrl_top;
for (i = Gui.ctrl_top; i <= Gui.ctrl_last; i++)
{
if (ctrls[i].y < Gui.page_topy + 8)
Gui.ctrl_bottom = i;
else
break;
}
Gui.page++;
if (Gui.page > Gui.max_page)
Gui.page = Gui.max_page;
}
LcdCls();
PostMsg(MSG_PAINT, 0xFF);
}
void MoveFocus(uchar act)
{
signed char i;
uchar active, old_active;
const CONTROL *ctrls;
ctrls = &Win[Gui.active_win].controls[0];
old_active = Gui.active_ctrl;
active = Gui.active_ctrl;
if (Win[Gui.active_win].style & BS_NOFOCUS)
{
switch (act)
{
case FOCUS_HOME:break;
case FOCUS_END:break;
case FOCUS_PREV:
SrcollUp();
MoveFocus(FOCUS_END);
break;
case FOCUS_NEXT:
SrcollDown();
MoveFocus(FOCUS_HOME);
break;
}
}
else
{
switch (act)
{
case FOCUS_HOME:
active = Gui.ctrl_top;
for (i = Gui.ctrl_top; i <= Gui.ctrl_bottom; i++)
{
if ((ctrls[i].style & BS_NOFOCUS) == 0)
{
active = i;
break;
}
}
break;
case FOCUS_END:
active = Gui.ctrl_bottom;
for (i = Gui.ctrl_bottom; i >= Gui.ctrl_top; i--)
{
if ((ctrls[i].style & BS_NOFOCUS) == 0)
{
active = i;
break;
}
}
break;
case FOCUS_PREV:
active = Gui.active_ctrl;
for (i = Gui.active_ctrl-1; i >= 0; i--)
{
if ((ctrls[i].style & BS_NOFOCUS) == 0)
{
active = i;
break;
}
}
if (i < Gui.ctrl_top)
{
SrcollUp();
MoveFocus(FOCUS_END);
}
else
{
/*
if ( old_active != active)
{
PostMsg(MSG_PAINT, old_active);
PostMsg(MSG_PAINT, active);
}
*/
}
break;
case FOCUS_NEXT:
active = Gui.active_ctrl;
for (i = Gui.active_ctrl+1; i <= Gui.ctrl_last; i++)
{
if ((ctrls[i].style & BS_NOFOCUS) == 0)
{
active = i;
break;
}
}
if (i > Gui.ctrl_bottom)
{
SrcollDown();
MoveFocus(FOCUS_HOME);
}
else
{
/*
if ( old_active != active)
{
PostMsg(MSG_PAINT, old_active);
PostMsg(MSG_PAINT, active);
}
*/
}
break;
}
}
Gui.active_ctrl = active;
}
/* edit ctrl edit function*/
uchar CursorLeft(void)
{
if (Gui.focus_cursor != 0)
Gui.focus_cursor--;
if ( (Gui.focus_buf[Gui.focus_cursor] == '.') )
Gui.focus_cursor--;
}
uchar CursorRight(void)
{
if (Gui.focus_cursor < Gui.focus_len-1)
Gui.focus_cursor++;
if ( (Gui.focus_buf[Gui.focus_cursor] == '.') )
Gui.focus_cursor++;
}
/*****************************************************************************/
/*
!"#$%&'()*+,-./09:;<=>?@AZ[\]^_`az{|}~
*/
void TextChangeDown(void)
{
const CONTROL *ctrl;
ctrl = &Win[Gui.active_win].controls[Gui.active_ctrl];
switch (Gui.focus_format)
{
case EF_HEX:
if (Gui.focus_buf[Gui.focus_cursor] == '0')
Gui.focus_buf[Gui.focus_cursor] = 'F';
else if (Gui.focus_buf[Gui.focus_cursor] == 'A')
Gui.focus_buf[Gui.focus_cursor] = '9';
else
Gui.focus_buf[Gui.focus_cursor]--;
Gui.focus_value = hex2i(Gui.focus_buf);
break;
case EF_NUM:
if (Gui.focus_buf[Gui.focus_cursor] == '0')
Gui.focus_buf[Gui.focus_cursor] = '9';
else
Gui.focus_buf[Gui.focus_cursor]--;
s2fix(Gui.focus_buf, &Gui.focus_value);
break;
case EF_TEXT:
if (Gui.focus_buf[Gui.focus_cursor] == 'A')
Gui.focus_buf[Gui.focus_cursor] = ' ';
else if (Gui.focus_buf[Gui.focus_cursor] == ' ')
Gui.focus_buf[Gui.focus_cursor] = '9';
else if (Gui.focus_buf[Gui.focus_cursor] == '-')
Gui.focus_buf[Gui.focus_cursor] = 'Z';
else
Gui.focus_buf[Gui.focus_cursor]--;
break;
}
}
void TextChangeUp(void)
{
const CONTROL *ctrl;
ctrl = &Win[Gui.active_win].controls[Gui.active_ctrl];
switch (Gui.focus_format)
{
case EF_HEX:
if (Gui.focus_buf[Gui.focus_cursor] == 'F')
Gui.focus_buf[Gui.focus_cursor] = '0';
else if (Gui.focus_buf[Gui.focus_cursor] == '9')
Gui.focus_buf[Gui.focus_cursor] = 'A';
else
Gui.focus_buf[Gui.focus_cursor]++;
Gui.focus_value = hex2i(Gui.focus_buf);
break;
case EF_NUM:
if (Gui.focus_buf[Gui.focus_cursor] == '9')
Gui.focus_buf[Gui.focus_cursor] = '0';
else
Gui.focus_buf[Gui.focus_cursor]++;
s2fix(Gui.focus_buf, &Gui.focus_value);
break;
case EF_TEXT:
if (Gui.focus_buf[Gui.focus_cursor] == ' ')
Gui.focus_buf[Gui.focus_cursor] = 'A';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -