#include <memory>
#include <set>
+#include <unordered_map>
#include <vector>
#include <QAbstractScrollArea>
#include <QSizeF>
+#include <QTimer>
#include <pv/data/signaldata.h>
class View : public QAbstractScrollArea, public RowItemOwner {
Q_OBJECT
+private:
+ enum StickyEvents {
+ SelectableItemHExtentsChanged = 1,
+ SelectableItemVExtentsChanged = 2
+ };
+
private:
static const double MaxScale;
static const double MinScale;
* seconds.
*/
double offset() const;
- int owner_v_offset() const;
+ int owner_visual_v_offset() const;
+
+ /**
+ * Returns the number of nested parents that this row item owner has.
+ */
+ unsigned int depth() const;
void zoom(double steps);
void zoom(double steps, int offset);
const QPoint& hover_point() const;
- void normalize_layout();
-
void update_viewport();
+ void restack_all_row_items();
+
Q_SIGNALS:
void hover_point_changed();
*/
QRectF label_rect(int right);
+ static bool add_channels_to_owner(
+ const std::vector< std::shared_ptr<sigrok::Channel> > &channels,
+ RowItemOwner *owner, int &offset,
+ 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>)>());
+
+ static void apply_offset(
+ std::shared_ptr<RowItem> row_item, int &offset);
+
private:
bool eventFilter(QObject *object, QEvent *event);
void resizeEvent(QResizeEvent *e);
+public:
+ void appearance_changed(bool label, bool content);
+
+ void extents_changed(bool horz, bool vert);
+
private Q_SLOTS:
void h_scroll_value_changed(int value);
void on_signals_moved();
- void on_geometry_updated();
+ void process_sticky_events();
void on_hover_point_changed();
CursorPair _cursors;
QPoint _hover_point;
+
+ unsigned int _sticky_events;
+ QTimer _lazy_event_handler;
};
} // namespace view