| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489 |
- #ifndef __UILIST_H__
- #define __UILIST_H__
- #pragma once
- #include "Layout/UIVerticalLayout.h"
- #include "Layout/UIHorizontalLayout.h"
- namespace DuiLib {
- /////////////////////////////////////////////////////////////////////////////////////
- //
- typedef int (CALLBACK *PULVCompareFunc)(UINT_PTR, UINT_PTR, UINT_PTR);
- class CListHeaderUI;
- #define UILIST_MAX_COLUMNS 64
- typedef struct tagTListInfoUI
- {
- int nColumns;
- RECT rcColumn[UILIST_MAX_COLUMNS];
- UINT uFixedHeight;
- int nFont;
- UINT uTextStyle;
- RECT rcTextPadding;
- DWORD dwTextColor;
- DWORD dwBkColor;
- TDrawInfo diBk;
- bool bAlternateBk;
- DWORD dwSelectedTextColor;
- DWORD dwSelectedBkColor;
- TDrawInfo diSelected;
- DWORD dwHotTextColor;
- DWORD dwHotBkColor;
- TDrawInfo diHot;
- DWORD dwDisabledTextColor;
- DWORD dwDisabledBkColor;
- TDrawInfo diDisabled;
- int iHLineSize;
- DWORD dwHLineColor;
- int iVLineSize;
- DWORD dwVLineColor;
- bool bShowHtml;
- bool bMultiExpandable;
- } TListInfoUI;
- /////////////////////////////////////////////////////////////////////////////////////
- //
- class IListCallbackUI
- {
- public:
- virtual LPCTSTR GetItemText(CControlUI* pList, int iItem, int iSubItem) = 0;
- };
- class IListOwnerUI
- {
- public:
- virtual TListInfoUI* GetListInfo() = 0;
- virtual int GetCurSel() const = 0;
- virtual bool SelectItem(int iIndex, bool bTakeFocus = false, bool bTriggerEvent=true) = 0;
- virtual void DoEvent(TEventUI& event) = 0;
- virtual bool ExpandItem(int iIndex, bool bExpand = true) = 0;
- virtual int GetExpandedItem() const = 0;
- };
- class IListUI : public IListOwnerUI
- {
- public:
- virtual CListHeaderUI* GetHeader() const = 0;
- virtual CContainerUI* GetList() const = 0;
- virtual IListCallbackUI* GetTextCallback() const = 0;
- virtual void SetTextCallback(IListCallbackUI* pCallback) = 0;
- };
- class IListItemUI
- {
- public:
- virtual int GetIndex() const = 0;
- virtual void SetIndex(int iIndex) = 0;
- virtual int GetDrawIndex() const = 0;
- virtual void SetDrawIndex(int iIndex) = 0;
- virtual IListOwnerUI* GetOwner() = 0;
- virtual void SetOwner(CControlUI* pOwner) = 0;
- virtual bool IsSelected() const = 0;
- virtual bool Select(bool bSelect = true, bool bTriggerEvent=true) = 0;
- virtual bool IsExpanded() const = 0;
- virtual bool Expand(bool bExpand = true) = 0;
- virtual void DrawItemText(HDC hDC, const RECT& rcItem) = 0;
- };
- /////////////////////////////////////////////////////////////////////////////////////
- //
- class CListBodyUI;
- class CListHeaderUI;
- class DUILIB_API CListUI : public CVerticalLayoutUI, public IListUI
- {
- public:
- CListUI();
- LPCTSTR GetClass() const;
- UINT GetControlFlags() const;
- LPVOID GetInterface(LPCTSTR pstrName);
- bool GetScrollSelect();
- void SetScrollSelect(bool bScrollSelect);
- int GetCurSel() const;
- bool SelectItem(int iIndex, bool bTakeFocus = false, bool bTriggerEvent=true);
- CControlUI* GetItemAt(int iIndex) const;
- int GetItemIndex(CControlUI* pControl) const;
- bool SetItemIndex(CControlUI* pControl, int iIndex);
- bool SetMultiItemIndex(CControlUI* pStartControl, int iCount, int iNewStartIndex);
- int GetCount() const;
- bool Add(CControlUI* pControl);
- bool AddAt(CControlUI* pControl, int iIndex);
- bool Remove(CControlUI* pControl, bool bDoNotDestroy=false);
- bool RemoveAt(int iIndex, bool bDoNotDestroy=false);
- void RemoveAll();
- void EnsureVisible(int iIndex);
- void Scroll(int dx, int dy);
- int GetChildPadding() const;
- void SetChildPadding(int iPadding);
- CListHeaderUI* GetHeader() const;
- CContainerUI* GetList() const;
- TListInfoUI* GetListInfo();
- UINT GetItemFixedHeight();
- void SetItemFixedHeight(UINT nHeight);
- int GetItemFont(int index);
- void SetItemFont(int index);
- UINT GetItemTextStyle();
- void SetItemTextStyle(UINT uStyle);
- RECT GetItemTextPadding() const;
- void SetItemTextPadding(RECT rc);
- DWORD GetItemTextColor() const;
- void SetItemTextColor(DWORD dwTextColor);
- DWORD GetItemBkColor() const;
- void SetItemBkColor(DWORD dwBkColor);
- LPCTSTR GetItemBkImage() const;
- void SetItemBkImage(LPCTSTR pStrImage);
- bool IsAlternateBk() const;
- void SetAlternateBk(bool bAlternateBk);
- DWORD GetSelectedItemTextColor() const;
- void SetSelectedItemTextColor(DWORD dwTextColor);
- DWORD GetSelectedItemBkColor() const;
- void SetSelectedItemBkColor(DWORD dwBkColor);
- LPCTSTR GetSelectedItemImage() const;
- void SetSelectedItemImage(LPCTSTR pStrImage);
- DWORD GetHotItemTextColor() const;
- void SetHotItemTextColor(DWORD dwTextColor);
- DWORD GetHotItemBkColor() const;
- void SetHotItemBkColor(DWORD dwBkColor);
- LPCTSTR GetHotItemImage() const;
- void SetHotItemImage(LPCTSTR pStrImage);
- DWORD GetDisabledItemTextColor() const;
- void SetDisabledItemTextColor(DWORD dwTextColor);
- DWORD GetDisabledItemBkColor() const;
- void SetDisabledItemBkColor(DWORD dwBkColor);
- LPCTSTR GetDisabledItemImage() const;
- void SetDisabledItemImage(LPCTSTR pStrImage);
- int GetItemHLineSize() const;
- void SetItemHLineSize(int iSize);
- DWORD GetItemHLineColor() const;
- void SetItemHLineColor(DWORD dwLineColor);
- int GetItemVLineSize() const;
- void SetItemVLineSize(int iSize);
- DWORD GetItemVLineColor() const;
- void SetItemVLineColor(DWORD dwLineColor);
- bool IsItemShowHtml();
- void SetItemShowHtml(bool bShowHtml = true);
- void SetMultiExpanding(bool bMultiExpandable);
- int GetExpandedItem() const;
- bool ExpandItem(int iIndex, bool bExpand = true);
- void SetPos(RECT rc, bool bNeedInvalidate = true);
- void Move(SIZE szOffset, bool bNeedInvalidate = true);
- void DoEvent(TEventUI& event);
- void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue);
- IListCallbackUI* GetTextCallback() const;
- void SetTextCallback(IListCallbackUI* pCallback);
- SIZE GetScrollPos() const;
- SIZE GetScrollRange() const;
- void SetScrollPos(SIZE szPos);
- void LineUp();
- void LineDown();
- void PageUp();
- void PageDown();
- void HomeUp();
- void EndDown();
- void LineLeft();
- void LineRight();
- void PageLeft();
- void PageRight();
- void HomeLeft();
- void EndRight();
- void EnableScrollBar(bool bEnableVertical = true, bool bEnableHorizontal = false);
- virtual CScrollBarUI* GetVerticalScrollBar() const;
- virtual CScrollBarUI* GetHorizontalScrollBar() const;
- bool SortItems(PULVCompareFunc pfnCompare, UINT_PTR dwData);
- protected:
- bool m_bScrollSelect;
- int m_iCurSel;
- int m_iExpandedItem;
- IListCallbackUI* m_pCallback;
- CListBodyUI* m_pList;
- CListHeaderUI* m_pHeader;
- TListInfoUI m_ListInfo;
- };
- /////////////////////////////////////////////////////////////////////////////////////
- //
- class DUILIB_API CListHeaderUI : public CHorizontalLayoutUI
- {
- public:
- CListHeaderUI();
- LPCTSTR GetClass() const;
- LPVOID GetInterface(LPCTSTR pstrName);
- SIZE EstimateSize(SIZE szAvailable);
- };
- /////////////////////////////////////////////////////////////////////////////////////
- //
- class DUILIB_API CListHeaderItemUI : public CControlUI
- {
- public:
- CListHeaderItemUI();
- LPCTSTR GetClass() const;
- LPVOID GetInterface(LPCTSTR pstrName);
- UINT GetControlFlags() const;
- void SetEnabled(bool bEnable = true);
- bool IsDragable() const;
- void SetDragable(bool bDragable);
- DWORD GetSepWidth() const;
- void SetSepWidth(int iWidth);
- DWORD GetTextStyle() const;
- void SetTextStyle(UINT uStyle);
- DWORD GetTextColor() const;
- void SetTextColor(DWORD dwTextColor);
- DWORD GetSepColor() const;
- void SetSepColor(DWORD dwSepColor);
- void SetTextPadding(RECT rc);
- RECT GetTextPadding() const;
- void SetFont(int index);
- bool IsShowHtml();
- void SetShowHtml(bool bShowHtml = true);
- LPCTSTR GetNormalImage() const;
- void SetNormalImage(LPCTSTR pStrImage);
- LPCTSTR GetHotImage() const;
- void SetHotImage(LPCTSTR pStrImage);
- LPCTSTR GetPushedImage() const;
- void SetPushedImage(LPCTSTR pStrImage);
- LPCTSTR GetFocusedImage() const;
- void SetFocusedImage(LPCTSTR pStrImage);
- LPCTSTR GetSepImage() const;
- void SetSepImage(LPCTSTR pStrImage);
- void DoEvent(TEventUI& event);
- SIZE EstimateSize(SIZE szAvailable);
- void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue);
- RECT GetThumbRect() const;
- void PaintText(HDC hDC);
- void PaintStatusImage(HDC hDC);
- protected:
- POINT ptLastMouse;
- bool m_bDragable;
- UINT m_uButtonState;
- int m_iSepWidth;
- DWORD m_dwTextColor;
- DWORD m_dwSepColor;
- int m_iFont;
- UINT m_uTextStyle;
- bool m_bShowHtml;
- RECT m_rcTextPadding;
- TDrawInfo m_diNormal;
- TDrawInfo m_diHot;
- TDrawInfo m_diPushed;
- TDrawInfo m_diFocused;
- TDrawInfo m_diSep;
- };
- /////////////////////////////////////////////////////////////////////////////////////
- //
- class DUILIB_API CListElementUI : public CControlUI, public IListItemUI
- {
- public:
- CListElementUI();
- LPCTSTR GetClass() const;
- UINT GetControlFlags() const;
- LPVOID GetInterface(LPCTSTR pstrName);
- void SetEnabled(bool bEnable = true);
- int GetIndex() const;
- void SetIndex(int iIndex);
- int GetDrawIndex() const;
- void SetDrawIndex(int iIndex);
- IListOwnerUI* GetOwner();
- void SetOwner(CControlUI* pOwner);
- void SetVisible(bool bVisible = true);
- bool IsSelected() const;
- bool Select(bool bSelect = true, bool bTriggerEvent=true);
- bool IsExpanded() const;
- bool Expand(bool bExpand = true);
- void Invalidate(); // 直接CControl::Invalidate会导致滚动条刷新,重写减少刷新区域
- bool Activate();
- void DoEvent(TEventUI& event);
- void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue);
- void DrawItemBk(HDC hDC, const RECT& rcItem);
- protected:
- int m_iIndex;
- int m_iDrawIndex;
- bool m_bSelected;
- UINT m_uButtonState;
- IListOwnerUI* m_pOwner;
- };
- /////////////////////////////////////////////////////////////////////////////////////
- //
- class DUILIB_API CListLabelElementUI : public CListElementUI
- {
- public:
- CListLabelElementUI();
- LPCTSTR GetClass() const;
- LPVOID GetInterface(LPCTSTR pstrName);
- void SetOwner(CControlUI* pOwner);
- void SetFixedWidth(int cx);
- void SetFixedHeight(int cy);
- void SetText(LPCTSTR pstrText);
- void DoEvent(TEventUI& event);
- SIZE EstimateSize(SIZE szAvailable);
- bool DoPaint(HDC hDC, const RECT& rcPaint, CControlUI* pStopControl);
- void DrawItemText(HDC hDC, const RECT& rcItem);
- protected:
- SIZE m_cxyFixedLast;
- bool m_bNeedEstimateSize;
- SIZE m_szAvailableLast;
- UINT m_uFixedHeightLast;
- int m_nFontLast;
- UINT m_uTextStyleLast;
- RECT m_rcTextPaddingLast;
- };
- /////////////////////////////////////////////////////////////////////////////////////
- //
- class DUILIB_API CListTextElementUI : public CListLabelElementUI
- {
- public:
- CListTextElementUI();
- ~CListTextElementUI();
- LPCTSTR GetClass() const;
- LPVOID GetInterface(LPCTSTR pstrName);
- UINT GetControlFlags() const;
- LPCTSTR GetText(int iIndex) const;
- void SetText(int iIndex, LPCTSTR pstrText);
- void SetOwner(CControlUI* pOwner);
- CDuiString* GetLinkContent(int iIndex);
- void DoEvent(TEventUI& event);
- SIZE EstimateSize(SIZE szAvailable);
- void DrawItemText(HDC hDC, const RECT& rcItem);
- protected:
- enum { MAX_LINK = 8 };
- int m_nLinks;
- RECT m_rcLinks[MAX_LINK];
- CDuiString m_sLinks[MAX_LINK];
- int m_nHoverLink;
- IListUI* m_pOwner;
- CDuiPtrArray m_aTexts;
- CDuiString m_sTextLast;
- };
- /////////////////////////////////////////////////////////////////////////////////////
- //
- class DUILIB_API CListContainerElementUI : public CContainerUI, public IListItemUI
- {
- public:
- CListContainerElementUI();
- LPCTSTR GetClass() const;
- UINT GetControlFlags() const;
- LPVOID GetInterface(LPCTSTR pstrName);
- int GetIndex() const;
- void SetIndex(int iIndex);
- int GetDrawIndex() const;
- void SetDrawIndex(int iIndex);
- IListOwnerUI* GetOwner();
- void SetOwner(CControlUI* pOwner);
- void SetVisible(bool bVisible = true);
- void SetEnabled(bool bEnable = true);
- bool IsSelected() const;
- bool Select(bool bSelect = true, bool bTriggerEvent=true);
- bool IsExpandable() const;
- void SetExpandable(bool bExpandable);
- bool IsExpanded() const;
- bool Expand(bool bExpand = true);
- void Invalidate(); // 直接CControl::Invalidate会导致滚动条刷新,重写减少刷新区域
- bool Activate();
- void DoEvent(TEventUI& event);
- void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue);
- bool DoPaint(HDC hDC, const RECT& rcPaint, CControlUI* pStopControl);
- void DrawItemText(HDC hDC, const RECT& rcItem);
- void DrawItemBk(HDC hDC, const RECT& rcItem);
- SIZE EstimateSize(SIZE szAvailable);
- protected:
- int m_iIndex;
- int m_iDrawIndex;
- bool m_bSelected;
- bool m_bExpandable;
- bool m_bExpand;
- UINT m_uButtonState;
- IListOwnerUI* m_pOwner;
- };
- /////////////////////////////////////////////////////////////////////////////////////
- //
- class DUILIB_API CListHBoxElementUI : public CListContainerElementUI
- {
- public:
- CListHBoxElementUI();
- LPCTSTR GetClass() const;
- LPVOID GetInterface(LPCTSTR pstrName);
- void SetPos(RECT rc, bool bNeedInvalidate = true);
- bool DoPaint(HDC hDC, const RECT& rcPaint, CControlUI* pStopControl);
- };
- } // namespace DuiLib
- #endif // __UILIST_H__
|