7
#include "Common/StringConvert.h"
8
#include "Common/Wildcard.h"
12
#include "ComboDialog.h"
14
#include "LangUtils.h"
16
void CPanel::OnShiftSelectMessage()
20
int focusedItem = _listView.GetFocusedItem();
23
if (!_selectionIsDefined)
25
int startItem = MyMin(focusedItem, _prevFocusedItem);
26
int finishItem = MyMax(focusedItem, _prevFocusedItem);
27
for (int i = 0; i < _listView.GetItemCount(); i++)
29
int realIndex = GetRealItemIndex(i);
30
if (realIndex == kParentIndex)
32
if (i >= startItem && i <= finishItem)
33
if (_selectedStatusVector[realIndex] != _selectMark)
35
_selectedStatusVector[realIndex] = _selectMark;
36
_listView.RedrawItem(i);
39
_prevFocusedItem = focusedItem;
43
void CPanel::OnArrowWithShift()
47
int focusedItem = _listView.GetFocusedItem();
50
int realIndex = GetRealItemIndex(focusedItem);
51
if (_selectionIsDefined)
53
if (realIndex != kParentIndex)
54
_selectedStatusVector[realIndex] = _selectMark;
58
if (realIndex == kParentIndex)
60
_selectionIsDefined = true;
65
_selectionIsDefined = true;
66
_selectMark = !_selectedStatusVector[realIndex];
67
_selectedStatusVector[realIndex] = _selectMark;
70
_prevFocusedItem = focusedItem;
71
PostMessage(kShiftSelectMessage);
72
_listView.RedrawItem(focusedItem);
75
void CPanel::OnInsert()
78
const int kState = CDIS_MARKED; // LVIS_DROPHILITED;
79
UINT state = (_listView.GetItemState(focusedItem, LVIS_CUT) == 0) ?
81
_listView.SetItemState(focusedItem, state, LVIS_CUT);
82
// _listView.SetItemState(focusedItem, LVIS_SELECTED, LVIS_SELECTED);
85
int focusedItem = _listView.GetFocusedItem();
88
int realIndex = GetRealItemIndex(focusedItem);
89
bool isSelected = !_selectedStatusVector[realIndex];
90
if (realIndex != kParentIndex)
91
_selectedStatusVector[realIndex] = isSelected;
94
_listView.SetItemState(focusedItem, isSelected ? LVIS_SELECTED: 0, LVIS_SELECTED);
96
_listView.RedrawItem(focusedItem);
98
int nextIndex = focusedItem + 1;
99
if (nextIndex < _listView.GetItemCount())
101
_listView.SetItemState(nextIndex, LVIS_FOCUSED | LVIS_SELECTED,
102
LVIS_FOCUSED | LVIS_SELECTED);
103
_listView.EnsureVisible(nextIndex, false);
109
void CPanel::OnUpWithShift()
111
int focusedItem = _listView.GetFocusedItem();
114
int index = GetRealItemIndex(focusedItem);
115
_selectedStatusVector[index] = !_selectedStatusVector[index];
116
_listView.RedrawItem(index);
119
void CPanel::OnDownWithShift()
121
int focusedItem = _listView.GetFocusedItem();
124
int index = GetRealItemIndex(focusedItem);
125
_selectedStatusVector[index] = !_selectedStatusVector[index];
126
_listView.RedrawItem(index);
130
void CPanel::UpdateSelection()
132
printf("CPanel::UpdateSelection : _mySelectMode=%d\n",(int)_mySelectMode);
135
bool enableTemp = _enableItemChangeNotify;
136
_enableItemChangeNotify = false;
137
int numItems = _listView.GetItemCount();
138
printf("CPanel::UpdateSelection : numItems=%d\n",(int)numItems);
139
for (int i = 0; i < numItems; i++)
141
int realIndex = GetRealItemIndex(i);
142
if (realIndex != kParentIndex)
145
value = _selectedStatusVector[realIndex] ? LVIS_SELECTED: 0;
146
printf("CPanel::UpdateSelection : SetItemState(%d,%d,LVIS_SELECTED)\n",(int)i,(unsigned)value);
147
_listView.SetItemState(i, value, LVIS_SELECTED);
150
_enableItemChangeNotify = enableTemp;
152
_listView.RedrawAllItems();
156
void CPanel::SelectSpec(bool selectMode)
158
CComboDialog comboDialog;
159
comboDialog.Title = selectMode ?
160
LangString(IDS_SELECT, 0x03020250):
161
LangString(IDS_DESELECT, 0x03020251);
162
comboDialog.Static = LangString(IDS_SELECT_MASK, 0x03020252);
163
comboDialog.Value = L"*";
164
if (comboDialog.Create(GetParent()) == IDCANCEL)
166
const UString &mask = comboDialog.Value;
167
for (int i = 0; i < _selectedStatusVector.Size(); i++)
168
if (CompareWildCardWithName(mask, GetItemName(i)))
169
_selectedStatusVector[i] = selectMode;
173
void CPanel::SelectByType(bool selectMode)
175
int focusedItem = _listView.GetFocusedItem();
178
int realIndex = GetRealItemIndex(focusedItem);
179
UString name = GetItemName(realIndex);
180
bool isItemFolder = IsItemFolder(realIndex);
184
_folder->GetNumberOfItems(&numItems);
185
if ((UInt32)_selectedStatusVector.Size() != numItems)
191
for (int i = 0; i < _selectedStatusVector.Size(); i++)
192
if (IsItemFolder(i) == isItemFolder)
193
_selectedStatusVector[i] = selectMode;
197
int pos = name.ReverseFind(L'.');
200
for (int i = 0; i < _selectedStatusVector.Size(); i++)
201
if (IsItemFolder(i) == isItemFolder && GetItemName(i).ReverseFind(L'.') < 0)
202
_selectedStatusVector[i] = selectMode;
206
UString mask = UString(L'*') + name.Mid(pos);
207
for (int i = 0; i < _selectedStatusVector.Size(); i++)
208
if (IsItemFolder(i) == isItemFolder && CompareWildCardWithName(mask, GetItemName(i)))
209
_selectedStatusVector[i] = selectMode;
215
void CPanel::SelectAll(bool selectMode)
217
for (int i = 0; i < _selectedStatusVector.Size(); i++)
218
_selectedStatusVector[i] = selectMode;
222
void CPanel::InvertSelection()
227
for (int i = 0; i < _selectedStatusVector.Size(); i++)
228
if (_selectedStatusVector[i])
230
if (numSelected == 1)
232
int focused = _listView.GetFocusedItem();
235
int realIndex = GetRealItemIndex(focused);
237
if (_selectedStatusVector[realIndex])
238
_selectedStatusVector[realIndex] = false;
242
for (int i = 0; i < _selectedStatusVector.Size(); i++)
243
_selectedStatusVector[i] = !_selectedStatusVector[i];
247
void CPanel::KillSelection()
252
int focused = _listView.GetFocusedItem();
254
_listView.SetItemState(focused, LVIS_SELECTED, LVIS_SELECTED);
259
void CPanel::OnLeftClick(LPNMITEMACTIVATE itemActivate)
261
if(itemActivate->hdr.hwndFrom != HWND(_listView))
263
// It will be work only for Version 4.71 (IE 4);
264
int indexInList = itemActivate->iItem;
267
if ((itemActivate->uKeyFlags & LVKF_SHIFT) != 0)
269
// int focusedIndex = _listView.GetFocusedItem();
270
int focusedIndex = _startGroupSelect;
271
if (focusedIndex < 0)
273
int startItem = MyMin(focusedIndex, indexInList);
274
int finishItem = MyMax(focusedIndex, indexInList);
275
for (int i = 0; i < _selectedStatusVector.Size(); i++)
277
int realIndex = GetRealItemIndex(i);
278
if (realIndex == kParentIndex)
280
bool selected = (i >= startItem && i <= finishItem);
281
if (_selectedStatusVector[realIndex] != selected)
283
_selectedStatusVector[realIndex] = selected;
284
_listView.RedrawItem(i);
290
_startGroupSelect = indexInList;
291
if ((itemActivate->uKeyFlags & LVKF_CONTROL) != 0)
293
int realIndex = GetRealItemIndex(indexInList);
294
if (realIndex != kParentIndex)
296
_selectedStatusVector[realIndex] = !_selectedStatusVector[realIndex];
297
_listView.RedrawItem(indexInList);