123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455 |
- #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 32
- typedef struct tagTListInfoUI
- {
- int nColumns;
- RECT rcColumn[UILIST_MAX_COLUMNS];
- 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;
- DWORD dwLineColor;
- 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;
- };
- 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;
- virtual bool ExpandItem(int iIndex, bool bExpand = true) = 0;
- virtual int GetExpandedItem() const = 0;
- };
- class IListItemUI
- {
- public:
- virtual int GetIndex() const = 0;
- virtual void SetIndex(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 UILIB_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);
- CListHeaderUI* GetHeader() const;
- CContainerUI* GetList() const;
- TListInfoUI* GetListInfo();
- CControlUI* GetItemAt(int iIndex) const;
- int GetItemIndex(CControlUI* pControl) const;
- bool SetItemIndex(CControlUI* pControl, int iIndex);
- int GetCount() const;
- bool Add(CControlUI* pControl);
- CControlUI* Add (LPCTSTR lpXMLFile);
- bool AddAt(CControlUI* pControl, int iIndex);
- bool Remove(CControlUI* pControl);
- bool RemoveAt(int iIndex);
- void RemoveAll();
- void EnsureVisible(int iIndex);
- void Scroll(int dx, int dy);
- int GetChildPadding() const;
- void SetChildPadding(int iPadding);
- void SetItemFont(int index);
- void SetItemTextStyle(UINT uStyle);
- void SetItemTextPadding(RECT rc);
- void SetItemTextColor(DWORD dwTextColor);
- void SetItemBkColor(DWORD dwBkColor);
- void SetItemBkImage(LPCTSTR pStrImage);
- bool IsAlternateBk() const;
- void SetAlternateBk(bool bAlternateBk);
- void SetSelectedItemTextColor(DWORD dwTextColor);
- void SetSelectedItemBkColor(DWORD dwBkColor);
- void SetSelectedItemImage(LPCTSTR pStrImage);
- void SetHotItemTextColor(DWORD dwTextColor);
- void SetHotItemBkColor(DWORD dwBkColor);
- void SetHotItemImage(LPCTSTR pStrImage);
- void SetDisabledItemTextColor(DWORD dwTextColor);
- void SetDisabledItemBkColor(DWORD dwBkColor);
- void SetDisabledItemImage(LPCTSTR pStrImage);
- void SetItemLineColor(DWORD dwLineColor);
- bool IsItemShowHtml();
- void SetItemShowHtml(bool bShowHtml = true);
- RECT GetItemTextPadding() const;
- DWORD GetItemTextColor() const;
- DWORD GetItemBkColor() const;
- LPCTSTR GetItemBkImage() const;
- DWORD GetSelectedItemTextColor() const;
- DWORD GetSelectedItemBkColor() const;
- LPCTSTR GetSelectedItemImage() const;
- DWORD GetHotItemTextColor() const;
- DWORD GetHotItemBkColor() const;
- LPCTSTR GetHotItemImage() const;
- DWORD GetDisabledItemTextColor() const;
- DWORD GetDisabledItemBkColor() const;
- LPCTSTR GetDisabledItemImage() const;
- DWORD GetItemLineColor() const;
- 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 UILIB_API CListBodyUI : public CVerticalLayoutUI
- {
- public:
- CListBodyUI(CListUI* pOwner);
- void SetScrollPos(SIZE szPos);
- void SetPos(RECT rc, bool bNeedInvalidate = true);
- void DoEvent(TEventUI& event);
- BOOL SortItems(PULVCompareFunc pfnCompare, UINT_PTR dwData, int& iCurSel);
- protected:
- static int __cdecl ItemComareFunc(void *pvlocale, const void *item1, const void *item2);
- int __cdecl ItemComareFunc(const void *item1, const void *item2);
- protected:
- CListUI* m_pOwner;
- PULVCompareFunc m_pCompareFunc;
- UINT_PTR m_compareData;
- };
- /////////////////////////////////////////////////////////////////////////////////////
- //
- class UILIB_API CListHeaderUI : public CHorizontalLayoutUI
- {
- public:
- CListHeaderUI();
- LPCTSTR GetClass() const;
- LPVOID GetInterface(LPCTSTR pstrName);
- SIZE EstimateSize(SIZE szAvailable);
- };
- /////////////////////////////////////////////////////////////////////////////////////
- //
- class UILIB_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);
- 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;
- 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 UILIB_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);
- 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;
- bool m_bSelected;
- UINT m_uButtonState;
- IListOwnerUI* m_pOwner;
- };
- /////////////////////////////////////////////////////////////////////////////////////
- //
- class UILIB_API CListLabelElementUI : public CListElementUI
- {
- public:
- CListLabelElementUI();
- LPCTSTR GetClass() const;
- LPVOID GetInterface(LPCTSTR pstrName);
- void DoEvent(TEventUI& event);
- SIZE EstimateSize(SIZE szAvailable);
- void DoPaint(HDC hDC, const RECT& rcPaint);
- void SetItemTextColor (DWORD dwTextcolor);
- DWORD GetItemTextColor () const;
- void DrawItemText(HDC hDC, const RECT& rcItem);
- private:
- DWORD m_iTextColor = 0;
- };
- /////////////////////////////////////////////////////////////////////////////////////
- //
- class UILIB_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, LPCSTR pstrText);
- void SetText(int iIndex, LPCTSTR pstrText);
- void SetText(int iIndex, LPSTR 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;
- CStdPtrArray m_aTexts;
- };
- /////////////////////////////////////////////////////////////////////////////////////
- //
- class UILIB_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);
- 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 IsExpanded() const;
- bool Expand(bool bExpand = true);
- void Invalidate(); // 直接CControl::Invalidate会导致滚动条刷新,重写减少刷新区域
- bool Activate();
- void DoEvent(TEventUI& event);
- void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue);
- void DoPaint(HDC hDC, const RECT& rcPaint);
- void DrawItemText(HDC hDC, const RECT& rcItem);
- void DrawItemBk(HDC hDC, const RECT& rcItem);
- protected:
- int m_iIndex;
- bool m_bSelected;
- UINT m_uButtonState;
- IListOwnerUI* m_pOwner;
- };
- } // namespace DuiLib
- #endif // __UILIST_H__
|