#include "wx/settings.h"
#endif
+#include "wx/timer.h"
#include "wx/textfile.h"
#include "wx/ffile.h"
#include "wx/filename.h"
* wxRICHTEXT_USE_OWN_CARET is set in richtextbuffer.h.
*/
+class wxRichTextCaret;
+class wxRichTextCaretTimer: public wxTimer
+{
+ public:
+ wxRichTextCaretTimer(wxRichTextCaret* caret)
+ {
+ m_caret = caret;
+ }
+ virtual void Notify();
+ wxRichTextCaret* m_caret;
+};
+
class wxRichTextCaret: public wxCaret
{
public:
// ctors
// -----
// default - use Create()
- wxRichTextCaret() { Init(); }
+ wxRichTextCaret(): m_timer(this) { Init(); }
// creates a block caret associated with the given window
wxRichTextCaret(wxRichTextCtrl *window, int width, int height)
- : wxCaret(window, width, height) { Init(); m_richTextCtrl = window; }
+ : wxCaret(window, width, height), m_timer(this) { Init(); m_richTextCtrl = window; }
wxRichTextCaret(wxRichTextCtrl *window, const wxSize& size)
- : wxCaret(window, size) { Init(); m_richTextCtrl = window; }
+ : wxCaret(window, size), m_timer(this) { Init(); m_richTextCtrl = window; }
virtual ~wxRichTextCaret();
bool GetNeedsUpdate() const { return m_needsUpdate; }
void SetNeedsUpdate(bool needsUpdate = true ) { m_needsUpdate = needsUpdate; }
+ void Notify();
+
protected:
virtual void DoShow();
virtual void DoHide();
m_yOld;
bool m_hasFocus; // true => our window has focus
bool m_needsUpdate; // must be repositioned
-
+ bool m_flashOn;
+ wxRichTextCaretTimer m_timer;
wxRichTextCtrl* m_richTextCtrl;
};
#endif
if (event.GetEventType() == wxEVT_KEY_DOWN)
{
- if (event.GetKeyCode() == WXK_LEFT ||
- event.GetKeyCode() == WXK_RIGHT ||
- event.GetKeyCode() == WXK_UP ||
- event.GetKeyCode() == WXK_DOWN ||
- event.GetKeyCode() == WXK_HOME ||
- event.GetKeyCode() == WXK_PAGEUP ||
- event.GetKeyCode() == WXK_PAGEDOWN ||
- event.GetKeyCode() == WXK_END ||
-
- event.GetKeyCode() == WXK_NUMPAD_LEFT ||
- event.GetKeyCode() == WXK_NUMPAD_RIGHT ||
- event.GetKeyCode() == WXK_NUMPAD_UP ||
- event.GetKeyCode() == WXK_NUMPAD_DOWN ||
- event.GetKeyCode() == WXK_NUMPAD_HOME ||
- event.GetKeyCode() == WXK_NUMPAD_PAGEUP ||
- event.GetKeyCode() == WXK_NUMPAD_PAGEDOWN ||
- event.GetKeyCode() == WXK_NUMPAD_END)
+ if (event.IsKeyInCategory(WXK_CATEGORY_NAVIGATION))
{
KeyboardNavigate(event.GetKeyCode(), flags);
return;
case WXK_NUMPAD_END:
case WXK_NUMPAD_BEGIN:
case WXK_NUMPAD_INSERT:
- case WXK_NUMPAD_DELETE:
case WXK_WINDOWS_LEFT:
{
return;
m_caretPosition = pos - 1;
PositionCaret();
+
+ SetDefaultStyleToCursorStyle();
}
void wxRichTextCtrl::SetInsertionPointEnd()
m_yOld = -1;
m_richTextCtrl = NULL;
m_needsUpdate = false;
+ m_flashOn = true;
}
wxRichTextCaret::~wxRichTextCaret()
{
+ if (m_timer.IsRunning())
+ m_timer.Stop();
}
// ----------------------------------------------------------------------------
void wxRichTextCaret::DoShow()
{
+ m_flashOn = true;
+
+ if (!m_timer.IsRunning())
+ m_timer.Start(GetBlinkTime());
+
Refresh();
}
void wxRichTextCaret::DoHide()
{
+ if (m_timer.IsRunning())
+ m_timer.Stop();
+
Refresh();
}
dc->SetBrush(*(m_hasFocus ? wxBLACK_BRUSH : wxTRANSPARENT_BRUSH));
dc->SetPen(*wxBLACK_PEN);
- // VZ: unfortunately, the rectangle comes out a pixel smaller when this is
- // done under wxGTK - no idea why
- //dc->SetLogicalFunction(wxINVERT);
-
wxPoint pt(m_x, m_y);
if (m_richTextCtrl)
{
pt = m_richTextCtrl->GetLogicalPoint(pt);
}
- dc->DrawRectangle(pt.x, pt.y, m_width, m_height);
+ if (IsVisible() && m_flashOn)
+ dc->DrawRectangle(pt.x, pt.y, m_width, m_height);
+}
+
+void wxRichTextCaret::Notify()
+{
+ m_flashOn = !m_flashOn;
+ Refresh();
+}
+
+void wxRichTextCaretTimer::Notify()
+{
+ m_caret->Notify();
}
#endif
// wxRICHTEXT_USE_OWN_CARET