void ContentBoxCtrol::SetSelection(int selection) { wxCHECK_RET( selection == wxNOT_FOUND || (selection >= 0 && (size_t)selection < GetItemCount()), "ContentBoxCtrol::SetSelection(): invalid item index" ); DoSetCurrent(selection); }
void wxSymbolListCtrl::SetSelection(int selection) { wxCHECK_RET( selection == wxNOT_FOUND || (selection >= m_minSymbolValue && selection < m_maxSymbolValue), wxT("wxSymbolListCtrl::SetSelection(): invalid symbol value") ); DoSetCurrent(selection); }
void ContentBoxCtrol::DoHandleItemClick(int item, int flags) { // has anything worth telling the client code about happened? bool notify = false; // the item should become the current one only if it is a final node DoSetCurrent(item); if ( notify ) { // notify the user about the selection change SendSelectedEvent(); } //else: nothing changed at all }
void wxVListBox::SetSelection(int selection) { wxCHECK_RET( selection == wxNOT_FOUND || (selection >= 0 && (size_t)selection < GetItemCount()), _T("wxVListBox::SetSelection(): invalid item index") ); if ( HasMultipleSelection() ) { if (selection != wxNOT_FOUND) Select(selection); else DeselectAll(); m_anchor = selection; } DoSetCurrent(selection); }
bool wxVListBox::Select(size_t item, bool select) { wxCHECK_MSG( m_selStore, false, _T("Select() may only be used with multiselection listbox") ); wxCHECK_MSG( item < GetItemCount(), false, _T("Select(): invalid item index") ); bool changed = m_selStore->SelectItem(item, select); if ( changed ) { // selection really changed RefreshLine(item); } DoSetCurrent(item); return changed; }
void wxVListBox::DoHandleItemClick(int item, int flags) { // has anything worth telling the client code about happened? bool notify = false; if ( HasMultipleSelection() ) { // select the iteem clicked? bool select = true; // NB: the keyboard interface we implement here corresponds to // wxLB_EXTENDED rather than wxLB_MULTIPLE but this one makes more // sense IMHO if ( flags & ItemClick_Shift ) { if ( m_current != wxNOT_FOUND ) { if ( m_anchor == wxNOT_FOUND ) m_anchor = m_current; select = false; // only the range from the selection anchor to new m_current // must be selected if ( DeselectAll() ) notify = true; if ( SelectRange(m_anchor, item) ) notify = true; } //else: treat it as ordinary click/keypress } else // Shift not pressed { m_anchor = item; if ( flags & ItemClick_Ctrl ) { select = false; if ( !(flags & ItemClick_Kbd) ) { Toggle(item); // the status of the item has definitely changed notify = true; } //else: Ctrl-arrow pressed, don't change selection } //else: behave as in single selection case } if ( select ) { // make the clicked item the only selection if ( DeselectAll() ) notify = true; if ( Select(item) ) notify = true; } } // in any case the item should become the current one if ( DoSetCurrent(item) ) { if ( !HasMultipleSelection() ) { // this has also changed the selection for single selection case notify = true; } } if ( notify ) { // notify the user about the selection change SendSelectedEvent(); } //else: nothing changed at all }
// This is here in order to hijack wxVListBox's selection model. Trick the // wxVListBox into thinking that there is no selection so that an event // is fired every time an item is clicked. This allows the color change to // work correctly -- otherwise if the crossing clue were clicked, no event // would be fired, since the selection didn't change. void ClueListBox::OnLeftDown(wxMouseEvent & evt) { DoSetCurrent(wxNOT_FOUND); evt.Skip(); }