1 /* 2 * This file is part of the PulseView project. 3 * 4 * Copyright (C) 2019 Soeren Apel <soeren@apelpie.net> 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 #ifndef PULSEVIEW_PV_VIEWS_DECODERBINARY_VIEW_HPP 21 #define PULSEVIEW_PV_VIEWS_DECODERBINARY_VIEW_HPP 22 23 #include <QAction> 24 #include <QComboBox> 25 #include <QStackedWidget> 26 #include <QToolButton> 27 28 #include <pv/views/viewbase.hpp> 29 #include <pv/data/decodesignal.hpp> 30 31 #include "QHexView.hpp" 32 33 namespace pv { 34 35 class Session; 36 37 namespace views { 38 39 namespace decoder_binary { 40 41 // When adding an entry here, don't forget to update SaveTypeNames as well 42 enum SaveType { 43 SaveTypeBinary, 44 SaveTypeHexDumpPlain, 45 SaveTypeHexDumpWithOffset, 46 SaveTypeHexDumpComplete, 47 SaveTypeCount // Indicates how many save types there are, must always be last 48 }; 49 50 extern const char* SaveTypeNames[SaveTypeCount]; 51 52 53 class View : public ViewBase 54 { 55 Q_OBJECT 56 57 public: 58 explicit View(Session &session, bool is_main_view=false, QMainWindow *parent = nullptr); 59 60 virtual ViewType get_type() const; 61 62 /** 63 * Resets the view to its default state after construction. It does however 64 * not reset the signal bases or any other connections with the session. 65 */ 66 virtual void reset_view_state(); 67 68 virtual void clear_decode_signals(); 69 virtual void add_decode_signal(shared_ptr<data::DecodeSignal> signal); 70 virtual void remove_decode_signal(shared_ptr<data::DecodeSignal> signal); 71 72 virtual void save_settings(QSettings &settings) const; 73 virtual void restore_settings(QSettings &settings); 74 75 private: 76 void reset_data(); 77 void update_data(); 78 79 void save_data() const; 80 void save_data_as_hex_dump(bool with_offset=false, bool with_ascii=false) const; 81 82 private Q_SLOTS: 83 void on_selected_decoder_changed(int index); 84 void on_selected_class_changed(int index); 85 void on_signal_name_changed(const QString &name); 86 void on_new_binary_data(unsigned int segment_id, void* decoder, unsigned int bin_class_id); 87 88 void on_decoder_stacked(void* decoder); 89 void on_decoder_removed(void* decoder); 90 91 void on_actionSave_triggered(QAction* action = nullptr); 92 93 virtual void perform_delayed_view_update(); 94 95 private: 96 QWidget* parent_; 97 98 QComboBox *decoder_selector_, *format_selector_, *class_selector_; 99 QStackedWidget *stacked_widget_; 100 QHexView *hex_view_; 101 102 QToolButton* save_button_; 103 QAction* save_action_; 104 105 data::DecodeSignal *signal_; 106 const data::decode::Decoder *decoder_; 107 uint32_t bin_class_id_; 108 bool binary_data_exists_; 109 }; 110 111 } // namespace decoder_binary 112 } // namespace views 113 } // namespace pv 114 115 #endif // PULSEVIEW_PV_VIEWS_DECODERBINARY_VIEW_HPP 116