Modified font handling (on the way to real rtf editing...)
Selections are better but still buggy, list size does not get calculated completely, end of list only appears after multiple edits. ??? git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2438 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -105,6 +105,28 @@ wxLayoutWindow::~wxLayoutWindow()
|
||||
SetBackgroundBitmap(NULL);
|
||||
}
|
||||
|
||||
void
|
||||
wxLayoutWindow::Clear(int family,
|
||||
int size,
|
||||
int style,
|
||||
int weight,
|
||||
int underline,
|
||||
wxColour *fg,
|
||||
wxColour *bg)
|
||||
{
|
||||
GetLayoutList()->Clear(family,size,style,weight,underline,fg,bg);
|
||||
SetBackgroundColour(*GetLayoutList()->GetDefaults()->GetBGColour());
|
||||
ResizeScrollbars(true);
|
||||
SetDirty();
|
||||
SetModified(false);
|
||||
wxRect r;
|
||||
int w,h;
|
||||
r.x = r.y = 0; GetSize(&w,&h);
|
||||
r.width = w;
|
||||
r.height = h;
|
||||
DoPaint(&r);
|
||||
}
|
||||
|
||||
#ifdef __WXMSW__
|
||||
long
|
||||
wxLayoutWindow::MSWGetDlgCode()
|
||||
@@ -193,40 +215,35 @@ wxLayoutWindow::OnMouse(int eventId, wxMouseEvent& event)
|
||||
void
|
||||
wxLayoutWindow::OnChar(wxKeyEvent& event)
|
||||
{
|
||||
int keyCode = event.KeyCode();
|
||||
|
||||
#ifdef WXLAYOUT_DEBUG
|
||||
if(event.KeyCode() == WXK_F1)
|
||||
if(keyCode == WXK_F1)
|
||||
{
|
||||
m_llist->Debug();
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
long keyCode = event.KeyCode();
|
||||
if(m_Selecting && ! event.ShiftDown())
|
||||
|
||||
if(! m_Selecting && event.ShiftDown())
|
||||
{
|
||||
m_llist->EndSelection();
|
||||
m_Selecting = false;
|
||||
}
|
||||
else
|
||||
if(! m_Selecting && event.ShiftDown())
|
||||
switch(keyCode)
|
||||
{
|
||||
switch(keyCode)
|
||||
{
|
||||
case WXK_UP:
|
||||
case WXK_DOWN:
|
||||
case WXK_RIGHT:
|
||||
case WXK_LEFT:
|
||||
case WXK_PRIOR:
|
||||
case WXK_NEXT:
|
||||
case WXK_HOME:
|
||||
case WXK_END:
|
||||
m_Selecting = true;
|
||||
m_llist->StartSelection();
|
||||
break;
|
||||
default:
|
||||
;
|
||||
}
|
||||
case WXK_UP:
|
||||
case WXK_DOWN:
|
||||
case WXK_RIGHT:
|
||||
case WXK_LEFT:
|
||||
case WXK_PRIOR:
|
||||
case WXK_NEXT:
|
||||
case WXK_HOME:
|
||||
case WXK_END:
|
||||
m_Selecting = true;
|
||||
m_llist->StartSelection();
|
||||
break;
|
||||
default:
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
/* These two nested switches work like this:
|
||||
The first one processes all non-editing keycodes, to move the
|
||||
@@ -348,6 +365,17 @@ wxLayoutWindow::OnChar(wxKeyEvent& event)
|
||||
SetModified();
|
||||
}// if(IsEditable())
|
||||
}// first switch()
|
||||
if(m_Selecting)
|
||||
{
|
||||
if(event.ShiftDown())
|
||||
m_llist->ContinueSelection();
|
||||
else
|
||||
{
|
||||
m_llist->EndSelection();
|
||||
m_Selecting = false;
|
||||
}
|
||||
}
|
||||
|
||||
ScrollToCursor();
|
||||
wxRect r = *m_llist->GetUpdateRect();
|
||||
DoPaint(&r);
|
||||
@@ -445,8 +473,10 @@ wxLayoutWindow::InternalPaint(const wxRect *updateRect)
|
||||
updateRect->y+updateRect->height));
|
||||
|
||||
if(IsDirty())
|
||||
{
|
||||
//FIXME m_llist->Layout(dc);
|
||||
ResizeScrollbars();
|
||||
|
||||
}
|
||||
/* Check whether the window has grown, if so, we need to reallocate
|
||||
the bitmap to be larger. */
|
||||
if(x1 > m_bitmapSize.x || y1 > m_bitmapSize.y)
|
||||
@@ -462,8 +492,8 @@ wxLayoutWindow::InternalPaint(const wxRect *updateRect)
|
||||
}
|
||||
|
||||
m_memDC->SetDeviceOrigin(0,0);
|
||||
m_memDC->SetBrush(wxBrush(m_llist->GetDefaults()->GetBGColour(),wxSOLID));
|
||||
m_memDC->SetPen(wxPen(m_llist->GetDefaults()->GetBGColour(),
|
||||
m_memDC->SetBrush(wxBrush(*m_llist->GetDefaults()->GetBGColour(),wxSOLID));
|
||||
m_memDC->SetPen(wxPen(*m_llist->GetDefaults()->GetBGColour(),
|
||||
0,wxTRANSPARENT));
|
||||
m_memDC->SetLogicalFunction(wxCOPY);
|
||||
|
||||
@@ -489,10 +519,12 @@ wxLayoutWindow::InternalPaint(const wxRect *updateRect)
|
||||
|
||||
|
||||
/* This is the important bit: we tell the list to draw itself: */
|
||||
#if WXLO_DEBUG_URECT
|
||||
WXLO_DEBUG(("Update rect: %ld,%ld / %ld,%ld",
|
||||
updateRect->x, updateRect->y,
|
||||
updateRect->x+updateRect->width,
|
||||
updateRect->y+updateRect->height));
|
||||
#endif
|
||||
|
||||
// Device origins on the memDC are suspect, we translate manually
|
||||
// with the translate parameter of Draw().
|
||||
@@ -592,6 +624,13 @@ wxLayoutWindow::Paste(void)
|
||||
bool
|
||||
wxLayoutWindow::Copy(void)
|
||||
{
|
||||
// Calling GetSelection() will automatically do an EndSelection()
|
||||
// on the list, but we need to take a note of it, too:
|
||||
if(m_Selecting)
|
||||
{
|
||||
m_Selecting = false;
|
||||
m_llist->EndSelection();
|
||||
}
|
||||
wxLayoutList *llist = m_llist->GetSelection();
|
||||
if(! llist)
|
||||
return FALSE;
|
||||
@@ -606,6 +645,16 @@ wxLayoutWindow::Copy(void)
|
||||
delete export;
|
||||
}
|
||||
delete llist;
|
||||
|
||||
// The exporter always appends a newline, so we chop it off if it
|
||||
// is there:
|
||||
{
|
||||
size_t len = text.Length();
|
||||
if(len > 2 && text[len-2] == '\r') // Windows
|
||||
text = text.Mid(0,len-2);
|
||||
else if(len > 1 && text[len-1] == '\n')
|
||||
text = text.Mid(0,len-1);
|
||||
}
|
||||
|
||||
// Read some text
|
||||
if (wxTheClipboard->Open())
|
||||
@@ -618,6 +667,18 @@ wxLayoutWindow::Copy(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool
|
||||
wxLayoutWindow::Cut(void)
|
||||
{
|
||||
if(Copy())
|
||||
{
|
||||
m_llist->DeleteSelection();
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
wxMenu *
|
||||
wxLayoutWindow::MakeFormatMenu()
|
||||
{
|
||||
|
Reference in New Issue
Block a user