aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArisotura <thetotalworm@gmail.com>2021-03-27 01:54:55 +0100
committerArisotura <thetotalworm@gmail.com>2021-03-27 01:54:55 +0100
commit284a9b73b055b6d450825efe0a5dcf7881438c00 (patch)
tree2ee73ffb440b19e875c2018b6130cca3e24700fb
parent7e6cf61b4c2d4e1cf21183447a6b086eb6113188 (diff)
keep recent filenames from being absurdly long in the menu
-rw-r--r--src/frontend/qt_sdl/main.cpp51
1 files changed, 37 insertions, 14 deletions
diff --git a/src/frontend/qt_sdl/main.cpp b/src/frontend/qt_sdl/main.cpp
index ea09696..8462376 100644
--- a/src/frontend/qt_sdl/main.cpp
+++ b/src/frontend/qt_sdl/main.cpp
@@ -752,7 +752,7 @@ void ScreenHandler::screenOnMouseRelease(QMouseEvent* event)
void ScreenHandler::screenOnMouseMove(QMouseEvent* event)
{
event->accept();
-
+
showCursor();
if (!(event->buttons() & Qt::LeftButton)) return;
@@ -892,7 +892,7 @@ ScreenPanelGL::ScreenPanelGL(QWidget* parent) : QOpenGLWidget(parent)
ScreenPanelGL::~ScreenPanelGL()
{
mouseTimer->stop();
-
+
makeCurrent();
OSD::DeInit(this);
@@ -1134,15 +1134,16 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent)
actOpenROM = menu->addAction("Open ROM...");
connect(actOpenROM, &QAction::triggered, this, &MainWindow::onOpenFile);
-
+
actOpenROMArchive = menu->addAction("Open ROM inside Archive...");
connect(actOpenROMArchive, &QAction::triggered, this, &MainWindow::onOpenFileArchive);
recentMenu = menu->addMenu("Open Recent");
- for(int i = 0; i < 10; ++i)
+ for (int i = 0; i < 10; ++i)
{
- if(strlen(Config::RecentROMList[i]) > 0)
- recentFileList.push_back(Config::RecentROMList[i]);
+ char* item = Config::RecentROMList[i];
+ if (strlen(item) > 0)
+ recentFileList.push_back(item);
}
updateRecentFilesMenu();
@@ -1236,7 +1237,7 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent)
actWifiSettings = menu->addAction("Wifi settings");
connect(actWifiSettings, &QAction::triggered, this, &MainWindow::onOpenWifiSettings);
-
+
actInterfaceSettings = menu->addAction("Interface settings");
connect(actInterfaceSettings, &QAction::triggered, this, &MainWindow::onOpenInterfaceSettings);
@@ -1308,7 +1309,7 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent)
}
connect(grpScreenLayout, &QActionGroup::triggered, this, &MainWindow::onChangeScreenLayout);
-
+
submenu->addSeparator();
actScreenSwap = submenu->addAction("Swap screens");
@@ -1455,7 +1456,7 @@ void MainWindow::createScreenPanel()
{
panelGL = new ScreenPanelGL(this);
panelGL->show();
-
+
panel = panelGL;
panelGL->setMouseTracking(true);
mouseTimer = panelGL->setupMouseTimer();
@@ -1479,7 +1480,7 @@ void MainWindow::createScreenPanel()
panelNative = new ScreenPanelNative(this);
panel = panelNative;
panel->show();
-
+
panelNative->setMouseTracking(true);
mouseTimer = panelNative->setupMouseTimer();
connect(mouseTimer, &QTimer::timeout, [=] { if (Config::MouseHide) panelNative->setCursor(Qt::BlankCursor);});
@@ -1729,7 +1730,7 @@ void MainWindow::loadROM(QString filename)
recentFileList.removeAll(filename);
recentFileList.prepend(filename);
updateRecentFilesMenu();
-
+
// TODO: validate the input file!!
// * check that it is a proper ROM
// * ensure the binary offsets are sane
@@ -1881,8 +1882,30 @@ void MainWindow::updateRecentFilesMenu()
for(int i = 0; i < recentFileList.size(); ++i)
{
- QAction *actRecentFile_i = recentMenu->addAction(QString("%1. %2").arg(i+1).arg(recentFileList.at(i)));
- actRecentFile_i->setData(recentFileList.at(i));
+ QString item_full = recentFileList.at(i);
+ QString item_display = item_full;
+ int itemlen = item_full.length();
+ const int maxlen = 100;
+ if (itemlen > maxlen)
+ {
+ int cut_start = 0;
+ while (item_full[cut_start] != '/' && item_full[cut_start] != '\\' &&
+ cut_start < itemlen)
+ cut_start++;
+
+ int cut_end = itemlen-1;
+ while (((item_full[cut_end] != '/' && item_full[cut_end] != '\\') ||
+ (cut_start+4+(itemlen-cut_end) < maxlen)) &&
+ cut_end > 0)
+ cut_end--;
+
+ item_display.truncate(cut_start+1);
+ item_display += "...";
+ item_display += item_full.remove(0, cut_end);
+ }
+
+ QAction *actRecentFile_i = recentMenu->addAction(QString("%1. %2").arg(i+1).arg(item_display));
+ actRecentFile_i->setData(item_full);
connect(actRecentFile_i, &QAction::triggered, this, &MainWindow::onClickRecentFile);
if(i < 10)
@@ -2440,7 +2463,7 @@ void MainWindow::onUpdateVideoSettings(bool glchange)
{
emuThread->emuPause();
- if (hasOGL)
+ if (hasOGL)
{
emuThread->deinitOpenGL();
delete panelGL;