From f16c24b17c7c9249506a994fa9244aaf3a3e18b9 Mon Sep 17 00:00:00 2001 From: mrexodia Date: Tue, 14 Mar 2017 10:46:26 +0100 Subject: [PATCH] GUI: recent files in ScriptView --- src/gui/Src/Gui/ScriptView.cpp | 39 +++++++++++++++++++++++---------- src/gui/Src/Gui/ScriptView.h | 5 ++++- src/gui/images/load-script.png | Bin 0 -> 556 bytes src/gui/resource.qrc | 1 + 4 files changed, 33 insertions(+), 12 deletions(-) create mode 100644 src/gui/images/load-script.png diff --git a/src/gui/Src/Gui/ScriptView.cpp b/src/gui/Src/Gui/ScriptView.cpp index 5d342c1d..9ef0379e 100644 --- a/src/gui/Src/Gui/ScriptView.cpp +++ b/src/gui/Src/Gui/ScriptView.cpp @@ -6,6 +6,7 @@ #include "Bridge.h" #include "RichTextPainter.h" #include "LineEditDialog.h" +#include "MRUList.h" ScriptView::ScriptView(StdTable* parent) : StdTable(parent) { @@ -31,6 +32,11 @@ ScriptView::ScriptView(StdTable* parent) : StdTable(parent) msg->setModal(false); connect(msg, SIGNAL(finished(int)), this, SLOT(messageResult(int))); + // recent script + mMRUList = new MRUList(this, "Recent Scripts"); + connect(mMRUList, SIGNAL(openFile(QString)), this, SLOT(openRecentFile(QString))); + mMRUList->load(); + // Slots connect(Bridge::getBridge(), SIGNAL(scriptAdd(int, const char**)), this, SLOT(add(int, const char**))); connect(Bridge::getBridge(), SIGNAL(scriptClear()), this, SLOT(clear())); @@ -368,10 +374,16 @@ void ScriptView::keyPressEvent(QKeyEvent* event) void ScriptView::setupContextMenu() { mMenu = new MenuBuilder(this); - MenuBuilder* mLoadMenu = new MenuBuilder(this); - mLoadMenu->addAction(makeShortcutAction(DIcon("folder-horizontal-open.png"), tr("&Open..."), SLOT(openFile()), "ActionLoadScript")); - mLoadMenu->addAction(makeShortcutAction(DIcon("binary_paste.png"), tr("&Paste"), SLOT(paste()), "ActionBinaryPaste")); - mMenu->addMenu(makeMenu(tr("Load Script")), mLoadMenu); + MenuBuilder* loadMenu = new MenuBuilder(this); + loadMenu->addAction(makeShortcutAction(DIcon("folder-horizontal-open.png"), tr("&Open..."), SLOT(openFile()), "ActionLoadScript")); + loadMenu->addAction(makeShortcutAction(DIcon("binary_paste.png"), tr("&Paste"), SLOT(paste()), "ActionBinaryPaste")); + loadMenu->addSeparator(); + loadMenu->addBuilder(new MenuBuilder(this, [this](QMenu * menu) + { + mMRUList->appendMenu(menu); + return true; + })); + mMenu->addMenu(makeMenu(DIcon("load-script.png"), tr("Load Script")), loadMenu); auto isempty = [this](QMenu*) { return getRowCount() != 0; @@ -463,29 +475,34 @@ void ScriptView::setInfoLine(int line, QString info) reloadData(); //repaint } +void ScriptView::openRecentFile(QString file) +{ + filename = file; + DbgScriptUnload(); + DbgScriptLoad(filename.toUtf8().constData()); + mMRUList->addEntry(filename); + mMRUList->save(); +} + void ScriptView::openFile() { filename = QFileDialog::getOpenFileName(this, tr("Select script"), 0, tr("Script files (*.txt *.scr);;All files (*.*)")); if(!filename.length()) return; filename = QDir::toNativeSeparators(filename); //convert to native path format (with backlashes) - DbgScriptUnload(); - DbgScriptLoad(filename.toUtf8().constData()); + openRecentFile(filename); } void ScriptView::paste() { - DbgScriptUnload(); filename.clear(); + DbgScriptUnload(); DbgScriptLoad("x64dbg://localhost/clipboard"); } void ScriptView::reload() { - if(!filename.length()) - return; - DbgScriptUnload(); - DbgScriptLoad(filename.toUtf8().constData()); + openRecentFile(filename); } void ScriptView::unload() diff --git a/src/gui/Src/Gui/ScriptView.h b/src/gui/Src/Gui/ScriptView.h index 980a2c70..bc5e3f24 100644 --- a/src/gui/Src/Gui/ScriptView.h +++ b/src/gui/Src/Gui/ScriptView.h @@ -4,6 +4,7 @@ #include "StdTable.h" class QMessageBox; +class MRUList; class ScriptView : public StdTable { @@ -27,6 +28,7 @@ public slots: void error(int line, QString message); void setTitle(QString title); void setInfoLine(int line, QString info); + void openRecentFile(QString file); void openFile(); void paste(); void reload(); @@ -57,7 +59,8 @@ private: QString filename; MenuBuilder* mMenu; - QMessageBox* msg = nullptr; + QMessageBox* msg; + MRUList* mMRUList; }; #endif // SCRIPTVIEW_H diff --git a/src/gui/images/load-script.png b/src/gui/images/load-script.png new file mode 100644 index 0000000000000000000000000000000000000000..fae3d7d5285a0b8f9471c73417a4bb520737cb85 GIT binary patch literal 556 zcmV+{0@MA8P)Y?Dd*MbKF*1w_jY!1?EDLoVqqM$bqqF{bhp`!b1U@#IOpu1&Th5qw@-Tm4xsf8mx@=KkenH+W8V?H<4* z#_)AxW7{;%VyoQ-Z!{X+U`q%zX;CL?PdMimz#zI(ov8So0Hy%c4V|$60KVUKObYUQ z0BTP-hx=iNf|hA&0cy{!oFE8p=ybXcuyC-1!o?x#ua4%7KlU;p5S|03%C|LuyjQ@) zvkB~%@=wI$nwmavc?00)9anh2lg9pO4yr$A?K2<{^jLBi5_=qKa2%&IWOaI7L48)O zy6%Xwvz06criVJPYO9LbH&er84sU(i1c!PM$8ldL5|g=Nu~PwkDnyjpHXKs7cLas? zA023OhM};MKSHlKrjqu+1_xa?k@)o2^G@k>snb~Ixs3jHB|h~1q6+#*9maZko*L2U u+lPE#G3LFL{eC~HVh7)w^R!g^C%^!H8QMFlEh?M<0000S@~oD literal 0 HcmV?d00001 diff --git a/src/gui/resource.qrc b/src/gui/resource.qrc index 3167c28d..c6281ef9 100644 --- a/src/gui/resource.qrc +++ b/src/gui/resource.qrc @@ -295,5 +295,6 @@ images/layout.png images/summary.png images/edit-script.png + images/load-script.png