📄 listedit_setsel.c
字号:
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* 礐/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : LISTEDIT_SetSel.c
Purpose : Implementation of LISTEDIT_SetSel
---------------------------END-OF-HEADER------------------------------
*/
#include "LISTEDIT_Private.h"
#include "string.h"
#if GUI_WINSUPPORT
/*********************************************************************
*
* Public routines
*
**********************************************************************
*/
/*********************************************************************
*
* LISTEDIT_SetRowSel
*/
void LISTEDIT_SetRowSel(LISTEDIT_Handle hObj, int NewSel) {
if (hObj) {
LISTEDIT_Obj* pObj;
int MaxSel;
WM_LOCK();
pObj = LISTEDIT_H2P(hObj);
MaxSel = GUI_ARRAY_GetNumItems(&pObj->RowArray) - 1;
if (NewSel > MaxSel) {
NewSel = MaxSel;
}
if (NewSel < 0) {
NewSel = -1;
}
if (NewSel != pObj->RowSel)
{
int OldSel;
LISTEDIT_ITEM * pItem;
GUI_ARRAY* pRow;
OldSel = pObj->RowSel;
pObj->RowSel = NewSel;
pRow = ( GUI_ARRAY*)GUI_ARRAY_GetpItem(&pObj->RowArray,pObj->RowSel);
pItem = (LISTEDIT_ITEM *)GUI_ARRAY_GetpItem(pRow, pObj->ColSel);
memset(pObj->CurString,0,LISTEDIT_EDIT_MAXLEN);
if(strlen(pItem->acText)>LISTEDIT_EDIT_MAXLEN)
memcpy(pObj->CurString,pItem->acText,LISTEDIT_EDIT_MAXLEN);
else
memcpy(pObj->CurString,pItem->acText,strlen(pItem->acText));
if (LISTEDIT__UpdateScrollPos(hObj, pObj,1)) {
LISTEDIT__InvalidateInsideArea(hObj, pObj);
} else {
LISTEDIT__InvalidateRow(hObj, pObj, OldSel);
LISTEDIT__InvalidateRow(hObj, pObj, NewSel);
}
WM_NotifyParent(hObj, WM_NOTIFICATION_SEL_CHANGED);
}
WM_UNLOCK();
}
}
/*********************************************************************
*
* LISTEDIT_SetColSel
*/
void LISTEDIT_SetColSel(LISTEDIT_Handle hObj, int NewSel)
{
if (hObj) {
LISTEDIT_Obj* pObj;
int MaxSel;
WM_LOCK();
pObj = LISTEDIT_H2P(hObj);
//MaxSel = GUI_ARRAY_GetNumItems(&pObj->RowArray) - 1;
MaxSel = HEADER_GetNumItems(pObj->hHeader) - 1;
if (NewSel > MaxSel)
{
if(pObj->RowSel>=(int)GUI_ARRAY_GetNumItems(&pObj->RowArray)-1)
NewSel = MaxSel;
else
{
NewSel=0;
LISTEDIT_IncRowSel(hObj);
}
}
if (NewSel < 0)
{
//Uart_Printf("NewCol=%d,CurRow=%d\n",NewSel,pObj->RowSel);
if(pObj->RowSel<=0)
NewSel = 0;
else
{
NewSel=MaxSel;
LISTEDIT_DecRowSel(hObj);
}
}
if (NewSel != pObj->ColSel)
{
int OldSel;
LISTEDIT_ITEM * pItem;
GUI_ARRAY* pRow;
OldSel = pObj->ColSel;
pObj->ColSel = NewSel;
pRow = ( GUI_ARRAY*)GUI_ARRAY_GetpItem(&pObj->RowArray,pObj->RowSel);
pItem = (LISTEDIT_ITEM *)GUI_ARRAY_GetpItem(pRow, pObj->ColSel);
memset(pObj->CurString,0,LISTEDIT_EDIT_MAXLEN);
if(strlen(pItem->acText)>LISTEDIT_EDIT_MAXLEN)
memcpy(pObj->CurString,pItem->acText,LISTEDIT_EDIT_MAXLEN);
else
memcpy(pObj->CurString,pItem->acText,strlen(pItem->acText));
if (LISTEDIT__UpdateScrollPos(hObj, pObj,0))
{
int i=0,hHeaderPos=0;
LISTEDIT__InvalidateInsideArea(hObj, pObj);
for(i=0;i<pObj->ScrollStateH.v;i++)
{
hHeaderPos+=HEADER_GetItemWidth(pObj->hHeader,i);
}
HEADER_SetScrollPos(pObj->hHeader, hHeaderPos);
}
else
{
LISTEDIT__InvalidateCol(hObj, pObj, OldSel);
LISTEDIT__InvalidateCol(hObj, pObj, NewSel);
}
WM_NotifyParent(hObj, WM_NOTIFICATION_SEL_CHANGED);
}
WM_UNLOCK();
}
}
#else /* Avoid problems with empty object modules */
void LISTEDIT_SetRowSel_C(void);
void LISTEDIT_SetRowSel_C(void) {}
void LISTEDIT_SetColSel_C(void);
void LISTEDIT_SetColSel_C(void) {}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -