Remove cursorAddress, Fix current function display (#103)

This commit is contained in:
Florian Märkl 2017-11-07 14:11:33 +01:00 committed by Maijin
parent da68aa9889
commit adef80e9e8
4 changed files with 24 additions and 28 deletions

View File

@ -697,12 +697,6 @@ void MainWindow::toggleDockWidget(QDockWidget *dock_widget)
} }
} }
void MainWindow::setCursorAddress(RVA addr)
{
this->cursorAddress = addr;
emit cursorAddressChanged(core->getOffset());
}
void MainWindow::backButton_clicked() void MainWindow::backButton_clicked()
{ {
core->seekPrev(); core->seekPrev();

View File

@ -88,9 +88,6 @@ public:
void toggleSideBarTheme(); void toggleSideBarTheme();
void refreshOmniBar(const QStringList &flags); void refreshOmniBar(const QStringList &flags);
signals:
void cursorAddressChanged(RVA offset); // TODO cursor should be handled by its own widget
public slots: public slots:
void dark(); void dark();
@ -197,7 +194,6 @@ private:
void refreshMem(); void refreshMem();
ut64 hexdumpTopOffset; ut64 hexdumpTopOffset;
ut64 hexdumpBottomOffset; ut64 hexdumpBottomOffset;
RVA cursorAddress;
QString filename; QString filename;
QList<QDockWidget *> dockWidgets; QList<QDockWidget *> dockWidgets;
std::unique_ptr<Ui::MainWindow> ui; std::unique_ptr<Ui::MainWindow> ui;
@ -229,9 +225,7 @@ private:
void showDefaultDocks(); void showDefaultDocks();
public: public:
RVA getCursorAddress() const { return cursorAddress; }
QString getFilename() const { return filename; } QString getFilename() const { return filename; }
void setCursorAddress(RVA addr);
}; };
#endif // MAINWINDOW_H #endif // MAINWINDOW_H

View File

@ -14,9 +14,8 @@
#include <QResource> #include <QResource>
#include <QShortcut> #include <QShortcut>
FunctionModel::FunctionModel(QList<FunctionDescription> *functions, QSet<RVA> *import_addresses, bool nested, QFont default_font, QFont highlight_font, MainWindow *main, QObject *parent) FunctionModel::FunctionModel(QList<FunctionDescription> *functions, QSet<RVA> *import_addresses, bool nested, QFont default_font, QFont highlight_font, QObject *parent)
: QAbstractItemModel(parent), : QAbstractItemModel(parent),
main(main),
functions(functions), functions(functions),
import_addresses(import_addresses), import_addresses(import_addresses),
highlight_font(highlight_font), highlight_font(highlight_font),
@ -25,8 +24,8 @@ FunctionModel::FunctionModel(QList<FunctionDescription> *functions, QSet<RVA> *i
current_index(-1) current_index(-1)
{ {
connect(main, SIGNAL(cursorAddressChanged(RVA)), this, SLOT(cursorAddressChanged(RVA))); connect(Core(), SIGNAL(seekChanged(RVA)), this, SLOT(seekChanged(RVA)));
connect(CutterCore::getInstance(), SIGNAL(functionRenamed(QString, QString)), this, SLOT(functionRenamed(QString, QString))); connect(Core(), SIGNAL(functionRenamed(QString, QString)), this, SLOT(functionRenamed(QString, QString)));
} }
QModelIndex FunctionModel::index(int row, int column, const QModelIndex &parent) const QModelIndex FunctionModel::index(int row, int column, const QModelIndex &parent) const
@ -211,22 +210,26 @@ void FunctionModel::endReloadFunctions()
endResetModel(); endResetModel();
} }
void FunctionModel::cursorAddressChanged(RVA) void FunctionModel::seekChanged(RVA)
{ {
updateCurrentIndex(); if (updateCurrentIndex())
emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1)); {
emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1));
}
} }
void FunctionModel::updateCurrentIndex() bool FunctionModel::updateCurrentIndex()
{ {
int index = -1; int index = -1;
RVA offset = 0; RVA offset = 0;
RVA seek = Core()->getOffset();
for (int i = 0; i < functions->count(); i++) for (int i = 0; i < functions->count(); i++)
{ {
const FunctionDescription &function = functions->at(i); const FunctionDescription &function = functions->at(i);
if (function.contains(CutterCore::getInstance()->getOffset()) if (function.contains(seek)
&& function.offset >= offset) && function.offset >= offset)
{ {
offset = function.offset; offset = function.offset;
@ -234,7 +237,11 @@ void FunctionModel::updateCurrentIndex()
} }
} }
bool changed = current_index != index;
current_index = index; current_index = index;
return changed;
} }
void FunctionModel::functionRenamed(const QString &prev_name, const QString &new_name) void FunctionModel::functionRenamed(const QString &prev_name, const QString &new_name)
@ -345,12 +352,12 @@ FunctionsWidget::FunctionsWidget(MainWindow *main, QWidget *parent) :
QFont default_font = QFont(font_info.family(), font_info.pointSize()); QFont default_font = QFont(font_info.family(), font_info.pointSize());
QFont highlight_font = QFont(font_info.family(), font_info.pointSize(), QFont::Bold); QFont highlight_font = QFont(font_info.family(), font_info.pointSize(), QFont::Bold);
function_model = new FunctionModel(&functions, &import_addresses, false, default_font, highlight_font, main, this); function_model = new FunctionModel(&functions, &import_addresses, false, default_font, highlight_font, this);
function_proxy_model = new FunctionSortFilterProxyModel(function_model, this); function_proxy_model = new FunctionSortFilterProxyModel(function_model, this);
connect(ui->filterLineEdit, SIGNAL(textChanged(const QString &)), function_proxy_model, SLOT(setFilterWildcard(const QString &))); connect(ui->filterLineEdit, SIGNAL(textChanged(const QString &)), function_proxy_model, SLOT(setFilterWildcard(const QString &)));
ui->functionsTreeView->setModel(function_proxy_model); ui->functionsTreeView->setModel(function_proxy_model);
nested_function_model = new FunctionModel(&functions, &import_addresses, true, default_font, highlight_font, main, this); nested_function_model = new FunctionModel(&functions, &import_addresses, true, default_font, highlight_font, this);
nested_function_proxy_model = new FunctionSortFilterProxyModel(nested_function_model, this); nested_function_proxy_model = new FunctionSortFilterProxyModel(nested_function_model, this);
connect(ui->filterLineEdit, SIGNAL(textChanged(const QString &)), nested_function_proxy_model, SLOT(setFilterWildcard(const QString &))); connect(ui->filterLineEdit, SIGNAL(textChanged(const QString &)), nested_function_proxy_model, SLOT(setFilterWildcard(const QString &)));
ui->nestedFunctionsTreeView->setModel(nested_function_proxy_model); ui->nestedFunctionsTreeView->setModel(nested_function_proxy_model);

View File

@ -21,8 +21,6 @@ class FunctionModel : public QAbstractItemModel
Q_OBJECT Q_OBJECT
private: private:
MainWindow *main;
QList<FunctionDescription> *functions; QList<FunctionDescription> *functions;
QSet<RVA> *import_addresses; QSet<RVA> *import_addresses;
@ -39,7 +37,7 @@ public:
enum Column { NameColumn = 0, SizeColumn, ImportColumn, OffsetColumn, ColumnCount }; enum Column { NameColumn = 0, SizeColumn, ImportColumn, OffsetColumn, ColumnCount };
FunctionModel(QList<FunctionDescription> *functions, QSet<RVA> *import_addresses, bool nested, QFont default_font, QFont highlight_font, MainWindow *main, QObject *parent = 0); FunctionModel(QList<FunctionDescription> *functions, QSet<RVA> *import_addresses, bool nested, QFont default_font, QFont highlight_font, QObject *parent = 0);
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
QModelIndex parent(const QModelIndex &index) const; QModelIndex parent(const QModelIndex &index) const;
@ -53,12 +51,15 @@ public:
void beginReloadFunctions(); void beginReloadFunctions();
void endReloadFunctions(); void endReloadFunctions();
void updateCurrentIndex(); /*!
* @return true if the index changed
*/
bool updateCurrentIndex();
bool isNested() { return nested; } bool isNested() { return nested; }
private slots: private slots:
void cursorAddressChanged(RVA addr); void seekChanged(RVA addr);
void functionRenamed(const QString &prev_name, const QString &new_name); void functionRenamed(const QString &prev_name, const QString &new_name);
}; };