]> sigrok.org Git - pulseview.git/blobdiff - pv/views/trace/ruler.cpp
Style and architecture fixes
[pulseview.git] / pv / views / trace / ruler.cpp
index 401fc3da28e86e81d2c1ba3858bd1d4cb866a0e3..33746ed6f23814c888212b06c687afc071e3f7e2 100644 (file)
@@ -19,7 +19,6 @@
 
 #include <extdef.h>
 
-#include <QApplication>
 #include <QFontMetrics>
 #include <QMenu>
 #include <QMouseEvent>
@@ -129,6 +128,16 @@ pv::util::Timestamp Ruler::get_ruler_time_from_x_pos(uint32_t x) const
        return view_.ruler_offset() + ((double)x + 0.5) * view_.scale();
 }
 
+pv::util::Timestamp Ruler::get_ruler_time_from_absolute_time(const pv::util::Timestamp& abs_time) const
+{
+       return abs_time + view_.zero_offset();
+}
+
+pv::util::Timestamp Ruler::get_absolute_time_from_ruler_time(const pv::util::Timestamp& ruler_time) const
+{
+       return ruler_time - view_.zero_offset();
+}
+
 void Ruler::contextMenuEvent(QContextMenuEvent *event)
 {
        MarginWidget::contextMenuEvent(event);
@@ -176,18 +185,53 @@ vector< shared_ptr<ViewItem> > Ruler::items()
                time_items.begin(), time_items.end());
 }
 
+void Ruler::item_hover(const shared_ptr<ViewItem> &item, QPoint pos)
+{
+       (void)pos;
+
+       hover_item_ = dynamic_pointer_cast<TimeItem>(item);
+}
+
+shared_ptr<TimeItem> Ruler::get_reference_item() const
+{
+       if (mouse_modifiers_ & Qt::ShiftModifier)
+               return nullptr;
+
+       if (hover_item_)
+               return hover_item_;
+
+       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 (!ref_item)
+                               ref_item = *i;
+                       else {
+                               // Return nothing if multiple items are selected
+                               ref_item.reset();
+                               break;
+                       }
+               }
+       }
+
+       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;
 }
 
 void Ruler::mouseDoubleClickEvent(QMouseEvent *event)
 {
-       view_.add_flag(get_ruler_time_from_x_pos(event->x()));
+       hover_item_ = view_.add_flag(get_absolute_time_from_x_pos(event->x()));
 }
 
 void Ruler::paintEvent(QPaintEvent*)
@@ -340,7 +384,7 @@ void Ruler::invalidate_tick_position_cache()
 
 void Ruler::on_createMarker()
 {
-       view_.add_flag(get_absolute_time_from_x_pos(mouse_down_point_.x()));
+       hover_item_ = view_.add_flag(get_absolute_time_from_x_pos(mouse_down_point_.x()));
 }
 
 void Ruler::on_setZeroPosition()