From ee7ee4698c8c845e134c23a5e8a4a63cdd3de797 Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Mon, 17 Aug 1998 17:05:47 +0000 Subject: [PATCH] Added in-place editiging in wxListCtrl git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@574 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/generic/listctrl.h | 55 +++++---------------- src/generic/listctrl.cpp | 92 ++++++++++++++++++++++++++++------- 2 files changed, 87 insertions(+), 60 deletions(-) diff --git a/include/wx/generic/listctrl.h b/include/wx/generic/listctrl.h index 4a60aabbdd..44b043c671 100644 --- a/include/wx/generic/listctrl.h +++ b/include/wx/generic/listctrl.h @@ -20,6 +20,7 @@ #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" @@ -386,8 +387,6 @@ class wxListRenameTimer: public wxTimer void Notify(); }; -/* - //----------------------------------------------------------------------------- // wxListTextCtrl (internal) //----------------------------------------------------------------------------- @@ -402,48 +401,19 @@ class wxListTextCtrl: public wxTextCtrl 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) //----------------------------------------------------------------------------- @@ -494,6 +464,7 @@ class wxListMainWindow: public wxScrolledWindow 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 ); diff --git a/src/generic/listctrl.cpp b/src/generic/listctrl.cpp index c9c29db898..2fcf5a080d 100644 --- a/src/generic/listctrl.cpp +++ b/src/generic/listctrl.cpp @@ -770,6 +770,59 @@ void wxListRenameTimer::Notify() 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 //----------------------------------------------------------------------------- @@ -804,7 +857,8 @@ wxListMainWindow::wxListMainWindow( void ) 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; }; @@ -853,11 +907,6 @@ wxListMainWindow::wxListMainWindow( wxWindow *parent, wxWindowID id, // 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 ) @@ -977,9 +1026,17 @@ void wxListMainWindow::DeleteLine( wxListLineData *line ) 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 ) { - 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; @@ -990,7 +1047,7 @@ void wxListMainWindow::RenameLine( wxListLineData *line, const wxString &newName void wxListMainWindow::OnRenameTimer() { - return; + StartLabelEdit( m_current ); 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 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(); -*/ /* 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) */ ) { - m_renameTimer->Start( 330, TRUE ); + m_renameTimer->Start( 100, TRUE ); }; m_lastOnSame = FALSE; return; -- 2.47.2