EVT_UPDATE_UI(wxID_REDO, wxTextCtrl::OnUpdateRedo)
END_EVENT_TABLE()
-#ifndef NO_TEXT_WINDOW_STREAM
+#if wxUSE_STD_IOSTREAM
wxTextCtrl::wxTextCtrl() : streambuf()
{
if (allocate()) setp(base(),ebuf());
}
#endif
-#ifndef NO_TEXT_WINDOW_STREAM
+#if wxUSE_STD_IOSTREAM
wxTextCtrl::wxTextCtrl( wxWindow *parent, wxWindowID id, const wxString &value,
const wxPoint &pos, const wxSize &size,
int style, const wxValidator& validator, const wxString &name ) : streambuf()
{
gint len = gtk_text_get_length( GTK_TEXT(m_text) );
char *text = gtk_editable_get_chars( GTK_EDITABLE(m_text), 0, len );
- tmp = wxString(text,*wxConv_current);
+ tmp = wxString(text,*wxConvCurrent);
g_free( text );
}
else
{
- tmp = wxString(gtk_entry_get_text( GTK_ENTRY(m_text) ),*wxConv_current);
+ tmp = wxString(gtk_entry_get_text( GTK_ENTRY(m_text) ),*wxConvCurrent);
}
return tmp;
}
{
wxCHECK_RET( m_text != NULL, _T("invalid text ctrl") );
- if (text.IsNull()) return;
+ if (text.IsEmpty()) return;
+ gtk_signal_disconnect_by_func( GTK_OBJECT(m_text),
+ GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
+
if (m_windowStyle & wxTE_MULTILINE)
{
/* this moves the cursor pos to behind the inserted text */
/* bring entry's cursor uptodate. bug in GTK. */
gtk_entry_set_position( GTK_ENTRY(m_text), GTK_EDITABLE(m_text)->current_pos );
}
+
+ gtk_signal_connect( GTK_OBJECT(m_text), "changed",
+ GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
}
void wxTextCtrl::AppendText( const wxString &text )
{
wxCHECK_RET( m_text != NULL, _T("invalid text ctrl") );
+ if (text.IsEmpty()) return;
+
+ gtk_signal_disconnect_by_func( GTK_OBJECT(m_text),
+ GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
+
if (m_windowStyle & wxTE_MULTILINE)
{
/* we'll insert at the last position */
{
gtk_entry_append_text( GTK_ENTRY(m_text), text.mbc_str() );
}
+
+ gtk_signal_connect( GTK_OBJECT(m_text), "changed",
+ GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
}
bool wxTextCtrl::LoadFile( const wxString &file )
{
- wxCHECK_MSG( m_text != NULL, FALSE, _T("invalid text ctrl") );
+ wxCHECK_MSG( m_text != NULL, FALSE, _T("invalid text ctrl") );
- if (!wxFileExists(file)) return FALSE;
+ if (!wxFileExists(file)) return FALSE;
- Clear();
+ Clear();
- FILE *fp = (FILE*) NULL;
- struct stat statb;
+ FILE *fp = (FILE*) NULL;
+ struct stat statb;
- if ((stat (FNSTRINGCAST file.fn_str(), &statb) == -1) || (statb.st_mode & S_IFMT) != S_IFREG ||
- !(fp = fopen (FNSTRINGCAST file.fn_str(), "r")))
- {
- return FALSE;
- }
- else
- {
- gint len = statb.st_size;
- char *text;
- if (!(text = (char*)malloc ((unsigned) (len + 1))))
+ if ((stat (FNSTRINGCAST file.fn_str(), &statb) == -1) || (statb.st_mode & S_IFMT) != S_IFREG ||
+ !(fp = fopen (FNSTRINGCAST file.fn_str(), "r")))
{
- fclose (fp);
- return FALSE;
+ return FALSE;
}
- if (fread (text, sizeof (char), len, fp) != (size_t) len)
+ else
{
- }
- fclose (fp);
+ gint len = statb.st_size;
+ char *text;
+ if (!(text = (char*)malloc ((unsigned) (len + 1))))
+ {
+ fclose (fp);
+ return FALSE;
+ }
+ if (fread (text, sizeof (char), len, fp) != (size_t) len)
+ {
+ }
+ fclose (fp);
- text[len] = 0;
+ text[len] = 0;
- if (m_windowStyle & wxTE_MULTILINE)
- {
- gint pos = 0;
- gtk_editable_insert_text( GTK_EDITABLE(m_text), text, len, &pos );
- }
- else
- {
- gtk_entry_set_text( GTK_ENTRY(m_text), text );
+ gtk_signal_disconnect_by_func( GTK_OBJECT(m_text),
+ GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
+
+ if (m_windowStyle & wxTE_MULTILINE)
+ {
+ gint pos = 0;
+ gtk_editable_insert_text( GTK_EDITABLE(m_text), text, len, &pos );
+ }
+ else
+ {
+ gtk_entry_set_text( GTK_ENTRY(m_text), text );
+ }
+
+ gtk_signal_connect( GTK_OBJECT(m_text), "changed",
+ GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
+
+ free (text);
+ m_modified = FALSE;
+ return TRUE;
}
-
- free (text);
- m_modified = FALSE;
- return TRUE;
- }
- return FALSE;
+ return FALSE;
}
bool wxTextCtrl::SaveFile( const wxString &file )
{
- wxCHECK_MSG( m_text != NULL, FALSE, _T("invalid text ctrl") );
+ wxCHECK_MSG( m_text != NULL, FALSE, _T("invalid text ctrl") );
- if (file == _T("")) return FALSE;
+ if (file == _T("")) return FALSE;
- FILE *fp;
+ FILE *fp;
- if (!(fp = fopen (FNSTRINGCAST file.fn_str(), "w")))
+ if (!(fp = fopen (FNSTRINGCAST file.fn_str(), "w")))
{
- return FALSE;
+ return FALSE;
}
- else
+ else
{
char *text = (char*) NULL;
gint len = 0;
if (m_windowStyle & wxTE_MULTILINE)
{
- len = gtk_text_get_length( GTK_TEXT(m_text) );
- text = gtk_editable_get_chars( GTK_EDITABLE(m_text), 0, len );
+ len = gtk_text_get_length( GTK_TEXT(m_text) );
+ text = gtk_editable_get_chars( GTK_EDITABLE(m_text), 0, len );
}
else
{
- text = gtk_entry_get_text( GTK_ENTRY(m_text) );
+ text = gtk_entry_get_text( GTK_ENTRY(m_text) );
}
if (fwrite (text, sizeof (char), len, fp) != (size_t) len)
return TRUE;
}
- return TRUE;
+ return TRUE;
}
wxString wxTextCtrl::GetLineText( long lineNo ) const
{
wxCHECK_RET( m_text != NULL, _T("invalid text ctrl") );
+ gtk_signal_disconnect_by_func( GTK_OBJECT(m_text),
+ GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
+
gtk_editable_delete_text( GTK_EDITABLE(m_text), (gint)from, (gint)to );
+
+ gtk_signal_connect( GTK_OBJECT(m_text), "changed",
+ GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
}
void wxTextCtrl::Replace( long from, long to, const wxString &value )
{
wxCHECK_RET( m_text != NULL, _T("invalid text ctrl") );
+ gtk_signal_disconnect_by_func( GTK_OBJECT(m_text),
+ GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
+
gtk_editable_delete_text( GTK_EDITABLE(m_text), (gint)from, (gint)to );
- if (value.IsNull()) return;
- gint pos = (gint)from;
+
+ if (!value.IsEmpty())
+ {
+ gint pos = (gint)from;
#if wxUSE_UNICODE
- wxWX2MBbuf buf = value.mbc_str();
- gtk_editable_insert_text( GTK_EDITABLE(m_text), buf, strlen(buf), &pos );
+ wxWX2MBbuf buf = value.mbc_str();
+ gtk_editable_insert_text( GTK_EDITABLE(m_text), buf, strlen(buf), &pos );
#else
- gtk_editable_insert_text( GTK_EDITABLE(m_text), value, value.Length(), &pos );
+ gtk_editable_insert_text( GTK_EDITABLE(m_text), value, value.Length(), &pos );
#endif
+ }
+
+ gtk_signal_connect( GTK_OBJECT(m_text), "changed",
+ GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
}
void wxTextCtrl::Cut()
{
wxCHECK_RET( m_text != NULL, _T("invalid text ctrl") );
+ gtk_signal_disconnect_by_func( GTK_OBJECT(m_text),
+ GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
+
#if (GTK_MINOR_VERSION > 0)
gtk_editable_cut_clipboard( GTK_EDITABLE(m_text) );
#else
gtk_editable_cut_clipboard( GTK_EDITABLE(m_text), 0 );
#endif
+
+ gtk_signal_connect( GTK_OBJECT(m_text), "changed",
+ GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
}
void wxTextCtrl::Copy()
{
wxCHECK_RET( m_text != NULL, _T("invalid text ctrl") );
+ gtk_signal_disconnect_by_func( GTK_OBJECT(m_text),
+ GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
+
#if (GTK_MINOR_VERSION > 0)
gtk_editable_paste_clipboard( GTK_EDITABLE(m_text) );
#else
gtk_editable_paste_clipboard( GTK_EDITABLE(m_text), 0 );
#endif
+
+ gtk_signal_connect( GTK_OBJECT(m_text), "changed",
+ GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
}
bool wxTextCtrl::CanCopy() const
key_event.Skip();
}
-#ifndef NO_TEXT_WINDOW_STREAM
+#if wxUSE_STD_IOSTREAM
int wxTextCtrl::overflow( int WXUNUSED(c) )
{
int len = pptr() - pbase();
{
return EOF;
}
+#endif
wxTextCtrl& wxTextCtrl::operator<<(const wxString& s)
{
AppendText(buf);
return *this;
}
-#endif
GtkWidget* wxTextCtrl::GetConnectWidget()
{