2017-03-29 10:18:37 +00:00
|
|
|
#include "omnibar.h"
|
|
|
|
#include "mainwindow.h"
|
|
|
|
|
|
|
|
#include <QStringListModel>
|
|
|
|
#include <QCompleter>
|
|
|
|
#include <QShortcut>
|
2017-04-27 23:48:21 +00:00
|
|
|
#include <QAbstractItemView>
|
|
|
|
|
2017-03-29 10:18:37 +00:00
|
|
|
|
|
|
|
Omnibar::Omnibar(MainWindow *main, QWidget *parent) :
|
2017-04-27 18:59:27 +00:00
|
|
|
QLineEdit(parent),
|
|
|
|
main(main),
|
|
|
|
commands({": Comments toggle",
|
|
|
|
": Dashboard toggle",
|
|
|
|
": Flags toggle",
|
|
|
|
": Functions toggle",
|
|
|
|
": Imports toggle",
|
2017-05-19 07:49:33 +00:00
|
|
|
": Exports toggle",
|
2017-04-27 18:59:27 +00:00
|
|
|
": Notepad toggle",
|
|
|
|
": Relocs toggle",
|
|
|
|
": Run Script",
|
|
|
|
": Sections toggle",
|
|
|
|
": Strings toggle",
|
|
|
|
": Symbols toggle",
|
|
|
|
": Tabs up/down",
|
|
|
|
": Theme switch",
|
|
|
|
": Lock/Unlock interface",
|
|
|
|
": Web server start/stop"})
|
2017-03-29 10:18:37 +00:00
|
|
|
{
|
|
|
|
// QLineEdit basic features
|
|
|
|
this->setMinimumHeight(16);
|
|
|
|
this->setMaximumHeight(16);
|
|
|
|
this->setFrame(false);
|
2017-04-10 09:31:34 +00:00
|
|
|
this->setPlaceholderText("Type flag name or address here");
|
2017-03-29 10:18:37 +00:00
|
|
|
this->setStyleSheet("border-radius: 5px;");
|
|
|
|
this->setTextMargins(10, 0, 0, 0);
|
|
|
|
this->setClearButtonEnabled(true);
|
|
|
|
|
|
|
|
connect(this, SIGNAL(returnPressed()), this, SLOT(on_gotoEntry_returnPressed()));
|
|
|
|
|
|
|
|
// Esc clears omnibar
|
2017-04-09 19:55:06 +00:00
|
|
|
QShortcut *clear_shortcut = new QShortcut(QKeySequence(Qt::Key_Escape), this);
|
2017-04-27 18:59:27 +00:00
|
|
|
connect(clear_shortcut, SIGNAL(activated()), this, SLOT(clear()));
|
2017-05-18 10:20:53 +00:00
|
|
|
clear_shortcut->setContext(Qt::WidgetWithChildrenShortcut);
|
2017-03-29 10:18:37 +00:00
|
|
|
}
|
|
|
|
|
2017-04-09 19:55:06 +00:00
|
|
|
void Omnibar::setupCompleter()
|
|
|
|
{
|
2017-03-29 10:18:37 +00:00
|
|
|
// Set gotoEntry completer for jump history
|
2017-04-27 18:59:27 +00:00
|
|
|
QCompleter *completer = new QCompleter(flags + commands, this);
|
2017-03-29 10:18:37 +00:00
|
|
|
completer->setMaxVisibleItems(20);
|
|
|
|
completer->setCompletionMode(QCompleter::PopupCompletion);
|
|
|
|
completer->setModelSorting(QCompleter::CaseSensitivelySortedModel);
|
|
|
|
completer->setCaseSensitivity(Qt::CaseInsensitive);
|
|
|
|
completer->setFilterMode(Qt::MatchContains);
|
|
|
|
|
|
|
|
this->setCompleter(completer);
|
|
|
|
}
|
|
|
|
|
2017-04-27 18:59:27 +00:00
|
|
|
void Omnibar::refresh(const QStringList &flagList)
|
|
|
|
{
|
|
|
|
flags = flagList;
|
|
|
|
|
|
|
|
setupCompleter();
|
|
|
|
}
|
|
|
|
|
2017-03-29 10:18:37 +00:00
|
|
|
void Omnibar::restoreCompleter()
|
|
|
|
{
|
|
|
|
QCompleter *completer = this->completer();
|
|
|
|
completer->setFilterMode(Qt::MatchContains);
|
|
|
|
}
|
|
|
|
|
2017-04-09 19:55:06 +00:00
|
|
|
void Omnibar::showCommands()
|
|
|
|
{
|
2017-03-29 10:18:37 +00:00
|
|
|
this->setFocus();
|
|
|
|
this->setText(": ");
|
|
|
|
|
|
|
|
QCompleter *completer = this->completer();
|
|
|
|
completer->setCompletionMode(QCompleter::PopupCompletion);
|
|
|
|
completer->setModelSorting(QCompleter::CaseSensitivelySortedModel);
|
|
|
|
completer->setCaseSensitivity(Qt::CaseInsensitive);
|
|
|
|
completer->setFilterMode(Qt::MatchStartsWith);
|
|
|
|
|
|
|
|
completer->setMaxVisibleItems(20);
|
|
|
|
|
|
|
|
completer->setCompletionPrefix(": ");
|
|
|
|
completer->complete();
|
|
|
|
}
|
|
|
|
|
2017-04-27 23:48:21 +00:00
|
|
|
void Omnibar::clear()
|
|
|
|
{
|
|
|
|
QLineEdit::clear();
|
|
|
|
|
|
|
|
// Close the potential shown completer popup
|
|
|
|
clearFocus();
|
|
|
|
setFocus();
|
|
|
|
}
|
|
|
|
|
2017-03-29 10:18:37 +00:00
|
|
|
void Omnibar::on_gotoEntry_returnPressed()
|
|
|
|
{
|
|
|
|
QString str = this->text();
|
2017-04-09 19:55:06 +00:00
|
|
|
if (str.length() > 0)
|
|
|
|
{
|
|
|
|
if (str.contains(": "))
|
|
|
|
{
|
|
|
|
if (str.contains("Lock"))
|
|
|
|
{
|
2017-03-29 10:18:37 +00:00
|
|
|
this->main->on_actionLock_triggered();
|
2017-04-09 19:55:06 +00:00
|
|
|
}
|
|
|
|
else if (str.contains("Functions"))
|
|
|
|
{
|
2017-03-29 10:18:37 +00:00
|
|
|
this->main->on_actionFunctions_triggered();
|
2017-04-09 19:55:06 +00:00
|
|
|
}
|
|
|
|
else if (str.contains("Flags"))
|
|
|
|
{
|
2017-03-29 10:18:37 +00:00
|
|
|
this->main->on_actionFlags_triggered();
|
2017-04-09 19:55:06 +00:00
|
|
|
}
|
|
|
|
else if (str.contains("Sections"))
|
|
|
|
{
|
2017-03-29 10:18:37 +00:00
|
|
|
this->main->on_actionSections_triggered();
|
2017-04-09 19:55:06 +00:00
|
|
|
}
|
|
|
|
else if (str.contains("Strings"))
|
|
|
|
{
|
2017-03-29 10:18:37 +00:00
|
|
|
this->main->on_actionStrings_triggered();
|
2017-04-09 19:55:06 +00:00
|
|
|
}
|
|
|
|
else if (str.contains("Imports"))
|
|
|
|
{
|
2017-03-29 10:18:37 +00:00
|
|
|
this->main->on_actionImports_triggered();
|
2017-04-09 19:55:06 +00:00
|
|
|
}
|
2017-05-19 07:49:33 +00:00
|
|
|
else if (str.contains("Exports"))
|
|
|
|
{
|
|
|
|
this->main->on_actionExports_triggered();
|
|
|
|
}
|
2017-04-09 19:55:06 +00:00
|
|
|
else if (str.contains("Symbols"))
|
|
|
|
{
|
2017-03-29 10:18:37 +00:00
|
|
|
this->main->on_actionSymbols_triggered();
|
2017-04-09 19:55:06 +00:00
|
|
|
}
|
|
|
|
else if (str.contains("Relocs"))
|
|
|
|
{
|
2017-03-29 10:18:37 +00:00
|
|
|
this->main->on_actionReloc_triggered();
|
2017-04-09 19:55:06 +00:00
|
|
|
}
|
|
|
|
else if (str.contains("Comments"))
|
|
|
|
{
|
2017-03-29 10:18:37 +00:00
|
|
|
this->main->on_actionComents_triggered();
|
2017-04-09 19:55:06 +00:00
|
|
|
}
|
|
|
|
else if (str.contains("Notepad"))
|
|
|
|
{
|
2017-03-29 10:18:37 +00:00
|
|
|
this->main->on_actionNotepad_triggered();
|
2017-04-09 19:55:06 +00:00
|
|
|
}
|
|
|
|
else if (str.contains("Dashboard"))
|
|
|
|
{
|
2017-03-29 10:18:37 +00:00
|
|
|
this->main->on_actionDashboard_triggered();
|
2017-04-09 19:55:06 +00:00
|
|
|
}
|
|
|
|
else if (str.contains("Theme"))
|
|
|
|
{
|
2017-04-13 15:14:02 +00:00
|
|
|
this->main->toggleSideBarTheme();
|
2017-04-09 19:55:06 +00:00
|
|
|
}
|
|
|
|
else if (str.contains("Script"))
|
|
|
|
{
|
2017-03-29 10:18:37 +00:00
|
|
|
this->main->on_actionRun_Script_triggered();
|
2017-04-09 19:55:06 +00:00
|
|
|
}
|
|
|
|
else if (str.contains("Tabs"))
|
|
|
|
{
|
2017-03-29 10:18:37 +00:00
|
|
|
this->main->on_actionTabs_triggered();
|
|
|
|
}
|
2017-04-09 19:55:06 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2017-03-29 10:18:37 +00:00
|
|
|
//this->main->seek(this->main->core->cmd("?v " + this->text()), this->text());
|
|
|
|
QString off = this->main->core->cmd("afo " + this->text());
|
2017-04-28 13:09:40 +00:00
|
|
|
this->main->seek(off.trimmed(), this->text(), true);
|
2017-03-29 10:18:37 +00:00
|
|
|
}
|
2017-04-09 17:09:35 +00:00
|
|
|
}
|
|
|
|
|
2017-03-29 10:18:37 +00:00
|
|
|
// check which tab is open? update all tabs? hex, graph?
|
|
|
|
//refreshMem( this->gotoEntry->text() );
|
|
|
|
this->setText("");
|
|
|
|
this->clearFocus();
|
|
|
|
this->restoreCompleter();
|
|
|
|
}
|