mirror of
https://github.com/rizinorg/cutter.git
synced 2025-02-22 06:33:46 +00:00
Use DockWidget base class
- DockWidgets inherit from base class and implement the interface - Move setup/refresh code from MainWindow to widgets - Remove unused/uneeded members - Use helper functions - Fix compiler/cppcheck warnings - Cleanup headers
This commit is contained in:
parent
8e542d40fe
commit
6f2607fc3c
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
|
|
||||||
|
#include <QGraphicsView>
|
||||||
#include <QComboBox>
|
#include <QComboBox>
|
||||||
#include <QGraphicsScene>
|
#include <QGraphicsScene>
|
||||||
#include <QGraphicsRectItem>
|
#include <QGraphicsRectItem>
|
||||||
@ -16,7 +17,7 @@ GraphicsBar::GraphicsBar(MainWindow *main, QWidget *parent) :
|
|||||||
QNOTUSED(parent);
|
QNOTUSED(parent);
|
||||||
|
|
||||||
setObjectName("codeGraphics");
|
setObjectName("codeGraphics");
|
||||||
setWindowTitle("Code bar");
|
setWindowTitle(tr("Code bar"));
|
||||||
// setMovable(false);
|
// setMovable(false);
|
||||||
setContentsMargins(0, 0, 0, 0);
|
setContentsMargins(0, 0, 0, 0);
|
||||||
// If line below is used, with the dark theme the paintEvent is not called
|
// If line below is used, with the dark theme the paintEvent is not called
|
||||||
@ -55,7 +56,7 @@ void GraphicsBar::fillData()
|
|||||||
// Prepare the graph scene
|
// Prepare the graph scene
|
||||||
int w = this->codeGraphic->width();
|
int w = this->codeGraphic->width();
|
||||||
int h = this->codeGraphic->height();
|
int h = this->codeGraphic->height();
|
||||||
QGraphicsScene *scene = new QGraphicsScene();
|
QGraphicsScene *scene = new QGraphicsScene(this);
|
||||||
|
|
||||||
const QBrush bg = QBrush(QColor(74, 74, 74));
|
const QBrush bg = QBrush(QColor(74, 74, 74));
|
||||||
|
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
#ifndef GRAPHICSBAR_H
|
#ifndef GRAPHICSBAR_H
|
||||||
#define GRAPHICSBAR_H
|
#define GRAPHICSBAR_H
|
||||||
|
|
||||||
#include <QWidget>
|
|
||||||
#include <QToolBar>
|
#include <QToolBar>
|
||||||
#include <QGraphicsView>
|
|
||||||
|
|
||||||
class MainWindow;
|
class MainWindow;
|
||||||
|
class QGraphicsView;
|
||||||
|
|
||||||
class GraphicsBar : public QToolBar
|
class GraphicsBar : public QToolBar
|
||||||
{
|
{
|
||||||
@ -13,7 +12,6 @@ class GraphicsBar : public QToolBar
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
explicit GraphicsBar(MainWindow *main, QWidget *parent = 0);
|
explicit GraphicsBar(MainWindow *main, QWidget *parent = 0);
|
||||||
QGraphicsView *codeGraphic;
|
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void paintEvent(QPaintEvent *event);
|
void paintEvent(QPaintEvent *event);
|
||||||
@ -21,9 +19,7 @@ public slots:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
MainWindow *main;
|
MainWindow *main;
|
||||||
|
QGraphicsView *codeGraphic;
|
||||||
public slots:
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // GRAPHICSBAR_H
|
#endif // GRAPHICSBAR_H
|
||||||
|
@ -2,17 +2,21 @@
|
|||||||
#include "ui_commentswidget.h"
|
#include "ui_commentswidget.h"
|
||||||
|
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
|
#include "helpers.h"
|
||||||
|
|
||||||
|
#include <QTreeWidget>
|
||||||
|
#include <QMenu>
|
||||||
|
#include <QResizeEvent>
|
||||||
|
|
||||||
|
|
||||||
CommentsWidget::CommentsWidget(MainWindow *main, QWidget *parent) :
|
CommentsWidget::CommentsWidget(MainWindow *main, QWidget *parent) :
|
||||||
QDockWidget(parent),
|
DockWidget(parent),
|
||||||
ui(new Ui::CommentsWidget)
|
ui(new Ui::CommentsWidget),
|
||||||
|
main(main)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
// Radare core found in:
|
ui->commentsTreeWidget->hideColumn(0);
|
||||||
this->main = main;
|
|
||||||
this->commentsTreeWidget = ui->commentsTreeWidget;
|
|
||||||
this->nestedCommentsTreeWidget = ui->nestedCmtsTreeWidget;
|
|
||||||
|
|
||||||
QTabBar *tabs = ui->tabWidget->tabBar();
|
QTabBar *tabs = ui->tabWidget->tabBar();
|
||||||
tabs->setVisible(false);
|
tabs->setVisible(false);
|
||||||
@ -33,6 +37,16 @@ CommentsWidget::~CommentsWidget()
|
|||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CommentsWidget::setup()
|
||||||
|
{
|
||||||
|
refreshTree();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CommentsWidget::refresh()
|
||||||
|
{
|
||||||
|
refreshTree();
|
||||||
|
}
|
||||||
|
|
||||||
void CommentsWidget::on_commentsTreeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column)
|
void CommentsWidget::on_commentsTreeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column)
|
||||||
{
|
{
|
||||||
QNOTUSED(column);
|
QNOTUSED(column);
|
||||||
@ -45,39 +59,6 @@ void CommentsWidget::on_commentsTreeWidget_itemDoubleClicked(QTreeWidgetItem *it
|
|||||||
this->main->seek(offset, name);
|
this->main->seek(offset, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CommentsWidget::refreshTree()
|
|
||||||
{
|
|
||||||
this->commentsTreeWidget->clear();
|
|
||||||
QList<QList<QString>> comments = this->main->core->getComments();
|
|
||||||
for (QList<QString> comment : comments)
|
|
||||||
{
|
|
||||||
this->main->add_debug_output(comment[1]);
|
|
||||||
QString fcn_name = this->main->core->cmdFunctionAt(comment[1]);
|
|
||||||
this->main->appendRow(this->commentsTreeWidget, comment[1], fcn_name, comment[0].remove('"'));
|
|
||||||
}
|
|
||||||
this->main->adjustColumns(this->commentsTreeWidget);
|
|
||||||
|
|
||||||
// Add nested comments
|
|
||||||
this->nestedCommentsTreeWidget->clear();
|
|
||||||
QMap<QString, QList<QList<QString>>> cmts = this->main->core->getNestedComments();
|
|
||||||
for (auto cmt : cmts.keys())
|
|
||||||
{
|
|
||||||
QTreeWidgetItem *item = new QTreeWidgetItem(this->nestedCommentsTreeWidget);
|
|
||||||
item->setText(0, cmt);
|
|
||||||
QList<QList<QString>> meow = cmts.value(cmt);
|
|
||||||
for (int i = 0; i < meow.size(); ++i)
|
|
||||||
{
|
|
||||||
QList<QString> tmp = meow.at(i);
|
|
||||||
QTreeWidgetItem *it = new QTreeWidgetItem();
|
|
||||||
it->setText(0, tmp[1]);
|
|
||||||
it->setText(1, tmp[0].remove('"'));
|
|
||||||
item->addChild(it);
|
|
||||||
}
|
|
||||||
this->nestedCommentsTreeWidget->addTopLevelItem(item);
|
|
||||||
}
|
|
||||||
this->main->adjustColumns(this->nestedCommentsTreeWidget);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CommentsWidget::on_toolButton_clicked()
|
void CommentsWidget::on_toolButton_clicked()
|
||||||
{
|
{
|
||||||
ui->tabWidget->setCurrentIndex(0);
|
ui->tabWidget->setCurrentIndex(0);
|
||||||
@ -140,3 +121,36 @@ void CommentsWidget::resizeEvent(QResizeEvent *event)
|
|||||||
}
|
}
|
||||||
QDockWidget::resizeEvent(event);
|
QDockWidget::resizeEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CommentsWidget::refreshTree()
|
||||||
|
{
|
||||||
|
ui->commentsTreeWidget->clear();
|
||||||
|
const QList<QList<QString>> &comments = main->core->getComments();
|
||||||
|
for (const QList<QString> &comment : comments)
|
||||||
|
{
|
||||||
|
//this->main->add_debug_output(comment[1]);
|
||||||
|
QString fcn_name = this->main->core->cmdFunctionAt(comment[1]);
|
||||||
|
qhelpers::appendRow(ui->commentsTreeWidget, comment[1], fcn_name, QString(comment[0]).remove('"'));
|
||||||
|
}
|
||||||
|
qhelpers::adjustColumns(ui->commentsTreeWidget);
|
||||||
|
|
||||||
|
// Add nested comments
|
||||||
|
ui->nestedCmtsTreeWidget->clear();
|
||||||
|
const QMap<QString, QList<QList<QString>>> &cmts = main->core->getNestedComments();
|
||||||
|
for (auto cmt : cmts.keys())
|
||||||
|
{
|
||||||
|
QTreeWidgetItem *item = new QTreeWidgetItem(ui->nestedCmtsTreeWidget);
|
||||||
|
item->setText(0, cmt);
|
||||||
|
const QList<QList<QString>> &meow = cmts.value(cmt);
|
||||||
|
for (int i = 0; i < meow.size(); ++i)
|
||||||
|
{
|
||||||
|
const QList<QString> &tmp = meow.at(i);
|
||||||
|
QTreeWidgetItem *it = new QTreeWidgetItem();
|
||||||
|
it->setText(0, tmp[1]);
|
||||||
|
it->setText(1, QString(tmp[0]).remove('"'));
|
||||||
|
item->addChild(it);
|
||||||
|
}
|
||||||
|
ui->nestedCmtsTreeWidget->addTopLevelItem(item);
|
||||||
|
}
|
||||||
|
qhelpers::adjustColumns(ui->nestedCmtsTreeWidget);
|
||||||
|
}
|
||||||
|
@ -1,18 +1,17 @@
|
|||||||
#ifndef COMMENTSWIDGET_H
|
#ifndef COMMENTSWIDGET_H
|
||||||
#define COMMENTSWIDGET_H
|
#define COMMENTSWIDGET_H
|
||||||
|
|
||||||
#include <QDockWidget>
|
#include "dockwidget.h"
|
||||||
#include <QTreeWidget>
|
|
||||||
#include <QMenu>
|
|
||||||
|
|
||||||
class MainWindow;
|
class MainWindow;
|
||||||
|
class QTreeWidgetItem;
|
||||||
|
|
||||||
namespace Ui
|
namespace Ui
|
||||||
{
|
{
|
||||||
class CommentsWidget;
|
class CommentsWidget;
|
||||||
}
|
}
|
||||||
|
|
||||||
class CommentsWidget : public QDockWidget
|
class CommentsWidget : public DockWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@ -20,9 +19,9 @@ public:
|
|||||||
explicit CommentsWidget(MainWindow *main, QWidget *parent = 0);
|
explicit CommentsWidget(MainWindow *main, QWidget *parent = 0);
|
||||||
~CommentsWidget();
|
~CommentsWidget();
|
||||||
|
|
||||||
QTreeWidget *commentsTreeWidget;
|
void setup() override;
|
||||||
QTreeWidget *nestedCommentsTreeWidget;
|
|
||||||
void refreshTree();
|
void refresh() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void resizeEvent(QResizeEvent *event) override;
|
void resizeEvent(QResizeEvent *event) override;
|
||||||
@ -42,10 +41,9 @@ private slots:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::CommentsWidget *ui;
|
Ui::CommentsWidget *ui;
|
||||||
|
|
||||||
MainWindow *main;
|
MainWindow *main;
|
||||||
|
|
||||||
QWidget *title_bar;
|
void refreshTree();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // COMMENTSWIDGET_H
|
#endif // COMMENTSWIDGET_H
|
||||||
|
@ -8,9 +8,11 @@
|
|||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
#include <QJsonDocument>
|
#include <QJsonDocument>
|
||||||
|
#include <QFile>
|
||||||
|
|
||||||
|
|
||||||
Dashboard::Dashboard(MainWindow *main, QWidget *parent) :
|
Dashboard::Dashboard(MainWindow *main, QWidget *parent) :
|
||||||
QDockWidget(parent),
|
DockWidget(parent),
|
||||||
ui(new Ui::Dashboard)
|
ui(new Ui::Dashboard)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
@ -26,6 +28,16 @@ Dashboard::~Dashboard()
|
|||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Dashboard::setup()
|
||||||
|
{
|
||||||
|
updateContents();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Dashboard::refresh()
|
||||||
|
{
|
||||||
|
updateContents();
|
||||||
|
}
|
||||||
|
|
||||||
void Dashboard::updateContents()
|
void Dashboard::updateContents()
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -186,3 +198,4 @@ void Dashboard::updateContents()
|
|||||||
code2.replace("WOEM", data);
|
code2.replace("WOEM", data);
|
||||||
ui->polarWebView->setHtml(code2);
|
ui->polarWebView->setHtml(code2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#ifndef DASHBOARD_H
|
#ifndef DASHBOARD_H
|
||||||
#define DASHBOARD_H
|
#define DASHBOARD_H
|
||||||
|
|
||||||
#include <QDockWidget>
|
#include "dockwidget.h"
|
||||||
|
|
||||||
class MainWindow;
|
class MainWindow;
|
||||||
|
|
||||||
@ -10,7 +10,7 @@ namespace Ui
|
|||||||
class Dashboard;
|
class Dashboard;
|
||||||
}
|
}
|
||||||
|
|
||||||
class Dashboard : public QDockWidget
|
class Dashboard : public DockWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@ -18,11 +18,14 @@ public:
|
|||||||
explicit Dashboard(MainWindow *main, QWidget *parent = 0);
|
explicit Dashboard(MainWindow *main, QWidget *parent = 0);
|
||||||
~Dashboard();
|
~Dashboard();
|
||||||
|
|
||||||
void updateContents();
|
void setup() override;
|
||||||
|
|
||||||
|
void refresh() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::Dashboard *ui;
|
void updateContents();
|
||||||
|
|
||||||
|
Ui::Dashboard *ui;
|
||||||
MainWindow *main;
|
MainWindow *main;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2,18 +2,21 @@
|
|||||||
#include "ui_flagswidget.h"
|
#include "ui_flagswidget.h"
|
||||||
|
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
|
#include "helpers.h"
|
||||||
|
|
||||||
|
#include <QDockWidget>
|
||||||
|
#include <QTreeWidget>
|
||||||
|
#include <QComboBox>
|
||||||
|
|
||||||
|
|
||||||
FlagsWidget::FlagsWidget(MainWindow *main, QWidget *parent) :
|
FlagsWidget::FlagsWidget(MainWindow *main, QWidget *parent) :
|
||||||
QDockWidget(parent),
|
DockWidget(parent),
|
||||||
ui(new Ui::FlagsWidget)
|
ui(new Ui::FlagsWidget),
|
||||||
|
main(main)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
// Radare core found in:
|
ui->flagsTreeWidget->hideColumn(0);
|
||||||
this->main = main;
|
|
||||||
|
|
||||||
this->flagsTreeWidget = ui->flagsTreeWidget;
|
|
||||||
this->flagspaceCombo = ui->flagspaceCombo;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
FlagsWidget::~FlagsWidget()
|
FlagsWidget::~FlagsWidget()
|
||||||
@ -21,6 +24,23 @@ FlagsWidget::~FlagsWidget()
|
|||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FlagsWidget::setup()
|
||||||
|
{
|
||||||
|
setScrollMode();
|
||||||
|
|
||||||
|
refreshFlagspaces();
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlagsWidget::refresh()
|
||||||
|
{
|
||||||
|
setup();
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlagsWidget::clear()
|
||||||
|
{
|
||||||
|
ui->flagsTreeWidget->clear();
|
||||||
|
}
|
||||||
|
|
||||||
void FlagsWidget::on_flagsTreeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column)
|
void FlagsWidget::on_flagsTreeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column)
|
||||||
{
|
{
|
||||||
QNOTUSED(column);
|
QNOTUSED(column);
|
||||||
@ -34,5 +54,57 @@ void FlagsWidget::on_flagspaceCombo_currentTextChanged(const QString &arg1)
|
|||||||
{
|
{
|
||||||
QNOTUSED(arg1);
|
QNOTUSED(arg1);
|
||||||
|
|
||||||
this->main->refreshFlags();
|
refreshFlags();
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlagsWidget::refreshFlagspaces()
|
||||||
|
{
|
||||||
|
int cur_idx = ui->flagspaceCombo->currentIndex();
|
||||||
|
if (cur_idx < 0)cur_idx = 0;
|
||||||
|
ui->flagspaceCombo->clear();
|
||||||
|
ui->flagspaceCombo->addItem("(all)");
|
||||||
|
for (auto i : main->core->getList("flagspaces"))
|
||||||
|
{
|
||||||
|
ui->flagspaceCombo->addItem(i);
|
||||||
|
}
|
||||||
|
if (cur_idx > 0)
|
||||||
|
ui->flagspaceCombo->setCurrentIndex(cur_idx);
|
||||||
|
|
||||||
|
refreshFlags();
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlagsWidget::refreshFlags()
|
||||||
|
{
|
||||||
|
QString flagspace = ui->flagspaceCombo->currentText();
|
||||||
|
// TODO: Do this in Omnibar
|
||||||
|
//this->omnibar->clearFlags();
|
||||||
|
if (flagspace == "(all)")
|
||||||
|
flagspace = "";
|
||||||
|
|
||||||
|
ui->flagsTreeWidget->clear();
|
||||||
|
|
||||||
|
for (auto i : main->core->getList("flags", flagspace))
|
||||||
|
{
|
||||||
|
QStringList a = i.split(",");
|
||||||
|
if (a.length() > 3)
|
||||||
|
{
|
||||||
|
qhelpers::appendRow(ui->flagsTreeWidget, a[1], a[2], a[0], a[3]);
|
||||||
|
//this->omnibar->fillFlags(a[0]);
|
||||||
|
}
|
||||||
|
else if (a.length() > 2)
|
||||||
|
{
|
||||||
|
qhelpers::appendRow(ui->flagsTreeWidget, a[1], a[2], a[0], "");
|
||||||
|
//this->omnibar->fillFlags(a[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
qhelpers::adjustColumns(ui->flagsTreeWidget);
|
||||||
|
// Set omnibar completer for flags and commands
|
||||||
|
//this->omnibar->setupCompleter();
|
||||||
|
|
||||||
|
emit flagsRefreshed();
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlagsWidget::setScrollMode()
|
||||||
|
{
|
||||||
|
qhelpers::setVerticalScrollMode(ui->flagsTreeWidget);
|
||||||
}
|
}
|
||||||
|
@ -1,18 +1,17 @@
|
|||||||
#ifndef FLAGSWIDGET_H
|
#ifndef FLAGSWIDGET_H
|
||||||
#define FLAGSWIDGET_H
|
#define FLAGSWIDGET_H
|
||||||
|
|
||||||
#include <QDockWidget>
|
#include "dockwidget.h"
|
||||||
#include <QTreeWidget>
|
|
||||||
#include <QComboBox>
|
|
||||||
|
|
||||||
class MainWindow;
|
class MainWindow;
|
||||||
|
class QTreeWidgetItem;
|
||||||
|
|
||||||
namespace Ui
|
namespace Ui
|
||||||
{
|
{
|
||||||
class FlagsWidget;
|
class FlagsWidget;
|
||||||
}
|
}
|
||||||
|
|
||||||
class FlagsWidget : public QDockWidget
|
class FlagsWidget : public DockWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@ -20,8 +19,14 @@ public:
|
|||||||
explicit FlagsWidget(MainWindow *main, QWidget *parent = 0);
|
explicit FlagsWidget(MainWindow *main, QWidget *parent = 0);
|
||||||
~FlagsWidget();
|
~FlagsWidget();
|
||||||
|
|
||||||
QTreeWidget *flagsTreeWidget;
|
void setup() override;
|
||||||
QComboBox *flagspaceCombo;
|
|
||||||
|
void refresh() override;
|
||||||
|
|
||||||
|
void clear();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void flagsRefreshed();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void on_flagsTreeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column);
|
void on_flagsTreeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column);
|
||||||
@ -30,8 +35,11 @@ private slots:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::FlagsWidget *ui;
|
Ui::FlagsWidget *ui;
|
||||||
|
|
||||||
MainWindow *main;
|
MainWindow *main;
|
||||||
|
|
||||||
|
void refreshFlags();
|
||||||
|
void refreshFlagspaces();
|
||||||
|
void setScrollMode();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // FLAGSWIDGET_H
|
#endif // FLAGSWIDGET_H
|
||||||
|
@ -1,32 +1,35 @@
|
|||||||
#include "functionswidget.h"
|
#include "functionswidget.h"
|
||||||
#include "ui_functionswidget.h"
|
#include "ui_functionswidget.h"
|
||||||
|
|
||||||
|
#include "mainwindow.h"
|
||||||
|
#include "helpers.h"
|
||||||
#include "dialogs/commentsdialog.h"
|
#include "dialogs/commentsdialog.h"
|
||||||
#include "dialogs/renamedialog.h"
|
#include "dialogs/renamedialog.h"
|
||||||
#include "dialogs/xrefsdialog.h"
|
#include "dialogs/xrefsdialog.h"
|
||||||
#include "mainwindow.h"
|
|
||||||
|
|
||||||
|
#include <QTreeWidget>
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
||||||
|
|
||||||
FunctionsWidget::FunctionsWidget(MainWindow *main, QWidget *parent) :
|
FunctionsWidget::FunctionsWidget(MainWindow *main, QWidget *parent) :
|
||||||
QDockWidget(parent),
|
DockWidget(parent),
|
||||||
ui(new Ui::FunctionsWidget)
|
ui(new Ui::FunctionsWidget),
|
||||||
|
main(main)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
// Radare core found in:
|
ui->functionsTreeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||||
this->main = main;
|
//ui->functionsTreeWidget->setFont(QFont("Monospace", 8));
|
||||||
this->functionsTreeWidget = ui->functionsTreeWidget;
|
|
||||||
this->functionsTreeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
|
|
||||||
//this->functionsTreeWidget->setFont(QFont("Monospace", 8));
|
|
||||||
// Set Functions context menu
|
// Set Functions context menu
|
||||||
connect(ui->functionsTreeWidget, SIGNAL(customContextMenuRequested(const QPoint &)),
|
connect(ui->functionsTreeWidget, SIGNAL(customContextMenuRequested(const QPoint &)),
|
||||||
this, SLOT(showFunctionsContextMenu(const QPoint &)));
|
this, SLOT(showFunctionsContextMenu(const QPoint &)));
|
||||||
connect(ui->nestedFunctionsTree, SIGNAL(customContextMenuRequested(const QPoint &)),
|
connect(ui->nestedFunctionsTree, SIGNAL(customContextMenuRequested(const QPoint &)),
|
||||||
this, SLOT(showFunctionsContextMenu(const QPoint &)));
|
this, SLOT(showFunctionsContextMenu(const QPoint &)));
|
||||||
|
|
||||||
|
ui->functionsTreeWidget->hideColumn(0);
|
||||||
|
|
||||||
// Hide the tabs
|
// Hide the tabs
|
||||||
QTabBar *tabs = ui->tabWidget->tabBar();
|
QTabBar *tabs = ui->tabWidget->tabBar();
|
||||||
tabs->setVisible(false);
|
tabs->setVisible(false);
|
||||||
@ -44,9 +47,21 @@ FunctionsWidget::~FunctionsWidget()
|
|||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FunctionsWidget::setup()
|
||||||
|
{
|
||||||
|
setScrollMode();
|
||||||
|
|
||||||
|
fillFunctions();
|
||||||
|
}
|
||||||
|
|
||||||
|
void FunctionsWidget::refresh()
|
||||||
|
{
|
||||||
|
setup();
|
||||||
|
}
|
||||||
|
|
||||||
void FunctionsWidget::fillFunctions()
|
void FunctionsWidget::fillFunctions()
|
||||||
{
|
{
|
||||||
this->functionsTreeWidget->clear();
|
ui->functionsTreeWidget->clear();
|
||||||
ui->nestedFunctionsTree->clear();
|
ui->nestedFunctionsTree->clear();
|
||||||
for (auto i : this->main->core->getList("anal", "functions"))
|
for (auto i : this->main->core->getList("anal", "functions"))
|
||||||
{
|
{
|
||||||
@ -57,7 +72,7 @@ void FunctionsWidget::fillFunctions()
|
|||||||
if (a.length() == 5)
|
if (a.length() == 5)
|
||||||
{
|
{
|
||||||
// Add list function
|
// Add list function
|
||||||
this->main->appendRow(this->functionsTreeWidget, a[0], a[1], a[4]);
|
qhelpers::appendRow(ui->functionsTreeWidget, a[0], a[1], a[4]);
|
||||||
// Add nested function
|
// Add nested function
|
||||||
QTreeWidgetItem *item = new QTreeWidgetItem(ui->nestedFunctionsTree);
|
QTreeWidgetItem *item = new QTreeWidgetItem(ui->nestedFunctionsTree);
|
||||||
item->setText(0, a[4]);
|
item->setText(0, a[4]);
|
||||||
@ -72,7 +87,7 @@ void FunctionsWidget::fillFunctions()
|
|||||||
else if (a.length() == 6)
|
else if (a.length() == 6)
|
||||||
{
|
{
|
||||||
// Add list function
|
// Add list function
|
||||||
this->main->appendRow(this->functionsTreeWidget, a[0], a[1], a[5]);
|
qhelpers::appendRow(ui->functionsTreeWidget, a[0], a[1], a[5]);
|
||||||
// Add nested function
|
// Add nested function
|
||||||
QTreeWidgetItem *item = new QTreeWidgetItem(ui->nestedFunctionsTree);
|
QTreeWidgetItem *item = new QTreeWidgetItem(ui->nestedFunctionsTree);
|
||||||
item->setText(0, a[5]);
|
item->setText(0, a[5]);
|
||||||
@ -89,9 +104,9 @@ void FunctionsWidget::fillFunctions()
|
|||||||
qDebug() << "fillFunctions()" << a;
|
qDebug() << "fillFunctions()" << a;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this->functionsTreeWidget->sortByColumn(3, Qt::AscendingOrder);
|
ui->functionsTreeWidget->sortByColumn(3, Qt::AscendingOrder);
|
||||||
ui->nestedFunctionsTree->sortByColumn(0, Qt::AscendingOrder);
|
ui->nestedFunctionsTree->sortByColumn(0, Qt::AscendingOrder);
|
||||||
this->main->adjustColumns(this->functionsTreeWidget);
|
qhelpers::adjustColumns(ui->functionsTreeWidget);
|
||||||
|
|
||||||
this->addTooltips();
|
this->addTooltips();
|
||||||
}
|
}
|
||||||
@ -103,7 +118,7 @@ void FunctionsWidget::on_functionsTreeWidget_itemDoubleClicked(QTreeWidgetItem *
|
|||||||
QString offset = item->text(1);
|
QString offset = item->text(1);
|
||||||
QString name = item->text(3);
|
QString name = item->text(3);
|
||||||
this->main->seek(offset, name);
|
this->main->seek(offset, name);
|
||||||
this->main->memoryDock->raise();
|
this->main->raiseMemoryDock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FunctionsWidget::showFunctionsContextMenu(const QPoint &pt)
|
void FunctionsWidget::showFunctionsContextMenu(const QPoint &pt)
|
||||||
@ -119,7 +134,7 @@ void FunctionsWidget::showFunctionsContextMenu(const QPoint &pt)
|
|||||||
|
|
||||||
if (ui->tabWidget->currentIndex() == 0)
|
if (ui->tabWidget->currentIndex() == 0)
|
||||||
{
|
{
|
||||||
this->functionsTreeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
|
ui->functionsTreeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||||
menu->exec(ui->functionsTreeWidget->mapToGlobal(pt));
|
menu->exec(ui->functionsTreeWidget->mapToGlobal(pt));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -132,7 +147,7 @@ void FunctionsWidget::showFunctionsContextMenu(const QPoint &pt)
|
|||||||
|
|
||||||
void FunctionsWidget::refreshTree()
|
void FunctionsWidget::refreshTree()
|
||||||
{
|
{
|
||||||
this->functionsTreeWidget->clear();
|
ui->functionsTreeWidget->clear();
|
||||||
ui->nestedFunctionsTree->clear();
|
ui->nestedFunctionsTree->clear();
|
||||||
for (auto i : this->main->core->getList("anal", "functions"))
|
for (auto i : this->main->core->getList("anal", "functions"))
|
||||||
{
|
{
|
||||||
@ -143,7 +158,7 @@ void FunctionsWidget::refreshTree()
|
|||||||
if (a.length() == 5)
|
if (a.length() == 5)
|
||||||
{
|
{
|
||||||
// Add list function
|
// Add list function
|
||||||
this->main->appendRow(this->functionsTreeWidget, a[0], a[1], a[4]);
|
qhelpers::appendRow(ui->functionsTreeWidget, a[0], a[1], a[4]);
|
||||||
// Add nested function
|
// Add nested function
|
||||||
QTreeWidgetItem *item = new QTreeWidgetItem(ui->nestedFunctionsTree);
|
QTreeWidgetItem *item = new QTreeWidgetItem(ui->nestedFunctionsTree);
|
||||||
item->setText(0, a[4]);
|
item->setText(0, a[4]);
|
||||||
@ -158,7 +173,7 @@ void FunctionsWidget::refreshTree()
|
|||||||
else if (a.length() == 6)
|
else if (a.length() == 6)
|
||||||
{
|
{
|
||||||
// Add list function
|
// Add list function
|
||||||
this->main->appendRow(this->functionsTreeWidget, a[0], a[1], a[5]);
|
qhelpers::appendRow(ui->functionsTreeWidget, a[0], a[1], a[5]);
|
||||||
// Add nested function
|
// Add nested function
|
||||||
QTreeWidgetItem *item = new QTreeWidgetItem(ui->nestedFunctionsTree);
|
QTreeWidgetItem *item = new QTreeWidgetItem(ui->nestedFunctionsTree);
|
||||||
item->setText(0, a[5]);
|
item->setText(0, a[5]);
|
||||||
@ -175,9 +190,9 @@ void FunctionsWidget::refreshTree()
|
|||||||
qDebug() << "fillFunctions()" << a;
|
qDebug() << "fillFunctions()" << a;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this->functionsTreeWidget->sortByColumn(3, Qt::AscendingOrder);
|
ui->functionsTreeWidget->sortByColumn(3, Qt::AscendingOrder);
|
||||||
ui->nestedFunctionsTree->sortByColumn(0, Qt::AscendingOrder);
|
ui->nestedFunctionsTree->sortByColumn(0, Qt::AscendingOrder);
|
||||||
this->main->adjustColumns(this->functionsTreeWidget);
|
qhelpers::adjustColumns(ui->functionsTreeWidget);
|
||||||
|
|
||||||
this->addTooltips();
|
this->addTooltips();
|
||||||
}
|
}
|
||||||
@ -218,7 +233,7 @@ void FunctionsWidget::addTooltips()
|
|||||||
{
|
{
|
||||||
|
|
||||||
// Add comments to list functions
|
// Add comments to list functions
|
||||||
QList<QTreeWidgetItem *> clist = this->functionsTreeWidget->findItems("*", Qt::MatchWildcard, 3);
|
QList<QTreeWidgetItem *> clist = ui->functionsTreeWidget->findItems("*", Qt::MatchWildcard, 3);
|
||||||
foreach (QTreeWidgetItem *item, clist)
|
foreach (QTreeWidgetItem *item, clist)
|
||||||
{
|
{
|
||||||
QString name = item->text(3);
|
QString name = item->text(3);
|
||||||
@ -389,7 +404,7 @@ void FunctionsWidget::on_nestedFunctionsTree_itemDoubleClicked(QTreeWidgetItem *
|
|||||||
QString name = item->text(0);
|
QString name = item->text(0);
|
||||||
QString offset = item->child(0)->text(0).split(":")[1];
|
QString offset = item->child(0)->text(0).split(":")[1];
|
||||||
this->main->seek(offset, name);
|
this->main->seek(offset, name);
|
||||||
this->main->memoryDock->raise();
|
this->main->raiseMemoryDock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FunctionsWidget::resizeEvent(QResizeEvent *event)
|
void FunctionsWidget::resizeEvent(QResizeEvent *event)
|
||||||
@ -409,3 +424,8 @@ void FunctionsWidget::resizeEvent(QResizeEvent *event)
|
|||||||
}
|
}
|
||||||
QDockWidget::resizeEvent(event);
|
QDockWidget::resizeEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FunctionsWidget::setScrollMode()
|
||||||
|
{
|
||||||
|
qhelpers::setVerticalScrollMode(ui->functionsTreeWidget);
|
||||||
|
}
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
#ifndef FUNCTIONSWIDGET_H
|
#ifndef FUNCTIONSWIDGET_H
|
||||||
#define FUNCTIONSWIDGET_H
|
#define FUNCTIONSWIDGET_H
|
||||||
|
|
||||||
#include <QDockWidget>
|
#include "dashboard.h"
|
||||||
#include <QTreeWidget>
|
|
||||||
|
|
||||||
class MainWindow;
|
class MainWindow;
|
||||||
|
class QTreeWidgetItem;
|
||||||
|
|
||||||
namespace Ui
|
namespace Ui
|
||||||
{
|
{
|
||||||
class FunctionsWidget;
|
class FunctionsWidget;
|
||||||
}
|
}
|
||||||
|
|
||||||
class FunctionsWidget : public QDockWidget
|
class FunctionsWidget : public DockWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@ -19,9 +19,11 @@ public:
|
|||||||
explicit FunctionsWidget(MainWindow *main, QWidget *parent = 0);
|
explicit FunctionsWidget(MainWindow *main, QWidget *parent = 0);
|
||||||
~FunctionsWidget();
|
~FunctionsWidget();
|
||||||
|
|
||||||
QTreeWidget *functionsTreeWidget;
|
void setup() override;
|
||||||
|
|
||||||
|
void refresh() override;
|
||||||
|
|
||||||
void fillFunctions();
|
void fillFunctions();
|
||||||
void refreshTree();
|
|
||||||
void addTooltips();
|
void addTooltips();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
@ -47,8 +49,10 @@ protected:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::FunctionsWidget *ui;
|
Ui::FunctionsWidget *ui;
|
||||||
|
|
||||||
MainWindow *main;
|
MainWindow *main;
|
||||||
|
|
||||||
|
void refreshTree();
|
||||||
|
void setScrollMode();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // FUNCTIONSWIDGET_H
|
#endif // FUNCTIONSWIDGET_H
|
||||||
|
@ -1,8 +1,13 @@
|
|||||||
#include "importswidget.h"
|
#include "importswidget.h"
|
||||||
#include "ui_importswidget.h"
|
#include "ui_importswidget.h"
|
||||||
|
|
||||||
#include <QStyledItemDelegate>
|
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
|
#include "helpers.h"
|
||||||
|
|
||||||
|
#include <QTreeWidget>
|
||||||
|
#include <QPen>
|
||||||
|
#include <QPainter>
|
||||||
|
|
||||||
|
|
||||||
void CMyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
|
void CMyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
|
||||||
{
|
{
|
||||||
@ -28,32 +33,50 @@ void CMyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, c
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
ImportsWidget::ImportsWidget(MainWindow *main, QWidget *parent) :
|
ImportsWidget::ImportsWidget(MainWindow *main, QWidget *parent) :
|
||||||
QDockWidget(parent),
|
DockWidget(parent),
|
||||||
ui(new Ui::ImportsWidget)
|
ui(new Ui::ImportsWidget)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
// Radare core found in:
|
// Radare core found in:
|
||||||
this->main = main;
|
this->main = main;
|
||||||
this->importsTreeWidget = ui->importsTreeWidget;
|
|
||||||
|
|
||||||
// Delegate
|
// Delegate
|
||||||
//CMyDelegate* delegate = new CMyDelegate(ui->importsTreeWidget);
|
//CMyDelegate* delegate = new CMyDelegate(ui->importsTreeWidget);
|
||||||
//ui->importsTreeWidget->setItemDelegate(delegate);
|
//ui->importsTreeWidget->setItemDelegate(delegate);
|
||||||
|
|
||||||
|
ui->importsTreeWidget->hideColumn(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
ImportsWidget::~ImportsWidget()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ImportsWidget::setup()
|
||||||
|
{
|
||||||
|
setScrollMode();
|
||||||
|
|
||||||
|
fillImports();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ImportsWidget::refresh()
|
||||||
|
{
|
||||||
|
setup();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImportsWidget::fillImports()
|
void ImportsWidget::fillImports()
|
||||||
{
|
{
|
||||||
this->importsTreeWidget->clear();
|
ui->importsTreeWidget->clear();
|
||||||
for (auto i : this->main->core->getList("bin", "imports"))
|
for (auto i : this->main->core->getList("bin", "imports"))
|
||||||
{
|
{
|
||||||
QStringList a = i.split(",");
|
QStringList a = i.split(",");
|
||||||
// ord,plt,name
|
// ord,plt,name
|
||||||
if (a.length() == 6)
|
if (a.length() == 6)
|
||||||
this->main->appendRow(this->importsTreeWidget, a[1], a[3], "", a[4]);
|
qhelpers::appendRow(ui->importsTreeWidget, a[1], a[3], "", a[4]);
|
||||||
}
|
}
|
||||||
highlightUnsafe();
|
highlightUnsafe();
|
||||||
this->main->adjustColumns(this->importsTreeWidget);
|
qhelpers::adjustColumns(ui->importsTreeWidget);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImportsWidget::highlightUnsafe()
|
void ImportsWidget::highlightUnsafe()
|
||||||
@ -72,7 +95,7 @@ void ImportsWidget::highlightUnsafe()
|
|||||||
"OemToChar|OemToCharA|OemToCharW|CharToOemBuffA|CharToOemBuffW|alloca|_alloca|strlen|wcslen|_mbslen|_mbstrlen|StrLen|lstrlen|" \
|
"OemToChar|OemToCharA|OemToCharW|CharToOemBuffA|CharToOemBuffW|alloca|_alloca|strlen|wcslen|_mbslen|_mbstrlen|StrLen|lstrlen|" \
|
||||||
"ChangeWindowMessageFilter)");
|
"ChangeWindowMessageFilter)");
|
||||||
|
|
||||||
QList<QTreeWidgetItem *> clist = this->importsTreeWidget->findItems(banned, Qt::MatchRegExp, 4);
|
QList<QTreeWidgetItem *> clist = ui->importsTreeWidget->findItems(banned, Qt::MatchRegExp, 4);
|
||||||
foreach (QTreeWidgetItem *item, clist)
|
foreach (QTreeWidgetItem *item, clist)
|
||||||
{
|
{
|
||||||
item->setText(3, "Unsafe");
|
item->setText(3, "Unsafe");
|
||||||
@ -83,8 +106,14 @@ void ImportsWidget::highlightUnsafe()
|
|||||||
//ui->importsTreeWidget->setStyleSheet("QTreeWidget::item { padding-left:10px; padding-top: 1px; padding-bottom: 1px; border-left: 10px; }");
|
//ui->importsTreeWidget->setStyleSheet("QTreeWidget::item { padding-left:10px; padding-top: 1px; padding-bottom: 1px; border-left: 10px; }");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ImportsWidget::setScrollMode()
|
||||||
|
{
|
||||||
|
qhelpers::setVerticalScrollMode(ui->importsTreeWidget);
|
||||||
|
}
|
||||||
|
|
||||||
void ImportsWidget::adjustColumns(QTreeWidget *tw)
|
void ImportsWidget::adjustColumns(QTreeWidget *tw)
|
||||||
{
|
{
|
||||||
|
// WARNING: was this ever called.. compare to master
|
||||||
int count = tw->columnCount();
|
int count = tw->columnCount();
|
||||||
for (int i = 0; i != count; ++i)
|
for (int i = 0; i != count; ++i)
|
||||||
{
|
{
|
||||||
@ -93,8 +122,3 @@ void ImportsWidget::adjustColumns(QTreeWidget *tw)
|
|||||||
ui->importsTreeWidget->setColumnWidth(i, width + 10);
|
ui->importsTreeWidget->setColumnWidth(i, width + 10);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ImportsWidget::~ImportsWidget()
|
|
||||||
{
|
|
||||||
delete ui;
|
|
||||||
}
|
|
||||||
|
@ -1,18 +1,18 @@
|
|||||||
#ifndef IMPORTSWIDGET_H
|
#ifndef IMPORTSWIDGET_H
|
||||||
#define IMPORTSWIDGET_H
|
#define IMPORTSWIDGET_H
|
||||||
|
|
||||||
|
#include "dockwidget.h"
|
||||||
#include <QStyledItemDelegate>
|
#include <QStyledItemDelegate>
|
||||||
#include <QDockWidget>
|
|
||||||
#include <QTreeWidget>
|
|
||||||
|
|
||||||
class MainWindow;
|
class MainWindow;
|
||||||
|
class QTreeWidget;
|
||||||
|
|
||||||
namespace Ui
|
namespace Ui
|
||||||
{
|
{
|
||||||
class ImportsWidget;
|
class ImportsWidget;
|
||||||
}
|
}
|
||||||
|
|
||||||
class ImportsWidget : public QDockWidget
|
class ImportsWidget : public DockWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@ -20,14 +20,17 @@ public:
|
|||||||
explicit ImportsWidget(MainWindow *main, QWidget *parent = 0);
|
explicit ImportsWidget(MainWindow *main, QWidget *parent = 0);
|
||||||
~ImportsWidget();
|
~ImportsWidget();
|
||||||
|
|
||||||
QTreeWidget *importsTreeWidget;
|
void setup() override;
|
||||||
void fillImports();
|
|
||||||
void highlightUnsafe();
|
void refresh() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::ImportsWidget *ui;
|
Ui::ImportsWidget *ui;
|
||||||
|
|
||||||
MainWindow *main;
|
MainWindow *main;
|
||||||
|
|
||||||
|
void fillImports();
|
||||||
|
void highlightUnsafe();
|
||||||
|
void setScrollMode();
|
||||||
void adjustColumns(QTreeWidget *tw);
|
void adjustColumns(QTreeWidget *tw);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#include "ui_memorywidget.h"
|
#include "ui_memorywidget.h"
|
||||||
|
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
|
#include "helpers.h"
|
||||||
#include "dialogs/xrefsdialog.h"
|
#include "dialogs/xrefsdialog.h"
|
||||||
#include "dialogs/renamedialog.h"
|
#include "dialogs/renamedialog.h"
|
||||||
#include "dialogs/commentsdialog.h"
|
#include "dialogs/commentsdialog.h"
|
||||||
@ -17,9 +18,12 @@
|
|||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
#include <QWebEngineSettings>
|
#include <QWebEngineSettings>
|
||||||
#include <QWebEngineProfile>
|
#include <QWebEngineProfile>
|
||||||
|
#include <QSettings>
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
MemoryWidget::MemoryWidget(MainWindow *main) :
|
MemoryWidget::MemoryWidget(MainWindow *main) :
|
||||||
QDockWidget(main),
|
DockWidget(main),
|
||||||
ui(new Ui::MemoryWidget)
|
ui(new Ui::MemoryWidget)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
@ -380,6 +384,27 @@ MemoryWidget::~MemoryWidget()
|
|||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MemoryWidget::setup()
|
||||||
|
{
|
||||||
|
setScrollMode();
|
||||||
|
|
||||||
|
const QString off = main->core->cmd("afo entry0").trimmed();
|
||||||
|
|
||||||
|
refreshDisasm(off);
|
||||||
|
refreshHexdump(off);
|
||||||
|
create_graph(off);
|
||||||
|
get_refs_data(off);
|
||||||
|
setFcnName(off);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MemoryWidget::refresh()
|
||||||
|
{
|
||||||
|
setScrollMode();
|
||||||
|
|
||||||
|
// TODO: honor the offset
|
||||||
|
updateViews();
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Content management functions
|
* Content management functions
|
||||||
*/
|
*/
|
||||||
@ -1051,7 +1076,13 @@ void MemoryWidget::on_actionSettings_menu_1_triggered()
|
|||||||
// QFont font = QFont("Monospace", 8);
|
// QFont font = QFont("Monospace", 8);
|
||||||
|
|
||||||
QFont font = QFontDialog::getFont(&ok, ui->disasTextEdit_2->font(), this);
|
QFont font = QFontDialog::getFont(&ok, ui->disasTextEdit_2->font(), this);
|
||||||
|
|
||||||
|
if (ok)
|
||||||
|
{
|
||||||
setFonts(font);
|
setFonts(font);
|
||||||
|
|
||||||
|
emit fontChanged(font);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
void MemoryWidget::setFonts(QFont font)
|
void MemoryWidget::setFonts(QFont font)
|
||||||
{
|
{
|
||||||
@ -1063,7 +1094,6 @@ void MemoryWidget::setFonts(QFont font)
|
|||||||
ui->hexASCIIText_2->setFont(font);
|
ui->hexASCIIText_2->setFont(font);
|
||||||
ui->previewTextEdit->setFont(font);
|
ui->previewTextEdit->setFont(font);
|
||||||
ui->decoTextEdit->setFont(font);
|
ui->decoTextEdit->setFont(font);
|
||||||
this->main->notepadDock->setFonts(font);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MemoryWidget::on_actionHideDisasm_side_panel_triggered()
|
void MemoryWidget::on_actionHideDisasm_side_panel_triggered()
|
||||||
@ -1544,13 +1574,11 @@ QString MemoryWidget::normalize_addr(QString addr)
|
|||||||
|
|
||||||
void MemoryWidget::setFcnName(QString addr)
|
void MemoryWidget::setFcnName(QString addr)
|
||||||
{
|
{
|
||||||
RAnalFunction *fcn;
|
|
||||||
bool ok;
|
|
||||||
|
|
||||||
// TDOD: FIX ME, ugly
|
// TDOD: FIX ME, ugly
|
||||||
if (addr.contains("0x"))
|
if (addr.contains("0x"))
|
||||||
{
|
{
|
||||||
fcn = this->main->core->functionAt(addr.toULongLong(&ok, 16));
|
bool ok = false;
|
||||||
|
RAnalFunction *fcn = this->main->core->functionAt(addr.toULongLong(&ok, 16));
|
||||||
if (ok && fcn)
|
if (ok && fcn)
|
||||||
{
|
{
|
||||||
QString segment = this->main->core->cmd("S. @ " + addr).split(" ").last();
|
QString segment = this->main->core->cmd("S. @ " + addr).split(" ").last();
|
||||||
@ -1789,6 +1817,12 @@ bool MemoryWidget::eventFilter(QObject *obj, QEvent *event)
|
|||||||
return QDockWidget::eventFilter(obj, event);
|
return QDockWidget::eventFilter(obj, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MemoryWidget::setScrollMode()
|
||||||
|
{
|
||||||
|
qhelpers::setVerticalScrollMode(ui->xreFromTreeWidget_2);
|
||||||
|
qhelpers::setVerticalScrollMode(ui->xrefToTreeWidget_2);
|
||||||
|
}
|
||||||
|
|
||||||
void MemoryWidget::on_actionXRefs_triggered()
|
void MemoryWidget::on_actionXRefs_triggered()
|
||||||
{
|
{
|
||||||
// Get current offset
|
// Get current offset
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
#include <QPlainTextEdit>
|
#include <QPlainTextEdit>
|
||||||
#include <QMouseEvent>
|
#include <QMouseEvent>
|
||||||
|
|
||||||
|
#include "dashboard.h"
|
||||||
|
|
||||||
class MainWindow;
|
class MainWindow;
|
||||||
|
|
||||||
namespace Ui
|
namespace Ui
|
||||||
@ -23,7 +25,7 @@ namespace Ui
|
|||||||
class MemoryWidget;
|
class MemoryWidget;
|
||||||
}
|
}
|
||||||
|
|
||||||
class MemoryWidget : public QDockWidget
|
class MemoryWidget : public DockWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@ -31,6 +33,10 @@ public:
|
|||||||
explicit MemoryWidget(MainWindow *main);
|
explicit MemoryWidget(MainWindow *main);
|
||||||
~MemoryWidget();
|
~MemoryWidget();
|
||||||
|
|
||||||
|
void setup() override;
|
||||||
|
|
||||||
|
void refresh() override;
|
||||||
|
|
||||||
MainWindow *main;
|
MainWindow *main;
|
||||||
QPlainTextEdit *disasTextEdit;
|
QPlainTextEdit *disasTextEdit;
|
||||||
QTextEdit *hexOffsetText;
|
QTextEdit *hexOffsetText;
|
||||||
@ -50,6 +56,9 @@ public:
|
|||||||
Highlighter *preview_highlighter;
|
Highlighter *preview_highlighter;
|
||||||
Highlighter *deco_highlighter;
|
Highlighter *deco_highlighter;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void fontChanged(QFont font);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void fillPlugins(QStringList plugins);
|
void fillPlugins(QStringList plugins);
|
||||||
|
|
||||||
@ -103,6 +112,8 @@ private:
|
|||||||
QString last_graph_fcn;
|
QString last_graph_fcn;
|
||||||
QString last_hexdump_fcn;
|
QString last_hexdump_fcn;
|
||||||
|
|
||||||
|
void setScrollMode();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void highlightCurrentLine();
|
void highlightCurrentLine();
|
||||||
|
|
||||||
|
@ -3,13 +3,19 @@
|
|||||||
|
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
|
|
||||||
|
#include "mdhighlighter.h"
|
||||||
|
#include "highlighter.h"
|
||||||
|
|
||||||
|
#include <QPlainTextEdit>
|
||||||
#include <QFont>
|
#include <QFont>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QFontDialog>
|
#include <QFontDialog>
|
||||||
#include <QTextCursor>
|
#include <QTextCursor>
|
||||||
|
#include <QMenu>
|
||||||
|
|
||||||
|
|
||||||
Notepad::Notepad(MainWindow *main, QWidget *parent) :
|
Notepad::Notepad(MainWindow *main, QWidget *parent) :
|
||||||
QDockWidget(parent),
|
DockWidget(parent),
|
||||||
ui(new Ui::Notepad)
|
ui(new Ui::Notepad)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
@ -36,14 +42,38 @@ Notepad::Notepad(MainWindow *main, QWidget *parent) :
|
|||||||
this, SLOT(showNotepadContextMenu(const QPoint &)));
|
this, SLOT(showNotepadContextMenu(const QPoint &)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Notepad::setText(QString str)
|
Notepad::~Notepad()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Notepad::setup()
|
||||||
|
{
|
||||||
|
main->add_output(" > Adding binary information to notepad");
|
||||||
|
|
||||||
|
setText("# Binary information\n\n" + main->core->cmd("i") +
|
||||||
|
"\n" + main->core->cmd("ie") + "\n" + main->core->cmd("iM") + "\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void Notepad::refresh()
|
||||||
|
{
|
||||||
|
// TODO: implement
|
||||||
|
eprintf("%s - not implemented\n", __PRETTY_FUNCTION__);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Notepad::setText(const QString &str)
|
||||||
{
|
{
|
||||||
ui->notepadTextEdit->setPlainText(str);
|
ui->notepadTextEdit->setPlainText(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
Notepad::~Notepad()
|
QString Notepad::textToBase64() const
|
||||||
{
|
{
|
||||||
delete ui;
|
return notesTextEdit->toPlainText().toUtf8().toBase64();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Notepad::appendPlainText(const QString &text)
|
||||||
|
{
|
||||||
|
notesTextEdit->appendPlainText(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Notepad::on_fontButton_clicked()
|
void Notepad::on_fontButton_clicked()
|
||||||
|
@ -1,29 +1,39 @@
|
|||||||
#ifndef NOTEPAD_H
|
#ifndef NOTEPAD_H
|
||||||
#define NOTEPAD_H
|
#define NOTEPAD_H
|
||||||
|
|
||||||
#include <QDockWidget>
|
#include "dockwidget.h"
|
||||||
#include <QPlainTextEdit>
|
|
||||||
#include "mdhighlighter.h"
|
|
||||||
#include "highlighter.h"
|
|
||||||
|
|
||||||
class MainWindow;
|
class MainWindow;
|
||||||
|
class MdHighlighter;
|
||||||
|
class Highlighter;
|
||||||
|
class QPlainTextEdit;
|
||||||
|
|
||||||
namespace Ui
|
namespace Ui
|
||||||
{
|
{
|
||||||
class Notepad;
|
class Notepad;
|
||||||
}
|
}
|
||||||
|
|
||||||
class Notepad : public QDockWidget
|
class Notepad : public DockWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit Notepad(MainWindow *main, QWidget *parent = 0);
|
explicit Notepad(MainWindow *main, QWidget *parent = 0);
|
||||||
void setText(QString str);
|
|
||||||
void highlightPreview();
|
|
||||||
void setFonts(QFont font);
|
|
||||||
~Notepad();
|
~Notepad();
|
||||||
QPlainTextEdit *notesTextEdit;
|
|
||||||
|
void setup() override;
|
||||||
|
|
||||||
|
void refresh() override;
|
||||||
|
|
||||||
|
void setText(const QString &str);
|
||||||
|
QString textToBase64() const;
|
||||||
|
|
||||||
|
void appendPlainText(const QString &text);
|
||||||
|
|
||||||
|
void highlightPreview();
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void setFonts(QFont font);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void on_fontButton_clicked();
|
void on_fontButton_clicked();
|
||||||
@ -67,6 +77,7 @@ private:
|
|||||||
bool isFirstTime;
|
bool isFirstTime;
|
||||||
MainWindow *main;
|
MainWindow *main;
|
||||||
QString addr;
|
QString addr;
|
||||||
|
QPlainTextEdit *notesTextEdit;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // NOTEPAD_H
|
#endif // NOTEPAD_H
|
||||||
|
@ -145,7 +145,7 @@ void Omnibar::on_gotoEntry_returnPressed()
|
|||||||
}
|
}
|
||||||
else if (str.contains("Theme"))
|
else if (str.contains("Theme"))
|
||||||
{
|
{
|
||||||
this->main->sideBar->themesButtonToggle();
|
this->main->toggleSideBarTheme();
|
||||||
}
|
}
|
||||||
else if (str.contains("Script"))
|
else if (str.contains("Script"))
|
||||||
{
|
{
|
||||||
|
@ -11,27 +11,24 @@ class Omnibar : public QLineEdit
|
|||||||
public:
|
public:
|
||||||
explicit Omnibar(MainWindow *main, QWidget *parent = 0);
|
explicit Omnibar(MainWindow *main, QWidget *parent = 0);
|
||||||
|
|
||||||
QStringList commands;
|
|
||||||
QStringList flags;
|
|
||||||
|
|
||||||
void fillFlags(QString flag);
|
void fillFlags(QString flag);
|
||||||
void clearFlags();
|
void clearFlags();
|
||||||
QStringList getFlags();
|
QStringList getFlags();
|
||||||
void setupCompleter();
|
void setupCompleter();
|
||||||
|
|
||||||
private:
|
|
||||||
MainWindow *main;
|
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void on_gotoEntry_returnPressed();
|
void on_gotoEntry_returnPressed();
|
||||||
|
|
||||||
void restoreCompleter();
|
void restoreCompleter();
|
||||||
|
|
||||||
signals:
|
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void showCommands();
|
void showCommands();
|
||||||
void clearContents();
|
void clearContents();
|
||||||
|
|
||||||
|
private:
|
||||||
|
MainWindow *main;
|
||||||
|
QStringList commands;
|
||||||
|
QStringList flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // OMNIBAR_H
|
#endif // OMNIBAR_H
|
||||||
|
@ -2,16 +2,19 @@
|
|||||||
#include "ui_relocswidget.h"
|
#include "ui_relocswidget.h"
|
||||||
|
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
|
#include "helpers.h"
|
||||||
|
|
||||||
|
#include <QTreeWidget>
|
||||||
|
|
||||||
|
|
||||||
RelocsWidget::RelocsWidget(MainWindow *main, QWidget *parent) :
|
RelocsWidget::RelocsWidget(MainWindow *main, QWidget *parent) :
|
||||||
QDockWidget(parent),
|
DockWidget(parent),
|
||||||
ui(new Ui::RelocsWidget)
|
ui(new Ui::RelocsWidget),
|
||||||
|
main(main)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
// Radare core found in:
|
ui->relocsTreeWidget->hideColumn(0);
|
||||||
this->main = main;
|
|
||||||
this->relocsTreeWidget = ui->relocsTreeWidget;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RelocsWidget::~RelocsWidget()
|
RelocsWidget::~RelocsWidget()
|
||||||
@ -19,6 +22,18 @@ RelocsWidget::~RelocsWidget()
|
|||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RelocsWidget::setup()
|
||||||
|
{
|
||||||
|
setScrollMode();
|
||||||
|
|
||||||
|
fillTreeWidget();
|
||||||
|
}
|
||||||
|
|
||||||
|
void RelocsWidget::refresh()
|
||||||
|
{
|
||||||
|
setup();
|
||||||
|
}
|
||||||
|
|
||||||
void RelocsWidget::on_relocsTreeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column)
|
void RelocsWidget::on_relocsTreeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column)
|
||||||
{
|
{
|
||||||
QNOTUSED(column);
|
QNOTUSED(column);
|
||||||
@ -28,5 +43,23 @@ void RelocsWidget::on_relocsTreeWidget_itemDoubleClicked(QTreeWidgetItem *item,
|
|||||||
QString offset = item->text(1);
|
QString offset = item->text(1);
|
||||||
QString name = item->text(2);
|
QString name = item->text(2);
|
||||||
main->seek(offset, name);
|
main->seek(offset, name);
|
||||||
this->main->memoryDock->raise();
|
|
||||||
|
main->raiseMemoryDock();
|
||||||
|
}
|
||||||
|
|
||||||
|
void RelocsWidget::fillTreeWidget()
|
||||||
|
{
|
||||||
|
ui->relocsTreeWidget->clear();
|
||||||
|
for (auto i : main->core->getList("bin", "relocs"))
|
||||||
|
{
|
||||||
|
QStringList pieces = i.split(",");
|
||||||
|
if (pieces.length() == 3)
|
||||||
|
qhelpers::appendRow(ui->relocsTreeWidget, pieces[0], pieces[1], pieces[2]);
|
||||||
|
}
|
||||||
|
qhelpers::adjustColumns(ui->relocsTreeWidget);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RelocsWidget::setScrollMode()
|
||||||
|
{
|
||||||
|
qhelpers::setVerticalScrollMode(ui->relocsTreeWidget);
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
#ifndef RELOCSWIDGET_H
|
#ifndef RELOCSWIDGET_H
|
||||||
#define RELOCSWIDGET_H
|
#define RELOCSWIDGET_H
|
||||||
|
|
||||||
#include <QDockWidget>
|
#include "dashboard.h"
|
||||||
#include <QTreeWidget>
|
|
||||||
|
|
||||||
class MainWindow;
|
class MainWindow;
|
||||||
|
class QTreeWidgetItem;
|
||||||
|
|
||||||
namespace Ui
|
namespace Ui
|
||||||
{
|
{
|
||||||
class RelocsWidget;
|
class RelocsWidget;
|
||||||
}
|
}
|
||||||
|
|
||||||
class RelocsWidget : public QDockWidget
|
class RelocsWidget : public DockWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@ -19,15 +19,19 @@ public:
|
|||||||
explicit RelocsWidget(MainWindow *main, QWidget *parent = 0);
|
explicit RelocsWidget(MainWindow *main, QWidget *parent = 0);
|
||||||
~RelocsWidget();
|
~RelocsWidget();
|
||||||
|
|
||||||
QTreeWidget *relocsTreeWidget;
|
void setup() override;
|
||||||
|
|
||||||
|
void refresh() override;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void on_relocsTreeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column);
|
void on_relocsTreeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::RelocsWidget *ui;
|
Ui::RelocsWidget *ui;
|
||||||
|
|
||||||
MainWindow *main;
|
MainWindow *main;
|
||||||
|
|
||||||
|
void fillTreeWidget();
|
||||||
|
void setScrollMode();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // RELOCSWIDGET_H
|
#endif // RELOCSWIDGET_H
|
||||||
|
@ -2,10 +2,13 @@
|
|||||||
#include "ui_sdbdock.h"
|
#include "ui_sdbdock.h"
|
||||||
|
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
#include <QTreeWidget>
|
||||||
|
|
||||||
|
|
||||||
SdbDock::SdbDock(MainWindow *main, QWidget *parent) :
|
SdbDock::SdbDock(MainWindow *main, QWidget *parent) :
|
||||||
QDockWidget(parent),
|
DockWidget(parent),
|
||||||
ui(new Ui::SdbDock)
|
ui(new Ui::SdbDock)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
@ -95,6 +98,18 @@ SdbDock::~SdbDock()
|
|||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SdbDock::setup()
|
||||||
|
{
|
||||||
|
// TODO: implement
|
||||||
|
eprintf("%s - not implemented\n", __PRETTY_FUNCTION__);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SdbDock::refresh()
|
||||||
|
{
|
||||||
|
// TODO: implement
|
||||||
|
eprintf("%s - not implemented\n", __PRETTY_FUNCTION__);
|
||||||
|
}
|
||||||
|
|
||||||
void SdbDock::on_lockButton_clicked()
|
void SdbDock::on_lockButton_clicked()
|
||||||
{
|
{
|
||||||
if (ui->lockButton->isChecked())
|
if (ui->lockButton->isChecked())
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
#ifndef SDBDOCK_H
|
#ifndef SDBDOCK_H
|
||||||
#define SDBDOCK_H
|
#define SDBDOCK_H
|
||||||
|
|
||||||
#include <QDockWidget>
|
#include "dockwidget.h"
|
||||||
#include <QTreeWidget>
|
|
||||||
|
|
||||||
class MainWindow;
|
class MainWindow;
|
||||||
|
class QTreeWidgetItem;
|
||||||
|
|
||||||
namespace Ui
|
namespace Ui
|
||||||
{
|
{
|
||||||
class SdbDock;
|
class SdbDock;
|
||||||
}
|
}
|
||||||
|
|
||||||
class SdbDock : public QDockWidget
|
class SdbDock : public DockWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@ -19,6 +19,10 @@ public:
|
|||||||
explicit SdbDock(MainWindow *main, QWidget *parent = 0);
|
explicit SdbDock(MainWindow *main, QWidget *parent = 0);
|
||||||
~SdbDock();
|
~SdbDock();
|
||||||
|
|
||||||
|
void setup() override;
|
||||||
|
|
||||||
|
void refresh() override;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void on_treeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column);
|
void on_treeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column);
|
||||||
|
|
||||||
@ -28,10 +32,10 @@ private slots:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::SdbDock *ui;
|
Ui::SdbDock *ui;
|
||||||
void reload(QString path);
|
|
||||||
QString path;
|
QString path;
|
||||||
|
|
||||||
MainWindow *main;
|
MainWindow *main;
|
||||||
|
|
||||||
|
void reload(QString path);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SDBDOCK_H
|
#endif // SDBDOCK_H
|
||||||
|
@ -4,8 +4,12 @@
|
|||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "widgets/sectionswidget.h"
|
#include "widgets/sectionswidget.h"
|
||||||
|
|
||||||
|
#include <QMenu>
|
||||||
|
#include <QResizeEvent>
|
||||||
|
|
||||||
|
|
||||||
SectionsDock::SectionsDock(MainWindow *main, QWidget *parent) :
|
SectionsDock::SectionsDock(MainWindow *main, QWidget *parent) :
|
||||||
QDockWidget(parent),
|
DockWidget(parent),
|
||||||
ui(new Ui::SectionsDock)
|
ui(new Ui::SectionsDock)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
@ -26,6 +30,16 @@ SectionsDock::~SectionsDock()
|
|||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SectionsDock::setup()
|
||||||
|
{
|
||||||
|
sectionsWidget->setup();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SectionsDock::refresh()
|
||||||
|
{
|
||||||
|
sectionsWidget->setup();
|
||||||
|
}
|
||||||
|
|
||||||
void SectionsDock::showSectionsContextMenu(const QPoint &pt)
|
void SectionsDock::showSectionsContextMenu(const QPoint &pt)
|
||||||
{
|
{
|
||||||
// Set functions popup menu
|
// Set functions popup menu
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
#ifndef SECTIONSDOCK_H
|
#ifndef SECTIONSDOCK_H
|
||||||
#define SECTIONSDOCK_H
|
#define SECTIONSDOCK_H
|
||||||
|
|
||||||
#include <QDockWidget>
|
#include "dockwidget.h"
|
||||||
#include "widgets/sectionswidget.h"
|
|
||||||
|
|
||||||
class MainWindow;
|
class MainWindow;
|
||||||
|
class SectionsWidget;
|
||||||
|
|
||||||
namespace Ui
|
namespace Ui
|
||||||
{
|
{
|
||||||
class SectionsDock;
|
class SectionsDock;
|
||||||
}
|
}
|
||||||
|
|
||||||
class SectionsDock : public QDockWidget
|
class SectionsDock : public DockWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@ -19,7 +19,9 @@ public:
|
|||||||
explicit SectionsDock(MainWindow *main, QWidget *parent = 0);
|
explicit SectionsDock(MainWindow *main, QWidget *parent = 0);
|
||||||
~SectionsDock();
|
~SectionsDock();
|
||||||
|
|
||||||
SectionsWidget *sectionsWidget;
|
void setup() override;
|
||||||
|
|
||||||
|
void refresh() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void resizeEvent(QResizeEvent *event) override;
|
void resizeEvent(QResizeEvent *event) override;
|
||||||
@ -34,8 +36,8 @@ private slots:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::SectionsDock *ui;
|
Ui::SectionsDock *ui;
|
||||||
|
|
||||||
MainWindow *main;
|
MainWindow *main;
|
||||||
|
SectionsWidget *sectionsWidget;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SECTIONSDOCK_H
|
#endif // SECTIONSDOCK_H
|
||||||
|
@ -1,34 +1,52 @@
|
|||||||
#include <QtWidgets>
|
|
||||||
#include <QSplitter>
|
|
||||||
|
|
||||||
#include "widgets/pieview.h"
|
|
||||||
#include "widgets/sectionswidget.h"
|
#include "widgets/sectionswidget.h"
|
||||||
|
#include "widgets/pieview.h"
|
||||||
|
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
|
#include "helpers.h"
|
||||||
|
|
||||||
|
#include <QtWidgets>
|
||||||
|
#include <QTreeWidget>
|
||||||
|
|
||||||
SectionsWidget::SectionsWidget(MainWindow *main, QWidget *parent) :
|
SectionsWidget::SectionsWidget(MainWindow *main, QWidget *parent) :
|
||||||
QSplitter(main)
|
QSplitter(main),
|
||||||
|
main(main)
|
||||||
{
|
{
|
||||||
QNOTUSED(parent);
|
QNOTUSED(parent);
|
||||||
|
|
||||||
this->main = main;
|
|
||||||
//setupModel();
|
|
||||||
setupViews();
|
setupViews();
|
||||||
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
|
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
|
||||||
//setStyleSheet("QSplitter::handle:horizontal { width: 3px; } QSplitter::handle:vertical { height: 3px; }");
|
//setStyleSheet("QSplitter::handle:horizontal { width: 3px; } QSplitter::handle:vertical { height: 3px; }");
|
||||||
setStyleSheet("QSplitter::handle { height: 2px; background-color: rgb(255, 255, 255); image: url(:/new/prefix1/img/icons/tabs.png); }");
|
setStyleSheet("QSplitter::handle { height: 2px; background-color: rgb(255, 255, 255); image: url(:/new/prefix1/img/icons/tabs.png); }");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
void SectionsWidget::setup()
|
||||||
void SectionsWidget::setupModel()
|
|
||||||
{
|
{
|
||||||
model = new QStandardItemModel(0, 4, this);
|
tree->clear();
|
||||||
model->setHeaderData(0, Qt::Horizontal, "Name");
|
|
||||||
model->setHeaderData(1, Qt::Horizontal, "Size");
|
int row = 0;
|
||||||
model->setHeaderData(2, Qt::Horizontal, "Address");
|
for (auto i : main->core->getList("bin", "sections"))
|
||||||
model->setHeaderData(3, Qt::Horizontal, "End Address");
|
{
|
||||||
|
QStringList a = i.split(",");
|
||||||
|
if (a.length() > 4)
|
||||||
|
{
|
||||||
|
// Fix to work with ARM bins
|
||||||
|
//if (a[4].startsWith(".")) {
|
||||||
|
if (a[4].contains("."))
|
||||||
|
{
|
||||||
|
QString addr = a[1];
|
||||||
|
QString addr_end = "0x0" + main->core->itoa(main->core->math(addr + "+" + a[2]));
|
||||||
|
QString size = QString::number(main->core->math(a[2]));
|
||||||
|
QString name = a[4];
|
||||||
|
|
||||||
|
fillSections(row++, name, size, addr, addr_end);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//adjustColumns(sectionsWidget->tree);
|
||||||
|
//this->sectionsDock->sectionsWidget->adjustColumns();
|
||||||
|
qhelpers::adjustColumns(tree);
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
void SectionsWidget::setupViews()
|
void SectionsWidget::setupViews()
|
||||||
{
|
{
|
||||||
// Table view
|
// Table view
|
||||||
@ -63,29 +81,28 @@ void SectionsWidget::setupViews()
|
|||||||
pieChart->setSelectionModel(selectionModel);
|
pieChart->setSelectionModel(selectionModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SectionsWidget::fillSections(int row, const QString &str, const QString &str2 = NULL,
|
void SectionsWidget::fillSections(int row, const QString &str, const QString &str2,
|
||||||
const QString &str3 = NULL, const QString &str4 = NULL)
|
const QString &str3, const QString &str4)
|
||||||
{
|
{
|
||||||
QList<QString> colors;
|
// TODO: create unique colors, e. g. use HSV color space and rotate in H for 360/size
|
||||||
//colors << "#F7464A" << "#46BFBD" << "#FDB45C" << "#949FB1" << "#4D5360" << "#D97041" <<"#C7604C" << "#21323D" << "#9D9B7F" << "#7D4F6D" << "#584A5E";
|
static const QList<QColor> colors = { QColor("#1ABC9C"), //TURQUOISE
|
||||||
colors << "#1ABC9C"; //TURQUOISE
|
QColor("#2ECC71"), //EMERALD
|
||||||
colors << "#2ECC71"; //EMERALD
|
QColor("#3498DB"), //PETER RIVER
|
||||||
colors << "#3498DB"; //PETER RIVER
|
QColor("#9B59B6"), //AMETHYST
|
||||||
colors << "#9B59B6"; //AMETHYST
|
QColor("#34495E"), //WET ASPHALT
|
||||||
colors << "#34495E"; //WET ASPHALT
|
QColor("#F1C40F"), //SUN FLOWER
|
||||||
colors << "#F1C40F"; //SUN FLOWER
|
QColor("#E67E22"), //CARROT
|
||||||
colors << "#E67E22"; //CARROT
|
QColor("#E74C3C"), //ALIZARIN
|
||||||
colors << "#E74C3C"; //ALIZARIN
|
QColor("#ECF0F1"), //CLOUDS
|
||||||
colors << "#ECF0F1"; //CLOUDS
|
QColor("#BDC3C7"), //SILVER
|
||||||
colors << "#BDC3C7"; //SILVER
|
QColor("#95A5A6")}; //COBCRETE
|
||||||
colors << "#95A5A6"; //COBCRETE
|
|
||||||
|
|
||||||
QTreeWidgetItem *tempItem = new QTreeWidgetItem();
|
QTreeWidgetItem *tempItem = new QTreeWidgetItem();
|
||||||
tempItem->setText(0, str);
|
tempItem->setText(0, str);
|
||||||
tempItem->setText(1, str2);
|
tempItem->setText(1, str2);
|
||||||
tempItem->setText(2, str3);
|
tempItem->setText(2, str3);
|
||||||
tempItem->setText(3, str4);
|
tempItem->setText(3, str4);
|
||||||
tempItem->setData(0, Qt::DecorationRole, QColor(colors[row]));
|
tempItem->setData(0, Qt::DecorationRole, colors[row % colors.size()]);
|
||||||
this->tree->insertTopLevelItem(0, tempItem);
|
this->tree->insertTopLevelItem(0, tempItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,18 +1,13 @@
|
|||||||
#ifndef SECTIONSWIDGET_H
|
#ifndef SECTIONSWIDGET_H
|
||||||
#define SECTIONSWIDGET_H
|
#define SECTIONSWIDGET_H
|
||||||
|
|
||||||
#include <QWidget>
|
|
||||||
#include <QSplitter>
|
#include <QSplitter>
|
||||||
#include <QTreeWidget>
|
|
||||||
|
|
||||||
class MainWindow;
|
class MainWindow;
|
||||||
|
class QTreeWidget;
|
||||||
QT_BEGIN_NAMESPACE
|
|
||||||
class QAbstractItemModel;
|
class QAbstractItemModel;
|
||||||
class QAbstractItemView;
|
class QAbstractItemView;
|
||||||
class QItemSelectionModel;
|
class QItemSelectionModel;
|
||||||
QT_END_NAMESPACE
|
|
||||||
|
|
||||||
|
|
||||||
namespace Ui
|
namespace Ui
|
||||||
{
|
{
|
||||||
@ -25,19 +20,20 @@ class SectionsWidget : public QSplitter
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
explicit SectionsWidget(MainWindow *main, QWidget *parent = 0);
|
explicit SectionsWidget(MainWindow *main, QWidget *parent = 0);
|
||||||
void fillSections(int row, const QString &str, const QString &str2,
|
|
||||||
const QString &str3, const QString &str4);
|
void setup();
|
||||||
void adjustColumns();
|
|
||||||
QTreeWidget *tree;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//void setupModel();
|
|
||||||
void setupViews();
|
|
||||||
|
|
||||||
//QAbstractItemModel *model;
|
|
||||||
QAbstractItemView *pieChart;
|
QAbstractItemView *pieChart;
|
||||||
QItemSelectionModel *selectionModel;
|
QItemSelectionModel *selectionModel;
|
||||||
MainWindow *main;
|
MainWindow *main;
|
||||||
|
QTreeWidget *tree;
|
||||||
|
|
||||||
|
void setupViews();
|
||||||
|
|
||||||
|
void fillSections(int row, const QString &str, const QString &str2 = QString(),
|
||||||
|
const QString &str3 = QString(), const QString &str4 = QString());
|
||||||
|
void adjustColumns();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SECTIONSWIDGET_H
|
#endif // SECTIONSWIDGET_H
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
#include "sidebar.h"
|
#include "sidebar.h"
|
||||||
#include "ui_sidebar.h"
|
#include "ui_sidebar.h"
|
||||||
|
|
||||||
|
#include "mainwindow.h"
|
||||||
|
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
|
|
||||||
#include "mainwindow.h"
|
|
||||||
|
|
||||||
SideBar::SideBar(MainWindow *main) :
|
SideBar::SideBar(MainWindow *main) :
|
||||||
QWidget(main),
|
QWidget(main),
|
||||||
|
@ -19,7 +19,6 @@ public:
|
|||||||
~SideBar();
|
~SideBar();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
||||||
void themesButtonToggle();
|
void themesButtonToggle();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
@ -1,18 +1,21 @@
|
|||||||
#include "stringswidget.h"
|
#include "stringswidget.h"
|
||||||
#include "ui_stringswidget.h"
|
#include "ui_stringswidget.h"
|
||||||
|
|
||||||
#include "dialogs/xrefsdialog.h"
|
//#include "dialogs/xrefsdialog.h"
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
|
#include "helpers.h"
|
||||||
|
|
||||||
|
#include <QTreeWidget>
|
||||||
|
|
||||||
|
|
||||||
StringsWidget::StringsWidget(MainWindow *main, QWidget *parent) :
|
StringsWidget::StringsWidget(MainWindow *main, QWidget *parent) :
|
||||||
QDockWidget(parent),
|
DockWidget(parent),
|
||||||
ui(new Ui::StringsWidget)
|
ui(new Ui::StringsWidget),
|
||||||
|
main(main)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
// Radare core found in:
|
ui->stringsTreeWidget->hideColumn(0);
|
||||||
this->main = main;
|
|
||||||
this->stringsTreeWidget = ui->stringsTreeWidget;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
StringsWidget::~StringsWidget()
|
StringsWidget::~StringsWidget()
|
||||||
@ -20,6 +23,18 @@ StringsWidget::~StringsWidget()
|
|||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void StringsWidget::setup()
|
||||||
|
{
|
||||||
|
setScrollMode();
|
||||||
|
|
||||||
|
fillTreeWidget();
|
||||||
|
}
|
||||||
|
|
||||||
|
void StringsWidget::refresh()
|
||||||
|
{
|
||||||
|
setup();
|
||||||
|
}
|
||||||
|
|
||||||
void StringsWidget::on_stringsTreeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column)
|
void StringsWidget::on_stringsTreeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column)
|
||||||
{
|
{
|
||||||
QNOTUSED(column);
|
QNOTUSED(column);
|
||||||
@ -30,5 +45,22 @@ void StringsWidget::on_stringsTreeWidget_itemDoubleClicked(QTreeWidgetItem *item
|
|||||||
QString name = item->text(2);
|
QString name = item->text(2);
|
||||||
this->main->seek(offset);
|
this->main->seek(offset);
|
||||||
// Rise and shine baby!
|
// Rise and shine baby!
|
||||||
this->main->memoryDock->raise();
|
this->main->raiseMemoryDock();
|
||||||
|
}
|
||||||
|
|
||||||
|
void StringsWidget::fillTreeWidget()
|
||||||
|
{
|
||||||
|
ui->stringsTreeWidget->clear();
|
||||||
|
for (auto i : main->core->getList("bin", "strings"))
|
||||||
|
{
|
||||||
|
QStringList pieces = i.split(",");
|
||||||
|
if (pieces.length() == 2)
|
||||||
|
qhelpers::appendRow(ui->stringsTreeWidget, pieces[0], pieces[1]);
|
||||||
|
}
|
||||||
|
qhelpers::adjustColumns(ui->stringsTreeWidget);
|
||||||
|
}
|
||||||
|
|
||||||
|
void StringsWidget::setScrollMode()
|
||||||
|
{
|
||||||
|
qhelpers::setVerticalScrollMode(ui->stringsTreeWidget);
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
#ifndef STRINGSWIDGET_H
|
#ifndef STRINGSWIDGET_H
|
||||||
#define STRINGSWIDGET_H
|
#define STRINGSWIDGET_H
|
||||||
|
|
||||||
#include <QDockWidget>
|
#include "dockwidget.h"
|
||||||
#include <QTreeWidget>
|
|
||||||
|
|
||||||
class MainWindow;
|
class MainWindow;
|
||||||
|
class QTreeWidgetItem;
|
||||||
|
|
||||||
namespace Ui
|
namespace Ui
|
||||||
{
|
{
|
||||||
class StringsWidget;
|
class StringsWidget;
|
||||||
}
|
}
|
||||||
|
|
||||||
class StringsWidget : public QDockWidget
|
class StringsWidget : public DockWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@ -19,15 +19,19 @@ public:
|
|||||||
explicit StringsWidget(MainWindow *main, QWidget *parent = 0);
|
explicit StringsWidget(MainWindow *main, QWidget *parent = 0);
|
||||||
~StringsWidget();
|
~StringsWidget();
|
||||||
|
|
||||||
QTreeWidget *stringsTreeWidget;
|
void setup() override;
|
||||||
|
|
||||||
|
void refresh() override;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void on_stringsTreeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column);
|
void on_stringsTreeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::StringsWidget *ui;
|
Ui::StringsWidget *ui;
|
||||||
|
|
||||||
MainWindow *main;
|
MainWindow *main;
|
||||||
|
|
||||||
|
void fillTreeWidget();
|
||||||
|
void setScrollMode();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // STRINGSWIDGET_H
|
#endif // STRINGSWIDGET_H
|
||||||
|
@ -2,14 +2,19 @@
|
|||||||
#include "ui_symbolswidget.h"
|
#include "ui_symbolswidget.h"
|
||||||
|
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
|
#include "helpers.h"
|
||||||
|
|
||||||
|
#include <QTreeWidget>
|
||||||
|
|
||||||
|
|
||||||
SymbolsWidget::SymbolsWidget(MainWindow *main, QWidget *parent) :
|
SymbolsWidget::SymbolsWidget(MainWindow *main, QWidget *parent) :
|
||||||
QDockWidget(parent),
|
DockWidget(parent),
|
||||||
ui(new Ui::SymbolsWidget)
|
ui(new Ui::SymbolsWidget),
|
||||||
|
main(main)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
this->main = main;
|
|
||||||
this->symbolsTreeWidget = ui->symbolsTreeWidget;
|
ui->symbolsTreeWidget->hideColumn(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
SymbolsWidget::~SymbolsWidget()
|
SymbolsWidget::~SymbolsWidget()
|
||||||
@ -17,16 +22,16 @@ SymbolsWidget::~SymbolsWidget()
|
|||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbolsWidget::fillSymbols()
|
void SymbolsWidget::setup()
|
||||||
{
|
{
|
||||||
this->symbolsTreeWidget->clear();
|
setScrollMode();
|
||||||
for (auto i : this->main->core->getList("bin", "symbols"))
|
|
||||||
{
|
fillSymbols();
|
||||||
QStringList pieces = i.split(",");
|
}
|
||||||
if (pieces.length() == 3)
|
|
||||||
this->main->appendRow(this->symbolsTreeWidget, pieces[0], pieces[1], pieces[2]);
|
void SymbolsWidget::refresh()
|
||||||
}
|
{
|
||||||
this->main->adjustColumns(this->symbolsTreeWidget);
|
setup();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbolsWidget::on_symbolsTreeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column)
|
void SymbolsWidget::on_symbolsTreeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column)
|
||||||
@ -41,3 +46,20 @@ void SymbolsWidget::on_symbolsTreeWidget_itemDoubleClicked(QTreeWidgetItem *item
|
|||||||
this->main->seek(offset, name);
|
this->main->seek(offset, name);
|
||||||
//ui->memDock->setWindowTitle(name);
|
//ui->memDock->setWindowTitle(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SymbolsWidget::fillSymbols()
|
||||||
|
{
|
||||||
|
ui->symbolsTreeWidget->clear();
|
||||||
|
for (auto i : this->main->core->getList("bin", "symbols"))
|
||||||
|
{
|
||||||
|
QStringList pieces = i.split(",");
|
||||||
|
if (pieces.length() == 3)
|
||||||
|
qhelpers::appendRow(ui->symbolsTreeWidget, pieces[0], pieces[1], pieces[2]);
|
||||||
|
}
|
||||||
|
qhelpers::adjustColumns(ui->symbolsTreeWidget);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SymbolsWidget::setScrollMode()
|
||||||
|
{
|
||||||
|
qhelpers::setVerticalScrollMode(ui->symbolsTreeWidget);
|
||||||
|
}
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
#ifndef SYMBOLSWIDGET_H
|
#ifndef SYMBOLSWIDGET_H
|
||||||
#define SYMBOLSWIDGET_H
|
#define SYMBOLSWIDGET_H
|
||||||
|
|
||||||
#include <QDockWidget>
|
#include "dockwidget.h"
|
||||||
#include <QTreeWidget>
|
|
||||||
|
|
||||||
class MainWindow;
|
class MainWindow;
|
||||||
|
class QTreeWidgetItem;
|
||||||
|
|
||||||
namespace Ui
|
namespace Ui
|
||||||
{
|
{
|
||||||
class SymbolsWidget;
|
class SymbolsWidget;
|
||||||
}
|
}
|
||||||
|
|
||||||
class SymbolsWidget : public QDockWidget
|
class SymbolsWidget : public DockWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@ -19,16 +19,19 @@ public:
|
|||||||
explicit SymbolsWidget(MainWindow *main, QWidget *parent = 0);
|
explicit SymbolsWidget(MainWindow *main, QWidget *parent = 0);
|
||||||
~SymbolsWidget();
|
~SymbolsWidget();
|
||||||
|
|
||||||
QTreeWidget *symbolsTreeWidget;
|
void setup() override;
|
||||||
void fillSymbols();
|
|
||||||
|
void refresh() override;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void on_symbolsTreeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column);
|
void on_symbolsTreeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::SymbolsWidget *ui;
|
Ui::SymbolsWidget *ui;
|
||||||
|
|
||||||
MainWindow *main;
|
MainWindow *main;
|
||||||
|
|
||||||
|
void fillSymbols();
|
||||||
|
void setScrollMode();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SYMBOLSWIDGET_H
|
#endif // SYMBOLSWIDGET_H
|
||||||
|
Loading…
Reference in New Issue
Block a user