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

📄 listmodel.h

📁 Minigui 的嵌入式图形用户接口的库源码
💻 H
字号:
/*** $Id: listmodel.h,v 1.6 2005/01/19 05:41:06 clear Exp $ **** listmodel.h: header file of item data model.**** Copyright (C) 2004 Feynman Software.*/#ifndef _LISTMODEL_H#define _LISTMODEL_H#include "ctrl/scrollview.h"#include "../list.h"#include "scrolled.h"#ifdef __cplusplusextern "C"{#endif/* ---------------------------------------------------------------- */typedef GHANDLE HITEM;typedef SVITEM_CMP MGITEM_CMP;typedef struct _MgList MgList;typedef struct _MgItem MgItem;typedef int (*MGITEM_CMP_EX) (MgList *mglst, HITEM hsvi1, HITEM hsvi2);typedef int (*MGITEM_GETRECT) (HWND hWnd, HITEM hitem, RECT *rcItem, BOOL bConv);typedef int (*MGITEM_ISIN)    (MgList *mglst, int mouseX, int mouseY, MgItem**pRet, int *item_y);typedef struct _mgitem_operations{    SVITEM_INITFUNC     initItem;     /** called when an scrollview item is created */    SVITEM_DESTROYFUNC  destroyItem;  /** called when an item is destroied */    SVITEM_DRAWFUNC     drawItem;     /** call this to draw an item */    MGITEM_GETRECT      getRect;      /** call this to get item rect */    MGITEM_ISIN         isInItem;     /** call this to decides whether a position is in an item rect */} MGITEMOPS;typedef MGITEMOPS* PMGITEMOPS;/* ---------------------------------------------------------------- */#define CF_AUTOSORT      0x00000001    /* auto sort style *//* item status flags */#define CTST_NORMAL     0x0000    //normal status#define CTST_SELECTED   0x0001L   //selected status//#define MGLIST_ST_NORMAL     0x00000000L#define MGLIST_ST_FROZEN     0x00000010L#define MG_CMP_TYPE_NORMAL      0#define MG_CMP_TYPE_EX          1/* item struct */struct _MgItem{    list_t    list;          // list pointer    list_t    sel_list;      // selected list pointer    DWORD     flags;         // item flags    DWORD     addData;       // item additional data};struct _MgList{    /* current list item number */    int nItemNr;    /* total item height */    int nTotalItemH;    /* ptr of the hilighted item */    MgItem* pItemHilighted;    /* item list queue */    list_t queue;    /* selected item list queue */    list_t sel_queue;//FIXME, should has only one copy for a class    /* item compare function */    MGITEM_CMP itemCmp;    MGITEMOPS iop;    /* mglist window */    HWND hLst;    DWORD flags;};/* ------------------------- external api -------------------------- */int DefaultItemViewProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam,                         PSCRDATA pscrdata, MgList *mglst);SVITEM_DRAWFUNC mglist_set_itemdraw (MgList *mglst, SVITEM_DRAWFUNC draw_func);int     mglist_init               (MgList *mglst, HWND hWnd);void    mglist_destroy            (MgList *mglst);int     mglist_add_item           (MgList *mglst, MgItem* hitem, MgItem* hprev, MgItem *hnext,                                        int nItem, int *idx);int     mglist_del_item           (MgList *mglst, MgItem* hitem);DWORD   mglist_get_item_adddata   (HITEM hitem);DWORD   mglist_set_item_adddata   (HITEM hitem, DWORD adddata);void    mglist_hilight_item       (MgList *mglst, MgItem* hitem);void    mglist_refresh_item       (MgList *mglst, HITEM hivi);void    mglist_set_itemops        (MgList *mglst, PMGITEMOPS iop);MgItem* mglist_get_item_by_index  (MgList *mglst, int nItem);MgItem* mglist_get_next_item      (MgList *mglst, MgItem* hitem);MgItem* mglist_get_prev_item      (MgList *mglst, MgItem* hitem);int     mglist_move_item          (MgList *mglst, MgItem* pci, MgItem* preitem);MgItem* mglist_getitem_byindex    (MgList *mglst, int index);int     mglist_get_item_index     (MgList *mglst, MgItem *item);int     mglist_sort_items         (MgList *mglst, void* pfn, int fn_type);BOOL    mglist_make_item_visible  (MgList *mglst, PSCRDATA pscrdata, HITEM hitem);void    mglist_freeze             (HWND hWnd, MgList *mglst, BOOL lock);int     mglist_adjust_items_height(HWND hWnd, MgList *mglst, PSCRDATA pscrdata, int diff);void    mglist_redraw_item        (MgList *mglst, HITEM hivi);#define mglist_for_each(pos, list) \    list_for_each(pos, &((MgList *)list)->queue)#define mglist_entry(ptr) \    list_entry(ptr, MgItem, list)#define mglist_empty(mglst) \    list_empty(&(mglst)->queue)#define mglist_first_item(mglst) \    list_entry((mglst)->queue.next, MgItem, list)static inline int mglist_is_item_hilight (MgList *mglst, MgItem* hitem){    return mglst->pItemHilighted == hitem;}   static inline int mglist_is_item_selected (MgItem* pci){       return pci->flags & CTST_SELECTED;}       static inline MgItem* mglist_get_hilighted_item (MgList *mglst){    return mglst->pItemHilighted;}static inline MgItem* mglist_set_hilighted_item (MgList *mglst, MgItem *item){       MgItem *old;    old = mglst->pItemHilighted;    mglst->pItemHilighted = item;    return old;}   static inline void mglist_select_item (MgList *mglst, MgItem* pci, BOOL bSel){    if (bSel) {        if (!(pci->flags & CTST_SELECTED)) {            pci->flags |= CTST_SELECTED;            list_add_tail (&pci->sel_list, &mglst->sel_queue);        }    }    else {        if (pci->flags & CTST_SELECTED) {            pci->flags &= ~CTST_SELECTED;            list_del (&pci->sel_list);        }    }}static inline void mglist_unselect_all (MgList *mglst){    MgItem* pci;    while (!list_empty (&mglst->sel_queue)) {        pci = list_entry (mglst->sel_queue.next, MgItem, sel_list);        if (pci->flags & CTST_SELECTED) {            pci->flags &= ~CTST_SELECTED;            list_del (mglst->sel_queue.next);        }    }}/* unselect all and select this one */static inline void mglist_select_one_item (MgList *mglst, MgItem* hitem){    MgItem* pci = (MgItem*)hitem;    if (!pci) return;    mglist_unselect_all (mglst);    mglist_select_item (mglst, pci, TRUE);}static inline void mglist_select_all (MgList *mglst){    MgItem* pci;    list_t *me;    list_for_each (me, &mglst->queue) {        pci = list_entry (me, MgItem, list);        mglist_select_item (mglst, pci, TRUE);    }}static inline int mglist_get_item_count (MgList *mglst){    return mglst->nItemNr;}static inline void mglist_set_autosort (MgList *mglst){    mglst->flags |= CF_AUTOSORT;}static inline BOOL mglist_is_frozen (MgList *mglst){    return mglst->flags & MGLIST_ST_FROZEN;}static inline int mglist_get_total_item_height (MgList *mglst){    return mglst->nTotalItemH;}/* -------------------------------------------------------------------------- */#ifdef __cplusplus}#endif  /* __cplusplus */#endif  /* _LISTMODEL_H */

⌨️ 快捷键说明

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