33 #include <QMouseEvent>
36 using std::back_inserter;
38 using std::dynamic_pointer_cast;
42 using std::numeric_limits;
43 using std::shared_ptr;
44 using std::stable_sort;
52 pinch_zoom_active_(false)
54 setAutoFillBackground(
true);
55 setBackgroundRole(QPalette::Base);
61 const vector< shared_ptr<ViewItem> >
items(this->
items());
62 for (
auto i = items.rbegin(); i != items.rend(); i++)
63 if ((*i)->enabled() &&
64 (*i)->hit_box_rect(pp).contains(pt))
71 if (item && item->is_draggable())
72 setCursor(dynamic_pointer_cast<RowItem>(item) ?
73 Qt::SizeVerCursor : Qt::SizeHorCursor);
102 vector< shared_ptr<ViewItem> >
items;
103 const std::vector< shared_ptr<ViewItem> > view_items(
105 copy(view_items.begin(), view_items.end(), back_inserter(items));
107 copy(time_items.begin(), time_items.end(), back_inserter(items));
113 QList<QTouchEvent::TouchPoint> touchPoints =
event->touchPoints();
115 if (touchPoints.count() != 2) {
120 const QTouchEvent::TouchPoint &touchPoint0 = touchPoints.first();
121 const QTouchEvent::TouchPoint &touchPoint1 = touchPoints.last();
124 (event->touchPointStates() & Qt::TouchPointPressed)) {
130 double w = touchPoint1.pos().x() - touchPoint0.pos().x();
139 if (event->touchPointStates() & Qt::TouchPointReleased) {
142 if (touchPoint0.state() & Qt::TouchPointReleased) {
159 assert(none_of(row_items.begin(), row_items.end(),
160 [](
const shared_ptr<RowItem> &r) {
return !r; }));
162 stable_sort(row_items.begin(), row_items.end(),
163 [](
const shared_ptr<RowItem> &a,
const shared_ptr<RowItem> &b) {
164 return a->point(QRect()).y() < b->point(QRect()).y(); });
167 assert(none_of(time_items.begin(), time_items.end(),
168 [](
const shared_ptr<TimeItem> &t) {
return !t; }));
171 p.setRenderHint(QPainter::Antialiasing);
175 for (
const shared_ptr<TimeItem> t : time_items)
176 t->paint_back(p, pp);
177 for (
const shared_ptr<RowItem> r : row_items)
178 r->paint_back(p, pp);
180 for (
const shared_ptr<TimeItem> t : time_items)
182 for (
const shared_ptr<RowItem> r : row_items)
185 for (
const shared_ptr<RowItem> r : row_items)
186 r->paint_fore(p, pp);
188 p.setRenderHint(QPainter::Antialiasing,
false);
189 for (
const shared_ptr<TimeItem> t : time_items)
190 t->paint_fore(p, pp);
199 if (event->buttons() & Qt::LeftButton)
201 else if (event->buttons() & Qt::RightButton)
209 if (e->orientation() == Qt::Vertical) {
210 if (e->modifiers() & Qt::ControlModifier) {
214 (e->delta() * height()) / (8 * 120));
219 }
else if (e->orientation() == Qt::Horizontal) {
int owner_visual_v_offset() const
void item_hover(const std::shared_ptr< pv::view::ViewItem > &item)
std::vector< std::shared_ptr< T > > list_by_type()
void set_scale_offset(double scale, const pv::util::Timestamp &offset)
std::shared_ptr< pv::view::ViewItem > get_mouse_over_item(const QPoint &pt)
void paintEvent(QPaintEvent *event)
void wheelEvent(QWheelEvent *event)
void set_v_offset(int offset)
std::vector< std::shared_ptr< TimeItem > > time_items() const
std::vector< std::shared_ptr< pv::view::ViewItem > > items()
boost::optional< pv::util::Timestamp > drag_offset_
void drag_by(const QPoint &delta)
void mouseDoubleClickEvent(QMouseEvent *event)
const pv::util::Timestamp & offset() const
bool touch_event(QTouchEvent *e)