X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fviews%2Ftabular_decoder%2Fview.cpp;h=6ee3e2ac13b1871b632bfa229c44ef0f4d4b4ca4;hb=593ea025f22372ed6761d0cb300f0873fa1a47e7;hp=5446ff8e248a7781606b78717a9c8eca318efa9e;hpb=be0f59038035f7a560082feba35524d418a9153a;p=pulseview.git diff --git a/pv/views/tabular_decoder/view.cpp b/pv/views/tabular_decoder/view.cpp index 5446ff8e..6ee3e2ac 100644 --- a/pv/views/tabular_decoder/view.cpp +++ b/pv/views/tabular_decoder/view.cpp @@ -56,6 +56,12 @@ const char* SaveTypeNames[SaveTypeCount] = { "CSV, fields quoted" }; +const char* ViewModeNames[ViewModeCount] = { + "Show all", + "Show all and focus on newest" +// "Show visible in main view" +}; + QSize QCustomTableView::minimumSizeHint() const { QSize size(QTableView::sizeHint()); @@ -82,12 +88,13 @@ View::View(Session &session, bool is_main_view, QMainWindow *parent) : // Note: Place defaults in View::reset_view_state(), not here parent_(parent), decoder_selector_(new QComboBox()), + hide_hidden_cb_(new QCheckBox()), + view_mode_selector_(new QComboBox()), save_button_(new QToolButton()), save_action_(new QAction(this)), table_view_(new QCustomTableView()), model_(new AnnotationCollectionModel()), - signal_(nullptr), - updating_data_(false) + signal_(nullptr) { QVBoxLayout *root_layout = new QVBoxLayout(this); root_layout->setContentsMargins(0, 0, 0, 0); @@ -103,13 +110,27 @@ View::View(Session &session, bool is_main_view, QMainWindow *parent) : toolbar->addWidget(decoder_selector_); toolbar->addSeparator(); toolbar->addWidget(save_button_); + toolbar->addSeparator(); + toolbar->addWidget(view_mode_selector_); + toolbar->addSeparator(); + toolbar->addWidget(hide_hidden_cb_); connect(decoder_selector_, SIGNAL(currentIndexChanged(int)), this, SLOT(on_selected_decoder_changed(int))); + connect(view_mode_selector_, SIGNAL(currentIndexChanged(int)), + this, SLOT(on_view_mode_changed(int))); + connect(hide_hidden_cb_, SIGNAL(toggled(bool)), + this, SLOT(on_hide_hidden_changed(bool))); // Configure widgets decoder_selector_->setSizeAdjustPolicy(QComboBox::AdjustToContents); + for (int i = 0; i < ViewModeCount; i++) + view_mode_selector_->addItem(ViewModeNames[i], QVariant::fromValue(i)); + + hide_hidden_cb_->setText(tr("Hide Hidden Rows/Classes")); + hide_hidden_cb_->setChecked(true); + // Configure actions save_action_->setText(tr("&Save...")); save_action_->setIcon(QIcon::fromTheme("document-save-as", @@ -140,6 +161,7 @@ View::View(Session &session, bool is_main_view, QMainWindow *parent) : const int font_height = QFontMetrics(QApplication::font()).height(); table_view_->verticalHeader()->setDefaultSectionSize((font_height * 5) / 4); + table_view_->verticalHeader()->setVisible(false); table_view_->horizontalHeader()->setStretchLastSection(true); table_view_->horizontalHeader()->setCascadingSectionResizes(true); @@ -224,13 +246,20 @@ void View::remove_decode_signal(shared_ptr signal) void View::save_settings(QSettings &settings) const { ViewBase::save_settings(settings); + + settings.setValue("view_mode", view_mode_selector_->currentIndex()); + settings.setValue("hide_hidden", hide_hidden_cb_->isChecked()); } void View::restore_settings(QSettings &settings) { - // Note: It is assumed that this function is only called once, - // immediately after restoring a previous session. ViewBase::restore_settings(settings); + + if (settings.contains("view_mode")) + view_mode_selector_->setCurrentIndex(settings.value("view_mode").toInt()); + + if (settings.contains("hide_hidden")) + hide_hidden_cb_->setChecked(settings.value("hide_hidden").toBool()); } void View::reset_data() @@ -241,18 +270,7 @@ void View::reset_data() void View::update_data() { - if (updating_data_) { - if (!delayed_view_updater_.isActive()) - delayed_view_updater_.start(); - return; - } - - updating_data_ = true; - - table_view_->setRootIndex(model_->index(1, 0, QModelIndex())); model_->set_signal_and_segment(signal_, current_segment_); - - updating_data_ = false; } void View::save_data_as_csv(unsigned int save_type) const @@ -315,7 +333,7 @@ void View::save_data_as_csv(unsigned int save_type) const if (table_view_->horizontalHeader()->isSectionHidden(column)) continue; - const QModelIndex idx = model_->index(row, column, QModelIndex()); + const QModelIndex idx = model_->index(row, column); QString s = model_->data(idx, Qt::DisplayRole).toString(); if (save_type == SaveTypeCSVEscaped) @@ -372,6 +390,19 @@ void View::on_selected_decoder_changed(int index) update_data(); } +void View::on_hide_hidden_changed(bool checked) +{ + model_->set_hide_hidden(checked); + + // Force repaint, otherwise the new selection isn't shown for some reason + table_view_->viewport()->update(); +} + +void View::on_view_mode_changed(int index) +{ + (void)index; +} + void View::on_signal_name_changed(const QString &name) { (void)name; @@ -402,8 +433,14 @@ void View::on_signal_color_changed(const QColor &color) void View::on_new_annotations() { - if (!delayed_view_updater_.isActive()) - delayed_view_updater_.start(); + if (view_mode_selector_->currentIndex() == ViewModeLatest) { + update_data(); + table_view_->scrollTo(model_->index(model_->rowCount() - 1, 0), + QAbstractItemView::PositionAtBottom); + } else { + if (!delayed_view_updater_.isActive()) + delayed_view_updater_.start(); + } } void View::on_decoder_reset()