int wxListBox::DoInsertItems(const wxArrayStringsAdapter& items, unsigned int pos, void **clientData, wxClientDataType type) { int idx = wxNOT_FOUND; unsigned int startpos = pos; const unsigned int numItems = items.GetCount(); for ( unsigned int i = 0; i < numItems; ++i ) { const wxString& item = items[i]; idx = IsSorted() ? m_strings.sorted->Add(item) : (m_strings.unsorted->Insert(item, pos), pos++); m_itemsClientData.Insert(NULL, idx); AssignNewItemClientData(idx, clientData, i, type); GetListPeer()->ListInsert(startpos+i); OnItemInserted(idx); } GetListPeer()->UpdateLineToEnd(startpos); UpdateOldSelections(); return idx; }
void wxListBox::DoClear() { m_blockEvents = true; FreeData(); m_blockEvents = false; UpdateOldSelections(); }
void wxListBox::GTKEnableEvents() { GtkTreeSelection* selection = gtk_tree_view_get_selection( m_treeview ); g_signal_handlers_unblock_by_func(selection, (gpointer) gtk_listitem_changed_callback, this); UpdateOldSelections(); }
int wxListBox::DoInsertItems(const wxArrayStringsAdapter & items, unsigned int pos, void **clientData, wxClientDataType type) { InvalidateBestSize(); int n = DoInsertItemsInLoop(items, pos, clientData, type); UpdateOldSelections(); return n; }
void wxListBox::DoClear() { Free(); ListBox_ResetContent(GetHwnd()); m_noItems = 0; m_updateHorizontalExtent = true; UpdateOldSelections(); }
int wxListBox::DoInsertItems(const wxArrayStringsAdapter& items, unsigned int pos, void **clientData, wxClientDataType type) { wxCHECK_MSG( m_treeview != NULL, wxNOT_FOUND, wxT("invalid listbox") ); InvalidateBestSize(); int n = DoInsertItemsInLoop(items, pos, clientData, type); UpdateOldSelections(); return n; }
void wxListBox::DoDeleteOneItem(unsigned int n) { wxCHECK_RET( IsValid(n), wxT("invalid index in wxListBox::Delete") ); SendMessage(GetHwnd(), LB_DELETESTRING, n, 0); m_noItems--; // SetHorizontalExtent(wxEmptyString); can be slow m_updateHorizontalExtent = true; UpdateOldSelections(); }
void wxListBox::DoClear() { wxCHECK_RET( m_treeview != NULL, wxT("invalid listbox") ); GTKDisableEvents(); // just in case InvalidateBestSize(); gtk_list_store_clear( m_liststore ); /* well, THAT was easy :) */ GTKEnableEvents(); UpdateOldSelections(); }
void wxListBox::DoClear() { wxCHECK_RET( m_treeview != NULL, wxT("invalid listbox") ); { wxGtkEventsDisabler<wxListBox> noEvents(this); InvalidateBestSize(); gtk_list_store_clear( m_liststore ); /* well, THAT was easy :) */ } UpdateOldSelections(); }
int wxListBox::DoInsertItems(const wxArrayStringsAdapter & items, unsigned int pos, void **clientData, wxClientDataType type) { MSWAllocStorage(items, LB_INITSTORAGE); const bool append = pos == GetCount(); // we must use CB_ADDSTRING when appending as only it works correctly for // the sorted controls const unsigned msg = append ? LB_ADDSTRING : LB_INSERTSTRING; if ( append ) pos = 0; int n = wxNOT_FOUND; const unsigned int numItems = items.GetCount(); for ( unsigned int i = 0; i < numItems; i++ ) { n = MSWInsertOrAppendItem(pos, items[i], msg); if ( n == wxNOT_FOUND ) return n; if ( !append ) pos++; ++m_noItems; #if wxUSE_OWNER_DRAWN if ( HasFlag(wxLB_OWNERDRAW) ) { wxOwnerDrawn *pNewItem = CreateLboxItem(n); pNewItem->SetName(items[i]); pNewItem->SetFont(GetFont()); m_aItems.Insert(pNewItem, n); } #endif // wxUSE_OWNER_DRAWN AssignNewItemClientData(n, clientData, i, type); } m_updateHorizontalExtent = true; UpdateOldSelections(); return n; }
void wxListBox::DoClear() { #if wxUSE_OWNER_DRAWN if ( HasFlag(wxLB_OWNERDRAW) ) { WX_CLEAR_ARRAY(m_aItems); } #endif // wxUSE_OWNER_DRAWN ListBox_ResetContent(GetHwnd()); m_noItems = 0; MSWOnItemsChanged(); UpdateOldSelections(); }
void wxListBox::DoSetSelection(int n, bool select) { wxCHECK_RET( n == wxNOT_FOUND || IsValid(n), wxT("invalid index in wxListBox::SetSelection") ); m_blockEvents = true; if ( n == wxNOT_FOUND ) GetListPeer()->ListDeselectAll(); else GetListPeer()->ListSetSelection( n, select, HasMultipleSelection() ); m_blockEvents = false; UpdateOldSelections(); }
void wxListBox::DoSetSelection(int N, bool select) { wxCHECK_RET( N == wxNOT_FOUND || IsValid(N), wxT("invalid index in wxListBox::SetSelection") ); if ( HasMultipleSelection() ) { SendMessage(GetHwnd(), LB_SETSEL, select, N); } else { SendMessage(GetHwnd(), LB_SETCURSEL, select ? N : -1, 0); } UpdateOldSelections(); }
void wxListBox::DoDeleteOneItem(unsigned int n) { wxCHECK_RET( IsValid(n), wxT("invalid index in wxListBox::Delete") ); m_blockEvents = true; if ( IsSorted() ) m_strings.sorted->RemoveAt(n); else m_strings.unsorted->RemoveAt(n); m_itemsClientData.RemoveAt(n); GetListPeer()->ListDelete( n ); m_blockEvents = false; UpdateOldSelections(); }
int wxListBox::DoInsertItems(const wxArrayStringsAdapter& items, unsigned int pos, void **clientData, wxClientDataType type) { int idx = wxNOT_FOUND; unsigned int startpos = pos; const unsigned int numItems = items.GetCount(); #if defined(__INTEL_COMPILER) && 1 /* VDM auto patch */ # pragma ivdep # pragma swp # pragma unroll # pragma prefetch # if 0 # pragma simd noassert # endif #endif /* VDM auto patch */ for ( unsigned int i = 0; i < numItems; ++i ) { const wxString& item = items[i]; idx = IsSorted() ? m_strings.sorted->Add(item) : (m_strings.unsorted->Insert(item, pos), pos++); m_itemsClientData.Insert(NULL, idx); AssignNewItemClientData(idx, clientData, i, type); GetListPeer()->ListInsert(startpos+i); OnItemInserted(idx); } GetListPeer()->UpdateLineToEnd(startpos); // Inserting the items may scroll the listbox down to show the last // selected one but we don't want to do it as it could result in e.g. the // first items of a listbox be hidden immediately after its creation so // show the first selected item instead. Ideal would probably be to // preserve the old selection unchanged, in fact, but I don't know how to // get the first visible item so for now do at least this. SetFirstItem(startpos); UpdateOldSelections(); return idx; }
int wxListBox::DoInsertItems(const wxArrayStringsAdapter& items, unsigned int pos, void **clientData, wxClientDataType type) { wxCHECK_MSG( m_treeview != NULL, wxNOT_FOUND, wxT("invalid listbox") ); InvalidateBestSize(); GtkTreeIter* pIter = NULL; // append by default GtkTreeIter iter; if ( pos != GetCount() ) { wxCHECK_MSG( GTKGetIteratorFor(pos, &iter), wxNOT_FOUND, wxT("internal wxListBox error in insertion") ); pIter = &iter; } const unsigned int numItems = items.GetCount(); for ( unsigned int i = 0; i < numItems; ++i ) { GtkTreeEntry* entry = gtk_tree_entry_new(); gtk_tree_entry_set_label(entry, wxGTK_CONV(items[i])); gtk_tree_entry_set_destroy_func(entry, (GtkTreeEntryDestroy)gtk_tree_entry_destroy_cb, this); GtkTreeIter itercur; gtk_list_store_insert_before(m_liststore, &itercur, pIter); GTKSetItem(itercur, entry); g_object_unref (entry); if (clientData) AssignNewItemClientData(GTKGetIndexFor(itercur), clientData, i, type); } UpdateOldSelections(); return pos + numItems - 1; }
void wxListBox::DoSetSelection(int N, bool select) { wxCHECK_RET( N == wxNOT_FOUND || IsValid(N), wxT("invalid index in wxListBox::SetSelection") ); if ( HasMultipleSelection() ) { // Setting selection to -1 should deselect everything. const bool deselectAll = N == wxNOT_FOUND; SendMessage(GetHwnd(), LB_SETSEL, deselectAll ? FALSE : select, deselectAll ? -1 : N); } else { SendMessage(GetHwnd(), LB_SETCURSEL, select ? N : -1, 0); } UpdateOldSelections(); }
void wxListBox::DoDeleteOneItem(unsigned int n) { wxCHECK_RET( IsValid(n), wxT("invalid index in wxListBox::Delete") ); #if wxUSE_OWNER_DRAWN if ( HasFlag(wxLB_OWNERDRAW) ) { delete m_aItems[n]; m_aItems.RemoveAt(n); } #endif // wxUSE_OWNER_DRAWN SendMessage(GetHwnd(), LB_DELETESTRING, n, 0); m_noItems--; MSWOnItemsChanged(); UpdateOldSelections(); }