diff --git a/src/cutter.cpp b/src/cutter.cpp index 0e3008b9..42833deb 100644 --- a/src/cutter.cpp +++ b/src/cutter.cpp @@ -551,6 +551,11 @@ void CutterCore::triggerAsmOptionsChanged() emit asmOptionsChanged(); } +void CutterCore::triggerGraphOptionsChanged() +{ + emit graphOptionsChanged(); +} + void CutterCore::resetDefaultAsmOptions() { // TODO Merge with Configuration.cpp diff --git a/src/cutter.h b/src/cutter.h index 02e234b5..47cd48a4 100644 --- a/src/cutter.h +++ b/src/cutter.h @@ -329,6 +329,7 @@ public: void triggerRefreshAll(); void triggerAsmOptionsChanged(); + void triggerGraphOptionsChanged(); void resetDefaultAsmOptions(); void saveDefaultAsmOptions(); @@ -360,6 +361,11 @@ signals: */ void asmOptionsChanged(); + /*! + * emitted when config regarding graph display changes + */ + void graphOptionsChanged(); + /*! * \brief seekChanged is emitted each time radare2 seek value is modified * \param offset diff --git a/src/cutter.pro b/src/cutter.pro index 1670b977..6da848b3 100644 --- a/src/cutter.pro +++ b/src/cutter.pro @@ -83,7 +83,8 @@ SOURCES += \ widgets/VisualNavbar.cpp \ widgets/GraphView.cpp \ dialogs/preferences/PreferencesDialog.cpp \ - dialogs/preferences/GeneralOptionsWidget.cpp + dialogs/preferences/GeneralOptionsWidget.cpp \ + dialogs/preferences/GraphOptionsWidget.cpp HEADERS += \ cutter.h \ @@ -137,7 +138,8 @@ HEADERS += \ widgets/VisualNavbar.h \ widgets/GraphView.h \ dialogs/preferences/PreferencesDialog.h \ - dialogs/preferences/GeneralOptionsWidget.h + dialogs/preferences/GeneralOptionsWidget.h \ + dialogs/preferences/GraphOptionsWidget.h FORMS += \ dialogs/AboutDialog.ui \ @@ -168,7 +170,8 @@ FORMS += \ widgets/HexdumpWidget.ui \ dialogs/SaveProjectDialog.ui \ dialogs/preferences/PreferencesDialog.ui \ - dialogs/preferences/GeneralOptionsWidget.ui + dialogs/preferences/GeneralOptionsWidget.ui \ + dialogs/preferences/GraphOptionsWidget.ui RESOURCES += \ resources.qrc diff --git a/src/dialogs/preferences/AsmOptionsWidget.h b/src/dialogs/preferences/AsmOptionsWidget.h index b0dc6016..87724227 100644 --- a/src/dialogs/preferences/AsmOptionsWidget.h +++ b/src/dialogs/preferences/AsmOptionsWidget.h @@ -52,4 +52,4 @@ private slots: }; -#endif //ASMOPTIONSDIALOG_H +#endif //ASMOPTIONSWIDGET_H diff --git a/src/dialogs/preferences/GraphOptionsWidget.cpp b/src/dialogs/preferences/GraphOptionsWidget.cpp new file mode 100644 index 00000000..e4184a46 --- /dev/null +++ b/src/dialogs/preferences/GraphOptionsWidget.cpp @@ -0,0 +1,46 @@ +#include +#include + +#include "GraphOptionsWidget.h" +#include "ui_GraphOptionsWidget.h" + +#include "PreferencesDialog.h" + +#include "utils/Helpers.h" +#include "utils/Configuration.h" + +GraphOptionsWidget::GraphOptionsWidget(PreferencesDialog */*dialog*/, QWidget *parent) + : QDialog(parent), + ui(new Ui::GraphOptionsWidget) +{ + ui->setupUi(this); + + updateOptionsFromVars(); + + connect(Core(), SIGNAL(graphOptionsChanged()), this, SLOT(updateOptionsFromVars())); +} + +GraphOptionsWidget::~GraphOptionsWidget() {} + + +void GraphOptionsWidget::updateOptionsFromVars() +{ + ui->maxColsSpinBox->blockSignals(true); + ui->maxColsSpinBox->setValue(Config()->getGraphBlockMaxChars()); + ui->maxColsSpinBox->blockSignals(false); +} + + +void GraphOptionsWidget::triggerOptionsChanged() +{ + disconnect(Core(), SIGNAL(graphOptionsChanged()), this, SLOT(updateOptionsFromVars())); + Core()->triggerGraphOptionsChanged(); + connect(Core(), SIGNAL(graphOptionsChanged()), this, SLOT(updateOptionsFromVars())); +} + +void GraphOptionsWidget::on_maxColsSpinBox_valueChanged(int value) +{ + Config()->setGraphBlockMaxChars(value); + triggerOptionsChanged(); +} + diff --git a/src/dialogs/preferences/GraphOptionsWidget.h b/src/dialogs/preferences/GraphOptionsWidget.h new file mode 100644 index 00000000..f48aacc8 --- /dev/null +++ b/src/dialogs/preferences/GraphOptionsWidget.h @@ -0,0 +1,38 @@ + +#ifndef GRAPHOPTIONSWIDGET_H +#define GRAPHOPTIONSWIDGET_H + +#include +#include +#include + +#include "cutter.h" + +class PreferencesDialog; + +namespace Ui +{ + class GraphOptionsWidget; +} + +class GraphOptionsWidget : public QDialog +{ + Q_OBJECT + +public: + explicit GraphOptionsWidget(PreferencesDialog *dialog, QWidget *parent = nullptr); + ~GraphOptionsWidget(); + +private: + std::unique_ptr ui; + + void triggerOptionsChanged(); + +private slots: + void updateOptionsFromVars(); + + void on_maxColsSpinBox_valueChanged(int value); +}; + + +#endif //GRAPHOPTIONSWIDGET_H diff --git a/src/dialogs/preferences/GraphOptionsWidget.ui b/src/dialogs/preferences/GraphOptionsWidget.ui new file mode 100644 index 00000000..05e3ad59 --- /dev/null +++ b/src/dialogs/preferences/GraphOptionsWidget.ui @@ -0,0 +1,41 @@ + + + GraphOptionsWidget + + + + 0 + 0 + 400 + 300 + + + + Graph + + + + + + Maximum Line Length: + + + + + + + 10 + + + 999999999 + + + 5 + + + + + + + + diff --git a/src/dialogs/preferences/PreferencesDialog.cpp b/src/dialogs/preferences/PreferencesDialog.cpp index 252a5164..8588d3ec 100644 --- a/src/dialogs/preferences/PreferencesDialog.cpp +++ b/src/dialogs/preferences/PreferencesDialog.cpp @@ -6,6 +6,7 @@ #include "GeneralOptionsWidget.h" #include "AsmOptionsWidget.h" +#include "GraphOptionsWidget.h" #include "utils/Helpers.h" #include "utils/Configuration.h" @@ -20,6 +21,7 @@ PreferencesDialog::PreferencesDialog(QWidget *parent) #define ADD_TAB(c) { auto w = new c(this); ui->tabWidget->addTab(w, w->windowTitle()); } ADD_TAB(GeneralOptionsWidget) ADD_TAB(AsmOptionsWidget) + ADD_TAB(GraphOptionsWidget) #undef ADD_TAB } diff --git a/src/widgets/DisassemblerGraphView.cpp b/src/widgets/DisassemblerGraphView.cpp index 3c72d1ea..6c6913b4 100644 --- a/src/widgets/DisassemblerGraphView.cpp +++ b/src/widgets/DisassemblerGraphView.cpp @@ -26,6 +26,7 @@ DisassemblerGraphView::DisassemblerGraphView(QWidget *parent) connect(Core(), SIGNAL(varsChanged()), this, SLOT(refreshView())); connect(Core(), SIGNAL(instructionChanged(RVA)), this, SLOT(refreshView())); connect(Core(), SIGNAL(functionsChanged()), this, SLOT(refreshView())); + connect(Core(), SIGNAL(graphOptionsChanged()), this, SLOT(refreshView())); connect(Config(), SIGNAL(colorsUpdated()), this, SLOT(colorsUpdatedSlot())); connect(Config(), SIGNAL(fontsUpdated()), this, SLOT(fontsUpdatedSlot()));