Add Plugins Section to Preferences

This commit is contained in:
Florian Märkl 2019-03-16 13:41:45 +01:00
parent dffb9dccb9
commit aa591e1a47
19 changed files with 162 additions and 76 deletions

View File

@ -315,6 +315,7 @@ SOURCES += \
widgets/DebugActions.cpp \ widgets/DebugActions.cpp \
widgets/MemoryMapWidget.cpp \ widgets/MemoryMapWidget.cpp \
dialogs/preferences/DebugOptionsWidget.cpp \ dialogs/preferences/DebugOptionsWidget.cpp \
dialogs/preferences/PluginsOptionsWidget.cpp \
widgets/BreakpointWidget.cpp \ widgets/BreakpointWidget.cpp \
dialogs/BreakpointsDialog.cpp \ dialogs/BreakpointsDialog.cpp \
dialogs/AttachProcDialog.cpp \ dialogs/AttachProcDialog.cpp \
@ -431,6 +432,7 @@ HEADERS += \
widgets/DebugActions.h \ widgets/DebugActions.h \
widgets/MemoryMapWidget.h \ widgets/MemoryMapWidget.h \
dialogs/preferences/DebugOptionsWidget.h \ dialogs/preferences/DebugOptionsWidget.h \
dialogs/preferences/PluginsOptionsWidget.h \
widgets/BreakpointWidget.h \ widgets/BreakpointWidget.h \
dialogs/BreakpointsDialog.h \ dialogs/BreakpointsDialog.h \
dialogs/AttachProcDialog.h \ dialogs/AttachProcDialog.h \

View File

@ -59,7 +59,7 @@
</sizepolicy> </sizepolicy>
</property> </property>
<property name="text"> <property name="text">
<string>Show plugin information</string> <string>Show radare2 plugin information</string>
</property> </property>
</widget> </widget>
</item> </item>

View File

@ -51,15 +51,6 @@ R2PluginsDialog::R2PluginsDialog(QWidget *parent) :
ui->RAsmTreeWidget->addTopLevelItem(item); ui->RAsmTreeWidget->addTopLevelItem(item);
} }
qhelpers::adjustColumns(ui->RAsmTreeWidget, 0); 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() R2PluginsDialog::~R2PluginsDialog()

View File

@ -188,47 +188,6 @@
</item> </item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="CutterTab">
<attribute name="title">
<string>Cutter</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_6">
<item>
<widget class="QLabel" name="CutterLabel">
<property name="text">
<string>Cutter plugins</string>
</property>
</widget>
</item>
<item>
<widget class="QTreeWidget" name="CutterTreeWidget">
<property name="sortingEnabled">
<bool>true</bool>
</property>
<column>
<property name="text">
<string>Name</string>
</property>
</column>
<column>
<property name="text">
<string>Description</string>
</property>
</column>
<column>
<property name="text">
<string>Version</string>
</property>
</column>
<column>
<property name="text">
<string>Author</string>
</property>
</column>
</widget>
</item>
</layout>
</widget>
</widget> </widget>
</item> </item>
<item> <item>

View File

@ -30,11 +30,10 @@ static const QHash<QString, ColorFlags> kRelevantSchemes = {
{ "white", LightFlag } { "white", LightFlag }
}; };
AppearanceOptionsWidget::AppearanceOptionsWidget(PreferencesDialog *dialog, QWidget *parent) AppearanceOptionsWidget::AppearanceOptionsWidget(PreferencesDialog *dialog)
: QDialog(parent), : QDialog(dialog),
ui(new Ui::AppearanceOptionsWidget) ui(new Ui::AppearanceOptionsWidget)
{ {
Q_UNUSED(dialog);
ui->setupUi(this); ui->setupUi(this);
updateFontFromConfig(); updateFontFromConfig();

View File

@ -19,7 +19,7 @@ class AppearanceOptionsWidget : public QDialog
Q_OBJECT Q_OBJECT
public: public:
explicit AppearanceOptionsWidget(PreferencesDialog *dialog, QWidget *parent = nullptr); explicit AppearanceOptionsWidget(PreferencesDialog *dialog);
~AppearanceOptionsWidget(); ~AppearanceOptionsWidget();
private: private:

View File

@ -9,11 +9,10 @@
#include "common/Helpers.h" #include "common/Helpers.h"
#include "common/Configuration.h" #include "common/Configuration.h"
AsmOptionsWidget::AsmOptionsWidget(PreferencesDialog *dialog, QWidget *parent) AsmOptionsWidget::AsmOptionsWidget(PreferencesDialog *dialog)
: QDialog(parent), : QDialog(dialog),
ui(new Ui::AsmOptionsWidget) ui(new Ui::AsmOptionsWidget)
{ {
Q_UNUSED(dialog)
ui->setupUi(this); ui->setupUi(this);

View File

@ -19,7 +19,7 @@ class AsmOptionsWidget : public QDialog
Q_OBJECT Q_OBJECT
public: public:
explicit AsmOptionsWidget(PreferencesDialog *dialog, QWidget *parent = nullptr); explicit AsmOptionsWidget(PreferencesDialog *dialog);
~AsmOptionsWidget(); ~AsmOptionsWidget();
private: private:

View File

@ -10,11 +10,10 @@
#include "common/Helpers.h" #include "common/Helpers.h"
#include "common/Configuration.h" #include "common/Configuration.h"
DebugOptionsWidget::DebugOptionsWidget(PreferencesDialog *dialog, QWidget *parent) DebugOptionsWidget::DebugOptionsWidget(PreferencesDialog *dialog)
: QDialog(parent), : QDialog(dialog),
ui(new Ui::DebugOptionsWidget) ui(new Ui::DebugOptionsWidget)
{ {
Q_UNUSED(dialog);
ui->setupUi(this); ui->setupUi(this);
updateDebugPlugin(); updateDebugPlugin();

View File

@ -16,7 +16,7 @@ class DebugOptionsWidget : public QDialog
Q_OBJECT Q_OBJECT
public: public:
explicit DebugOptionsWidget(PreferencesDialog *dialog, QWidget *parent = nullptr); explicit DebugOptionsWidget(PreferencesDialog *dialog);
~DebugOptionsWidget(); ~DebugOptionsWidget();
private: private:

View File

@ -9,12 +9,10 @@
#include "common/Helpers.h" #include "common/Helpers.h"
#include "common/Configuration.h" #include "common/Configuration.h"
GraphOptionsWidget::GraphOptionsWidget(PreferencesDialog *dialog, QWidget *parent) GraphOptionsWidget::GraphOptionsWidget(PreferencesDialog *dialog)
: QDialog(parent), : QDialog(dialog),
ui(new Ui::GraphOptionsWidget) ui(new Ui::GraphOptionsWidget)
{ {
Q_UNUSED(dialog)
ui->setupUi(this); ui->setupUi(this);
updateOptionsFromVars(); updateOptionsFromVars();

View File

@ -19,7 +19,7 @@ class GraphOptionsWidget : public QDialog
Q_OBJECT Q_OBJECT
public: public:
explicit GraphOptionsWidget(PreferencesDialog *dialog, QWidget *parent = nullptr); explicit GraphOptionsWidget(PreferencesDialog *dialog);
~GraphOptionsWidget(); ~GraphOptionsWidget();
private: private:

View File

@ -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 <QLabel>
#include <QPushButton>
#include <QTreeWidget>
#include <QVBoxLayout>
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() {}

View File

@ -0,0 +1,19 @@
#ifndef PLUGINSOPTIONSWIDGET_H
#define PLUGINSOPTIONSWIDGET_H
#include <QDialog>
class PreferencesDialog;
class PluginsOptionsWidget : public QDialog
{
Q_OBJECT
public:
explicit PluginsOptionsWidget(PreferencesDialog *dialog);
~PluginsOptionsWidget();
};
#endif //CUTTER_PLUGINSOPTIONSWIDGET_H

View File

@ -1,5 +1,3 @@
#include <QDialogButtonBox>
#include "PreferencesDialog.h" #include "PreferencesDialog.h"
#include "ui_PreferencesDialog.h" #include "ui_PreferencesDialog.h"
@ -7,12 +5,15 @@
#include "AsmOptionsWidget.h" #include "AsmOptionsWidget.h"
#include "GraphOptionsWidget.h" #include "GraphOptionsWidget.h"
#include "DebugOptionsWidget.h" #include "DebugOptionsWidget.h"
#include "PluginsOptionsWidget.h"
#include "PreferenceCategory.h" #include "PreferenceCategory.h"
#include "common/Helpers.h" #include "common/Helpers.h"
#include "common/Configuration.h" #include "common/Configuration.h"
#include <QDialogButtonBox>
PreferencesDialog::PreferencesDialog(QWidget *parent) PreferencesDialog::PreferencesDialog(QWidget *parent)
: QDialog(parent), : QDialog(parent),
@ -25,7 +26,7 @@ PreferencesDialog::PreferencesDialog(QWidget *parent)
QList<PreferenceCategory> prefs { QList<PreferenceCategory> prefs {
{ {
"Assembly", tr("Disassembly"),
new AsmOptionsWidget(this), new AsmOptionsWidget(this),
QIcon(":/img/icons/disas_light.svg"), QIcon(":/img/icons/disas_light.svg"),
{ {
@ -37,14 +38,19 @@ PreferencesDialog::PreferencesDialog(QWidget *parent)
} }
}, },
{ {
"Debug", tr("Debug"),
new DebugOptionsWidget(this), new DebugOptionsWidget(this),
QIcon(":/img/icons/bug_light.svg") QIcon(":/img/icons/bug_light.svg")
}, },
{ {
"Appearance", tr("Appearance"),
new AppearanceOptionsWidget(this), new AppearanceOptionsWidget(this),
QIcon(":/img/icons/polar_light.svg") QIcon(":/img/icons/polar_light.svg")
},
{
tr("Plugins"),
new PluginsOptionsWidget(this),
QIcon(":/img/icons/plugins_light.svg")
} }
}; };

View File

@ -2,12 +2,13 @@
#ifndef PREFERENCESDIALOG_H #ifndef PREFERENCESDIALOG_H
#define PREFERENCESDIALOG_H #define PREFERENCESDIALOG_H
#include "core/Cutter.h"
#include <QDialog> #include <QDialog>
#include <QPushButton>
#include <QTreeWidget>
#include <memory> #include <memory>
#include "core/Cutter.h" class QTreeWidgetItem;
namespace Ui { namespace Ui {
class PreferencesDialog; class PreferencesDialog;

View File

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
style="enable-background:new 0 0 32 32"
xml:space="preserve"
height="32px"
width="32px"
version="1.1"
y="0px"
x="0px"
viewBox="0 0 32 32"
id="svg8"
sodipodi:docname="plugin.svg"
inkscape:version="0.92.4 5da689c313, 2019-01-14"><metadata
id="metadata14"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
id="defs12">
</defs><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1918"
inkscape:window-height="1042"
id="namedview10"
showgrid="false"
inkscape:zoom="10.429825"
inkscape:cx="-16.624731"
inkscape:cy="16.507785"
inkscape:window-x="1920"
inkscape:window-y="18"
inkscape:window-maximized="1"
inkscape:current-layer="svg8"
inkscape:snap-bbox="true" />
<path
inkscape:connector-curvature="0"
id="rect5115"
d="M 13,0 C 10.784,0 9,1.784 9,4 V 6 H 4 C 1.784,6 0,7.784 0,10 v 5 h 2 c 2.216,0 4,1.784 4,4 0,2.216 -1.784,4 -4,4 H 0 v 5 c 0,2.216 1.784,4 4,4 h 5 v -2 c 0,-2.216 1.784,-4 4,-4 2.216,0 4,1.784 4,4 v 2 h 5 c 2.216,0 4,-1.784 4,-4 v -5 h 2 c 2.216,0 4,-1.784 4,-4 0,-2.216 -1.784,-4 -4,-4 H 26 V 10 C 26,7.784 24.216,6 22,6 H 17 V 4 C 17,1.784 15.216,0 13,0 Z"
style="display:inline;fill:#aaacaf;fill-opacity:1;stroke:none;stroke-width:1.9352982;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:label="puzzle" />
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -9,11 +9,13 @@
#include "dialogs/SetToDataDialog.h" #include "dialogs/SetToDataDialog.h"
#include "dialogs/EditFunctionDialog.h" #include "dialogs/EditFunctionDialog.h"
#include "dialogs/LinkTypeDialog.h" #include "dialogs/LinkTypeDialog.h"
#include <QtCore> #include <QtCore>
#include <QShortcut> #include <QShortcut>
#include <QJsonArray> #include <QJsonArray>
#include <QClipboard> #include <QClipboard>
#include <QApplication> #include <QApplication>
#include <QPushButton>
DisassemblyContextMenu::DisassemblyContextMenu(QWidget *parent) DisassemblyContextMenu::DisassemblyContextMenu(QWidget *parent)
: QMenu(parent), : QMenu(parent),

View File

@ -84,6 +84,7 @@
<file>img/icons/previous.svg</file> <file>img/icons/previous.svg</file>
<file>img/icons/list.svg</file> <file>img/icons/list.svg</file>
<file>img/icons/fork.svg</file> <file>img/icons/fork.svg</file>
<file>img/icons/plugins_light.svg</file>
<file>python/cutter.py</file> <file>python/cutter.py</file>
<file>python/reg_qtres_importer.py</file> <file>python/reg_qtres_importer.py</file>
</qresource> </qresource>