From 58045daa7ca94e20095ab7729b3f465bf1661a13 Mon Sep 17 00:00:00 2001 From: Francesco Montorsi <f18m_cpp217828@yahoo.it> Date: Wed, 7 Jan 2009 17:29:38 +0000 Subject: [PATCH] use wxArrayString instead of wxStringList git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57890 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/motif/choice.h | 5 +- src/motif/choice.cpp | 94 ++++++++++++++--------------------- src/motif/combobox.cpp | 13 +---- src/motif/combobox_native.cpp | 11 ++-- 4 files changed, 48 insertions(+), 75 deletions(-) diff --git a/include/wx/motif/choice.h b/include/wx/motif/choice.h index 32fc35fda6..0f5ada2308 100644 --- a/include/wx/motif/choice.h +++ b/include/wx/motif/choice.h @@ -99,19 +99,18 @@ public: // implementation, for wxChoiceCallback const wxWidgetArray& GetWidgets() const { return m_widgetArray; } - const wxStringList& GetStrings() const { return m_stringList; } + const wxArrayString& GetStrings() const { return m_stringArray; } protected: // minimum size for the text ctrl wxSize GetItemsSize() const; // common part of all contructors void Init(); - unsigned int m_noStrings; WXWidget m_menuWidget; WXWidget m_buttonWidget; wxWidgetArray m_widgetArray; WXWidget m_formWidget; - wxStringList m_stringList; + wxArrayString m_stringArray; virtual void DoSetSize(int x, int y, int width, int height, diff --git a/src/motif/choice.cpp b/src/motif/choice.cpp index 4a05b6829d..10f3c3fccc 100644 --- a/src/motif/choice.cpp +++ b/src/motif/choice.cpp @@ -50,7 +50,6 @@ wxChoice::wxChoice() void wxChoice::Init() { - m_noStrings = 0; m_buttonWidget = (WXWidget) 0; m_menuWidget = (WXWidget) 0; m_formWidget = (WXWidget) 0; @@ -221,7 +220,7 @@ int wxChoice::DoInsertItems(const wxArrayStringsAdapter& items, (XtCallbackProc) wxChoiceCallback, (XtPointer) this); - if (m_noStrings == 0 && m_buttonWidget) + if (m_stringArray.GetCount() == 0 && m_buttonWidget) { XtVaSetValues ((Widget) m_buttonWidget, XmNmenuHistory, w, NULL); Widget label = XmOptionButtonGadget ((Widget) m_buttonWidget); @@ -230,9 +229,8 @@ int wxChoice::DoInsertItems(const wxArrayStringsAdapter& items, XmNlabelString, text(), NULL); } - // need to ditch wxStringList for wxArrayString - m_stringList.Insert(pos, MYcopystring(items[i])); - m_noStrings ++; + + m_stringArray.Insert(items[i], pos); InsertNewItemClientData(pos, clientData, i, type); } @@ -245,19 +243,20 @@ void wxChoice::DoDeleteOneItem(unsigned int n) Widget w = (Widget)m_widgetArray[n]; XtRemoveCallback(w, XmNactivateCallback, (XtCallbackProc)wxChoiceCallback, (XtPointer)this); - m_stringList.Erase(m_stringList.Item(n)); + + m_stringArray.RemoveAt(size_t(n)); m_widgetArray.RemoveAt(size_t(n)); wxChoiceBase::DoDeleteOneItem(n); XtDestroyWidget(w); - m_noStrings--; } void wxChoice::DoClear() { - m_stringList.Clear (); + m_stringArray.Clear(); + unsigned int i; - for (i = 0; i < m_noStrings; i++) + for (i = 0; i < m_stringArray.GetCount(); i++) { XtRemoveCallback((Widget) m_widgetArray[i], XmNactivateCallback, (XtCallbackProc)wxChoiceCallback, @@ -265,6 +264,7 @@ void wxChoice::DoClear() XtUnmanageChild ((Widget) m_widgetArray[i]); XtDestroyWidget ((Widget) m_widgetArray[i]); } + m_widgetArray.Clear(); if (m_buttonWidget) XtVaSetValues ((Widget) m_buttonWidget, @@ -272,8 +272,6 @@ void wxChoice::DoClear() NULL); wxChoiceBase::DoClear(); - - m_noStrings = 0; } int wxChoice::GetSelection() const @@ -288,62 +286,48 @@ int wxChoice::GetSelection() const if (!s.empty()) { - int i = 0; - for (wxStringList::compatibility_iterator node = m_stringList.GetFirst (); - node; node = node->GetNext ()) - { - if (wxStrcmp(node->GetData(), s.c_str()) == 0) - { + for (size_t i=0; i<m_stringArray.GetCount(); i++) + if (m_stringArray[i] == s) return i; - } - else - i++; - } // for() - return -1; + return wxNOT_FOUND; } - return -1; + + return wxNOT_FOUND; } void wxChoice::SetSelection(int n) { m_inSetValue = true; - wxStringList::compatibility_iterator node = m_stringList.Item(n); - if (node) - { #if 0 - Dimension selectionWidth, selectionHeight; + Dimension selectionWidth, selectionHeight; #endif - wxXmString text( node->GetData() ); + wxXmString text( m_stringArray[n] ); // MBN: this seems silly, at best, and causes wxChoices to be clipped: // will remove "soon" #if 0 - XtVaGetValues ((Widget) m_widgetArray[n], - XmNwidth, &selectionWidth, - XmNheight, &selectionHeight, - NULL); + XtVaGetValues ((Widget) m_widgetArray[n], + XmNwidth, &selectionWidth, + XmNheight, &selectionHeight, + NULL); #endif - Widget label = XmOptionButtonGadget ((Widget) m_buttonWidget); - XtVaSetValues (label, - XmNlabelString, text(), - NULL); + Widget label = XmOptionButtonGadget ((Widget) m_buttonWidget); + XtVaSetValues (label, + XmNlabelString, text(), + NULL); #if 0 - XtVaSetValues ((Widget) m_buttonWidget, - XmNwidth, selectionWidth, XmNheight, selectionHeight, - XmNmenuHistory, (Widget) m_widgetArray[n], NULL); + XtVaSetValues ((Widget) m_buttonWidget, + XmNwidth, selectionWidth, XmNheight, selectionHeight, + XmNmenuHistory, (Widget) m_widgetArray[n], NULL); #endif - } + m_inSetValue = false; } wxString wxChoice::GetString(unsigned int n) const { - wxStringList::compatibility_iterator node = m_stringList.Item(n); - if (node) - return node->GetData(); - else - return wxEmptyString; + return m_stringArray[n]; } void wxChoice::SetColumns(int n) @@ -385,7 +369,7 @@ void wxChoice::DoSetSize(int x, int y, int width, int height, int sizeFlags) if (width > -1) { unsigned int i; - for (i = 0; i < m_noStrings; i++) + for (i = 0; i < m_stringArray.GetCount(); i++) XtVaSetValues ((Widget) m_widgetArray[i], XmNwidth, actualWidth, NULL); @@ -396,7 +380,7 @@ void wxChoice::DoSetSize(int x, int y, int width, int height, int sizeFlags) { #if 0 unsigned int i; - for (i = 0; i < m_noStrings; i++) + for (i = 0; i < m_stringArray.GetCount(); i++) XtVaSetValues ((Widget) m_widgetArray[i], XmNheight, actualHeight, NULL); @@ -432,7 +416,7 @@ void wxChoiceCallback (Widget w, XtPointer clientData, XtPointer WXUNUSED(ptr)) wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, item->GetId()); event.SetEventObject(item); event.SetInt(n); - event.SetString( item->GetStrings().Item(n)->GetData() ); + event.SetString( item->GetStrings().Item(n) ); if ( item->HasClientObjectData() ) event.SetClientObject( item->GetClientObject(n) ); else if ( item->HasClientUntypedData() ) @@ -462,7 +446,7 @@ void wxChoice::ChangeFont(bool keepOriginalSize) fontTag, m_font.GetFontTypeC(dpy), NULL); - for( unsigned int i = 0; i < m_noStrings; ++i ) + for( unsigned int i = 0; i < m_stringArray.GetCount(); ++i ) XtVaSetValues( (Widget)m_widgetArray[i], fontTag, m_font.GetFontTypeC(dpy), NULL ); @@ -481,7 +465,7 @@ void wxChoice::ChangeBackgroundColour() wxDoChangeBackgroundColour(m_buttonWidget, m_backgroundColour); wxDoChangeBackgroundColour(m_menuWidget, m_backgroundColour); unsigned int i; - for (i = 0; i < m_noStrings; i++) + for (i = 0; i < m_stringArray.GetCount(); i++) wxDoChangeBackgroundColour(m_widgetArray[i], m_backgroundColour); } @@ -491,13 +475,13 @@ void wxChoice::ChangeForegroundColour() wxDoChangeForegroundColour(m_buttonWidget, m_foregroundColour); wxDoChangeForegroundColour(m_menuWidget, m_foregroundColour); unsigned int i; - for (i = 0; i < m_noStrings; i++) + for (i = 0; i < m_stringArray.GetCount(); i++) wxDoChangeForegroundColour(m_widgetArray[i], m_foregroundColour); } unsigned int wxChoice::GetCount() const { - return m_noStrings; + return m_stringArray.GetCount(); } void wxChoice::SetString(unsigned int WXUNUSED(n), const wxString& WXUNUSED(s)) @@ -512,13 +496,11 @@ wxSize wxChoice::GetItemsSize() const // get my GetTextExtent( "|", &x, &my ); - wxStringList::compatibility_iterator curr = m_stringList.GetFirst(); - while( curr ) + for (size_t i=0; i<m_stringArray.GetCount(); i++) { - GetTextExtent( curr->GetData(), &x, &y ); + GetTextExtent( m_stringArray[i], &x, &y ); mx = wxMax( mx, x ); my = wxMax( my, y ); - curr = curr->GetNext(); } return wxSize( mx, my ); diff --git a/src/motif/combobox.cpp b/src/motif/combobox.cpp index f7326ad98c..d3dc7bc1d4 100644 --- a/src/motif/combobox.cpp +++ b/src/motif/combobox.cpp @@ -177,12 +177,7 @@ int wxComboBox::DoInsertItems(const wxArrayStringsAdapter& items, void wxComboBox::DoDeleteOneItem(unsigned int n) { XmComboBoxDeletePos((Widget) m_mainWidget, n+1); - wxStringList::Node *node = m_stringList.Item(n); - if (node) - { - delete[] node->GetData(); - delete node; - } + m_stringArray.RemoveAt(n); wxControlWithItems::DoDeleteOneItem(n); m_noStrings--; } @@ -212,11 +207,7 @@ int wxComboBox::GetSelection (void) const wxString wxComboBox::GetString(unsigned int n) const { - wxStringList::Node *node = m_stringList.Item(n); - if (node) - return wxString(node->GetData ()); - else - return wxEmptyString; + return m_stringArray[n]; } int wxComboBox::FindString(const wxString& s, bool WXUNUSED(bCase)) const diff --git a/src/motif/combobox_native.cpp b/src/motif/combobox_native.cpp index af01743d78..91f7f3d16c 100644 --- a/src/motif/combobox_native.cpp +++ b/src/motif/combobox_native.cpp @@ -203,7 +203,7 @@ int wxComboBox::DoInsertItems(const wxArrayStringsAdapter & items, wxXmString str( items[i].c_str() ); XmComboBoxAddItem((Widget) m_mainWidget, str(), GetMotifPosition(pos), False); - m_noStrings ++; + InsertNewItemClientData(pos, clientData, i, type); } @@ -221,7 +221,7 @@ void wxComboBox::DoDeleteOneItem(unsigned int n) #endif wxControlWithItems::DoDeleteOneItem(n); - m_noStrings--; + m_stringArray.RemoveAt(size_t(n)); AdjustDropDownListSize(); } @@ -231,13 +231,14 @@ void wxComboBox::Clear() #ifdef LESSTIF_VERSION XmListDeleteAllItems (GetXmList(this)); #else - while(m_noStrings > 0) + size_t n = m_stringArray.GetCount(); + while(n > 0) { - XmComboBoxDeletePos((Widget) m_mainWidget, m_noStrings--); + XmComboBoxDeletePos((Widget) m_mainWidget, n--); } #endif - m_noStrings = 0; + m_stringArray.Clear(); AdjustDropDownListSize(); wxTextEntry::Clear(); -- 2.49.0