X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/789f6795165f19cd16f0ba9f799add6a92720454..04fa04d8067d235ab45b5bc05b65f0679634b541:/src/motif/radiobox.cpp diff --git a/src/motif/radiobox.cpp b/src/motif/radiobox.cpp index 55234658d2..00303033a4 100644 --- a/src/motif/radiobox.cpp +++ b/src/motif/radiobox.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: radiobox.cpp +// Name: src/motif/radiobox.cpp // Purpose: wxRadioBox // Author: Julian Smart // Modified by: @@ -9,22 +9,17 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "radiobox.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" -#ifdef __VMS -#define XtDisplay XTDISPLAY -#endif - -#include "wx/defs.h" +#if wxUSE_RADIOBOX #include "wx/radiobox.h" -#include "wx/utils.h" -#include "wx/arrstr.h" + +#ifndef WX_PRECOMP + #include "wx/utils.h" + #include "wx/arrstr.h" +#endif #ifdef __VMS__ #pragma message disable nosimpint @@ -52,7 +47,7 @@ void wxRadioBox::Init() m_selectedButton = -1; m_noItems = 0; m_noRowsOrCols = 0; - m_majorDim = 0 ; + m_labelWidget = (WXWidget) 0; } bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& title, @@ -63,66 +58,59 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& title, { if( !CreateControl( parent, id, pos, size, style, val, name ) ) return false; + PreCreation(); - m_noItems = n; + m_noItems = (unsigned int)n; m_noRowsOrCols = majorDim; - if (majorDim==0) - m_majorDim = n ; - else - m_majorDim = majorDim ; + SetMajorDim(majorDim == 0 ? n : majorDim, style); Widget parentWidget = (Widget) parent->GetClientWidget(); + Display* dpy = XtDisplay(parentWidget); m_mainWidget = XtVaCreateWidget ("radioboxframe", - xmFrameWidgetClass, parentWidget, - XmNresizeHeight, True, - XmNresizeWidth, True, - NULL); - - wxString label1(wxStripMenuCodes(title)); + xmFrameWidgetClass, parentWidget, + XmNresizeHeight, True, + XmNresizeWidth, True, + NULL); - WXFontType fontType = m_font.GetFontType(XtDisplay(parentWidget)); + wxString label1(GetLabelText(title)); if (!label1.empty()) { wxXmString text(label1); m_labelWidget = (WXWidget) - XtVaCreateManagedWidget( label1.c_str(), + XtVaCreateManagedWidget( label1.mb_str(), #if wxUSE_GADGETS - style & wxCOLOURED ? xmLabelWidgetClass - : xmLabelGadgetClass, - (Widget)m_mainWidget, + style & wxCOLOURED ? xmLabelWidgetClass + : xmLabelGadgetClass, + (Widget)m_mainWidget, #else - xmLabelWidgetClass, - (Widget)m_mainWidget, + xmLabelWidgetClass, (Widget)m_mainWidget, #endif - wxFont::GetFontTag(), fontType, - XmNlabelString, text(), + wxFont::GetFontTag(), m_font.GetFontTypeC(dpy), + XmNlabelString, text(), // XmNframeChildType is not in Motif 1.2, nor in Lesstif, // if it was compiled with 1.2 compatibility // TODO: check this still looks OK for Motif 1.2. #if (XmVersion > 1200) - XmNframeChildType, XmFRAME_TITLE_CHILD, + XmNframeChildType, XmFRAME_TITLE_CHILD, #else - XmNchildType, XmFRAME_TITLE_CHILD, + XmNchildType, XmFRAME_TITLE_CHILD, #endif - XmNchildVerticalAlignment, - XmALIGNMENT_CENTER, - NULL); + XmNchildVerticalAlignment, XmALIGNMENT_CENTER, + NULL); } Arg args[3]; - m_majorDim = (n + m_majorDim - 1) / m_majorDim; - XtSetArg (args[0], XmNorientation, ((style & wxHORIZONTAL) == wxHORIZONTAL ? XmHORIZONTAL : XmVERTICAL)); - XtSetArg (args[1], XmNnumColumns, m_majorDim); + XtSetArg (args[1], XmNnumColumns, GetMajorDim()); XtSetArg (args[2], XmNadjustLast, False); Widget radioBoxWidget = - XmCreateRadioBox ((Widget)m_mainWidget, "radioBoxWidget", args, 3); + XmCreateRadioBox ((Widget)m_mainWidget, wxMOTIF_STR("radioBoxWidget"), args, 3); m_radioButtons.reserve(n); m_radioButtonLabels.reserve(n); @@ -130,34 +118,32 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& title, int i; for (i = 0; i < n; i++) { - wxString str(wxStripMenuCodes(choices[i])); + wxString str(GetLabelText(choices[i])); m_radioButtonLabels.push_back(str); - Widget radioItem = XtVaCreateManagedWidget (wxConstCast(str.c_str(), char), + Widget radioItem = XtVaCreateManagedWidget ( + str.mb_str(), #if wxUSE_GADGETS - xmToggleButtonGadgetClass, radioBoxWidget, + xmToggleButtonGadgetClass, radioBoxWidget, #else - xmToggleButtonWidgetClass, radioBoxWidget, + xmToggleButtonWidgetClass, radioBoxWidget, #endif - wxFont::GetFontTag(), fontType, - NULL); + wxFont::GetFontTag(), m_font.GetFontTypeC(dpy), + NULL); m_radioButtons.push_back((WXWidget)radioItem); XtAddCallback (radioItem, XmNvalueChangedCallback, (XtCallbackProc) wxRadioBoxCallback, (XtPointer) this); } - ChangeFont(false); - SetSelection (0); XtRealizeWidget((Widget)m_mainWidget); XtManageChild (radioBoxWidget); XtManageChild ((Widget)m_mainWidget); + PostCreation(); AttachWidget (parent, m_mainWidget, NULL, pos.x, pos.y, size.x, size.y); - ChangeBackgroundColour(); - return true; } @@ -180,15 +166,15 @@ wxRadioBox::~wxRadioBox() m_mainWidget = (WXWidget) 0; } -void wxRadioBox::SetString(int item, const wxString& label) +void wxRadioBox::SetString(unsigned int item, const wxString& label) { if (!IsValid(item)) return; - Widget widget = (Widget) m_radioButtons[item]; + Widget widget = (Widget)m_radioButtons[item]; if (!label.empty()) { - wxString label1(wxStripMenuCodes(label)); + wxString label1(GetLabelText(label)); wxXmString text( label1 ); m_radioButtonLabels[item] = label1; XtVaSetValues (widget, @@ -198,15 +184,6 @@ void wxRadioBox::SetString(int item, const wxString& label) } } -int wxRadioBox::FindString(const wxString& s) const -{ - int i; - for (i = 0; i < m_noItems; i++) - if (s == m_radioButtonLabels[i]) - return i; - return wxNOT_FOUND; -} - void wxRadioBox::SetSelection(int n) { if (!IsValid(n)) @@ -218,9 +195,8 @@ void wxRadioBox::SetSelection(int n) XmToggleButtonSetState ((Widget) m_radioButtons[n], True, False); - int i; - for (i = 0; i < m_noItems; i++) - if (i != n) + for (unsigned int i = 0; i < m_noItems; i++) + if (i != (unsigned int)n) XmToggleButtonSetState ((Widget) m_radioButtons[i], False, False); m_inSetValue = false; @@ -233,7 +209,7 @@ int wxRadioBox::GetSelection() const } // Find string for position -wxString wxRadioBox::GetString(int n) const +wxString wxRadioBox::GetString(unsigned int n) const { if (!IsValid(n)) return wxEmptyString; @@ -265,7 +241,7 @@ void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags) } // Enable a specific button -bool wxRadioBox::Enable(int n, bool enable) +bool wxRadioBox::Enable(unsigned int n, bool enable) { if (!IsValid(n)) return false; @@ -280,8 +256,7 @@ bool wxRadioBox::Enable(bool enable) if ( !wxControl::Enable(enable) ) return false; - int i; - for (i = 0; i < m_noItems; i++) + for (unsigned int i = 0; i < m_noItems; i++) XtSetSensitive ((Widget) m_radioButtons[i], (Boolean) enable); return true; @@ -294,7 +269,7 @@ bool wxRadioBox::Show(bool show) } // Show a specific button -bool wxRadioBox::Show(int n, bool show) +bool wxRadioBox::Show(unsigned int n, bool show) { // This method isn't complete, and we try do do our best... // It's main purpose isn't for allowing Show/Unshow dynamically, @@ -328,8 +303,8 @@ bool wxRadioBox::Show(int n, bool show) wxString wxRadioBox::GetStringSelection () const { int sel = GetSelection (); - if (sel > -1) - return this->GetString (sel); + if (sel != wxNOT_FOUND) + return this->GetString((unsigned int)sel); else return wxEmptyString; } @@ -356,16 +331,12 @@ void wxRadioBox::ChangeFont(bool keepOriginalSize) { wxWindow::ChangeFont(keepOriginalSize); - WXFontType fontType = - m_font.GetFontType(XtDisplay((Widget) GetTopWidget())); - - int i; - for (i = 0; i < m_noItems; i++) + for (unsigned int i = 0; i < m_noItems; i++) { WXWidget radioButton = m_radioButtons[i]; XtVaSetValues ((Widget) radioButton, - wxFont::GetFontTag(), fontType, + wxFont::GetFontTag(), m_font.GetFontTypeC(XtDisplay((Widget) GetTopWidget())), NULL); } } @@ -374,10 +345,10 @@ void wxRadioBox::ChangeBackgroundColour() { wxWindow::ChangeBackgroundColour(); - int selectPixel = wxBLACK->AllocColour(XtDisplay((Widget)m_mainWidget)); + wxColour colour = *wxBLACK; + WXPixel selectPixel = colour.AllocColour(XtDisplay((Widget)m_mainWidget)); - int i; - for (i = 0; i < m_noItems; i++) + for (unsigned int i = 0; i < m_noItems; i++) { WXWidget radioButton = m_radioButtons[i]; @@ -393,8 +364,7 @@ void wxRadioBox::ChangeForegroundColour() { wxWindow::ChangeForegroundColour(); - int i; - for (i = 0; i < m_noItems; i++) + for (unsigned int i = 0; i < m_noItems; i++) { WXWidget radioButton = m_radioButtons[i]; @@ -402,23 +372,6 @@ void wxRadioBox::ChangeForegroundColour() } } -static int CalcOtherDim( int items, int dim ) -{ - return items / dim + ( items % dim ? 1 : 0 ); -} - -int wxRadioBox::GetRowCount() const -{ - return m_windowStyle & wxRA_SPECIFY_ROWS ? m_noRowsOrCols - : CalcOtherDim( GetCount(), m_noRowsOrCols ); -} - -int wxRadioBox::GetColumnCount() const -{ - return m_windowStyle & wxRA_SPECIFY_COLS ? m_noRowsOrCols - : CalcOtherDim( GetCount(), m_noRowsOrCols ); -} - void wxRadioBoxCallback (Widget w, XtPointer clientData, XmToggleButtonCallbackStruct * cbs) { @@ -427,11 +380,11 @@ void wxRadioBoxCallback (Widget w, XtPointer clientData, wxRadioBox *item = (wxRadioBox *) clientData; int sel = -1; - int i; + unsigned int i; const wxWidgetArray& buttons = item->GetRadioButtons(); for (i = 0; i < item->GetCount(); i++) if (((Widget)buttons[i]) == w) - sel = i; + sel = (int)i; item->SetSel(sel); if (item->InSetValue()) @@ -444,3 +397,4 @@ void wxRadioBoxCallback (Widget w, XtPointer clientData, item->ProcessCommand (event); } +#endif // wxUSE_RADIOBOX