25 #include <QApplication> 26 #include <QFormLayout> 41 using std::shared_ptr;
57 segment_display_mode_(ShowLastSegmentOnly),
62 connect(signal.get(), SIGNAL(name_changed(
const QString&)),
64 connect(signal.get(), SIGNAL(color_changed(
const QColor&)),
66 connect(signal.get(), SIGNAL(error_message_changed(
const QString&)),
128 p.setBrush(
base_->color());
136 const QPointF offs = (
selected()) ? QPointF(-2, 0) : QPointF(0, 0);
139 const float label_arrow_length = r.height() / 2;
142 offs + QPointF(r.right() - label_arrow_length, r.top()),
143 offs + QPointF(r.right(), y),
144 offs + QPointF(r.right() - label_arrow_length, r.bottom()),
145 offs + r.bottomLeft()
147 QPointF highlight_points[] = {
148 offs + QPointF(r.left() + 1, r.top() + 1),
149 offs + QPointF(r.right() - label_arrow_length, r.top() + 1),
150 offs + QPointF(r.right() - 1, y),
151 offs + QPointF(r.right() - label_arrow_length, r.bottom() - 1),
152 offs + QPointF(r.left() + 1, r.bottom() - 1)
157 p.setBrush(Qt::transparent);
158 p.drawPolygon(points,
countof(points));
161 p.setPen(Qt::transparent);
162 p.setBrush(hover ?
base_->color().lighter() :
base_->color());
163 p.drawPolygon(points,
countof(points));
165 p.setPen(
base_->color().lighter());
166 p.setBrush(Qt::transparent);
167 p.drawPolygon(highlight_points,
countof(highlight_points));
169 p.setPen(
base_->color().darker());
170 p.setBrush(Qt::transparent);
171 p.drawPolygon(points,
countof(points));
175 p.setFont(QApplication::font());
176 p.drawText(QRectF(r.x(), r.y(),
177 r.width() - label_arrow_length, r.height()),
178 Qt::AlignCenter | Qt::AlignVCenter,
base_->name());
183 const QString message =
base_->get_error_message();
190 const QRectF bounding_rect = QRectF(pp.
left(), INT_MIN / 2 + y, pp.
right(), INT_MAX);
192 const QRectF text_rect = p.boundingRect(bounding_rect, Qt::AlignCenter, message);
193 const qreal r = text_rect.height() / 4;
195 p.drawRoundedRect(text_rect.adjusted(-r, -r, r, r), r, r, Qt::AbsoluteSize);
198 p.drawText(text_rect, message);
213 QMenu *
const menu =
new QMenu(parent);
217 for (QAction *action : default_menu->actions()) {
218 menu->addAction(action);
219 if (action->parent() == default_menu)
220 action->setParent(menu);
225 if (menu->actions().length() > 0)
226 menu->addSeparator();
229 QAction *
const create_marker_here =
new QAction(tr(
"Create marker here"),
this);
231 menu->addAction(create_marker_here);
240 popup_ =
new Popup(parent);
253 QFontMetrics
m(QApplication::font());
254 const QSize text_size(
255 m.boundingRect(QRect(), 0,
base_->name()).width(), m.height());
256 const QSizeF label_size(
258 ceilf((text_size.height() +
LabelPadding.height() * 2) / 2) * 2);
259 const float half_height = label_size.height() / 2;
261 rect.right() - half_height - label_size.width() - 0.5,
263 label_size.width() + half_height,
264 label_size.height());
275 const int height = extents.second - extents.first;
305 p.setBrush(
base_->bgcolor());
309 p.setPen(QPen(Qt::NoPen));
311 const pair<int, int> extents =
v_extents();
313 pp.
width(), extents.second - extents.first);
318 bool was_antialiased = p.testRenderHint(QPainter::Antialiasing);
319 p.setRenderHint(QPainter::Antialiasing,
false);
322 p.drawLine(QPointF(pp.
left(), y), QPointF(pp.
right(), y));
324 p.setRenderHint(QPainter::Antialiasing, was_antialiased);
331 ColorButton *
const color_button =
new ColorButton(
334 color_button->set_color(
base_->color());
335 connect(color_button, SIGNAL(
selected(
const QColor&)),
338 form->addRow(tr(
"Color"), color_button);
351 p.setPen(QPen(QColor(Qt::lightGray)));
353 const pair<int, int> extents =
v_extents();
355 bool was_antialiased = p.testRenderHint(QPainter::Antialiasing);
356 p.setRenderHint(QPainter::Antialiasing,
false);
359 p.setRenderHint(QPainter::Antialiasing, was_antialiased);
371 QWidget *suicidal =
new QWidget();
372 suicidal->setLayout(
popup_->layout());
373 suicidal->deleteLater();
378 QWidget* scrollarea_content =
new QWidget(scrollarea);
380 scrollarea->
setWidget(scrollarea_content);
381 scrollarea->setWidgetResizable(
true);
382 scrollarea->setContentsMargins(0, 0, 0, 0);
383 scrollarea->setFrameShape(QFrame::NoFrame);
384 scrollarea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
385 scrollarea_content->setContentsMargins(0, 0, 0, 0);
387 popup_->setLayout(
new QVBoxLayout());
388 popup_->layout()->addWidget(scrollarea);
389 popup_->layout()->setContentsMargins(0, 0, 0, 0);
392 popup_form_->setSizeConstraint(QLayout::SetMinAndMaxSize);
399 QLineEdit *
const name_edit =
new QLineEdit(parent);
400 name_edit->setText(
base_->name());
401 connect(name_edit, SIGNAL(textChanged(
const QString&)),
403 form->addRow(tr(
"Name"), name_edit);
446 base_->set_name(name);
452 base_->set_color(color);
virtual QMenu * create_view_context_menu(QWidget *parent, QPoint &click_pos)
const Ruler * ruler() const
static const QColor BrightGrayBGColor
virtual bool enabled() const =0
virtual void paint_back(QPainter &p, ViewItemPaintParams &pp)
TraceTreeItemOwner * owner_
static const QColor DarkGrayBGColor
virtual void populate_popup_form(QWidget *parent, QFormLayout *form)
static const unsigned int Rows
virtual void extents_changed(bool horz, bool vert)=0
virtual void set_segment_display_mode(SegmentDisplayMode mode)
QFormLayout * popup_form_
uint32_t context_menu_x_pos_
virtual pair< int, int > v_extents() const =0
T value(details::expression_node< T > *n)
void on_nameedit_changed(const QString &name)
void on_create_marker_here() const
virtual void on_color_changed(const QColor &color)
virtual void on_name_changed(const QString &text)
virtual void on_error_message_changed(const QString &msg)
int current_segment_
The ID of the currently displayed segment.
bool next_bg_color_state()
shared_ptr< data::SignalBase > base_
virtual void paint_label(QPainter &p, const QRect &rect, bool hover)
static QPen highlight_pen()
static void remove_change_handler(GlobalSettingsInterface *cb)
virtual bool is_selectable(QPoint pos) const
static const QSizeF LabelPadding
virtual QMenu * create_view_context_menu(QWidget *parent, QPoint &click_pos)
virtual QRectF hit_box_rect(const ViewItemPaintParams &pp) const
shared_ptr< data::SignalBase > base() const
virtual void hover_point_changed(const QPoint &hp)
virtual QMenu * create_header_context_menu(QWidget *parent)
static const int LabelHitPadding
int get_current_segment() const
static const QPen AxisPen
void paint_axis(QPainter &p, ViewItemPaintParams &pp, int y)
virtual bool is_draggable(QPoint pos) const
static const QString Key_View_ShowHoverMarker
pv::widgets::Popup * popup_
QRectF label_rect(const QRectF &rect) const
static QColor select_text_color(QColor background)
static const unsigned int Cols
const QPoint & hover_point() const
void add_color_option(QWidget *parent, QFormLayout *form)
SegmentDisplayMode segment_display_mode_
Trace(shared_ptr< data::SignalBase > signal)
x y t t *t x y t t t x y t t t x *y t *t t x *y t *t t x y t t t x y t t t x(y+z)
pv::util::Timestamp get_absolute_time_from_x_pos(uint32_t x) const
QPoint drag_point(const QRect &rect) const
static const QColor Colors[Cols *Rows]
void on_coloredit_changed(const QColor &color)
pv::widgets::Popup * create_popup(QWidget *parent)
void set_current_segment(const int segment)
static const QColor ErrorBgColor
virtual QMenu * create_header_context_menu(QWidget *parent)
virtual void row_item_appearance_changed(bool label, bool content)=0
virtual void on_setting_changed(const QString &key, const QVariant &value)
static void add_change_handler(GlobalSettingsInterface *cb)
void paint_hover_marker(QPainter &p)
shared_ptr< Flag > add_flag(const pv::util::Timestamp &time)
virtual void paint_error(QPainter &p, const ViewItemPaintParams &pp)