+void Ruler::mouseMoveEvent(QMouseEvent *e)
+{
+ if (!_grabbed_marker)
+ return;
+
+ _grabbed_marker->set_time(_view.offset() +
+ ((double)e->x() + 0.5) * _view.scale());
+}
+
+void Ruler::mousePressEvent(QMouseEvent *e)
+{
+ if (e->buttons() & Qt::LeftButton) {
+ _grabbed_marker = NULL;
+
+ if (_view.cursors_shown()) {
+ std::pair<Cursor, Cursor> &cursors =
+ _view.cursors();
+ if (cursors.first.get_label_rect(
+ rect()).contains(e->pos()))
+ _grabbed_marker = &cursors.first;
+ else if (cursors.second.get_label_rect(
+ rect()).contains(e->pos()))
+ _grabbed_marker = &cursors.second;
+ }
+ }
+}
+
+void Ruler::mouseReleaseEvent(QMouseEvent *)
+{
+ _grabbed_marker = NULL;
+}
+
+QString Ruler::format_time(double t, double multiplier,
+ unsigned int prefix)
+{
+ QString s;
+ QTextStream ts(&s);
+ ts.setRealNumberPrecision(0);
+ ts << fixed << forcesign << (t * multiplier) <<
+ SIPrefixes[prefix] << "s";
+ return s;
+}
+