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:
Karsten Ballüder
1999-05-12 14:47:25 +00:00
parent 1a78a62905
commit 2184b1a53d
2 changed files with 125 additions and 129 deletions

View File

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

View File

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