]> git.saurik.com Git - wxWidgets.git/blame - src/gtk1/textctrl.cpp
wxFrame size bug
[wxWidgets.git] / src / gtk1 / textctrl.cpp
CommitLineData
c801d85f
KB
1/////////////////////////////////////////////////////////////////////////////
2// Name: textctrl.cpp
3// Purpose:
4// Author: Robert Roebling
f96aa4d9 5// Id: $Id$
a81258be 6// Copyright: (c) 1998 Robert Roebling, Vadim Zeitlin
13289f04 7// Licence: wxWindows licence
c801d85f
KB
8/////////////////////////////////////////////////////////////////////////////
9
10#ifdef __GNUG__
11#pragma implementation "textctrl.h"
12#endif
13
14#include "wx/textctrl.h"
15#include "wx/utils.h"
1a5a8367 16#include <wx/intl.h>
c801d85f 17
a81258be
RR
18#include <sys/types.h>
19#include <sys/stat.h>
20#include <ctype.h>
21
c801d85f 22//-----------------------------------------------------------------------------
2f2aa628 23// "changed"
c801d85f
KB
24//-----------------------------------------------------------------------------
25
6de97a3b 26static void gtk_text_changed_callback( GtkWidget *WXUNUSED(widget), wxTextCtrl *win )
484e45bf 27{
9406d962 28 win->SetModified();
903f689b
RR
29
30 wxCommandEvent event( wxEVT_COMMAND_TEXT_UPDATED, win->m_windowId );
31 wxString val( win->GetValue() );
32 if (!val.IsNull()) event.m_commandString = WXSTRINGCAST val;
33 event.SetEventObject( win );
34 win->GetEventHandler()->ProcessEvent( event );
6de97a3b 35}
112892b9 36
2f2aa628
RR
37//-----------------------------------------------------------------------------
38// wxTextCtrl
39//-----------------------------------------------------------------------------
40
41IMPLEMENT_DYNAMIC_CLASS(wxTextCtrl,wxControl)
42
c801d85f 43BEGIN_EVENT_TABLE(wxTextCtrl, wxControl)
903f689b 44 EVT_CHAR(wxTextCtrl::OnChar)
c801d85f
KB
45END_EVENT_TABLE()
46
03f38c58 47wxTextCtrl::wxTextCtrl() : streambuf()
c801d85f 48{
6de97a3b 49 if (allocate()) setp(base(),ebuf());
13289f04 50
112892b9 51 m_modified = FALSE;
6de97a3b 52}
c801d85f 53
debe6624 54wxTextCtrl::wxTextCtrl( wxWindow *parent, wxWindowID id, const wxString &value,
484e45bf 55 const wxPoint &pos, const wxSize &size,
6de97a3b 56 int style, const wxValidator& validator, const wxString &name ) : streambuf()
c801d85f 57{
6de97a3b 58 if (allocate()) setp(base(),ebuf());
13289f04 59
112892b9 60 m_modified = FALSE;
6de97a3b
RR
61 Create( parent, id, value, pos, size, style, validator, name );
62}
c801d85f 63
debe6624 64bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value,
484e45bf 65 const wxPoint &pos, const wxSize &size,
6de97a3b 66 int style, const wxValidator& validator, const wxString &name )
c801d85f
KB
67{
68 m_needParent = TRUE;
484e45bf 69
c801d85f 70 PreCreation( parent, id, pos, size, style, name );
484e45bf 71
6de97a3b
RR
72 SetValidator( validator );
73
13289f04 74 bool bMultiLine = (style & wxTE_MULTILINE) != 0;
5796ed40 75 if ( bMultiLine )
47908e25 76 {
13289f04
VZ
77 // a multi-line edit control: create a vertical scrollbar by default and
78 // horizontal if requested
79 bool bHasHScrollbar = (style & wxHSCROLL) != 0;
80
81 // create our control...
c67daf87 82 m_text = gtk_text_new( (GtkAdjustment *) NULL, (GtkAdjustment *) NULL );
13289f04
VZ
83
84 // ... and put into the upper left hand corner of the table
85 m_widget = gtk_table_new(bHasHScrollbar ? 2 : 1, 2, FALSE);
f5368809 86 gtk_table_attach( GTK_TABLE(m_widget), m_text, 0, 1, 0, 1,
41dee9d0 87 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK),
f5368809
RR
88 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK),
89 0, 0);
13289f04
VZ
90
91 // put the horizontal scrollbar in the lower left hand corner
903f689b
RR
92 if (bHasHScrollbar)
93 {
13289f04
VZ
94 GtkWidget *hscrollbar = gtk_hscrollbar_new(GTK_TEXT(m_text)->hadj);
95 gtk_table_attach(GTK_TABLE(m_widget), hscrollbar, 0, 1, 1, 2,
f5368809 96 (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
13289f04
VZ
97 GTK_FILL,
98 0, 0);
99 gtk_widget_show(hscrollbar);
100 }
101
102 // finally, put the vertical scrollbar in the upper right corner
103 GtkWidget *vscrollbar = gtk_vscrollbar_new(GTK_TEXT(m_text)->vadj);
104 gtk_table_attach(GTK_TABLE(m_widget), vscrollbar, 1, 2, 0, 1,
105 GTK_FILL,
f5368809 106 (GtkAttachOptions)(GTK_EXPAND | GTK_FILL | GTK_SHRINK),
13289f04 107 0, 0);
903f689b 108 gtk_widget_show( vscrollbar );
13289f04 109 }
903f689b
RR
110 else
111 {
13289f04
VZ
112 // a single-line text control: no need for scrollbars
113 m_widget =
114 m_text = gtk_entry_new();
115 }
484e45bf 116
c801d85f
KB
117 wxSize newSize = size;
118 if (newSize.x == -1) newSize.x = 80;
119 if (newSize.y == -1) newSize.y = 26;
120 SetSize( newSize.x, newSize.y );
484e45bf 121
6ca41e57
RR
122 m_parent->AddChild( this );
123
124 (m_parent->m_insertCallback)( m_parent, this );
125
c801d85f 126 PostCreation();
484e45bf 127
903f689b
RR
128 if (bMultiLine)
129 {
13289f04
VZ
130 gtk_widget_realize(m_text);
131 gtk_widget_show(m_text);
132 }
133
484e45bf 134 // we want to be notified about text changes
13289f04 135 gtk_signal_connect(GTK_OBJECT(m_text), "changed",
484e45bf
VZ
136 GTK_SIGNAL_FUNC(gtk_text_changed_callback),
137 (gpointer)this);
138
7f4dc78d
RR
139 if (!value.IsNull())
140 {
141 gint tmp = 0;
13289f04 142 gtk_editable_insert_text( GTK_EDITABLE(m_text), value, value.Length(), &tmp );
6ca41e57 143 SetInsertionPointEnd();
6de97a3b 144 }
484e45bf 145
5796ed40 146 if (style & wxTE_READONLY)
112892b9
RR
147 {
148 }
149 else
150 {
903f689b 151 if (bMultiLine)
13289f04 152 gtk_text_set_editable( GTK_TEXT(m_text), 1 );
6de97a3b 153 }
484e45bf 154
c801d85f 155 Show( TRUE );
484e45bf 156
f96aa4d9 157 SetBackgroundColour( parent->GetBackgroundColour() );
58614078 158 SetForegroundColour( parent->GetForegroundColour() );
f96aa4d9 159
c801d85f 160 return TRUE;
6de97a3b 161}
c801d85f 162
03f38c58 163wxString wxTextCtrl::GetValue() const
c801d85f 164{
a81258be
RR
165 wxCHECK_MSG( m_text != NULL, "", "invalid text ctrl" );
166
c801d85f
KB
167 wxString tmp;
168 if (m_windowStyle & wxTE_MULTILINE)
169 {
13289f04 170 gint len = gtk_text_get_length( GTK_TEXT(m_text) );
a81258be
RR
171 char *text = gtk_editable_get_chars( GTK_EDITABLE(m_text), 0, len );
172 tmp = text;
173 g_free( text );
c801d85f
KB
174 }
175 else
176 {
13289f04 177 tmp = gtk_entry_get_text( GTK_ENTRY(m_text) );
6de97a3b 178 }
c801d85f 179 return tmp;
6de97a3b 180}
c801d85f
KB
181
182void wxTextCtrl::SetValue( const wxString &value )
183{
f96aa4d9
RR
184 wxCHECK_RET( m_text != NULL, "invalid text ctrl" );
185
c801d85f
KB
186 wxString tmp = "";
187 if (!value.IsNull()) tmp = value;
188 if (m_windowStyle & wxTE_MULTILINE)
189 {
13289f04
VZ
190 gint len = gtk_text_get_length( GTK_TEXT(m_text) );
191 gtk_editable_delete_text( GTK_EDITABLE(m_text), 0, len );
c801d85f 192 len = 0;
13289f04 193 gtk_editable_insert_text( GTK_EDITABLE(m_text), tmp, tmp.Length(), &len );
c801d85f
KB
194 }
195 else
196 {
13289f04 197 gtk_entry_set_text( GTK_ENTRY(m_text), tmp );
6de97a3b
RR
198 }
199}
c801d85f
KB
200
201void wxTextCtrl::WriteText( const wxString &text )
202{
f96aa4d9
RR
203 wxCHECK_RET( m_text != NULL, "invalid text ctrl" );
204
c801d85f 205 if (text.IsNull()) return;
484e45bf 206
c801d85f
KB
207 if (m_windowStyle & wxTE_MULTILINE)
208 {
13289f04
VZ
209 gint len = gtk_text_get_length( GTK_TEXT(m_text) );
210 gtk_editable_insert_text( GTK_EDITABLE(m_text), text, text.Length(), &len );
c801d85f
KB
211 }
212 else
213 {
13289f04 214 gtk_entry_append_text( GTK_ENTRY(m_text), text );
6de97a3b
RR
215 }
216}
c801d85f 217
a81258be 218bool wxTextCtrl::LoadFile( const wxString &file )
c801d85f 219{
a81258be
RR
220 wxCHECK_MSG( m_text != NULL, FALSE, "invalid text ctrl" );
221
222 if (!wxFileExists(file)) return FALSE;
2ad3a34e 223
a81258be
RR
224 Clear();
225
226 FILE *fp = NULL;
227 struct stat statb;
228
229 if ((stat ((char*) (const char*) file, &statb) == -1) || (statb.st_mode & S_IFMT) != S_IFREG ||
230 !(fp = fopen ((char*) (const char*) file, "r")))
231 {
232 return FALSE;
233 }
234 else
235 {
236 gint len = statb.st_size;
237 char *text;
238 if (!(text = (char*)malloc ((unsigned) (len + 1))))
239 {
240 fclose (fp);
241 return FALSE;
242 }
243 if (fread (text, sizeof (char), len, fp) != (size_t) len)
244 {
245 }
246 fclose (fp);
247
248 text[len] = 0;
249
250 if (m_windowStyle & wxTE_MULTILINE)
251 {
252 gtk_editable_insert_text( GTK_EDITABLE(m_text), text, 0, &len );
253 }
254 else
255 {
256 gtk_entry_set_text( GTK_ENTRY(m_text), text );
257 }
258
259 free (text);
260 m_modified = FALSE;
261 return TRUE;
262 }
112892b9 263 return FALSE;
6de97a3b 264}
c801d85f 265
a81258be 266bool wxTextCtrl::SaveFile( const wxString &file )
c801d85f 267{
a81258be
RR
268 wxCHECK_MSG( m_text != NULL, FALSE, "invalid text ctrl" );
269
270 if (file == "") return FALSE;
271
272 FILE *fp;
2ad3a34e 273
a81258be
RR
274 if (!(fp = fopen ((char*) (const char*) file, "w")))
275 {
276 return FALSE;
277 }
278 else
279 {
280 char *text = NULL;
281 gint len = 0;
282
283 if (m_windowStyle & wxTE_MULTILINE)
284 {
285 len = gtk_text_get_length( GTK_TEXT(m_text) );
286 text = gtk_editable_get_chars( GTK_EDITABLE(m_text), 0, len );
287 }
288 else
289 {
290 text = gtk_entry_get_text( GTK_ENTRY(m_text) );
291 }
292
293 if (fwrite (text, sizeof (char), len, fp) != (size_t) len)
294 {
295 // Did not write whole file
296 }
297
298 // Make sure newline terminates the file
299 if (text[len - 1] != '\n')
300 fputc ('\n', fp);
301
302 fclose (fp);
303
304 if (m_windowStyle & wxTE_MULTILINE) g_free( text );
305
306 m_modified = FALSE;
307 return TRUE;
308 }
309
310 return TRUE;
6de97a3b 311}
c801d85f 312
debe6624 313wxString wxTextCtrl::GetLineText( long lineNo ) const
c801d85f 314{
a81258be
RR
315 if (m_windowStyle & wxTE_MULTILINE)
316 {
317 gint len = gtk_text_get_length( GTK_TEXT(m_text) );
318 char *text = gtk_editable_get_chars( GTK_EDITABLE(m_text), 0, len );
319
320 if (text)
321 {
322 wxString buf("");
323 long i;
324 int currentLine = 0;
325 for (i = 0; currentLine != lineNo && text[i]; i++ )
326 if (text[i] == '\n')
327 currentLine++;
328 // Now get the text
329 int j;
330 for (j = 0; text[i] && text[i] != '\n'; i++, j++ )
331 buf += text[i];
332
333 g_free( text );
334 return buf;
335 }
336 else
337 return wxEmptyString;
338 }
339 else
340 {
341 if (lineNo == 0) return GetValue();
342 return wxEmptyString;
343 }
6de97a3b 344}
c801d85f 345
a81258be
RR
346void wxTextCtrl::OnDropFiles( wxDropFilesEvent &WXUNUSED(event) )
347{
c67d8618 348 wxFAIL_MSG( "wxTextCtrl::OnDropFiles not implemented" );
a81258be 349}
112892b9 350
a81258be 351long wxTextCtrl::PositionToXY( long WXUNUSED(pos), long *WXUNUSED(x), long *WXUNUSED(y) ) const
c801d85f 352{
a81258be
RR
353 wxFAIL_MSG( "wxTextCtrl::XYToPosition not implemented" );
354
355 return 0;
6de97a3b 356}
c801d85f 357
a81258be 358long wxTextCtrl::XYToPosition( long WXUNUSED(x), long WXUNUSED(y) ) const
c801d85f 359{
a81258be
RR
360 wxFAIL_MSG( "wxTextCtrl::XYToPosition not implemented" );
361
362 return 0;
6de97a3b 363}
c801d85f 364
a81258be 365int wxTextCtrl::GetLineLength(long lineNo) const
c801d85f 366{
a81258be
RR
367 wxString str = GetLineText (lineNo);
368 return (int) str.Length();
6de97a3b 369}
c801d85f 370
a81258be 371int wxTextCtrl::GetNumberOfLines() const
c801d85f 372{
a81258be
RR
373 if (m_windowStyle & wxTE_MULTILINE)
374 {
375 gint len = gtk_text_get_length( GTK_TEXT(m_text) );
376 char *text = gtk_editable_get_chars( GTK_EDITABLE(m_text), 0, len );
377
378 if (text)
379 {
380 int currentLine = 0;
381 for (int i = 0; i < len; i++ )
382 if (text[i] == '\n')
383 currentLine++;
384
385 g_free( text );
386 return currentLine;
387 }
388 else
389 return 0;
390 }
391 else
392 {
393 return 1;
394 }
6de97a3b 395}
c801d85f 396
debe6624 397void wxTextCtrl::SetInsertionPoint( long pos )
c801d85f 398{
a81258be
RR
399 wxCHECK_RET( m_text != NULL, "invalid text ctrl" );
400
c801d85f
KB
401 int tmp = (int) pos;
402 if (m_windowStyle & wxTE_MULTILINE)
13289f04 403 gtk_text_set_point( GTK_TEXT(m_text), tmp );
c801d85f 404 else
13289f04 405 gtk_entry_set_position( GTK_ENTRY(m_text), tmp );
6de97a3b 406}
c801d85f 407
03f38c58 408void wxTextCtrl::SetInsertionPointEnd()
c801d85f 409{
f96aa4d9
RR
410 wxCHECK_RET( m_text != NULL, "invalid text ctrl" );
411
c801d85f
KB
412 int pos = 0;
413 if (m_windowStyle & wxTE_MULTILINE)
13289f04 414 pos = gtk_text_get_length( GTK_TEXT(m_text) );
c801d85f 415 else
13289f04 416 pos = GTK_ENTRY(m_text)->text_length;
605c9c83 417 SetInsertionPoint((pos-1)>0 ? (pos-1):0);
6de97a3b 418}
c801d85f 419
debe6624 420void wxTextCtrl::SetEditable( bool editable )
c801d85f 421{
f96aa4d9
RR
422 wxCHECK_RET( m_text != NULL, "invalid text ctrl" );
423
c801d85f 424 if (m_windowStyle & wxTE_MULTILINE)
13289f04 425 gtk_text_set_editable( GTK_TEXT(m_text), editable );
c801d85f 426 else
13289f04 427 gtk_entry_set_editable( GTK_ENTRY(m_text), editable );
6de97a3b 428}
c801d85f 429
debe6624 430void wxTextCtrl::SetSelection( long from, long to )
c801d85f 431{
f96aa4d9
RR
432 wxCHECK_RET( m_text != NULL, "invalid text ctrl" );
433
13289f04 434 gtk_editable_select_region( GTK_EDITABLE(m_text), (gint)from, (gint)to );
6de97a3b 435}
c801d85f 436
debe6624 437void wxTextCtrl::ShowPosition( long WXUNUSED(pos) )
c801d85f 438{
f96aa4d9 439 wxFAIL_MSG( "wxTextCtrl::ShowPosition not implemented" );
6de97a3b 440}
c801d85f 441
03f38c58 442long wxTextCtrl::GetInsertionPoint() const
c801d85f 443{
f96aa4d9
RR
444 wxCHECK_MSG( m_text != NULL, 0, "invalid text ctrl" );
445
13289f04 446 return (long) GTK_EDITABLE(m_text)->current_pos;
6de97a3b 447}
c801d85f 448
03f38c58 449long wxTextCtrl::GetLastPosition() const
c801d85f 450{
f96aa4d9
RR
451 wxCHECK_MSG( m_text != NULL, 0, "invalid text ctrl" );
452
c801d85f
KB
453 int pos = 0;
454 if (m_windowStyle & wxTE_MULTILINE)
13289f04 455 pos = gtk_text_get_length( GTK_TEXT(m_text) );
c801d85f 456 else
13289f04 457 pos = GTK_ENTRY(m_text)->text_length;
c801d85f 458 return (long)pos-1;
6de97a3b 459}
c801d85f 460
debe6624 461void wxTextCtrl::Remove( long from, long to )
c801d85f 462{
f96aa4d9
RR
463 wxCHECK_RET( m_text != NULL, "invalid text ctrl" );
464
13289f04 465 gtk_editable_delete_text( GTK_EDITABLE(m_text), (gint)from, (gint)to );
6de97a3b 466}
c801d85f 467
debe6624 468void wxTextCtrl::Replace( long from, long to, const wxString &value )
c801d85f 469{
f96aa4d9
RR
470 wxCHECK_RET( m_text != NULL, "invalid text ctrl" );
471
13289f04 472 gtk_editable_delete_text( GTK_EDITABLE(m_text), (gint)from, (gint)to );
c801d85f
KB
473 if (value.IsNull()) return;
474 gint pos = (gint)to;
13289f04 475 gtk_editable_insert_text( GTK_EDITABLE(m_text), value, value.Length(), &pos );
6de97a3b 476}
c801d85f 477
03f38c58 478void wxTextCtrl::Cut()
c801d85f 479{
f96aa4d9
RR
480 wxCHECK_RET( m_text != NULL, "invalid text ctrl" );
481
75ed1d15
GL
482#if (GTK_MINOR_VERSION == 1)
483 gtk_editable_cut_clipboard( GTK_EDITABLE(m_text) );
484#else
13289f04 485 gtk_editable_cut_clipboard( GTK_EDITABLE(m_text), 0 );
75ed1d15 486#endif
6de97a3b 487}
c801d85f 488
03f38c58 489void wxTextCtrl::Copy()
c801d85f 490{
f96aa4d9
RR
491 wxCHECK_RET( m_text != NULL, "invalid text ctrl" );
492
75ed1d15
GL
493#if (GTK_MINOR_VERSION == 1)
494 gtk_editable_copy_clipboard( GTK_EDITABLE(m_text) );
495#else
13289f04 496 gtk_editable_copy_clipboard( GTK_EDITABLE(m_text), 0 );
75ed1d15 497#endif
6de97a3b 498}
c801d85f 499
03f38c58 500void wxTextCtrl::Paste()
c801d85f 501{
f96aa4d9
RR
502 wxCHECK_RET( m_text != NULL, "invalid text ctrl" );
503
75ed1d15
GL
504#if (GTK_MINOR_VERSION == 1)
505 gtk_editable_paste_clipboard( GTK_EDITABLE(m_text) );
506#else
13289f04 507 gtk_editable_paste_clipboard( GTK_EDITABLE(m_text), 0 );
75ed1d15 508#endif
6de97a3b 509}
c801d85f 510
03f38c58 511void wxTextCtrl::Clear()
c801d85f
KB
512{
513 SetValue( "" );
6de97a3b 514}
c801d85f 515
903f689b 516void wxTextCtrl::OnChar( wxKeyEvent &key_event )
c801d85f 517{
903f689b
RR
518 if ((key_event.KeyCode() == WXK_RETURN) && (m_windowStyle & wxPROCESS_ENTER))
519 {
520 wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, m_windowId);
521 event.SetEventObject(this);
903f689b
RR
522 if (GetEventHandler()->ProcessEvent(event)) return;
523 }
524 else if (key_event.KeyCode() == WXK_TAB)
525 {
526 wxNavigationKeyEvent event;
527 event.SetDirection( key_event.m_shiftDown );
528 event.SetWindowChange(FALSE);
529 event.SetEventObject(this);
530
531 if (GetEventHandler()->ProcessEvent(event)) return;
532 }
533 key_event.Skip();
6de97a3b 534}
c801d85f 535
46dc76ba 536int wxTextCtrl::overflow( int WXUNUSED(c) )
c801d85f 537{
c801d85f
KB
538 int len = pptr() - pbase();
539 char *txt = new char[len+1];
540 strncpy(txt, pbase(), len);
541 txt[len] = '\0';
542 (*this) << txt;
543 setp(pbase(), epptr());
544 delete[] txt;
545 return EOF;
6de97a3b 546}
c801d85f 547
03f38c58 548int wxTextCtrl::sync()
c801d85f 549{
c801d85f
KB
550 int len = pptr() - pbase();
551 char *txt = new char[len+1];
552 strncpy(txt, pbase(), len);
553 txt[len] = '\0';
554 (*this) << txt;
555 setp(pbase(), epptr());
556 delete[] txt;
557 return 0;
6de97a3b 558}
c801d85f 559
03f38c58 560int wxTextCtrl::underflow()
c801d85f
KB
561{
562 return EOF;
6de97a3b 563}
c801d85f
KB
564
565wxTextCtrl& wxTextCtrl::operator<<(const wxString& s)
566{
567 WriteText(s);
568 return *this;
569}
570
debe6624 571wxTextCtrl& wxTextCtrl::operator<<(float f)
c801d85f
KB
572{
573 static char buf[100];
574 sprintf(buf, "%.2f", f);
575 WriteText(buf);
576 return *this;
577}
578
debe6624 579wxTextCtrl& wxTextCtrl::operator<<(double d)
c801d85f
KB
580{
581 static char buf[100];
582 sprintf(buf, "%.2f", d);
583 WriteText(buf);
584 return *this;
585}
586
debe6624 587wxTextCtrl& wxTextCtrl::operator<<(int i)
c801d85f
KB
588{
589 static char buf[100];
590 sprintf(buf, "%i", i);
591 WriteText(buf);
592 return *this;
593}
594
debe6624 595wxTextCtrl& wxTextCtrl::operator<<(long i)
c801d85f
KB
596{
597 static char buf[100];
598 sprintf(buf, "%ld", i);
599 WriteText(buf);
600 return *this;
601}
602
603wxTextCtrl& wxTextCtrl::operator<<(const char c)
604{
605 char buf[2];
606
607 buf[0] = c;
608 buf[1] = 0;
609 WriteText(buf);
610 return *this;
611}
612
03f38c58 613GtkWidget* wxTextCtrl::GetConnectWidget()
e3e65dac
RR
614{
615 return GTK_WIDGET(m_text);
6de97a3b 616}
e3e65dac 617
903f689b
RR
618bool wxTextCtrl::IsOwnGtkWindow( GdkWindow *window )
619{
620 if (m_windowStyle & wxTE_MULTILINE)
621 return (window == GTK_TEXT(m_text)->text_area);
622 else
623 return (window == GTK_ENTRY(m_text)->text_area);
624}
e3e65dac 625
58614078 626void wxTextCtrl::SetFont( const wxFont &WXUNUSED(font) )
868a2826 627{
f96aa4d9
RR
628 wxCHECK_RET( m_text != NULL, "invalid text ctrl" );
629
58614078
RR
630 // doesn't work
631}
632
633void wxTextCtrl::SetForegroundColour( const wxColour &WXUNUSED(colour) )
634{
635 wxCHECK_RET( m_text != NULL, "invalid text ctrl" );
868a2826 636
a81258be 637 // doesn't work
868a2826 638}
e3e65dac 639
68dda785
VZ
640void wxTextCtrl::SetBackgroundColour( const wxColour &colour )
641{
642 wxCHECK_RET( m_text != NULL, "invalid text ctrl" );
a81258be
RR
643
644 wxControl::SetBackgroundColour( colour );
645
f96aa4d9 646 if (!m_backgroundColour.Ok()) return;
fc54776e 647
f96aa4d9
RR
648 if (m_windowStyle & wxTE_MULTILINE)
649 {
650 GdkWindow *window = GTK_TEXT(m_text)->text_area;
651 m_backgroundColour.CalcPixel( gdk_window_get_colormap( window ) );
652 gdk_window_set_background( window, m_backgroundColour.GetColor() );
653 gdk_window_clear( window );
654 }
58614078
RR
655}
656
657void wxTextCtrl::ApplyWidgetStyle()
658{
659 if (m_windowStyle & wxTE_MULTILINE)
660 {
661 }
f96aa4d9
RR
662 else
663 {
58614078 664 SetWidgetStyle();
a81258be 665 gtk_widget_set_style( m_text, m_widgetStyle );
f96aa4d9 666 }
68dda785 667}
f96aa4d9 668