Added in-place editiging in wxListCtrl

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@574 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling 1998-08-17 17:05:47 +00:00
parent b0d77f437c
commit ee7ee4698c
2 changed files with 87 additions and 60 deletions

View File

@ -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 );

View File

@ -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;