X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/da175b2ce4dc35cc4c0baa8bbdc16bf4de6c7684..48271822ef3d56c8f91af882b68fd1b674a8e8e6:/src/motif/control.cpp diff --git a/src/motif/control.cpp b/src/motif/control.cpp index 38e35741fa..3d6cdf909c 100644 --- a/src/motif/control.cpp +++ b/src/motif/control.cpp @@ -1,52 +1,75 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: control.cpp +// Name: src/motif/control.cpp // Purpose: wxControl class // Author: Julian Smart // Modified by: // Created: 17/09/98 // RCS-ID: $Id$ // Copyright: (c) Julian Smart -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "control.h" -#endif +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" #include "wx/control.h" -#include "wx/utils.h" +#ifndef WX_PRECOMP + #include "wx/utils.h" + #include "wx/panel.h" +#endif + +#ifdef __VMS__ +#pragma message disable nosimpint +#endif #include +#ifdef __VMS__ +#pragma message enable nosimpint +#endif + +#include "wx/motif/private.h" -#if !USE_SHARED_LIBRARY IMPLEMENT_ABSTRACT_CLASS(wxControl, wxWindow) BEGIN_EVENT_TABLE(wxControl, wxWindow) END_EVENT_TABLE() -#endif // Item members wxControl::wxControl() { - m_backgroundColour = *wxWHITE; - m_foregroundColour = *wxBLACK; - m_callback = 0; - m_inSetValue = FALSE; + m_inSetValue = false; +} + +bool wxControl::Create( wxWindow *parent, + wxWindowID id, + const wxPoint &pos, + const wxSize &size, + long style, + const wxValidator& validator, + const wxString &name) +{ + bool ret = wxWindow::Create(parent, id, pos, size, style, name); + +#if wxUSE_VALIDATORS + SetValidator(validator); +#endif + + return ret; } -wxControl::~wxControl() +bool wxControl::CreateControl(wxWindow *parent, + wxWindowID id, + const wxPoint& pos, + const wxSize& size, + long style, + const wxValidator& validator, + const wxString& name) { - // If we delete an item, we should initialize the parent panel, - // because it could now be invalid. -/* - TODO - wxWindow *parent = (wxWindow *)GetParent(); - if (parent) - { - if (parent->GetDefaultItem() == (wxButton*) this) - parent->SetDefaultItem((wxButton*) NULL); - } -*/ + if( !wxControlBase::CreateControl( parent, id, pos, size, style, + validator, name ) ) + return false; + + return true; } void wxControl::SetLabel(const wxString& label) @@ -54,15 +77,13 @@ void wxControl::SetLabel(const wxString& label) Widget widget = (Widget) GetLabelWidget() ; if (!widget) return; - - wxStripMenuCodes((char*) (const char*) label, wxBuffer); - - XmString text = XmStringCreateSimple (wxBuffer); + + wxXmString label_str(GetLabelText(label)); + XtVaSetValues (widget, - XmNlabelString, text, + XmNlabelString, label_str(), XmNlabelType, XmSTRING, NULL); - XmStringFree (text); } wxString wxControl::GetLabel() const @@ -70,64 +91,29 @@ wxString wxControl::GetLabel() const Widget widget = (Widget) GetLabelWidget() ; if (!widget) return wxEmptyString; - - XmString text; - char *s; + + XmString text = NULL; XtVaGetValues (widget, XmNlabelString, &text, NULL); - - if (XmStringGetLtoR (text, XmSTRING_DEFAULT_CHARSET, &s)) - { - wxString str(s); - XtFree (s); - XmStringFree(text); - return str; - } - else - { - // XmStringFree(text); - return wxEmptyString; - } + + return wxXmStringToString( text ); } -void wxControl::ProcessCommand (wxCommandEvent & event) +bool wxControl::ProcessCommand(wxCommandEvent & event) { - // Tries: - // 1) A callback function (to become obsolete) - // 2) OnCommand, starting at this window and working up parent hierarchy - // 3) OnCommand then calls ProcessEvent to search the event tables. - if (m_callback) - { - (void) (*(m_callback)) (*this, event); - } - else - { - GetEventHandler()->OnCommand(*this, event); - } + return GetEventHandler()->ProcessEvent(event); } -void wxControl::Centre (int direction) +wxSize wxControl::DoGetBestSize() const { - int x, y, width, height, panel_width, panel_height, new_x, new_y; - - wxWindow *parent = (wxWindow *) GetParent (); - if (!parent) - return; - - parent->GetClientSize (&panel_width, &panel_height); - GetSize (&width, &height); - GetPosition (&x, &y); - - new_x = x; - new_y = y; - - if (direction & wxHORIZONTAL) - new_x = (int) ((panel_width - width) / 2); - - if (direction & wxVERTICAL) - new_y = (int) ((panel_height - height) / 2); - - SetSize (new_x, new_y, width, height); -} + Widget w = (Widget)GetTopWidget(); + // Do not return any arbitrary default value... + wxASSERT_MSG (w, wxT("DoGetBestSize called before creation")); + + XtWidgetGeometry preferred; + XtQueryGeometry (w, NULL, &preferred); + + return wxSize(preferred.width, preferred.height); +}