Small refactor for the widgets of Cutter (#405)

* Small refactor for the widgets of Cutter

This refactor include the following :

* Creation of a new class
Creation of a new class, named CutterWidget, that inherits from QDockWidget and
is used to represent all of the widgets of the main window.
The goal of this class is to regroup all the behaviour shared by the widgets of
Cutter.

For example : in the constructor, instructions corresponding of those
present in the macro **ADD_DOCK** (in MainWindow.cpp) are executed.
This was made because I think that the macro **ADD_DOCK** which is used
to construct the widgets does not take advantage of the object structure.

* Ensure that every widget has a parent
Some widgets were created using the constructor QDockWidget, but using
**nullptr** (default) as argument, thus they haven't got any parent.

The constructor of a CutterWidget takes as argument the MainWindow and an
action (optional) and calls the constructor of QDockWidget with the main
window as argument. This is valid under the assumption that it is mandatory
for every widget to have the main window as a parent.

* Constructors removal
The constructors of some widgets are not used anywhere and does not seem not
fullfill any current usecase. They were removed.

* Renaming CutterWidget to CutterDockWidget
This commit is contained in:
Nics 2018-03-16 22:46:57 +01:00 committed by xarkes
parent 98ea17c85a
commit c4e8a1c178
53 changed files with 306 additions and 265 deletions

View File

@ -142,7 +142,9 @@ SOURCES += \
widgets/JupyterWidget.cpp \
utils/PythonAPI.cpp \
utils/NestedIPyKernel.cpp \
dialogs/R2PluginsDialog.cpp
dialogs/R2PluginsDialog.cpp \
widgets/CutterDockWidget.cpp \
widgets/GraphWidget.cpp
HEADERS += \
Cutter.h \
@ -209,7 +211,9 @@ HEADERS += \
widgets/JupyterWidget.h \
utils/PythonAPI.h \
utils/NestedIPyKernel.h \
dialogs/R2PluginsDialog.h
dialogs/R2PluginsDialog.h \
widgets/CutterDockWidget.h \
widgets/GraphWidget.h
FORMS += \
dialogs/AboutDialog.ui \

View File

@ -43,6 +43,7 @@
#include "dialogs/NewFileDialog.h"
#include "widgets/DisassemblerGraphView.h"
#include "widgets/GraphWidget.h"
#include "widgets/FunctionsWidget.h"
#include "widgets/SectionsWidget.h"
#include "widgets/CommentsWidget.h"
@ -150,78 +151,44 @@ void MainWindow::initUI()
*/
dockWidgets.reserve(20);
#define ADD_DOCK(cls, dockMember, action) \
{ \
(dockMember) = new cls(this); \
dockWidgets.push_back(dockMember); \
connect((action), &QAction::triggered, this, [this](bool checked) \
{ \
toggleDockWidget((dockMember), checked); \
}); \
dockWidgetActions[action] = (dockMember); \
}
ADD_DOCK(DisassemblyWidget, disassemblyDock, ui->actionDisassembly);
ADD_DOCK(SidebarWidget, sidebarDock, ui->actionSidebar);
ADD_DOCK(HexdumpWidget, hexdumpDock, ui->actionHexdump);
ADD_DOCK(PseudocodeWidget, pseudocodeDock, ui->actionPseudocode);
ADD_DOCK(ConsoleWidget, consoleDock, ui->actionConsole);
disassemblyDock = new DisassemblyWidget(this, ui->actionDisassembly);
sidebarDock = new SidebarWidget(this, ui->actionSidebar);
hexdumpDock = new HexdumpWidget(this, ui->actionHexdump);
pseudocodeDock = new PseudocodeWidget(this, ui->actionPseudocode);
consoleDock = new ConsoleWidget(this, ui->actionConsole);
// Add graph view as dockable
graphDock = new QDockWidget(tr("Graph"), this);
graphDock->setObjectName("Graph");
graphDock->setAllowedAreas(Qt::AllDockWidgetAreas);
graphView = new DisassemblerGraphView(graphDock);
graphDock->setWidget(graphView);
graphDock = new GraphWidget(this, ui->actionGraph);
// Hide centralWidget as we do not need it
ui->centralWidget->hide();
connect(graphDock, &QDockWidget::visibilityChanged, graphDock, [](bool visibility)
{
if (visibility)
{
Core()->setMemoryWidgetPriority(CutterCore::MemoryWidgetType::Graph);
}
});
connect(Core(), &CutterCore::raisePrioritizedMemoryWidget, graphDock, [ = ](CutterCore::MemoryWidgetType type)
{
if (type == CutterCore::MemoryWidgetType::Graph)
{
graphDock->raise();
graphView->setFocus();
}
});
dockWidgets.push_back(graphDock);
connect(ui->actionGraph, &QAction::triggered, this, [this](bool checked)
{
toggleDockWidget(graphDock, checked);
});
ADD_DOCK(SectionsDock, sectionsDock, ui->actionSections);
ADD_DOCK(EntrypointWidget, entrypointDock, ui->actionEntrypoints);
ADD_DOCK(FunctionsWidget, functionsDock, ui->actionFunctions);
ADD_DOCK(ImportsWidget, importsDock, ui->actionImports);
ADD_DOCK(ExportsWidget, exportsDock, ui->actionExports);
ADD_DOCK(TypesWidget, typesDock, ui->actionTypes);
ADD_DOCK(SearchWidget, searchDock, ui->actionSearchInst);
ADD_DOCK(SymbolsWidget, symbolsDock, ui->actionSymbols);
ADD_DOCK(RelocsWidget, relocsDock, ui->actionRelocs);
ADD_DOCK(CommentsWidget, commentsDock, ui->actionComments);
ADD_DOCK(StringsWidget, stringsDock, ui->actionStrings);
ADD_DOCK(FlagsWidget, flagsDock, ui->actionFlags);
sectionsDock = new SectionsDock(this, ui->actionSections);
disassemblyDock = new DisassemblyWidget(this, ui->actionDisassembly);
entrypointDock = new EntrypointWidget(this, ui->actionEntrypoints);
functionsDock = new FunctionsWidget(this, ui->actionFunctions);
importsDock = new ImportsWidget(this, ui->actionImports);
exportsDock = new ExportsWidget(this, ui->actionExports);
typesDock = new TypesWidget(this, ui->actionTypes);
searchDock = new SearchWidget(this, ui->actionSearch);
symbolsDock = new SymbolsWidget(this, ui->actionSymbols);
relocsDock = new RelocsWidget(this, ui->actionRelocs);
commentsDock = new CommentsWidget(this, ui->actionComments);
stringsDock = new StringsWidget(this, ui->actionStrings);
flagsDock = new FlagsWidget(this, ui->actionFlags);
#ifdef CUTTER_ENABLE_JUPYTER
ADD_DOCK(JupyterWidget, jupyterDock, ui->actionJupyter);
jupyterDock = new JupyterWidget(this, ui->actionJupyter);
#else
ui->actionJupyter->setEnabled(false);
ui->actionJupyter->setVisible(false);
#endif
ADD_DOCK(Dashboard, dashboardDock, ui->actionDashboard);
ADD_DOCK(SdbDock, sdbDock, ui->actionSDBBrowser);
ADD_DOCK(ClassesWidget, classesDock, ui->actionClasses);
ADD_DOCK(ResourcesWidget, resourcesDock, ui->actionResources);
ADD_DOCK(VTablesWidget, vTablesDock, ui->actionVTables);
dashboardDock = new Dashboard(this, ui->actionDashboard);
disassemblyDock = new DisassemblyWidget(this, ui->actionDisassembly);
sdbDock = new SdbDock(this, ui->actionSDBBrowser);
classesDock = new ClassesWidget(this, ui->actionClasses);
resourcesDock = new ResourcesWidget(this, ui->actionResources);
vTablesDock = new VTablesWidget(this, ui->actionVTables);
#undef ADD_DOCK
// Set up dock widgets default layout
resetToDefaultLayout();
@ -484,19 +451,6 @@ void MainWindow::lockUnlock_Docks(bool what)
}
void MainWindow::toggleDockWidget(QDockWidget *dock_widget, bool show)
{
if (!show)
{
dock_widget->close();
}
else
{
dock_widget->show();
dock_widget->raise();
}
}
void MainWindow::restoreDocks()
{
// In the upper half the functions are the first widget
@ -808,3 +762,11 @@ void MainWindow::projectSaved(const QString &name)
{
addOutput(tr("Project saved: ") + name);
}
void MainWindow::addToDockWidgetList(QDockWidget *dockWidget) {
this->dockWidgets.push_back(dockWidget);
}
void MainWindow::addDockWidgetAction(QDockWidget *dockWidget, QAction *action) {
this->dockWidgetActions[action] = dockWidget;
}

View File

@ -91,6 +91,9 @@ public:
void addDebugOutput(const QString &msg);
void refreshOmniBar(const QStringList &flags);
void addToDockWidgetList(QDockWidget *dockWidget);
void addDockWidgetAction(QDockWidget *dockWidget, QAction *action);
public slots:
void refreshAll();
@ -198,8 +201,6 @@ private:
JupyterWidget *jupyterDock = nullptr;
#endif
void toggleDockWidget(QDockWidget *dock_widget, bool show);
void resetToDefaultLayout();
void restoreDocks();
@ -207,6 +208,8 @@ private:
void showDefaultDocks();
void updateDockActionsChecked();
void toggleDockWidget(QDockWidget *dock_widget, bool show);
public:
QString getFilename() const { return filename; }
};

View File

@ -2,6 +2,7 @@
#include <QList>
#include "ClassesWidget.h"
#include "MainWindow.h"
#include "ui_ClassesWidget.h"
#include "utils/Helpers.h"
@ -242,8 +243,8 @@ bool ClassesSortFilterProxyModel::lessThan(const QModelIndex &left, const QModel
ClassesWidget::ClassesWidget(QWidget *parent) :
QDockWidget(parent),
ClassesWidget::ClassesWidget(MainWindow *main, QAction *action) :
CutterDockWidget(main, action),
ui(new Ui::ClassesWidget)
{
ui->setupUi(this);

View File

@ -4,10 +4,10 @@
#include <memory>
#include "Cutter.h"
#include "CutterDockWidget.h"
#include <QAbstractListModel>
#include <QSortFilterProxyModel>
#include <QDockWidget>
namespace Ui
{
@ -16,6 +16,7 @@ namespace Ui
class QTreeWidget;
class QTreeWidgetItem;
class MainWindow;
class ClassesModel: public QAbstractItemModel
@ -65,12 +66,12 @@ protected:
class ClassesWidget : public QDockWidget
class ClassesWidget : public CutterDockWidget
{
Q_OBJECT
public:
explicit ClassesWidget(QWidget *parent = nullptr);
explicit ClassesWidget(MainWindow *main, QAction *action = nullptr);
~ClassesWidget();
private slots:

View File

@ -7,8 +7,8 @@
#include "MainWindow.h"
#include "utils/Helpers.h"
CommentsWidget::CommentsWidget(MainWindow *main, QWidget *parent) :
QDockWidget(parent),
CommentsWidget::CommentsWidget(MainWindow *main, QAction *action) :
CutterDockWidget(main, action),
ui(new Ui::CommentsWidget),
main(main)
{

View File

@ -3,7 +3,7 @@
#include <memory>
#include <QDockWidget>
#include "CutterDockWidget.h"
class MainWindow;
class QTreeWidgetItem;
@ -13,12 +13,12 @@ namespace Ui
class CommentsWidget;
}
class CommentsWidget : public QDockWidget
class CommentsWidget : public CutterDockWidget
{
Q_OBJECT
public:
explicit CommentsWidget(MainWindow *main, QWidget *parent = 0);
explicit CommentsWidget(MainWindow *main, QAction *action = nullptr);
~CommentsWidget();
protected:

View File

@ -90,8 +90,8 @@ static bool isForbidden(const QString &input)
return false;
}
ConsoleWidget::ConsoleWidget(QWidget *parent, Qt::WindowFlags flags) :
QDockWidget(parent, flags),
ConsoleWidget::ConsoleWidget(MainWindow *main, QAction *action) :
CutterDockWidget(main, action),
ui(new Ui::ConsoleWidget),
debugOutputEnabled(true),
maxHistoryEntries(100),
@ -110,9 +110,9 @@ ConsoleWidget::ConsoleWidget(QWidget *parent, Qt::WindowFlags flags) :
QTextDocument *console_docu = ui->outputTextEdit->document();
console_docu->setDocumentMargin(10);
QAction *action = new QAction(tr("Clear Output"), ui->outputTextEdit);
connect(action, SIGNAL(triggered(bool)), ui->outputTextEdit, SLOT(clear()));
actions.append(action);
QAction *actionClear = new QAction(tr("Clear Output"), ui->outputTextEdit);
connect(actionClear, SIGNAL(triggered(bool)), ui->outputTextEdit, SLOT(clear()));
actions.append(actionClear);
// Completion
QCompleter *completer = new QCompleter(radareArgs, this);
@ -144,12 +144,6 @@ ConsoleWidget::ConsoleWidget(QWidget *parent, Qt::WindowFlags flags) :
connect(Config(), SIGNAL(fontsUpdated()), this, SLOT(setupFont()));
}
ConsoleWidget::ConsoleWidget(const QString &title, QWidget *parent, Qt::WindowFlags flags)
: ConsoleWidget(parent, flags)
{
setWindowTitle(title);
}
ConsoleWidget::~ConsoleWidget() {}
void ConsoleWidget::setupFont()

View File

@ -1,9 +1,9 @@
#ifndef CONSOLEWIDGET_H
#define CONSOLEWIDGET_H
#include <QWidget>
#include <memory>
#include "MainWindow.h"
#include "CutterDockWidget.h"
namespace Ui
{
@ -11,13 +11,12 @@ namespace Ui
}
class ConsoleWidget : public QDockWidget
class ConsoleWidget : public CutterDockWidget
{
Q_OBJECT
public:
explicit ConsoleWidget(const QString &title, QWidget *parent = nullptr, Qt::WindowFlags flags = 0);
explicit ConsoleWidget(QWidget *parent = nullptr, Qt::WindowFlags flags = 0);
explicit ConsoleWidget(MainWindow *main, QAction *action = nullptr);
~ConsoleWidget();

View File

@ -0,0 +1,37 @@
#include "CutterDockWidget.h"
#include "MainWindow.h"
CutterDockWidget::CutterDockWidget(MainWindow *main, QAction *action) :
QDockWidget(main),
action(action)
{
main->addToDockWidgetList(this);
if (action) {
main->addDockWidgetAction(this, action);
connect(action, &QAction::triggered, this, &CutterDockWidget::toggleDockWidget);
}
}
void CutterDockWidget::toggleDockWidget(bool show)
{
if (!show)
{
this->close();
}
else
{
this->show();
this->raise();
}
}
void CutterDockWidget::closeEvent(QCloseEvent * event) {
if (action) {
this->action->setChecked(false);
}
QDockWidget::closeEvent(event);
}
CutterDockWidget::~CutterDockWidget() {}

View File

@ -0,0 +1,27 @@
#ifndef CUTTERWIDGET_H
#define CUTTERWIDGET_H
#include <QDockWidget>
class MainWindow;
class CutterDockWidget : public QDockWidget
{
Q_OBJECT
public:
explicit CutterDockWidget(MainWindow *main, QAction *action = nullptr);
~CutterDockWidget();
public slots:
void toggleDockWidget(bool show);
private:
QAction *action;
protected:
void closeEvent(QCloseEvent * event) override;
};
#endif // CUTTERWIDGET_H

View File

@ -12,11 +12,9 @@
#include <QFile>
#include <QLayoutItem>
Dashboard::Dashboard(MainWindow *main, QWidget *parent) :
QDockWidget(parent),
ui(new Ui::Dashboard),
main(main)
Dashboard::Dashboard(MainWindow *main, QAction *action) :
CutterDockWidget(main, action),
ui(new Ui::Dashboard)
{
ui->setupUi(this);

View File

@ -2,8 +2,7 @@
#define DASHBOARD_H
#include <memory>
#include <QDockWidget>
#include "CutterDockWidget.h"
class MainWindow;
@ -12,12 +11,12 @@ namespace Ui
class Dashboard;
}
class Dashboard : public QDockWidget
class Dashboard : public CutterDockWidget
{
Q_OBJECT
public:
explicit Dashboard(MainWindow *main, QWidget *parent = 0);
explicit Dashboard(MainWindow *main, QAction *action = nullptr);
~Dashboard();
private slots:
@ -25,7 +24,6 @@ private slots:
private:
std::unique_ptr<Ui::Dashboard> ui;
MainWindow *main;
};
#endif // DASHBOARD_H

View File

@ -37,8 +37,8 @@ static DisassemblyTextBlockUserData *getUserData(const QTextBlock &block)
}
DisassemblyWidget::DisassemblyWidget(QWidget *parent)
: QDockWidget(parent)
DisassemblyWidget::DisassemblyWidget(MainWindow *main, QAction *action)
: CutterDockWidget(main, action)
, mCtxMenu(new DisassemblyContextMenu(this))
, mDisasScrollArea(new DisassemblyScrollArea(this))
, mDisasTextEdit(new DisassemblyTextEdit(this))

View File

@ -2,7 +2,7 @@
#define DISASSEMBLYWIDGET_H
#include "Cutter.h"
#include <QDockWidget>
#include "CutterDockWidget.h"
#include <QTextEdit>
#include <QPlainTextEdit>
#include <QShortcut>
@ -12,11 +12,11 @@ class DisassemblyTextEdit;
class DisassemblyScrollArea;
class DisassemblyContextMenu;
class DisassemblyWidget : public QDockWidget
class DisassemblyWidget : public CutterDockWidget
{
Q_OBJECT
public:
explicit DisassemblyWidget(QWidget *parent = nullptr);
explicit DisassemblyWidget(MainWindow *main, QAction *action = nullptr);
QWidget* getTextWidget();
public slots:

View File

@ -12,10 +12,9 @@
* Entrypoint Widget
*/
EntrypointWidget::EntrypointWidget(MainWindow *main, QWidget *parent) :
QDockWidget(parent),
ui(new Ui::EntrypointWidget),
main(main)
EntrypointWidget::EntrypointWidget(MainWindow *main, QAction *action) :
CutterDockWidget(main, action),
ui(new Ui::EntrypointWidget)
{
ui->setupUi(this);

View File

@ -2,11 +2,11 @@
#define ENTRYPOINTWIDGET_H
#include <memory>
#include <QDockWidget>
#include <QStyledItemDelegate>
#include <QTreeWidgetItem>
#include "CutterDockWidget.h"
class MainWindow;
class QTreeWidget;
@ -15,12 +15,12 @@ namespace Ui
class EntrypointWidget;
}
class EntrypointWidget : public QDockWidget
class EntrypointWidget : public CutterDockWidget
{
Q_OBJECT
public:
explicit EntrypointWidget(MainWindow *main, QWidget *parent = 0);
explicit EntrypointWidget(MainWindow *main, QAction *action = nullptr);
~EntrypointWidget();
private slots:
@ -30,7 +30,6 @@ private slots:
private:
std::unique_ptr<Ui::EntrypointWidget> ui;
MainWindow *main;
void setScrollMode();
};

View File

@ -129,16 +129,12 @@ bool ExportsSortFilterProxyModel::lessThan(const QModelIndex &left, const QModel
ExportsWidget::ExportsWidget(MainWindow *main, QWidget *parent) :
QDockWidget(parent),
ui(new Ui::ExportsWidget),
main(main)
ExportsWidget::ExportsWidget(MainWindow *main, QAction *action) :
CutterDockWidget(main, action),
ui(new Ui::ExportsWidget)
{
ui->setupUi(this);
// Radare core found in:
this->main = main;
exports_model = new ExportsModel(&exports, this);
exports_proxy_model = new ExportsSortFilterProxyModel(exports_model, this);
ui->exportsTreeView->setModel(exports_proxy_model);

View File

@ -4,10 +4,10 @@
#include <memory>
#include "Cutter.h"
#include "CutterDockWidget.h"
#include <QAbstractListModel>
#include <QSortFilterProxyModel>
#include <QDockWidget>
class MainWindow;
class QTreeWidget;
@ -61,12 +61,12 @@ protected:
class ExportsWidget : public QDockWidget
class ExportsWidget : public CutterDockWidget
{
Q_OBJECT
public:
explicit ExportsWidget(MainWindow *main, QWidget *parent = 0);
explicit ExportsWidget(MainWindow *main, QAction *action = nullptr);
~ExportsWidget();
private slots:
@ -76,7 +76,6 @@ private slots:
private:
std::unique_ptr<Ui::ExportsWidget> ui;
MainWindow *main;
ExportsModel *exports_model;
ExportsSortFilterProxyModel *exports_proxy_model;

View File

@ -1,4 +1,3 @@
#include <QDockWidget>
#include <QTreeWidget>
#include <QComboBox>
#include <QMenu>
@ -127,8 +126,8 @@ bool FlagsSortFilterProxyModel::lessThan(const QModelIndex &left, const QModelIn
}
FlagsWidget::FlagsWidget(MainWindow *main, QWidget *parent) :
QDockWidget(parent),
FlagsWidget::FlagsWidget(MainWindow *main, QAction *action) :
CutterDockWidget(main, action),
ui(new Ui::FlagsWidget),
main(main)
{

View File

@ -5,9 +5,9 @@
#include <QAbstractItemModel>
#include <QSortFilterProxyModel>
#include <QDockWidget>
#include "Cutter.h"
#include "CutterDockWidget.h"
class MainWindow;
class QTreeWidgetItem;
@ -57,12 +57,12 @@ namespace Ui
class FlagsWidget;
}
class FlagsWidget : public QDockWidget
class FlagsWidget : public CutterDockWidget
{
Q_OBJECT
public:
explicit FlagsWidget(MainWindow *main, QWidget *parent = 0);
explicit FlagsWidget(MainWindow *main, QAction *action = nullptr);
~FlagsWidget();
private slots:

View File

@ -347,10 +347,9 @@ bool FunctionSortFilterProxyModel::lessThan(const QModelIndex &left, const QMode
}
}
FunctionsWidget::FunctionsWidget(MainWindow *main, QWidget *parent) :
QDockWidget(parent),
ui(new Ui::FunctionsWidget),
main(main)
FunctionsWidget::FunctionsWidget(MainWindow *main, QAction *action) :
CutterDockWidget(main, action),
ui(new Ui::FunctionsWidget)
{
ui->setupUi(this);

View File

@ -5,9 +5,9 @@
#include <QSortFilterProxyModel>
#include <QTreeView>
#include <QDockWidget>
#include "Cutter.h"
#include "CutterDockWidget.h"
class MainWindow;
class QTreeWidgetItem;
@ -86,12 +86,12 @@ protected:
class FunctionsWidget : public QDockWidget
class FunctionsWidget : public CutterDockWidget
{
Q_OBJECT
public:
explicit FunctionsWidget(MainWindow *main, QWidget *parent = 0);
explicit FunctionsWidget(MainWindow *main, QAction *action = nullptr);
~FunctionsWidget();
private slots:

View File

@ -0,0 +1,34 @@
#include "MainWindow.h"
#include "GraphWidget.h"
#include "DisassemblerGraphView.h"
GraphWidget::GraphWidget(MainWindow *main, QAction *action) :
CutterDockWidget(main, action)
{
this->setObjectName("Graph");
this->setAllowedAreas(Qt::AllDockWidgetAreas);
this->graphView = new DisassemblerGraphView(this);
this->setWidget(graphView);
connect(this, &QDockWidget::visibilityChanged, this, [](bool visibility)
{
if (visibility)
{
Core()->setMemoryWidgetPriority(CutterCore::MemoryWidgetType::Graph);
}
});
connect(Core(), &CutterCore::raisePrioritizedMemoryWidget, this, [ = ](CutterCore::MemoryWidgetType type)
{
if (type == CutterCore::MemoryWidgetType::Graph)
{
this->raise();
this->graphView->setFocus();
}
});
}
GraphWidget::~GraphWidget() {}

22
src/widgets/GraphWidget.h Normal file
View File

@ -0,0 +1,22 @@
#ifndef GRAPHWIDGET_H
#define GRAPHWIDGET_H
#include "CutterDockWidget.h"
class MainWindow;
class DisassemblerGraphView;
class GraphWidget : public CutterDockWidget
{
Q_OBJECT
public:
explicit GraphWidget(MainWindow *main, QAction *action = nullptr);
~GraphWidget();
private:
DisassemblerGraphView *graphView;
};
#endif // GRAPHWIDGET_H

View File

@ -13,8 +13,8 @@
#include <QClipboard>
#include <QScrollBar>
HexdumpWidget::HexdumpWidget(QWidget *parent, Qt::WindowFlags flags) :
QDockWidget(parent, flags),
HexdumpWidget::HexdumpWidget(MainWindow *main, QAction *action) :
CutterDockWidget(main, action),
ui(new Ui::HexdumpWidget)
{
ui->setupUi(this);
@ -85,12 +85,6 @@ HexdumpWidget::HexdumpWidget(QWidget *parent, Qt::WindowFlags flags) :
selectHexPreview();
}
HexdumpWidget::HexdumpWidget(const QString &title, QWidget *parent, Qt::WindowFlags flags)
: HexdumpWidget(parent, flags)
{
setWindowTitle(title);
}
void HexdumpWidget::setupScrollSync()
{
/*

View File

@ -3,13 +3,13 @@
#include <QDebug>
#include <QTextEdit>
#include <QDockWidget>
#include <QMouseEvent>
#include <array>
#include <memory>
#include "Cutter.h"
#include "CutterDockWidget.h"
#include "utils/Highlighter.h"
#include "utils/HexAsciiHighlighter.h"
#include "utils/HexHighlighter.h"
@ -19,14 +19,13 @@
#include "ui_HexdumpWidget.h"
class HexdumpWidget : public QDockWidget
class HexdumpWidget : public CutterDockWidget
{
Q_OBJECT
public:
explicit HexdumpWidget(const QString &title, QWidget *parent = nullptr, Qt::WindowFlags flags = 0);
explicit HexdumpWidget(QWidget *parent = nullptr, Qt::WindowFlags flags = 0);
explicit HexdumpWidget(MainWindow *main, QAction *action = nullptr);
~HexdumpWidget();
Highlighter *highlighter;

View File

@ -32,10 +32,9 @@ void CMyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, c
* Imports Widget
*/
ImportsWidget::ImportsWidget(MainWindow *main, QWidget *parent) :
QDockWidget(parent),
ui(new Ui::ImportsWidget),
main(main)
ImportsWidget::ImportsWidget(MainWindow *main, QAction *action) :
CutterDockWidget(main, action),
ui(new Ui::ImportsWidget)
{
ui->setupUi(this);

View File

@ -3,10 +3,11 @@
#include <memory>
#include <QDockWidget>
#include <QStyledItemDelegate>
#include <QTreeWidgetItem>
#include "CutterDockWidget.h"
class MainWindow;
class QTreeWidget;
@ -15,12 +16,12 @@ namespace Ui
class ImportsWidget;
}
class ImportsWidget : public QDockWidget
class ImportsWidget : public CutterDockWidget
{
Q_OBJECT
public:
explicit ImportsWidget(MainWindow *main, QWidget *parent = 0);
explicit ImportsWidget(MainWindow *main, QAction *action);
~ImportsWidget();
private slots:
@ -30,7 +31,6 @@ private slots:
private:
std::unique_ptr<Ui::ImportsWidget> ui;
MainWindow *main;
void highlightUnsafe();
void setScrollMode();

View File

@ -14,8 +14,8 @@
#include <QWebEngineSettings>
#endif
JupyterWidget::JupyterWidget(QWidget *parent, Qt::WindowFlags flags) :
QDockWidget(parent, flags),
JupyterWidget::JupyterWidget(MainWindow *main, QAction *action) :
CutterDockWidget(main, action),
ui(new Ui::JupyterWidget)
{
ui->setupUi(this);

View File

@ -6,9 +6,9 @@
#include <memory>
#include <QDockWidget>
#include <QAbstractButton>
#include "CutterDockWidget.h"
#include "utils/JupyterConnection.h"
namespace Ui
@ -17,15 +17,15 @@ namespace Ui
}
class JupyterWebView;
class QTabWidget;
class MainWindow;
class JupyterWidget : public QDockWidget
class JupyterWidget : public CutterDockWidget
{
Q_OBJECT
public:
JupyterWidget(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());
JupyterWidget(MainWindow *main, QAction *action = nullptr);
~JupyterWidget();
#ifdef CUTTER_ENABLE_QTWEBENGINE

View File

@ -8,8 +8,8 @@
#include "utils/SyntaxHighlighter.h"
#include "utils/TempConfig.h"
PseudocodeWidget::PseudocodeWidget(QWidget *parent, Qt::WindowFlags flags) :
QDockWidget(parent, flags),
PseudocodeWidget::PseudocodeWidget(MainWindow *main, QAction *action) :
CutterDockWidget(main, action),
ui(new Ui::PseudocodeWidget)
{
ui->setupUi(this);
@ -47,12 +47,6 @@ PseudocodeWidget::PseudocodeWidget(QWidget *parent, Qt::WindowFlags flags) :
refresh(RVA_INVALID);
}
PseudocodeWidget::PseudocodeWidget(const QString &title, QWidget *parent, Qt::WindowFlags flags)
: PseudocodeWidget(parent, flags)
{
setWindowTitle(title);
}
PseudocodeWidget::~PseudocodeWidget() {}

View File

@ -1,10 +1,10 @@
#ifndef PSEUDOCODEWIDGET_H
#define PSEUDOCODEWIDGET_H
#include <QDockWidget>
#include <memory>
#include "Cutter.h"
#include "CutterDockWidget.h"
namespace Ui
{
@ -14,13 +14,12 @@ namespace Ui
class QTextEdit;
class SyntaxHighlighter;
class PseudocodeWidget : public QDockWidget
class PseudocodeWidget : public CutterDockWidget
{
Q_OBJECT
public:
explicit PseudocodeWidget(const QString &title, QWidget *parent = nullptr, Qt::WindowFlags flags = 0);
explicit PseudocodeWidget(QWidget *parent = nullptr, Qt::WindowFlags flags = 0);
explicit PseudocodeWidget(MainWindow *main, QAction *action = nullptr);
~PseudocodeWidget();
private slots:

View File

@ -4,16 +4,12 @@
#include "MainWindow.h"
#include "utils/Helpers.h"
RelocsWidget::RelocsWidget(MainWindow *main, QWidget *parent) :
QDockWidget(parent),
ui(new Ui::RelocsWidget),
main(main)
RelocsWidget::RelocsWidget(MainWindow *main, QAction *action) :
CutterDockWidget(main, action),
ui(new Ui::RelocsWidget)
{
ui->setupUi(this);
// Radare core found in:
this->main = main;
setScrollMode();
connect(Core(), SIGNAL(refreshAll()), this, SLOT(fillTreeWidget()));

View File

@ -3,7 +3,7 @@
#include <memory>
#include <QDockWidget>
#include "CutterDockWidget.h"
class MainWindow;
class QTreeWidgetItem;
@ -13,12 +13,12 @@ namespace Ui
class RelocsWidget;
}
class RelocsWidget : public QDockWidget
class RelocsWidget : public CutterDockWidget
{
Q_OBJECT
public:
explicit RelocsWidget(MainWindow *main, QWidget *parent = 0);
explicit RelocsWidget(MainWindow *main, QAction *action = nullptr);
~RelocsWidget();
private slots:
@ -28,7 +28,6 @@ private slots:
private:
std::unique_ptr<Ui::RelocsWidget> ui;
MainWindow *main;
void setScrollMode();
};

View File

@ -1,5 +1,6 @@
#include "utils/Helpers.h"
#include "ResourcesWidget.h"
#include "MainWindow.h"
#include <QVBoxLayout>
ResourcesModel::ResourcesModel(QList<ResourcesDescription> *resources, QObject *parent)
@ -86,8 +87,8 @@ void ResourcesModel::endReload()
endResetModel();
}
ResourcesWidget::ResourcesWidget(QWidget *parent)
: QDockWidget(parent)
ResourcesWidget::ResourcesWidget(MainWindow *main, QAction *action) :
CutterDockWidget(main, action)
{
setObjectName("ResourcesWidget");

View File

@ -2,11 +2,13 @@
#define RESOURCESWIDGET_H
#include "Cutter.h"
#include "CutterDockWidget.h"
#include <QDockWidget>
#include <QAbstractListModel>
#include <QTreeView>
class MainWindow;
class ResourcesModel : public QAbstractListModel
{
Q_OBJECT
@ -28,7 +30,7 @@ public:
void endReload();
};
class ResourcesWidget : public QDockWidget
class ResourcesWidget : public CutterDockWidget
{
Q_OBJECT
@ -38,7 +40,7 @@ private:
QList<ResourcesDescription> resources;
public:
ResourcesWidget(QWidget *parent = nullptr);
explicit ResourcesWidget(MainWindow *main, QAction *action = nullptr);
private slots:
void refreshResources();

View File

@ -7,8 +7,8 @@
#include <QTreeWidget>
SdbDock::SdbDock(QWidget *parent) :
QDockWidget(parent),
SdbDock::SdbDock(MainWindow *main, QAction *action) :
CutterDockWidget(main, action),
ui(new Ui::SdbDock)
{
ui->setupUi(this);

View File

@ -3,7 +3,7 @@
#include <memory>
#include <QDockWidget>
#include "CutterDockWidget.h"
class MainWindow;
class QTreeWidgetItem;
@ -13,12 +13,12 @@ namespace Ui
class SdbDock;
}
class SdbDock : public QDockWidget
class SdbDock : public CutterDockWidget
{
Q_OBJECT
public:
explicit SdbDock(QWidget *parent = 0);
explicit SdbDock(MainWindow *main, QAction *action = nullptr);
~SdbDock();
private slots:

View File

@ -122,10 +122,9 @@ bool SearchSortFilterProxyModel::lessThan(const QModelIndex &left, const QModelI
}
SearchWidget::SearchWidget(MainWindow *main, QWidget *parent) :
QDockWidget(parent),
ui(new Ui::SearchWidget),
main(main)
SearchWidget::SearchWidget(MainWindow *main, QAction *action) :
CutterDockWidget(main, action),
ui(new Ui::SearchWidget)
{
ui->setupUi(this);

View File

@ -5,9 +5,9 @@
#include <QAbstractItemModel>
#include <QSortFilterProxyModel>
#include <QDockWidget>
#include "Cutter.h"
#include "CutterDockWidget.h"
class MainWindow;
class QTreeWidgetItem;
@ -57,12 +57,12 @@ namespace Ui
class SearchWidget;
}
class SearchWidget : public QDockWidget
class SearchWidget : public CutterDockWidget
{
Q_OBJECT
public:
explicit SearchWidget(MainWindow *main, QWidget *parent = 0);
explicit SearchWidget(MainWindow *main, QAction *action = nullptr);
~SearchWidget();
private slots:
@ -73,7 +73,6 @@ private slots:
private:
std::unique_ptr<Ui::SearchWidget> ui;
MainWindow *main;
SearchModel *search_model;
SearchSortFilterProxyModel *search_proxy_model;

View File

@ -8,15 +8,13 @@
#include <QResizeEvent>
SectionsDock::SectionsDock(MainWindow *main, QWidget *parent) :
QDockWidget(parent),
ui(new Ui::SectionsDock)
SectionsDock::SectionsDock(MainWindow *main, QAction *action) :
CutterDockWidget(main, action),
ui(new Ui::SectionsDock),
main(main)
{
ui->setupUi(this);
// Radare core found in:
this->main = main;
this->sectionsWidget = new SectionsWidget(this->main);
this->setWidget(this->sectionsWidget);
this->sectionsWidget->setContentsMargins(0, 0, 0, 5);

View File

@ -3,7 +3,7 @@
#include <memory>
#include <QDockWidget>
#include "CutterDockWidget.h"
class MainWindow;
class SectionsWidget;
@ -13,12 +13,12 @@ namespace Ui
class SectionsDock;
}
class SectionsDock : public QDockWidget
class SectionsDock : public CutterDockWidget
{
Q_OBJECT
public:
explicit SectionsDock(MainWindow *main, QWidget *parent = 0);
explicit SectionsDock(MainWindow *main, QAction *action = nullptr);
~SectionsDock();
protected:

View File

@ -16,8 +16,8 @@
#include <QSettings>
SidebarWidget::SidebarWidget(QWidget *parent, Qt::WindowFlags flags) :
QDockWidget(parent, flags),
SidebarWidget::SidebarWidget(MainWindow *main, QAction *action) :
CutterDockWidget(main, action),
ui(new Ui::SidebarWidget)
{
ui->setupUi(this);
@ -35,13 +35,6 @@ SidebarWidget::SidebarWidget(QWidget *parent, Qt::WindowFlags flags) :
connect(Core(), SIGNAL(refreshAll()), this, SLOT(refresh()));
}
SidebarWidget::SidebarWidget(const QString &title, QWidget *parent, Qt::WindowFlags flags)
: SidebarWidget(parent, flags)
{
setWindowTitle(title);
}
SidebarWidget::~SidebarWidget()
{
}

View File

@ -5,14 +5,15 @@
#include <QDebug>
#include <QTextEdit>
#include <QDockWidget>
#include <QTreeWidget>
#include <QTabWidget>
#include <QUrl>
#include <QPlainTextEdit>
#include <QMouseEvent>
#include <memory>
#include "Cutter.h"
#include "CutterDockWidget.h"
#include "utils/Highlighter.h"
#include "utils/HexAsciiHighlighter.h"
#include "utils/HexHighlighter.h"
@ -24,13 +25,12 @@ namespace Ui
class SidebarWidget;
}
class SidebarWidget : public QDockWidget
class SidebarWidget : public CutterDockWidget
{
Q_OBJECT
public:
explicit SidebarWidget(const QString &title, QWidget *parent = nullptr, Qt::WindowFlags flags = 0);
explicit SidebarWidget(QWidget *parent = nullptr, Qt::WindowFlags flags = 0);
explicit SidebarWidget(MainWindow *main, QAction *action = nullptr);
~SidebarWidget();
private:

View File

@ -132,8 +132,8 @@ bool StringsSortFilterProxyModel::lessThan(const QModelIndex &left, const QModel
}
StringsWidget::StringsWidget(QWidget *parent) :
QDockWidget(parent),
StringsWidget::StringsWidget(MainWindow *main, QAction *action) :
CutterDockWidget(main, action),
ui(new Ui::StringsWidget)
{
ui->setupUi(this);

View File

@ -4,10 +4,10 @@
#include <memory>
#include "Cutter.h"
#include "CutterDockWidget.h"
#include <QAbstractListModel>
#include <QSortFilterProxyModel>
#include <QDockWidget>
class MainWindow;
class QTreeWidgetItem;
@ -55,12 +55,12 @@ protected:
};
class StringsWidget : public QDockWidget
class StringsWidget : public CutterDockWidget
{
Q_OBJECT
public:
explicit StringsWidget(QWidget *parent = nullptr);
explicit StringsWidget(MainWindow *main, QAction *action = nullptr);
~StringsWidget();
private slots:

View File

@ -7,8 +7,8 @@
#include <QTreeWidget>
SymbolsWidget::SymbolsWidget(QWidget *parent) :
QDockWidget(parent),
SymbolsWidget::SymbolsWidget(MainWindow *main, QAction *action) :
CutterDockWidget(main, action),
ui(new Ui::SymbolsWidget)
{
ui->setupUi(this);

View File

@ -3,7 +3,7 @@
#include <memory>
#include <QDockWidget>
#include "CutterDockWidget.h"
class MainWindow;
class QTreeWidgetItem;
@ -13,12 +13,12 @@ namespace Ui
class SymbolsWidget;
}
class SymbolsWidget : public QDockWidget
class SymbolsWidget : public CutterDockWidget
{
Q_OBJECT
public:
explicit SymbolsWidget(QWidget *parent = 0);
explicit SymbolsWidget(MainWindow *main, QAction *action = nullptr);
~SymbolsWidget();
private slots:

View File

@ -113,16 +113,12 @@ bool TypesSortFilterProxyModel::lessThan(const QModelIndex &left, const QModelIn
TypesWidget::TypesWidget(MainWindow *main, QWidget *parent) :
QDockWidget(parent),
ui(new Ui::TypesWidget),
main(main)
TypesWidget::TypesWidget(MainWindow *main, QAction *action) :
CutterDockWidget(main, action),
ui(new Ui::TypesWidget)
{
ui->setupUi(this);
// Radare core found in:
this->main = main;
types_model = new TypesModel(&types, this);
types_proxy_model = new TypesSortFilterProxyModel(types_model, this);
ui->typesTreeView->setModel(types_proxy_model);

View File

@ -4,10 +4,10 @@
#include <memory>
#include "Cutter.h"
#include "CutterDockWidget.h"
#include <QAbstractListModel>
#include <QSortFilterProxyModel>
#include <QDockWidget>
class MainWindow;
class QTreeWidget;
@ -61,12 +61,12 @@ protected:
class TypesWidget : public QDockWidget
class TypesWidget : public CutterDockWidget
{
Q_OBJECT
public:
explicit TypesWidget(MainWindow *main, QWidget *parent = 0);
explicit TypesWidget(MainWindow *main, QAction *action = nullptr);
~TypesWidget();
private slots:
@ -76,7 +76,6 @@ private slots:
private:
std::unique_ptr<Ui::TypesWidget> ui;
MainWindow *main;
TypesModel *types_model;
TypesSortFilterProxyModel *types_proxy_model;

View File

@ -1,6 +1,7 @@
#include <QShortcut>
#include <QModelIndex>
#include "MainWindow.h"
#include "VTablesWidget.h"
#include "ui_VTablesWidget.h"
@ -142,8 +143,8 @@ bool VTableSortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIn
}
VTablesWidget::VTablesWidget(QWidget *parent) :
QDockWidget(parent),
VTablesWidget::VTablesWidget(MainWindow *main, QAction *action) :
CutterDockWidget(main, action),
ui(new Ui::VTablesWidget)
{
ui->setupUi(this);

View File

@ -5,15 +5,17 @@
#include <QTreeView>
#include <QSortFilterProxyModel>
#include <QDockWidget>
#include "Cutter.h"
#include "CutterDockWidget.h"
namespace Ui
{
class VTablesWidget;
}
class MainWindow;
class VTableModel : public QAbstractItemModel
{
Q_OBJECT
@ -49,12 +51,12 @@ protected:
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
};
class VTablesWidget : public QDockWidget
class VTablesWidget : public CutterDockWidget
{
Q_OBJECT
public:
explicit VTablesWidget(QWidget *parent = 0);
explicit VTablesWidget(MainWindow *main, QAction *action = nullptr);
~VTablesWidget();
private slots: