diff options
Diffstat (limited to 'Src/nu/listview.h')
-rw-r--r-- | Src/nu/listview.h | 229 |
1 files changed, 229 insertions, 0 deletions
diff --git a/Src/nu/listview.h b/Src/nu/listview.h new file mode 100644 index 00000000..d29db58a --- /dev/null +++ b/Src/nu/listview.h @@ -0,0 +1,229 @@ +/* +** Copyright (C) 2003 Nullsoft, Inc. +** +** This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held +** liable for any damages arising from the use of this software. +** +** Permission is granted to anyone to use this software for any purpose, including commercial applications, and to +** alter it and redistribute it freely, subject to the following restrictions: +** +** 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. +** If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. +** +** 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. +** +** 3. This notice may not be removed or altered from any source distribution. +** +*/ + +#ifndef _LISTVIEW_H_ +#define _LISTVIEW_H_ + +#include <windows.h> +#include <windowsx.h> +#include <commctrl.h> + +#ifndef LVS_EX_DOUBLEBUFFER //this will work XP only +#define LVS_EX_DOUBLEBUFFER 0x00010000 +#endif + +class W_ListView +{ +public: + W_ListView(); + W_ListView( HWND hwndView ); + W_ListView( HWND hwndDlg, int resourceId ); + ~W_ListView(); + + void InvertSelection(); + void SetTextColors( COLORREF foregroundColor, COLORREF backgroundColor ); + void SetFont( HFONT newFont ); + void setwnd( HWND hwnd ); + void AddCol( const wchar_t *text, int w ); + void AddCol( const char *text, int w ); + void AddAutoCol( LPTSTR text ); + void AddImageCol( int w ); + + void JustifyColumn( int column, int justificationFlag ) + { + LVCOLUMN col; + col.mask = LVCF_FMT; + col.fmt = justificationFlag; + + ListView_SetColumn( m_hwnd, column, &col ); + } + + void SetColumnWidth( int column, int width ) + { + ListView_SetColumnWidth( m_hwnd, column, width ); + } + + int GetCount( void ) + { + return ListView_GetItemCount( m_hwnd ); + } + + int GetParam( int p ); + + void DeleteItem( int n ) + { + ListView_DeleteItem( m_hwnd, n ); + } + + void RefreshItem( int item ) + { + ListView_RedrawItems( m_hwnd, item, item ); + } + + void RefreshAll() + { + ListView_RedrawItems( m_hwnd, 0, GetCount() ); + } + + void Clear( void ) + { + ListView_DeleteAllItems( m_hwnd ); + } + + int GetSelected( int x ) + { + return( ListView_GetItemState( m_hwnd, x, LVIS_SELECTED ) & LVIS_SELECTED ) ? 1 : 0; + } + + int GetSelectedCount() + { + return ListView_GetSelectedCount( m_hwnd ); + } + + int GetNextSelected( int start = -1 ) + { + return ListView_GetNextItem( m_hwnd, start, LVNI_ALL | LVNI_SELECTED ); + } + + int GetSelectionMark() + { + return ListView_GetSelectionMark( m_hwnd ); + } + + void SetSelected( int x ) + { + ListView_SetItemState( m_hwnd, x, LVIS_SELECTED, LVIS_SELECTED ); + } + + void SelectAll() + { + ListView_SetItemState( m_hwnd, -1, LVIS_SELECTED, LVIS_SELECTED ); + } + + void UnselectAll() + { + ListView_SetItemState( m_hwnd, -1, 0, LVIS_SELECTED ); + } + + void Unselect( int x ) + { + ListView_SetItemState( m_hwnd, x, 0, LVIS_SELECTED ); + } + + void EditItem( int x ) + { + SetFocus( m_hwnd ); + ListView_EditLabel( m_hwnd, x ); + } + + int AppendItem( LPCWSTR text, LPARAM param ); + int InsertItem( int p, const wchar_t *text, LPARAM param ); + int InsertItem( int p, const char *text, LPARAM param ); + + void GetItemRect( int i, RECT *r ) + { + ListView_GetItemRect( m_hwnd, i, r, LVIR_BOUNDS ); + } + + void SetItemText( int p, int si, const wchar_t *text ); + void SetItemText( int p, int si, const char *text ); + void SetItemParam( int p, int param ); + + void GetText( int p, int si, char *text, int maxlen ); + void GetText( int p, int si, wchar_t *text, int maxlen ); + + size_t GetTextLength( int p, int si ) + { + LVITEM lvItem; + lvItem.cchTextMax = 0; + lvItem.pszText = 0; + lvItem.iSubItem = si; + lvItem.iItem = p; + + return SendMessage( m_hwnd, LVM_GETITEMTEXT, p, (LPARAM)&lvItem ); + } + + int FindItemByParam( int param ) + { + LVFINDINFO fi = { LVFI_PARAM,0,param }; + + return ListView_FindItem( m_hwnd, -1, &fi ); + } + + int FindItemByPoint( int x, int y ); + + void SetVirtualCount( int count, DWORD flags = 0 ) + { + ListView_SetItemCountEx( m_hwnd, count, flags ); + } + + void SetVirtualCountAsync( int count, DWORD flags = 0 ) + { + if ( m_hwnd ) + PostMessage( m_hwnd, LVM_SETITEMCOUNT, count, flags ); + } + + int GetColumnWidth( int col ); + + void AutoColumnWidth( int col ) + { + ListView_SetColumnWidth( m_hwnd, col, LVSCW_AUTOSIZE_USEHEADER ); + } + + void AutoSizeColumn( int col ) + { + ListView_SetColumnWidth( m_hwnd, col, LVSCW_AUTOSIZE ); + } + + HWND getwnd( void ) + { + return m_hwnd; + } + + void ScrollTo( int index ) + { + ListView_EnsureVisible( m_hwnd, index, FALSE ); + } + + void SetDoubleBuffered( bool buffered = true ) + { + ListView_SetExtendedListViewStyleEx( m_hwnd, LVS_EX_DOUBLEBUFFER, buffered ? LVS_EX_DOUBLEBUFFER : 0 ); + } + + bool ColumnExists( int columnNum ) + { + LVCOLUMN col; + col.mask = LVCF_WIDTH; + + return ListView_GetColumn( m_hwnd, columnNum, &col ); + } + + void ForceUnicode() + { + SendMessage( m_hwnd, CCM_SETUNICODEFORMAT, TRUE, 0 ); + } + +protected: + HWND m_hwnd; + HFONT m_font; + int m_col; + +}; + +#endif//_LISTVIEW_H_ + |