X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/44d130a35e7973911686d664bcf275a538990d52..7de24929eb363ba8c52b68a04e20d2774dd0b6b2:/src/motif/textctrl.cpp diff --git a/src/motif/textctrl.cpp b/src/motif/textctrl.cpp index 5e602b8a44..6512988d93 100644 --- a/src/motif/textctrl.cpp +++ b/src/motif/textctrl.cpp @@ -25,9 +25,10 @@ #define XtParent XTPARENT #endif +#include "wx/defs.h" + #include #include -#include #include #include "wx/textctrl.h" @@ -106,24 +107,14 @@ bool wxTextCtrl::Create(wxWindow *parent, const wxValidator& validator, const wxString& name) { + if( !CreateControl( parent, id, pos, size, style, validator, name ) ) + return false; + m_tempCallbackStruct = (void*) NULL; m_modified = FALSE; m_processedDefault = FALSE; - // m_backgroundColour = parent->GetBackgroundColour(); - m_backgroundColour = * wxWHITE; - m_foregroundColour = parent->GetForegroundColour(); - - SetName(name); - SetValidator(validator); - if (parent) - parent->AddChild(this); - m_windowStyle = style; - - if ( id == -1 ) - m_windowId = (int)NewControlId(); - else - m_windowId = id; + m_backgroundColour = *wxWHITE; Widget parentWidget = (Widget) parent->GetClientWidget(); @@ -179,20 +170,13 @@ bool wxTextCtrl::Create(wxWindow *parent, NULL); } - if ( !!value ) + if ( !value.empty() ) { -#if 0 - // don't do this because it is just linking the text to a source - // string which is unsafe. MB - // - XmTextSetString ((Widget) m_mainWidget, (char*)value.c_str()); -#else // do this instead... MB // XtVaSetValues( (Widget) m_mainWidget, XmNvalue, (char *)value.c_str(), NULL); -#endif } // install callbacks @@ -207,11 +191,15 @@ bool wxTextCtrl::Create(wxWindow *parent, XtAddCallback((Widget) m_mainWidget, XmNlosingFocusCallback, (XtCallbackProc)wxTextWindowLoseFocusProc, (XtPointer)this); // font - m_font = parent->GetFont(); ChangeFont(FALSE); + wxSize best = GetBestSize(); + if( size.x != -1 ) best.x = size.x; + if( size.y != -1 ) best.y = size.y; + SetCanAddEventHandler(TRUE); - AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, size.x, size.y); + AttachWidget (parent, m_mainWidget, (WXWidget) NULL, + pos.x, pos.y, best.x, best.y); ChangeBackgroundColour(); @@ -259,18 +247,11 @@ void wxTextCtrl::SetValue(const wxString& value) { m_inSetValue = TRUE; -#if 0 - // don't do this because it is just linking the text to a source - // string which is unsafe. MB - // - XmTextSetString ((Widget) m_mainWidget, (char*)value.c_str()); -#else // do this instead... MB // XtVaSetValues( (Widget) m_mainWidget, XmNvalue, (char *)value.c_str(), NULL); -#endif m_inSetValue = FALSE; } @@ -734,6 +715,38 @@ void wxTextCtrl::DoSendEvents(void *wxcbs, long keycode) m_tempCallbackStruct = NULL; } +wxSize wxDoGetSingleTextCtrlBestSize( Widget textWidget, + const wxWindow* window ) +{ + Dimension xmargin, ymargin, highlight, shadow; + char* value; + + XtVaGetValues( textWidget, + XmNmarginWidth, &xmargin, + XmNmarginHeight, &ymargin, + XmNvalue, &value, + XmNhighlightThickness, &highlight, + XmNshadowThickness, &shadow, + NULL ); + if( !value ) + value = "|"; + + int x, y; + window->GetTextExtent( value, &x, &y ); + + return wxSize( x + 2 * xmargin + 2 * highlight + 2 * shadow, + // MBN: +2 necessary: Lesstif bug or mine? + y + 2 * ymargin + 2 * highlight + 2 * shadow + 2 ); +} + +wxSize wxTextCtrl::DoGetBestSize() const +{ + if( IsSingleLine() ) + return wxDoGetSingleTextCtrlBestSize( (Widget)m_mainWidget, this ); + else + return wxWindow::DoGetBestSize(); +} + // ---------------------------------------------------------------------------- // helpers and Motif callbacks // ----------------------------------------------------------------------------