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:
Karsten Ballüder
1999-05-12 22:14:51 +00:00
parent 69418a8e47
commit ae2d6d0200
7 changed files with 400 additions and 160 deletions

View File

@@ -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()
{