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/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 \

View File

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

View File

@ -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()

View File

@ -188,47 +188,6 @@
</item>
</layout>
</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>
</item>
<item>

View File

@ -30,11 +30,10 @@ static const QHash<QString, ColorFlags> 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();

View File

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

View File

@ -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);

View File

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

View File

@ -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();

View File

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

View File

@ -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();

View File

@ -19,7 +19,7 @@ class GraphOptionsWidget : public QDialog
Q_OBJECT
public:
explicit GraphOptionsWidget(PreferencesDialog *dialog, QWidget *parent = nullptr);
explicit GraphOptionsWidget(PreferencesDialog *dialog);
~GraphOptionsWidget();
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 "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 <QDialogButtonBox>
PreferencesDialog::PreferencesDialog(QWidget *parent)
: QDialog(parent),
@ -25,7 +26,7 @@ PreferencesDialog::PreferencesDialog(QWidget *parent)
QList<PreferenceCategory> 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")
}
};

View File

@ -2,12 +2,13 @@
#ifndef PREFERENCESDIALOG_H
#define PREFERENCESDIALOG_H
#include "core/Cutter.h"
#include <QDialog>
#include <QPushButton>
#include <QTreeWidget>
#include <memory>
#include "core/Cutter.h"
class QTreeWidgetItem;
namespace Ui {
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/EditFunctionDialog.h"
#include "dialogs/LinkTypeDialog.h"
#include <QtCore>
#include <QShortcut>
#include <QJsonArray>
#include <QClipboard>
#include <QApplication>
#include <QPushButton>
DisassemblyContextMenu::DisassemblyContextMenu(QWidget *parent)
: QMenu(parent),

View File

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