#include <vector>
#include <QColor>
-#include <QComboBox>
+#include <QCheckBox>
+#include <QPolygon>
#include <QPushButton>
#include <QSignalMapper>
#include <QTimer>
using std::shared_ptr;
using std::vector;
+using pv::data::decode::Row;
+
struct srd_channel;
struct srd_decoder;
namespace decode {
class Decoder;
+class Row;
}
} // namespace data
namespace views {
namespace trace {
-struct RowData {
+struct DecodeTraceRow {
// When adding a field, make sure it's initialized properly in
// DecodeTrace::update_rows()
- data::decode::Row decode_row;
- unsigned int height, title_width;
- bool exists, currently_visible, expand_marker_highlighted, expanded;
+ Row* decode_row;
+ unsigned int height, expanded_height, title_width, animation_step;
+ bool exists, currently_visible, has_hidden_classes;
+ bool expand_marker_highlighted, expanding, expanded, collapsing;
+ QPolygon expand_marker_shape;
+ float anim_height, anim_shape;
+
+ QWidget* container;
+ QWidget* header_container;
+ QWidget* selector_container;
+ vector<QCheckBox*> selectors;
};
class DecodeTrace : public Trace
private:
static const QColor ErrorBgColor;
static const QColor NoDecodeColor;
+ static const QColor ExpandMarkerWarnColor;
+ static const uint8_t ExpansionAreaHeaderAlpha;
+ static const uint8_t ExpansionAreaAlpha;
static const int ArrowSize;
static const double EndCapWidth;
static const int DrawPadding;
static const int MaxTraceUpdateRate;
+ static const unsigned int AnimationDurationInTicks;
public:
DecodeTrace(pv::Session &session, shared_ptr<data::SignalBase> signalbase,
virtual QMenu* create_view_context_menu(QWidget *parent, QPoint &click_pos);
- void delete_pressed();
+ virtual void delete_pressed();
+
+ virtual void hover_point_changed(const QPoint &hp);
+
+ virtual void mouse_left_press_event(const QMouseEvent* event);
private:
void draw_annotations(vector<pv::data::decode::Annotation> annotations,
QColor get_row_color(int row_index) const;
QColor get_annotation_color(QColor row_color, int annotation_index) const;
- unsigned int get_row_y(const RowData* row) const;
+ unsigned int get_row_y(const DecodeTraceRow* row) const;
- RowData* get_row_at_point(const QPoint &point);
+ DecodeTraceRow* get_row_at_point(const QPoint &point);
const QString get_annotation_at_point(const QPoint &point);
void export_annotations(vector<data::decode::Annotation> *annotations) const;
+ void initialize_row_widgets(DecodeTraceRow* r, unsigned int row_id);
void update_rows();
-public:
- virtual void hover_point_changed(const QPoint &hp);
+ /**
+ * Sets row r to expanded state without forcing an update of the view
+ */
+ void set_row_expanded(DecodeTraceRow* r);
+
+ /**
+ * Sets row r to collapsed state without forcing an update of the view
+ */
+ void set_row_collapsed(DecodeTraceRow* r);
+
+ void update_expanded_rows();
private Q_SLOTS:
void on_setting_changed(const QString &key, const QVariant &value);
void on_delete_decoder(int index);
void on_show_hide_decoder(int index);
+ void on_show_hide_row(int row_id);
+ void on_show_hide_class(QWidget* sender);
void on_copy_annotation_to_clipboard();
void on_export_row_from_here();
void on_export_all_rows_from_here();
+ void on_animation_timer();
+
private:
pv::Session &session_;
shared_ptr<data::DecodeSignal> decode_signal_;
- deque<RowData> rows_;
+ deque<DecodeTraceRow> rows_;
mutable mutex row_modification_mutex_;
map<QComboBox*, uint16_t> channel_id_map_; // channel selector -> decode channel ID
map<QComboBox*, uint16_t> init_state_map_; // init state selector -> decode channel ID
list< shared_ptr<pv::binding::Decoder> > bindings_;
- const data::decode::Row* selected_row_;
+ const Row* selected_row_;
pair<uint64_t, uint64_t> selected_sample_range_;
vector<pv::widgets::DecoderGroupBox*> decoder_forms_;
QPushButton* stack_button_;
- unsigned int default_row_height_, visible_rows_, max_visible_rows_;
+ unsigned int default_row_height_, annotation_height_;
+ unsigned int visible_rows_, max_visible_rows_;
int min_useful_label_width_;
bool always_show_all_rows_;
QSignalMapper delete_mapper_, show_hide_mapper_;
+ QSignalMapper row_show_hide_mapper_, class_show_hide_mapper_;
+
+ QTimer delayed_trace_updater_, animation_timer_;
- QTimer delayed_trace_updater_;
+ QPolygon default_marker_shape_;
};
} // namespace trace