/////////////////////////////////////////////////////////////////////////////
-// Name: richtext/richeditctrl.cpp
+// Name: src/richtext/richeditctrl.cpp
// Purpose: A rich edit control
// Author: Julian Smart
// Modified by:
#include "wx/wxprec.h"
#ifdef __BORLANDC__
- #pragma hdrstop
+ #pragma hdrstop
#endif
#if wxUSE_RICHTEXT
#include "wx/richtext/richtextctrl.h"
#ifndef WX_PRECOMP
- #include "wx/wx.h"
+ #include "wx/wx.h"
+ #include "wx/settings.h"
#endif
#include "wx/textfile.h"
#include "wx/ffile.h"
-#include "wx/settings.h"
#include "wx/filename.h"
#include "wx/dcbuffer.h"
#include "wx/arrimpl.cpp"
{
wxBufferedPaintDC dc(this, m_bufferBitmap);
//wxLogDebug(wxT("OnPaint"));
-
+
PrepareDC(dc);
-
+
if (m_freezeCount > 0)
return;
-
+
dc.SetFont(GetFont());
-
+
// Paint the background
PaintBackground(dc);
-
+
wxRegion dirtyRegion = GetUpdateRegion();
-
+
wxRect drawingArea(GetLogicalPoint(wxPoint(0, 0)), GetClientSize());
wxRect availableSpace(GetClientSize());
if (GetBuffer().GetDirty())
GetBuffer().SetDirty(false);
SetupScrollbars();
}
-
+
GetBuffer().Draw(dc, GetBuffer().GetRange(), GetSelectionRange(), drawingArea, 0 /* descent */, 0 /* flags */);
}
event.GetKeyCode() == WXK_HOME ||
event.GetKeyCode() == WXK_PAGEUP ||
event.GetKeyCode() == WXK_PAGEDOWN ||
- event.GetKeyCode() == WXK_PRIOR ||
- event.GetKeyCode() == WXK_NEXT ||
event.GetKeyCode() == WXK_END)
{
KeyboardNavigate(event.GetKeyCode(), flags);
+ return;
}
- else if (event.GetKeyCode() == WXK_RETURN)
+
+ // all the other keys modify the controls contents which shouldn't be
+ // possible if we're read-only
+ if ( !IsEditable() )
+ {
+ event.Skip();
+ return;
+ }
+
+ if (event.GetKeyCode() == WXK_RETURN)
{
BeginBatchUndo(_("Insert Text"));
EndBatchUndo();
SetDefaultStyleToCursorStyle();
+
+ ScrollIntoView(m_caretPosition, WXK_RIGHT);
}
else if (event.GetKeyCode() == WXK_BACK)
{
SetDefaultStyleToCursorStyle();
}
+ ScrollIntoView(m_caretPosition, WXK_LEFT);
}
else if (event.GetKeyCode() == WXK_DELETE)
{
EndBatchUndo();
SetDefaultStyleToCursorStyle();
+ ScrollIntoView(m_caretPosition, WXK_RIGHT);
}
-#if 0
- else
- event.Skip();
-#endif
}
/// Delete content if there is a selection, e.g. when pressing a key.
else
success = MoveDown(1, flags);
}
- else if (keyCode == WXK_PAGEUP || keyCode == WXK_PRIOR)
+ else if (keyCode == WXK_PAGEUP)
{
success = PageUp(1, flags);
}
- else if (keyCode == WXK_PAGEDOWN || keyCode == WXK_NEXT)
+ else if (keyCode == WXK_PAGEDOWN)
{
success = PageDown(1, flags);
}
startX = 0;
startY = startY * ppuY;
- int sx, sy;
+ int sx = 0, sy = 0;
GetVirtualSize(& sx, & sy);
sx = 0;
if (ppuY != 0)
wxSize clientSize = GetClientSize();
// Going down
- if (keyCode == WXK_DOWN || keyCode == WXK_RIGHT || keyCode == WXK_END || keyCode == WXK_NEXT || keyCode == WXK_PAGEDOWN)
+ if (keyCode == WXK_DOWN || keyCode == WXK_RIGHT || keyCode == WXK_END || keyCode == WXK_PAGEDOWN)
{
if ((rect.y + rect.height) > (clientSize.y + startY))
{
}
}
// Going up
- else if (keyCode == WXK_UP || keyCode == WXK_LEFT || keyCode == WXK_HOME || keyCode == WXK_PRIOR || keyCode == WXK_PAGEUP)
+ else if (keyCode == WXK_UP || keyCode == WXK_LEFT || keyCode == WXK_HOME || keyCode == WXK_PAGEUP )
{
if (rect.y < startY)
{
startX = 0;
startY = startY * ppuY;
- int sx, sy;
+ int sx = 0, sy = 0;
GetVirtualSize(& sx, & sy);
sx = 0;
if (ppuY != 0)
Refresh(false);
return true;
}
- else
- return false;
+
+ return false;
}
/// Move to the end of the paragraph
}
// do the window-specific processing after processing the update event
+#if !wxRICHTEXT_DERIVES_FROM_TEXTCTRLBASE
void wxRichTextCtrl::DoUpdateWindowUI(wxUpdateUIEvent& event)
{
- if ( event.GetSetEnabled() )
- Enable(event.GetEnabled());
+ // call inherited
+ wxWindowBase::DoUpdateWindowUI(event);
+ // update text
if ( event.GetSetText() )
{
if ( event.GetText() != GetValue() )
SetValue(event.GetText());
}
}
+#endif // !wxRICHTEXT_DERIVES_FROM_TEXTCTRLBASE
// ----------------------------------------------------------------------------
// hit testing
((wxRichTextCtrl*)this)->PrepareDC(dc);
int hit = ((wxRichTextCtrl*)this)->GetBuffer().HitTest(dc, pt, *pos);
- if (hit == wxRICHTEXT_HITTEST_BEFORE)
- return wxTE_HT_BEFORE;
- else if (hit == wxRICHTEXT_HITTEST_AFTER)
- return wxTE_HT_BEYOND;
- else if (hit == wxRICHTEXT_HITTEST_ON)
- return wxTE_HT_ON_TEXT;
- else
- return wxTE_HT_UNKNOWN;
+
+ switch ( hit )
+ {
+ case wxRICHTEXT_HITTEST_BEFORE:
+ return wxTE_HT_BEFORE;
+
+ case wxRICHTEXT_HITTEST_AFTER:
+ return wxTE_HT_BEYOND;
+
+ case wxRICHTEXT_HITTEST_ON:
+ return wxTE_HT_ON_TEXT;
+ }
+
+ return wxTE_HT_UNKNOWN;
}
// ----------------------------------------------------------------------------
wxImage image2 = image;
if (imageBlock.MakeImageBlock(image2, bitmapType))
return WriteImage(imageBlock);
- else
- return false;
+
+ return false;
}
bool wxRichTextCtrl::WriteImage(const wxString& filename, int bitmapType)
wxImage image;
if (imageBlock.MakeImageBlock(filename, bitmapType, image, false))
return WriteImage(imageBlock);
- else
- return false;
+
+ return false;
}
bool wxRichTextCtrl::WriteImage(const wxRichTextImageBlock& imageBlock)
wxImage image = bitmap.ConvertToImage();
if (image.Ok() && imageBlock.MakeImageBlock(image, bitmapType))
return WriteImage(imageBlock);
- else
- return false;
}
+
return false;
}
rect = wxRect(pt, wxSize(wxRICHTEXT_DEFAULT_CARET_WIDTH, height));
return true;
}
- else
- return false;
+
+ return false;
}
/// Gets the line for the visible caret position. If the caret is
flags |= wxRICHTEXT_LAYOUT_SPECIFIED_RECT;
availableSpace.SetPosition(GetLogicalPoint(wxPoint(0, 0)));
}
-
+
wxClientDC dc(this);
dc.SetFont(GetFont());
-
+
PrepareDC(dc);
-
+
GetBuffer().Defragment();
GetBuffer().UpdateRanges(); // If items were deleted, ranges need recalculation
GetBuffer().Layout(dc, availableSpace, flags);
GetBuffer().SetDirty(false);
-
+
if (!IsFrozen())
SetupScrollbars();
}
SetDefaultStyle(attr);
return true;
}
- else
- return false;
+
+ return false;
}
/// Returns the first visible position in the current view
#endif
// wxUSE_RICHTEXT
-