SetupScrollbars();
}
- GetBuffer().Draw(dc, GetBuffer().GetRange(), GetSelectionRange(), drawingArea, 0 /* descent */, 0 /* flags */);
+ GetBuffer().Draw(dc, GetBuffer().GetRange(), GetInternalSelectionRange(), drawingArea, 0 /* descent */, 0 /* flags */);
}
if (GetCaret())
void wxRichTextCtrl::SelectAll()
{
- SetSelection(0, GetLastPosition());
+ SetSelection(0, GetLastPosition()+1);
m_selectionAnchor = -1;
}
wxString wxRichTextCtrl::GetRange(long from, long to) const
{
- return GetBuffer().GetTextForRange(wxRichTextRange(from, to));
+ // Public API for range is different from internals
+ return GetBuffer().GetTextForRange(wxRichTextRange(from, to-1));
}
void wxRichTextCtrl::SetValue(const wxString& value)
{
*from = m_selectionRange.GetStart();
*to = m_selectionRange.GetEnd();
+ if ((*to) != -1 && (*to) != -2)
+ (*to) ++;
}
bool wxRichTextCtrl::IsEditable() const
if ( (from == -1) && (to == -1) )
{
from = 0;
- to = GetLastPosition();
+ to = GetLastPosition()+1;
}
DoSetSelection(from, to);
void wxRichTextCtrl::DoSetSelection(long from, long to, bool WXUNUSED(scrollCaret))
{
m_selectionAnchor = from;
- m_selectionRange.SetRange(from, to);
+ m_selectionRange.SetRange(from, to-1);
Refresh(false);
PositionCaret();
}
bool wxRichTextCtrl::SetStyle(long start, long end, const wxTextAttrEx& style)
{
- return GetBuffer().SetStyle(wxRichTextRange(start, end), style);
+ return GetBuffer().SetStyle(wxRichTextRange(start, end-1), style);
}
bool wxRichTextCtrl::SetStyle(long start, long end, const wxTextAttr& style)
{
- return GetBuffer().SetStyle(wxRichTextRange(start, end), wxTextAttrEx(style));
+ return GetBuffer().SetStyle(wxRichTextRange(start, end-1), wxTextAttrEx(style));
}
bool wxRichTextCtrl::SetStyle(const wxRichTextRange& range, const wxRichTextAttr& style)
{
- return GetBuffer().SetStyle(range, style);
+ return GetBuffer().SetStyle(range.ToInternal(), style);
}
bool wxRichTextCtrl::SetDefaultStyle(const wxTextAttrEx& style)
return GetBuffer().GetDefaultStyle();
}
-bool wxRichTextCtrl::GetStyle(long position, wxTextAttr& style) const
+bool wxRichTextCtrl::GetStyle(long position, wxTextAttr& style)
{
wxTextAttrEx attr;
if (GetBuffer().GetStyle(position, attr))
return false;
}
-bool wxRichTextCtrl::GetStyle(long position, wxTextAttrEx& style) const
+bool wxRichTextCtrl::GetStyle(long position, wxTextAttrEx& style)
{
return GetBuffer().GetStyle(position, style);
}
-bool wxRichTextCtrl::GetStyle(long position, wxRichTextAttr& style) const
+bool wxRichTextCtrl::GetStyle(long position, wxRichTextAttr& style)
{
return GetBuffer().GetStyle(position, style);
}
}
/// Is all of the selection bold?
-bool wxRichTextCtrl::IsSelectionBold() const
+bool wxRichTextCtrl::IsSelectionBold()
{
if (HasSelection())
{
wxRichTextAttr attr;
- wxRichTextRange range = GetSelectionRange();
+ wxRichTextRange range = GetInternalSelectionRange();
attr.SetFlags(wxTEXT_ATTR_FONT_WEIGHT);
attr.SetFontWeight(wxBOLD);
}
/// Is all of the selection italics?
-bool wxRichTextCtrl::IsSelectionItalics() const
+bool wxRichTextCtrl::IsSelectionItalics()
{
if (HasSelection())
{
- wxRichTextRange range = GetSelectionRange();
+ wxRichTextRange range = GetInternalSelectionRange();
wxRichTextAttr attr;
attr.SetFlags(wxTEXT_ATTR_FONT_ITALIC);
attr.SetFontStyle(wxITALIC);
}
/// Is all of the selection underlined?
-bool wxRichTextCtrl::IsSelectionUnderlined() const
+bool wxRichTextCtrl::IsSelectionUnderlined()
{
if (HasSelection())
{
- wxRichTextRange range = GetSelectionRange();
+ wxRichTextRange range = GetInternalSelectionRange();
wxRichTextAttr attr;
attr.SetFlags(wxTEXT_ATTR_FONT_UNDERLINE);
attr.SetFontUnderlined(true);
}
/// Is all of the selection aligned according to the specified flag?
-bool wxRichTextCtrl::IsSelectionAligned(wxTextAttrAlignment alignment) const
+bool wxRichTextCtrl::IsSelectionAligned(wxTextAttrAlignment alignment)
{
if (HasSelection())
{
- wxRichTextRange range = GetSelectionRange();
+ wxRichTextRange range = GetInternalSelectionRange();
wxRichTextAttr attr;
attr.SetAlignment(alignment);
{
wxRichTextParagraph* para = GetBuffer().GetParagraphAtPosition(GetCaretPosition()+1);
if (para)
- return SetStyle(para->GetRange(), attr);
+ return SetStyle(para->GetRange().FromInternal(), attr);
}
return true;
}
return caretPos;
}
+/// Get/set the selection range in character positions. -1, -1 means no selection.
+/// The range is in API convention, i.e. a single character selection is denoted
+/// by (n, n+1)
+wxRichTextRange wxRichTextCtrl::GetSelectionRange() const
+{
+ wxRichTextRange range = GetInternalSelectionRange();
+ if (range != wxRichTextRange(-2,-2) && range != wxRichTextRange(-1,-1))
+ range.SetEnd(range.GetEnd() + 1);
+ return range;
+}
+
+void wxRichTextCtrl::SetSelectionRange(const wxRichTextRange& range)
+{
+ wxRichTextRange range1(range);
+ if (range1 != wxRichTextRange(-2,-2) && range1 != wxRichTextRange(-1,-1) )
+ range1.SetEnd(range1.GetEnd() - 1);
+
+ wxASSERT( range1.GetStart() > range1.GetEnd() );
+
+ SetInternalSelectionRange(range1);
+}
+
#endif
// wxUSE_RICHTEXT