diff options
Diffstat (limited to 'qt/ScintillaEditBase/ScintillaQt.cpp')
| -rw-r--r-- | qt/ScintillaEditBase/ScintillaQt.cpp | 66 | 
1 files changed, 42 insertions, 24 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); +		} +	} +} | 
