diff --git a/CMakeLists.txt b/CMakeLists.txt index 608d7a2..eed9c1b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,7 @@ qt_add_executable(SagoImageBrowser src/thumbnailworker.cpp src/thumbnailworker.h src/imageviewwidget.cpp - src/imageviewwidget.h -) + src/imageviewwidget.h src/preferencesdialog.cpp + src/preferencesdialog.h) target_link_libraries(SagoImageBrowser PRIVATE Qt6::Widgets) \ No newline at end of file diff --git a/src/imageviewwidget.cpp b/src/imageviewwidget.cpp index f09ed6a..f11b721 100644 --- a/src/imageviewwidget.cpp +++ b/src/imageviewwidget.cpp @@ -4,13 +4,15 @@ #include #include #include +#include #include ImageViewWidget::ImageViewWidget(QWidget *parent) : QWidget(parent) { setFocusPolicy(Qt::StrongFocus); - setStyleSheet("background-color: black;"); + setAutoFillBackground(true); + setBackgroundColor("black"); } void ImageViewWidget::setImage(const QString &path) @@ -30,6 +32,15 @@ void ImageViewWidget::setImage(const QString &path) update(); } +void ImageViewWidget::setBackgroundColor(const QString &color) +{ + m_backgroundColor = color; + QPalette pal = palette(); + pal.setColor(QPalette::Window, QColor(color)); + setPalette(pal); + update(); +} + void ImageViewWidget::paintEvent(QPaintEvent *) { if (m_pixmap.isNull()) diff --git a/src/imageviewwidget.h b/src/imageviewwidget.h index bc0da7b..518591e 100644 --- a/src/imageviewwidget.h +++ b/src/imageviewwidget.h @@ -16,6 +16,7 @@ public: explicit ImageViewWidget(QWidget *parent = nullptr); void setImage(const QString &path); + void setBackgroundColor(const QString &color); void zoomIn(); void zoomOut(); void zoomOriginal(); @@ -39,6 +40,7 @@ private: QPixmap m_pixmap; ZoomMode m_zoomMode = FitToScreen; double m_zoomFactor = 1.0; + QString m_backgroundColor = "black"; // Panning state QPoint m_offset; // current pan offset (pixels) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 5b4ddce..2c57a0c 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1,6 +1,7 @@ #include "mainwindow.h" #include "imagemodel.h" #include "imageviewwidget.h" +#include "preferencesdialog.h" #include #include @@ -20,13 +21,19 @@ #include #include #include +#include +#include +#include +#include #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { setupUi(); + setupMenuBar(); setupConnections(); + loadPreferences(); } void MainWindow::setupUi() @@ -101,6 +108,13 @@ void MainWindow::setupUi() setCentralWidget(m_stack); } +void MainWindow::setupMenuBar() +{ + QMenu *editMenu = menuBar()->addMenu("&Edit"); + QAction *preferencesAction = editMenu->addAction("&Preferences"); + connect(preferencesAction, &QAction::triggered, this, &MainWindow::onPreferencesTriggered); +} + void MainWindow::setupConnections() { connect(m_rootCombo, QOverload::of(&QComboBox::currentIndexChanged), this, @@ -229,6 +243,7 @@ void MainWindow::enterSingleImageMode(const QModelIndex &index) m_wasFullScreen = isFullScreen(); m_wasMaximized = isMaximized(); + m_imageView->setBackgroundColor(m_backgroundColorPreference); QString path = m_imageModel->filePath(index); m_imageView->setImage(path); m_stack->setCurrentWidget(m_imageView); @@ -304,5 +319,32 @@ void MainWindow::closeEvent(QCloseEvent *event) return; } + savePreferences(); QMainWindow::closeEvent(event); } + +void MainWindow::loadPreferences() +{ + QSettings settings("SagoImageBrowser", "SagoImageBrowser"); + m_backgroundColorPreference = settings.value("backgroundColor", "black").toString(); + m_imageView->setBackgroundColor(m_backgroundColorPreference); +} + +void MainWindow::savePreferences() +{ + QSettings settings("SagoImageBrowser", "SagoImageBrowser"); + settings.setValue("backgroundColor", m_backgroundColorPreference); +} + +void MainWindow::onPreferencesTriggered() +{ + PreferencesDialog dialog(this); + dialog.setBackgroundColor(m_backgroundColorPreference); + + if (dialog.exec() == QDialog::Accepted) + { + m_backgroundColorPreference = dialog.getBackgroundColor(); + m_imageView->setBackgroundColor(m_backgroundColorPreference); + savePreferences(); + } +} diff --git a/src/mainwindow.h b/src/mainwindow.h index f30382c..6ae5c8a 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -10,6 +10,7 @@ class QFileSystemModel; class QComboBox; class ImageModel; class ImageViewWidget; +class PreferencesDialog; class MainWindow : public QMainWindow { @@ -21,6 +22,10 @@ public: private: void setupUi(); void setupConnections(); + void setupMenuBar(); + void loadPreferences(); + void savePreferences(); + void onPreferencesTriggered(); void loadVisibleThumbnails(); void showPreview(const QModelIndex &index); void enterSingleImageMode(const QModelIndex &index); @@ -39,6 +44,7 @@ private: QLabel *m_previewLabel; QStackedWidget *m_stack; + QString m_backgroundColorPreference = "black"; QWidget *m_browserPage; ImageViewWidget *m_imageView; bool m_wasFullScreen = false;