/********************************************************************* * * _AddKey * * Returns: 1 if Key has been consumed * 0 else */ static int _AddKey(LISTVIEW_Handle hObj, LISTVIEW_Obj* pObj, int Key) { switch (Key) { case GUI_KEY_DOWN: LISTVIEW__MoveSel(hObj, pObj, 1); return 1; /* Key has been consumed */ case GUI_KEY_PGDOWN: _OnPage(hObj, pObj, 1); return 1; /* Key has been consumed */ case GUI_KEY_UP: LISTVIEW__MoveSel(hObj, pObj, -1); return 1; /* Key has been consumed */ case GUI_KEY_PGUP: _OnPage(hObj, pObj, -1); return 1; /* Key has been consumed */ case GUI_KEY_HOME: LISTVIEW__SetSel(hObj, pObj, 0); return 1; /* Key has been consumed */ case GUI_KEY_END: LISTVIEW__SetSel(hObj, pObj, LISTVIEW__GetNumRows(pObj) - 1); return 1; /* Key has been consumed */ case GUI_KEY_RIGHT: if (WM_SetScrollValue(&pObj->ScrollStateH, pObj->ScrollStateH.v + pObj->Props.ScrollStepH)) { LISTVIEW__UpdateScrollPos(hObj, pObj); LISTVIEW__InvalidateInsideArea(hObj, pObj); } return 1; /* Key has been consumed */ case GUI_KEY_LEFT: if (WM_SetScrollValue(&pObj->ScrollStateH, pObj->ScrollStateH.v - pObj->Props.ScrollStepH)) { LISTVIEW__UpdateScrollPos(hObj, pObj); LISTVIEW__InvalidateInsideArea(hObj, pObj); } return 1; /* Key has been consumed */ } return 0; /* Key has NOT been consumed */ }
/********************************************************************* * * LISTVIEW__UpdateScrollParas * * Purpose: * Calculates number of items and page size of both vertical * and horizontal scrollbar. After this LISTVIEW__UpdateScrollPos will * be called to ensure scroll positions are in valid ranges. */ int LISTVIEW__UpdateScrollParas(LISTVIEW_Handle hObj, LISTVIEW_Obj* pObj) { int NumRows, IsRequired; int xSize, xSizeHeader; unsigned NumVisibleRows; NumVisibleRows = _GetNumVisibleRows(hObj, pObj); xSize = _GetXSize(hObj); xSizeHeader = _GetHeaderWidth(pObj); if (pObj->Flags & LISTVIEW_SF_AUTOSCROLLBAR_V) { IsRequired = (NumVisibleRows < GUI_ARRAY_GetNumItems(&pObj->RowArray)); WM_SetScrollbarV(hObj, IsRequired); } if (pObj->Flags & LISTVIEW_SF_AUTOSCROLLBAR_H) { IsRequired = (xSizeHeader > xSize); WM_SetScrollbarH(hObj, IsRequired); NumVisibleRows = _GetNumVisibleRows(hObj, pObj); } NumRows = LISTVIEW__GetNumRows(pObj); /* update vertical scrollbar */ pObj->ScrollStateV.PageSize = NumVisibleRows; pObj->ScrollStateV.NumItems = (NumRows) ? NumRows : 1; /* update horizontal scrollbar */ pObj->ScrollStateH.PageSize = xSize; pObj->ScrollStateH.NumItems = xSizeHeader; return LISTVIEW__UpdateScrollPos(hObj, pObj); }
/********************************************************************* * * LISTVIEW__SetSel */ void LISTVIEW__SetSel(LISTVIEW_Handle hObj, LISTVIEW_Obj* pObj, int NewSel) { int NumRows; NumRows = LISTVIEW__GetNumRows(pObj); if (NewSel >= NumRows) { NewSel = NumRows - 1; } if (NewSel < 0) { NewSel = -1; } if (NewSel != pObj->Sel) { char Disabled; LISTVIEW_ROW * pRow; pRow = (LISTVIEW_ROW *)GUI_ARRAY_GetpItem(&pObj->RowArray, NewSel); if (pRow) { Disabled = pRow->Disabled; } else { Disabled = 0; } if (Disabled == 0) { int OldSel; OldSel = pObj->Sel; pObj->Sel = NewSel; if (LISTVIEW__UpdateScrollPos(hObj, pObj)) { LISTVIEW__InvalidateInsideArea(hObj, pObj); } else { LISTVIEW__InvalidateRow(hObj, pObj, OldSel); LISTVIEW__InvalidateRow(hObj, pObj, NewSel); } WM_NotifyParent(hObj, WM_NOTIFICATION_SEL_CHANGED); } } }
/********************************************************************* * * LISTVIEW__UpdateScrollParas * * Purpose: * Calculates number of items and page size of both vertical * and horizontal scrollbar. After this LISTVIEW__UpdateScrollPos will * be called to ensure scroll positions are in valid ranges. */ int LISTVIEW__UpdateScrollParas(LISTVIEW_Handle hObj, LISTVIEW_Obj* pObj) { int NumRows; NumRows = GUI_ARRAY_GetNumItems(&pObj->RowArray); /* update vertical scrollbar */ pObj->ScrollStateV.PageSize = _GetNumVisibleRows(hObj, pObj); pObj->ScrollStateV.NumItems = (NumRows) ? NumRows : 1; /* update horizontal scrollbar */ pObj->ScrollStateH.PageSize = _GetXSize(hObj); pObj->ScrollStateH.NumItems = _GetHeaderWidth(pObj, pObj->hHeader); return LISTVIEW__UpdateScrollPos(hObj, pObj); }