Cursor movements and selections even in non-edit mode.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2429 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1591,9 +1591,9 @@ wxLayoutList::DrawCursor(wxDC &dc, bool active, wxPoint const &translate)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
dc.DrawLine(coords.x, coords.y+m_CursorSize.y-1,
|
dc.DrawLine(coords.x, coords.y+m_CursorSize.y-1,
|
||||||
coords.x+m_CursorSize.x, coords.y+m_CursorSize.y-1);
|
coords.x, coords.y);
|
||||||
SetUpdateRect(coords.x, coords.y+m_CursorSize.y-1);
|
SetUpdateRect(coords.x, coords.y+m_CursorSize.y-1);
|
||||||
SetUpdateRect(coords.x+m_CursorSize.x, coords.y+m_CursorSize.y-1);
|
SetUpdateRect(coords.x, coords.y);
|
||||||
}
|
}
|
||||||
dc.SetLogicalFunction(wxCOPY);
|
dc.SetLogicalFunction(wxCOPY);
|
||||||
//dc.SetBrush(wxNullBrush);
|
//dc.SetBrush(wxNullBrush);
|
||||||
|
@@ -229,10 +229,19 @@ wxLayoutWindow::OnChar(wxKeyEvent& event)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!IsEditable()) // do nothing
|
/* These two nested switches work like this:
|
||||||
{
|
The first one processes all non-editing keycodes, to move the
|
||||||
|
cursor, etc. It's default will process all keycodes causing
|
||||||
|
modifications to the buffer, but only if editing is allowed.
|
||||||
|
*/
|
||||||
switch(keyCode)
|
switch(keyCode)
|
||||||
{
|
{
|
||||||
|
case WXK_RIGHT:
|
||||||
|
m_llist->MoveCursorHorizontally(1);
|
||||||
|
break;
|
||||||
|
case WXK_LEFT:
|
||||||
|
m_llist->MoveCursorHorizontally(-1);
|
||||||
|
break;
|
||||||
case WXK_UP:
|
case WXK_UP:
|
||||||
m_llist->MoveCursorVertically(-1);
|
m_llist->MoveCursorVertically(-1);
|
||||||
break;
|
break;
|
||||||
@@ -245,12 +254,19 @@ wxLayoutWindow::OnChar(wxKeyEvent& event)
|
|||||||
case WXK_NEXT:
|
case WXK_NEXT:
|
||||||
m_llist->MoveCursorVertically(20);
|
m_llist->MoveCursorVertically(20);
|
||||||
break;
|
break;
|
||||||
|
case WXK_HOME:
|
||||||
|
m_llist->MoveCursorToBeginOfLine();
|
||||||
|
break;
|
||||||
|
case WXK_END:
|
||||||
|
m_llist->MoveCursorToEndOfLine();
|
||||||
|
break;
|
||||||
|
case 'c':
|
||||||
|
if(event.ControlDown())
|
||||||
|
Copy();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
;
|
if( IsEditable() )
|
||||||
}
|
{
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* First, handle control keys */
|
/* First, handle control keys */
|
||||||
if(event.ControlDown() && ! event.AltDown())
|
if(event.ControlDown() && ! event.AltDown())
|
||||||
{
|
{
|
||||||
@@ -302,30 +318,6 @@ wxLayoutWindow::OnChar(wxKeyEvent& event)
|
|||||||
{
|
{
|
||||||
switch(keyCode)
|
switch(keyCode)
|
||||||
{
|
{
|
||||||
case WXK_RIGHT:
|
|
||||||
m_llist->MoveCursorHorizontally(1);
|
|
||||||
break;
|
|
||||||
case WXK_LEFT:
|
|
||||||
m_llist->MoveCursorHorizontally(-1);
|
|
||||||
break;
|
|
||||||
case WXK_UP:
|
|
||||||
m_llist->MoveCursorVertically(-1);
|
|
||||||
break;
|
|
||||||
case WXK_DOWN:
|
|
||||||
m_llist->MoveCursorVertically(1);
|
|
||||||
break;
|
|
||||||
case WXK_PRIOR:
|
|
||||||
m_llist->MoveCursorVertically(-20);
|
|
||||||
break;
|
|
||||||
case WXK_NEXT:
|
|
||||||
m_llist->MoveCursorVertically(20);
|
|
||||||
break;
|
|
||||||
case WXK_HOME:
|
|
||||||
m_llist->MoveCursorToBeginOfLine();
|
|
||||||
break;
|
|
||||||
case WXK_END:
|
|
||||||
m_llist->MoveCursorToEndOfLine();
|
|
||||||
break;
|
|
||||||
case WXK_INSERT:
|
case WXK_INSERT:
|
||||||
if(event.ShiftDown())
|
if(event.ShiftDown())
|
||||||
Paste();
|
Paste();
|
||||||
@@ -357,6 +349,8 @@ wxLayoutWindow::OnChar(wxKeyEvent& event)
|
|||||||
}
|
}
|
||||||
SetDirty();
|
SetDirty();
|
||||||
SetModified();
|
SetModified();
|
||||||
|
}// if(IsEditable())
|
||||||
|
}// first switch()
|
||||||
ScrollToCursor();
|
ScrollToCursor();
|
||||||
wxRect r = *m_llist->GetUpdateRect();
|
wxRect r = *m_llist->GetUpdateRect();
|
||||||
Refresh( FALSE, &r);
|
Refresh( FALSE, &r);
|
||||||
@@ -513,8 +507,10 @@ wxLayoutWindow::InternalPaint(const wxRect *updateRect)
|
|||||||
// update rectangle (although they are drawn on the memDC, this is
|
// update rectangle (although they are drawn on the memDC, this is
|
||||||
// needed to erase it):
|
// needed to erase it):
|
||||||
m_llist->InvalidateUpdateRect();
|
m_llist->InvalidateUpdateRect();
|
||||||
if(IsEditable()) //we draw the cursor
|
m_llist->DrawCursor(*m_memDC,
|
||||||
m_llist->DrawCursor(*m_memDC,m_HaveFocus,offset);
|
m_HaveFocus && IsEditable(), // draw a thick
|
||||||
|
// cursor for editable windows with focus
|
||||||
|
offset);
|
||||||
|
|
||||||
// Now copy everything to the screen:
|
// Now copy everything to the screen:
|
||||||
#if 0
|
#if 0
|
||||||
|
Reference in New Issue
Block a user