From aa591e1a4719be58c83afb7e0d8f8dd87755ceba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=A4rkl?= Date: Sat, 16 Mar 2019 13:41:45 +0100 Subject: [PATCH] Add Plugins Section to Preferences --- src/Cutter.pro | 2 + src/dialogs/AboutDialog.ui | 2 +- src/dialogs/R2PluginsDialog.cpp | 9 --- src/dialogs/R2PluginsDialog.ui | 41 -------------- .../preferences/AppearanceOptionsWidget.cpp | 5 +- .../preferences/AppearanceOptionsWidget.h | 2 +- src/dialogs/preferences/AsmOptionsWidget.cpp | 5 +- src/dialogs/preferences/AsmOptionsWidget.h | 2 +- .../preferences/DebugOptionsWidget.cpp | 5 +- src/dialogs/preferences/DebugOptionsWidget.h | 2 +- .../preferences/GraphOptionsWidget.cpp | 6 +- src/dialogs/preferences/GraphOptionsWidget.h | 2 +- .../preferences/PluginsOptionsWidget.cpp | 56 +++++++++++++++++++ .../preferences/PluginsOptionsWidget.h | 19 +++++++ src/dialogs/preferences/PreferencesDialog.cpp | 16 ++++-- src/dialogs/preferences/PreferencesDialog.h | 7 ++- src/img/icons/plugins_light.svg | 54 ++++++++++++++++++ src/menus/DisassemblyContextMenu.cpp | 2 + src/resources.qrc | 1 + 19 files changed, 162 insertions(+), 76 deletions(-) create mode 100644 src/dialogs/preferences/PluginsOptionsWidget.cpp create mode 100644 src/dialogs/preferences/PluginsOptionsWidget.h create mode 100644 src/img/icons/plugins_light.svg diff --git a/src/Cutter.pro b/src/Cutter.pro index 9c5fb37a..7d549ecf 100644 --- a/src/Cutter.pro +++ b/src/Cutter.pro @@ -315,6 +315,7 @@ SOURCES += \ widgets/DebugActions.cpp \ widgets/MemoryMapWidget.cpp \ dialogs/preferences/DebugOptionsWidget.cpp \ + dialogs/preferences/PluginsOptionsWidget.cpp \ widgets/BreakpointWidget.cpp \ dialogs/BreakpointsDialog.cpp \ dialogs/AttachProcDialog.cpp \ @@ -431,6 +432,7 @@ HEADERS += \ widgets/DebugActions.h \ widgets/MemoryMapWidget.h \ dialogs/preferences/DebugOptionsWidget.h \ + dialogs/preferences/PluginsOptionsWidget.h \ widgets/BreakpointWidget.h \ dialogs/BreakpointsDialog.h \ dialogs/AttachProcDialog.h \ diff --git a/src/dialogs/AboutDialog.ui b/src/dialogs/AboutDialog.ui index dea81d4c..193194ab 100644 --- a/src/dialogs/AboutDialog.ui +++ b/src/dialogs/AboutDialog.ui @@ -59,7 +59,7 @@ - Show plugin information + Show radare2 plugin information diff --git a/src/dialogs/R2PluginsDialog.cpp b/src/dialogs/R2PluginsDialog.cpp index 4670cc39..964fecd5 100644 --- a/src/dialogs/R2PluginsDialog.cpp +++ b/src/dialogs/R2PluginsDialog.cpp @@ -51,15 +51,6 @@ R2PluginsDialog::R2PluginsDialog(QWidget *parent) : ui->RAsmTreeWidget->addTopLevelItem(item); } qhelpers::adjustColumns(ui->RAsmTreeWidget, 0); - - for (CutterPlugin *plugin : Plugins()->getPlugins()) { - QTreeWidgetItem *item = new QTreeWidgetItem(); - item->setText(0, plugin->getName()); - item->setText(1, plugin->getDescription()); - item->setText(2, plugin->getVersion()); - item->setText(3, plugin->getAuthor()); - ui->CutterTreeWidget->addTopLevelItem(item); - } } R2PluginsDialog::~R2PluginsDialog() diff --git a/src/dialogs/R2PluginsDialog.ui b/src/dialogs/R2PluginsDialog.ui index 49381420..871c1ae5 100644 --- a/src/dialogs/R2PluginsDialog.ui +++ b/src/dialogs/R2PluginsDialog.ui @@ -188,47 +188,6 @@ - - - Cutter - - - - - - Cutter plugins - - - - - - - true - - - - Name - - - - - Description - - - - - Version - - - - - Author - - - - - - diff --git a/src/dialogs/preferences/AppearanceOptionsWidget.cpp b/src/dialogs/preferences/AppearanceOptionsWidget.cpp index f3f6f1ce..6501b6f8 100644 --- a/src/dialogs/preferences/AppearanceOptionsWidget.cpp +++ b/src/dialogs/preferences/AppearanceOptionsWidget.cpp @@ -30,11 +30,10 @@ static const QHash kRelevantSchemes = { { "white", LightFlag } }; -AppearanceOptionsWidget::AppearanceOptionsWidget(PreferencesDialog *dialog, QWidget *parent) - : QDialog(parent), +AppearanceOptionsWidget::AppearanceOptionsWidget(PreferencesDialog *dialog) + : QDialog(dialog), ui(new Ui::AppearanceOptionsWidget) { - Q_UNUSED(dialog); ui->setupUi(this); updateFontFromConfig(); diff --git a/src/dialogs/preferences/AppearanceOptionsWidget.h b/src/dialogs/preferences/AppearanceOptionsWidget.h index d4141774..1182944c 100644 --- a/src/dialogs/preferences/AppearanceOptionsWidget.h +++ b/src/dialogs/preferences/AppearanceOptionsWidget.h @@ -19,7 +19,7 @@ class AppearanceOptionsWidget : public QDialog Q_OBJECT public: - explicit AppearanceOptionsWidget(PreferencesDialog *dialog, QWidget *parent = nullptr); + explicit AppearanceOptionsWidget(PreferencesDialog *dialog); ~AppearanceOptionsWidget(); private: diff --git a/src/dialogs/preferences/AsmOptionsWidget.cpp b/src/dialogs/preferences/AsmOptionsWidget.cpp index 357ab2ee..a4bb9217 100644 --- a/src/dialogs/preferences/AsmOptionsWidget.cpp +++ b/src/dialogs/preferences/AsmOptionsWidget.cpp @@ -9,11 +9,10 @@ #include "common/Helpers.h" #include "common/Configuration.h" -AsmOptionsWidget::AsmOptionsWidget(PreferencesDialog *dialog, QWidget *parent) - : QDialog(parent), +AsmOptionsWidget::AsmOptionsWidget(PreferencesDialog *dialog) + : QDialog(dialog), ui(new Ui::AsmOptionsWidget) { - Q_UNUSED(dialog) ui->setupUi(this); diff --git a/src/dialogs/preferences/AsmOptionsWidget.h b/src/dialogs/preferences/AsmOptionsWidget.h index 5c9a88c8..320216cb 100644 --- a/src/dialogs/preferences/AsmOptionsWidget.h +++ b/src/dialogs/preferences/AsmOptionsWidget.h @@ -19,7 +19,7 @@ class AsmOptionsWidget : public QDialog Q_OBJECT public: - explicit AsmOptionsWidget(PreferencesDialog *dialog, QWidget *parent = nullptr); + explicit AsmOptionsWidget(PreferencesDialog *dialog); ~AsmOptionsWidget(); private: diff --git a/src/dialogs/preferences/DebugOptionsWidget.cpp b/src/dialogs/preferences/DebugOptionsWidget.cpp index e8f35dc4..39935141 100644 --- a/src/dialogs/preferences/DebugOptionsWidget.cpp +++ b/src/dialogs/preferences/DebugOptionsWidget.cpp @@ -10,11 +10,10 @@ #include "common/Helpers.h" #include "common/Configuration.h" -DebugOptionsWidget::DebugOptionsWidget(PreferencesDialog *dialog, QWidget *parent) - : QDialog(parent), +DebugOptionsWidget::DebugOptionsWidget(PreferencesDialog *dialog) + : QDialog(dialog), ui(new Ui::DebugOptionsWidget) { - Q_UNUSED(dialog); ui->setupUi(this); updateDebugPlugin(); diff --git a/src/dialogs/preferences/DebugOptionsWidget.h b/src/dialogs/preferences/DebugOptionsWidget.h index 7985c446..54a163e1 100644 --- a/src/dialogs/preferences/DebugOptionsWidget.h +++ b/src/dialogs/preferences/DebugOptionsWidget.h @@ -16,7 +16,7 @@ class DebugOptionsWidget : public QDialog Q_OBJECT public: - explicit DebugOptionsWidget(PreferencesDialog *dialog, QWidget *parent = nullptr); + explicit DebugOptionsWidget(PreferencesDialog *dialog); ~DebugOptionsWidget(); private: diff --git a/src/dialogs/preferences/GraphOptionsWidget.cpp b/src/dialogs/preferences/GraphOptionsWidget.cpp index e7540aa8..d3d51270 100644 --- a/src/dialogs/preferences/GraphOptionsWidget.cpp +++ b/src/dialogs/preferences/GraphOptionsWidget.cpp @@ -9,12 +9,10 @@ #include "common/Helpers.h" #include "common/Configuration.h" -GraphOptionsWidget::GraphOptionsWidget(PreferencesDialog *dialog, QWidget *parent) - : QDialog(parent), +GraphOptionsWidget::GraphOptionsWidget(PreferencesDialog *dialog) + : QDialog(dialog), ui(new Ui::GraphOptionsWidget) { - Q_UNUSED(dialog) - ui->setupUi(this); updateOptionsFromVars(); diff --git a/src/dialogs/preferences/GraphOptionsWidget.h b/src/dialogs/preferences/GraphOptionsWidget.h index 64c0d2fc..1337e583 100644 --- a/src/dialogs/preferences/GraphOptionsWidget.h +++ b/src/dialogs/preferences/GraphOptionsWidget.h @@ -19,7 +19,7 @@ class GraphOptionsWidget : public QDialog Q_OBJECT public: - explicit GraphOptionsWidget(PreferencesDialog *dialog, QWidget *parent = nullptr); + explicit GraphOptionsWidget(PreferencesDialog *dialog); ~GraphOptionsWidget(); private: diff --git a/src/dialogs/preferences/PluginsOptionsWidget.cpp b/src/dialogs/preferences/PluginsOptionsWidget.cpp new file mode 100644 index 00000000..781494b6 --- /dev/null +++ b/src/dialogs/preferences/PluginsOptionsWidget.cpp @@ -0,0 +1,56 @@ + +#include "PluginsOptionsWidget.h" + +#include "PreferencesDialog.h" + +#include "common/Helpers.h" +#include "common/Configuration.h" +#include "plugins/PluginManager.h" +#include "dialogs/R2PluginsDialog.h" + +#include +#include +#include +#include + + +PluginsOptionsWidget::PluginsOptionsWidget(PreferencesDialog *dialog) + : QDialog(dialog) +{ + auto layout = new QVBoxLayout(this); + setLayout(layout); + + auto dirLabel = new QLabel(this); + layout->addWidget(dirLabel); + dirLabel->setText(tr("Plugins are loaded from %1").arg(Plugins()->getPluginsDirectory())); + + auto treeWidget = new QTreeWidget(this); + layout->addWidget(treeWidget); + treeWidget->setRootIsDecorated(false); + treeWidget->setHeaderLabels({ + tr("Name"), + tr("Description"), + tr("Version"), + tr("Author") + }); + + for (CutterPlugin *plugin : Plugins()->getPlugins()) { + auto item = new QTreeWidgetItem(); + item->setText(0, plugin->getName()); + item->setText(1, plugin->getDescription()); + item->setText(2, plugin->getVersion()); + item->setText(3, plugin->getAuthor()); + treeWidget->addTopLevelItem(item); + } + qhelpers::adjustColumns(treeWidget, 0); + + auto r2PluginsButton = new QPushButton(this); + layout->addWidget(r2PluginsButton); + r2PluginsButton->setText(tr("Show radare2 plugin information")); + connect(r2PluginsButton, &QPushButton::clicked, this, [this]() { + R2PluginsDialog dialog(this); + dialog.exec(); + }); +} + +PluginsOptionsWidget::~PluginsOptionsWidget() {} \ No newline at end of file diff --git a/src/dialogs/preferences/PluginsOptionsWidget.h b/src/dialogs/preferences/PluginsOptionsWidget.h new file mode 100644 index 00000000..894777c3 --- /dev/null +++ b/src/dialogs/preferences/PluginsOptionsWidget.h @@ -0,0 +1,19 @@ + +#ifndef PLUGINSOPTIONSWIDGET_H +#define PLUGINSOPTIONSWIDGET_H + +#include + +class PreferencesDialog; + +class PluginsOptionsWidget : public QDialog +{ +Q_OBJECT + +public: + explicit PluginsOptionsWidget(PreferencesDialog *dialog); + ~PluginsOptionsWidget(); +}; + + +#endif //CUTTER_PLUGINSOPTIONSWIDGET_H diff --git a/src/dialogs/preferences/PreferencesDialog.cpp b/src/dialogs/preferences/PreferencesDialog.cpp index 1e874527..e98ba857 100644 --- a/src/dialogs/preferences/PreferencesDialog.cpp +++ b/src/dialogs/preferences/PreferencesDialog.cpp @@ -1,5 +1,3 @@ -#include - #include "PreferencesDialog.h" #include "ui_PreferencesDialog.h" @@ -7,12 +5,15 @@ #include "AsmOptionsWidget.h" #include "GraphOptionsWidget.h" #include "DebugOptionsWidget.h" +#include "PluginsOptionsWidget.h" #include "PreferenceCategory.h" #include "common/Helpers.h" #include "common/Configuration.h" +#include + PreferencesDialog::PreferencesDialog(QWidget *parent) : QDialog(parent), @@ -25,7 +26,7 @@ PreferencesDialog::PreferencesDialog(QWidget *parent) QList prefs { { - "Assembly", + tr("Disassembly"), new AsmOptionsWidget(this), QIcon(":/img/icons/disas_light.svg"), { @@ -37,14 +38,19 @@ PreferencesDialog::PreferencesDialog(QWidget *parent) } }, { - "Debug", + tr("Debug"), new DebugOptionsWidget(this), QIcon(":/img/icons/bug_light.svg") }, { - "Appearance", + tr("Appearance"), new AppearanceOptionsWidget(this), QIcon(":/img/icons/polar_light.svg") + }, + { + tr("Plugins"), + new PluginsOptionsWidget(this), + QIcon(":/img/icons/plugins_light.svg") } }; diff --git a/src/dialogs/preferences/PreferencesDialog.h b/src/dialogs/preferences/PreferencesDialog.h index 8f92ff3d..595bebaa 100644 --- a/src/dialogs/preferences/PreferencesDialog.h +++ b/src/dialogs/preferences/PreferencesDialog.h @@ -2,12 +2,13 @@ #ifndef PREFERENCESDIALOG_H #define PREFERENCESDIALOG_H +#include "core/Cutter.h" + #include -#include -#include + #include -#include "core/Cutter.h" +class QTreeWidgetItem; namespace Ui { class PreferencesDialog; diff --git a/src/img/icons/plugins_light.svg b/src/img/icons/plugins_light.svg new file mode 100644 index 00000000..bc509e9e --- /dev/null +++ b/src/img/icons/plugins_light.svg @@ -0,0 +1,54 @@ + +image/svg+xml + + + + + \ No newline at end of file diff --git a/src/menus/DisassemblyContextMenu.cpp b/src/menus/DisassemblyContextMenu.cpp index 8465fe18..53a45668 100644 --- a/src/menus/DisassemblyContextMenu.cpp +++ b/src/menus/DisassemblyContextMenu.cpp @@ -9,11 +9,13 @@ #include "dialogs/SetToDataDialog.h" #include "dialogs/EditFunctionDialog.h" #include "dialogs/LinkTypeDialog.h" + #include #include #include #include #include +#include DisassemblyContextMenu::DisassemblyContextMenu(QWidget *parent) : QMenu(parent), diff --git a/src/resources.qrc b/src/resources.qrc index 4d44e914..9b563c5a 100644 --- a/src/resources.qrc +++ b/src/resources.qrc @@ -84,6 +84,7 @@ img/icons/previous.svg img/icons/list.svg img/icons/fork.svg + img/icons/plugins_light.svg python/cutter.py python/reg_qtres_importer.py