git repos / SagoImageBrowser

commit f61bf886

Poul Sander · 2026-02-23 19:27
f61bf886c3aa420409d91eace73fef87a54eb910 patch · browse files
parent c9e5684aabaedc6ae10c8eaa04cc8c4382845238

Add option to switch background colorr

Changed files

M CMakeLists.txt before
M src/imageviewwidget.cpp before
M src/imageviewwidget.h before
M src/mainwindow.cpp before
M src/mainwindow.h before
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 <QKeyEvent>
#include <QMouseEvent>
#include <QImageReader>
+#include <QPalette>
#include <algorithm>
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 <QFileSystemModel>
#include <QTreeView>
@@ -20,13 +21,19 @@
#include <QKeyEvent>
#include <QCloseEvent>
#include <QItemSelectionModel>
+#include <QMenuBar>
+#include <QMenu>
+#include <QAction>
+#include <QSettings>
#include <iostream>
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<int>::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;