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
|
||||
{
|
||||
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+m_CursorSize.x, coords.y+m_CursorSize.y-1);
|
||||
SetUpdateRect(coords.x, coords.y);
|
||||
}
|
||||
dc.SetLogicalFunction(wxCOPY);
|
||||
//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)
|
||||
{
|
||||
case WXK_RIGHT:
|
||||
m_llist->MoveCursorHorizontally(1);
|
||||
break;
|
||||
case WXK_LEFT:
|
||||
m_llist->MoveCursorHorizontally(-1);
|
||||
break;
|
||||
case WXK_UP:
|
||||
m_llist->MoveCursorVertically(-1);
|
||||
break;
|
||||
@@ -245,12 +254,19 @@ wxLayoutWindow::OnChar(wxKeyEvent& event)
|
||||
case WXK_NEXT:
|
||||
m_llist->MoveCursorVertically(20);
|
||||
break;
|
||||
case WXK_HOME:
|
||||
m_llist->MoveCursorToBeginOfLine();
|
||||
break;
|
||||
case WXK_END:
|
||||
m_llist->MoveCursorToEndOfLine();
|
||||
break;
|
||||
case 'c':
|
||||
if(event.ControlDown())
|
||||
Copy();
|
||||
break;
|
||||
default:
|
||||
;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if( IsEditable() )
|
||||
{
|
||||
/* First, handle control keys */
|
||||
if(event.ControlDown() && ! event.AltDown())
|
||||
{
|
||||
@@ -302,30 +318,6 @@ wxLayoutWindow::OnChar(wxKeyEvent& event)
|
||||
{
|
||||
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:
|
||||
if(event.ShiftDown())
|
||||
Paste();
|
||||
@@ -357,6 +349,8 @@ wxLayoutWindow::OnChar(wxKeyEvent& event)
|
||||
}
|
||||
SetDirty();
|
||||
SetModified();
|
||||
}// if(IsEditable())
|
||||
}// first switch()
|
||||
ScrollToCursor();
|
||||
wxRect r = *m_llist->GetUpdateRect();
|
||||
Refresh( FALSE, &r);
|
||||
@@ -513,8 +507,10 @@ wxLayoutWindow::InternalPaint(const wxRect *updateRect)
|
||||
// update rectangle (although they are drawn on the memDC, this is
|
||||
// needed to erase it):
|
||||
m_llist->InvalidateUpdateRect();
|
||||
if(IsEditable()) //we draw the cursor
|
||||
m_llist->DrawCursor(*m_memDC,m_HaveFocus,offset);
|
||||
m_llist->DrawCursor(*m_memDC,
|
||||
m_HaveFocus && IsEditable(), // draw a thick
|
||||
// cursor for editable windows with focus
|
||||
offset);
|
||||
|
||||
// Now copy everything to the screen:
|
||||
#if 0
|
||||
|
Reference in New Issue
Block a user