⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mcugui.c

📁 Keil平台
💻 C
📖 第 1 页 / 共 5 页
字号:
                        }
                    }
                }
            }
            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 + -