toolbar->addWidget(save_button_);
// Add format types
- format_selector_->addItem(tr("Hexdump"), qVariantFromValue(QString("text/hexdump")));
+ format_selector_->addItem(tr("Hexdump"), QVariant(QString("text/hexdump")));
// Add widget stack
root_layout->addWidget(stacked_widget_);
save_action_->setText(tr("&Save..."));
save_action_->setIcon(QIcon::fromTheme("document-save-as",
QIcon(":/icons/document-save-as.png")));
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ save_action_->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_S));
+#else
save_action_->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_S));
+#endif
connect(save_action_, SIGNAL(triggered(bool)),
this, SLOT(on_actionSave_triggered()));
for (int i = 0; i < SaveTypeCount; i++) {
QAction *const action = save_menu->addAction(tr(SaveTypeNames[i]));
- action->setData(qVariantFromValue(i));
+ action->setData(QVariant::fromValue(i));
}
save_button_->setMenu(save_menu);
parent->setSizePolicy(hex_view_->sizePolicy()); // TODO Must be updated when selected widget changes
+ // Set up metadata event handler
+ session_.metadata_obj_manager()->add_observer(this);
+
reset_view_state();
}
+View::~View()
+{
+ session_.metadata_obj_manager()->remove_observer(this);
+}
+
ViewType View::get_type() const
{
return ViewTypeDecoderBinary;
void View::save_settings(QSettings &settings) const
{
- (void)settings;
+ ViewBase::save_settings(settings);
}
void View::restore_settings(QSettings &settings)
{
// Note: It is assumed that this function is only called once,
// immediately after restoring a previous session.
- (void)settings;
+ ViewBase::restore_settings(settings);
}
void View::reset_data()
while (offset < selection.second) {
size_t end = std::min((uint64_t)(selection.second), offset + n);
offset = hex_view_->create_hex_line(offset, end, &s, with_offset, with_ascii);
+#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
+ out_stream << s << Qt::endl;
+#else
out_stream << s << endl;
+#endif
}
+#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
+ out_stream << Qt::endl;
+#else
out_stream << endl;
+#endif
if (out_stream.status() != QTextStream::Ok) {
QMessageBox msg(parent_);
{
bin_class_id_ = class_selector_->itemData(index).value<uint32_t>();
- binary_data_exists_ =
- signal_->get_binary_data_chunk_count(current_segment_, decoder_, bin_class_id_);
+ binary_data_exists_ = (signal_) ?
+ signal_->get_binary_data_chunk_count(current_segment_, decoder_, bin_class_id_) :
+ false;
update_data();
}
}
}
+void View::on_metadata_object_changed(MetadataObject* obj,
+ MetadataValueType value_type)
+{
+ // Check if we need to update the model's data range. We only work on the
+ // end sample value because the start sample value is updated first and
+ // we need both
+ if ((obj->type() == MetadataObjMainViewRange) &&
+ (value_type == MetadataValueEndSample)) {
+
+ int64_t start_sample = obj->value(MetadataValueStartSample).toLongLong();
+ int64_t end_sample = obj->value(MetadataValueEndSample).toLongLong();
+
+ hex_view_->set_visible_sample_range(start_sample, end_sample);
+ }
+
+ if (obj->type() == MetadataObjMousePos)
+ hex_view_->set_highlighted_data_sample(obj->value(MetadataValueStartSample).toLongLong());
+}
+
void View::perform_delayed_view_update()
{
if (signal_ && !binary_data_exists_)