1 /* 2 * Copyright 2017 CodiLime 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 * 16 */ 17 #pragma once 18 19 #include <QGroupBox> 20 #include <QLabel> 21 #include <QMainWindow> 22 #include <QSharedPointer> 23 #include <QSplitter> 24 #include <QStringList> 25 #include <QToolBar> 26 #include <QToolButton> 27 #include <QTreeView> 28 #include <QWidget> 29 #include <QWidgetAction> 30 31 #include "dbif/info.h" 32 #include "dbif/types.h" 33 #include "ui/dialogs/searchdialog.h" 34 #include "ui/dockwidget.h" 35 #include "ui/fileblobmodel.h" 36 #include "ui/hexedit.h" 37 #include "visualization/base.h" 38 39 namespace veles { 40 namespace ui { 41 42 class HexEditWidget : public IconAwareView { 43 Q_OBJECT 44 45 public: 46 explicit HexEditWidget( 47 MainWindowWithDetachableDockWidgets* main_window, 48 const QSharedPointer<FileBlobModel>& data_model, 49 const QSharedPointer<QItemSelectionModel>& selection_model); 50 void setParserIds(const QStringList& ids); 51 QString addressAsText(qint64 addr); uploadAction()52 QAction* uploadAction() const { return upload_act_; } undoAction()53 QAction* undoAction() const { return undo_act_; } discardAction()54 QAction* discardAction() const { return discard_act_; } findAction()55 QAction* findAction() const { return find_act_; } findNextAction()56 QAction* findNextAction() const { return find_next_act_; } showVisualizationAction()57 QAction* showVisualizationAction() const { return visualization_act_; } showHexEditAction()58 QAction* showHexEditAction() const { return show_hex_edit_act_; } showNodeTreeAction()59 QAction* showNodeTreeAction() const { return show_node_tree_act_; } addColumnAction()60 QAction* addColumnAction() const { return add_column_act_; } removeColumnAction()61 QAction* removeColumnAction() const { return remove_column_act_; } 62 63 signals: 64 void showNodeTree(bool show); 65 void showMinimap(bool show); 66 67 public slots: 68 void nodeTreeVisibilityChanged(bool visibility); 69 void minimapVisibilityChanged(bool visibility); 70 71 private slots: 72 void parse(QAction* action); 73 void findNext(); 74 void showSearchDialog(); 75 void saveAs(); 76 void showVisualization(); 77 void openHexEditor(); 78 void newBinData(); 79 void enableFindNext(bool enable); 80 void selectionChanged(qint64 start_addr, qint64 selection_size); 81 void editStateChanged(bool has_changes, bool has_undo); 82 void addColumn(); 83 void removeColumn(); 84 85 private: 86 void addChunk(const QString& name, const QString& type, 87 const QString& comment, uint64_t start, uint64_t end, 88 const QModelIndex& index = QModelIndex()); 89 void setupDataModelHandlers(); 90 91 void createActions(); 92 void createToolBars(); 93 void initParsersMenu(); 94 void createSelectionInfo(); 95 96 MainWindowWithDetachableDockWidgets* main_window_; 97 98 QToolBar* file_tool_bar_; 99 QToolBar* edit_tool_bar_; 100 QToolBar* tools_tool_bar_; 101 QToolBar* view_tool_bar_; 102 103 QAction* save_as_act_; 104 QAction* upload_act_; 105 QAction* undo_act_; 106 QAction* discard_act_; 107 // QAction* redo_act_; 108 QAction* find_act_; 109 QAction* find_next_act_; 110 QAction* visualization_act_; 111 QAction* show_node_tree_act_; 112 QAction* show_minimap_act_; 113 QAction* show_hex_edit_act_; 114 QAction* add_column_act_; 115 QAction* remove_column_act_; 116 QWidgetAction* auto_resize_act_; 117 QCheckBox* auto_resize_checkbox_; 118 QAction* change_edit_mode_act_; 119 QPushButton* change_edit_mode_button_; 120 121 SearchDialog* search_dialog_; 122 HexEdit* hex_edit_; 123 124 QSharedPointer<FileBlobModel> data_model_; 125 QSharedPointer<QItemSelectionModel> selection_model_; 126 127 QStringList parsers_ids_; 128 QMenu parsers_menu_; 129 QLabel* selection_label_; 130 }; 131 132 } // namespace ui 133 } // namespace veles 134