]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/textctrl.cpp
Fixed broken compilation due to Ove's last nice changes :-(
[wxWidgets.git] / src / gtk1 / textctrl.cpp
index 8811350e7c8b36dd7fc1a2907263f973a204207b..92360ca742984d9472ac32ab9d30253df9bdec21 100644 (file)
@@ -100,17 +100,27 @@ wxTextCtrl::wxTextCtrl()
     m_modified = FALSE;
 }
 
-wxTextCtrl::wxTextCtrl( wxWindow *parent, wxWindowID id, const wxString &value,
-      const wxPoint &pos, const wxSize &size,
-      int style, const wxValidator& validator, const wxString &name )
+wxTextCtrl::wxTextCtrl( wxWindow *parent,
+                        wxWindowID id,
+                        const wxString &value,
+                        const wxPoint &pos,
+                        const wxSize &size,
+                        long style,
+                        const wxValidator& validator,
+                        const wxString &name )
 {
     m_modified = FALSE;
     Create( parent, id, value, pos, size, style, validator, name );
 }
 
-bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value,
-      const wxPoint &pos, const wxSize &size,
-      int style, const wxValidator& validator, const wxString &name )
+bool wxTextCtrl::Create( wxWindow *parent,
+                         wxWindowID id,
+                         const wxString &value,
+                         const wxPoint &pos,
+                         const wxSize &size,
+                         long style,
+                         const wxValidator& validator,
+                         const wxString &name )
 {
     m_needParent = TRUE;
     m_acceptsFocus = TRUE;
@@ -119,7 +129,7 @@ bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value,
         !CreateBase( parent, id, pos, size, style, validator, name ))
     {
         wxFAIL_MSG( wxT("wxTextCtrl creation failed") );
-       return FALSE;
+        return FALSE;
     }
 
 
@@ -182,12 +192,21 @@ bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value,
           m_text = gtk_entry_new();
     }
 
-    SetSizeOrDefault( size );
-
     m_parent->DoAddChild( this );
 
     PostCreation();
 
+    SetFont( parent->GetFont() );
+
+    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 );
+
     if (multi_line)
         gtk_widget_show(m_text);
 
@@ -247,7 +266,7 @@ bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value,
     SetForegroundColour( parent->GetForegroundColour() );
 
     m_cursor = wxCursor( wxCURSOR_IBEAM );
-    
+
     Show( TRUE );
 
     return TRUE;
@@ -318,6 +337,13 @@ void wxTextCtrl::SetValue( const wxString &value )
     {
         gtk_entry_set_text( GTK_ENTRY(m_text), tmp.mbc_str() );
     }
+
+    // GRG, Jun/2000: Changed this after a lot of discussion in
+    //   the lists. wxWindows 2.2 will have a set of flags to
+    //   customize this behaviour.
+    SetInsertionPoint(0);
+
+    m_modified = FALSE;
 }
 
 void wxTextCtrl::WriteText( const wxString &text )
@@ -330,7 +356,7 @@ void wxTextCtrl::WriteText( const wxString &text )
     {
         /* this moves the cursor pos to behind the inserted text */
         gint len = GTK_EDITABLE(m_text)->current_pos;
-        
+
 #if wxUSE_UNICODE
         wxWX2MBbuf buf = text.mbc_str();
         gtk_editable_insert_text( GTK_EDITABLE(m_text), buf, strlen(buf), &len );
@@ -588,6 +614,26 @@ void wxTextCtrl::SetEditable( bool editable )
         gtk_entry_set_editable( GTK_ENTRY(m_text), editable );
 }
 
+bool wxTextCtrl::Enable( bool enable )
+{
+    if (!wxWindowBase::Enable(enable))
+    {
+        // nothing to do
+        return FALSE;
+    }
+
+    if (m_windowStyle & wxTE_MULTILINE)
+    {
+        gtk_text_set_editable( GTK_TEXT(m_text), enable );
+    }
+    else
+    {
+        gtk_widget_set_sensitive( m_text, enable );
+    }
+
+    return TRUE;
+}
+
 void wxTextCtrl::DiscardEdits()
 {
     m_modified = FALSE;
@@ -739,8 +785,9 @@ void wxTextCtrl::GetSelection(long* from, long* to) const
 
     if (!(GTK_EDITABLE(m_text)->has_selection))
     {
-        if (from) *from = 0;
-        if (to)   *to = 0;
+        long i = GetInsertionPoint();
+        if (from) *from = i;
+        if (to)   *to = i;
         return;
     }
 
@@ -773,6 +820,7 @@ void wxTextCtrl::OnChar( wxKeyEvent &key_event )
     {
         wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, m_windowId);
         event.SetEventObject(this);
+        event.SetString(GetValue());
         if (GetEventHandler()->ProcessEvent(event)) return;
     }
 
@@ -781,13 +829,13 @@ void wxTextCtrl::OnChar( wxKeyEvent &key_event )
         wxWindow *top_frame = m_parent;
         while (top_frame->GetParent() && !(top_frame->IsTopLevel()))
             top_frame = top_frame->GetParent();
-       GtkWindow *window = GTK_WINDOW(top_frame->m_widget);
-       
-       if (window->default_widget)
+        GtkWindow *window = GTK_WINDOW(top_frame->m_widget);
+
+        if (window->default_widget)
         {
             gtk_widget_activate (window->default_widget);
-           return;
-       }
+            return;
+        }
     }
 
     key_event.Skip();
@@ -945,11 +993,11 @@ void wxTextCtrl::OnInternalIdle()
     if (cursor.Ok())
     {
         GdkWindow *window = (GdkWindow*) NULL;
-       if (HasFlag(wxTE_MULTILINE))
+        if (HasFlag(wxTE_MULTILINE))
             window = GTK_TEXT(m_text)->text_area;
         else
             window = GTK_ENTRY(m_text)->text_area;
-           
+
         if (window)
             gdk_window_set_cursor( window, cursor.GetCursor() );
 
@@ -967,5 +1015,6 @@ void wxTextCtrl::OnInternalIdle()
 wxSize wxTextCtrl::DoGetBestSize() const
 {
     // FIXME should be different for multi-line controls...
-    return wxSize(80, 26);
+    wxSize ret( wxControl::DoGetBestSize() );
+    return wxSize(80, ret.y);
 }