xref: /aosp_15_r20/external/lzma/CPP/7zip/UI/FileManager/PanelSelect.cpp (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // PanelSelect.cpp
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #include "StdAfx.h"
4*f6dc9357SAndroid Build Coastguard Worker 
5*f6dc9357SAndroid Build Coastguard Worker #include "resource.h"
6*f6dc9357SAndroid Build Coastguard Worker 
7*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/StringConvert.h"
8*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/Wildcard.h"
9*f6dc9357SAndroid Build Coastguard Worker 
10*f6dc9357SAndroid Build Coastguard Worker #include "ComboDialog.h"
11*f6dc9357SAndroid Build Coastguard Worker #include "LangUtils.h"
12*f6dc9357SAndroid Build Coastguard Worker #include "Panel.h"
13*f6dc9357SAndroid Build Coastguard Worker 
OnShiftSelectMessage()14*f6dc9357SAndroid Build Coastguard Worker void CPanel::OnShiftSelectMessage()
15*f6dc9357SAndroid Build Coastguard Worker {
16*f6dc9357SAndroid Build Coastguard Worker   if (!_mySelectMode)
17*f6dc9357SAndroid Build Coastguard Worker     return;
18*f6dc9357SAndroid Build Coastguard Worker   const int focusedItem = _listView.GetFocusedItem();
19*f6dc9357SAndroid Build Coastguard Worker   if (focusedItem < 0)
20*f6dc9357SAndroid Build Coastguard Worker     return;
21*f6dc9357SAndroid Build Coastguard Worker   if (!_selectionIsDefined)
22*f6dc9357SAndroid Build Coastguard Worker     return;
23*f6dc9357SAndroid Build Coastguard Worker   int startItem = MyMin(focusedItem, _prevFocusedItem);
24*f6dc9357SAndroid Build Coastguard Worker   int finishItem = MyMax(focusedItem, _prevFocusedItem);
25*f6dc9357SAndroid Build Coastguard Worker 
26*f6dc9357SAndroid Build Coastguard Worker   int numItems = _listView.GetItemCount();
27*f6dc9357SAndroid Build Coastguard Worker   for (int i = 0; i < numItems; i++)
28*f6dc9357SAndroid Build Coastguard Worker   {
29*f6dc9357SAndroid Build Coastguard Worker     const unsigned realIndex = GetRealItemIndex(i);
30*f6dc9357SAndroid Build Coastguard Worker     if (realIndex == kParentIndex)
31*f6dc9357SAndroid Build Coastguard Worker       continue;
32*f6dc9357SAndroid Build Coastguard Worker     if (i >= startItem && i <= finishItem)
33*f6dc9357SAndroid Build Coastguard Worker       if (_selectedStatusVector[realIndex] != _selectMark)
34*f6dc9357SAndroid Build Coastguard Worker       {
35*f6dc9357SAndroid Build Coastguard Worker         _selectedStatusVector[realIndex] = _selectMark;
36*f6dc9357SAndroid Build Coastguard Worker         _listView.RedrawItem(i);
37*f6dc9357SAndroid Build Coastguard Worker       }
38*f6dc9357SAndroid Build Coastguard Worker   }
39*f6dc9357SAndroid Build Coastguard Worker 
40*f6dc9357SAndroid Build Coastguard Worker   _prevFocusedItem = focusedItem;
41*f6dc9357SAndroid Build Coastguard Worker }
42*f6dc9357SAndroid Build Coastguard Worker 
OnArrowWithShift()43*f6dc9357SAndroid Build Coastguard Worker void CPanel::OnArrowWithShift()
44*f6dc9357SAndroid Build Coastguard Worker {
45*f6dc9357SAndroid Build Coastguard Worker   if (!_mySelectMode)
46*f6dc9357SAndroid Build Coastguard Worker     return;
47*f6dc9357SAndroid Build Coastguard Worker   const int focusedItem = _listView.GetFocusedItem();
48*f6dc9357SAndroid Build Coastguard Worker   if (focusedItem < 0)
49*f6dc9357SAndroid Build Coastguard Worker     return;
50*f6dc9357SAndroid Build Coastguard Worker   const unsigned realIndex = GetRealItemIndex(focusedItem);
51*f6dc9357SAndroid Build Coastguard Worker 
52*f6dc9357SAndroid Build Coastguard Worker   if (_selectionIsDefined)
53*f6dc9357SAndroid Build Coastguard Worker   {
54*f6dc9357SAndroid Build Coastguard Worker     if (realIndex != kParentIndex)
55*f6dc9357SAndroid Build Coastguard Worker       _selectedStatusVector[realIndex] = _selectMark;
56*f6dc9357SAndroid Build Coastguard Worker   }
57*f6dc9357SAndroid Build Coastguard Worker   else
58*f6dc9357SAndroid Build Coastguard Worker   {
59*f6dc9357SAndroid Build Coastguard Worker     if (realIndex == kParentIndex)
60*f6dc9357SAndroid Build Coastguard Worker     {
61*f6dc9357SAndroid Build Coastguard Worker       _selectionIsDefined = true;
62*f6dc9357SAndroid Build Coastguard Worker       _selectMark = true;
63*f6dc9357SAndroid Build Coastguard Worker     }
64*f6dc9357SAndroid Build Coastguard Worker     else
65*f6dc9357SAndroid Build Coastguard Worker     {
66*f6dc9357SAndroid Build Coastguard Worker       _selectionIsDefined = true;
67*f6dc9357SAndroid Build Coastguard Worker       _selectMark = !_selectedStatusVector[realIndex];
68*f6dc9357SAndroid Build Coastguard Worker       _selectedStatusVector[realIndex] = _selectMark;
69*f6dc9357SAndroid Build Coastguard Worker     }
70*f6dc9357SAndroid Build Coastguard Worker   }
71*f6dc9357SAndroid Build Coastguard Worker 
72*f6dc9357SAndroid Build Coastguard Worker   _prevFocusedItem = focusedItem;
73*f6dc9357SAndroid Build Coastguard Worker   PostMsg(kShiftSelectMessage);
74*f6dc9357SAndroid Build Coastguard Worker   _listView.RedrawItem(focusedItem);
75*f6dc9357SAndroid Build Coastguard Worker }
76*f6dc9357SAndroid Build Coastguard Worker 
OnInsert()77*f6dc9357SAndroid Build Coastguard Worker void CPanel::OnInsert()
78*f6dc9357SAndroid Build Coastguard Worker {
79*f6dc9357SAndroid Build Coastguard Worker   /*
80*f6dc9357SAndroid Build Coastguard Worker   const int kState = CDIS_MARKED; // LVIS_DROPHILITED;
81*f6dc9357SAndroid Build Coastguard Worker   UINT state = (_listView.GetItemState(focusedItem, LVIS_CUT) == 0) ?
82*f6dc9357SAndroid Build Coastguard Worker       LVIS_CUT : 0;
83*f6dc9357SAndroid Build Coastguard Worker   _listView.SetItemState(focusedItem, state, LVIS_CUT);
84*f6dc9357SAndroid Build Coastguard Worker   // _listView.SetItemState_Selected(focusedItem);
85*f6dc9357SAndroid Build Coastguard Worker   */
86*f6dc9357SAndroid Build Coastguard Worker 
87*f6dc9357SAndroid Build Coastguard Worker   const int focusedItem = _listView.GetFocusedItem();
88*f6dc9357SAndroid Build Coastguard Worker   if (focusedItem < 0)
89*f6dc9357SAndroid Build Coastguard Worker     return;
90*f6dc9357SAndroid Build Coastguard Worker 
91*f6dc9357SAndroid Build Coastguard Worker   const unsigned realIndex = GetRealItemIndex(focusedItem);
92*f6dc9357SAndroid Build Coastguard Worker   if (realIndex != kParentIndex)
93*f6dc9357SAndroid Build Coastguard Worker   {
94*f6dc9357SAndroid Build Coastguard Worker     bool isSelected = !_selectedStatusVector[realIndex];
95*f6dc9357SAndroid Build Coastguard Worker     _selectedStatusVector[realIndex] = isSelected;
96*f6dc9357SAndroid Build Coastguard Worker     if (!_mySelectMode)
97*f6dc9357SAndroid Build Coastguard Worker       _listView.SetItemState_Selected(focusedItem, isSelected);
98*f6dc9357SAndroid Build Coastguard Worker     _listView.RedrawItem(focusedItem);
99*f6dc9357SAndroid Build Coastguard Worker   }
100*f6dc9357SAndroid Build Coastguard Worker 
101*f6dc9357SAndroid Build Coastguard Worker   int nextIndex = focusedItem + 1;
102*f6dc9357SAndroid Build Coastguard Worker   if (nextIndex < _listView.GetItemCount())
103*f6dc9357SAndroid Build Coastguard Worker   {
104*f6dc9357SAndroid Build Coastguard Worker     _listView.SetItemState_FocusedSelected(nextIndex);
105*f6dc9357SAndroid Build Coastguard Worker     _listView.EnsureVisible(nextIndex, false);
106*f6dc9357SAndroid Build Coastguard Worker   }
107*f6dc9357SAndroid Build Coastguard Worker }
108*f6dc9357SAndroid Build Coastguard Worker 
109*f6dc9357SAndroid Build Coastguard Worker /*
110*f6dc9357SAndroid Build Coastguard Worker void CPanel::OnUpWithShift()
111*f6dc9357SAndroid Build Coastguard Worker {
112*f6dc9357SAndroid Build Coastguard Worker   const int focusedItem = _listView.GetFocusedItem();
113*f6dc9357SAndroid Build Coastguard Worker   if (focusedItem < 0)
114*f6dc9357SAndroid Build Coastguard Worker     return;
115*f6dc9357SAndroid Build Coastguard Worker   const int index = GetRealItemIndex(focusedItem);
116*f6dc9357SAndroid Build Coastguard Worker   if (index == kParentIndex)
117*f6dc9357SAndroid Build Coastguard Worker     return;
118*f6dc9357SAndroid Build Coastguard Worker   _selectedStatusVector[index] = !_selectedStatusVector[index];
119*f6dc9357SAndroid Build Coastguard Worker   _listView.RedrawItem(index);
120*f6dc9357SAndroid Build Coastguard Worker }
121*f6dc9357SAndroid Build Coastguard Worker 
122*f6dc9357SAndroid Build Coastguard Worker void CPanel::OnDownWithShift()
123*f6dc9357SAndroid Build Coastguard Worker {
124*f6dc9357SAndroid Build Coastguard Worker   const int focusedItem = _listView.GetFocusedItem();
125*f6dc9357SAndroid Build Coastguard Worker   if (focusedItem < 0)
126*f6dc9357SAndroid Build Coastguard Worker     return;
127*f6dc9357SAndroid Build Coastguard Worker   const int index = GetRealItemIndex(focusedItem);
128*f6dc9357SAndroid Build Coastguard Worker   if (index == kParentIndex)
129*f6dc9357SAndroid Build Coastguard Worker     return;
130*f6dc9357SAndroid Build Coastguard Worker   _selectedStatusVector[index] = !_selectedStatusVector[index];
131*f6dc9357SAndroid Build Coastguard Worker   _listView.RedrawItem(index);
132*f6dc9357SAndroid Build Coastguard Worker }
133*f6dc9357SAndroid Build Coastguard Worker */
134*f6dc9357SAndroid Build Coastguard Worker 
UpdateSelection()135*f6dc9357SAndroid Build Coastguard Worker void CPanel::UpdateSelection()
136*f6dc9357SAndroid Build Coastguard Worker {
137*f6dc9357SAndroid Build Coastguard Worker   if (!_mySelectMode)
138*f6dc9357SAndroid Build Coastguard Worker   {
139*f6dc9357SAndroid Build Coastguard Worker     bool enableTemp = _enableItemChangeNotify;
140*f6dc9357SAndroid Build Coastguard Worker     _enableItemChangeNotify = false;
141*f6dc9357SAndroid Build Coastguard Worker     int numItems = _listView.GetItemCount();
142*f6dc9357SAndroid Build Coastguard Worker     for (int i = 0; i < numItems; i++)
143*f6dc9357SAndroid Build Coastguard Worker     {
144*f6dc9357SAndroid Build Coastguard Worker       const unsigned realIndex = GetRealItemIndex(i);
145*f6dc9357SAndroid Build Coastguard Worker       if (realIndex != kParentIndex)
146*f6dc9357SAndroid Build Coastguard Worker         _listView.SetItemState_Selected(i, _selectedStatusVector[realIndex]);
147*f6dc9357SAndroid Build Coastguard Worker     }
148*f6dc9357SAndroid Build Coastguard Worker     _enableItemChangeNotify = enableTemp;
149*f6dc9357SAndroid Build Coastguard Worker   }
150*f6dc9357SAndroid Build Coastguard Worker   _listView.RedrawAllItems();
151*f6dc9357SAndroid Build Coastguard Worker }
152*f6dc9357SAndroid Build Coastguard Worker 
153*f6dc9357SAndroid Build Coastguard Worker 
SelectSpec(bool selectMode)154*f6dc9357SAndroid Build Coastguard Worker void CPanel::SelectSpec(bool selectMode)
155*f6dc9357SAndroid Build Coastguard Worker {
156*f6dc9357SAndroid Build Coastguard Worker   CComboDialog dlg;
157*f6dc9357SAndroid Build Coastguard Worker   LangString(selectMode ? IDS_SELECT : IDS_DESELECT, dlg.Title );
158*f6dc9357SAndroid Build Coastguard Worker   LangString(IDS_SELECT_MASK, dlg.Static);
159*f6dc9357SAndroid Build Coastguard Worker   dlg.Value = '*';
160*f6dc9357SAndroid Build Coastguard Worker   if (dlg.Create(GetParent()) != IDOK)
161*f6dc9357SAndroid Build Coastguard Worker     return;
162*f6dc9357SAndroid Build Coastguard Worker   const UString &mask = dlg.Value;
163*f6dc9357SAndroid Build Coastguard Worker   FOR_VECTOR (i, _selectedStatusVector)
164*f6dc9357SAndroid Build Coastguard Worker     if (DoesWildcardMatchName(mask, GetItemName(i)))
165*f6dc9357SAndroid Build Coastguard Worker        _selectedStatusVector[i] = selectMode;
166*f6dc9357SAndroid Build Coastguard Worker   UpdateSelection();
167*f6dc9357SAndroid Build Coastguard Worker }
168*f6dc9357SAndroid Build Coastguard Worker 
SelectByType(bool selectMode)169*f6dc9357SAndroid Build Coastguard Worker void CPanel::SelectByType(bool selectMode)
170*f6dc9357SAndroid Build Coastguard Worker {
171*f6dc9357SAndroid Build Coastguard Worker   const int focusedItem = _listView.GetFocusedItem();
172*f6dc9357SAndroid Build Coastguard Worker   if (focusedItem < 0)
173*f6dc9357SAndroid Build Coastguard Worker     return;
174*f6dc9357SAndroid Build Coastguard Worker   const unsigned realIndex = GetRealItemIndex(focusedItem);
175*f6dc9357SAndroid Build Coastguard Worker   UString name = GetItemName(realIndex);
176*f6dc9357SAndroid Build Coastguard Worker   bool isItemFolder = IsItem_Folder(realIndex);
177*f6dc9357SAndroid Build Coastguard Worker 
178*f6dc9357SAndroid Build Coastguard Worker   if (isItemFolder)
179*f6dc9357SAndroid Build Coastguard Worker   {
180*f6dc9357SAndroid Build Coastguard Worker     FOR_VECTOR (i, _selectedStatusVector)
181*f6dc9357SAndroid Build Coastguard Worker       if (IsItem_Folder(i) == isItemFolder)
182*f6dc9357SAndroid Build Coastguard Worker         _selectedStatusVector[i] = selectMode;
183*f6dc9357SAndroid Build Coastguard Worker   }
184*f6dc9357SAndroid Build Coastguard Worker   else
185*f6dc9357SAndroid Build Coastguard Worker   {
186*f6dc9357SAndroid Build Coastguard Worker     int pos = name.ReverseFind_Dot();
187*f6dc9357SAndroid Build Coastguard Worker     if (pos < 0)
188*f6dc9357SAndroid Build Coastguard Worker     {
189*f6dc9357SAndroid Build Coastguard Worker       FOR_VECTOR (i, _selectedStatusVector)
190*f6dc9357SAndroid Build Coastguard Worker         if (IsItem_Folder(i) == isItemFolder && GetItemName(i).ReverseFind_Dot() < 0)
191*f6dc9357SAndroid Build Coastguard Worker           _selectedStatusVector[i] = selectMode;
192*f6dc9357SAndroid Build Coastguard Worker     }
193*f6dc9357SAndroid Build Coastguard Worker     else
194*f6dc9357SAndroid Build Coastguard Worker     {
195*f6dc9357SAndroid Build Coastguard Worker       UString mask ('*');
196*f6dc9357SAndroid Build Coastguard Worker       mask += name.Ptr((unsigned)pos);
197*f6dc9357SAndroid Build Coastguard Worker       FOR_VECTOR (i, _selectedStatusVector)
198*f6dc9357SAndroid Build Coastguard Worker         if (IsItem_Folder(i) == isItemFolder && DoesWildcardMatchName(mask, GetItemName(i)))
199*f6dc9357SAndroid Build Coastguard Worker           _selectedStatusVector[i] = selectMode;
200*f6dc9357SAndroid Build Coastguard Worker     }
201*f6dc9357SAndroid Build Coastguard Worker   }
202*f6dc9357SAndroid Build Coastguard Worker 
203*f6dc9357SAndroid Build Coastguard Worker   UpdateSelection();
204*f6dc9357SAndroid Build Coastguard Worker }
205*f6dc9357SAndroid Build Coastguard Worker 
SelectAll(bool selectMode)206*f6dc9357SAndroid Build Coastguard Worker void CPanel::SelectAll(bool selectMode)
207*f6dc9357SAndroid Build Coastguard Worker {
208*f6dc9357SAndroid Build Coastguard Worker   FOR_VECTOR (i, _selectedStatusVector)
209*f6dc9357SAndroid Build Coastguard Worker     _selectedStatusVector[i] = selectMode;
210*f6dc9357SAndroid Build Coastguard Worker   UpdateSelection();
211*f6dc9357SAndroid Build Coastguard Worker }
212*f6dc9357SAndroid Build Coastguard Worker 
InvertSelection()213*f6dc9357SAndroid Build Coastguard Worker void CPanel::InvertSelection()
214*f6dc9357SAndroid Build Coastguard Worker {
215*f6dc9357SAndroid Build Coastguard Worker   if (!_mySelectMode)
216*f6dc9357SAndroid Build Coastguard Worker   {
217*f6dc9357SAndroid Build Coastguard Worker     /*
218*f6dc9357SAndroid Build Coastguard Worker     unsigned numSelected = 0;
219*f6dc9357SAndroid Build Coastguard Worker     FOR_VECTOR (i, _selectedStatusVector)
220*f6dc9357SAndroid Build Coastguard Worker       if (_selectedStatusVector[i])
221*f6dc9357SAndroid Build Coastguard Worker         numSelected++;
222*f6dc9357SAndroid Build Coastguard Worker     */
223*f6dc9357SAndroid Build Coastguard Worker     // 17.02: fixed : now we invert item even, if single item is selected
224*f6dc9357SAndroid Build Coastguard Worker     /*
225*f6dc9357SAndroid Build Coastguard Worker     if (numSelected == 1)
226*f6dc9357SAndroid Build Coastguard Worker     {
227*f6dc9357SAndroid Build Coastguard Worker       int focused = _listView.GetFocusedItem();
228*f6dc9357SAndroid Build Coastguard Worker       if (focused >= 0)
229*f6dc9357SAndroid Build Coastguard Worker       {
230*f6dc9357SAndroid Build Coastguard Worker         const unsigned realIndex = GetRealItemIndex(focused);
231*f6dc9357SAndroid Build Coastguard Worker         if (realIndex >= 0)
232*f6dc9357SAndroid Build Coastguard Worker           if (_selectedStatusVector[realIndex])
233*f6dc9357SAndroid Build Coastguard Worker             _selectedStatusVector[realIndex] = false;
234*f6dc9357SAndroid Build Coastguard Worker       }
235*f6dc9357SAndroid Build Coastguard Worker     }
236*f6dc9357SAndroid Build Coastguard Worker     */
237*f6dc9357SAndroid Build Coastguard Worker   }
238*f6dc9357SAndroid Build Coastguard Worker   FOR_VECTOR (i, _selectedStatusVector)
239*f6dc9357SAndroid Build Coastguard Worker     _selectedStatusVector[i] = !_selectedStatusVector[i];
240*f6dc9357SAndroid Build Coastguard Worker   UpdateSelection();
241*f6dc9357SAndroid Build Coastguard Worker }
242*f6dc9357SAndroid Build Coastguard Worker 
KillSelection()243*f6dc9357SAndroid Build Coastguard Worker void CPanel::KillSelection()
244*f6dc9357SAndroid Build Coastguard Worker {
245*f6dc9357SAndroid Build Coastguard Worker   SelectAll(false);
246*f6dc9357SAndroid Build Coastguard Worker   // ver 20.01: now we don't like that focused will be selected item.
247*f6dc9357SAndroid Build Coastguard Worker   //   So the following code was disabled:
248*f6dc9357SAndroid Build Coastguard Worker   /*
249*f6dc9357SAndroid Build Coastguard Worker   if (!_mySelectMode)
250*f6dc9357SAndroid Build Coastguard Worker   {
251*f6dc9357SAndroid Build Coastguard Worker     int focused = _listView.GetFocusedItem();
252*f6dc9357SAndroid Build Coastguard Worker     if (focused >= 0)
253*f6dc9357SAndroid Build Coastguard Worker     {
254*f6dc9357SAndroid Build Coastguard Worker       // CPanel::OnItemChanged notify for LVIS_SELECTED change doesn't work here. Why?
255*f6dc9357SAndroid Build Coastguard Worker       // so we change _selectedStatusVector[realIndex] here.
256*f6dc9357SAndroid Build Coastguard Worker       const unsigned realIndex = GetRealItemIndex(focused);
257*f6dc9357SAndroid Build Coastguard Worker       if (realIndex != kParentIndex)
258*f6dc9357SAndroid Build Coastguard Worker         _selectedStatusVector[realIndex] = true;
259*f6dc9357SAndroid Build Coastguard Worker       _listView.SetItemState_Selected(focused);
260*f6dc9357SAndroid Build Coastguard Worker     }
261*f6dc9357SAndroid Build Coastguard Worker   }
262*f6dc9357SAndroid Build Coastguard Worker   */
263*f6dc9357SAndroid Build Coastguard Worker }
264*f6dc9357SAndroid Build Coastguard Worker 
OnLeftClick(MY_NMLISTVIEW_NMITEMACTIVATE * itemActivate)265*f6dc9357SAndroid Build Coastguard Worker void CPanel::OnLeftClick(MY_NMLISTVIEW_NMITEMACTIVATE *itemActivate)
266*f6dc9357SAndroid Build Coastguard Worker {
267*f6dc9357SAndroid Build Coastguard Worker   if (itemActivate->hdr.hwndFrom != HWND(_listView))
268*f6dc9357SAndroid Build Coastguard Worker     return;
269*f6dc9357SAndroid Build Coastguard Worker   // It will work only for Version 4.71 (IE 4);
270*f6dc9357SAndroid Build Coastguard Worker   int indexInList = itemActivate->iItem;
271*f6dc9357SAndroid Build Coastguard Worker   if (indexInList < 0)
272*f6dc9357SAndroid Build Coastguard Worker     return;
273*f6dc9357SAndroid Build Coastguard Worker 
274*f6dc9357SAndroid Build Coastguard Worker   #ifndef UNDER_CE
275*f6dc9357SAndroid Build Coastguard Worker   if ((itemActivate->uKeyFlags & LVKF_SHIFT) != 0)
276*f6dc9357SAndroid Build Coastguard Worker   {
277*f6dc9357SAndroid Build Coastguard Worker     // int focusedIndex = _listView.GetFocusedItem();
278*f6dc9357SAndroid Build Coastguard Worker     const int focusedIndex = _startGroupSelect;
279*f6dc9357SAndroid Build Coastguard Worker     if (focusedIndex < 0)
280*f6dc9357SAndroid Build Coastguard Worker       return;
281*f6dc9357SAndroid Build Coastguard Worker     const int startItem = MyMin(focusedIndex, indexInList);
282*f6dc9357SAndroid Build Coastguard Worker     const int finishItem = MyMax(focusedIndex, indexInList);
283*f6dc9357SAndroid Build Coastguard Worker 
284*f6dc9357SAndroid Build Coastguard Worker     const int numItems = _listView.GetItemCount();
285*f6dc9357SAndroid Build Coastguard Worker     for (int i = 0; i < numItems; i++)
286*f6dc9357SAndroid Build Coastguard Worker     {
287*f6dc9357SAndroid Build Coastguard Worker       const unsigned realIndex = GetRealItemIndex(i);
288*f6dc9357SAndroid Build Coastguard Worker       if (realIndex == kParentIndex)
289*f6dc9357SAndroid Build Coastguard Worker         continue;
290*f6dc9357SAndroid Build Coastguard Worker       const bool selected = (i >= startItem && i <= finishItem);
291*f6dc9357SAndroid Build Coastguard Worker       if (_selectedStatusVector[realIndex] != selected)
292*f6dc9357SAndroid Build Coastguard Worker       {
293*f6dc9357SAndroid Build Coastguard Worker         _selectedStatusVector[realIndex] = selected;
294*f6dc9357SAndroid Build Coastguard Worker         _listView.RedrawItem(i);
295*f6dc9357SAndroid Build Coastguard Worker       }
296*f6dc9357SAndroid Build Coastguard Worker     }
297*f6dc9357SAndroid Build Coastguard Worker   }
298*f6dc9357SAndroid Build Coastguard Worker   else
299*f6dc9357SAndroid Build Coastguard Worker   #endif
300*f6dc9357SAndroid Build Coastguard Worker   {
301*f6dc9357SAndroid Build Coastguard Worker     _startGroupSelect = indexInList;
302*f6dc9357SAndroid Build Coastguard Worker 
303*f6dc9357SAndroid Build Coastguard Worker     #ifndef UNDER_CE
304*f6dc9357SAndroid Build Coastguard Worker     if ((itemActivate->uKeyFlags & LVKF_CONTROL) != 0)
305*f6dc9357SAndroid Build Coastguard Worker     {
306*f6dc9357SAndroid Build Coastguard Worker       const unsigned realIndex = GetRealItemIndex(indexInList);
307*f6dc9357SAndroid Build Coastguard Worker       if (realIndex != kParentIndex)
308*f6dc9357SAndroid Build Coastguard Worker       {
309*f6dc9357SAndroid Build Coastguard Worker         _selectedStatusVector[realIndex] = !_selectedStatusVector[realIndex];
310*f6dc9357SAndroid Build Coastguard Worker         _listView.RedrawItem(indexInList);
311*f6dc9357SAndroid Build Coastguard Worker       }
312*f6dc9357SAndroid Build Coastguard Worker     }
313*f6dc9357SAndroid Build Coastguard Worker     #endif
314*f6dc9357SAndroid Build Coastguard Worker   }
315*f6dc9357SAndroid Build Coastguard Worker 
316*f6dc9357SAndroid Build Coastguard Worker   return;
317*f6dc9357SAndroid Build Coastguard Worker }
318