aboutsummaryrefslogtreecommitdiffhomepage
path: root/qt
diff options
context:
space:
mode:
Diffstat (limited to 'qt')
-rw-r--r--qt/ScintillaEditBase/ScintillaQt.cpp66
-rw-r--r--qt/ScintillaEditBase/ScintillaQt.h10
2 files changed, 50 insertions, 26 deletions
diff --git a/qt/ScintillaEditBase/ScintillaQt.cpp b/qt/ScintillaEditBase/ScintillaQt.cpp
index 3d727900b..c2b250a3e 100644
--- a/qt/ScintillaEditBase/ScintillaQt.cpp
+++ b/qt/ScintillaEditBase/ScintillaQt.cpp
@@ -44,19 +44,20 @@ ScintillaQt::ScintillaQt(QAbstractScrollArea *parent)
WndProc(SCI_SETBUFFEREDDRAW, false, 0);
Initialise();
+
+ for (TickReason tr = tickCaret; tr <= tickDwell; tr = static_cast<TickReason>(tr + 1)) {
+ timers[tr] = 0;
+ }
}
ScintillaQt::~ScintillaQt()
{
- SetTicking(false);
+ for (TickReason tr = tickCaret; tr <= tickDwell; tr = static_cast<TickReason>(tr + 1)) {
+ FineTickerCancel(tr);
+ }
SetIdle(false);
}
-void ScintillaQt::tick()
-{
- Tick();
-}
-
void ScintillaQt::execCommand(QAction *action)
{
int command = action->data().toInt();
@@ -148,7 +149,9 @@ void ScintillaQt::Initialise()
void ScintillaQt::Finalise()
{
- SetTicking(false);
+ for (TickReason tr = tickCaret; tr <= tickDwell; tr = static_cast<TickReason>(tr + 1)) {
+ FineTickerCancel(tr);
+ }
ScintillaBase::Finalise();
}
@@ -396,25 +399,31 @@ void ScintillaQt::NotifyParent(SCNotification scn)
emit notifyParent(scn);
}
-void ScintillaQt::SetTicking(bool on)
+/**
+* Report that this Editor subclass has a working implementation of FineTickerStart.
+*/
+bool ScintillaQt::FineTickerAvailable()
{
- QTimer *qTimer;
- if (timer.ticking != on) {
- timer.ticking = on;
- if (timer.ticking) {
- qTimer = new QTimer;
- connect(qTimer, SIGNAL(timeout()), this, SLOT(tick()));
- qTimer->start(timer.tickSize);
- timer.tickerID = qTimer;
- } else {
- qTimer = static_cast<QTimer *>(timer.tickerID);
- qTimer->stop();
- disconnect(qTimer, SIGNAL(timeout()), 0, 0);
- delete qTimer;
- timer.tickerID = 0;
- }
+ return true;
+}
+
+bool ScintillaQt::FineTickerRunning(TickReason reason)
+{
+ return timers[reason] != 0;
+}
+
+void ScintillaQt::FineTickerStart(TickReason reason, int millis, int /* tolerance */)
+{
+ FineTickerCancel(reason);
+ timers[reason] = startTimer(millis);
+}
+
+void ScintillaQt::FineTickerCancel(TickReason reason)
+{
+ if (timers[reason]) {
+ killTimer(timers[reason]);
+ timers[reason] = 0;
}
- timer.ticksToWait = caret.period;
}
void ScintillaQt::onIdle()
@@ -740,3 +749,12 @@ void ScintillaQt::Drop(const Point &point, const QMimeData *data, bool move)
DropAt(movePos, bytes, len, move, rectangular);
}
+
+void ScintillaQt::timerEvent(QTimerEvent *event)
+{
+ for (TickReason tr=tickCaret; tr<=tickDwell; tr = static_cast<TickReason>(tr+1)) {
+ if (timers[tr] == event->timerId()) {
+ TickFor(tr);
+ }
+ }
+}
diff --git a/qt/ScintillaEditBase/ScintillaQt.h b/qt/ScintillaEditBase/ScintillaQt.h
index ff4d65992..16bafbf7c 100644
--- a/qt/ScintillaEditBase/ScintillaQt.h
+++ b/qt/ScintillaEditBase/ScintillaQt.h
@@ -14,6 +14,7 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
+#include <assert.h>
#include <ctype.h>
#include <time.h>
#include <string>
@@ -88,7 +89,6 @@ signals:
void command(uptr_t wParam, sptr_t lParam);
private slots:
- void tick();
void onIdle();
void execCommand(QAction *action);
void SelectionChanged();
@@ -114,7 +114,11 @@ private:
virtual void NotifyChange();
virtual void NotifyFocus(bool focus);
virtual void NotifyParent(SCNotification scn);
- virtual void SetTicking(bool on);
+ int timers[tickDwell+1];
+ virtual bool FineTickerAvailable();
+ virtual bool FineTickerRunning(TickReason reason);
+ virtual void FineTickerStart(TickReason reason, int millis, int tolerance);
+ virtual void FineTickerCancel(TickReason reason);
virtual bool SetIdle(bool on);
virtual void SetMouseCapture(bool on);
virtual bool HaveMouseCapture();
@@ -143,6 +147,8 @@ protected:
void DragLeave();
void Drop(const Point &point, const QMimeData *data, bool move);
+ void timerEvent(QTimerEvent *event);
+
private:
QAbstractScrollArea *scrollArea;