#include <QTimer>
#include <pv/data/signaldata.hpp>
+#include <pv/util.hpp>
#include "cursorpair.hpp"
#include "flag.hpp"
#include "rowitemowner.hpp"
+namespace sigrok {
+class ChannelGroup;
+}
+
namespace pv {
class Session;
class CursorHeader;
class Header;
class Ruler;
+class Trace;
class Viewport;
class View : public QAbstractScrollArea, public RowItemOwner {
static const double MinScale;
static const int MaxScrollValue;
+ static const int MaxViewAutoUpdateRate;
static const int ScaleUnits[3];
*/
unsigned int tick_prefix() const;
+ /**
+ * Returns the number of fractional digits shown for the time markings.
+ */
+ unsigned int tick_precision() const;
+
/**
* Returns period of the graticule time markings.
*/
double tick_period() const;
+ /**
+ * Returns the unit of time currently used.
+ */
+ util::TimeUnit time_unit() const;
+
/**
* Returns the number of nested parents that this row item owner has.
*/
void zoom(double steps);
void zoom(double steps, int offset);
- void zoom_fit();
+ void zoom_fit(bool gui_state);
void zoom_one_to_one();
std::pair<double, double> get_time_extents() const;
+ /**
+ * Enables or disables sticky scrolling, i.e. the view always shows
+ * the most recent samples when capturing data.
+ */
+ void enable_sticky_scrolling(bool state);
+
/**
* Returns true if cursors are displayed. false otherwise.
*/
void scale_offset_changed();
+ void sticky_scrolling_changed(bool state);
+
+ void always_zoom_to_fit_changed(bool state);
+
private:
void get_scroll_layout(double &length, double &offset) const;
*/
QRectF label_rect(const QRectF &rect);
- static bool add_channels_to_owner(
+ RowItemOwner* find_prevalent_trace_group(
+ const std::shared_ptr<sigrok::ChannelGroup> &group,
+ const std::unordered_map<std::shared_ptr<sigrok::Channel>,
+ std::shared_ptr<Signal> > &signal_map);
+
+ static std::vector< std::shared_ptr<Trace> >
+ extract_new_traces_for_channels(
const std::vector< std::shared_ptr<sigrok::Channel> > &channels,
- RowItemOwner *owner, int &offset,
- std::unordered_map<std::shared_ptr<sigrok::Channel>,
+ const std::unordered_map<std::shared_ptr<sigrok::Channel>,
std::shared_ptr<Signal> > &signal_map,
- std::function<bool (std::shared_ptr<RowItem>)> filter_func =
- std::function<bool (std::shared_ptr<RowItem>)>());
+ std::set< std::shared_ptr<Trace> > &add_list);
- static void apply_offset(
- std::shared_ptr<RowItem> row_item, int &offset);
+ void determine_time_unit();
private:
bool eventFilter(QObject *object, QEvent *event);
void v_scroll_value_changed();
void signals_changed();
+ void capture_state_updated(int state);
void data_updated();
+ void perform_delayed_view_update();
+
void process_sticky_events();
void on_hover_point_changed();
double offset_;
bool updating_scroll_;
+ bool sticky_scrolling_;
+ bool always_zoom_to_fit_;
+ QTimer delayed_view_updater_;
double tick_period_;
unsigned int tick_prefix_;
+ unsigned int tick_precision_;
+ util::TimeUnit time_unit_;
bool show_cursors_;
std::shared_ptr<CursorPair> cursors_;