Add TriggerMarker class.

This will be used in a follow-up changeset for the markers that
visualize the time of SR_DF_TRIGGER.

Note that this copies a little code from the TimeMarker class,
but that seemed a better idea than deriving from it and disabling
the popup and label-drawing code.
This commit is contained in:
Tilman Sauerbeck 2015-11-07 11:24:42 +01:00
parent d75c5d1296
commit 51ae69ae74
4 changed files with 172 additions and 0 deletions

View File

@ -206,6 +206,7 @@ set(pulseview_SOURCES
pv/view/tracepalette.cpp
pv/view/tracetreeitem.cpp
pv/view/tracetreeitemowner.cpp
pv/view/triggermarker.cpp
pv/view/view.cpp
pv/view/viewitem.cpp
pv/view/viewitemowner.cpp
@ -258,6 +259,7 @@ set(pulseview_HEADERS
pv/view/trace.hpp
pv/view/tracegroup.hpp
pv/view/tracetreeitem.hpp
pv/view/triggermarker.hpp
pv/view/view.hpp
pv/view/viewitem.hpp
pv/view/viewport.hpp

82
pv/view/triggermarker.cpp Normal file
View File

@ -0,0 +1,82 @@
/*
* This file is part of the PulseView project.
*
* Copyright (C) 2014 Joel Holdsworth <joel@airwebreathe.org.uk>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "triggermarker.hpp"
#include "view.hpp"
namespace pv {
namespace view {
const QColor TriggerMarker::Colour(0x00, 0x00, 0xB0);
TriggerMarker::TriggerMarker(View &view, const pv::util::Timestamp& time) :
TimeItem(view),
time_(time)
{
}
TriggerMarker::TriggerMarker(const TriggerMarker &marker) :
TimeItem(marker.view_),
time_(marker.time_)
{
}
bool TriggerMarker::enabled() const
{
return true;
}
bool TriggerMarker::is_draggable() const
{
return false;
}
void TriggerMarker::set_time(const pv::util::Timestamp& time)
{
time_ = time;
view_.time_item_appearance_changed(true, true);
}
float TriggerMarker::get_x() const
{
return ((time_ - view_.offset()) / view_.scale()).convert_to<float>();
}
QPoint TriggerMarker::point(const QRect &rect) const
{
return QPoint(get_x(), rect.bottom());
}
void TriggerMarker::paint_fore(QPainter &p, const ViewItemPaintParams &pp)
{
if (!enabled())
return;
QPen pen(Colour);
pen.setStyle(Qt::DashLine);
const float x = get_x();
p.setPen(pen);
p.drawLine(QPointF(x, pp.top()), QPointF(x, pp.bottom()));
}
} // namespace view
} // namespace pv

86
pv/view/triggermarker.hpp Normal file
View File

@ -0,0 +1,86 @@
/*
* This file is part of the PulseView project.
*
* Copyright (C) 2014 Joel Holdsworth <joel@airwebreathe.org.uk>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef PULSEVIEW_PV_VIEW_TRIGGER_MARKER_HPP
#define PULSEVIEW_PV_VIEW_TRIGGER_MARKER_HPP
#include "timeitem.hpp"
namespace pv {
namespace view {
class TriggerMarker : public TimeItem
{
Q_OBJECT
public:
static const QColor Colour;
public:
/**
* Constructor.
* @param view A reference to the view that owns this marker.
* @param time The time to set the marker to.
*/
TriggerMarker(View &view, const pv::util::Timestamp& time);
/**
* Copy constructor.
*/
TriggerMarker(const TriggerMarker &marker);
/**
* Returns true if the item is visible and enabled.
*/
bool enabled() const override;
/**
Returns true if the item may be dragged/moved.
*/
bool is_draggable() const override;
/**
* Sets the time of the marker.
*/
void set_time(const pv::util::Timestamp& time) override;
float get_x() const override;
/**
* Gets the arrow-tip point of the time marker.
* @param rect the rectangle of the ruler area.
*/
QPoint point(const QRect &rect) const override;
/**
* Paints the foreground layer of the item with a QPainter
* @param p the QPainter to paint into.
* @param pp the painting parameters object to paint with.
**/
void paint_fore(QPainter &p, const ViewItemPaintParams &pp) override;
private:
pv::util::Timestamp time_;
};
} // namespace view
} // namespace pv
#endif // PULSEVIEW_PV_VIEW_TRIGGER_MARKER_HPP

View File

@ -61,6 +61,7 @@ set(pulseview_TEST_SOURCES
${PROJECT_SOURCE_DIR}/pv/view/tracepalette.cpp
${PROJECT_SOURCE_DIR}/pv/view/tracetreeitem.cpp
${PROJECT_SOURCE_DIR}/pv/view/tracetreeitemowner.cpp
${PROJECT_SOURCE_DIR}/pv/view/triggermarker.cpp
${PROJECT_SOURCE_DIR}/pv/view/view.cpp
${PROJECT_SOURCE_DIR}/pv/view/viewitem.cpp
${PROJECT_SOURCE_DIR}/pv/view/viewitemowner.cpp
@ -109,6 +110,7 @@ set(pulseview_TEST_HEADERS
${PROJECT_SOURCE_DIR}/pv/view/trace.hpp
${PROJECT_SOURCE_DIR}/pv/view/tracegroup.hpp
${PROJECT_SOURCE_DIR}/pv/view/tracetreeitem.hpp
${PROJECT_SOURCE_DIR}/pv/view/triggermarker.hpp
${PROJECT_SOURCE_DIR}/pv/view/view.hpp
${PROJECT_SOURCE_DIR}/pv/view/viewitem.hpp
${PROJECT_SOURCE_DIR}/pv/view/viewport.hpp