// 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
wxTextCtrl::wxTextCtrl()
{
m_tempCallbackStruct = (void*) NULL;
- m_modified = FALSE;
- m_processedDefault = FALSE;
+ m_modified = false;
+ m_processedDefault = false;
}
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;
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,
{
m_mainWidget = (WXWidget)XtVaCreateManagedWidget
(
- (char*)name.c_str(),
+ wxConstCast(name.c_str(), char),
xmTextWidgetClass,
parentWidget,
NULL
// 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);
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
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
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
void wxTextCtrl::SetInsertionPointEnd()
{
- long pos = GetLastPosition();
+ wxTextPos pos = GetLastPosition();
SetInsertionPoint(pos);
}
return (long) XmTextGetInsertionPosition ((Widget) m_mainWidget);
}
-long wxTextCtrl::GetLastPosition() const
+wxTextPos wxTextCtrl::GetLastPosition() const
{
return (long) XmTextGetLastPosition ((Widget) m_mainWidget);
}
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)
(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
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
{
long i = 0;
int currentLine = 0;
- bool finished = FALSE;
+ bool finished = false;
while (!finished)
{
int ch = s[i];
}
else if (ch == 0)
{
- finished = TRUE;
+ finished = true;
}
else
i++;
if ( y )
*y = yy;
- return TRUE;
+ return true;
}
void wxTextCtrl::ShowPosition(long pos)
// 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)
{
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);
}
}
if (vsb)
DoChangeForegroundColour((WXWidget) vsb, m_foregroundColour);
*/
- DoChangeForegroundColour((WXWidget) parent, m_foregroundColour);
+ wxDoChangeForegroundColour((WXWidget) parent, m_foregroundColour);
}
}
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
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
}
}
+ if(tw->InSetValue())
+ return;
+
// If we're already within an OnChar, return: probably a programmatic
// insertion.
if (tw->m_tempCallbackStruct)