//------------------------------------------------------------------------------------------------- // Author: Márcio Martins // // Purpose: // - A ListView // // History: // - [23/6/2003] created the file // //------------------------------------------------------------------------------------------------- #pragma once #include "UIWidget.h" #include "UISystem.h" #define UICLASSNAME_LISTVIEW "UIListView" typedef struct UIListImage { INT_PTR iTextureID; float fWidth; float fHeight; float vTexCoord[4]; } UIListImage; typedef struct UIListSubItem { UIListSubItem(): iImageIndex(-1) {}; wstring szText; int iImageIndex; } UIListSubItem; typedef struct UIListItem { std::vector vSubItem; int iIndex; bool bSelectable; } UIListItem; typedef struct UIListColumn { wstring szLabel; float fWidth; int iHTextAlignment; color4f cHeaderColor; UISkinTexture pHeaderTexture; color4f cBodyColor; bool bNumeric; bool bImageSort; bool bSelectable; } UIListColumn; typedef std::vector CUIListItemList; typedef std::vector::iterator CUIListItemItor; typedef std::vector CUIListColumnList; typedef std::vector::iterator CUIListColumnItor; class CUIListView : public CUIWidget, public _ScriptableEx { UI_WIDGET(CUIListView) public: CUIListView(); ~CUIListView(); string GetClassName(); LRESULT Update(unsigned int iMessage, WPARAM wParam, LPARAM lParam); //AMD Port int Draw(int iPass); static void InitializeTemplate(IScriptSystem *pScriptSystem); //------------------------------------------------------------------------------------------------- int FindItemAt(float fX, float fY, UIListItem **pItem = 0, int *iSubItem = 0, CUIListItemItor *pItemItor = 0); int FindColumnAt(float fX, float fY, UIListColumn **pColumn = 0); //------------------------------------------------------------------------------------------------- int ScrollTo(int iItem); //------------------------------------------------------------------------------------------------- int ClearSelection(); int SelectIndex(int iItemIndex); int DeselectIndex(int iItemIndex); bool IsSelectedIndex(int iItemIndex); int Select(const wstring &szItemText); int Deselect(const wstring &szItemText); bool IsSelected(const wstring &szItemText); UIListItem *GetSelection(int iIndex); int GetSelectionCount(); //------------------------------------------------------------------------------------------------- int GetItemCount(); UIListItem *GetItem(int iIndex, CUIListItemItor *pItemItor = 0); UIListItem *GetItem(const wstring &szText, CUIListItemItor *pItemItor = 0); //------------------------------------------------------------------------------------------------- int AddItem(const wstring &szText); int AddItem(const std::vector &vszText); int InsertItem(int iPosition, const wstring &szText); int InsertItem(int iPosition, const std::vector &vszText); int AddSubItem(int iItemIndex, const wstring &szText); int RemoveItem(int iItemIndex); int RemoveSubItem(int iItemIndex, int iSubItemIndex); int AddColumn(const wstring &szLabel, float fWidth, int iHTextAlignment = UIALIGN_LEFT, const color4f &cHeaderColor = color4f(0.75f, 0.75f, 0.75f, 1.0f), const color4f &cBodyColor = color4f(0.75f, 0.75f, 0.75f, 1.0f), const UISkinTexture &pHeaderTexture = UISkinTexture(), bool bNumeric = 0, bool bSelectable = 1, bool bImageSort = 0); int RemoveColumn(int iColumnIndex); int ClearColumns(); int Clear(); int Sort(); int SortEx(int iSortOrder, int iSortColumn = -1); //------------------------------------------------------------------------------------------------- // Script Functions //------------------------------------------------------------------------------------------------- int SetCellPadding(IFunctionHandler *pH); int GetCellPadding(IFunctionHandler *pH); int SetCellSpacing(IFunctionHandler *pH); int GetCellSpacing(IFunctionHandler *pH); int SetItemHeight(IFunctionHandler *pH); int GetItemHeight(IFunctionHandler *pH); int SetHeaderHeight(IFunctionHandler *pH); int GetHeaderHeight(IFunctionHandler *pH); int FindItemAt(IFunctionHandler *pH); int FindColumnAt(IFunctionHandler *pH); int ClearSelection(IFunctionHandler *pH); int SelectIndex(IFunctionHandler *pH); int DeselectIndex(IFunctionHandler *pH); int IsSelectedIndex(IFunctionHandler *pH); int Select(IFunctionHandler *pH); int Deselect(IFunctionHandler *pH); int IsSelected(IFunctionHandler *pH); int GetSelectionCount(IFunctionHandler *pH); int GetSelection(IFunctionHandler *pH); int GetSelectedColumn(IFunctionHandler *pH); int GetItem(IFunctionHandler *pH); int GetItemCount(IFunctionHandler *pH); int GetSubItem(IFunctionHandler *pH); int GetSubItemCount(IFunctionHandler *pH); int AddItem(IFunctionHandler *pH); int InsertItem(IFunctionHandler *pH); int AddSubItem(IFunctionHandler *pH); int RemoveItem(IFunctionHandler *pH); int RemoveSubItem(IFunctionHandler *pH); int AddColumn(IFunctionHandler *pH); int RemoveColumn(IFunctionHandler *pH); int ClearColumns(IFunctionHandler *pH); int Clear(IFunctionHandler *pH); int Sort(IFunctionHandler *pH); int SortEx(IFunctionHandler *pH); int AddImage(IFunctionHandler *pH); int AddImageList(IFunctionHandler *pH); int ClearImageList(IFunctionHandler *pH); int SetItemImage(IFunctionHandler *pH); int ClearItemImage(IFunctionHandler *pH); private: int DrawListColumn(int iIndex, const UIRect &pColumnRect, const UIRect pListRect, float fX, float fY, IFFont *pFont); UIRect GetHeaderRect(); UIRect GetListRect(bool bScrollBars = 1); UIRect GetColumnRect(int iColumnIndex); static bool SortCallback(const UIListItem *pOne, const UIListItem *pTwo); static CUIListView *m_pStaticThis; float m_fItemHeight; float m_fHeaderHeight; float m_fCellSpacing; float m_fCellPadding; float m_fColumnTextSpacing; float m_fTotalWidth; float m_fTotalHeight; float m_fVerticalOffset; float m_fHorizontalOffset; UISkinTexture m_pTexture; int m_iNewIndex; CUIListItemList m_vItemList; CUIListColumnList m_vColumnList; color4f m_cSelectionColor; bool m_bVerticalScrollBar; bool m_bHorizontalScrollBar; bool m_bColumnSelect; bool m_bNeedSort; int m_iSelectedColumn; int m_iSortColumn; int m_iSortOrder; int m_iNoSort; std::vector m_vSelectionList; CUIListItemItor m_pSelectionStart; color4f m_cSortByColor; color4f m_cSortByTextColor; CUIScrollBar *m_pHScroll; CUIScrollBar *m_pVScroll; std::vector m_vImageList; }; //-------------------------------------------------------------------------------------------------