X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/687706f5e722ac8a39172024f794ae0ffbd190e2..80f218424f34e2ded439cc23631ea1b74c72f732:/src/motif/choice.cpp diff --git a/src/motif/choice.cpp b/src/motif/choice.cpp index bae8a44171..2ffba977d6 100644 --- a/src/motif/choice.cpp +++ b/src/motif/choice.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: choice.cpp +// Name: src/motif/choice.cpp // Purpose: wxChoice // Author: Julian Smart // Modified by: @@ -9,22 +9,16 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "choice.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" +#if wxUSE_CHOICE + #ifdef __VMS #define XtDisplay XTDISPLAY #define XtParent XTPARENT #endif -#include "wx/defs.h" - -#if wxUSE_CHOICE - #include "wx/choice.h" #include "wx/utils.h" #include "wx/arrstr.h" @@ -93,7 +87,8 @@ bool wxChoice::Create(wxWindow *parent, wxWindowID id, * Create the popup menu */ m_menuWidget = (WXWidget) XmCreatePulldownMenu ((Widget) m_formWidget, - "choiceMenu", NULL, 0); + wxMOTIF_STR("choiceMenu"), + NULL, 0); if (n > 0) { @@ -113,7 +108,7 @@ bool wxChoice::Create(wxWindow *parent, wxWindowID id, XtSetArg (args[argcnt], XmNmarginHeight, 0); ++argcnt; XtSetArg (args[argcnt], XmNpacking, XmPACK_TIGHT); ++argcnt; m_buttonWidget = (WXWidget) XmCreateOptionMenu ((Widget) m_formWidget, - "choiceButton", + wxMOTIF_STR("choiceButton"), args, argcnt); m_mainWidget = m_buttonWidget; @@ -186,13 +181,25 @@ wxChoice::~wxChoice() m_clientDataDict.DestroyData(); } -int wxChoice::DoAppend(const wxString& item) +static inline wxChar* MYcopystring(const wxChar* s) { + wxChar* copy = new wxChar[wxStrlen(s) + 1]; + return wxStrcpy(copy, s); +} + +int wxChoice::DoInsert(const wxString& item, int pos) +{ +#ifndef XmNpositionIndex + wxCHECK_MSG( (size_t)pos == GetCount(), -1, wxT("insert not implemented")); +#endif Widget w = XtVaCreateManagedWidget (wxStripMenuCodes(item), -#if USE_GADGETS +#if wxUSE_GADGETS xmPushButtonGadgetClass, (Widget) m_menuWidget, #else xmPushButtonWidgetClass, (Widget) m_menuWidget, +#endif +#ifdef XmNpositionIndex + XmNpositionIndex, pos, #endif NULL); @@ -201,7 +208,7 @@ int wxChoice::DoAppend(const wxString& item) if( m_font.Ok() ) wxDoChangeFont( w, m_font ); - m_widgetArray.Add(w); + m_widgetArray.Insert(w, pos); char mnem = wxFindMnemonic (item); if (mnem != 0) @@ -220,18 +227,16 @@ int wxChoice::DoAppend(const wxString& item) XmNlabelString, text(), NULL); } - m_stringList.Add(item); + // need to ditch wxStringList for wxArrayString + m_stringList.Insert(pos, MYcopystring(item)); m_noStrings ++; - return GetCount() - 1; + return pos; } -int wxChoice::DoInsert(const wxString& item, int pos) +int wxChoice::DoAppend(const wxString& item) { - wxCHECK_MSG(false, -1, wxT("insert not implemented")); - -// wxCHECK_MSG((pos>=0) && (pos<=GetCount()), -1, wxT("invalid index")); -// if (pos == GetCount()) return DoAppend(item); + return DoInsert(item, (int)GetCount()); } void wxChoice::Delete(int n) @@ -281,7 +286,7 @@ int wxChoice::GetSelection() const wxXmString freeMe(text); wxString s = wxXmStringToString( text ); - if (!s.IsEmpty()) + if (!s.empty()) { int i = 0; for (wxStringList::compatibility_iterator node = m_stringList.GetFirst (); @@ -332,21 +337,6 @@ void wxChoice::SetSelection(int n) m_inSetValue = false; } -int wxChoice::FindString(const wxString& s) const -{ - int i = 0; - for (wxStringList::compatibility_iterator node = m_stringList.GetFirst(); - node; node = node->GetNext ()) - { - if (s == node->GetData()) - return i; - - i++; - } - - return wxNOT_FOUND; -} - wxString wxChoice::GetString(int n) const { wxStringList::compatibility_iterator node = m_stringList.Item(n); @@ -360,7 +350,7 @@ void wxChoice::SetColumns(int n) { if (n<1) n = 1 ; - short numColumns = n ; + short numColumns = (short)n ; Arg args[3]; XtSetArg(args[0], XmNnumColumns, numColumns); @@ -459,19 +449,22 @@ void wxChoice::ChangeFont(bool keepOriginalSize) // back again. TODO: a better way in Motif? if (m_font.Ok()) { + Display* dpy = XtDisplay((Widget) m_mainWidget); int width, height, width1, height1; GetSize(& width, & height); - WXFontType fontType = - m_font.GetFontType(XtDisplay((Widget) m_mainWidget)); WXString fontTag = wxFont::GetFontTag(); - XtVaSetValues ((Widget) m_formWidget, fontTag, fontType, NULL); - XtVaSetValues ((Widget) m_buttonWidget, fontTag, fontType, NULL); + XtVaSetValues ((Widget) m_formWidget, + fontTag, m_font.GetFontTypeC(dpy), + NULL); + XtVaSetValues ((Widget) m_buttonWidget, + fontTag, m_font.GetFontTypeC(dpy), + NULL); for( size_t i = 0; i < m_noStrings; ++i ) XtVaSetValues( (Widget)m_widgetArray[i], - fontTag, fontType, + fontTag, m_font.GetFontTypeC(dpy), NULL ); GetSize(& width1, & height1); @@ -502,7 +495,7 @@ void wxChoice::ChangeForegroundColour() wxDoChangeForegroundColour(m_widgetArray[i], m_foregroundColour); } -int wxChoice::GetCount() const +size_t wxChoice::GetCount() const { return m_noStrings; }