📄 uilistw.c
字号:
/******************************************************************/
/* 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 + -