]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/textctrl.cpp
Wrappers for *ToText
[wxWidgets.git] / src / gtk / textctrl.cpp
index 648fdab6a5533b8ae68ca1a3f9dee7a3afcf9686..ced9cf41e8152e7129c5bd85e4f644608cc5a365 100644 (file)
@@ -303,7 +303,7 @@ bool wxTextCtrl::Create( wxWindow *parent,
         gtk_container_add( GTK_CONTAINER(m_widget), m_text );
 
         // Global settings which can be overridden by tags, I guess.
-        if (HasFlag( wxHSCROLL ))
+        if (HasFlag( wxHSCROLL ) || HasFlag( wxTE_DONTWRAP ))
             gtk_text_view_set_wrap_mode( GTK_TEXT_VIEW( m_text ), GTK_WRAP_NONE );
         else
             gtk_text_view_set_wrap_mode( GTK_TEXT_VIEW( m_text ), GTK_WRAP_WORD );
@@ -348,17 +348,7 @@ bool wxTextCtrl::Create( wxWindow *parent,
 
     m_focusWidget = m_text;
 
-    PostCreation();
-    InheritAttributes();
-
-    wxSize size_best( DoGetBestSize() );
-    wxSize new_size( size );
-    if (new_size.x == -1)
-        new_size.x = size_best.x;
-    if (new_size.y == -1)
-        new_size.y = size_best.y;
-    if ((new_size.x != size.x) || (new_size.y != size.y))
-        SetSize( new_size.x, new_size.y );
+    PostCreation(size);
 
     if (multi_line)
         gtk_widget_show(m_text);
@@ -425,16 +415,36 @@ bool wxTextCtrl::Create( wxWindow *parent,
 #ifdef __WXGTK20__
         else
             gtk_text_view_set_editable( GTK_TEXT_VIEW( m_text), FALSE);
-    }
 #else
     }
     else
     {
         if (multi_line)
             gtk_text_set_editable( GTK_TEXT(m_text), 1 );
-    }
 #endif
+    }
 
+#ifdef __WXGTK20__
+    if (multi_line)
+    {
+        if (style & wxTE_RIGHT)
+            gtk_text_view_set_justification( GTK_TEXT_VIEW(m_text), GTK_JUSTIFY_RIGHT );
+        else if (style & wxTE_CENTRE)
+            gtk_text_view_set_justification( GTK_TEXT_VIEW(m_text), GTK_JUSTIFY_CENTER );
+        // Left justify (alignment) is the default and we don't need to apply GTK_JUSTIFY_LEFT
+    }
+    // gtk_entry_set_alignment was introduced in gtk+-2.3.5
+#if GTK_CHECK_VERSION(2, 3, 5)
+    else
+    {
+        if (style & wxTE_RIGHT)
+            gtk_entry_set_alignment( GTK_ENTRY(m_text), 1.0 );
+        else if (style & wxTE_CENTRE)
+            gtk_entry_set_alignment( GTK_ENTRY(m_text), 0.5 );
+    }
+#endif // gtk+-2.3.5
+#endif // __WXGTK20__
+    
     // We want to be notified about text changes.
 #ifdef __WXGTK20__
     if (multi_line)
@@ -444,28 +454,21 @@ bool wxTextCtrl::Create( wxWindow *parent,
     }
     else
 #endif
+    
     {
         gtk_signal_connect( GTK_OBJECT(m_text), "changed",
             GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
     }
 
-    // we don't set a valid background colour, because the window
-    // manager should use a default one
-    m_backgroundColour = wxColour();
-
-    wxColour colFg = parent->GetForegroundColour();
-    SetForegroundColour( colFg );
-
     m_cursor = wxCursor( wxCURSOR_IBEAM );
 
-    wxTextAttr attrDef( colFg, m_backgroundColour, parent->GetFont() );
+    wxTextAttr attrDef(GetForegroundColour(), GetBackgroundColour(), GetFont());
     SetDefaultStyle( attrDef );
 
-    Show( TRUE );
-
     return TRUE;
 }
 
+
 void wxTextCtrl::CalculateScrollbar()
 {
 #ifndef __WXGTK20__
@@ -560,7 +563,7 @@ void wxTextCtrl::SetValue( const wxString &value )
     }
 
     // GRG, Jun/2000: Changed this after a lot of discussion in
-    //   the lists. wxWindows 2.2 will have a set of flags to
+    //   the lists. wxWidgets 2.2 will have a set of flags to
     //   customize this behaviour.
     SetInsertionPoint(0);
 
@@ -1154,27 +1157,36 @@ void wxTextCtrl::Cut()
 {
     wxCHECK_RET( m_text != NULL, wxT("invalid text ctrl") );
 
-#ifndef __WXGTK20__
-    gtk_editable_cut_clipboard( GTK_EDITABLE(m_text) DUMMY_CLIPBOARD_ARG );
+#ifdef __WXGTK20__
+    if (m_windowStyle & wxTE_MULTILINE)
+        g_signal_emit_by_name(m_text, "cut-clipboard");
+    else
 #endif
+        gtk_editable_cut_clipboard(GTK_EDITABLE(m_text) DUMMY_CLIPBOARD_ARG);
 }
 
 void wxTextCtrl::Copy()
 {
     wxCHECK_RET( m_text != NULL, wxT("invalid text ctrl") );
 
-#ifndef __WXGTK20__
-    gtk_editable_copy_clipboard( GTK_EDITABLE(m_text) DUMMY_CLIPBOARD_ARG );
+#ifdef __WXGTK20__
+    if (m_windowStyle & wxTE_MULTILINE)
+        g_signal_emit_by_name(m_text, "copy-clipboard");
+    else
 #endif
+        gtk_editable_copy_clipboard(GTK_EDITABLE(m_text) DUMMY_CLIPBOARD_ARG);
 }
 
 void wxTextCtrl::Paste()
 {
     wxCHECK_RET( m_text != NULL, wxT("invalid text ctrl") );
 
-#ifndef __WXGTK20__
-    gtk_editable_paste_clipboard( GTK_EDITABLE(m_text) DUMMY_CLIPBOARD_ARG );
+#ifdef __WXGTK20__
+    if (m_windowStyle & wxTE_MULTILINE)
+        g_signal_emit_by_name(m_text, "paste-clipboard");
+    else
 #endif
+        gtk_editable_paste_clipboard(GTK_EDITABLE(m_text) DUMMY_CLIPBOARD_ARG);
 }
 
 // Undo/redo
@@ -1413,14 +1425,6 @@ bool wxTextCtrl::SetBackgroundColour( const wxColour &colour )
     if (!m_widget->window)
         return FALSE;
 
-    wxColour sysbg = wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE );
-    if (sysbg.Red() == colour.Red() &&
-        sysbg.Green() == colour.Green() &&
-        sysbg.Blue() == colour.Blue())
-    {
-        return FALSE; // FIXME or TRUE?
-    }
-
     if (!m_backgroundColour.Ok())
         return FALSE;
 
@@ -1532,17 +1536,9 @@ bool wxTextCtrl::SetStyle( long start, long end, const wxTextAttr& style )
     }
 }
 
-void wxTextCtrl::ApplyWidgetStyle()
+void wxTextCtrl::DoApplyWidgetStyle(GtkRcStyle *style)
 {
-    if (m_windowStyle & wxTE_MULTILINE)
-    {
-        // how ?
-    }
-    else
-    {
-        SetWidgetStyle();
-        gtk_widget_set_style( m_text, m_widgetStyle );
-    }
+    gtk_widget_modify_style(m_text, style);
 }
 
 void wxTextCtrl::OnCut(wxCommandEvent& WXUNUSED(event))
@@ -1638,7 +1634,9 @@ wxSize wxTextCtrl::DoGetBestSize() const
 {
     // FIXME should be different for multi-line controls...
     wxSize ret( wxControl::DoGetBestSize() );
-    return wxSize(80, ret.y);
+    wxSize best(80, ret.y);
+    CacheBestSize(best);
+    return best;
 }
 
 // ----------------------------------------------------------------------------
@@ -1736,3 +1734,10 @@ bool wxTextCtrl::ScrollPages(int pages)
 #endif
 }
 
+
+// static
+wxVisualAttributes
+wxTextCtrl::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant))
+{
+    return GetDefaultAttributesFromGTKWidget(gtk_entry_new, true);
+}