Compare commits
24 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5d20e98aba | |||
| 617ee3f96c | |||
| 083f7c2e4f | |||
| a8ea1795bf | |||
| 8a6cb4b5a8 | |||
| 53edf065a5 | |||
| bf65be483d | |||
| 1e90047368 | |||
| abd1160f87 | |||
| 55d7dd9d89 | |||
| b7eb1afb86 | |||
| 25ddb4a531 | |||
| 79f7c2224b | |||
| 8adda4fc7d | |||
| 5d23743133 | |||
| 2558e5d6a6 | |||
| 859b81b7e0 | |||
| 30369f58a9 | |||
| 30afc80a64 | |||
| 949eee8d08 | |||
| 1fae30bd33 | |||
| d8817bf0f3 | |||
| 5279b10b67 | |||
| 391f46be22 |
|
Before Width: | Height: | Size: 368 KiB After Width: | Height: | Size: 445 KiB |
|
Before Width: | Height: | Size: 102 KiB After Width: | Height: | Size: 104 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 274 KiB |
@@ -33,6 +33,34 @@
|
||||
</screenshots>
|
||||
<description/>
|
||||
<releases>
|
||||
<release version="v0.2.8" date="2023-01-01" type="stable">
|
||||
<description>
|
||||
<p>Changes:</p>
|
||||
<ul>
|
||||
<li>Fix 'Uniform Size (Grid View)' not being disabled during emulation</li>
|
||||
<li>Fix toolbar not respecting the view setting</li>
|
||||
<li>Fix being stuck at the loading screen when having more ROMs than the ROM search limit</li>
|
||||
<li>Improve error message when opening a ROM fails</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release version="v0.2.7" date="2022-12-29" type="stable">
|
||||
<description>
|
||||
<p>Changes:</p>
|
||||
<ul>
|
||||
<li>Fix core error not showing when the statusbar was hidden</li>
|
||||
<li>Fix .ndd/.64d not being in the empty ROM Browser widget</li>
|
||||
<li>Fix .jpg/.jpeg files not working on covers on Windows</li>
|
||||
<li>Fix updater script not copying subdirectories on Windows (for portable installs)</li>
|
||||
<li>Fix 64DD Disks which required the development IPL not working</li>
|
||||
<li>Fix 64DD Disks showing the wrong internal ROM name (this fix requires clearing the ROM cache)</li>
|
||||
<li>Fix cover filenames allowing invalid characters (they will now be replaced by _)</li>
|
||||
<li>Add more icons to View menu in the menu bar</li>
|
||||
<li>Add 'Uniform Size (Grid View)' to View menu in the menu bar</li>
|
||||
<li>Add smooth scrolling to List View and Grid View</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release version="v0.2.6" date="2022-12-28" type="stable">
|
||||
<description>
|
||||
<p>Changes:</p>
|
||||
|
||||
@@ -37,7 +37,7 @@ endif(USE_CCACHE)
|
||||
|
||||
if(NOT NO_GIT_CLONE)
|
||||
set(MUPEN64PLUSCORE_URL "https://github.com/Rosalie241/mupen64plus-core")
|
||||
set(MUPEN64PLUSCORE_TAG "7adf84febed449c31a9454e296a3922d441bc663")
|
||||
set(MUPEN64PLUSCORE_TAG "3b6523edd467eb9224310e0862005c7e5ae9c290")
|
||||
|
||||
set(MUPEN64PLUS_RSP_CXD4_URL "https://github.com/mupen64plus/mupen64plus-rsp-cxd4")
|
||||
set(MUPEN64PLUS_RSP_CXD4_TAG "39f79201baa15890c4cbae92f2215a634cc3ee6d")
|
||||
@@ -131,7 +131,7 @@ ExternalProject_Add(mupen64plus-rsp-parallel
|
||||
INSTALL_COMMAND ""
|
||||
|
||||
BUILD_IN_SOURCE True
|
||||
CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
||||
CMAKE_ARGS ${CMAKE_CONFIGURE_ARGS}
|
||||
|
||||
BUILD_BYPRODUCTS ${THIRDPARTY_DIR}/mupen64plus-rsp-parallel/mupen64plus-rsp-parallel.${SO_EXT}
|
||||
DEPENDS mupen64plus-core
|
||||
|
||||
@@ -209,7 +209,11 @@ static bool read_raw_file(std::filesystem::path file, char** buf, int* size)
|
||||
if (!fileStream.is_open())
|
||||
{
|
||||
error = "read_raw_file Failed: ";
|
||||
error += "failed to open file!";
|
||||
error += "failed to open file: ";
|
||||
error += strerror(errno);
|
||||
error += " (";
|
||||
error += std::to_string(errno);
|
||||
error += ")";
|
||||
CoreSetError(error);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -462,6 +462,9 @@ static l_Setting get_setting(SettingsID settingId)
|
||||
case SettingsID::RomBrowser_GridViewIconHeight:
|
||||
setting = {SETTING_SECTION_ROMBROWSER, "GridViewIconHeight", 126};
|
||||
break;
|
||||
case SettingsID::RomBrowser_GridViewUniformItemSizes:
|
||||
setting = {SETTING_SECTION_ROMBROWSER, "GridViewUniformItemSizes", true};
|
||||
break;
|
||||
|
||||
case SettingsID::Settings_HasForceUsedSetOnce:
|
||||
setting = {SETTING_SECTION_SETTINGS, "HasForceUsedSetOnce", false};
|
||||
|
||||
@@ -125,6 +125,7 @@ enum class SettingsID
|
||||
RomBrowser_ListViewSortOrder,
|
||||
RomBrowser_GridViewIconWidth,
|
||||
RomBrowser_GridViewIconHeight,
|
||||
RomBrowser_GridViewUniformItemSizes,
|
||||
|
||||
// Settings Settings
|
||||
Settings_HasForceUsedSetOnce,
|
||||
|
||||
@@ -44,9 +44,8 @@ class EmulationThread : public QThread
|
||||
void on_VidExt_ResizeWindow(int, int);
|
||||
|
||||
void on_VidExt_Init(void);
|
||||
void on_VidExt_SetMode(int, int, int, int, int);
|
||||
void on_VidExt_SetWindowedModeWithRate(int, int, int, int, int);
|
||||
void on_VidExt_SetFullscreenModeWithRate(int, int, int, int, int);
|
||||
void on_VidExt_SetWindowedMode(int, int, int, int);
|
||||
void on_VidExt_SetFullscreenMode(int, int, int, int);
|
||||
void on_VidExt_SetCaption(QString);
|
||||
void on_VidExt_ToggleFS(bool);
|
||||
void on_VidExt_Quit(void);
|
||||
|
||||
@@ -110,7 +110,7 @@ void RomSearcherThread::searchDirectory(QString directory)
|
||||
{
|
||||
if (count++ >= this->maxItems)
|
||||
{
|
||||
return;
|
||||
break;
|
||||
}
|
||||
|
||||
emit this->RomFound(file, header, settings);
|
||||
|
||||
@@ -88,7 +88,7 @@ void InstallUpdateDialog::install(void)
|
||||
"@echo off",
|
||||
"del /F /Q \"" + fullFilePath + "\"",
|
||||
"taskkill /F /PID:" + appPid,
|
||||
"copy /Y \"" + extractDirectory + "\\*\" \"" + appPath + "/\"",
|
||||
"xcopy /S /Y /I \"" + extractDirectory + "\\*\" \"" + appPath + "/\"",
|
||||
"start \"\" \"" + appPath + "\\RMG.exe\"",
|
||||
"rmdir /S /Q \"" + this->temporaryDirectory + "\"",
|
||||
};
|
||||
|
||||
@@ -167,8 +167,13 @@ void MainWindow::configureUI(QApplication* app)
|
||||
this->restoreGeometry(QByteArray::fromBase64(geometry.toLocal8Bit()));
|
||||
}
|
||||
|
||||
this->statusBar()->setHidden(true);
|
||||
this->ui_ShowToolbar = CoreSettingsGetBoolValue(SettingsID::GUI_Toolbar);
|
||||
this->ui_ShowStatusbar = CoreSettingsGetBoolValue(SettingsID::GUI_StatusBar);
|
||||
|
||||
this->toolBar->setVisible(this->ui_ShowToolbar);
|
||||
this->statusBar()->setVisible(this->ui_ShowStatusbar);
|
||||
this->statusBar()->addPermanentWidget(this->ui_StatusBar_Label, 1);
|
||||
|
||||
this->ui_TimerTimeout = CoreSettingsGetIntValue(SettingsID::GUI_StatusbarMessageDuration);
|
||||
|
||||
this->ui_Widgets->addWidget(this->ui_Widget_RomBrowser);
|
||||
@@ -257,14 +262,12 @@ void MainWindow::updateUI(bool inEmulation, bool isPaused)
|
||||
|
||||
this->ui_Widgets->setCurrentIndex(1);
|
||||
this->storeGeometry();
|
||||
this->statusBar()->setVisible(this->ui_ShowStatusbar);
|
||||
}
|
||||
else if (!this->ui_NoSwitchToRomBrowser)
|
||||
{
|
||||
this->setWindowTitle(this->ui_WindowTitle);
|
||||
this->ui_Widgets->setCurrentIndex(0);
|
||||
this->loadGeometry();
|
||||
this->statusBar()->setVisible(this->ui_ShowStatusbar);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -331,20 +334,14 @@ void MainWindow::connectEmulationThreadSignals(void)
|
||||
Qt::BlockingQueuedConnection);
|
||||
connect(this->emulationThread, &Thread::EmulationThread::on_VidExt_SetupOGL, this, &MainWindow::on_VidExt_SetupOGL,
|
||||
Qt::BlockingQueuedConnection);
|
||||
connect(this->emulationThread, &Thread::EmulationThread::on_VidExt_SetMode, this, &MainWindow::on_VidExt_SetMode,
|
||||
Qt::BlockingQueuedConnection);
|
||||
connect(this->emulationThread, &Thread::EmulationThread::on_VidExt_SetWindowedModeWithRate, this,
|
||||
&MainWindow::on_VidExt_SetWindowedModeWithRate, Qt::BlockingQueuedConnection);
|
||||
connect(this->emulationThread, &Thread::EmulationThread::on_VidExt_SetFullscreenModeWithRate, this,
|
||||
&MainWindow::on_VidExt_SetFullscreenModeWithRate, Qt::BlockingQueuedConnection);
|
||||
connect(this->emulationThread, &Thread::EmulationThread::on_VidExt_SetWindowedMode, this,
|
||||
&MainWindow::on_VidExt_SetWindowedMode, Qt::BlockingQueuedConnection);
|
||||
connect(this->emulationThread, &Thread::EmulationThread::on_VidExt_SetFullscreenMode, this,
|
||||
&MainWindow::on_VidExt_SetFullscreenMode, Qt::BlockingQueuedConnection);
|
||||
connect(this->emulationThread, &Thread::EmulationThread::on_VidExt_ResizeWindow, this,
|
||||
&MainWindow::on_VidExt_ResizeWindow, Qt::BlockingQueuedConnection);
|
||||
connect(this->emulationThread, &Thread::EmulationThread::on_VidExt_SetCaption, this,
|
||||
&MainWindow::on_VidExt_SetCaption, Qt::BlockingQueuedConnection);
|
||||
connect(this->emulationThread, &Thread::EmulationThread::on_VidExt_ToggleFS, this, &MainWindow::on_VidExt_ToggleFS,
|
||||
Qt::BlockingQueuedConnection);
|
||||
connect(this->emulationThread, &Thread::EmulationThread::on_VidExt_Quit, this, &MainWindow::on_VidExt_Quit,
|
||||
Qt::BlockingQueuedConnection);
|
||||
}
|
||||
|
||||
void MainWindow::launchEmulationThread(QString cartRom, QString diskRom)
|
||||
@@ -361,8 +358,8 @@ void MainWindow::launchEmulationThread(QString cartRom, QString diskRom)
|
||||
}
|
||||
}
|
||||
|
||||
ui_RefreshRomListAfterEmulation = this->ui_Widget_RomBrowser->IsRefreshingRomList();
|
||||
if (ui_RefreshRomListAfterEmulation)
|
||||
this->ui_RefreshRomListAfterEmulation = this->ui_Widget_RomBrowser->IsRefreshingRomList();
|
||||
if (this->ui_RefreshRomListAfterEmulation)
|
||||
{
|
||||
this->ui_Widget_RomBrowser->StopRefreshRomList();
|
||||
}
|
||||
@@ -457,10 +454,10 @@ void MainWindow::updateActions(bool inEmulation, bool isPaused)
|
||||
keyBinding = QString::fromStdString(CoreSettingsGetStringValue(SettingsID::KeyBinding_Settings));
|
||||
this->action_Settings_Settings->setShortcut(QKeySequence(keyBinding));
|
||||
|
||||
this->action_View_UniformSize->setEnabled(!inEmulation);
|
||||
keyBinding = QString::fromStdString(CoreSettingsGetStringValue(SettingsID::KeyBinding_Fullscreen));
|
||||
this->action_View_Fullscreen->setEnabled(inEmulation);
|
||||
this->action_View_Fullscreen->setShortcut(QKeySequence(keyBinding));
|
||||
|
||||
keyBinding = QString::fromStdString(CoreSettingsGetStringValue(SettingsID::KeyBinding_RefreshROMList));
|
||||
this->action_View_RefreshRoms->setEnabled(!inEmulation);
|
||||
this->action_View_RefreshRoms->setShortcut(QKeySequence(keyBinding));
|
||||
@@ -573,6 +570,9 @@ void MainWindow::configureActions(void)
|
||||
action->setChecked(i == currentView);
|
||||
action->setActionGroup(romBrowserViewActionGroup);
|
||||
}
|
||||
|
||||
// configure grid view options actions
|
||||
this->action_View_UniformSize->setChecked(CoreSettingsGetBoolValue(SettingsID::RomBrowser_GridViewUniformItemSizes));
|
||||
}
|
||||
|
||||
void MainWindow::connectActionSignals(void)
|
||||
@@ -606,6 +606,7 @@ void MainWindow::connectActionSignals(void)
|
||||
connect(this->action_View_StatusBar, &QAction::toggled, this, &MainWindow::on_Action_View_StatusBar);
|
||||
connect(this->action_View_GameList, &QAction::toggled, this, &MainWindow::on_Action_View_GameList);
|
||||
connect(this->action_View_GameGrid, &QAction::toggled, this, &MainWindow::on_Action_View_GameGrid);
|
||||
connect(this->action_View_UniformSize, &QAction::toggled, this, &MainWindow::on_Action_View_UniformSize);
|
||||
connect(this->action_View_Fullscreen, &QAction::triggered, this, &MainWindow::on_Action_View_Fullscreen);
|
||||
connect(this->action_View_RefreshRoms, &QAction::triggered, this, &MainWindow::on_Action_View_RefreshRoms);
|
||||
connect(this->action_View_ClearRomCache, &QAction::triggered, this, &MainWindow::on_Action_View_ClearRomCache);
|
||||
@@ -1155,6 +1156,12 @@ void MainWindow::on_Action_View_GameGrid(bool checked)
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::on_Action_View_UniformSize(bool checked)
|
||||
{
|
||||
this->ui_Widget_RomBrowser->SetGridViewUniformSizes(checked);
|
||||
CoreSettingsSetValue(SettingsID::RomBrowser_GridViewUniformItemSizes, checked);
|
||||
}
|
||||
|
||||
void MainWindow::on_Action_View_Fullscreen(void)
|
||||
{
|
||||
if (!CoreToggleFullscreen())
|
||||
@@ -1357,9 +1364,7 @@ void MainWindow::on_RomBrowser_Cheats(QString file)
|
||||
|
||||
void MainWindow::on_VidExt_Init(void)
|
||||
{
|
||||
this->ui_VidExt_Geometry_Saved = false;
|
||||
this->ui_VidExtForceSetMode = true;
|
||||
|
||||
this->updateUI(true, false);
|
||||
}
|
||||
|
||||
@@ -1369,25 +1374,13 @@ void MainWindow::on_VidExt_SetupOGL(QSurfaceFormat format, QThread* thread)
|
||||
this->ui_Widget_OpenGL->setFormat(format);
|
||||
}
|
||||
|
||||
void MainWindow::on_VidExt_SetMode(int width, int height, int bps, int mode, int flags)
|
||||
void MainWindow::on_VidExt_SetWindowedMode(int width, int height, int bps, int flags)
|
||||
{
|
||||
this->on_VidExt_ResizeWindow(width, height);
|
||||
}
|
||||
|
||||
void MainWindow::on_VidExt_SetWindowedModeWithRate(int width, int height, int refresh, int bps, int flags)
|
||||
{
|
||||
// load window geometry
|
||||
if (this->ui_VidExt_Geometry_Saved)
|
||||
{
|
||||
this->restoreGeometry(this->ui_VidExt_Geometry);
|
||||
this->ui_VidExt_Geometry_Saved = false;
|
||||
|
||||
// force 'refresh' the video plugin
|
||||
CoreSetVideoSize(width, height);
|
||||
}
|
||||
bool returnedFromFullscreen = false;
|
||||
|
||||
if (this->isFullScreen())
|
||||
{
|
||||
returnedFromFullscreen = true;
|
||||
this->showNormal();
|
||||
}
|
||||
|
||||
@@ -1412,18 +1405,17 @@ void MainWindow::on_VidExt_SetWindowedModeWithRate(int width, int height, int re
|
||||
}
|
||||
|
||||
this->removeFullscreenActions();
|
||||
this->on_VidExt_ResizeWindow(width, height);
|
||||
|
||||
// only resize window when we're
|
||||
// not returning from fullscreen
|
||||
if (!returnedFromFullscreen)
|
||||
{
|
||||
this->on_VidExt_ResizeWindow(width, height);
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::on_VidExt_SetFullscreenModeWithRate(int width, int height, int refresh, int bps, int flags)
|
||||
void MainWindow::on_VidExt_SetFullscreenMode(int width, int height, int bps, int flags)
|
||||
{
|
||||
// save window geometry
|
||||
if (!this->ui_VidExt_Geometry_Saved)
|
||||
{
|
||||
this->ui_VidExt_Geometry = this->saveGeometry();
|
||||
this->ui_VidExt_Geometry_Saved = true;
|
||||
}
|
||||
|
||||
if (!this->isFullScreen())
|
||||
{
|
||||
this->showFullScreen();
|
||||
@@ -1464,12 +1456,12 @@ void MainWindow::on_VidExt_ResizeWindow(int width, int height)
|
||||
height += this->menuBar()->height();
|
||||
}
|
||||
|
||||
if (this->ui_ShowToolbar && !this->toolBar->isHidden())
|
||||
if (!this->toolBar->isHidden())
|
||||
{
|
||||
height += this->toolBar->height();
|
||||
}
|
||||
|
||||
if (this->ui_ShowStatusbar && !this->statusBar()->isHidden())
|
||||
if (!this->statusBar()->isHidden())
|
||||
{
|
||||
height += this->statusBar()->height();
|
||||
}
|
||||
@@ -1501,10 +1493,6 @@ void MainWindow::on_VidExt_ResizeWindow(int width, int height)
|
||||
this->ui_VidExtForceSetMode = false;
|
||||
}
|
||||
|
||||
void MainWindow::on_VidExt_SetCaption(QString title)
|
||||
{
|
||||
}
|
||||
|
||||
void MainWindow::on_VidExt_ToggleFS(bool fullscreen)
|
||||
{
|
||||
if (fullscreen)
|
||||
@@ -1567,10 +1555,6 @@ void MainWindow::on_VidExt_ToggleFS(bool fullscreen)
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::on_VidExt_Quit(void)
|
||||
{
|
||||
}
|
||||
|
||||
void MainWindow::on_Core_DebugCallback(CoreDebugMessageType type, QString context, QString message)
|
||||
{
|
||||
// only display in statusbar when emulation is running
|
||||
@@ -1579,11 +1563,6 @@ void MainWindow::on_Core_DebugCallback(CoreDebugMessageType type, QString contex
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this->ui_ShowStatusbar)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!context.startsWith("[CORE]"))
|
||||
{
|
||||
return;
|
||||
@@ -1607,6 +1586,11 @@ void MainWindow::on_Core_DebugCallback(CoreDebugMessageType type, QString contex
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this->ui_ShowStatusbar)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
this->ui_StatusBar_Label->setText(message);
|
||||
|
||||
// reset label deletion timer
|
||||
|
||||
@@ -64,9 +64,6 @@ class MainWindow : public QMainWindow, private Ui::MainWindow
|
||||
QByteArray ui_Geometry;
|
||||
bool ui_Geometry_Saved = false;
|
||||
|
||||
QByteArray ui_VidExt_Geometry;
|
||||
bool ui_VidExt_Geometry_Saved = false;
|
||||
|
||||
bool ui_AllowManualResizing = false;
|
||||
bool ui_HideCursorInEmulation = false;
|
||||
bool ui_HideCursorInFullscreenEmulation = false;
|
||||
@@ -162,6 +159,7 @@ class MainWindow : public QMainWindow, private Ui::MainWindow
|
||||
void on_Action_View_StatusBar(bool);
|
||||
void on_Action_View_GameList(bool);
|
||||
void on_Action_View_GameGrid(bool);
|
||||
void on_Action_View_UniformSize(bool);
|
||||
void on_Action_View_Fullscreen(void);
|
||||
void on_Action_View_RefreshRoms(void);
|
||||
void on_Action_View_ClearRomCache(void);
|
||||
@@ -183,13 +181,10 @@ class MainWindow : public QMainWindow, private Ui::MainWindow
|
||||
|
||||
void on_VidExt_Init(void);
|
||||
void on_VidExt_SetupOGL(QSurfaceFormat, QThread *);
|
||||
void on_VidExt_SetMode(int, int, int, int, int);
|
||||
void on_VidExt_SetWindowedModeWithRate(int, int, int, int, int);
|
||||
void on_VidExt_SetFullscreenModeWithRate(int, int, int, int, int);
|
||||
void on_VidExt_SetWindowedMode(int, int, int, int);
|
||||
void on_VidExt_SetFullscreenMode(int, int, int, int);
|
||||
void on_VidExt_ResizeWindow(int, int);
|
||||
void on_VidExt_SetCaption(QString);
|
||||
void on_VidExt_ToggleFS(bool);
|
||||
void on_VidExt_Quit(void);
|
||||
|
||||
void on_Core_DebugCallback(CoreDebugMessageType, QString, QString);
|
||||
};
|
||||
|
||||
@@ -103,6 +103,8 @@
|
||||
<addaction name="action_View_GameList"/>
|
||||
<addaction name="action_View_GameGrid"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_View_UniformSize"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_View_Fullscreen"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_View_RefreshRoms"/>
|
||||
@@ -445,6 +447,10 @@
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset theme="tools-line">
|
||||
<normaloff>.</normaloff>.</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Toolbar</string>
|
||||
</property>
|
||||
@@ -453,6 +459,10 @@
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset theme="information-line">
|
||||
<normaloff>.</normaloff>.</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Status Bar</string>
|
||||
</property>
|
||||
@@ -502,6 +512,18 @@
|
||||
<string>Clear ROM Cache</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_View_UniformSize">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset theme="function-line">
|
||||
<normaloff>.</normaloff>.</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Uniform Size (Grid View)</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="UIResources.qrc"/>
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5.33 3.271a3.5 3.5 0 0 1 4.254 4.963l10.709 10.71-1.414 1.414-10.71-10.71a3.502 3.502 0 0 1-4.962-4.255L5.444 7.63a1.5 1.5 0 1 0 2.121-2.121L5.329 3.27zm10.367 1.884l3.182-1.768 1.414 1.414-1.768 3.182-1.768.354-2.12 2.121-1.415-1.414 2.121-2.121.354-1.768zm-6.718 8.132l1.414 1.414-5.303 5.303a1 1 0 0 1-1.492-1.327l.078-.087 5.303-5.303z"/></svg>
|
||||
|
After Width: | Height: | Size: 478 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5.33 3.271a3.5 3.5 0 0 1 4.254 4.963l10.709 10.71-1.414 1.414-10.71-10.71a3.502 3.502 0 0 1-4.962-4.255L5.444 7.63a1.5 1.5 0 1 0 2.121-2.121L5.329 3.27zm10.367 1.884l3.182-1.768 1.414 1.414-1.768 3.182-1.768.354-2.12 2.121-1.415-1.414 2.121-2.121.354-1.768zm-6.718 8.132l1.414 1.414-5.303 5.303a1 1 0 0 1-1.492-1.327l.078-.087 5.303-5.303z" fill="#ffffff"/></svg>
|
||||
|
After Width: | Height: | Size: 493 B |
@@ -25,6 +25,7 @@
|
||||
<file alias="icons/black/svg/screenshot-2-line.svg">Resource/icons/black/svg/screenshot-2-line.svg</file>
|
||||
<file alias="icons/black/svg/shut-down-line.svg">Resource/icons/black/svg/shut-down-line.svg</file>
|
||||
<file alias="icons/black/svg/speed-line.svg">Resource/icons/black/svg/speed-line.svg</file>
|
||||
<file alias="icons/black/svg/tools-line.svg">Resource/icons/black/svg/tools-line.svg</file>
|
||||
<file alias="icons/black/svg/settings-3-line.svg">Resource/icons/black/svg/settings-3-line.svg</file>
|
||||
<file alias="icons/black/svg/volume-up-line.svg">Resource/icons/black/svg/volume-up-line.svg</file>
|
||||
|
||||
@@ -50,6 +51,7 @@
|
||||
<file alias="icons/white/svg/screenshot-2-line.svg">Resource/icons/white/svg/screenshot-2-line.svg</file>
|
||||
<file alias="icons/white/svg/shut-down-line.svg">Resource/icons/white/svg/shut-down-line.svg</file>
|
||||
<file alias="icons/white/svg/speed-line.svg">Resource/icons/white/svg/speed-line.svg</file>
|
||||
<file alias="icons/white/svg/tools-line.svg">Resource/icons/white/svg/tools-line.svg</file>
|
||||
<file alias="icons/white/svg/settings-3-line.svg">Resource/icons/white/svg/settings-3-line.svg</file>
|
||||
<file alias="icons/white/svg/volume-up-line.svg">Resource/icons/white/svg/volume-up-line.svg</file>
|
||||
</qresource>
|
||||
|
||||
@@ -53,6 +53,16 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>.ndd/.64d (64DD Disks)</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include <QPixmap>
|
||||
#include <vector>
|
||||
#include <QList>
|
||||
#include <QScrollBar>
|
||||
|
||||
using namespace UserInterface::Widget;
|
||||
|
||||
@@ -79,6 +80,7 @@ RomBrowserWidget::RomBrowserWidget(QWidget *parent) : QStackedWidget(parent)
|
||||
this->listViewWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||||
this->listViewWidget->setSelectionBehavior(QTableView::SelectRows);
|
||||
this->listViewWidget->setSelectionMode(QAbstractItemView::SingleSelection);
|
||||
this->listViewWidget->setVerticalScrollMode(QAbstractItemView::ScrollMode::ScrollPerPixel);
|
||||
this->listViewWidget->verticalHeader()->hide();
|
||||
this->listViewWidget->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
|
||||
this->listViewWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);
|
||||
@@ -110,13 +112,14 @@ RomBrowserWidget::RomBrowserWidget(QWidget *parent) : QStackedWidget(parent)
|
||||
this->gridViewWidget->setFlow(QListView::Flow::LeftToRight);
|
||||
this->gridViewWidget->setResizeMode(QListView::Adjust);
|
||||
this->gridViewWidget->setMovement(QListView::Static);
|
||||
this->gridViewWidget->setUniformItemSizes(true);
|
||||
this->gridViewWidget->setUniformItemSizes(CoreSettingsGetBoolValue(SettingsID::RomBrowser_GridViewUniformItemSizes));
|
||||
this->gridViewWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
|
||||
this->gridViewWidget->setViewMode(QListView::ViewMode::IconMode);
|
||||
this->gridViewWidget->setTextElideMode(Qt::ElideNone);
|
||||
this->gridViewWidget->setTextElideMode(Qt::TextElideMode::ElideNone);
|
||||
this->gridViewWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||||
this->gridViewWidget->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
|
||||
this->gridViewWidget->verticalScrollBar()->setSingleStep(15);
|
||||
this->gridViewWidget->setWordWrap(true);
|
||||
this->gridViewWidget->setUniformItemSizes(false); // TODO? make this configurable maybe
|
||||
this->gridViewWidget->setContextMenuPolicy(Qt::ContextMenuPolicy::CustomContextMenu);
|
||||
this->gridViewWidget->setFrameStyle(QFrame::NoFrame);
|
||||
int iconWidth = CoreSettingsGetIntValue(SettingsID::RomBrowser_GridViewIconWidth);
|
||||
@@ -178,6 +181,17 @@ RomBrowserWidget::RomBrowserWidget(QWidget *parent) : QStackedWidget(parent)
|
||||
this->contextMenu->addSeparator();
|
||||
this->contextMenu->addAction(this->action_SetCoverImage);
|
||||
this->contextMenu->addAction(this->action_RemoveCoverImage);
|
||||
|
||||
// configure current view widget
|
||||
int currentView = CoreSettingsGetIntValue(SettingsID::RomBrowser_ViewMode);
|
||||
if (currentView == 0)
|
||||
{
|
||||
this->currentViewWidget = this->listViewWidget;
|
||||
}
|
||||
else
|
||||
{
|
||||
this->currentViewWidget = this->gridViewWidget;
|
||||
}
|
||||
}
|
||||
|
||||
RomBrowserWidget::~RomBrowserWidget()
|
||||
@@ -245,6 +259,24 @@ void RomBrowserWidget::ShowGrid(void)
|
||||
}
|
||||
}
|
||||
|
||||
void RomBrowserWidget::SetGridViewUniformSizes(bool value)
|
||||
{
|
||||
// refresh ROM list when we're currently in the grid view
|
||||
// and we're not refreshing already
|
||||
if (this->currentWidget() == this->gridViewWidget &&
|
||||
!this->IsRefreshingRomList())
|
||||
{
|
||||
if (this->gridViewWidget->uniformItemSizes() != value)
|
||||
{
|
||||
this->gridViewWidget->setUniformItemSizes(value);
|
||||
this->RefreshRomList();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
this->gridViewWidget->setUniformItemSizes(value);
|
||||
}
|
||||
|
||||
QStandardItemModel* RomBrowserWidget::getCurrentModel(void)
|
||||
{
|
||||
QWidget* currentWidget = this->currentWidget();
|
||||
@@ -324,12 +356,25 @@ QIcon RomBrowserWidget::getCurrentCover(CoreRomHeader header, CoreRomSettings se
|
||||
QString::fromStdString(settings.GoodName),
|
||||
QString::fromStdString(header.Name) })
|
||||
{
|
||||
// fixup file name
|
||||
QString fixedName = name;
|
||||
for (const char c : ":<>\"/\\|?*")
|
||||
{
|
||||
// skip empty characters
|
||||
if (c == '\0')
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
fixedName.replace(c, "_");
|
||||
}
|
||||
|
||||
// we support jpg & png as file extensions
|
||||
for (QString ext : { ".png", ".jpg", ".jpeg" })
|
||||
{
|
||||
QString coverPath = this->coversDirectory;
|
||||
coverPath += "/";
|
||||
coverPath += name;
|
||||
coverPath += fixedName;
|
||||
coverPath += ext;
|
||||
|
||||
if (QFile::exists(coverPath) &&
|
||||
|
||||
@@ -51,6 +51,8 @@ class RomBrowserWidget : public QStackedWidget
|
||||
void ShowList(void);
|
||||
void ShowGrid(void);
|
||||
|
||||
void SetGridViewUniformSizes(bool value);
|
||||
|
||||
private:
|
||||
Widget::RomBrowserEmptyWidget* emptyWidget = nullptr;
|
||||
Widget::RomBrowserLoadingWidget* loadingWidget = nullptr;
|
||||
|
||||
@@ -81,7 +81,7 @@ static m64p_error VidExt_ListRates(m64p_2d_size Size, int *NumRates, int *Rates)
|
||||
return M64ERR_UNSUPPORTED;
|
||||
}
|
||||
|
||||
static m64p_error VidExt_SetModeWithRate(int Width, int Height, int RefreshRate, int BitsPerPixel, int ScreenMode, int Flags)
|
||||
static m64p_error VidExt_SetMode(int Width, int Height, int BitsPerPixel, int ScreenMode, int Flags)
|
||||
{
|
||||
if (!l_VidExtSetup)
|
||||
{
|
||||
@@ -90,23 +90,23 @@ static m64p_error VidExt_SetModeWithRate(int Width, int Height, int RefreshRate,
|
||||
|
||||
switch (ScreenMode)
|
||||
{
|
||||
default:
|
||||
case M64VIDEO_NONE:
|
||||
return M64ERR_INPUT_INVALID;
|
||||
case M64VIDEO_WINDOWED:
|
||||
l_EmuThread->on_VidExt_SetWindowedModeWithRate(Width, Height, RefreshRate, BitsPerPixel, Flags);
|
||||
l_EmuThread->on_VidExt_SetWindowedMode(Width, Height, BitsPerPixel, Flags);
|
||||
break;
|
||||
case M64VIDEO_FULLSCREEN:
|
||||
l_EmuThread->on_VidExt_SetFullscreenModeWithRate(Width, Height, RefreshRate, BitsPerPixel, Flags);
|
||||
l_EmuThread->on_VidExt_SetFullscreenMode(Width, Height, BitsPerPixel, Flags);
|
||||
break;
|
||||
}
|
||||
|
||||
return M64ERR_SUCCESS;
|
||||
}
|
||||
|
||||
static m64p_error VidExt_SetMode(int Width, int Height, int BitsPerPixel, int ScreenMode, int Flags)
|
||||
static m64p_error VidExt_SetModeWithRate(int Width, int Height, int RefreshRate, int BitsPerPixel, int ScreenMode, int Flags)
|
||||
{
|
||||
VidExt_SetModeWithRate(Width, Height, 0, BitsPerPixel, ScreenMode, Flags);
|
||||
return M64ERR_SUCCESS;
|
||||
return VidExt_SetMode(Width, Height, BitsPerPixel, ScreenMode, Flags);
|
||||
}
|
||||
|
||||
static m64p_function VidExt_GLGetProc(const char *Proc)
|
||||
@@ -116,7 +116,6 @@ static m64p_function VidExt_GLGetProc(const char *Proc)
|
||||
|
||||
static m64p_error VidExt_GLSetAttr(m64p_GLattr Attr, int Value)
|
||||
{
|
||||
|
||||
switch (Attr)
|
||||
{
|
||||
case M64P_GL_DOUBLEBUFFER:
|
||||
|
||||
@@ -29,13 +29,10 @@ function findAndCopyDLL() {
|
||||
}
|
||||
|
||||
|
||||
for ext in dll exe
|
||||
for file in "$bin_dir"/*.exe "$bin_dir/Plugin"/*/*.dll
|
||||
do
|
||||
while read -r file_line
|
||||
do
|
||||
echo "=> Copying dependencies for $file_line"
|
||||
copyForOBJ "$file_line"
|
||||
done < <(find "$bin_dir" -name "*.$ext")
|
||||
echo "=> Copying dependencies for $file"
|
||||
copyForOBJ "$file"
|
||||
done
|
||||
|
||||
windeployqt-qt6 "$exe"
|
||||
@@ -43,5 +40,6 @@ windeployqt-qt6 "$exe"
|
||||
# needed by Qt at runtime
|
||||
cp "$path/libcrypto-1_1-x64.dll" "$bin_dir/"
|
||||
cp "$path/libssl-1_1-x64.dll" "$bin_dir/"
|
||||
cp "$path/libjpeg-8.dll" "$bin_dir/"
|
||||
|
||||
exit 0
|
||||
|
||||