Qt: Menu option to make portable

This commit is contained in:
Jeffrey Pfau 2015-07-05 14:42:11 -07:00
parent d9778a98d4
commit 38ec77b803
5 changed files with 46 additions and 0 deletions

View File

@ -126,6 +126,30 @@ bool GBAConfigSave(const struct GBAConfig* config) {
return ConfigurationWrite(&config->configTable, path); return ConfigurationWrite(&config->configTable, path);
} }
void GBAConfigMakePortable(const struct GBAConfig* config) {
struct VFile* portable;
#ifndef _WIN32
char out[PATH_MAX];
getcwd(out, PATH_MAX);
strncat(out, PATH_SEP "portable.ini", PATH_MAX - strlen(out));
portable = VFileOpen(out, O_WRONLY | O_CREAT);
#else
wchar_t wpath[MAX_PATH];
wchar_t wprojectName[MAX_PATH];
MultiByteToWideChar(CP_UTF8, 0, projectName, -1, wprojectName, MAX_PATH);
HMODULE hModule = GetModuleHandleW(NULL);
GetModuleFileNameW(hModule, wpath, MAX_PATH);
PathRemoveFileSpecW(wpath);
WideCharToMultiByte(CP_UTF8, 0, wpath, -1, out, outLength, 0, 0);
StringCchCatA(out, outLength, "\\portable.ini");
portable = VFileOpen(out, O_WRONLY | O_CREAT);
#endif
if (portable) {
portable->close(portable);
GBAConfigSave(config);
}
}
void GBAConfigDirectory(char* out, size_t outLength) { void GBAConfigDirectory(char* out, size_t outLength) {
struct VFile* portable; struct VFile* portable;
#ifndef _WIN32 #ifndef _WIN32

View File

@ -52,6 +52,7 @@ void GBAConfigDeinit(struct GBAConfig*);
bool GBAConfigLoad(struct GBAConfig*); bool GBAConfigLoad(struct GBAConfig*);
bool GBAConfigSave(const struct GBAConfig*); bool GBAConfigSave(const struct GBAConfig*);
void GBAConfigMakePortable(const struct GBAConfig*);
void GBAConfigDirectory(char* out, size_t outLength); void GBAConfigDirectory(char* out, size_t outLength);
const char* GBAConfigGetValue(const struct GBAConfig*, const char* key); const char* GBAConfigGetValue(const struct GBAConfig*, const char* key);

View File

@ -258,3 +258,19 @@ void ConfigController::write() {
GBAConfigSave(&m_config); GBAConfigSave(&m_config);
m_settings->sync(); m_settings->sync();
} }
void ConfigController::makePortable() {
GBAConfigMakePortable(&m_config);
char path[PATH_MAX];
GBAConfigDirectory(path, sizeof(path));
QString fileName(path);
fileName.append(QDir::separator());
fileName.append("qt.ini");
QSettings* settings2 = new QSettings(fileName, QSettings::IniFormat, this);
for (const auto& key : m_settings->allKeys()) {
settings2->setValue(key, m_settings->value(key));
}
delete m_settings;
m_settings = settings2;
}

View File

@ -89,6 +89,7 @@ public slots:
void setOption(const char* key, const QVariant& value); void setOption(const char* key, const QVariant& value);
void setQtOption(const QString& key, const QVariant& value, const QString& group = QString()); void setQtOption(const QString& key, const QVariant& value, const QString& group = QString());
void makePortable();
void write(); void write();
private: private:

View File

@ -642,6 +642,10 @@ void Window::setupMenu(QMenuBar* menubar) {
fileMenu->addSeparator(); fileMenu->addSeparator();
addControlledAction(fileMenu, fileMenu->addAction(tr("Make portable"), m_config, SLOT(makePortable())), "makePortable");
fileMenu->addSeparator();
QAction* loadState = new QAction(tr("&Load state"), fileMenu); QAction* loadState = new QAction(tr("&Load state"), fileMenu);
loadState->setShortcut(tr("F10")); loadState->setShortcut(tr("F10"));
connect(loadState, &QAction::triggered, [this]() { this->openStateWindow(LoadSave::LOAD); }); connect(loadState, &QAction::triggered, [this]() { this->openStateWindow(LoadSave::LOAD); });