#include <extdef.h>
-#include <QApplication>
#include <QFontMetrics>
#include <QMenu>
#include <QMouseEvent>
connect(set_zero_position, SIGNAL(triggered()), this, SLOT(on_setZeroPosition()));
menu->addAction(set_zero_position);
+ if (view_.zero_offset().convert_to<double>() != 0) {
+ QAction *const reset_zero_position = new QAction(tr("Reset zero point"), this);
+ connect(reset_zero_position, SIGNAL(triggered()), this, SLOT(on_resetZeroPosition()));
+ menu->addAction(reset_zero_position);
+ }
+
QAction *const toggle_hover_marker = new QAction(this);
connect(toggle_hover_marker, SIGNAL(triggered()), this, SLOT(on_toggleHoverMarker()));
menu->addAction(toggle_hover_marker);
void Ruler::item_hover(const shared_ptr<ViewItem> &item, QPoint pos)
{
- Q_UNUSED(pos);
+ (void)pos;
+
hover_item_ = dynamic_pointer_cast<TimeItem>(item);
}
-shared_ptr<TimeItem> Ruler::get_reference_item()
+shared_ptr<TimeItem> Ruler::get_reference_item() const
{
+ // Note: time() returns 0 if item returns no valid time
+
if (mouse_modifiers_ & Qt::ShiftModifier)
return nullptr;
- if (hover_item_ != nullptr)
+ if (hover_item_ && (hover_item_->time() != 0))
return hover_item_;
- shared_ptr<TimeItem> found(nullptr);
+ shared_ptr<TimeItem> ref_item;
const vector< shared_ptr<TimeItem> > items(view_.time_items());
+
for (auto i = items.rbegin(); i != items.rend(); i++) {
if ((*i)->enabled() && (*i)->selected()) {
- if (found == nullptr)
- found = *i;
- else
- return nullptr; // Return null if multiple items are selected
+ if (!ref_item)
+ ref_item = *i;
+ else {
+ // Return nothing if multiple items are selected
+ ref_item.reset();
+ break;
+ }
}
}
- return found;
+ if (ref_item && (ref_item->time() == 0))
+ ref_item.reset();
+
+ return ref_item;
}
shared_ptr<ViewItem> Ruler::get_mouse_over_item(const QPoint &pt)
{
const vector< shared_ptr<TimeItem> > items(view_.time_items());
+
for (auto i = items.rbegin(); i != items.rend(); i++)
if ((*i)->enabled() && (*i)->label_rect(rect()).contains(pt))
return *i;
+
return nullptr;
}
const int rightedge = width();
const int x_tick = tick.first;
if ((x_tick > leftedge) && (x_tick < rightedge)) {
- const int x_left_bound = QFontMetrics(font()).width(tick.second) / 2;
+ const int x_left_bound = util::text_width(QFontMetrics(font()), tick.second) / 2;
const int x_right_bound = rightedge - x_left_bound;
const int x_legend = min(max(x_tick, x_left_bound), x_right_bound);
p.drawText(x_legend, ValueMargin, 0, text_height,
view_.set_zero_position(get_absolute_time_from_x_pos(mouse_down_point_.x()));
}
+void Ruler::on_resetZeroPosition()
+{
+ view_.reset_zero_position();
+}
+
void Ruler::on_toggleHoverMarker()
{
GlobalSettings settings;