X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/312ebad4cd1fad97a79aaed7102611df88806410..58c23da1d54bf50d9f892b692b941f2cd20d96d0:/src/motif/choice.cpp diff --git a/src/motif/choice.cpp b/src/motif/choice.cpp index 87e7eb7880..ba418a03e9 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,24 +9,22 @@ // 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" +#include "wx/choice.h" -#if wxUSE_CHOICE +#ifndef WX_PRECOMP + #include "wx/utils.h" +#endif -#include "wx/choice.h" -#include "wx/utils.h" #include "wx/arrstr.h" #ifdef __VMS__ @@ -93,7 +91,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 +112,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 +185,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, unsigned int pos) { +#ifndef XmNpositionIndex + wxCHECK_MSG( 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 +212,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,21 +231,19 @@ 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, GetCount()); } -void wxChoice::Delete(int n) +void wxChoice::Delete(unsigned int n) { Widget w = (Widget)m_widgetArray[n]; XtRemoveCallback(w, XmNactivateCallback, (XtCallbackProc)wxChoiceCallback, @@ -244,13 +253,13 @@ void wxChoice::Delete(int n) m_clientDataDict.Delete(n, HasClientObjectData()); XtDestroyWidget(w); - m_noStrings --; + m_noStrings--; } void wxChoice::Clear() { m_stringList.Clear (); - size_t i; + unsigned int i; for (i = 0; i < m_noStrings; i++) { XtRemoveCallback((Widget) m_widgetArray[i], @@ -281,7 +290,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,22 +341,7 @@ 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 +wxString wxChoice::GetString(unsigned int n) const { wxStringList::compatibility_iterator node = m_stringList.Item(n); if (node) @@ -360,7 +354,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); @@ -394,7 +388,7 @@ void wxChoice::DoSetSize(int x, int y, int width, int height, int sizeFlags) if (width > -1) { - size_t i; + unsigned int i; for (i = 0; i < m_noStrings; i++) XtVaSetValues ((Widget) m_widgetArray[i], XmNwidth, actualWidth, @@ -405,7 +399,7 @@ void wxChoice::DoSetSize(int x, int y, int width, int height, int sizeFlags) if (height > -1) { #if 0 - size_t i; + unsigned int i; for (i = 0; i < m_noStrings; i++) XtVaSetValues ((Widget) m_widgetArray[i], XmNheight, actualHeight, @@ -441,8 +435,8 @@ void wxChoiceCallback (Widget w, XtPointer clientData, XtPointer WXUNUSED(ptr)) { wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, item->GetId()); event.SetEventObject(item); - event.m_commandInt = n; - event.m_commandString = item->GetStrings().Item(n)->GetData(); + event.SetInt(n); + event.SetString( item->GetStrings().Item(n)->GetData() ); if ( item->HasClientObjectData() ) event.SetClientObject( item->GetClientObject(n) ); else if ( item->HasClientUntypedData() ) @@ -459,19 +453,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 ) + for( unsigned int i = 0; i < m_noStrings; ++i ) XtVaSetValues( (Widget)m_widgetArray[i], - fontTag, fontType, + fontTag, m_font.GetFontTypeC(dpy), NULL ); GetSize(& width1, & height1); @@ -487,7 +484,7 @@ void wxChoice::ChangeBackgroundColour() wxDoChangeBackgroundColour(m_formWidget, m_backgroundColour); wxDoChangeBackgroundColour(m_buttonWidget, m_backgroundColour); wxDoChangeBackgroundColour(m_menuWidget, m_backgroundColour); - size_t i; + unsigned int i; for (i = 0; i < m_noStrings; i++) wxDoChangeBackgroundColour(m_widgetArray[i], m_backgroundColour); } @@ -497,38 +494,38 @@ void wxChoice::ChangeForegroundColour() wxDoChangeForegroundColour(m_formWidget, m_foregroundColour); wxDoChangeForegroundColour(m_buttonWidget, m_foregroundColour); wxDoChangeForegroundColour(m_menuWidget, m_foregroundColour); - size_t i; + unsigned int i; for (i = 0; i < m_noStrings; i++) wxDoChangeForegroundColour(m_widgetArray[i], m_foregroundColour); } -int wxChoice::GetCount() const +unsigned int wxChoice::GetCount() const { return m_noStrings; } -void wxChoice::DoSetItemClientData(int n, void* clientData) +void wxChoice::DoSetItemClientData(unsigned int n, void* clientData) { m_clientDataDict.Set(n, (wxClientData*)clientData, false); } -void* wxChoice::DoGetItemClientData(int n) const +void* wxChoice::DoGetItemClientData(unsigned int n) const { return (void*)m_clientDataDict.Get(n); } -void wxChoice::DoSetItemClientObject(int n, wxClientData* clientData) +void wxChoice::DoSetItemClientObject(unsigned int n, wxClientData* clientData) { // don't delete, wxItemContainer does that for us m_clientDataDict.Set(n, clientData, false); } -wxClientData* wxChoice::DoGetItemClientObject(int n) const +wxClientData* wxChoice::DoGetItemClientObject(unsigned int n) const { return m_clientDataDict.Get(n); } -void wxChoice::SetString(int WXUNUSED(n), const wxString& WXUNUSED(s)) +void wxChoice::SetString(unsigned int WXUNUSED(n), const wxString& WXUNUSED(s)) { wxFAIL_MSG( wxT("wxChoice::SetString not implemented") ); }