panel2->SetBackgroundColour(wxColour("BLUE"));
wxString animals[] = { "Fox", "Hare", "Rabbit", "Sabre-toothed tiger", "T Rex" };
- wxListBox *listbox = new wxListBox(panel2, -1, wxPoint(5, 5), wxSize(170, 80), 5, animals);
+ wxRadioBox *radiobox = new wxRadioBox(panel2, -1, "Choose one",
+ wxDefaultPosition, wxDefaultSize, 5, animals);
c = new wxLayoutConstraints;
c->left.SameAs(panel2, wxLeft, 4);
c->top.SameAs(panel2, wxTop, 4);
c->height.PercentOf(panel2, wxHeight, 50);
c->right.SameAs(panel2, wxRight, 4);
- listbox->SetConstraints(c);
+ radiobox->SetConstraints(c);
- wxTextCtrl *text = new wxTextCtrl(panel2, -1, "Some notes about the animals in this house", wxPoint(5, 100), wxSize(170, 100), wxTE_MULTILINE);
+ wxRadioBox *radiobox2 = new wxRadioBox(panel2, -1, "Choose one",
+ wxDefaultPosition, wxDefaultSize,
+ 5, animals,
+ 2, wxRA_SPECIFY_ROWS);
c = new wxLayoutConstraints;
- c->left.SameAs(panel2, wxLeft, 4);
- c->bottom.SameAs(panel2, wxBottom, 4);
- c->top.Below(listbox, 4);
- c->right.SameAs(panel2, wxRight, 4);
- text->SetConstraints(c);
+ c->left.SameAs(radiobox, wxLeft);
+ c->height.AsIs();
+ c->top.Below(radiobox, 4);
+ c->right.SameAs(radiobox, wxRight);
+ radiobox2->SetConstraints(c);
notebook->AddPage(panel2, "Dog");
SetAutoLayout(TRUE);
Layout();
- this->Centre(wxBOTH);
+ Centre(wxBOTH);
}
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
MyTextCtrl *m_tab;
MyTextCtrl *m_entertab;
MyTextCtrl *m_readonly;
-
+
MyTextCtrl *m_multitext;
MyTextCtrl *m_horizontal;
MyTextCtrl *m_multitab;
// single line text controls
- m_text = new MyTextCtrl( this, -1, "Single line.",
+ m_text = new MyTextCtrl( this, -1, "Single line.",
wxPoint(10,10), wxSize(140,-1), 0);
(*m_text) << " Appended.";
m_text->SetInsertionPoint(0);
m_text->WriteText( "Prepended. " );
-
- m_password = new MyTextCtrl( this, -1, "",
+
+ m_password = new MyTextCtrl( this, -1, "",
wxPoint(10,50), wxSize(140,-1), wxTE_PASSWORD );
-
- m_readonly = new MyTextCtrl( this, -1, "Read only",
+
+ m_readonly = new MyTextCtrl( this, -1, "Read only",
wxPoint(10,90), wxSize(140,-1), wxTE_READONLY );
-
+
// multi line text controls
- m_horizontal = new MyTextCtrl( this, -1, "Multiline text control with a horizontal scrollbar.",
- wxPoint(10,170), wxSize(140,70), wxTE_MULTILINE | wxHSCROLL );
-
- m_multitext = new MyTextCtrl( this, ID_TEXT, "Multi line.",
+ m_horizontal = new MyTextCtrl( this, -1, "Multiline text control with a horizontal scrollbar.",
+ wxPoint(10,170), wxSize(140,70), wxTE_MULTILINE | wxHSCROLL );
+ m_horizontal->SetFont(wxFont(18, wxSWISS, wxNORMAL, wxBOLD));
+
+ m_multitext = new MyTextCtrl( this, ID_TEXT, "Multi line.",
wxPoint(180,10), wxSize(240,70), wxTE_MULTILINE );
(*m_multitext) << " Appended.";
m_multitext->SetInsertionPoint(0);
m_multitext->WriteText( "Prepended. " );
-
+
#if wxUSE_TOOLTIPS
m_multitext->SetToolTip("Press F1 here.");
#endif
- m_tab = new MyTextCtrl( this, -1, "Multiline, allow <TAB> processing.",
+ m_tab = new MyTextCtrl( this, -1, "Multiline, allow <TAB> processing.",
wxPoint(180,90), wxSize(240,70), wxTE_MULTILINE | wxTE_PROCESS_TAB );
- m_enter = new MyTextCtrl( this, -1, "Multiline, allow <ENTER> processing.",
+ m_enter = new MyTextCtrl( this, -1, "Multiline, allow <ENTER> processing.",
wxPoint(180,170), wxSize(240,70), wxTE_MULTILINE | wxTE_PROCESS_ENTER );
wxButton *button;
#if wxUSE_TOOLTIPS
button->SetToolTip("Move cursor in multi-line text control to end of first line.");
#endif
-
+
(void)new wxStaticBox( this, -1, "wx&Clipboard", wxPoint(445,130), wxSize(160,100) );
button = new wxButton( this, ID_COPY_TEXT, "C&opy line 1", wxPoint(470,150), wxSize(110,30) );
#if wxUSE_TOOLTIPS
wxBeginBusyCursor();
wxMessageDialog dialog(this, "This is a text control sample. It demonstrates the many different text control\n"
- "styles, the use of the clipboard, setting and handling tooltips and intercepting\n"
- "key and char events.\n"
- "\n"
- "Copyright (c) 1999, Robert Roebling, Julian Smart, Vadim Zeitlin",
- "About Text Controls", wxOK );
+ "styles, the use of the clipboard, setting and handling tooltips and intercepting\n"
+ "key and char events.\n"
+ "\n"
+ "Copyright (c) 1999, Robert Roebling, Julian Smart, Vadim Zeitlin",
+ "About Text Controls", wxOK );
dialog.ShowModal();
wxEndBusyCursor();
delay.Printf( _T("%ld"), s_delay);
delay = wxGetTextFromUser("Enter delay (in milliseconds)",
- "Set tooltip delay",
- delay,
- this);
+ "Set tooltip delay",
+ delay,
+ this);
if ( !delay )
return; // cancelled
{
if (!win->m_hasVMT) return;
- if (g_isIdle)
+ if (g_isIdle)
wxapp_install_idle_handler();
win->SetModified();
gtk_scrollbar_changed_callback( GtkWidget *WXUNUSED(widget), wxTextCtrl *win )
{
if (!win->m_hasVMT) return;
-
- if (g_isIdle)
+
+ if (g_isIdle)
wxapp_install_idle_handler();
win->CalculateScrollbar();
(GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK),
(GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK),
0, 0);
-
+
/* always wrap words */
gtk_text_set_word_wrap( GTK_TEXT(m_text), TRUE );
-
+
/* put the horizontal scrollbar in the lower left hand corner */
if (bHasHScrollbar)
{
gtk_text_set_line_wrap( GTK_TEXT(m_text), FALSE );
#endif
}
-
+
/* finally, put the vertical scrollbar in the upper right corner */
m_vScrollbar = gtk_vscrollbar_new( GTK_TEXT(m_text)->vadj );
GTK_WIDGET_UNSET_FLAGS( m_vScrollbar, GTK_CAN_FOCUS );
gtk_signal_disconnect_by_func( GTK_OBJECT(m_text),
GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
-
+
wxString tmp = _T("");
if (!value.IsNull()) tmp = value;
if (m_windowStyle & wxTE_MULTILINE)
{
gtk_entry_set_text( GTK_ENTRY(m_text), tmp.mbc_str() );
}
-
+
gtk_signal_connect( GTK_OBJECT(m_text), "changed",
GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
}
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);
}
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 */
- gint len = gtk_text_get_length( GTK_TEXT(m_text) );
+ bool hasSpecialAttributes = m_font.Ok() ||
+ m_foregroundColour.Ok() ||
+ m_backgroundColour.Ok();
+ if ( hasSpecialAttributes )
+ {
+ gtk_text_insert( GTK_TEXT(m_text),
+ m_font.GetInternalFont(),
+ m_foregroundColour.GetColor(),
+ m_backgroundColour.GetColor(),
+ text, text.length());
+
+ }
+ else
+ {
+ /* we'll insert at the last position */
+ gint len = gtk_text_get_length( GTK_TEXT(m_text) );
#if wxUSE_UNICODE
- wxWX2MBbuf buf = text.mbc_str();
- gtk_editable_insert_text( GTK_EDITABLE(m_text), buf, strlen(buf), &len );
+ wxWX2MBbuf buf = text.mbc_str();
+ gtk_editable_insert_text( GTK_EDITABLE(m_text), buf, strlen(buf), &len );
#else
- gtk_editable_insert_text( GTK_EDITABLE(m_text), text, text.Length(), &len );
+ gtk_editable_insert_text( GTK_EDITABLE(m_text), text, text.Length(), &len );
#endif
+ }
/* bring editable's cursor uptodate. bug in GTK. */
GTK_EDITABLE(m_text)->current_pos = gtk_text_get_point( GTK_TEXT(m_text) );
{
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);
}
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_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;
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);
}
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.IsEmpty())
{
gint pos = (gint)from;
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);
}
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);
}
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);
}
void wxTextCtrl::GetSelection(long* from, long* to) const
{
wxCHECK_RET( m_text != NULL, _T("invalid text ctrl") );
-
+
if (!(GTK_EDITABLE(m_text)->has_selection))
{
if (from) *from = 0;
- if (to) *to = 0;
- return;
+ if (to) *to = 0;
+ return;
}
-
+
if (from) *from = (long) GTK_EDITABLE(m_text)->selection_start_pos;
if (to) *to = (long) GTK_EDITABLE(m_text)->selection_end_pos;
}
return (window == GTK_ENTRY(m_text)->text_area);
}
-bool wxTextCtrl::SetFont( const wxFont &WXUNUSED(font) )
+// the font will change for subsequent text insertiongs
+bool wxTextCtrl::SetFont( const wxFont &font )
{
wxCHECK_MSG( m_text != NULL, FALSE, _T("invalid text ctrl") );
- // doesn't work
- return FALSE;
+ if ( !wxWindowBase::SetFont(font) )
+ {
+ // font didn't change, nothing to do
+ return FALSE;
+ }
+
+ if ( m_windowStyle & wxTE_MULTILINE )
+ {
+ // for compatibility with other ports: the font is a global controls
+ // characteristic, so change the font globally
+ wxString value = GetValue();
+ if ( !value.IsEmpty() )
+ {
+ Clear();
+
+ AppendText(value);
+ }
+ }
+
+ return TRUE;
}
bool wxTextCtrl::SetForegroundColour( const wxColour &WXUNUSED(colour) )
{
if (!win->m_hasVMT) return;
- if (g_isIdle)
+ if (g_isIdle)
wxapp_install_idle_handler();
win->SetModified();
gtk_scrollbar_changed_callback( GtkWidget *WXUNUSED(widget), wxTextCtrl *win )
{
if (!win->m_hasVMT) return;
-
- if (g_isIdle)
+
+ if (g_isIdle)
wxapp_install_idle_handler();
win->CalculateScrollbar();
(GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK),
(GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK),
0, 0);
-
+
/* always wrap words */
gtk_text_set_word_wrap( GTK_TEXT(m_text), TRUE );
-
+
/* put the horizontal scrollbar in the lower left hand corner */
if (bHasHScrollbar)
{
gtk_text_set_line_wrap( GTK_TEXT(m_text), FALSE );
#endif
}
-
+
/* finally, put the vertical scrollbar in the upper right corner */
m_vScrollbar = gtk_vscrollbar_new( GTK_TEXT(m_text)->vadj );
GTK_WIDGET_UNSET_FLAGS( m_vScrollbar, GTK_CAN_FOCUS );
gtk_signal_disconnect_by_func( GTK_OBJECT(m_text),
GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
-
+
wxString tmp = _T("");
if (!value.IsNull()) tmp = value;
if (m_windowStyle & wxTE_MULTILINE)
{
gtk_entry_set_text( GTK_ENTRY(m_text), tmp.mbc_str() );
}
-
+
gtk_signal_connect( GTK_OBJECT(m_text), "changed",
GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
}
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);
}
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 */
- gint len = gtk_text_get_length( GTK_TEXT(m_text) );
+ bool hasSpecialAttributes = m_font.Ok() ||
+ m_foregroundColour.Ok() ||
+ m_backgroundColour.Ok();
+ if ( hasSpecialAttributes )
+ {
+ gtk_text_insert( GTK_TEXT(m_text),
+ m_font.GetInternalFont(),
+ m_foregroundColour.GetColor(),
+ m_backgroundColour.GetColor(),
+ text, text.length());
+
+ }
+ else
+ {
+ /* we'll insert at the last position */
+ gint len = gtk_text_get_length( GTK_TEXT(m_text) );
#if wxUSE_UNICODE
- wxWX2MBbuf buf = text.mbc_str();
- gtk_editable_insert_text( GTK_EDITABLE(m_text), buf, strlen(buf), &len );
+ wxWX2MBbuf buf = text.mbc_str();
+ gtk_editable_insert_text( GTK_EDITABLE(m_text), buf, strlen(buf), &len );
#else
- gtk_editable_insert_text( GTK_EDITABLE(m_text), text, text.Length(), &len );
+ gtk_editable_insert_text( GTK_EDITABLE(m_text), text, text.Length(), &len );
#endif
+ }
/* bring editable's cursor uptodate. bug in GTK. */
GTK_EDITABLE(m_text)->current_pos = gtk_text_get_point( GTK_TEXT(m_text) );
{
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);
}
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_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;
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);
}
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.IsEmpty())
{
gint pos = (gint)from;
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);
}
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);
}
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);
}
void wxTextCtrl::GetSelection(long* from, long* to) const
{
wxCHECK_RET( m_text != NULL, _T("invalid text ctrl") );
-
+
if (!(GTK_EDITABLE(m_text)->has_selection))
{
if (from) *from = 0;
- if (to) *to = 0;
- return;
+ if (to) *to = 0;
+ return;
}
-
+
if (from) *from = (long) GTK_EDITABLE(m_text)->selection_start_pos;
if (to) *to = (long) GTK_EDITABLE(m_text)->selection_end_pos;
}
return (window == GTK_ENTRY(m_text)->text_area);
}
-bool wxTextCtrl::SetFont( const wxFont &WXUNUSED(font) )
+// the font will change for subsequent text insertiongs
+bool wxTextCtrl::SetFont( const wxFont &font )
{
wxCHECK_MSG( m_text != NULL, FALSE, _T("invalid text ctrl") );
- // doesn't work
- return FALSE;
+ if ( !wxWindowBase::SetFont(font) )
+ {
+ // font didn't change, nothing to do
+ return FALSE;
+ }
+
+ if ( m_windowStyle & wxTE_MULTILINE )
+ {
+ // for compatibility with other ports: the font is a global controls
+ // characteristic, so change the font globally
+ wxString value = GetValue();
+ if ( !value.IsEmpty() )
+ {
+ Clear();
+
+ AppendText(value);
+ }
+ }
+
+ return TRUE;
}
bool wxTextCtrl::SetForegroundColour( const wxColour &WXUNUSED(colour) )