git repos / SagoImageBrowser

blame: src/mainwindow.cpp

normal view · raw

032aa1e1 Poul Sander 2026-02-19 18:55 1
#include "mainwindow.h"
032aa1e1 Poul Sander 2026-02-19 18:55 2
#include "imagemodel.h"
61136b77 Poul Sander 2026-02-20 22:45 3
#include "imageviewwidget.h"
032aa1e1 Poul Sander 2026-02-19 18:55 4
032aa1e1 Poul Sander 2026-02-19 18:55 5
#include <QFileSystemModel>
032aa1e1 Poul Sander 2026-02-19 18:55 6
#include <QTreeView>
032aa1e1 Poul Sander 2026-02-19 18:55 7
#include <QListView>
032aa1e1 Poul Sander 2026-02-19 18:55 8
#include <QLabel>
032aa1e1 Poul Sander 2026-02-19 18:55 9
#include <QSplitter>
61136b77 Poul Sander 2026-02-20 22:45 10
#include <QStackedWidget>
032aa1e1 Poul Sander 2026-02-19 18:55 11
#include <QDir>
fc5f2e27 Poul Sander 2026-02-22 22:06 12
#include <QComboBox>
fc5f2e27 Poul Sander 2026-02-22 22:06 13
#include <QVBoxLayout>
fc5f2e27 Poul Sander 2026-02-22 22:06 14
#include <QStandardPaths>
032aa1e1 Poul Sander 2026-02-19 18:55 15
#include <QImageReader>
032aa1e1 Poul Sander 2026-02-19 18:55 16
#include <QHeaderView>
6fcd6c90 Poul Sander 2026-02-19 21:12 17
#include <QScrollBar>
6fcd6c90 Poul Sander 2026-02-19 21:12 18
#include <QTimer>
6fcd6c90 Poul Sander 2026-02-19 21:12 19
#include <QEvent>
61136b77 Poul Sander 2026-02-20 22:45 20
#include <QKeyEvent>
c9e5684a Poul Sander 2026-02-23 19:18 21
#include <QCloseEvent>
cfe4a67b Poul Sander 2026-02-19 23:06 22
#include <QItemSelectionModel>
6fcd6c90 Poul Sander 2026-02-19 21:12 23
#include <iostream>
032aa1e1 Poul Sander 2026-02-19 18:55 24
032aa1e1 Poul Sander 2026-02-19 18:55 25
MainWindow::MainWindow(QWidget *parent)
032aa1e1 Poul Sander 2026-02-19 18:55 26
    : QMainWindow(parent)
032aa1e1 Poul Sander 2026-02-19 18:55 27
{
032aa1e1 Poul Sander 2026-02-19 18:55 28
    setupUi();
032aa1e1 Poul Sander 2026-02-19 18:55 29
    setupConnections();
032aa1e1 Poul Sander 2026-02-19 18:55 30
}
032aa1e1 Poul Sander 2026-02-19 18:55 31
032aa1e1 Poul Sander 2026-02-19 18:55 32
void MainWindow::setupUi()
032aa1e1 Poul Sander 2026-02-19 18:55 33
{
032aa1e1 Poul Sander 2026-02-19 18:55 34
    // Folder model (left pane)
032aa1e1 Poul Sander 2026-02-19 18:55 35
    m_dirModel = new QFileSystemModel(this);
032aa1e1 Poul Sander 2026-02-19 18:55 36
    m_dirModel->setFilter(QDir::AllDirs | QDir::NoDotAndDotDot);
032aa1e1 Poul Sander 2026-02-19 18:55 37
    m_dirModel->setRootPath(QDir::homePath());
032aa1e1 Poul Sander 2026-02-19 18:55 38
fc5f2e27 Poul Sander 2026-02-22 22:06 39
    // Root chooser combo box
fc5f2e27 Poul Sander 2026-02-22 22:06 40
    m_rootCombo = new QComboBox;
fc5f2e27 Poul Sander 2026-02-22 22:06 41
    m_rootCombo->addItem("Home",     QDir::homePath());
fc5f2e27 Poul Sander 2026-02-22 22:06 42
    m_rootCombo->addItem("Pictures", QStandardPaths::writableLocation(QStandardPaths::PicturesLocation));
fc5f2e27 Poul Sander 2026-02-22 22:06 43
    m_rootCombo->addItem("File System", QDir::rootPath());
fc5f2e27 Poul Sander 2026-02-22 22:06 44
032aa1e1 Poul Sander 2026-02-19 18:55 45
    m_treeView = new QTreeView;
032aa1e1 Poul Sander 2026-02-19 18:55 46
    m_treeView->setModel(m_dirModel);
032aa1e1 Poul Sander 2026-02-19 18:55 47
    m_treeView->setRootIndex(m_dirModel->index(QDir::homePath()));
032aa1e1 Poul Sander 2026-02-19 18:55 48
    m_treeView->header()->hide();
032aa1e1 Poul Sander 2026-02-19 18:55 49
    m_treeView->setColumnHidden(1, true);
032aa1e1 Poul Sander 2026-02-19 18:55 50
    m_treeView->setColumnHidden(2, true);
032aa1e1 Poul Sander 2026-02-19 18:55 51
    m_treeView->setColumnHidden(3, true);
032aa1e1 Poul Sander 2026-02-19 18:55 52
fc5f2e27 Poul Sander 2026-02-22 22:06 53
    // Left pane: combo + tree inside a container widget
fc5f2e27 Poul Sander 2026-02-22 22:06 54
    QWidget *leftPane = new QWidget;
fc5f2e27 Poul Sander 2026-02-22 22:06 55
    QVBoxLayout *leftLayout = new QVBoxLayout(leftPane);
fc5f2e27 Poul Sander 2026-02-22 22:06 56
    leftLayout->setContentsMargins(0, 0, 0, 0);
fc5f2e27 Poul Sander 2026-02-22 22:06 57
    leftLayout->addWidget(m_rootCombo);
fc5f2e27 Poul Sander 2026-02-22 22:06 58
    leftLayout->addWidget(m_treeView);
fc5f2e27 Poul Sander 2026-02-22 22:06 59
032aa1e1 Poul Sander 2026-02-19 18:55 60
    // Thumbnail model (center pane)
032aa1e1 Poul Sander 2026-02-19 18:55 61
    m_imageModel = new ImageModel(this);
032aa1e1 Poul Sander 2026-02-19 18:55 62
032aa1e1 Poul Sander 2026-02-19 18:55 63
    m_listView = new QListView;
032aa1e1 Poul Sander 2026-02-19 18:55 64
    m_listView->setModel(m_imageModel);
032aa1e1 Poul Sander 2026-02-19 18:55 65
    m_listView->setViewMode(QListView::IconMode);
032aa1e1 Poul Sander 2026-02-19 18:55 66
    m_listView->setIconSize(QSize(128, 128));
b614a581 Poul Sander 2026-02-19 21:18 67
    m_listView->setGridSize(QSize(148, 168));
032aa1e1 Poul Sander 2026-02-19 18:55 68
    m_listView->setResizeMode(QListView::Adjust);
032aa1e1 Poul Sander 2026-02-19 18:55 69
    m_listView->setSelectionMode(QAbstractItemView::SingleSelection);
b614a581 Poul Sander 2026-02-19 21:18 70
    m_listView->setSpacing(4);
b614a581 Poul Sander 2026-02-19 21:18 71
    m_listView->setWordWrap(true);
b614a581 Poul Sander 2026-02-19 21:18 72
    m_listView->setTextElideMode(Qt::ElideRight);
032aa1e1 Poul Sander 2026-02-19 18:55 73
032aa1e1 Poul Sander 2026-02-19 18:55 74
    // Preview pane (right)
032aa1e1 Poul Sander 2026-02-19 18:55 75
    m_previewLabel = new QLabel;
032aa1e1 Poul Sander 2026-02-19 18:55 76
    m_previewLabel->setAlignment(Qt::AlignCenter);
032aa1e1 Poul Sander 2026-02-19 18:55 77
    m_previewLabel->setMinimumWidth(300);
032aa1e1 Poul Sander 2026-02-19 18:55 78
032aa1e1 Poul Sander 2026-02-19 18:55 79
    // Layout
032aa1e1 Poul Sander 2026-02-19 18:55 80
    QSplitter *rightSplitter = new QSplitter(Qt::Horizontal);
032aa1e1 Poul Sander 2026-02-19 18:55 81
    rightSplitter->addWidget(m_listView);
032aa1e1 Poul Sander 2026-02-19 18:55 82
    rightSplitter->addWidget(m_previewLabel);
032aa1e1 Poul Sander 2026-02-19 18:55 83
    rightSplitter->setStretchFactor(0, 3);
032aa1e1 Poul Sander 2026-02-19 18:55 84
    rightSplitter->setStretchFactor(1, 2);
032aa1e1 Poul Sander 2026-02-19 18:55 85
032aa1e1 Poul Sander 2026-02-19 18:55 86
    QSplitter *mainSplitter = new QSplitter(Qt::Horizontal);
fc5f2e27 Poul Sander 2026-02-22 22:06 87
    mainSplitter->addWidget(leftPane);
032aa1e1 Poul Sander 2026-02-19 18:55 88
    mainSplitter->addWidget(rightSplitter);
032aa1e1 Poul Sander 2026-02-19 18:55 89
    mainSplitter->setStretchFactor(1, 1);
032aa1e1 Poul Sander 2026-02-19 18:55 90
61136b77 Poul Sander 2026-02-20 22:45 91
    m_browserPage = mainSplitter;
61136b77 Poul Sander 2026-02-20 22:45 92
61136b77 Poul Sander 2026-02-20 22:45 93
    // Single image view
61136b77 Poul Sander 2026-02-20 22:45 94
    m_imageView = new ImageViewWidget;
61136b77 Poul Sander 2026-02-20 22:45 95
61136b77 Poul Sander 2026-02-20 22:45 96
    // Stack to switch between browser and single image
61136b77 Poul Sander 2026-02-20 22:45 97
    m_stack = new QStackedWidget;
61136b77 Poul Sander 2026-02-20 22:45 98
    m_stack->addWidget(m_browserPage);
61136b77 Poul Sander 2026-02-20 22:45 99
    m_stack->addWidget(m_imageView);
61136b77 Poul Sander 2026-02-20 22:45 100
61136b77 Poul Sander 2026-02-20 22:45 101
    setCentralWidget(m_stack);
032aa1e1 Poul Sander 2026-02-19 18:55 102
}
032aa1e1 Poul Sander 2026-02-19 18:55 103
032aa1e1 Poul Sander 2026-02-19 18:55 104
void MainWindow::setupConnections()
032aa1e1 Poul Sander 2026-02-19 18:55 105
{
fc5f2e27 Poul Sander 2026-02-22 22:06 106
    connect(m_rootCombo, QOverload<int>::of(&QComboBox::currentIndexChanged), this,
fc5f2e27 Poul Sander 2026-02-22 22:06 107
            [this](int index) {
fc5f2e27 Poul Sander 2026-02-22 22:06 108
                QString rootPath = m_rootCombo->itemData(index).toString();
fc5f2e27 Poul Sander 2026-02-22 22:06 109
                m_dirModel->setRootPath(rootPath);
fc5f2e27 Poul Sander 2026-02-22 22:06 110
                m_treeView->setRootIndex(m_dirModel->index(rootPath));
fc5f2e27 Poul Sander 2026-02-22 22:06 111
            });
fc5f2e27 Poul Sander 2026-02-22 22:06 112
032aa1e1 Poul Sander 2026-02-19 18:55 113
    connect(m_treeView, &QTreeView::clicked, this,
032aa1e1 Poul Sander 2026-02-19 18:55 114
            [this](const QModelIndex &index)
6fcd6c90 Poul Sander 2026-02-19 21:12 115
            {
6fcd6c90 Poul Sander 2026-02-19 21:12 116
                QString path = m_dirModel->filePath(index);
6fcd6c90 Poul Sander 2026-02-19 21:12 117
                m_imageModel->setDirectory(path);
6fcd6c90 Poul Sander 2026-02-19 21:12 118
                // Defer thumbnail load so the view has time to lay out items
6fcd6c90 Poul Sander 2026-02-19 21:12 119
                QTimer::singleShot(0, this, &MainWindow::loadVisibleThumbnails);
6fcd6c90 Poul Sander 2026-02-19 21:12 120
            });
032aa1e1 Poul Sander 2026-02-19 18:55 121
032aa1e1 Poul Sander 2026-02-19 18:55 122
    connect(m_listView, &QListView::clicked, this,
cfe4a67b Poul Sander 2026-02-19 23:06 123
            [this](const QModelIndex &index) { showPreview(index); });
6fcd6c90 Poul Sander 2026-02-19 21:12 124
cfe4a67b Poul Sander 2026-02-19 23:06 125
    connect(m_listView->selectionModel(), &QItemSelectionModel::currentChanged,
cfe4a67b Poul Sander 2026-02-19 23:06 126
            this, [this](const QModelIndex &current) { showPreview(current); });
6fcd6c90 Poul Sander 2026-02-19 21:12 127
61136b77 Poul Sander 2026-02-20 22:45 128
    connect(m_listView, &QListView::doubleClicked, this,
09130ab9 Poul Sander 2026-02-22 22:19 129
            [this](const QModelIndex &index) {
09130ab9 Poul Sander 2026-02-22 22:19 130
                if (m_imageModel->isFolder(index)) {
09130ab9 Poul Sander 2026-02-22 22:19 131
                    QString path = m_imageModel->filePath(index);
09130ab9 Poul Sander 2026-02-22 22:19 132
                    m_imageModel->setDirectory(path);
09130ab9 Poul Sander 2026-02-22 22:19 133
                    // Update tree view selection to match
09130ab9 Poul Sander 2026-02-22 22:19 134
                    QModelIndex dirIdx = m_dirModel->index(path);
09130ab9 Poul Sander 2026-02-22 22:19 135
                    if (dirIdx.isValid())
09130ab9 Poul Sander 2026-02-22 22:19 136
                        m_treeView->setCurrentIndex(dirIdx);
09130ab9 Poul Sander 2026-02-22 22:19 137
                    QTimer::singleShot(0, this, &MainWindow::loadVisibleThumbnails);
09130ab9 Poul Sander 2026-02-22 22:19 138
                } else {
09130ab9 Poul Sander 2026-02-22 22:19 139
                    enterSingleImageMode(index);
09130ab9 Poul Sander 2026-02-22 22:19 140
                }
09130ab9 Poul Sander 2026-02-22 22:19 141
            });
61136b77 Poul Sander 2026-02-20 22:45 142
61136b77 Poul Sander 2026-02-20 22:45 143
    connect(m_imageView, &ImageViewWidget::closeRequested,
61136b77 Poul Sander 2026-02-20 22:45 144
            this, &MainWindow::leaveSingleImageMode);
61136b77 Poul Sander 2026-02-20 22:45 145
1ffc1962 Poul Sander 2026-02-20 23:41 146
    connect(m_imageView, &ImageViewWidget::nextRequested, this, [this]() {
1ffc1962 Poul Sander 2026-02-20 23:41 147
        QModelIndex cur = m_listView->currentIndex();
1ffc1962 Poul Sander 2026-02-20 23:41 148
        int next = cur.isValid() ? cur.row() + 1 : 0;
09130ab9 Poul Sander 2026-02-22 22:19 149
        while (next < m_imageModel->rowCount() && m_imageModel->isFolder(m_imageModel->index(next)))
09130ab9 Poul Sander 2026-02-22 22:19 150
            ++next;
1ffc1962 Poul Sander 2026-02-20 23:41 151
        if (next < m_imageModel->rowCount())
1ffc1962 Poul Sander 2026-02-20 23:41 152
        {
1ffc1962 Poul Sander 2026-02-20 23:41 153
            QModelIndex idx = m_imageModel->index(next);
1ffc1962 Poul Sander 2026-02-20 23:41 154
            m_listView->setCurrentIndex(idx);
1ffc1962 Poul Sander 2026-02-20 23:41 155
            enterSingleImageMode(idx);
1ffc1962 Poul Sander 2026-02-20 23:41 156
        }
1ffc1962 Poul Sander 2026-02-20 23:41 157
    });
1ffc1962 Poul Sander 2026-02-20 23:41 158
1ffc1962 Poul Sander 2026-02-20 23:41 159
    connect(m_imageView, &ImageViewWidget::previousRequested, this, [this]() {
1ffc1962 Poul Sander 2026-02-20 23:41 160
        QModelIndex cur = m_listView->currentIndex();
1ffc1962 Poul Sander 2026-02-20 23:41 161
        int prev = cur.isValid() ? cur.row() - 1 : 0;
09130ab9 Poul Sander 2026-02-22 22:19 162
        while (prev >= 0 && m_imageModel->isFolder(m_imageModel->index(prev)))
09130ab9 Poul Sander 2026-02-22 22:19 163
            --prev;
1ffc1962 Poul Sander 2026-02-20 23:41 164
        if (prev >= 0)
1ffc1962 Poul Sander 2026-02-20 23:41 165
        {
1ffc1962 Poul Sander 2026-02-20 23:41 166
            QModelIndex idx = m_imageModel->index(prev);
1ffc1962 Poul Sander 2026-02-20 23:41 167
            m_listView->setCurrentIndex(idx);
1ffc1962 Poul Sander 2026-02-20 23:41 168
            enterSingleImageMode(idx);
1ffc1962 Poul Sander 2026-02-20 23:41 169
        }
1ffc1962 Poul Sander 2026-02-20 23:41 170
    });
1ffc1962 Poul Sander 2026-02-20 23:41 171
6fcd6c90 Poul Sander 2026-02-19 21:12 172
    connect(m_listView->verticalScrollBar(), &QScrollBar::valueChanged,
6fcd6c90 Poul Sander 2026-02-19 21:12 173
            this, [this]()
6fcd6c90 Poul Sander 2026-02-19 21:12 174
            { loadVisibleThumbnails(); });
6fcd6c90 Poul Sander 2026-02-19 21:12 175
6fcd6c90 Poul Sander 2026-02-19 21:12 176
    // Also catch resize — visible range changes when the viewport is resized
6fcd6c90 Poul Sander 2026-02-19 21:12 177
    m_listView->viewport()->installEventFilter(this);
6fcd6c90 Poul Sander 2026-02-19 21:12 178
}
6fcd6c90 Poul Sander 2026-02-19 21:12 179
6fcd6c90 Poul Sander 2026-02-19 21:12 180
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
6fcd6c90 Poul Sander 2026-02-19 21:12 181
{
6fcd6c90 Poul Sander 2026-02-19 21:12 182
    if (obj == m_listView->viewport() && event->type() == QEvent::Resize)
6fcd6c90 Poul Sander 2026-02-19 21:12 183
        QTimer::singleShot(0, this, &MainWindow::loadVisibleThumbnails);
6fcd6c90 Poul Sander 2026-02-19 21:12 184
6fcd6c90 Poul Sander 2026-02-19 21:12 185
    return QMainWindow::eventFilter(obj, event);
6fcd6c90 Poul Sander 2026-02-19 21:12 186
}
6fcd6c90 Poul Sander 2026-02-19 21:12 187
6fcd6c90 Poul Sander 2026-02-19 21:12 188
void MainWindow::loadVisibleThumbnails()
6fcd6c90 Poul Sander 2026-02-19 21:12 189
{
6fcd6c90 Poul Sander 2026-02-19 21:12 190
    QModelIndex topLeft = m_listView->indexAt(QPoint(0, 0));
6fcd6c90 Poul Sander 2026-02-19 21:12 191
    QModelIndex bottomRight = m_listView->indexAt(
6fcd6c90 Poul Sander 2026-02-19 21:12 192
        QPoint(m_listView->viewport()->width() - 1,
6fcd6c90 Poul Sander 2026-02-19 21:12 193
               m_listView->viewport()->height() - 1));
6fcd6c90 Poul Sander 2026-02-19 21:12 194
6fcd6c90 Poul Sander 2026-02-19 21:12 195
    int first = topLeft.isValid() ? topLeft.row() : 0;
6fcd6c90 Poul Sander 2026-02-19 21:12 196
    int last = bottomRight.isValid() ? bottomRight.row()
6fcd6c90 Poul Sander 2026-02-19 21:12 197
                                     : m_imageModel->rowCount() - 1;
6fcd6c90 Poul Sander 2026-02-19 21:12 198
6fcd6c90 Poul Sander 2026-02-19 21:12 199
    if (last < 0)
6fcd6c90 Poul Sander 2026-02-19 21:12 200
        return;
6fcd6c90 Poul Sander 2026-02-19 21:12 201
6fcd6c90 Poul Sander 2026-02-19 21:12 202
    std::cout << "loadVisibleThumbnails: " << first << " - " << last << "\n";
6fcd6c90 Poul Sander 2026-02-19 21:12 203
    m_imageModel->requestThumbnails(first, last);
032aa1e1 Poul Sander 2026-02-19 18:55 204
}
cfe4a67b Poul Sander 2026-02-19 23:06 205
cfe4a67b Poul Sander 2026-02-19 23:06 206
void MainWindow::showPreview(const QModelIndex &index)
cfe4a67b Poul Sander 2026-02-19 23:06 207
{
cfe4a67b Poul Sander 2026-02-19 23:06 208
    if (!index.isValid())
cfe4a67b Poul Sander 2026-02-19 23:06 209
        return;
cfe4a67b Poul Sander 2026-02-19 23:06 210
cfe4a67b Poul Sander 2026-02-19 23:06 211
    QString path = m_imageModel->filePath(index);
cfe4a67b Poul Sander 2026-02-19 23:06 212
cfe4a67b Poul Sander 2026-02-19 23:06 213
    QImageReader reader(path);
cfe4a67b Poul Sander 2026-02-19 23:06 214
    reader.setAutoTransform(true);
cfe4a67b Poul Sander 2026-02-19 23:06 215
    QImage image = reader.read();
cfe4a67b Poul Sander 2026-02-19 23:06 216
cfe4a67b Poul Sander 2026-02-19 23:06 217
    m_previewLabel->setPixmap(
cfe4a67b Poul Sander 2026-02-19 23:06 218
        QPixmap::fromImage(image).scaled(
cfe4a67b Poul Sander 2026-02-19 23:06 219
            m_previewLabel->size(),
cfe4a67b Poul Sander 2026-02-19 23:06 220
            Qt::KeepAspectRatio,
cfe4a67b Poul Sander 2026-02-19 23:06 221
            Qt::SmoothTransformation));
cfe4a67b Poul Sander 2026-02-19 23:06 222
}
61136b77 Poul Sander 2026-02-20 22:45 223
61136b77 Poul Sander 2026-02-20 22:45 224
void MainWindow::enterSingleImageMode(const QModelIndex &index)
61136b77 Poul Sander 2026-02-20 22:45 225
{
61136b77 Poul Sander 2026-02-20 22:45 226
    if (!index.isValid())
61136b77 Poul Sander 2026-02-20 22:45 227
        return;
61136b77 Poul Sander 2026-02-20 22:45 228
3968465e Poul Sander 2026-02-23 19:13 229
    m_wasFullScreen = isFullScreen();
3968465e Poul Sander 2026-02-23 19:13 230
    m_wasMaximized = isMaximized();
3968465e Poul Sander 2026-02-23 19:13 231
61136b77 Poul Sander 2026-02-20 22:45 232
    QString path = m_imageModel->filePath(index);
61136b77 Poul Sander 2026-02-20 22:45 233
    m_imageView->setImage(path);
61136b77 Poul Sander 2026-02-20 22:45 234
    m_stack->setCurrentWidget(m_imageView);
61136b77 Poul Sander 2026-02-20 22:45 235
    m_imageView->setFocus();
61136b77 Poul Sander 2026-02-20 22:45 236
}
61136b77 Poul Sander 2026-02-20 22:45 237
61136b77 Poul Sander 2026-02-20 22:45 238
void MainWindow::leaveSingleImageMode()
61136b77 Poul Sander 2026-02-20 22:45 239
{
3968465e Poul Sander 2026-02-23 19:13 240
    if (isFullScreen()) {
3968465e Poul Sander 2026-02-23 19:13 241
        if (m_wasFullScreen) {
61136b77 Poul Sander 2026-02-20 22:45 242
            showFullScreen();
3968465e Poul Sander 2026-02-23 19:13 243
        }
3968465e Poul Sander 2026-02-23 19:13 244
        else if (m_wasMaximized) {
3968465e Poul Sander 2026-02-23 19:13 245
            showMaximized();
3968465e Poul Sander 2026-02-23 19:13 246
        }
3968465e Poul Sander 2026-02-23 19:13 247
        else {
61136b77 Poul Sander 2026-02-20 22:45 248
            showNormal();
3968465e Poul Sander 2026-02-23 19:13 249
        }
61136b77 Poul Sander 2026-02-20 22:45 250
    }
61136b77 Poul Sander 2026-02-20 22:45 251
    m_stack->setCurrentWidget(m_browserPage);
61136b77 Poul Sander 2026-02-20 22:45 252
    m_listView->setFocus();
61136b77 Poul Sander 2026-02-20 22:45 253
}
61136b77 Poul Sander 2026-02-20 22:45 254
61136b77 Poul Sander 2026-02-20 22:45 255
void MainWindow::keyPressEvent(QKeyEvent *event)
61136b77 Poul Sander 2026-02-20 22:45 256
{
61136b77 Poul Sander 2026-02-20 22:45 257
    if (event->key() == Qt::Key_F11 && m_stack->currentWidget() == m_imageView)
61136b77 Poul Sander 2026-02-20 22:45 258
    {
61136b77 Poul Sander 2026-02-20 22:45 259
        if (isFullScreen())
3968465e Poul Sander 2026-02-23 19:13 260
        {
3968465e Poul Sander 2026-02-23 19:13 261
            if (m_wasMaximized) {
3968465e Poul Sander 2026-02-23 19:13 262
                showMaximized();
3968465e Poul Sander 2026-02-23 19:13 263
            }
3968465e Poul Sander 2026-02-23 19:13 264
            else {
3968465e Poul Sander 2026-02-23 19:13 265
                showNormal();
3968465e Poul Sander 2026-02-23 19:13 266
            }
3968465e Poul Sander 2026-02-23 19:13 267
        }
3968465e Poul Sander 2026-02-23 19:13 268
        else {
61136b77 Poul Sander 2026-02-20 22:45 269
            showFullScreen();
3968465e Poul Sander 2026-02-23 19:13 270
        }
61136b77 Poul Sander 2026-02-20 22:45 271
        event->accept();
61136b77 Poul Sander 2026-02-20 22:45 272
        return;
61136b77 Poul Sander 2026-02-20 22:45 273
    }
61136b77 Poul Sander 2026-02-20 22:45 274
61136b77 Poul Sander 2026-02-20 22:45 275
    if (event->key() == Qt::Key_Return && m_stack->currentWidget() == m_browserPage)
61136b77 Poul Sander 2026-02-20 22:45 276
    {
61136b77 Poul Sander 2026-02-20 22:45 277
        QModelIndex current = m_listView->currentIndex();
61136b77 Poul Sander 2026-02-20 22:45 278
        if (current.isValid())
61136b77 Poul Sander 2026-02-20 22:45 279
        {
09130ab9 Poul Sander 2026-02-22 22:19 280
            if (m_imageModel->isFolder(current)) {
09130ab9 Poul Sander 2026-02-22 22:19 281
                QString path = m_imageModel->filePath(current);
09130ab9 Poul Sander 2026-02-22 22:19 282
                m_imageModel->setDirectory(path);
09130ab9 Poul Sander 2026-02-22 22:19 283
                QModelIndex dirIdx = m_dirModel->index(path);
09130ab9 Poul Sander 2026-02-22 22:19 284
                if (dirIdx.isValid())
09130ab9 Poul Sander 2026-02-22 22:19 285
                    m_treeView->setCurrentIndex(dirIdx);
09130ab9 Poul Sander 2026-02-22 22:19 286
                QTimer::singleShot(0, this, &MainWindow::loadVisibleThumbnails);
09130ab9 Poul Sander 2026-02-22 22:19 287
            } else {
09130ab9 Poul Sander 2026-02-22 22:19 288
                enterSingleImageMode(current);
09130ab9 Poul Sander 2026-02-22 22:19 289
            }
61136b77 Poul Sander 2026-02-20 22:45 290
            event->accept();
61136b77 Poul Sander 2026-02-20 22:45 291
            return;
61136b77 Poul Sander 2026-02-20 22:45 292
        }
61136b77 Poul Sander 2026-02-20 22:45 293
    }
61136b77 Poul Sander 2026-02-20 22:45 294
61136b77 Poul Sander 2026-02-20 22:45 295
    QMainWindow::keyPressEvent(event);
61136b77 Poul Sander 2026-02-20 22:45 296
}
c9e5684a Poul Sander 2026-02-23 19:18 297
c9e5684a Poul Sander 2026-02-23 19:18 298
void MainWindow::closeEvent(QCloseEvent *event)
c9e5684a Poul Sander 2026-02-23 19:18 299
{
c9e5684a Poul Sander 2026-02-23 19:18 300
    if (m_stack->currentWidget() == m_imageView)
c9e5684a Poul Sander 2026-02-23 19:18 301
    {
c9e5684a Poul Sander 2026-02-23 19:18 302
        leaveSingleImageMode();
c9e5684a Poul Sander 2026-02-23 19:18 303
        event->ignore();
c9e5684a Poul Sander 2026-02-23 19:18 304
        return;
c9e5684a Poul Sander 2026-02-23 19:18 305
    }
c9e5684a Poul Sander 2026-02-23 19:18 306
c9e5684a Poul Sander 2026-02-23 19:18 307
    QMainWindow::closeEvent(event);
c9e5684a Poul Sander 2026-02-23 19:18 308
}
1970-01-01 00:00 309