X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1119b89942642b5ad434cfa213f89bdca25a1bea..dde4740fe1dddbb2738a0afd054f493cb0dd67d1:/src/motif/textctrl.cpp?ds=sidebyside diff --git a/src/motif/textctrl.cpp b/src/motif/textctrl.cpp index 1f616b7201..06e42ff6c7 100644 --- a/src/motif/textctrl.cpp +++ b/src/motif/textctrl.cpp @@ -17,10 +17,13 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "textctrl.h" #endif +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + #ifdef __VMS #define XtParent XTPARENT #endif @@ -94,8 +97,8 @@ static void wxTextWindowActivateProc(Widget w, XtPointer clientData, XmAnyCallba wxTextCtrl::wxTextCtrl() { m_tempCallbackStruct = (void*) NULL; - m_modified = FALSE; - m_processedDefault = FALSE; + m_modified = false; + m_processedDefault = false; } bool wxTextCtrl::Create(wxWindow *parent, @@ -111,8 +114,8 @@ bool wxTextCtrl::Create(wxWindow *parent, return false; m_tempCallbackStruct = (void*) NULL; - m_modified = FALSE; - m_processedDefault = FALSE; + m_modified = false; + m_processedDefault = false; m_backgroundColour = *wxWHITE; @@ -130,7 +133,7 @@ bool wxTextCtrl::Create(wxWindow *parent, XtSetArg (args[1], XmNwordWrap, wantWordWrap ? True : False); m_mainWidget = (WXWidget) XmCreateScrolledText(parentWidget, - (char*)name.c_str(), + wxConstCast(name.c_str(), char), args, 2); XtVaSetValues ((Widget) m_mainWidget, @@ -143,7 +146,7 @@ bool wxTextCtrl::Create(wxWindow *parent, { m_mainWidget = (WXWidget)XtVaCreateManagedWidget ( - (char*)name.c_str(), + wxConstCast(name.c_str(), char), xmTextWidgetClass, parentWidget, NULL @@ -175,10 +178,10 @@ bool wxTextCtrl::Create(wxWindow *parent, // do this instead... MB // XtVaSetValues( (Widget) m_mainWidget, - XmNvalue, (char *)value.c_str(), + XmNvalue, wxConstCast(value.c_str(), char), NULL); } - + // install callbacks XtAddCallback((Widget) m_mainWidget, XmNvalueChangedCallback, (XtCallbackProc)wxTextWindowChangedProc, (XtPointer)this); @@ -191,24 +194,24 @@ bool wxTextCtrl::Create(wxWindow *parent, XtAddCallback((Widget) m_mainWidget, XmNlosingFocusCallback, (XtCallbackProc)wxTextWindowLoseFocusProc, (XtPointer)this); // font - ChangeFont(FALSE); + 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, best.x, best.y); ChangeBackgroundColour(); - return TRUE; + return true; } WXWidget wxTextCtrl::GetTopWidget() const { - return ((m_windowStyle & wxTE_MULTILINE) ? (WXWidget) XtParent((Widget) m_mainWidget) : m_mainWidget); + return IsMultiLine() ? (WXWidget)XtParent((Widget)m_mainWidget) + : m_mainWidget; } wxString wxTextCtrl::GetValue() const @@ -245,15 +248,21 @@ wxString wxTextCtrl::GetValue() const void wxTextCtrl::SetValue(const wxString& value) { - m_inSetValue = TRUE; + m_inSetValue = true; // do this instead... MB // + // with (at least) OpenMotif 2.1 this causes a lot of flicker +#if 0 XtVaSetValues( (Widget) m_mainWidget, - XmNvalue, (char *)value.c_str(), + XmNvalue, wxConstCast(value.c_str(), char), NULL); +#endif + + Clear(); + AppendText( value ); - m_inSetValue = FALSE; + m_inSetValue = false; } // Clipboard operations @@ -307,13 +316,13 @@ void wxTextCtrl::Redo() bool wxTextCtrl::CanUndo() const { // No Undo in Motif - return FALSE; + return false; } bool wxTextCtrl::CanRedo() const { // No Redo in Motif - return FALSE; + return false; } // If the return values from and to are the same, there is no @@ -345,7 +354,7 @@ void wxTextCtrl::SetInsertionPoint(long pos) void wxTextCtrl::SetInsertionPointEnd() { - long pos = GetLastPosition(); + wxTextPos pos = GetLastPosition(); SetInsertionPoint(pos); } @@ -354,7 +363,7 @@ long wxTextCtrl::GetInsertionPoint() const return (long) XmTextGetInsertionPosition ((Widget) m_mainWidget); } -long wxTextCtrl::GetLastPosition() const +wxTextPos wxTextCtrl::GetLastPosition() const { return (long) XmTextGetLastPosition ((Widget) m_mainWidget); } @@ -362,7 +371,7 @@ long wxTextCtrl::GetLastPosition() const void wxTextCtrl::Replace(long from, long to, const wxString& value) { XmTextReplace ((Widget) m_mainWidget, (XmTextPosition) from, (XmTextPosition) to, - (char*) (const char*) value); + wxConstCast(value.c_str(), char)); } void wxTextCtrl::Remove(long from, long to) @@ -381,109 +390,32 @@ void wxTextCtrl::SetSelection(long from, long to) (Time) 0); } -bool wxTextCtrl::LoadFile(const wxString& file) -{ - if (!wxFileExists(file)) - return FALSE; - - m_fileName = file; - - Clear(); - - Widget textWidget = (Widget) m_mainWidget; - FILE *fp = 0; - - struct stat statb; - if ((stat ((char*) (const char*) file, &statb) == -1) || (statb.st_mode & S_IFMT) != S_IFREG || - !(fp = fopen ((char*) (const char*) file, "r"))) - { - return FALSE; - } - else - { - long len = statb.st_size; - char *text; - if (!(text = XtMalloc ((unsigned) (len + 1)))) - { - fclose (fp); - return FALSE; - } - if (fread (text, sizeof (char), len, fp) != (size_t) len) - { - } - fclose (fp); - - text[len] = 0; - XmTextSetString (textWidget, text); - // m_textPosition = len; - XtFree (text); - m_modified = FALSE; - return TRUE; - } -} - -// If file is null, try saved file name first -// Returns TRUE if succeeds. -bool wxTextCtrl::SaveFile(const wxString& file) -{ - wxString theFile(file); - if (theFile == "") - theFile = m_fileName; - if (theFile == "") - return FALSE; - m_fileName = theFile; - - Widget textWidget = (Widget) m_mainWidget; - FILE *fp; - - if (!(fp = fopen ((char*) (const char*) theFile, "w"))) - { - return FALSE; - } - else - { - char *text = XmTextGetString (textWidget); - long len = XmTextGetLastPosition (textWidget); - - if (fwrite (text, sizeof (char), len, fp) != (size_t) len) - { - // Did not write whole file - } - // Make sure newline terminates the file - if (text[len - 1] != '\n') - fputc ('\n', fp); - - fclose (fp); - XtFree (text); - m_modified = FALSE; - return TRUE; - } -} - void wxTextCtrl::WriteText(const wxString& text) { - long textPosition = GetInsertionPoint() + strlen (text); - XmTextInsert ((Widget) m_mainWidget, GetInsertionPoint(), (char*) (const char*) text); + long textPosition = GetInsertionPoint() + text.length(); + XmTextInsert ((Widget) m_mainWidget, GetInsertionPoint(), + wxConstCast(text.c_str(), char)); XtVaSetValues ((Widget) m_mainWidget, XmNcursorPosition, textPosition, NULL); SetInsertionPoint(textPosition); XmTextShowPosition ((Widget) m_mainWidget, textPosition); - m_modified = TRUE; + m_modified = true; } void wxTextCtrl::AppendText(const wxString& text) { - long textPosition = GetLastPosition() + strlen(text); - XmTextInsert ((Widget) m_mainWidget, GetLastPosition(), (char*) (const char*) text); + wxTextPos textPosition = GetLastPosition() + text.length(); + XmTextInsert ((Widget) m_mainWidget, GetLastPosition(), + wxConstCast(text.c_str(), char)); XtVaSetValues ((Widget) m_mainWidget, XmNcursorPosition, textPosition, NULL); SetInsertionPoint(textPosition); XmTextShowPosition ((Widget) m_mainWidget, textPosition); - m_modified = TRUE; + m_modified = true; } void wxTextCtrl::Clear() { XmTextSetString ((Widget) m_mainWidget, ""); - m_modified = FALSE; + m_modified = false; } bool wxTextCtrl::IsModified() const @@ -491,10 +423,15 @@ bool wxTextCtrl::IsModified() const return m_modified; } -// Makes 'unmodified' +// Makes modified or unmodified +void wxTextCtrl::MarkDirty() +{ + m_modified = true; +} + void wxTextCtrl::DiscardEdits() { - m_modified = FALSE; + m_modified = false; } int wxTextCtrl::GetNumberOfLines() const @@ -505,7 +442,7 @@ int wxTextCtrl::GetNumberOfLines() const { long i = 0; int currentLine = 0; - bool finished = FALSE; + bool finished = false; while (!finished) { int ch = s[i]; @@ -516,7 +453,7 @@ int wxTextCtrl::GetNumberOfLines() const } else if (ch == 0) { - finished = TRUE; + finished = true; } else i++; @@ -551,7 +488,7 @@ bool wxTextCtrl::PositionToXY(long pos, long *x, long *y) const if ( y ) *y = yy; - return TRUE; + return true; } void wxTextCtrl::ShowPosition(long pos) @@ -614,7 +551,7 @@ void wxTextCtrl::OnChar(wxKeyEvent& event) // Indicates that we should generate a normal command, because // we're letting default behaviour happen (otherwise it's vetoed // by virtue of overriding OnChar) - m_processedDefault = TRUE; + m_processedDefault = true; if (m_tempCallbackStruct) { @@ -651,12 +588,12 @@ void wxTextCtrl::ChangeBackgroundColour() NULL); wxColour backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE); if (hsb) - DoChangeBackgroundColour((WXWidget) hsb, backgroundColour, TRUE); + wxDoChangeBackgroundColour((WXWidget) hsb, backgroundColour, true); if (vsb) - DoChangeBackgroundColour((WXWidget) vsb, backgroundColour, TRUE); + wxDoChangeBackgroundColour((WXWidget) vsb, backgroundColour, true); // MBN: why change parent background? - // DoChangeBackgroundColour((WXWidget) parent, m_backgroundColour, TRUE); + // DoChangeBackgroundColour((WXWidget) parent, m_backgroundColour, true); } } @@ -681,7 +618,7 @@ void wxTextCtrl::ChangeForegroundColour() if (vsb) DoChangeForegroundColour((WXWidget) vsb, m_foregroundColour); */ - DoChangeForegroundColour((WXWidget) parent, m_foregroundColour); + wxDoChangeForegroundColour((WXWidget) parent, m_foregroundColour); } } @@ -740,7 +677,7 @@ wxSize wxDoGetSingleTextCtrlBestSize( Widget textWidget, return wxSize( x + 2 * xmargin + 2 * highlight + 2 * shadow, // MBN: +2 necessary: Lesstif bug or mine? - y + 2 * ymargin + 2 * highlight + 2 * shadow + 2 ); + y + 2 * ymargin + 2 * highlight + 2 * shadow + 2 ); } wxSize wxTextCtrl::DoGetBestSize() const @@ -819,14 +756,14 @@ wxTextWindowChangedProc (Widget w, XtPointer clientData, XtPointer WXUNUSED(ptr) return; wxTextCtrl *tw = (wxTextCtrl *) clientData; - tw->SetModified(TRUE); + tw->SetModified(true); } static void wxTextWindowModifyProc (Widget WXUNUSED(w), XtPointer clientData, XmTextVerifyCallbackStruct *cbs) { wxTextCtrl *tw = (wxTextCtrl *) clientData; - tw->m_processedDefault = FALSE; + tw->m_processedDefault = false; // First, do some stuff if it's a password control: in this case, we need // to store the string inside the class because GetValue() can't retrieve @@ -846,6 +783,9 @@ wxTextWindowModifyProc (Widget WXUNUSED(w), XtPointer clientData, XmTextVerifyCa } } + if(tw->InSetValue()) + return; + // If we're already within an OnChar, return: probably a programmatic // insertion. if (tw->m_tempCallbackStruct)