X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/674ac8b919eecbc201b5f23b470a567cd0565e10..9bb50fd0b04c824fc7ba14c0dc4ba4a2a9a1e6ad:/src/motif/control.cpp?ds=sidebyside diff --git a/src/motif/control.cpp b/src/motif/control.cpp index 4eb2e47f0a..2f503b86ae 100644 --- a/src/motif/control.cpp +++ b/src/motif/control.cpp @@ -9,10 +9,15 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "control.h" #endif +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#include "wx/defs.h" + #include "wx/control.h" #include "wx/panel.h" #include "wx/utils.h" @@ -25,6 +30,8 @@ #pragma message enable nosimpint #endif +#include "wx/motif/private.h" + IMPLEMENT_ABSTRACT_CLASS(wxControl, wxWindow) BEGIN_EVENT_TABLE(wxControl, wxWindow) @@ -36,14 +43,10 @@ wxControl::wxControl() m_backgroundColour = *wxWHITE; m_foregroundColour = *wxBLACK; -#if WXWIN_COMPATIBILITY - m_callback = 0; -#endif // WXWIN_COMPATIBILITY - - m_inSetValue = FALSE; + m_inSetValue = false; } -wxControl::wxControl( wxWindow *parent, +bool wxControl::Create( wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size, @@ -51,23 +54,32 @@ wxControl::wxControl( wxWindow *parent, const wxValidator& validator, const wxString &name) { - (void)Create(parent, id, pos, size, style, 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. - wxPanel *panel = wxDynamicCast(GetParent(), wxPanel); - if (panel) - { - if (panel->GetDefaultItem() == this) - panel->SetDefaultItem((wxButton*) NULL); - } + if( !wxControlBase::CreateControl( parent, id, pos, size, style, + validator, name ) ) + return false; + + m_backgroundColour = parent->GetBackgroundColour(); + m_foregroundColour = parent->GetForegroundColour(); + m_font = parent->GetFont(); + + return true; } void wxControl::SetLabel(const wxString& label) @@ -76,14 +88,12 @@ void wxControl::SetLabel(const wxString& label) if (!widget) return; - wxStripMenuCodes((char*) (const char*) label, wxBuffer); + wxXmString label_str(wxStripMenuCodes(label)); - XmString text = XmStringCreateSimple (wxBuffer); XtVaSetValues (widget, - XmNlabelString, text, + XmNlabelString, label_str(), XmNlabelType, XmSTRING, NULL); - XmStringFree (text); } wxString wxControl::GetLabel() const @@ -92,37 +102,28 @@ wxString wxControl::GetLabel() const 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 ); } bool wxControl::ProcessCommand(wxCommandEvent & event) { -#if WXWIN_COMPATIBILITY - if ( m_callback ) - { - (void)(*m_callback)(this, event); + return GetEventHandler()->ProcessEvent(event); +} - return TRUE; - } - else -#endif // WXWIN_COMPATIBILITY +wxSize wxControl::DoGetBestSize() const +{ + Widget w = (Widget)GetTopWidget(); - return GetEventHandler()->ProcessEvent(event); + // 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); }