]> sigrok.org Git - pulseview.git/blame_incremental - pv/view/tracetreeitem.cpp
license: remove FSF postal address from boiler plate license text
[pulseview.git] / pv / view / tracetreeitem.cpp
... / ...
CommitLineData
1/*
2 * This file is part of the PulseView project.
3 *
4 * Copyright (C) 2013 Joel Holdsworth <joel@airwebreathe.org.uk>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, see <http://www.gnu.org/licenses/>.
18 */
19
20#include <assert.h>
21
22#include "view.hpp"
23
24#include "tracetreeitem.hpp"
25
26namespace pv {
27namespace views {
28namespace TraceView {
29
30TraceTreeItem::TraceTreeItem() :
31 owner_(nullptr),
32 layout_v_offset_(0),
33 visual_v_offset_(0),
34 v_offset_animation_(this, "visual_v_offset")
35{
36}
37
38void TraceTreeItem::select(bool select)
39{
40 ViewItem::select(select);
41 owner_->row_item_appearance_changed(true, true);
42}
43
44int TraceTreeItem::layout_v_offset() const
45{
46 return layout_v_offset_;
47}
48
49void TraceTreeItem::set_layout_v_offset(int v_offset)
50{
51 if (layout_v_offset_ == v_offset)
52 return;
53
54 layout_v_offset_ = v_offset;
55
56 if (owner_)
57 owner_->extents_changed(false, true);
58}
59
60int TraceTreeItem::visual_v_offset() const
61{
62 return visual_v_offset_;
63}
64
65void TraceTreeItem::set_visual_v_offset(int v_offset)
66{
67 visual_v_offset_ = v_offset;
68
69 if (owner_)
70 owner_->row_item_appearance_changed(true, true);
71}
72
73void TraceTreeItem::force_to_v_offset(int v_offset)
74{
75 v_offset_animation_.stop();
76 layout_v_offset_ = visual_v_offset_ = v_offset;
77
78 if (owner_) {
79 owner_->row_item_appearance_changed(true, true);
80 owner_->extents_changed(false, true);
81 }
82}
83
84void TraceTreeItem::animate_to_layout_v_offset()
85{
86 if (visual_v_offset_ == layout_v_offset_ ||
87 (v_offset_animation_.endValue() == layout_v_offset_ &&
88 v_offset_animation_.state() == QAbstractAnimation::Running))
89 return;
90
91 v_offset_animation_.setDuration(100);
92 v_offset_animation_.setStartValue(visual_v_offset_);
93 v_offset_animation_.setEndValue(layout_v_offset_);
94 v_offset_animation_.setEasingCurve(QEasingCurve::OutQuad);
95 v_offset_animation_.start();
96}
97
98TraceTreeItemOwner* TraceTreeItem::owner() const
99{
100 return owner_;
101}
102
103void TraceTreeItem::set_owner(TraceTreeItemOwner *owner)
104{
105 assert(owner_ || owner);
106 v_offset_animation_.stop();
107
108 if (owner_) {
109 const int owner_offset = owner_->owner_visual_v_offset();
110 layout_v_offset_ += owner_offset;
111 visual_v_offset_ += owner_offset;
112 }
113
114 owner_ = owner;
115
116 if (owner_) {
117 const int owner_offset = owner_->owner_visual_v_offset();
118 layout_v_offset_ -= owner_offset;
119 visual_v_offset_ -= owner_offset;
120 }
121}
122
123int TraceTreeItem::get_visual_y() const
124{
125 assert(owner_);
126 return visual_v_offset_ + owner_->owner_visual_v_offset();
127}
128
129void TraceTreeItem::drag_by(const QPoint &delta)
130{
131 assert(owner_);
132 force_to_v_offset(drag_point_.y() + delta.y() -
133 owner_->owner_visual_v_offset());
134}
135
136QPoint TraceTreeItem::point(const QRect &rect) const
137{
138 return QPoint(rect.right(), get_visual_y());
139}
140
141void TraceTreeItem::set_bgcolour_state(bool state)
142{
143 bgcolour_state_ = state;
144}
145
146} // namespace TraceView
147} // namespace views
148} // namespace pv