aboutsummaryrefslogtreecommitdiff
path: root/CPP/Windows/Control/ListView.h
blob: 11a33a07d07d650ab8e1b605fae68ec16ae4c632 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
// Windows/Control/ListView.h

#ifndef ZIP7_INC_WINDOWS_CONTROL_LISTVIEW_H
#define ZIP7_INC_WINDOWS_CONTROL_LISTVIEW_H

#include "../../Common/MyWindows.h"

#include <CommCtrl.h>

#include "../Window.h"

namespace NWindows {
namespace NControl {

class CListView: public NWindows::CWindow
{
public:
  bool CreateEx(DWORD exStyle, DWORD style,
      int x, int y, int width, int height,
      HWND parentWindow, HMENU idOrHMenu,
      HINSTANCE instance, LPVOID createParam);

  void SetUnicodeFormat()
  {
    #ifndef UNDER_CE
    ListView_SetUnicodeFormat(_window, TRUE);
    #endif
  }
 
  bool DeleteAllItems() { return BOOLToBool(ListView_DeleteAllItems(_window)); }
  bool DeleteColumn(unsigned columnIndex) { return BOOLToBool(ListView_DeleteColumn(_window, columnIndex)); }

  int InsertColumn(unsigned columnIndex, const LVCOLUMN *columnInfo) { return ListView_InsertColumn(_window, columnIndex, columnInfo); }
  int InsertColumn(unsigned columnIndex, LPCTSTR text, int width);
  bool SetColumnOrderArray(unsigned count, const int *columns)
    { return BOOLToBool(ListView_SetColumnOrderArray(_window, count, (int *)(void *)columns)); }

  /*
  int GetNumColumns()
  {
    HWND header = ListView_GetHeader(_window);
    if (!header)
      return -1;
    return Header_GetItemCount(header);
  }
  */

  int InsertItem(const LVITEM* item) { return ListView_InsertItem(_window, item); }
  int InsertItem(unsigned index, LPCTSTR text);
  bool SetItem(const LVITEM* item) { return BOOLToBool(ListView_SetItem(_window, item)); }
  int SetSubItem(unsigned index, unsigned subIndex, LPCTSTR text);

  #ifndef _UNICODE

  int InsertColumn(unsigned columnIndex, const LVCOLUMNW *columnInfo) { return (int)SendMsg(LVM_INSERTCOLUMNW, (WPARAM)columnIndex, (LPARAM)columnInfo); }
  int InsertColumn(unsigned columnIndex, LPCWSTR text, int width);
  int InsertItem(const LV_ITEMW* item) { return (int)SendMsg(LVM_INSERTITEMW, 0, (LPARAM)item); }
  int InsertItem(unsigned index, LPCWSTR text);
  bool SetItem(const LV_ITEMW* item) { return BOOLToBool((BOOL)SendMsg(LVM_SETITEMW, 0, (LPARAM)item)); }
  int SetSubItem(unsigned index, unsigned subIndex, LPCWSTR text);

  #endif

  bool DeleteItem(unsigned itemIndex) { return BOOLToBool(ListView_DeleteItem(_window, itemIndex)); }

  UINT GetSelectedCount() const { return ListView_GetSelectedCount(_window); }
  int GetItemCount() const { return ListView_GetItemCount(_window); }

  INT GetSelectionMark() const { return ListView_GetSelectionMark(_window); }

  void SetItemCount(unsigned numItems) { ListView_SetItemCount(_window, numItems); }
  void SetItemCountEx(unsigned numItems, DWORD flags) {  ListView_SetItemCountEx(_window, numItems, flags); }

  /* startIndex : The index of the item with which to begin the search,
     or -1 to find the first item that matches the specified flags.
     The specified item itself is excluded from the search. */
  int GetNextItem(int startIndex, UINT flags) const { return ListView_GetNextItem(_window, startIndex, flags); }
  int GetNextSelectedItem(int startIndex) const { return GetNextItem(startIndex, LVNI_SELECTED); }
  int GetFocusedItem() const { return GetNextItem(-1, LVNI_FOCUSED); }
  
  bool GetItem(LVITEM* item) const { return BOOLToBool(ListView_GetItem(_window, item)); }
  bool GetItemParam(unsigned itemIndex, LPARAM &param) const;
  /*
  void GetItemText(unsigned itemIndex, unsigned subItemIndex, LPTSTR text, unsigned textSizeMax) const
    { ListView_GetItemText(_window, itemIndex, subItemIndex, text, textSizeMax) }
  */
  bool SortItems(PFNLVCOMPARE compareFunction, LPARAM dataParam)
    { return BOOLToBool(ListView_SortItems(_window, compareFunction, dataParam)); }

  // If (index == -1), then the state change is applied to all items.
  void SetItemState(int index, UINT state, UINT mask) { ListView_SetItemState(_window, index, state, mask) }
  void SetItemState_Selected(int index, bool select) { SetItemState(index, select ? LVIS_SELECTED : 0, LVIS_SELECTED); }
  void SetItemState_Selected(int index) { SetItemState(index, LVIS_SELECTED, LVIS_SELECTED); }
  void SelectAll() { SetItemState_Selected(-1); }
  void SetItemState_FocusedSelected(int index) { SetItemState(index, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED); }
  UINT GetItemState(int index, UINT mask) const { return ListView_GetItemState(_window, index, mask); }
  bool IsItemSelected(int index) const { return GetItemState(index, LVIS_SELECTED) == LVIS_SELECTED; }

  bool GetColumn(unsigned columnIndex, LVCOLUMN* columnInfo) const
    { return BOOLToBool(ListView_GetColumn(_window, columnIndex, columnInfo)); }

  HIMAGELIST SetImageList(HIMAGELIST imageList, int imageListType)
    { return ListView_SetImageList(_window, imageList, imageListType); }

  // version 4.70: NT5 | (NT4 + ie3) | w98 | (w95 + ie3)
  DWORD GetExtendedListViewStyle() { return ListView_GetExtendedListViewStyle(_window); }
  void SetExtendedListViewStyle(DWORD exStyle) { ListView_SetExtendedListViewStyle(_window, exStyle); }
  void SetExtendedListViewStyle(DWORD exMask, DWORD exStyle) { ListView_SetExtendedListViewStyleEx(_window, exMask, exStyle); }

  void SetCheckState(UINT index, bool checkState) { ListView_SetCheckState(_window, index, BoolToBOOL(checkState)) }
  bool GetCheckState(UINT index) { return BOOLToBool(ListView_GetCheckState(_window, index)); }

  bool EnsureVisible(int index, bool partialOK) { return BOOLToBool(ListView_EnsureVisible(_window, index, BoolToBOOL(partialOK))); }

  bool GetItemRect(int index, RECT *rect, int code) { return BOOLToBool(ListView_GetItemRect(_window, index, rect, code)); }

  HWND GetEditControl() { return ListView_GetEditControl(_window) ; }
  HWND EditLabel(int itemIndex) { return ListView_EditLabel(_window, itemIndex) ; }

  bool RedrawItems(int firstIndex, int lastIndex) { return BOOLToBool(ListView_RedrawItems(_window, firstIndex, lastIndex)); }
  bool RedrawAllItems()
  {
    if (GetItemCount() > 0)
      return RedrawItems(0, GetItemCount() - 1);
    return true;
  }
  bool RedrawItem(int index) { return RedrawItems(index, index); }
 
  int HitTest(LPLVHITTESTINFO info) { return ListView_HitTest(_window, info); }
  COLORREF GetBkColor() { return ListView_GetBkColor(_window); }
  bool SetColumnWidth(int iCol, int cx) { return BOOLToBool(ListView_SetColumnWidth(_window, iCol, cx)); }
  bool SetColumnWidthAuto(int iCol) { return SetColumnWidth(iCol, LVSCW_AUTOSIZE); }
};

class CListView2: public CListView
{
  WNDPROC _origWindowProc;
  // ~CListView2() ZIP7_eq_delete;
public:
  virtual ~CListView2() {}
  CListView2() {}
  void SetWindowProc();
  virtual LRESULT OnMessage(UINT message, WPARAM wParam, LPARAM lParam);
};

/*
class CListView3: public CListView2
{
public:
  virtual LRESULT OnMessage(UINT message, WPARAM wParam, LPARAM lParam);
};
*/

}}

#endif