#include <cstdint>
#include <list>
#include <memory>
+#include <mutex>
#include <set>
-#include <unordered_map>
#include <vector>
#include <QAbstractScrollArea>
#include "tracetreeitemowner.hpp"
using std::list;
-using std::unordered_map;
-using std::unordered_set;
+using std::map;
using std::set;
using std::shared_ptr;
using std::vector;
static const pv::util::Timestamp MinScale;
static const int MaxScrollValue;
+ static const int ViewScrollMargin;
static const int ScaleUnits[3];
/**
* Returns the signals contained in this view.
*/
- unordered_set< shared_ptr<Signal> > signals() const;
+ vector< shared_ptr<Signal> > signals() const;
shared_ptr<Signal> get_signal_by_signalbase(shared_ptr<data::SignalBase> base) const;
- virtual void clear_signals();
-
- void add_signal(const shared_ptr<Signal> signal);
+ virtual void clear_signalbases();
+ virtual void add_signalbase(const shared_ptr<data::SignalBase> signalbase);
+ virtual void remove_signalbase(const shared_ptr<data::SignalBase> signalbase);
#ifdef ENABLE_DECODE
virtual void clear_decode_signals();
Viewport* viewport();
const Viewport* viewport() const;
+ QAbstractScrollArea* scrollarea() const;
+
const Ruler* ruler() const;
virtual void save_settings(QSettings &settings) const;
-
virtual void restore_settings(QSettings &settings);
/**
void zoom_fit(bool gui_state);
+ virtual void focus_on_range(uint64_t start_sample, uint64_t end_sample);
+
/**
* Sets the scale and offset.
* @param scale The new view scale in seconds per pixel.
*/
void set_scale_offset(double scale, const pv::util::Timestamp& offset);
- set< shared_ptr<pv::data::SignalData> > get_visible_data() const;
+ vector< shared_ptr<pv::data::SignalData> > get_visible_data() const;
pair<pv::util::Timestamp, pv::util::Timestamp> get_time_extents() const;
bool colored_bg() const;
/**
- * Returns true if cursors are displayed. false otherwise.
+ * Returns true if cursors are displayed, false otherwise.
*/
bool cursors_shown() const;
void show_cursors(bool show = true);
/**
- * Sets the cursors to the given offsets. You will still have to call show_cursors separately.
+ * Sets the cursors to the given offsets.
+ * You still have to call show_cursors() separately.
*/
void set_cursors(pv::util::Timestamp& first, pv::util::Timestamp& second);
/**
* Moves the cursors to a convenient position in the view.
+ * You still have to call show_cursors() separately.
*/
- void centre_cursors();
+ void center_cursors();
/**
* Returns a reference to the pair of cursors.
TraceTreeItemOwner* find_prevalent_trace_group(
const shared_ptr<sigrok::ChannelGroup> &group,
- const unordered_map<shared_ptr<data::SignalBase>,
- shared_ptr<Signal> > &signal_map);
+ const map<shared_ptr<data::SignalBase>, shared_ptr<Signal> > &signal_map);
static vector< shared_ptr<Trace> >
extract_new_traces_for_channels(
const vector< shared_ptr<sigrok::Channel> > &channels,
- const unordered_map<shared_ptr<data::SignalBase>,
- shared_ptr<Signal> > &signal_map,
+ const map<shared_ptr<data::SignalBase>, shared_ptr<Signal> > &signal_map,
set< shared_ptr<Trace> > &add_list);
void determine_time_unit();
void h_scroll_value_changed(int value);
void v_scroll_value_changed();
+ void on_grab_ruler(int ruler_id);
+
void signals_changed();
void capture_state_updated(int state);
QShortcut *zoom_in_shortcut_, *zoom_in_shortcut_2_;
QShortcut *zoom_out_shortcut_, *zoom_out_shortcut_2_;
QShortcut *home_shortcut_, *end_shortcut_;
+ QShortcut *grab_ruler_left_shortcut_, *grab_ruler_right_shortcut_;
+ QShortcut *cancel_grab_shortcut_;
- unordered_set< shared_ptr<Signal> > signals_;
+ mutable mutex signal_mutex_;
+ vector< shared_ptr<Signal> > signals_;
#ifdef ENABLE_DECODE
vector< shared_ptr<DecodeTrace> > decode_traces_;
pv::util::Timestamp ruler_offset_;
/// The offset of the zero point in seconds.
pv::util::Timestamp zero_offset_;
+ /// Shows whether the user set a custom zero offset that we should keep
+ bool custom_zero_offset_set_;
bool updating_scroll_;
bool settings_restored_;
vector< shared_ptr<TriggerMarker> > trigger_markers_;
QWidget* hover_widget_;
+ TimeMarker* grabbed_widget_;
QPoint hover_point_;
shared_ptr<Signal> signal_under_mouse_cursor_;
uint16_t snap_distance_;