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

📄 uilistw.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
📖 第 1 页 / 共 3 页
字号:
/******************************************************************/
/*  Copyright (C) 2007 ROCK-CHIPS FUZHOU . All Rights Reserved.  */
/*******************************************************************
File :  uiListw.c
Desc :  弹出菜单类窗口

Author : GUI Develop Group.lzj
Date : 2007-08-10
Notes :
$Log: uilistw.c,v $
Revision 1.7  2008/07/01 11:50:41  HSL
修改 滚动文本随机出现花屏的 BUG.

Revision 1.6  2008/06/19 04:43:20  Administrator
代码整理!

Revision 1.5  2008/06/02 08:09:22  HSL
修改关闭窗口时重复关闭子窗口的 BUG.

Revision 1.4  2008/05/26 03:28:54  HSL
修改可选型列表初始选择项超出一屏的时候显示不对的BUG.

Revision 1.3  2008/05/24 09:57:18  Administrator
恢复成原来的版本!

Revision 1.2  2008/05/20 07:39:55  HSL
修改窗口系统和控件的 BUG.

Revision 1.1.1.1  2008/05/07 04:15:08  Administrator
no message

Revision 1.1.1.1  2008/03/06 13:29:09  Lingzhaojun
no message

Revision 1.25  2008/01/07 06:25:38  Lingzhaojun
no message

Revision 1.24  2007/12/24 07:56:07  Lingzhaojun
同步蓝魔版本基本模块

Revision 1.23  2007/12/11 09:18:55  Huangshilin
把视频 6M buffer改为静态,修改 GUI 于该 BUFFER 复用,修改 窗口系统
部分 BUG.

Revision 1.22  2007/12/06 05:16:18  Huangshilin
增加 视频静态buffer和GUI 复用.修改窗口系统.

Revision 1.21  2007/12/06 03:25:58  Lingzhaojun
提交双list控件

Revision 1.20  2007/11/29 13:11:12  Hanjiang
no message

Revision 1.19  2007/11/27 09:06:40  Lingzhaojun
修改滚动文字长度计算不准

Revision 1.18  2007/11/22 05:04:46  Lingzhaojun
列表类添加自动划勾

Revision 1.17  2007/11/15 14:54:10  Caifeng
资源管理器支持滚动字符串

Revision 1.16  2007/11/09 09:38:48  Caifeng
针对资源管理器做相应修改

Revision 1.15  2007/11/09 09:12:39  Caifeng
加入对长字符串滚动支持

Revision 1.14  2007/10/30 12:05:10  Lingzhaojun
修改按键映射

Revision 1.13  2007/10/15 02:58:09  Lingzhaojun
添加GUI控件注释

Revision 1.12  2007/10/12 08:22:01  Lingzhaojun
提交九宫格控件的修改,加入滚动条等,提交文本框修改,

Revision 1.11  2007/10/11 04:09:16  Huangshilin
System 其他目录。

Revision 1.10  2007/10/09 01:05:26  Zhaojun
no message

Revision 1.9  2007/10/08 04:02:23  Lingzhaojun
去除GUI的VC编译警告

Revision 1.8  2007/10/08 03:11:08  Lingzhaojun
修改ARM编译中的类型错误

Revision 1.7  2007/10/08 02:04:27  Lingzhaojun
GUI添加自动注释

   20070911 Lingzj 增加对资源管理器型,文件列表型的支持
   20070911 Lingzj 支持unicode,char型菜单条显示,
   20070912 Lingzj 增加菜单删除功能
*********************************************************************/


#include "uiListw.h"
#include "uiscrolltext.h"
#include "uianiw.h"


/*----------------------------------------------------------------------
Name  :  ListWinAddItem
Desc  :  列表框(弹出菜单)添加菜单条目
Params:  wParam:添加的条目数,lParam 条目
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 ListWinAddItem(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{

    W_List *WListObj = (W_List *)win->Data;
    UINT32 i;
    UINT32 number = wParam;
    ListItem*List = NULL;
    FileListItem *FileList = NULL;


    if (win->style&WES_FileList)
    {
        UINT8 *p = NULL;
        WCHAR *Q = NULL;
        UINT16 len, i = 0;
        FileList = (FileListItem*)lParam;
        for (i = 0;i < number;i++)
        {
            if (win->style&WES_Unicode)  //unicode
            {
                len = GetUnicodeLen((WCHAR*)FileList->pText);
                p = MALLOC(sizeof(FileListItem) + (len + 1) * 2);
                Q = Unicodestrcat((WCHAR*)((char*)p + sizeof(FileListItem)), (WCHAR*)FileList->pText);
                *Q = 0x00;//0x0a;
                *(Q--) = 0x00;//0x0d;
            }
            else
            {
                len = RKstrlen((char*)FileList->pText) + 1;
                p = MALLOC(sizeof(FileListItem) + len);
                memcpy8((UINT8*)((char*)p + sizeof(FileListItem)), (UINT8*)FileList->pText, len);
            }
            //FileList->pText=p+sizeof(FileListItem);
            memcpy(p, FileList, sizeof(FileListItem));
            ((FileListItem*)p)->pText = p + sizeof(FileListItem);
            FileList++;
            ListAddItem(WListObj->ListList, (FileListItem*)p);
        }
        WListObj->CurrItem = (FileListItem*)ListGetItem(WListObj->ListList, 0);
        if (win->style&WES_Scroll)
        {
            WListObj->pScrollTxtWin->style |= WS_ACTIVE;
            WListObj->pScrollTxtWin->x = (UINT16)(win->x + WListObj->ItemLeft + 20);
            WListObj->pScrollTxtWin->y = (UINT16)(win->y + 2 + (WListObj->Itemheight * 0 + WListObj->TitleHeight));
            WindowSendMessage(WListObj->pScrollTxtWin, WM_SetTxt, (WMPARAM)(((FileListItem*)WListObj->CurrItem)->pText), 0);
        }
    }

    else
    {

        for (i = 0;i < number;i++)
        {
            List = MALLOC(sizeof(ListItem));
            if (!List)return FALSE;
            memcpy(List, (ListItem*)lParam, (sizeof(ListItem)));
            ListAddItem(WListObj->ListList, List);
            ((ListItem*)lParam)++;
        }
        WListObj->CurrItem = (ListItem*)ListGetItem(WListObj->ListList, 0);
    }
    WListObj->MaxItemIndex = WListObj->MaxItemIndex + number;

    WindowInvalidateWindow(win);

    return TRUE;

}


/*----------------------------------------------------------------------
Name  :  ListWinDeleteItem
Desc  :  列表框(弹出菜单)删除条目
Params:  wParam: 条目Index
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 ListWinDeleteItem(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{

    W_List *WListObj = (W_List *)win->Data;
    UINT16 Index = wParam;

    ListDeleteItem(WListObj->ListList, Index);
    WListObj->MaxItemIndex--;
    WindowInvalidateWindow(win);

    return TRUE;
}



/*----------------------------------------------------------------------
Name  :  ListWinChangeItem
Desc  :  列表框(弹出菜单)改变一个条目内容
Params:  wParam: 条目Index  lParam:新的内容
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 ListWinChangeItem(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{

    W_List *WListObj = (W_List *)win->Data;
    UINT16 Index = wParam;
    ListItem*Menu = (ListItem*)lParam;
    ListItem *OldItem = NULL;
    FileListItem *FileItem = (FileListItem*)lParam;
    FileListItem *OldFile = NULL;

    if (win->style&WES_FileList)  //资源管理器,文件列表型
    {
        UINT8 *p = NULL;
        WCHAR *Q = NULL;
        UINT16 len;

        ListDeleteItem(WListObj->ListList, Index);

        if (win->style&WES_Unicode)  //unicode
        {
            len = GetUnicodeLen((WCHAR*)FileItem->pText);

            p = MALLOC(sizeof(FileListItem) + (len + 1) * 2);
            Q = Unicodestrcat((WCHAR*)((char*)p + sizeof(FileListItem)), (WCHAR*)(FileItem->pText));
            *Q = 0x00;/*0x0a;*/
            *(Q--) = 0x00;/*0x0d;*/
        }
        else
        {
            len = RKstrlen((char*)FileItem->pText) + 1;
            p = MALLOC(sizeof(FileListItem) + len);
            memcpy8((UINT8*)(p + sizeof(FileListItem)), (UINT8*)(FileItem->pText), len);
        }
        //FileItem->pText=p+sizeof(FileListItem);
        memcpy(p, FileItem, sizeof(FileListItem));
        ((FileListItem*)p)->pText = p + sizeof(FileListItem);
        ListInsertItem(WListObj->ListList, p, Index);

    }
    else
    {
        OldItem = ListGetItem(WListObj->ListList, Index);
        OldItem->ICON = Menu->ICON;
        OldItem->Text = Menu->Text;
    }
    if ((win->style&WES_Scroll) && Index == WListObj->CurrSelItemIndex )
    {
        INT16U StrLen = MeasureStringPixLen((FileItem->pText), Font16X16);
        if (StrLen > 200)
            {
            WindowSendMessage(WListObj->pScrollTxtWin, WM_SetTxt, (WMPARAM)(FileItem->pText), 0);
            }
    }

    WindowInvalidateWindow(win);

    return TRUE;
}




/*----------------------------------------------------------------------
Name  :  ListWinGetMaxItem
Desc  :  列表框(弹出菜单)获取Item总数目
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 ListWinGetMaxItem(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
    W_List *WListObj = (W_List *)win->Data;
    return WListObj->MaxItemIndex;
}

/*----------------------------------------------------------------------
Name  :  ListWinGetCurItem
Desc  :  列表框(弹出菜单)获取当前Item 序号
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 ListWinGetCurItemIndex(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
    W_List *WListObj = (W_List *)win->Data;
    return WListObj->CurrItemIndex;
}

/*----------------------------------------------------------------------
Name  :  ListWinDeleteAll
Desc  :  列表框(弹出菜单)删除所有Item
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 ListWinDeleteAll(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{

    W_List *WListObj = (W_List *)win->Data;
    UINT16 Index = wParam;

    for (Index = 1;Index <= WListObj->MaxItemIndex;Index++)
    {
        ListDeleteItem(WListObj->ListList, 0);
    }
    WListObj->MaxItemIndex = 0;
    WindowInvalidateWindow(win);

    return TRUE;

}


/*----------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -