]> git.saurik.com Git - wxWidgets.git/commitdiff
Added in-place editiging in wxListCtrl
authorRobert Roebling <robert@roebling.de>
Mon, 17 Aug 1998 17:05:47 +0000 (17:05 +0000)
committerRobert Roebling <robert@roebling.de>
Mon, 17 Aug 1998 17:05:47 +0000 (17:05 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@574 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/generic/listctrl.h
src/generic/listctrl.cpp

index 4a60aabbddbaea5da5842f0234be22b5616af8fa..44b043c671705fa2c528e4ba1f698780a84fb336 100644 (file)
@@ -20,6 +20,7 @@
 #include "wx/imaglist.h"
 #include "wx/control.h"
 #include "wx/timer.h"
 #include "wx/imaglist.h"
 #include "wx/control.h"
 #include "wx/timer.h"
+#include "wx/textctrl.h"
 #include "wx/dcclient.h"
 #include "wx/scrolwin.h"
 #include "wx/settings.h"
 #include "wx/dcclient.h"
 #include "wx/scrolwin.h"
 #include "wx/settings.h"
@@ -386,8 +387,6 @@ class wxListRenameTimer: public wxTimer
    void Notify();
 };
 
    void Notify();
 };
 
-/*
-
 //-----------------------------------------------------------------------------
 //  wxListTextCtrl (internal)
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 //  wxListTextCtrl (internal)
 //-----------------------------------------------------------------------------
@@ -402,48 +401,19 @@ class wxListTextCtrl: public wxTextCtrl
     wxListMainWindow   *m_owner;
 
   public:
     wxListMainWindow   *m_owner;
 
   public:
-    wxListTextCtrl(void) : wxTextCtrl() {};
-    wxListTextCtrl(  wxWindow *parent, const char *value = "",
-      bool *accept, wxString *res, wxListMainWindow *owner,
-      int x = -1, int y = -1, int w = -1, int h = -1, int style = 0, char *name = "rawtext" ) :
-      wxTextCtrl( parent, value, x, y, w, h, style, name )
-      {
-        m_res = res;
-        m_accept = accept;
-       m_owner = owner;
-      };
-    void OnChar( wxKeyEvent &event )
-      {
-        if (event.keyCode == WXK_RETURN)
-        {
-          (*m_accept) = TRUE;
-         (*m_res) = GetValue();
-         m_owner->OnRenameAccept();
-//       Show( FALSE );
-          delete this;
-         return;
-       };
-        if (event.keyCode == WXK_ESCAPE)
-        {
-          (*m_accept) = FALSE;
-         (*m_res) = "";
-//       Show( FALSE );
-          delete this;
-         return;
-       };
-      };
-    void OnKillFocus(void)
-      {
-        (*m_accept) = FALSE;
-        (*m_res) = "";
-//      Show( FALSE );
-        delete this;
-        return;
-      };
+    wxListTextCtrl(void) {};
+    wxListTextCtrl( wxWindow *parent, const wxWindowID id, 
+                    bool *accept, wxString *res, wxListMainWindow *owner,
+                    const wxString &value = "",
+                    const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize,
+                    int style = 0, const wxValidator& validator = wxDefaultValidator,
+                    const wxString &name = "wxListTextCtrlText" );
+    void OnChar( wxKeyEvent &event );
+    void OnKillFocus( wxFocusEvent &event );
+    
+  DECLARE_EVENT_TABLE()
 };
 
 };
 
-*/
-
 //-----------------------------------------------------------------------------
 //  wxListMainWindow (internal)
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 //  wxListMainWindow (internal)
 //-----------------------------------------------------------------------------
@@ -494,6 +464,7 @@ class wxListMainWindow: public wxScrolledWindow
     void DeselectLine( wxListLineData *line );
     void DeleteLine( wxListLineData *line );
     void RenameLine( wxListLineData *line, const wxString &newName );
     void DeselectLine( wxListLineData *line );
     void DeleteLine( wxListLineData *line );
     void RenameLine( wxListLineData *line, const wxString &newName );
+    void StartLabelEdit( wxListLineData *line );
     void OnRenameTimer(void);
     void OnRenameAccept(void);
     void OnMouse( wxMouseEvent &event );
     void OnRenameTimer(void);
     void OnRenameAccept(void);
     void OnMouse( wxMouseEvent &event );
index c9c29db898138d5befef5d8382c13810be4b4835..2fcf5a080dc58e71253c0f1aca7fec474a4e2b0c 100644 (file)
@@ -770,6 +770,59 @@ void wxListRenameTimer::Notify()
   m_owner->OnRenameTimer();
 };
 
   m_owner->OnRenameTimer();
 };
 
+//-----------------------------------------------------------------------------
+// wxListTextCtrl (internal)
+//-----------------------------------------------------------------------------
+
+IMPLEMENT_DYNAMIC_CLASS(wxListTextCtrl,wxTextCtrl);
+    
+BEGIN_EVENT_TABLE(wxListTextCtrl,wxTextCtrl)
+  EVT_CHAR           (wxListTextCtrl::OnChar)
+  EVT_KILL_FOCUS     (wxListTextCtrl::OnKillFocus)
+END_EVENT_TABLE()
+
+wxListTextCtrl::wxListTextCtrl( wxWindow *parent, const wxWindowID id, 
+    bool *accept, wxString *res, wxListMainWindow *owner,
+    const wxString &value, const wxPoint &pos, const wxSize &size,
+    int style, const wxValidator& validator, const wxString &name ) :
+  wxTextCtrl( parent, id, value, pos, size, style, validator, name )
+{
+  m_res = res;
+  m_accept = accept;
+  m_owner = owner;
+}
+
+void wxListTextCtrl::OnChar( wxKeyEvent &event )
+{
+  if (event.m_keyCode == WXK_RETURN)
+  {
+    (*m_accept) = TRUE;
+    (*m_res) = GetValue();
+    m_owner->OnRenameAccept();
+//  Show( FALSE );
+    Destroy();
+    return;
+  }
+  if (event.m_keyCode == WXK_ESCAPE)
+  { 
+    (*m_accept) = FALSE;
+    (*m_res) = "";
+//  Show( FALSE );
+    Destroy();
+    return;
+  }
+  event.Skip();
+}
+
+void wxListTextCtrl::OnKillFocus( wxFocusEvent &WXUNUSED(event) )
+{
+  (*m_accept) = FALSE;
+  (*m_res) = "";
+//   Show( FALSE );
+   Destroy();
+   return;
+}
+
 //-----------------------------------------------------------------------------
 //  wxListMainWindow
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 //  wxListMainWindow
 //-----------------------------------------------------------------------------
@@ -804,7 +857,8 @@ wxListMainWindow::wxListMainWindow( void )
   m_hasFocus = FALSE;
   m_usedKeys = TRUE;
   m_lastOnSame = FALSE;
   m_hasFocus = FALSE;
   m_usedKeys = TRUE;
   m_lastOnSame = FALSE;
-//  m_renameTimer = new wxRenameTimer( this );
+//  m_renameTimer = new wxListRenameTimer( this );
+  m_renameTimer = NULL;
   m_isCreated = FALSE;
   m_dragCount = 0;
 };
   m_isCreated = FALSE;
   m_dragCount = 0;
 };
@@ -853,11 +907,6 @@ wxListMainWindow::wxListMainWindow( wxWindow *parent, wxWindowID id,
 //  m_text->Show( FALSE );
 
   SetBackgroundColour( *wxWHITE );
 //  m_text->Show( FALSE );
 
   SetBackgroundColour( *wxWHITE );
-  
-/*
-  char *accepted_drop_types[] = { "text/plain" };
-  gtk_widget_dnd_drag_set( m_wxwindow, TRUE, accepted_drop_types, 1 );
-*/  
 };
 
 wxListMainWindow::~wxListMainWindow( void )
 };
 
 wxListMainWindow::~wxListMainWindow( void )
@@ -977,9 +1026,17 @@ void wxListMainWindow::DeleteLine( wxListLineData *line )
   SendNotify( line, wxEVT_COMMAND_LIST_DELETE_ITEM );
 };
 
   SendNotify( line, wxEVT_COMMAND_LIST_DELETE_ITEM );
 };
 
+void wxListMainWindow::StartLabelEdit( wxListLineData *line )
+{
+  SendNotify( line, wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT );
+};
+
 void wxListMainWindow::RenameLine( wxListLineData *line, const wxString &newName )
 {
 void wxListMainWindow::RenameLine( wxListLineData *line, const wxString &newName )
 {
-  wxListEvent le( wxEVT_COMMAND_LIST_END_LABEL_EDIT );
+  if (!m_parent) return;
+  
+  wxListEvent le( wxEVT_COMMAND_LIST_END_LABEL_EDIT, m_parent->GetId() );
+  le.SetEventObject( m_parent );
   le.m_code = 0;
   le.m_itemIndex = GetIndexOfLine( line );
   le.m_col = 0;
   le.m_code = 0;
   le.m_itemIndex = GetIndexOfLine( line );
   le.m_col = 0;
@@ -990,7 +1047,7 @@ void wxListMainWindow::RenameLine( wxListLineData *line, const wxString &newName
 
 void wxListMainWindow::OnRenameTimer()
 {
 
 void wxListMainWindow::OnRenameTimer()
 {
-  return;
+  StartLabelEdit( m_current );
   wxString s;
   m_current->GetText( 0, s );
   int x = 0;
   wxString s;
   m_current->GetText( 0, s );
   int x = 0;
@@ -998,16 +1055,15 @@ void wxListMainWindow::OnRenameTimer()
   int w = 0;
   int h = 0;
   m_current->GetLabelExtent( x, y, w, h );
   int w = 0;
   int h = 0;
   m_current->GetLabelExtent( x, y, w, h );
-  int dx = 0;
-  int dy = 0;
-  GetPosition( &dx, &dy );
-  x += dx;
-  y += dy;
-/*
-  wxRawListTextCtrl *text = new wxRawListTextCtrl( 
-    GetParent(), s, &m_renameAccept, &m_renameRes, this, x+2, y+2, w+8, h+8 );
+  
+  wxClientDC dc(this);
+  PrepareDC( dc );
+  x = dc.LogicalToDeviceX( x );
+  y = dc.LogicalToDeviceY( y );
+  
+  wxListTextCtrl *text = new wxListTextCtrl( 
+    this, -1, &m_renameAccept, &m_renameRes, this, s, wxPoint(x-4,y-4), wxSize(w+11,h+8) );
   text->SetFocus();
   text->SetFocus();
-*/
 /*
   m_text->SetSize( x+3, y+3, w+6, h+6 );
   m_text->SetValue( s );
 /*
   m_text->SetSize( x+3, y+3, w+6, h+6 );
   m_text->SetValue( s );
@@ -1088,7 +1144,7 @@ void wxListMainWindow::OnMouse( wxMouseEvent &event )
         (hitResult == wxLIST_HITTEST_ONITEMLABEL) /* && 
        (m_mode & wxLC_ICON) */  )
     {
         (hitResult == wxLIST_HITTEST_ONITEMLABEL) /* && 
        (m_mode & wxLC_ICON) */  )
     {
-      m_renameTimer->Start( 330, TRUE );
+      m_renameTimer->Start( 100, TRUE );
     };
     m_lastOnSame = FALSE;
     return;
     };
     m_lastOnSame = FALSE;
     return;