git repos / SagoImageBrowser

blame: 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"
032aa1e1 Poul Sander 2026-02-19 18:55 3
032aa1e1 Poul Sander 2026-02-19 18:55 4
#include <QFileSystemModel>
032aa1e1 Poul Sander 2026-02-19 18:55 5
#include <QTreeView>
032aa1e1 Poul Sander 2026-02-19 18:55 6
#include <QListView>
032aa1e1 Poul Sander 2026-02-19 18:55 7
#include <QLabel>
032aa1e1 Poul Sander 2026-02-19 18:55 8
#include <QSplitter>
032aa1e1 Poul Sander 2026-02-19 18:55 9
#include <QDir>
032aa1e1 Poul Sander 2026-02-19 18:55 10
#include <QImageReader>
032aa1e1 Poul Sander 2026-02-19 18:55 11
#include <QHeaderView>
032aa1e1 Poul Sander 2026-02-19 18:55 12
032aa1e1 Poul Sander 2026-02-19 18:55 13
MainWindow::MainWindow(QWidget *parent)
032aa1e1 Poul Sander 2026-02-19 18:55 14
    : QMainWindow(parent)
032aa1e1 Poul Sander 2026-02-19 18:55 15
{
032aa1e1 Poul Sander 2026-02-19 18:55 16
    setupUi();
032aa1e1 Poul Sander 2026-02-19 18:55 17
    setupConnections();
032aa1e1 Poul Sander 2026-02-19 18:55 18
}
032aa1e1 Poul Sander 2026-02-19 18:55 19
032aa1e1 Poul Sander 2026-02-19 18:55 20
void MainWindow::setupUi()
032aa1e1 Poul Sander 2026-02-19 18:55 21
{
032aa1e1 Poul Sander 2026-02-19 18:55 22
    // Folder model (left pane)
032aa1e1 Poul Sander 2026-02-19 18:55 23
    m_dirModel = new QFileSystemModel(this);
032aa1e1 Poul Sander 2026-02-19 18:55 24
    m_dirModel->setFilter(QDir::AllDirs | QDir::NoDotAndDotDot);
032aa1e1 Poul Sander 2026-02-19 18:55 25
    m_dirModel->setRootPath(QDir::homePath());
032aa1e1 Poul Sander 2026-02-19 18:55 26
032aa1e1 Poul Sander 2026-02-19 18:55 27
    m_treeView = new QTreeView;
032aa1e1 Poul Sander 2026-02-19 18:55 28
    m_treeView->setModel(m_dirModel);
032aa1e1 Poul Sander 2026-02-19 18:55 29
    m_treeView->setRootIndex(m_dirModel->index(QDir::homePath()));
032aa1e1 Poul Sander 2026-02-19 18:55 30
    m_treeView->header()->hide();
032aa1e1 Poul Sander 2026-02-19 18:55 31
    m_treeView->setColumnHidden(1, true);
032aa1e1 Poul Sander 2026-02-19 18:55 32
    m_treeView->setColumnHidden(2, true);
032aa1e1 Poul Sander 2026-02-19 18:55 33
    m_treeView->setColumnHidden(3, true);
032aa1e1 Poul Sander 2026-02-19 18:55 34
032aa1e1 Poul Sander 2026-02-19 18:55 35
    // Thumbnail model (center pane)
032aa1e1 Poul Sander 2026-02-19 18:55 36
    m_imageModel = new ImageModel(this);
032aa1e1 Poul Sander 2026-02-19 18:55 37
032aa1e1 Poul Sander 2026-02-19 18:55 38
    m_listView = new QListView;
032aa1e1 Poul Sander 2026-02-19 18:55 39
    m_listView->setModel(m_imageModel);
032aa1e1 Poul Sander 2026-02-19 18:55 40
    m_listView->setViewMode(QListView::IconMode);
032aa1e1 Poul Sander 2026-02-19 18:55 41
    m_listView->setIconSize(QSize(128, 128));
032aa1e1 Poul Sander 2026-02-19 18:55 42
    m_listView->setResizeMode(QListView::Adjust);
032aa1e1 Poul Sander 2026-02-19 18:55 43
    m_listView->setSelectionMode(QAbstractItemView::SingleSelection);
032aa1e1 Poul Sander 2026-02-19 18:55 44
    m_listView->setSpacing(10);
032aa1e1 Poul Sander 2026-02-19 18:55 45
032aa1e1 Poul Sander 2026-02-19 18:55 46
    // Preview pane (right)
032aa1e1 Poul Sander 2026-02-19 18:55 47
    m_previewLabel = new QLabel;
032aa1e1 Poul Sander 2026-02-19 18:55 48
    m_previewLabel->setAlignment(Qt::AlignCenter);
032aa1e1 Poul Sander 2026-02-19 18:55 49
    m_previewLabel->setMinimumWidth(300);
032aa1e1 Poul Sander 2026-02-19 18:55 50
032aa1e1 Poul Sander 2026-02-19 18:55 51
    // Layout
032aa1e1 Poul Sander 2026-02-19 18:55 52
    QSplitter *rightSplitter = new QSplitter(Qt::Horizontal);
032aa1e1 Poul Sander 2026-02-19 18:55 53
    rightSplitter->addWidget(m_listView);
032aa1e1 Poul Sander 2026-02-19 18:55 54
    rightSplitter->addWidget(m_previewLabel);
032aa1e1 Poul Sander 2026-02-19 18:55 55
    rightSplitter->setStretchFactor(0, 3);
032aa1e1 Poul Sander 2026-02-19 18:55 56
    rightSplitter->setStretchFactor(1, 2);
032aa1e1 Poul Sander 2026-02-19 18:55 57
032aa1e1 Poul Sander 2026-02-19 18:55 58
    QSplitter *mainSplitter = new QSplitter(Qt::Horizontal);
032aa1e1 Poul Sander 2026-02-19 18:55 59
    mainSplitter->addWidget(m_treeView);
032aa1e1 Poul Sander 2026-02-19 18:55 60
    mainSplitter->addWidget(rightSplitter);
032aa1e1 Poul Sander 2026-02-19 18:55 61
    mainSplitter->setStretchFactor(1, 1);
032aa1e1 Poul Sander 2026-02-19 18:55 62
032aa1e1 Poul Sander 2026-02-19 18:55 63
    setCentralWidget(mainSplitter);
032aa1e1 Poul Sander 2026-02-19 18:55 64
}
032aa1e1 Poul Sander 2026-02-19 18:55 65
032aa1e1 Poul Sander 2026-02-19 18:55 66
void MainWindow::setupConnections()
032aa1e1 Poul Sander 2026-02-19 18:55 67
{
032aa1e1 Poul Sander 2026-02-19 18:55 68
    connect(m_treeView, &QTreeView::clicked, this,
032aa1e1 Poul Sander 2026-02-19 18:55 69
            [this](const QModelIndex &index)
032aa1e1 Poul Sander 2026-02-19 18:55 70
    {
032aa1e1 Poul Sander 2026-02-19 18:55 71
        QString path = m_dirModel->filePath(index);
032aa1e1 Poul Sander 2026-02-19 18:55 72
        m_imageModel->setDirectory(path);
032aa1e1 Poul Sander 2026-02-19 18:55 73
    });
032aa1e1 Poul Sander 2026-02-19 18:55 74
032aa1e1 Poul Sander 2026-02-19 18:55 75
    connect(m_listView, &QListView::clicked, this,
032aa1e1 Poul Sander 2026-02-19 18:55 76
            [this](const QModelIndex &index)
032aa1e1 Poul Sander 2026-02-19 18:55 77
    {
032aa1e1 Poul Sander 2026-02-19 18:55 78
        QString path = m_imageModel->filePath(index);
032aa1e1 Poul Sander 2026-02-19 18:55 79
032aa1e1 Poul Sander 2026-02-19 18:55 80
        QImageReader reader(path);
032aa1e1 Poul Sander 2026-02-19 18:55 81
        reader.setAutoTransform(true);
032aa1e1 Poul Sander 2026-02-19 18:55 82
        QImage image = reader.read();
032aa1e1 Poul Sander 2026-02-19 18:55 83
032aa1e1 Poul Sander 2026-02-19 18:55 84
        m_previewLabel->setPixmap(
032aa1e1 Poul Sander 2026-02-19 18:55 85
            QPixmap::fromImage(image).scaled(
032aa1e1 Poul Sander 2026-02-19 18:55 86
                m_previewLabel->size(),
032aa1e1 Poul Sander 2026-02-19 18:55 87
                Qt::KeepAspectRatio,
032aa1e1 Poul Sander 2026-02-19 18:55 88
                Qt::SmoothTransformation));
032aa1e1 Poul Sander 2026-02-19 18:55 89
    });
032aa1e1 Poul Sander 2026-02-19 18:55 90
}
1970-01-01 00:00 91