Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Qt: Re-enable Load button to browse for file #11807

Merged
merged 3 commits into from
Feb 17, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 37 additions & 3 deletions Qt/QtMain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@
// Currently supports: Android, Linux, Windows, Mac OSX

#include <QApplication>
#include <QUrl>
#include <QDir>
#include <QDesktopWidget>
#include <QDesktopServices>
#include <QDir>
#include <QFile>
#include <QFileDialog>
#include <QLocale>
#include <QScreen>
#include <QThread>
#include <QUrl>

#include "ext/glslang/glslang/Public/ShaderLang.h"

Expand All @@ -29,6 +31,7 @@
#endif
#include "QtMain.h"
#include "gfx_es2/gpu_features.h"
#include "i18n/i18n.h"
#include "math/math_util.h"
#include "thread/threadutil.h"
#include "util/text/utf8.h"
Expand All @@ -39,6 +42,8 @@

MainUI *emugl = NULL;
static int refreshRate = 60000;
static int browseFileEvent = -1;
static int browseFolderEvent = -1;

#ifdef SDL
extern void mixaudio(void *userdata, Uint8 *stream, int len) {
Expand Down Expand Up @@ -94,6 +99,8 @@ bool System_GetPropertyBool(SystemProperty prop) {
switch (prop) {
case SYSPROP_HAS_BACK_BUTTON:
return true;
case SYSPROP_HAS_FILE_BROWSER:
return true;
case SYSPROP_APP_GOLD:
#ifdef GOLD
return true;
Expand All @@ -108,6 +115,10 @@ bool System_GetPropertyBool(SystemProperty prop) {
void System_SendMessage(const char *command, const char *parameter) {
if (!strcmp(command, "finish")) {
qApp->exit(0);
} else if (!strcmp(command, "browse_file")) {
QCoreApplication::postEvent(emugl, new QEvent((QEvent::Type)browseFileEvent));
} else if (!strcmp(command, "browse_folder")) {
QCoreApplication::postEvent(emugl, new QEvent((QEvent::Type)browseFolderEvent));
}
}

Expand Down Expand Up @@ -190,6 +201,10 @@ static int mainInternal(QApplication &a) {
QScopedPointer<MainAudio> audio(new MainAudio());
audio->run();
#endif

browseFileEvent = QEvent::registerEventType();
browseFolderEvent = QEvent::registerEventType();

int retval = a.exec();
delete emugl;
return retval;
Expand Down Expand Up @@ -387,8 +402,27 @@ bool MainUI::event(QEvent *e)
case QEvent::KeyRelease:
NativeKey(KeyInput(DEVICE_ID_KEYBOARD, KeyMapRawQttoNative.find(((QKeyEvent*)e)->key())->second, KEY_UP));
break;

default:
return QWidget::event(e);
if (e->type() == browseFileEvent) {
QString fileName = QFileDialog::getOpenFileName(NULL, "Load ROM", g_Config.currentDirectory.c_str(), "PSP ROMs (*.iso *.cso *.pbp *.elf *.zip *.ppdmp)");
if (QFile::exists(fileName)) {
QDir newPath;
g_Config.currentDirectory = newPath.filePath(fileName).toStdString();
g_Config.Save();

NativeMessageReceived("boot", fileName.toStdString().c_str());
}
break;
} else if (e->type() == browseFolderEvent) {
I18NCategory *mm = GetI18NCategory("MainMenu");
QString fileName = QFileDialog::getExistingDirectory(nullptr, mm->T("Choose folder"), g_Config.currentDirectory.c_str());
if (QDir(fileName).exists()) {
NativeMessageReceived("browse_folderSelect", fileName.toStdString().c_str());
}
} else {
return QWidget::event(e);
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Darn it, didn't even notice there were tabs and spaces in this file... sigh.

-[Unknown]

}
}
e->accept();
return true;
Expand Down
75 changes: 30 additions & 45 deletions UI/MainScreen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,21 +58,15 @@
#include "Core/HLE/sceUmd.h"

#ifdef _WIN32
#include "Windows/W32Util/ShellUtil.h"
#include "Windows/MainWindow.h"
// Unfortunate, for undef DrawText...
#include "Common/CommonWindows.h"
#endif

#ifdef ANDROID_NDK_PROFILER
#include <stdlib.h>
#include "android/android-ndk-profiler/prof.h"
#endif

#ifdef USING_QT_UI
#include <QFileDialog>
#include <QFile>
#include <QDir>
#endif

#include <sstream>

bool MainScreen::showHomebrewTab = false;
Expand Down Expand Up @@ -447,12 +441,18 @@ GameBrowser::GameBrowser(std::string path, bool allowBrowsing, bool *gridStyle,
Refresh();
}

void GameBrowser::FocusGame(std::string gamePath) {
void GameBrowser::FocusGame(const std::string &gamePath) {
focusGamePath_ = gamePath;
Refresh();
focusGamePath_.clear();
}

void GameBrowser::SetPath(const std::string &path) {
path_.SetPath(path);
g_Config.currentDirectory = path_.GetPath();
Refresh();
}

UI::EventReturn GameBrowser::LayoutChange(UI::EventParams &e) {
*gridStyle_ = e.a == 0 ? true : false;
Refresh();
Expand All @@ -466,30 +466,18 @@ UI::EventReturn GameBrowser::LastClick(UI::EventParams &e) {

UI::EventReturn GameBrowser::HomeClick(UI::EventParams &e) {
#ifdef __ANDROID__
path_.SetPath(g_Config.memStickDirectory);
#elif defined(USING_QT_UI)
I18NCategory *mm = GetI18NCategory("MainMenu");
QString fileName = QFileDialog::getExistingDirectory(NULL, "Browse for Folder", g_Config.currentDirectory.c_str());
if (QDir(fileName).exists())
path_.SetPath(fileName.toStdString());
else
return UI::EVENT_DONE;
#elif defined(_WIN32)
#if PPSSPP_PLATFORM(UWP)
SetPath(g_Config.memStickDirectory);
#elif defined(USING_QT_UI) || defined(USING_WIN_UI)
if (System_GetPropertyBool(SYSPROP_HAS_FILE_BROWSER)) {
System_SendMessage("browse_folder", "");
}
#elif PPSSPP_PLATFORM(UWP)
// TODO UWP
SetPath(g_Config.memStickDirectory);
#else
I18NCategory *mm = GetI18NCategory("MainMenu");
std::string folder = W32Util::BrowseForFolder(MainWindow::GetHWND(), mm->T("Choose folder"));
if (!folder.size())
return UI::EVENT_DONE;
path_.SetPath(folder);
#endif
#else
path_.SetPath(getenv("HOME"));
SetPath(getenv("HOME"));
#endif

g_Config.currentDirectory = path_.GetPath();
Refresh();
return UI::EVENT_DONE;
}

Expand Down Expand Up @@ -533,7 +521,7 @@ void GameBrowser::Refresh() {
if (allowBrowsing_) {
topBar->Add(new Spacer(2.0f));
topBar->Add(new TextView(path_.GetFriendlyPath().c_str(), ALIGN_VCENTER | FLAG_WRAP_TEXT, true, new LinearLayoutParams(FILL_PARENT, 64.0f, 1.0f)));
#if defined(_WIN32) || defined(USING_QT_UI)
#if defined(USING_WIN_UI) || defined(USING_QT_UI)
topBar->Add(new Choice(mm->T("Browse", "Browse..."), new LayoutParams(WRAP_CONTENT, 64.0f)))->OnClick.Handle(this, &GameBrowser::HomeClick);
#else
topBar->Add(new Choice(mm->T("Home"), new LayoutParams(WRAP_CONTENT, 64.0f)))->OnClick.Handle(this, &GameBrowser::HomeClick);
Expand Down Expand Up @@ -742,7 +730,7 @@ UI::EventReturn GameBrowser::GameButtonHighlight(UI::EventParams &e) {
}

UI::EventReturn GameBrowser::NavigateClick(UI::EventParams &e) {
DirButton *button = static_cast<DirButton *>(e.v);
DirButton *button = static_cast<DirButton *>(e.v);
std::string text = button->GetPath();
if (button->PathAbsolute()) {
path_.SetPath(text);
Expand Down Expand Up @@ -915,8 +903,7 @@ void MainScreen::CreateViews() {
TextView *ver = rightColumnItems->Add(new TextView(versionString, new LinearLayoutParams(Margins(70, -6, 0, 0))));
ver->SetSmall(true);
ver->SetClip(false);
// Temporarily disabled the load button for Qt. See #11721
#if defined(_WIN32) // || defined(USING_QT_UI)
#if defined(USING_WIN_UI) || defined(USING_QT_UI)
rightColumnItems->Add(new Choice(mm->T("Load","Load...")))->OnClick.Handle(this, &MainScreen::OnLoadFile);
#endif
rightColumnItems->Add(new Choice(mm->T("Game Settings", "Settings")))->OnClick.Handle(this, &MainScreen::OnGameSettings);
Expand Down Expand Up @@ -1005,8 +992,16 @@ void MainScreen::sendMessage(const char *message, const char *value) {
// Always call the base class method first to handle the most common messages.
UIScreenWithBackground::sendMessage(message, value);

if (!strcmp(message, "boot") && screenManager()->topScreen() == this) {
screenManager()->switchScreen(new EmuScreen(value));
if (screenManager()->topScreen() == this) {
if (!strcmp(message, "boot")) {
screenManager()->switchScreen(new EmuScreen(value));
}
if (!strcmp(message, "browse_folderSelect")) {
int tab = tabHolder_->GetCurrentTab();
if (tab >= 0 && tab < (int)gameBrowsers_.size()) {
gameBrowsers_[tab]->SetPath(value);
}
}
}
if (!strcmp(message, "permission_granted") && !strcmp(value, "storage")) {
RecreateViews();
Expand All @@ -1028,16 +1023,6 @@ bool MainScreen::UseVerticalLayout() const {
}

UI::EventReturn MainScreen::OnLoadFile(UI::EventParams &e) {
#if defined(USING_QT_UI)
QString fileName = QFileDialog::getOpenFileName(NULL, "Load ROM", g_Config.currentDirectory.c_str(), "PSP ROMs (*.iso *.cso *.pbp *.elf *.zip *.ppdmp)");
if (QFile::exists(fileName)) {
QDir newPath;
g_Config.currentDirectory = newPath.filePath(fileName).toStdString();
g_Config.Save();
screenManager()->switchScreen(new EmuScreen(fileName.toStdString()));
}
#endif

if (System_GetPropertyBool(SYSPROP_HAS_FILE_BROWSER)) {
System_SendMessage("browse_file", "");
}
Expand Down
3 changes: 2 additions & 1 deletion UI/MainScreen.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ class GameBrowser : public UI::LinearLayout {

UI::Choice *HomebrewStoreButton() { return homebrewStoreButton_; }

void FocusGame(std::string gamePath);
void FocusGame(const std::string &gamePath);
void SetPath(const std::string &path);

protected:
virtual bool DisplayTopBar();
Expand Down
9 changes: 8 additions & 1 deletion Windows/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,11 @@
#include <shellapi.h>
#include <mmsystem.h>

#include "base/NativeApp.h"
#include "base/display.h"
#include "file/vfs.h"
#include "file/zip_read.h"
#include "base/NativeApp.h"
#include "i18n/i18n.h"
#include "profiler/profiler.h"
#include "thread/threadutil.h"
#include "util/text/utf8.h"
Expand Down Expand Up @@ -58,6 +59,7 @@
#include "Windows/GEDebugger/GEDebugger.h"

#include "Windows/W32Util/DialogManager.h"
#include "Windows/W32Util/ShellUtil.h"

#include "Windows/Debugger/CtrlDisAsmView.h"
#include "Windows/Debugger/CtrlMemView.h"
Expand Down Expand Up @@ -274,6 +276,11 @@ void System_SendMessage(const char *command, const char *parameter) {
}
} else if (!strcmp(command, "browse_file")) {
MainWindow::BrowseAndBoot("");
} else if (!strcmp(command, "browse_folder")) {
I18NCategory *mm = GetI18NCategory("MainMenu");
std::string folder = W32Util::BrowseForFolder(MainWindow::GetHWND(), mm->T("Choose folder"));
if (folder.size())
NativeMessageReceived("browse_folderSelect", folder.c_str());
} else if (!strcmp(command, "bgImage_browse")) {
MainWindow::BrowseBackground();
} else if (!strcmp(command, "toggle_fullscreen")) {
Expand Down