]> sigrok.org Git - pulseview.git/blobdiff - pv/views/trace/timeitem.cpp
Session: Fix issue #67 by improving error handling
[pulseview.git] / pv / views / trace / timeitem.cpp
index bd07e9b28c9383f1c4a48fbe3cd3bdd6b40ae6b4..3de62258ae4fff0e3371f001036d15df81a9f628 100644 (file)
@@ -17,6 +17,7 @@
  * along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
+#include "signal.hpp"
 #include "timeitem.hpp"
 #include "view.hpp"
 
@@ -30,8 +31,28 @@ TimeItem::TimeItem(View &view) :
 
 void TimeItem::drag_by(const QPoint &delta)
 {
-       set_time(view_.offset() + (drag_point_.x() + delta.x() - 0.5) *
-               view_.scale());
+       if (snapping_disabled_) {
+               set_time(view_.offset() + (drag_point_.x() + delta.x() - 0.5) *
+                       view_.scale());
+       } else {
+               int64_t sample_num = view_.get_nearest_level_change(drag_point_ + delta);
+
+               if (sample_num > -1)
+                       set_time(sample_num / view_.get_signal_under_mouse_cursor()->base()->get_samplerate());
+               else
+                       set_time(view_.offset() + (drag_point_.x() + delta.x() - 0.5) * view_.scale());
+       }
+}
+
+const pv::util::Timestamp TimeItem::delta(const pv::util::Timestamp& other) const
+{
+       return other - time();
+}
+
+
+bool TimeItem::is_snapping_disabled() const
+{
+       return snapping_disabled_;
 }
 
 } // namespace trace