summaryrefslogtreecommitdiff
path: root/utils/mxtk/mxlistview.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /utils/mxtk/mxlistview.cpp
downloadarchived-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.cpp334
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 );
+}