Qt: Enable all play options for the last played game on StartUp

- main_window::CreateThumbnailToolbar into main_window::Init
- also moved the log message for "Recent Game Not Valid" from Error to Warning (only the common occurance)
This commit is contained in:
Megamouse 2018-04-24 10:23:18 +02:00 committed by Ani
parent 6b3eebc907
commit 4e8ce7fac0
3 changed files with 47 additions and 24 deletions

View file

@ -89,11 +89,6 @@ void rpcs3_app::Init()
RPCS3MainWin->Init(); RPCS3MainWin->Init();
RPCS3MainWin->show();
// Create the thumbnail toolbar after the main_window is created
RPCS3MainWin->CreateThumbnailToolbar();
if (guiSettings->GetValue(gui::ib_show_welcome).toBool()) if (guiSettings->GetValue(gui::ib_show_welcome).toBool())
{ {
welcome_dialog* welcome = new welcome_dialog(); welcome_dialog* welcome = new welcome_dialog();

View file

@ -69,14 +69,6 @@ main_window::~main_window()
#endif #endif
} }
auto Pause = []()
{
if (Emu.IsReady()) Emu.Run();
else if (Emu.IsPaused()) Emu.Resume();
else if (Emu.IsRunning()) Emu.Pause();
else if (!Emu.GetBoot().empty()) Emu.Load();
};
/* An init method is used so that RPCS3App can create the necessary connects before calling init (specifically the stylesheet connect). /* An init method is used so that RPCS3App can create the necessary connects before calling init (specifically the stylesheet connect).
* Simplifies logic a bit. * Simplifies logic a bit.
*/ */
@ -150,18 +142,29 @@ void main_window::Init()
std::exit(EXIT_SUCCESS); std::exit(EXIT_SUCCESS);
} }
} }
}
void main_window::CreateThumbnailToolbar() show(); // needs to be done before creating the thumbnail toolbar
{
// enable play options if a recent game exists
const bool enable_play_last = !m_recentGameActs.isEmpty();
if (enable_play_last)
{
ui->sysPauseAct->setEnabled(true);
ui->sysPauseAct->setText(tr("&Start last played game\tCtrl+E"));
ui->toolbar_start->setToolTip(tr("Start last played game"));
ui->toolbar_start->setEnabled(true);
}
// create tool buttons for the taskbar thumbnail
#ifdef _WIN32 #ifdef _WIN32
m_thumb_bar = new QWinThumbnailToolBar(this); m_thumb_bar = new QWinThumbnailToolBar(this);
m_thumb_bar->setWindow(windowHandle()); m_thumb_bar->setWindow(windowHandle());
m_thumb_playPause = new QWinThumbnailToolButton(m_thumb_bar); m_thumb_playPause = new QWinThumbnailToolButton(m_thumb_bar);
m_thumb_playPause->setToolTip(tr("Pause")); m_thumb_playPause->setToolTip(enable_play_last ? tr("Start last played game") : tr("Start emulation"));
m_thumb_playPause->setIcon(m_icon_thumb_pause); m_thumb_playPause->setIcon(m_icon_thumb_play);
m_thumb_playPause->setEnabled(false); m_thumb_playPause->setEnabled(enable_play_last);
m_thumb_stop = new QWinThumbnailToolButton(m_thumb_bar); m_thumb_stop = new QWinThumbnailToolButton(m_thumb_bar);
m_thumb_stop->setToolTip(tr("Stop")); m_thumb_stop->setToolTip(tr("Stop"));
@ -181,7 +184,7 @@ void main_window::CreateThumbnailToolbar()
connect(m_thumb_stop, &QWinThumbnailToolButton::clicked, [=]() { Emu.Stop(); }); connect(m_thumb_stop, &QWinThumbnailToolButton::clicked, [=]() { Emu.Stop(); });
connect(m_thumb_restart, &QWinThumbnailToolButton::clicked, [=]() { Emu.Restart(); }); connect(m_thumb_restart, &QWinThumbnailToolButton::clicked, [=]() { Emu.Restart(); });
connect(m_thumb_playPause, &QWinThumbnailToolButton::clicked, Pause); connect(m_thumb_playPause, &QWinThumbnailToolButton::clicked, this, &main_window::OnPlayOrPause);
#endif #endif
} }
@ -235,6 +238,30 @@ void main_window::SetAppIconFromPath(const std::string& path)
m_appIcon = QApplication::windowIcon(); m_appIcon = QApplication::windowIcon();
} }
void main_window::OnPlayOrPause()
{
if (Emu.IsReady())
{
Emu.Run();
}
else if (Emu.IsPaused())
{
Emu.Resume();
}
else if (Emu.IsRunning())
{
Emu.Pause();
}
else if (!Emu.GetBoot().empty())
{
Emu.Load();
}
else if (Emu.IsStopped() && !m_recentGameActs.isEmpty())
{
BootRecentAction(m_recentGameActs.first());
}
}
void main_window::Boot(const std::string& path, bool direct, bool add_only) void main_window::Boot(const std::string& path, bool direct, bool add_only)
{ {
SetAppIconFromPath(path); SetAppIconFromPath(path);
@ -926,7 +953,7 @@ QAction* main_window::CreateRecentAction(const q_string_pair& entry, const uint&
{ {
if (m_rg_entries.contains(entry)) if (m_rg_entries.contains(entry))
{ {
LOG_ERROR(GENERAL, "Recent Game not valid, removing from Boot Recent list: %s", sstr(entry.first)); LOG_WARNING(GENERAL, "Recent Game not valid, removing from Boot Recent list: %s", sstr(entry.first));
int idx = m_rg_entries.indexOf(entry); int idx = m_rg_entries.indexOf(entry);
m_rg_entries.removeAt(idx); m_rg_entries.removeAt(idx);
@ -1129,7 +1156,7 @@ void main_window::CreateConnects()
connect(ui->bootInstallPkgAct, &QAction::triggered, [this] {InstallPkg(); }); connect(ui->bootInstallPkgAct, &QAction::triggered, [this] {InstallPkg(); });
connect(ui->bootInstallPupAct, &QAction::triggered, [this] {InstallPup(); }); connect(ui->bootInstallPupAct, &QAction::triggered, [this] {InstallPup(); });
connect(ui->exitAct, &QAction::triggered, this, &QWidget::close); connect(ui->exitAct, &QAction::triggered, this, &QWidget::close);
connect(ui->sysPauseAct, &QAction::triggered, Pause); connect(ui->sysPauseAct, &QAction::triggered, this, &main_window::OnPlayOrPause);
connect(ui->sysStopAct, &QAction::triggered, [=]() { Emu.Stop(); }); connect(ui->sysStopAct, &QAction::triggered, [=]() { Emu.Stop(); });
connect(ui->sysRebootAct, &QAction::triggered, [=]() { Emu.Restart(); }); connect(ui->sysRebootAct, &QAction::triggered, [=]() { Emu.Restart(); });
@ -1344,7 +1371,7 @@ void main_window::CreateConnects()
connect(ui->toolbar_disc, &QAction::triggered, this, &main_window::BootGame); connect(ui->toolbar_disc, &QAction::triggered, this, &main_window::BootGame);
connect(ui->toolbar_refresh, &QAction::triggered, [=]() { m_gameListFrame->Refresh(true); }); connect(ui->toolbar_refresh, &QAction::triggered, [=]() { m_gameListFrame->Refresh(true); });
connect(ui->toolbar_stop, &QAction::triggered, [=]() { Emu.Stop(); }); connect(ui->toolbar_stop, &QAction::triggered, [=]() { Emu.Stop(); });
connect(ui->toolbar_start, &QAction::triggered, Pause); connect(ui->toolbar_start, &QAction::triggered, this, &main_window::OnPlayOrPause);
connect(ui->toolbar_fullscreen, &QAction::triggered, [=] connect(ui->toolbar_fullscreen, &QAction::triggered, [=]
{ {
@ -1452,6 +1479,7 @@ void main_window::ConfigureGuiFromSettings(bool configure_all)
ui->bootRecentMenu->removeAction(act); ui->bootRecentMenu->removeAction(act);
} }
m_recentGameActs.clear(); m_recentGameActs.clear();
// Fill the recent games menu // Fill the recent games menu
for (int i = 0; i < m_rg_entries.count(); i++) for (int i = 0; i < m_rg_entries.count(); i++)
{ {

View file

@ -71,7 +71,6 @@ public:
explicit main_window(std::shared_ptr<gui_settings> guiSettings, std::shared_ptr<emu_settings> emuSettings, QWidget *parent = 0); explicit main_window(std::shared_ptr<gui_settings> guiSettings, std::shared_ptr<emu_settings> emuSettings, QWidget *parent = 0);
void Init(); void Init();
~main_window(); ~main_window();
void CreateThumbnailToolbar();
QIcon GetAppIcon(); QIcon GetAppIcon();
Q_SIGNALS: Q_SIGNALS:
@ -87,6 +86,7 @@ public Q_SLOTS:
void RepaintGui(); void RepaintGui();
private Q_SLOTS: private Q_SLOTS:
void OnPlayOrPause();
void Boot(const std::string& path, bool direct = false, bool add_only = false); void Boot(const std::string& path, bool direct = false, bool add_only = false);
void BootElf(); void BootElf();
void BootGame(); void BootGame();