#include <QFormLayout>
#include <QKeyEvent>
#include <QLineEdit>
+#include <QMenu>
+#include "ruler.hpp"
#include "trace.hpp"
#include "tracepalette.hpp"
#include "view.hpp"
return base_;
}
+bool Trace::is_selectable(QPoint pos) const
+{
+ // True if the header was clicked, false if the trace area was clicked
+ const View *view = owner_->view();
+ assert(view);
+
+ return (pos.x() <= view->header_width());
+}
+
+bool Trace::is_draggable(QPoint pos) const
+{
+ // While the header label that belongs to this trace is draggable,
+ // the trace itself shall not be. Hence we return true if the header
+ // was clicked and false if the trace area was clicked
+ const View *view = owner_->view();
+ assert(view);
+
+ return (pos.x() <= view->header_width());
+}
+
void Trace::set_segment_display_mode(SegmentDisplayMode mode)
{
segment_display_mode_ = mode;
{
if (key == GlobalSettings::Key_View_ShowHoverMarker)
show_hover_marker_ = value.toBool();
+
+ // Force a repaint since many options alter the way traces look
+ if (owner_)
+ owner_->row_item_appearance_changed(false, true);
}
void Trace::paint_label(QPainter &p, const QRect &rect, bool hover)
Qt::AlignCenter | Qt::AlignVCenter, base_->name());
}
-QMenu* Trace::create_context_menu(QWidget *parent)
+QMenu* Trace::create_header_context_menu(QWidget *parent)
{
- QMenu *const menu = ViewItem::create_context_menu(parent);
+ QMenu *const menu = ViewItem::create_header_context_menu(parent);
+
+ return menu;
+}
+
+QMenu* Trace::create_view_context_menu(QWidget *parent, QPoint &click_pos)
+{
+ context_menu_x_pos_ = click_pos.x();
+
+ // Get entries from default menu before adding our own
+ QMenu *const menu = new QMenu(parent);
+
+ QMenu* default_menu = TraceTreeItem::create_view_context_menu(parent, click_pos);
+ if (default_menu) {
+ for (QAction *action : default_menu->actions()) { // clazy:exclude=range-loop
+ menu->addAction(action);
+ if (action->parent() == default_menu)
+ action->setParent(menu);
+ }
+ delete default_menu;
+
+ // Add separator if needed
+ if (menu->actions().length() > 0)
+ menu->addSeparator();
+ }
+
+ QAction *const create_marker_here = new QAction(tr("Create marker here"), this);
+ connect(create_marker_here, SIGNAL(triggered()), this, SLOT(on_create_marker_here()));
+ menu->addAction(create_marker_here);
return menu;
}
label_size.height());
}
+QRectF Trace::hit_box_rect(const ViewItemPaintParams &pp) const
+{
+ // This one is only for the trace itself, excluding the header area
+ const View *view = owner_->view();
+ assert(view);
+
+ pair<int, int> extents = v_extents();
+ const int top = pp.top() + get_visual_y() + extents.first;
+ const int height = extents.second - extents.first;
+
+ return QRectF(pp.left() + view->header_width(), top,
+ pp.width() - view->header_width(), height);
+}
+
void Trace::set_current_segment(const int segment)
{
current_segment_ = segment;
base_->set_color(color);
}
+void Trace::on_create_marker_here() const
+{
+ View *view = owner_->view();
+ assert(view);
+
+ const Ruler *ruler = view->ruler();
+ QPoint p = ruler->mapFrom(view, QPoint(context_menu_x_pos_, 0));
+
+ view->add_flag(ruler->get_absolute_time_from_x_pos(p.x()));
+}
+
} // namespace trace
} // namespace views
} // namespace pv