<
classItem>
78 boolb_reset_others =
false);
89 boolb_keep_selection =
false);
151 template<
classItem>
153: m_SelectedCount(0),
159 template<
classItem>
162 returnx_GetItemsCount();
165 template<
classItem>
168 returnx_GetItem(index);
171 template<
classItem>
174 returnm_iFocusedItem;
177 template<
classItem>
180 returnx_IsItemSelected(index);
183 template<
classItem>
186 returnm_SelectedCount;
189 template<
classItem>
192 int size= (
int) x_GetItemsCount();
193 for(
int i= 0;
i<
size;
i++ ) {
194 if(x_IsItemSelected(
i)) {
195vIndices.push_back(
i);
200 template<
classItem>
203 int size= x_GetItemsCount();
204 for(
int i= 0;
i<
size;
i++ ) {
205 if(x_IsItemSelected(
i)) {
206 TItemitem = x_GetItem(
i);
207items.push_back(item);
212 template<
classItem>
215 if(index != m_iFocusedItem) {
217vUpdateItems.push_back(m_iFocusedItem);
218m_iFocusedItem = index;
219vUpdateItems.push_back(m_iFocusedItem);
221x_ViewsUpdateItems(vUpdateItems);
225 template<
classItem>
229x_GetSelectedItems(vPrevSel);
231 if(m_iFocusedItem != index) {
232 if(m_iFocusedItem >= 0 && ! x_IsItemSelected(m_iFocusedItem))
233vPrevSel.push_back(m_iFocusedItem);
234m_iFocusedItem = index;
237 for(
size_t i= 0;
i< vPrevSel.size();
i++ ) {
239x_SelectItem(idx,
false);
242x_SelectItem(index,
true);
243vPrevSel.push_back(index);
244m_iAnchorItem = index;
246}
elsem_SelectedCount = 0;
248x_ViewsUpdateItems(vPrevSel);
252 template<
classItem>
257 if(m_iFocusedItem != index) {
258vIndices.push_back(m_iFocusedItem);
259m_iFocusedItem = index;
261 boolb_old_sel = x_IsItemSelected(index);
262x_SelectItem(index, ! b_old_sel);
263vIndices.push_back(index);
264m_iAnchorItem = index;
265m_SelectedCount += b_old_sel ? -1 : 1;
266}
elsem_SelectedCount = 0;
268x_ViewsUpdateItems(vIndices);
274 template<
classItem>
278 if(b_reset_others) {
279 size_tn_items = x_GetItemsCount();
280vector<bool> v_sel(n_items,
false);
283 for(
size_t i= 0;
i< vIndices.size();
i++ ) {
284 if( ! v_sel[vIndices[
i]]) {
285v_sel[vIndices[
i]] =
true;
289 for(
size_tj= 0; j < n_items; j++ ) {
290x_SelectItem((
int) j, v_sel[j]);
293m_SelectedCount =
count;
295x_ViewsUpdateItemRange(0, (
int) n_items - 1);
300 if( ! x_IsItemSelected(*it)) {
301x_SelectItem(*it,
true);
302vUpdateIndices.push_back(*it);
305m_SelectedCount += (
int) vUpdateIndices.size();
307x_ViewsUpdateItems(vUpdateIndices);
312 template<
classItem>
317x_SelectItem(
i, b_select);
319m_SelectedCount = b_select ?
count: 0;
322x_ViewsUpdateItemRange(0,
count- 1);
326 template<
classItem>
332 TIndexiStart =
min(m_iAnchorItem, index);
333 TIndexiEnd =
max(m_iAnchorItem, index);
337 boolbPrevFocusedChanged =
false;
342 boolb_select = (
i>= iStart &&
i<= iEnd);
343 if(x_IsItemSelected(
i) != b_select)
345x_SelectItem(
i, b_select);
346m_SelectedCount += b_select ? 1 : -1;
347vUpdateIndices.push_back(
i);
348 if(
i== m_iFocusedItem)
349bPrevFocusedChanged =
true;
352 if(m_iFocusedItem != index)
354 if( ! bPrevFocusedChanged)
355vUpdateIndices.push_back(m_iFocusedItem);
356m_iFocusedItem = index;
359x_ViewsUpdateItems(vUpdateIndices);
363 template<
classItem>
366 if( find(m_lsViews.begin(), m_lsViews.end(), pView) == m_lsViews.end()) {
367m_lsViews.push_back(pView);
373 template<
classItem>
376 typenameTViewList::iterator itView
377= find( m_lsViews.begin(), m_lsViews.end(), pView);
378 if(itView != m_lsViews.end()) {
379m_lsViews.erase(itView);
385 template<
classItem>
387 boolb_update,
boolb_keep_selection)
389 size_titems_n = vItems.size();
392 int n= x_GetItemsCount();
394 for(
size_t i= 0;
i< items_n;
i++) {
395v_entries[
i].first = vItems[
i];
397 if(b_keep_selection) {
398 TIndexindex = x_GetItemIndex(vItems[
i]);
399b_sel = (index > -1 && index <
n) ? x_IsItemSelected(index) :
false;
401v_entries[
i].second = b_sel;
410x_SetEntries(v_entries);
411m_SelectedCount = n_sel;
414 TIndexi_max =
max(0, (
int) items_n - 1);
415x_ViewsUpdateItemRange(0, i_max);
420 template<
classItem>
425 size_tn_items = v_items.size();
426 _ASSERT(n_items == v_indices.size());
428 TIndexi_min = x_GetItemsCount();
429 for(
size_t i= 0;
i< n_items;
i++ ) {
431ind =
min(ind, x_GetItemsCount());
432x_InsertItem(ind,
TItemEntry(v_items[
i],
false));
434i_min =
min(i_min, ind);
436x_CompleteInsertion();
439 TIndexi_max =
max(0, x_GetItemsCount() - 1);
440x_ViewsUpdateItemRange(i_min, i_max);
445 template<
classItem>
449 if(index >= 0 && index <= x_GetItemsCount()) {
450x_InsertItem(index,
TItemEntry(item,
false));
451x_CompleteInsertion();
454 TIndexi_max =
max(0, x_GetItemsCount() - 1);
455x_ViewsUpdateItemRange(index, i_max);
463 template<
classItem>
472 if(index >= 0 && index <
count) {
473 if(m_iFocusedItem == index)
475 if(m_iAnchorItem == index)
476m_iAnchorItem = m_iFocusedItem;
478 if(x_IsItemSelected(index))
480x_SelectItem(index,
false);
484x_MarkItemForErase(index);
488x_EraseMarkedItems();
490 if(bUpdate && min_del <
count) {
491x_ViewsUpdateItemRange(min_del,
count-1);
496 template<
classItem>
500 if(index >= 0 && index <
count) {
501 if(m_iFocusedItem == index)
503 if(m_iAnchorItem == index)
504m_iAnchorItem = m_iFocusedItem;
506 if(x_IsItemSelected(index))
513x_ViewsUpdateItemRange(0, i_max);
521 template<
classItem>
525x_ViewsUpdateItemRange(0, -1);
529 template<
classItem>
534m_iFocusedItem = m_iAnchorItem = -1;
539 template<
classItem>
542vIndices.reserve(m_SelectedCount);
545 if(x_IsItemSelected(
i))
546vIndices.push_back(
i);
548 _ASSERT(vIndices.size() == (
size_t) m_SelectedCount);
552 template<
classItem>
556(*itView)->SLV_UpdateItems(vIndices);
560 template<
classItem>
564(*itView)->SLV_UpdateRange(iStart, iEnd);
CSelListModelImpl provides a defult implementation of ISelListModel.
void x_ViewsUpdateItemRange(int iStart, int iEnd)
ISelListModel< Item >::TIndexVector TIndexVector
virtual TItem x_GetItem(TIndex index) const =0
bool DeleteItem(TIndex index, bool bUpdate=true)
void InsertItems(const TItemVector &v_items, const TIndexVector &v_indices, bool b_update)
void x_GetSelectedItems(TIndexVector &vIndices)
virtual void SLM_GetSelectedItems(TItemVector &items) const
vector< TItem > TItemVector
ISelListModel< TItem > TSelListModel
void DeleteItems(const TIndexVector &vIndices, bool b_update)
bool InsertItem(TIndex index, const TItem &item, bool b_update)
list< TSelListView * > TViewList
virtual void x_CompleteInsertion()=0
performs update after all items have been inserted
virtual void SLM_SelectItems(const TIndexVector &vIndeces, bool b_reset_others=false)
Select items with given indices.
virtual bool x_IsItemSelected(TIndex index) const =0
virtual TIndex SLM_GetItemsCount() const
vector< TItemEntry > TEntryVector
virtual TIndex SLM_GetSelectedCount() const
virtual void SLM_RemoveSLView(TSelListView *pView)
virtual void SLM_SelectAll(bool bSelect=true)
ISelListModel< Item >::TItem TItem
virtual bool SLM_IsItemSelected(TIndex index) const
virtual void SLM_GetSelectedIndices(TIndexVector &vIndices) const
virtual TIndex x_GetItemIndex(const TItem &item)=0
virtual void x_SelectItem(TIndex index, bool b_sel)=0
virtual void SLM_FocusItem(TIndex index)
virtual TIndex x_GetItemsCount() const =0
virtual void x_SetEntries(const TEntryVector &v_entries)=0
virtual void SLM_InvertSingleItem(TIndex index)
virtual void SLM_AddSLView(TSelListView *pView)
ISelListModel< Item >::TIndex TIndex
virtual void x_ClearItems()=0
virtual void x_EraseMarkedItems()=0
deletes all marked items in a single pass, performs neccessary updates
virtual TIndex SLM_GetFocusedItemIndex() const
void x_EraseItem(TIndex index)
TODO.
virtual void SLM_SelectTo(TIndex index)
virtual void SLM_SelectSingleItem(TIndex index)
virtual void x_InsertItem(TIndex index, const TItemEntry &entry)=0
inserts item, but does not updates all data structures
virtual void x_MarkItemForErase(TIndex index)=0
mark item for deletion
ISelListView< TItem > TSelListView
related interfaces
void x_ViewsUpdateItems(TIndexVector &vIndices)
void SetItems(const TItemVector &vItems, bool b_update, bool b_keep_selection=false)
map< TItem, int > TItemToIndexMap
CSelListModelImpl()
class CSelListModelImpl
virtual TItem SLM_GetItem(TIndex index) const
pair< TItem, bool > TItemEntry
vector< TIndex > TIndexVector
virtual void SLV_SetModel(TSelListModel *pModel)=0
Include a standard set of the NCBI C++ Toolkit most basic headers.
#define ITERATE(Type, Var, Cont)
ITERATE macro to sequence through container elements.
#define NON_CONST_ITERATE(Type, Var, Cont)
Non constant version of ITERATE macro.
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
unsigned int
A callback function used to compare two keys in a database.
const struct ncbi::grid::netcache::search::fields::SIZE size
The NCBI C++/STL use hints.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4