mirror of https://github.com/mgba-emu/mgba.git
Scripting: Add MRU
This commit is contained in:
parent
df60b17639
commit
997adecddc
|
@ -301,9 +301,9 @@ void ConfigController::setQtOption(const QString& key, const QVariant& value, co
|
|||
}
|
||||
}
|
||||
|
||||
QList<QString> ConfigController::getMRU() const {
|
||||
QList<QString> mru;
|
||||
m_settings->beginGroup("mru");
|
||||
QStringList ConfigController::getMRU(ConfigController::MRU mruType) const {
|
||||
QStringList mru;
|
||||
m_settings->beginGroup(mruName(mruType));
|
||||
for (int i = 0; i < MRU_LIST_SIZE; ++i) {
|
||||
QString item = m_settings->value(QString::number(i)).toString();
|
||||
if (item.isNull()) {
|
||||
|
@ -315,9 +315,9 @@ QList<QString> ConfigController::getMRU() const {
|
|||
return mru;
|
||||
}
|
||||
|
||||
void ConfigController::setMRU(const QList<QString>& mru) {
|
||||
void ConfigController::setMRU(const QStringList& mru, ConfigController::MRU mruType) {
|
||||
int i = 0;
|
||||
m_settings->beginGroup("mru");
|
||||
m_settings->beginGroup(mruName(mruType));
|
||||
for (const QString& item : mru) {
|
||||
m_settings->setValue(QString::number(i), item);
|
||||
++i;
|
||||
|
@ -331,6 +331,15 @@ void ConfigController::setMRU(const QList<QString>& mru) {
|
|||
m_settings->endGroup();
|
||||
}
|
||||
|
||||
constexpr const char* ConfigController::mruName(ConfigController::MRU mru) {
|
||||
switch (mru) {
|
||||
case MRU::ROM:
|
||||
return "mru";
|
||||
case MRU::Script:
|
||||
return "recentScripts";
|
||||
}
|
||||
}
|
||||
|
||||
void ConfigController::write() {
|
||||
mCoreConfigSave(&m_config);
|
||||
m_settings->sync();
|
||||
|
|
|
@ -67,6 +67,11 @@ public:
|
|||
constexpr static const char* const PORT = "qt";
|
||||
static const int MRU_LIST_SIZE = 10;
|
||||
|
||||
enum class MRU {
|
||||
ROM,
|
||||
Script
|
||||
};
|
||||
|
||||
ConfigController(QObject* parent = nullptr);
|
||||
~ConfigController();
|
||||
|
||||
|
@ -84,8 +89,8 @@ public:
|
|||
QVariant getArgvOption(const QString& key) const;
|
||||
QVariant takeArgvOption(const QString& key);
|
||||
|
||||
QList<QString> getMRU() const;
|
||||
void setMRU(const QList<QString>& mru);
|
||||
QStringList getMRU(MRU = MRU::ROM) const;
|
||||
void setMRU(const QStringList& mru, MRU = MRU::ROM);
|
||||
|
||||
Configuration* overrides() { return mCoreConfigGetOverrides(&m_config); }
|
||||
void saveOverride(const Override&);
|
||||
|
@ -114,7 +119,7 @@ public slots:
|
|||
void write();
|
||||
|
||||
private:
|
||||
void addArgvOption(const QString& key, const QVariant& value);
|
||||
static constexpr const char* mruName(ConfigController::MRU);
|
||||
|
||||
Configuration* defaults() { return &m_config.defaultsTable; }
|
||||
|
||||
|
|
|
@ -6,13 +6,15 @@
|
|||
#include "ScriptingView.h"
|
||||
|
||||
#include "GBAApp.h"
|
||||
#include "ConfigController.h"
|
||||
#include "ScriptingController.h"
|
||||
#include "ScriptingTextBuffer.h"
|
||||
|
||||
using namespace QGBA;
|
||||
|
||||
ScriptingView::ScriptingView(ScriptingController* controller, QWidget* parent)
|
||||
ScriptingView::ScriptingView(ScriptingController* controller, ConfigController* config, QWidget* parent)
|
||||
: QMainWindow(parent)
|
||||
, m_config(config)
|
||||
, m_controller(controller)
|
||||
{
|
||||
m_ui.setupUi(this);
|
||||
|
@ -30,6 +32,9 @@ ScriptingView::ScriptingView(ScriptingController* controller, QWidget* parent)
|
|||
connect(m_ui.buffers, &QListWidget::currentRowChanged, this, &ScriptingView::selectBuffer);
|
||||
connect(m_ui.load, &QAction::triggered, this, &ScriptingView::load);
|
||||
connect(m_ui.reset, &QAction::triggered, controller, &ScriptingController::reset);
|
||||
|
||||
m_mruFiles = m_config->getMRU(ConfigController::MRU::Script);
|
||||
updateMRU();
|
||||
}
|
||||
|
||||
void ScriptingView::submitRepl() {
|
||||
|
@ -41,7 +46,10 @@ void ScriptingView::submitRepl() {
|
|||
void ScriptingView::load() {
|
||||
QString filename = GBAApp::app()->getOpenFileName(this, tr("Select script to load"), getFilters());
|
||||
if (!filename.isEmpty()) {
|
||||
m_controller->loadFile(filename);
|
||||
if (!m_controller->loadFile(filename)) {
|
||||
return;
|
||||
}
|
||||
appendMRU(filename);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -72,3 +80,25 @@ QString ScriptingView::getFilters() const {
|
|||
filters.append(tr("All files (*.*)"));
|
||||
return filters.join(";;");
|
||||
}
|
||||
|
||||
void ScriptingView::appendMRU(const QString& fname) {
|
||||
int index = m_mruFiles.indexOf(fname);
|
||||
if (index >= 0) {
|
||||
m_mruFiles.removeAt(index);
|
||||
}
|
||||
m_mruFiles.prepend(fname);
|
||||
while (m_mruFiles.size() > ConfigController::MRU_LIST_SIZE) {
|
||||
m_mruFiles.removeLast();
|
||||
}
|
||||
updateMRU();
|
||||
}
|
||||
|
||||
void ScriptingView::updateMRU() {
|
||||
m_config->setMRU(m_mruFiles, ConfigController::MRU::Script);
|
||||
m_ui.mru->clear();
|
||||
for (const auto& fname : m_mruFiles) {
|
||||
m_ui.mru->addAction(fname, [this, fname]() {
|
||||
m_controller->loadFile(fname);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
|
||||
namespace QGBA {
|
||||
|
||||
class ConfigController;
|
||||
class ScriptingController;
|
||||
class ScriptingTextBuffer;
|
||||
|
||||
|
@ -16,7 +17,7 @@ class ScriptingView : public QMainWindow {
|
|||
Q_OBJECT
|
||||
|
||||
public:
|
||||
ScriptingView(ScriptingController* controller, QWidget* parent = nullptr);
|
||||
ScriptingView(ScriptingController* controller, ConfigController* config, QWidget* parent = nullptr);
|
||||
|
||||
private slots:
|
||||
void submitRepl();
|
||||
|
@ -28,10 +29,15 @@ private slots:
|
|||
private:
|
||||
QString getFilters() const;
|
||||
|
||||
void appendMRU(const QString&);
|
||||
void updateMRU();
|
||||
|
||||
Ui::ScriptingView m_ui;
|
||||
|
||||
ConfigController* m_config;
|
||||
ScriptingController* m_controller;
|
||||
QList<ScriptingTextBuffer*> m_textBuffers;
|
||||
QStringList m_mruFiles;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -79,7 +79,14 @@
|
|||
<property name="title">
|
||||
<string>File</string>
|
||||
</property>
|
||||
<widget class="QMenu" name="mru">
|
||||
<property name="title">
|
||||
<string>Load recent script</string>
|
||||
</property>
|
||||
</widget>
|
||||
<addaction name="load"/>
|
||||
<addaction name="mru"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="reset"/>
|
||||
</widget>
|
||||
<addaction name="menuFile"/>
|
||||
|
@ -95,6 +102,11 @@
|
|||
<string>&Reset</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action0">
|
||||
<property name="text">
|
||||
<string>0</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
|
|
|
@ -662,7 +662,7 @@ void Window::scriptingOpen() {
|
|||
m_scripting->setController(m_controller);
|
||||
}
|
||||
}
|
||||
ScriptingView* view = new ScriptingView(m_scripting.get());
|
||||
ScriptingView* view = new ScriptingView(m_scripting.get(), m_config);
|
||||
openView(view);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -222,7 +222,7 @@ private:
|
|||
QTimer m_fpsTimer;
|
||||
QTimer m_mustRestart;
|
||||
QTimer m_mustReset;
|
||||
QList<QString> m_mruFiles;
|
||||
QStringList m_mruFiles;
|
||||
ShortcutController* m_shortcutController;
|
||||
#if defined(BUILD_GL) || defined(BUILD_GLES2)
|
||||
std::unique_ptr<ShaderSelector> m_shaderView;
|
||||
|
|
Loading…
Reference in New Issue