亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? listview.c

?? ucCos移植到廣州友善nano2410
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
*********************************************************************************************************
*                                                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        : LISTVIEW.c
Purpose     : Implementation of listview widget
---------------------------END-OF-HEADER------------------------------
*/

#include "GUI_ARRAY.h"
#include <stdlib.h>
#include <string.h>
#include "LISTVIEW_Private.h"
#include "HEADER.h"
#include "WIDGET.h"
#include "SCROLLBAR.h"
#include "GUIDebug.h"
#include "GUI_Protected.h"
#include "WM_Intern.h"

#if GUI_WINSUPPORT

/*********************************************************************
*
*       Private config defaults
*
**********************************************************************
*/

/* Define default fonts */
#ifndef LISTVIEW_FONT_DEFAULT
  #define LISTVIEW_FONT_DEFAULT &GUI_Font13_1
#endif

/* Define colors */
#ifndef LISTVIEW_BKCOLOR0_DEFAULT
  #define LISTVIEW_BKCOLOR0_DEFAULT GUI_WHITE     /* Not selected */
#endif

#ifndef LISTVIEW_BKCOLOR1_DEFAULT
  #define LISTVIEW_BKCOLOR1_DEFAULT GUI_GRAY      /* Selected, no focus */
#endif

#ifndef LISTVIEW_BKCOLOR2_DEFAULT
  #define LISTVIEW_BKCOLOR2_DEFAULT GUI_BLUE      /* Selected, focus */
#endif

#ifndef LISTVIEW_TEXTCOLOR0_DEFAULT
  #define LISTVIEW_TEXTCOLOR0_DEFAULT GUI_BLACK   /* Not selected */
#endif

#ifndef LISTVIEW_TEXTCOLOR1_DEFAULT
  #define LISTVIEW_TEXTCOLOR1_DEFAULT GUI_WHITE   /* Selected, no focus */
#endif

#ifndef LISTVIEW_TEXTCOLOR2_DEFAULT
  #define LISTVIEW_TEXTCOLOR2_DEFAULT GUI_WHITE   /* Selected, focus */
#endif

#ifndef LISTVIEW_GRIDCOLOR_DEFAULT
  #define LISTVIEW_GRIDCOLOR_DEFAULT GUI_LIGHTGRAY
#endif

/* Define default alignment */
#ifndef LISTVIEW_ALIGN_DEFAULT
  #define LISTVIEW_ALIGN_DEFAULT (GUI_TA_VCENTER | GUI_TA_HCENTER)
#endif

/*********************************************************************
*
*       Static data
*
**********************************************************************
*/
LISTVIEW_PROPS LISTVIEW_DefaultProps = {
  LISTVIEW_BKCOLOR0_DEFAULT,
  LISTVIEW_BKCOLOR1_DEFAULT,
  LISTVIEW_BKCOLOR2_DEFAULT,
  LISTVIEW_TEXTCOLOR0_DEFAULT,
  LISTVIEW_TEXTCOLOR1_DEFAULT,
  LISTVIEW_TEXTCOLOR2_DEFAULT,
  LISTVIEW_GRIDCOLOR_DEFAULT,
  LISTVIEW_FONT_DEFAULT
};

/*********************************************************************
*
*       Static routines
*
**********************************************************************
*/
/*********************************************************************
*
*       LISTVIEW__GetRowDistY
*/
unsigned LISTVIEW__GetRowDistY(const LISTVIEW_Obj* pObj) {
  unsigned RowDistY;
  if (pObj->RowDistY) {
    RowDistY = pObj->RowDistY;
  } else {
    RowDistY = GUI_GetYDistOfFont(pObj->Props.pFont);
    if (pObj->ShowGrid) {
      RowDistY++;
    }
  }
  return RowDistY;
}

/*********************************************************************
*
*       _GetNumVisibleRows
*
* Purpose:
*   Returns the number of visible rows according the header
*   and (if exist) horizontal scrollbar.
*
* Return value:
*   Number of visible rows. If no entire row can be displayed, this
*   function will return one.
*/
static unsigned _GetNumVisibleRows(LISTVIEW_Handle hObj, const LISTVIEW_Obj* pObj) {
  unsigned RowDistY, ySize, r = 1;
  GUI_RECT Rect;
  WM_GetInsideRectExScrollbar(hObj, &Rect);
  ySize    = Rect.y1 - Rect.y0 + 1 - HEADER_GetHeight(pObj->hHeader);
  RowDistY = LISTVIEW__GetRowDistY(pObj);
  if (RowDistY) {
    r = ySize / RowDistY;
    r = (r == 0) ? 1 : r;
  }
  return r;
}

/*********************************************************************
*
*       _Paint
*/
static void _Paint(LISTVIEW_Handle hObj, LISTVIEW_Obj* pObj, WM_MESSAGE* pMsg) {
  const GUI_ARRAY* pRow;
  GUI_RECT ClipRect, Rect;
  int NumRows, NumVisRows, NumColumns;
  int LBorder, RBorder, EffectSize;
  int xPos, yPos, Width, RowDistY;
  int Align, i, j, EndRow;
  /* Init some values */
  NumColumns = HEADER_GetNumItems(pObj->hHeader);
  NumRows    = GUI_ARRAY_GetNumItems(&pObj->RowArray);
  NumVisRows = _GetNumVisibleRows(hObj, pObj);
  RowDistY   = LISTVIEW__GetRowDistY(pObj);
  LBorder    = pObj->LBorder;
  RBorder    = pObj->RBorder;
  EffectSize = pObj->Widget.pEffect->EffectSize;
  yPos       = HEADER_GetHeight(pObj->hHeader) + EffectSize;
  EndRow     = pObj->ScrollStateV.v + (((NumVisRows + 1) > NumRows) ? NumRows : NumVisRows + 1);
  /* Calculate clipping rectangle */
  ClipRect = *(const GUI_RECT*)pMsg->Data.p;
  GUI_MoveRect(&ClipRect, -pObj->Widget.Win.Rect.x0, -pObj->Widget.Win.Rect.y0);
  WM_GetInsideRectExScrollbar(hObj, &Rect);
  GUI__IntersectRect(&ClipRect, &Rect);
  /* Set drawing color, font and text mode */
  LCD_SetColor(pObj->Props.aTextColor[0]);
  GUI_SetFont(pObj->Props.pFont);
  GUI_SetTextMode(GUI_TM_TRANS);
  /* Do the drawing */
  for (i = pObj->ScrollStateV.v; i < EndRow; i++) {
    pRow = (const GUI_ARRAY*)GUI_ARRAY_GetpItem(&pObj->RowArray, i);
    if (pRow) {
      Rect.y0 = yPos;
      /* Break when all other rows are outside the drawing area */
      if (Rect.y0 > ClipRect.y1) {
        break;
      }
      Rect.y1 = yPos + RowDistY - 1;
      /* Make sure that we draw only when row is in drawing area */
      if (Rect.y1 >= ClipRect.y0) {
        int ColorIndex;
        /* Set background color */
        if (i == pObj->Sel) {
          ColorIndex = (pObj->Widget.State & WIDGET_STATE_FOCUS) ? 2 : 1;
        } else {
          ColorIndex = 0;
        }
        LCD_SetBkColor(pObj->Props.aBkColor[ColorIndex]);
        /* Iterate over all columns */
        if (pObj->ShowGrid) {
          Rect.y1--;
        }
        xPos = EffectSize - pObj->ScrollStateH.v;
        for (j = 0; j < NumColumns; j++) {
          Width   = HEADER_GetItemWidth(pObj->hHeader, j);
          Rect.x0 = xPos;
          /* Break when all other columns are outside the drawing area */
          if (Rect.x0 > ClipRect.x1) {
            break;
          }
          Rect.x1 = xPos + Width - 1;
          /* Make sure that we draw only when column is in drawing area */
          if (Rect.x1 >= ClipRect.x0) {
            LISTVIEW_ITEM * pItem;
            pItem = (LISTVIEW_ITEM *)GUI_ARRAY_GetpItem(pRow, j);
            if (pItem->hItemInfo) {
              LISTVIEW_ITEM_INFO * pItemInfo;
              pItemInfo = (LISTVIEW_ITEM_INFO *)GUI_ALLOC_h2p(pItem->hItemInfo);
              LCD_SetBkColor(pItemInfo->aBkColor[ColorIndex]);
              LCD_SetColor(pItemInfo->aTextColor[ColorIndex]);
            } else {
              LCD_SetColor(pObj->Props.aTextColor[ColorIndex]);
            }
            /* Clear background */
            GUI_ClearRect(Rect.x0, Rect.y0, Rect.x1, Rect.y1);
            /* Draw text */
            Rect.x0 += LBorder;
            Rect.x1 -= RBorder;
            Align = *((int*)GUI_ARRAY_GetpItem(&pObj->AlignArray, j));
            GUI_DispStringInRect(pItem->acText, &Rect, Align);
            if (pItem->hItemInfo) {
              LCD_SetBkColor(pObj->Props.aBkColor[ColorIndex]);
            }
          }
          xPos += Width;
        }
        /* Clear unused area to the right of items */
        if (xPos <= ClipRect.x1) {
          GUI_ClearRect(xPos, Rect.y0, ClipRect.x1, Rect.y1);
        }
      }
      yPos += RowDistY;
    }
  }
  /* Clear unused area below items */
  if (yPos <= ClipRect.y1) {
    LCD_SetBkColor(pObj->Props.aBkColor[0]);
    GUI_ClearRect(ClipRect.x0, yPos, ClipRect.x1, ClipRect.y1);
  }
  /* Draw grid */
  if (pObj->ShowGrid) {
    LCD_SetColor(pObj->Props.GridColor);
    yPos = HEADER_GetHeight(pObj->hHeader) + EffectSize - 1;
    for (i = 0; i < NumVisRows; i++) {
      yPos += RowDistY;
      /* Break when all other rows are outside the drawing area */
      if (yPos > ClipRect.y1) {
        break;
      }
      /* Make sure that we draw only when row is in drawing area */
      if (yPos >= ClipRect.y0) {
        GUI_DrawHLine(yPos, ClipRect.x0, ClipRect.x1);
      }
    }
    xPos = EffectSize - pObj->ScrollStateH.v;
    for (i = 0; i < NumColumns; i++) {
      xPos += HEADER_GetItemWidth(pObj->hHeader, i);
      /* Break when all other columns are outside the drawing area */
      if (xPos > ClipRect.x1) {
        break;
      }
      /* Make sure that we draw only when column is in drawing area */
      if (xPos >= ClipRect.x0) {
        GUI_DrawVLine(xPos, ClipRect.y0, ClipRect.y1);
      }
    }
  }
  /* Draw the effect */
  WIDGET__EFFECT_DrawDown(&pObj->Widget);
}

/*********************************************************************
*
*       LISTVIEW__InvalidateInsideArea
*/
void LISTVIEW__InvalidateInsideArea(LISTVIEW_Handle hObj, LISTVIEW_Obj* pObj) {
  GUI_RECT Rect;
  int HeaderHeight;
  HeaderHeight = HEADER_GetHeight(pObj->hHeader);
  WM_GetInsideRectExScrollbar(hObj, &Rect);
  Rect.y0 += HeaderHeight;
  WM_InvalidateRect(hObj, &Rect);
}

/*********************************************************************
*
*       LISTVIEW__InvalidateRow
*/
void LISTVIEW__InvalidateRow(LISTVIEW_Handle hObj, LISTVIEW_Obj* pObj, int Sel) {
  if (Sel >= 0) {
    GUI_RECT Rect;
    int HeaderHeight, RowDistY;
    HeaderHeight = HEADER_GetHeight(pObj->hHeader);
    RowDistY     = LISTVIEW__GetRowDistY(pObj);
    WM_GetInsideRectExScrollbar(hObj, &Rect);
    Rect.y0 += HeaderHeight + (Sel - pObj->ScrollStateV.v) * RowDistY;
    Rect.y1  = Rect.y0 + RowDistY - 1;
    WM_InvalidateRect(hObj, &Rect);
  }
}

/*********************************************************************
*
*       _SetSelFromPos
*/
static void _SetSelFromPos(LISTVIEW_Handle hObj, LISTVIEW_Obj* pObj, const GUI_PID_STATE* pState) {
  GUI_RECT Rect;
  int x, y, HeaderHeight;
  HeaderHeight = HEADER_GetHeight(pObj->hHeader);
  WM_GetInsideRectExScrollbar(hObj, &Rect);
  x = pState->x - Rect.x0;
  y = pState->y - Rect.y0 - HeaderHeight;
  Rect.x1 -= Rect.x0;
  Rect.y1 -= Rect.y0;
  if ((x >= 0) && (x <= Rect.x1) && (y >= 0) && (y <= (Rect.y1 - HeaderHeight))) {
    unsigned Sel;
    Sel = (y / LISTVIEW__GetRowDistY(pObj)) + pObj->ScrollStateV.v;
    if (Sel < GUI_ARRAY_GetNumItems(&pObj->RowArray)) {
      LISTVIEW_SetSel(hObj, Sel);
    }
  }
}

/*********************************************************************
*
*       _NotifyOwner
*
* Purpose:
*   Notify owner of the window.
*   If no owner is registered, the parent is considered owner.
*/
static void _NotifyOwner(WM_HWIN hObj, int Notification) {
  WM_MESSAGE Msg = {0};
  WM_HWIN hOwner;
  LISTVIEW_Obj* pObj    = LISTVIEW_H2P(hObj);
  hOwner = pObj->hOwner ? pObj->hOwner : WM_GetParent(hObj);
  Msg.MsgId   = WM_NOTIFY_PARENT;
  Msg.Data.v  = Notification;
  Msg.hWin    = hObj;
  WM_SendMessage(hOwner, &Msg);
}

/*********************************************************************
*
*       _OnTouch
*/
static void _OnTouch(LISTVIEW_Handle hObj, LISTVIEW_Obj* pObj, WM_MESSAGE*pMsg) {
  int Notification;
  const GUI_PID_STATE* pState = (const GUI_PID_STATE*)pMsg->Data.p;
  GUI_USE_PARA(pObj);
  if (pMsg->Data.p) {  /* Something happened in our area (pressed or released) */
    if (pState->Pressed) {
      _SetSelFromPos(hObj, pObj, pState);
      Notification = WM_NOTIFICATION_CLICKED;
      WM_SetFocus(hObj);
    } else {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀av一级做a爰片久久| 国产性天天综合网| 五月综合激情婷婷六月色窝| 91成人免费网站| 亚洲国产成人精品视频| 制服丝袜亚洲精品中文字幕| 老司机精品视频导航| 久久久久久久av麻豆果冻| 丁香婷婷综合激情五月色| 日韩一区欧美小说| 精品婷婷伊人一区三区三| 日本伊人精品一区二区三区观看方式 | 国产精品电影一区二区三区| 99久久综合精品| 亚洲一二三区视频在线观看| 欧美日韩国产高清一区二区三区 | 欧美午夜片在线观看| 日韩电影在线一区| 久久久久99精品一区| gogogo免费视频观看亚洲一| 亚洲午夜日本在线观看| 欧美一级视频精品观看| 国产精品综合一区二区| 亚洲女人****多毛耸耸8| 91精品久久久久久久久99蜜臂| 国产最新精品免费| 综合分类小说区另类春色亚洲小说欧美 | 国产精品夜夜嗨| 亚洲欧美日韩一区| 欧美一区二区免费| av电影在线观看一区| 亚洲高清免费视频| 久久天天做天天爱综合色| 色综合久久久久综合99| 奇米影视一区二区三区小说| 欧美国产精品中文字幕| 欧美日韩卡一卡二| 国产一区二区中文字幕| 亚洲摸摸操操av| 欧美va在线播放| 99国产欧美另类久久久精品| 欧美aaaaa成人免费观看视频| 国产欧美日韩在线| 欧美日韩国产不卡| 丁香婷婷综合色啪| 免费在线观看日韩欧美| 成人欧美一区二区三区黑人麻豆 | 日本视频中文字幕一区二区三区| 国产三级精品三级在线专区| 欧美亚男人的天堂| 国产精品18久久久久久久久 | 亚洲人xxxx| 亚洲精品一区二区精华| 欧美日韩一区小说| 成人中文字幕电影| 日本vs亚洲vs韩国一区三区二区| 一区二区中文视频| 精品国产一区二区三区不卡 | 色综合中文字幕| 国产毛片精品国产一区二区三区| 一区二区三区.www| 欧美极品xxx| 日韩一区二区精品葵司在线| 91无套直看片红桃| 国产成人精品免费在线| 免费人成网站在线观看欧美高清| 亚洲六月丁香色婷婷综合久久| 久久这里只有精品视频网| 欧美久久高跟鞋激| 99这里只有久久精品视频| 久99久精品视频免费观看| 亚洲成人777| 中文字幕一区二区三区四区不卡| 精品久久久久久亚洲综合网 | 欧美日韩一区二区三区在线看| 高清在线观看日韩| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲久草在线视频| 国产精品毛片高清在线完整版| 欧美成va人片在线观看| 欧美日韩精品高清| 色婷婷av一区| av毛片久久久久**hd| 国产jizzjizz一区二区| 黄网站免费久久| 麻豆精品在线观看| 日韩高清不卡一区二区三区| 亚洲一区二区免费视频| 亚洲欧美日本在线| 国产精品成人一区二区艾草| 日本一区二区免费在线| 国产午夜一区二区三区| 精品久久人人做人人爰| 精品国偷自产国产一区| 日韩你懂的电影在线观看| 欧美精品丝袜中出| 欧美日韩国产高清一区二区三区| 欧美无人高清视频在线观看| 色久综合一二码| 91免费国产在线| 91网站在线播放| av不卡一区二区三区| 成人永久免费视频| 风间由美中文字幕在线看视频国产欧美| 极品少妇一区二区| 狠狠色狠狠色综合日日91app| 日本不卡视频在线| 欧美aaa在线| 韩国中文字幕2020精品| 精品无码三级在线观看视频| 日本在线不卡一区| 久久精品国产99久久6| 日本 国产 欧美色综合| 免费看日韩a级影片| 麻豆91精品视频| 麻豆国产精品官网| 韩国视频一区二区| 国产黑丝在线一区二区三区| 国产精品一二一区| hitomi一区二区三区精品| 99综合电影在线视频| 91福利在线免费观看| 欧美性猛交xxxx黑人交 | 色狠狠桃花综合| 欧美性色aⅴ视频一区日韩精品| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 亚洲私人黄色宅男| 亚洲欧洲精品一区二区三区| 自拍偷拍国产亚洲| 亚洲国产日韩在线一区模特 | 午夜激情一区二区| 美日韩一区二区三区| 国产在线精品一区在线观看麻豆| 国产麻豆成人精品| 国产在线不卡一区| 国产在线精品不卡| 国产成人亚洲综合a∨猫咪| 成人午夜av在线| 91美女在线看| 在线播放亚洲一区| 精品美女一区二区| 欧美一区在线视频| 精品999久久久| 中文av一区二区| 亚洲一区二区3| 亚洲成人免费在线| 国产综合一区二区| 91在线精品一区二区| 欧美日韩视频在线观看一区二区三区| 欧美一级夜夜爽| 国产精品视频一区二区三区不卡| 亚洲欧美日韩国产综合| 日韩avvvv在线播放| 国产在线精品一区二区三区不卡| 99视频精品全部免费在线| 欧美三级电影在线看| 26uuu国产电影一区二区| 综合欧美亚洲日本| 蜜臀91精品一区二区三区| 成人午夜av在线| 欧美一级一级性生活免费录像| 中文字幕国产一区二区| 婷婷一区二区三区| 国产成人高清在线| 欧美日韩激情一区二区三区| 久久精品人人做人人爽人人| 亚洲一区二区三区视频在线 | 亚洲免费三区一区二区| 蜜桃久久久久久久| 91麻豆蜜桃一区二区三区| 日韩午夜激情视频| 18成人在线观看| 麻豆成人91精品二区三区| 色综合久久久久| 精品福利一二区| 亚洲视频一区二区在线观看| 国产日韩欧美激情| 调教+趴+乳夹+国产+精品| 国产精品77777竹菊影视小说| 欧美视频在线播放| 久久一区二区视频| 一级日本不卡的影视| 免费欧美日韩国产三级电影| jizz一区二区| 精品久久久久久久一区二区蜜臀| 国产精品毛片大码女人| 久草在线在线精品观看| 在线精品视频一区二区三四| 欧美精品日韩一区| 欧美日韩在线电影| 一本到不卡免费一区二区| 成人免费视频网站在线观看| 国产资源在线一区| 欧美国产日产图区| 亚洲一区免费在线观看| 一区二区三区高清在线| 国产成人免费在线视频| 日韩午夜av一区| 亚洲一级二级三级| 一区二区三区四区亚洲|