Skip to content
Open
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
38 changes: 38 additions & 0 deletions src/actionmanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -609,6 +609,12 @@ void ActionManager::actionTriggered(QAction *triggeredAction, MainWindow *releva
relevantWindow->nextFile();
} else if (key == "lastfile") {
relevantWindow->lastFile();
} else if (key == "cyclesortmode") {
relevantWindow->cycleSortMode();
} else if (key == "togglesortorder") {
relevantWindow->toggleSortOrder();
} else if (key.startsWith("sortmode")) {
relevantWindow->setSortMode(key.mid(8).toInt());
} else if (key == "saveframeas") {
relevantWindow->saveFrameAs();
} else if (key == "pause") {
Expand Down Expand Up @@ -766,6 +772,38 @@ void ActionManager::initializeActionLibrary()
lastFileAction->setData({ "folderdisable" });
actionLibrary.insert("lastfile", lastFileAction);

auto *cycleSortModeAction = new QAction(tr("Cycle Sort Files By"));
cycleSortModeAction->setData({ "folderdisable" });
actionLibrary.insert("cyclesortmode", cycleSortModeAction);

auto *toggleSortOrderAction = new QAction(tr("Toggle Sort Order"));
toggleSortOrderAction->setData({ "folderdisable" });
actionLibrary.insert("togglesortorder", toggleSortOrderAction);

auto *sortByNameAction = new QAction(tr("Sort by Name"));
sortByNameAction->setData({ "folderdisable" });
actionLibrary.insert("sortmode0", sortByNameAction);

auto *sortByDateModifiedAction = new QAction(tr("Sort by Date Modified"));
sortByDateModifiedAction->setData({ "folderdisable" });
actionLibrary.insert("sortmode1", sortByDateModifiedAction);

auto *sortByDateCreatedAction = new QAction(tr("Sort by Date Created"));
sortByDateCreatedAction->setData({ "folderdisable" });
actionLibrary.insert("sortmode2", sortByDateCreatedAction);

auto *sortBySizeAction = new QAction(tr("Sort by Size"));
sortBySizeAction->setData({ "folderdisable" });
actionLibrary.insert("sortmode3", sortBySizeAction);

auto *sortByTypeAction = new QAction(tr("Sort by Type"));
sortByTypeAction->setData({ "folderdisable" });
actionLibrary.insert("sortmode4", sortByTypeAction);

auto *sortRandomAction = new QAction(tr("Sort Randomly"));
sortRandomAction->setData({ "folderdisable" });
actionLibrary.insert("sortmode5", sortRandomAction);

auto *saveFrameAsAction =
new QAction(QIcon::fromTheme("document-save-as"), tr("Save Frame &As..."));
saveFrameAsAction->setData({ "gifdisable" });
Expand Down
110 changes: 96 additions & 14 deletions src/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,12 +75,23 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
// Make info dialog object
info = new QVInfoDialog(this);

// Timer for slideshow
slideshowTimer = new QTimer(this);
connect(slideshowTimer, &QTimer::timeout, this, &MainWindow::slideshowAction);

// Context menu
auto &actionManager = qvApp->getActionManager();
// Timer for slideshow
slideshowTimer = new QTimer(this);
connect(slideshowTimer, &QTimer::timeout, this, &MainWindow::slideshowAction);

// Timer for temporary on-screen messages
osdTimer = new QTimer(this);
osdTimer->setSingleShot(true);
osdTimer->setInterval(1500);
connect(osdTimer, &QTimer::timeout, this, [this] {
updateWindowTitle();
ui->fullscreenLabel->setVisible(
qvApp->getSettingsManager().getBool(SettingsManager::Setting::FullScreenDetails)
&& windowState().testFlag(Qt::WindowFullScreen));
});

// Context menu
auto &actionManager = qvApp->getActionManager();

contextMenu = new QMenu(this);

Expand Down Expand Up @@ -1043,14 +1054,85 @@ void MainWindow::nextFile()
graphicsView->goToFile(QVGraphicsView::GoToFileMode::next);
}

void MainWindow::lastFile()
{
graphicsView->goToFile(QVGraphicsView::GoToFileMode::last);
}

void MainWindow::saveFrameAs()
{
QSettings settings;
void MainWindow::lastFile()
{
graphicsView->goToFile(QVGraphicsView::GoToFileMode::last);
}

void MainWindow::cycleSortMode()
{
constexpr int sortModeCount = 6;
const int sortMode = qvApp->getSettingsManager().getInt(SettingsManager::Setting::SortMode);
setSortMode((sortMode + 1) % sortModeCount);
}

void MainWindow::toggleSortOrder()
{
QSettings settings;
settings.beginGroup("options");
settings.setValue("sortdescending",
!qvApp->getSettingsManager().getBool(
SettingsManager::Setting::SortDescending));
qvApp->getSettingsManager().loadSettings();
showSortOSD();
}

void MainWindow::setSortMode(int sortMode)
{
constexpr int sortModeCount = 6;
if (sortMode < 0 || sortMode >= sortModeCount)
return;
if (sortMode == qvApp->getSettingsManager().getInt(SettingsManager::Setting::SortMode))
return;

QSettings settings;
settings.beginGroup("options");
settings.setValue("sortmode", sortMode);
qvApp->getSettingsManager().loadSettings();
showSortOSD();
}

void MainWindow::showSortOSD()
{
const auto &settingsManager = qvApp->getSettingsManager();
showOSDMessage(tr("Sort: %1 (%2)")
.arg(sortModeName(settingsManager.getInt(
SettingsManager::Setting::SortMode)),
settingsManager.getBool(SettingsManager::Setting::SortDescending)
? tr("Descending")
: tr("Ascending")));
}

void MainWindow::showOSDMessage(const QString &message)
{
ui->fullscreenLabel->setText(message);
ui->fullscreenLabel->setVisible(true);
osdTimer->start();
}

QString MainWindow::sortModeName(int sortMode) const
{
switch (sortMode) {
case 0:
return tr("Name");
case 1:
return tr("Date Modified");
case 2:
return tr("Date Created");
case 3:
return tr("Size");
case 4:
return tr("Type");
case 5:
return tr("Random");
default:
return tr("Unknown");
}
}

void MainWindow::saveFrameAs()
{
QSettings settings;
settings.beginGroup("recents");
if (!getCurrentFileDetails().isMovieLoaded)
return;
Expand Down
14 changes: 14 additions & 0 deletions src/mainwindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,12 @@ class MainWindow : public QMainWindow

void lastFile();

void cycleSortMode();

void toggleSortOrder();

void setSortMode(int sortMode);

void saveFrameAs();

void pause();
Expand Down Expand Up @@ -157,6 +163,12 @@ protected slots:
void shortcutsUpdated();

private:
void showSortOSD();

void showOSDMessage(const QString &message);

QString sortModeName(int sortMode) const;

Ui::MainWindow *ui;
QVGraphicsView *graphicsView;

Expand All @@ -165,6 +177,8 @@ protected slots:

QTimer *slideshowTimer;

QTimer *osdTimer;

QShortcut *escShortcut;

QVInfoDialog *info;
Expand Down
8 changes: 6 additions & 2 deletions src/qvimagecore.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -332,9 +332,9 @@ void QVImageCore::updateFolderInfo(QString dirPath)
return;
}

currentFileDetails.folderFileInfoList = getCompatibleFiles(dirPath);
const QList<CompatibleFile> compatibleFiles = getCompatibleFiles(dirPath);

DirInfo dirInfo = { dirPath, currentFileDetails.folderFileInfoList.count(),
DirInfo dirInfo = { dirPath, compatibleFiles.count(),
qvGetSettingInt(SortMode), qvGetSettingBool(SortDescending) };
// If the current folder changed since the last image, assign a new seed for random sorting
const bool shouldSort = lastDirInfo != dirInfo;
Expand Down Expand Up @@ -417,6 +417,10 @@ void QVImageCore::updateFolderInfo(QString dirPath)
};

if (shouldSort) {
currentFileDetails.folderFileInfoList = compatibleFiles;
sortFn();
} else if (dirInfo.sortMode != 5) {
currentFileDetails.folderFileInfoList = compatibleFiles;
sortFn();
}

Expand Down
8 changes: 8 additions & 0 deletions src/shortcutmanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,14 @@ void ShortcutManager::initializeShortcutsList()
{} });
shortcutsList.append(
{ tr("Last File"), "lastfile", QStringList(QKeySequence(Qt::Key_End).toString()), {} });
shortcutsList.append({ tr("Cycle Sort Files By"), "cyclesortmode", {}, {} });
shortcutsList.append({ tr("Toggle Sort Order"), "togglesortorder", {}, {} });
shortcutsList.append({ tr("Sort by Name"), "sortmode0", {}, {} });
shortcutsList.append({ tr("Sort by Date Modified"), "sortmode1", {}, {} });
shortcutsList.append({ tr("Sort by Date Created"), "sortmode2", {}, {} });
shortcutsList.append({ tr("Sort by Size"), "sortmode3", {}, {} });
shortcutsList.append({ tr("Sort by Type"), "sortmode4", {}, {} });
shortcutsList.append({ tr("Sort Randomly"), "sortmode5", {}, {} });
shortcutsList.append(
{ tr("Zoom In"), "zoomin", keyBindingsToStringList(QKeySequence::ZoomIn), {} });
// Allow zooming with Ctrl + plus like a regular person (without holding shift)
Expand Down