diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /utils/mxtk/mxlistview.cpp | |
| download | archived-source-engine-2018-hl2-src-3bf9df6b2785fa6d951086978a3e66f49427166a.tar.xz archived-source-engine-2018-hl2-src-3bf9df6b2785fa6d951086978a3e66f49427166a.zip | |
Diffstat (limited to 'utils/mxtk/mxlistview.cpp')
| -rw-r--r-- | utils/mxtk/mxlistview.cpp | 334 |
1 files changed, 334 insertions, 0 deletions
diff --git a/utils/mxtk/mxlistview.cpp b/utils/mxtk/mxlistview.cpp new file mode 100644 index 0000000..6206d4f --- /dev/null +++ b/utils/mxtk/mxlistview.cpp @@ -0,0 +1,334 @@ +// +// mxToolKit (c) 1999 by Mete Ciragan +// +// file: mxListView.cpp +// implementation: Win32 API +// last modified: May 03 1999, Mete Ciragan +// copyright: The programs and associated files contained in this +// distribution were developed by Mete Ciragan. The programs +// are not in the public domain, but they are freely +// distributable without licensing fees. These programs are +// provided without guarantee or warrantee expressed or +// implied. +// +#include "mxtk/mxListView.h" +#include <windows.h> +#include <commctrl.h> + + + +class mxListView_i +{ +public: + HWND d_hwnd; +}; + + + +mxListView::mxListView (mxWindow *parent, int x, int y, int w, int h, int id) +: mxWidget (parent, x, y, w, h) +{ + if (!parent) + return; + + d_this = new mxListView_i; + + DWORD dwStyle = LVS_NOSORTHEADER | LVS_REPORT | LVS_SHOWSELALWAYS | WS_VISIBLE | WS_CHILD; + HWND hwndParent = (HWND) ((mxWidget *) parent)->getHandle (); + + d_this->d_hwnd = CreateWindowEx (WS_EX_CLIENTEDGE, WC_LISTVIEW, "", dwStyle, + x, y, w, h, hwndParent, + (HMENU) id, (HINSTANCE) GetModuleHandle (NULL), NULL); + + SendMessage (d_this->d_hwnd, WM_SETFONT, (WPARAM) (HFONT) GetStockObject (ANSI_VAR_FONT), MAKELPARAM (TRUE, 0)); + SetWindowLong (d_this->d_hwnd, GWL_USERDATA, (LONG) this); + + setHandle ((void *) d_this->d_hwnd); + setType (MX_LISTVIEW); + setParent (parent); + setId (id); +} + + + +mxListView::~mxListView () +{ + remove (0); + delete d_this; +} +int mxListView::add ( const char *item ) +{ + if (!d_this) + return 0; + + LVITEM lvItem; + memset( &lvItem, 0, sizeof( lvItem ) ); + + lvItem.iItem = getItemCount(); + + lvItem.mask = LVIF_TEXT; + lvItem.pszText = (LPSTR) item; + lvItem.cchTextMax = 256; + + return ListView_InsertItem( d_this->d_hwnd, &lvItem ); +} + +void +mxListView::remove ( int index ) +{ + if (!d_this) + return; + + ListView_DeleteItem (d_this->d_hwnd, index ); +} + +void +mxListView::removeAll () +{ + ListView_DeleteAllItems(d_this->d_hwnd); +} + +void +mxListView::setLabel ( int item , int column, const char *label) +{ + if (!d_this) + return; + + LVITEM lvItem; + memset( &lvItem, 0, sizeof( lvItem ) ); + lvItem.mask = LVIF_TEXT; + lvItem.iItem = item; + lvItem.iSubItem = column; + + lvItem.pszText = (LPSTR) label; + lvItem.cchTextMax = 256; + + ListView_SetItem (d_this->d_hwnd, &lvItem); +} + +void mxListView::setLabel( int item, int column, const wchar_t *label ) +{ + if (!d_this) + return; + + LV_ITEMW lvItem; + memset( &lvItem, 0, sizeof( lvItem ) ); + lvItem.mask = LVIF_TEXT; + lvItem.iItem = item; + lvItem.iSubItem = column; + + lvItem.pszText = (wchar_t *)label; + lvItem.cchTextMax = 256; + + SendMessage(d_this->d_hwnd, LVM_SETITEMW, 0, (LPARAM)(const LV_ITEMW FAR*)(&lvItem)); +} + +void +mxListView::setUserData ( int item, int column, void *userData) +{ + if (!d_this) + return; + + LVITEM lvItem; + memset( &lvItem, 0, sizeof( lvItem ) ); + lvItem.mask = LVIF_PARAM; + lvItem.iItem = item; + lvItem.iSubItem = column; + lvItem.lParam = (LPARAM) userData; + + ListView_SetItem (d_this->d_hwnd, &lvItem); +} + + +void +mxListView::setSelected ( int item, bool b) +{ + if (!d_this) + return; + + ListView_SetItemState (d_this->d_hwnd, item, b ? ( LVIS_SELECTED | LVIS_FOCUSED ): 0 , LVIS_SELECTED | LVIS_FOCUSED ); +} + +int mxListView::getItemCount() const +{ + if (!d_this) + return 0; + + return ListView_GetItemCount( d_this->d_hwnd ); +} + +int mxListView::getNextSelectedItem( int startitem /*= 0*/ ) const +{ + if (!d_this) + return -1; + + if ( ListView_GetSelectedCount( d_this->d_hwnd ) == 0 ) + return -1; + + int c = getItemCount(); + int start = startitem + 1; + + while ( start < c ) + { + if ( isSelected( start ) ) + return start; + start++; + } + + return -1; +} + +int mxListView::getNumSelected() const +{ + if (!d_this) + return 0; + + return ListView_GetSelectedCount( d_this->d_hwnd ); +} + +const char* +mxListView::getLabel ( int item, int column ) const +{ + static char label[256]; + strcpy (label, ""); + + if (!d_this) + return label; + + LVITEM lvItem; + memset( &lvItem, 0, sizeof( lvItem ) ); + lvItem.mask = LVIF_TEXT; + lvItem.iItem = item; + lvItem.iSubItem = column; + lvItem.pszText = (LPSTR) label; + lvItem.cchTextMax = 256; + ListView_GetItem (d_this->d_hwnd, &lvItem); + + return lvItem.pszText; +} + + + +void* +mxListView::getUserData ( int item, int column ) const +{ + if (!d_this) + return 0; + + LVITEM lvItem; + memset( &lvItem, 0, sizeof( lvItem ) ); + lvItem.mask = LVIF_PARAM; + lvItem.iItem = item; + lvItem.iSubItem = column; + + ListView_GetItem (d_this->d_hwnd, &lvItem); + + return (void *) lvItem.lParam; +} + + + +bool +mxListView::isSelected ( int index ) const +{ + if (!d_this) + return false; + + int state = ListView_GetItemState( d_this->d_hwnd, index, LVIS_SELECTED ); + if ( state & LVIS_SELECTED ) + return true; + + return false; +} + +void mxListView::setImageList( void *himagelist ) +{ + ListView_SetImageList(d_this->d_hwnd, (HIMAGELIST)himagelist, LVSIL_SMALL ); +} + +void mxListView::setImage( int item, int column, int imagenormal ) +{ + if (!d_this) + return; + + LVITEM lvItem; + memset( &lvItem, 0, sizeof( lvItem ) ); + lvItem.mask = LVIF_IMAGE; + lvItem.iItem = item; + lvItem.iSubItem = column; + lvItem.iImage = imagenormal; + //lvItem.state = INDEXTOSTATEIMAGEMASK( imagenormal ); + //lvItem.stateMask = -1; + + ListView_SetItem (d_this->d_hwnd, &lvItem); +} + +void mxListView::insertTextColumn( int column, int width, char const *label ) +{ + if (!d_this) + return; + + LVCOLUMN col; + memset( &col, 0, sizeof( col ) ); + + col.mask = LVCF_TEXT | LVCF_SUBITEM | LVCF_WIDTH | LVCF_ORDER; + col.iOrder = column; + col.pszText = (char *)label; + col.cchTextMax = 256; + col.iSubItem = column; + col.cx = width; + + ListView_InsertColumn( d_this->d_hwnd, column, &col ); +} + +void mxListView::insertImageColumn( int column, int width, int imageindex ) +{ + if (!d_this) + return; + + LVCOLUMN col; + memset( &col, 0, sizeof( col ) ); + + col.mask = LVCF_IMAGE | LVCF_SUBITEM | LVCF_WIDTH | LVCF_ORDER | LVCF_FMT; + col.fmt = LVCFMT_IMAGE; + col.iOrder = column; + col.iSubItem = column; + col.cx = width; + col.iImage = imageindex; + + ListView_InsertColumn( d_this->d_hwnd, column, &col ); +} + +void mxListView::setDrawingEnabled( bool draw ) +{ + if (!d_this) + return; + + SendMessage( d_this->d_hwnd, WM_SETREDRAW, (WPARAM)draw ? TRUE : FALSE, (LPARAM)0 ); +} + +void mxListView::deselectAll() +{ + if ( !d_this ) + return; + + setDrawingEnabled( false ); + int c = getItemCount(); + for ( int i = 0; i < c; i++ ) + { + if ( isSelected( i ) ) + { + setSelected( i, false ); + } + } + + setDrawingEnabled( true ); +} + +void mxListView::scrollToItem( int item ) +{ + if ( !d_this ) + return; + + ListView_EnsureVisible( d_this->d_hwnd, item, FALSE ); +} |