]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/textctrl.cpp
Listctrl updates
[wxWidgets.git] / src / gtk1 / textctrl.cpp
index b6033cce3a4d997992540767f5c3d57a25542e18..e99ff0e8b7bae9367b7fd06da28c151bb6d562df 100644 (file)
@@ -71,8 +71,8 @@ bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value,
 
   SetValidator( validator );
 
-  bool bMultiLine = (style & wxTE_MULTILINE) != 0;
-  if ( bMultiLine )
+  bool multi_line = (style & wxTE_MULTILINE) != 0;
+  if ( multi_line )
   {
     // a multi-line edit control: create a vertical scrollbar by default and
     // horizontal if requested
@@ -125,7 +125,7 @@ bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value,
   
   PostCreation();
 
-  if (bMultiLine) 
+  if (multi_line) 
   {
     gtk_widget_realize(m_text);
     gtk_widget_show(m_text);
@@ -143,12 +143,20 @@ bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value,
     SetInsertionPointEnd();
   }
 
-  if (style & wxTE_READONLY)
+  if (style & wxTE_PASSWORD)
   {
+    if (!multi_line)
+      gtk_entry_set_visibility( GTK_ENTRY(m_text), FALSE );
+  }
+  
+  if (style & wxTE_READONLY)
+  {    
+    if (!multi_line)
+      gtk_entry_set_editable( GTK_ENTRY(m_text), FALSE );
   }
   else
   {
-    if (bMultiLine)
+    if (multi_line)
       gtk_text_set_editable( GTK_TEXT(m_text), 1 );
   }
 
@@ -348,18 +356,43 @@ void wxTextCtrl::OnDropFiles( wxDropFilesEvent &WXUNUSED(event) )
   wxFAIL_MSG( "wxTextCtrl::OnDropFiles not implemented" );
 }
 
-long wxTextCtrl::PositionToXY( long WXUNUSED(pos), long *WXUNUSED(x), long *WXUNUSED(y) ) const
+long wxTextCtrl::PositionToXY(long pos, long *x, long *y ) const
 {
-  wxFAIL_MSG( "wxTextCtrl::XYToPosition not implemented" );
+  if (!(m_windowStyle & wxTE_MULTILINE))
+    return 0;
+  gint len = gtk_text_get_length( GTK_TEXT(m_text) );
+  char *text = gtk_editable_get_chars( GTK_EDITABLE(m_text), 0, len );
+  if(!text)
+    return 0;
+  if( pos >= len)
+    return pos=len-1;
   
-  return 0;
+  *x=1;   // Col 1
+  *y=1;   // Line 1
+  for (int i = 0; i < pos; i++ )
+    {
+      if (text[i] == '\n')
+       {
+         (*y)++;
+         *x=1;
+       }
+      else
+       (*x)++;
+    } 
+  g_free( text );
+  return 1;
 }
 
-long wxTextCtrl::XYToPosition( long WXUNUSED(x), long WXUNUSED(y) ) const
+long wxTextCtrl::XYToPosition(long x, long y ) const
 {
-  wxFAIL_MSG( "wxTextCtrl::XYToPosition not implemented" );
+  if (!(m_windowStyle & wxTE_MULTILINE))
+    return 0;
+  long pos=0;
   
-  return 0;
+  for(int i=1;i<y;i++)
+      pos +=GetLineLength(i);
+  pos +=x-1; // Pos start with 0
+  return pos;
 }
 
 int wxTextCtrl::GetLineLength(long lineNo) const