#include <QApplication>
#include <QFontMetrics>
+#include <QMenu>
#include <QMouseEvent>
#include "ruler.hpp"
ViewItem::HighlightRadius);
}
+shared_ptr<TimeItem> 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;
+}
+
void Ruler::paintEvent(QPaintEvent*)
{
const int ValueMargin = 3;
// Do the drag
dragging_ = true;
- const int delta = e->pos().x() - mouse_down_point_.x();
+ const QPoint delta = e->pos() - mouse_down_point_;
const vector< shared_ptr<TimeItem> > items(view_.time_items());
for (auto &i : items)
if (i->dragging())
- i->set_time(view_.offset() +
- (i->drag_point().x() + delta - 0.5) *
- view_.scale());
+ i->drag_by(delta);
}
void Ruler::mousePressEvent(QMouseEvent *e)
{
if (e->buttons() & Qt::LeftButton) {
mouse_down_point_ = e->pos();
-
- mouse_down_item_.reset();
+ mouse_down_item_ = get_mouse_over_item(e->pos());
clear_selection();
- const vector< shared_ptr<TimeItem> > items(view_.time_items());
- for (auto i = items.rbegin(); i != items.rend(); i++)
- if ((*i)->label_rect(rect()).contains(e->pos())) {
- mouse_down_item_ = (*i);
- break;
- }
-
if (mouse_down_item_) {
mouse_down_item_->select();
mouse_down_item_->drag();
view_.add_flag(view_.offset() + ((double)e->x() + 0.5) * view_.scale());
}
+void Ruler::contextMenuEvent(QContextMenuEvent *event)
+{
+ const shared_ptr<TimeItem> r = get_mouse_over_item(mouse_point_);
+ if (!r)
+ return;
+
+ QMenu *menu = r->create_context_menu(this);
+ if (menu)
+ menu->exec(event->globalPos());
+}
+
void Ruler::keyPressEvent(QKeyEvent *e)
{
assert(e);