X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e702ff0f08a54622a6b0f1e2ec39537b082c3a8e..aa3981f2c66ba95a056a6d0dbf983b2d64bc0d84:/src/motif/textctrl.cpp diff --git a/src/motif/textctrl.cpp b/src/motif/textctrl.cpp index d697c83662..6a2c7a0cb5 100644 --- a/src/motif/textctrl.cpp +++ b/src/motif/textctrl.cpp @@ -83,9 +83,6 @@ static void wxTextWindowActivateProc(Widget w, XtPointer clientData, XmAnyCallba // Text item wxTextCtrl::wxTextCtrl() -#ifndef NO_TEXT_WINDOW_STREAM - : streambuf() -#endif { m_tempCallbackStruct = (void*) NULL; m_modified = FALSE; @@ -171,8 +168,21 @@ bool wxTextCtrl::Create(wxWindow *parent, } if ( !!value ) + { +#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 XtAddCallback((Widget) m_mainWidget, XmNvalueChangedCallback, (XtCallbackProc)wxTextWindowChangedProc, (XtPointer)this); @@ -185,7 +195,7 @@ bool wxTextCtrl::Create(wxWindow *parent, XtAddCallback((Widget) m_mainWidget, XmNlosingFocusCallback, (XtCallbackProc)wxTextWindowLoseFocusProc, (XtPointer)this); // font - m_windowFont = parent->GetFont(); + m_font = parent->GetFont(); ChangeFont(FALSE); SetCanAddEventHandler(TRUE); @@ -237,7 +247,18 @@ 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; } @@ -477,7 +498,6 @@ bool wxTextCtrl::IsModified() const // Makes 'unmodified' void wxTextCtrl::DiscardEdits() { - XmTextSetString ((Widget) m_mainWidget, ""); m_modified = FALSE; } @@ -526,11 +546,16 @@ long wxTextCtrl::XYToPosition(long x, long y) const return r+x; } -void wxTextCtrl::PositionToXY(long pos, long *x, long *y) const +bool wxTextCtrl::PositionToXY(long pos, long *x, long *y) const { Position xx, yy; XmTextPosToXY((Widget) m_mainWidget, pos, &xx, &yy); - *x = xx; *y = yy; + if ( x ) + *x = xx; + if ( y ) + *y = yy; + + return TRUE; } void wxTextCtrl::ShowPosition(long pos) @@ -588,161 +613,6 @@ void wxTextCtrl::OnDropFiles(wxDropFilesEvent& event) } } -// The streambuf code was partly taken from chapter 3 by Jerry Schwarz of -// AT&T's "C++ Lanuage System Release 3.0 Library Manual" - Stein Somers - -//========================================================================= -// Called then the buffer is full (gcc 2.6.3) -// or when "endl" is output (Borland 4.5) -//========================================================================= -// Class declaration using multiple inheritance doesn't work properly for -// Borland. See note in wb_text.h. -#ifndef NO_TEXT_WINDOW_STREAM -int wxTextCtrl::overflow(int c) -{ - // Make sure there is a holding area - if ( allocate()==EOF ) - { - wxError("Streambuf allocation failed","Internal error"); - return EOF; - } - - // Verify that there are no characters in get area - if ( gptr() && gptr() < egptr() ) - { - wxError("wxTextCtrl::overflow: Who's trespassing my get area?","Internal error"); - return EOF; - } - - // Reset get area - setg(0,0,0); - - // Make sure there is a put area - if ( ! pptr() ) - { - /* This doesn't seem to be fatal so comment out error message */ - // wxError("Put area not opened","Internal error"); - setp( base(), base() ); - } - - // Determine how many characters have been inserted but no consumed - int plen = pptr() - pbase(); - - // Now Jerry relies on the fact that the buffer is at least 2 chars - // long, but the holding area "may be as small as 1" ??? - // And we need an additional \0, so let's keep this inefficient but - // safe copy. - - // If c!=EOF, it is a character that must also be comsumed - int xtra = c==EOF? 0 : 1; - - // Write temporary C-string to wxTextWindow - { - char *txt = new char[plen+xtra+1]; - memcpy(txt, pbase(), plen); - txt[plen] = (char)c; // append c - txt[plen+xtra] = '\0'; // append '\0' or overwrite c - // If the put area already contained \0, output will be truncated there - WriteText(txt); - delete[] txt; - } - - // Reset put area - setp(pbase(), epptr()); - -#if defined(__WATCOMC__) - return __NOT_EOF; -#elif defined(zapeof) // HP-UX (all cfront based?) - return zapeof(c); -#else - return c!=EOF ? c : 0; // this should make everybody happy -#endif -} - -//========================================================================= -// called then "endl" is output (gcc) or then explicit sync is done (Borland) -//========================================================================= -int wxTextCtrl::sync() -{ - // Verify that there are no characters in get area - if ( gptr() && gptr() < egptr() ) - { - wxError("Who's trespassing my get area?","Internal error"); - return EOF; - } - - if ( pptr() && pptr() > pbase() ) return overflow(EOF); - - return 0; - /* OLD CODE - int len = pptr() - pbase(); - char *txt = new char[len+1]; - strncpy(txt, pbase(), len); - txt[len] = '\0'; - (*this) << txt; - setp(pbase(), epptr()); - delete[] txt; - return 0; - */ -} - -//========================================================================= -// Should not be called by a "ostream". Used by a "istream" -//========================================================================= -int wxTextCtrl::underflow() -{ - return EOF; -} -#endif - -wxTextCtrl& wxTextCtrl::operator<<(const wxString& s) -{ - AppendText(s); - return *this; -} - -wxTextCtrl& wxTextCtrl::operator<<(float f) -{ - wxString str; - str.Printf("%.2f", f); - AppendText(str); - return *this; -} - -wxTextCtrl& wxTextCtrl::operator<<(double d) -{ - wxString str; - str.Printf("%.2f", d); - AppendText(str); - return *this; -} - -wxTextCtrl& wxTextCtrl::operator<<(int i) -{ - wxString str; - str.Printf("%d", i); - AppendText(str); - return *this; -} - -wxTextCtrl& wxTextCtrl::operator<<(long i) -{ - wxString str; - str.Printf("%ld", i); - AppendText(str); - return *this; -} - -wxTextCtrl& wxTextCtrl::operator<<(const char c) -{ - char buf[2]; - - buf[0] = c; - buf[1] = 0; - AppendText(buf); - return *this; -} - void wxTextCtrl::OnChar(wxKeyEvent& event) { // Indicates that we should generate a normal command, because