git repos / SagoImageBrowser

commit 4ae57f60

Poul Sander · 2026-02-25 21:35
4ae57f605f6f277051ad1fd5b4e3c064dbec0576 patch · browse files
parent cbc7d22be685ffff427fb0ec02667933f955bd22

Allow freezing the ui

Changed files

M src/mainwindow.cpp before
M src/mainwindow.h before
M src/preferencesdialog.cpp before
M src/preferencesdialog.h before
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 20e578a..fd2b7a6 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp
@@ -369,11 +369,26 @@ void MainWindow::closeEvent(QCloseEvent *event)
QMainWindow::closeEvent(event);
}
+void MainWindow::applyDockLocking(bool lock)
+{
+ const QDockWidget::DockWidgetFeatures movableFeatures =
+ QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable;
+ const QDockWidget::DockWidgetFeatures baseFeatures =
+ QDockWidget::DockWidgetClosable;
+
+ QDockWidget::DockWidgetFeatures features = lock ? baseFeatures
+ : (baseFeatures | movableFeatures);
+ m_folderDock->setFeatures(features);
+ m_previewDock->setFeatures(features);
+}
+
void MainWindow::loadPreferences()
{
QSettings settings("SagoImageBrowser", "SagoImageBrowser");
m_backgroundColorPreference = settings.value("backgroundColor", "black").toString();
m_imageView->setBackgroundColor(m_backgroundColorPreference);
+ m_lockDockingPreference = settings.value("lockDocking", false).toBool();
+ applyDockLocking(m_lockDockingPreference);
if (settings.contains("windowGeometry"))
restoreGeometry(settings.value("windowGeometry").toByteArray());
if (settings.contains("windowState"))
@@ -384,6 +399,7 @@ void MainWindow::savePreferences()
{
QSettings settings("SagoImageBrowser", "SagoImageBrowser");
settings.setValue("backgroundColor", m_backgroundColorPreference);
+ settings.setValue("lockDocking", m_lockDockingPreference);
settings.setValue("windowGeometry", saveGeometry());
settings.setValue("windowState", saveState());
}
@@ -392,11 +408,14 @@ void MainWindow::onPreferencesTriggered()
{
PreferencesDialog dialog(this);
dialog.setBackgroundColor(m_backgroundColorPreference);
+ dialog.setLockDocking(m_lockDockingPreference);
if (dialog.exec() == QDialog::Accepted)
{
m_backgroundColorPreference = dialog.getBackgroundColor();
m_imageView->setBackgroundColor(m_backgroundColorPreference);
+ m_lockDockingPreference = dialog.getLockDocking();
+ applyDockLocking(m_lockDockingPreference);
savePreferences();
}
}
diff --git a/src/mainwindow.h b/src/mainwindow.h index e910759..8d35d3b 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h
@@ -60,4 +60,7 @@ private:
QDockWidget *m_previewDock = nullptr;
bool m_folderDockWasVisible = true;
bool m_previewDockWasVisible = true;
+ bool m_lockDockingPreference = false;
+
+ void applyDockLocking(bool lock);
};
\ No newline at end of file
diff --git a/src/preferencesdialog.cpp b/src/preferencesdialog.cpp index a14f4c2..443ede9 100644 --- a/src/preferencesdialog.cpp +++ b/src/preferencesdialog.cpp
@@ -4,6 +4,7 @@
#include <QHBoxLayout>
#include <QLabel>
#include <QComboBox>
+#include <QCheckBox>
#include <QPushButton>
#include <QGroupBox>
@@ -33,6 +34,12 @@ PreferencesDialog::PreferencesDialog(QWidget *parent)
groupLayout->addLayout(bgColorLayout);
mainLayout->addWidget(imageGroup);
+ QGroupBox *layoutGroup = new QGroupBox("Layout", this);
+ QVBoxLayout *layoutGroupLayout = new QVBoxLayout(layoutGroup);
+ m_lockDockingCheck = new QCheckBox("Lock docking (prevent accidental moves)");
+ layoutGroupLayout->addWidget(m_lockDockingCheck);
+ mainLayout->addWidget(layoutGroup);
+
mainLayout->addStretch();
QHBoxLayout *buttonLayout = new QHBoxLayout;
@@ -60,3 +67,13 @@ void PreferencesDialog::setBackgroundColor(const QString &color)
if (index >= 0)
m_backgroundColorCombo->setCurrentIndex(index);
}
+
+bool PreferencesDialog::getLockDocking() const
+{
+ return m_lockDockingCheck->isChecked();
+}
+
+void PreferencesDialog::setLockDocking(bool lock)
+{
+ m_lockDockingCheck->setChecked(lock);
+}
diff --git a/src/preferencesdialog.h b/src/preferencesdialog.h index 4c3910d..c6bda81 100644 --- a/src/preferencesdialog.h +++ b/src/preferencesdialog.h
@@ -3,6 +3,7 @@
#include <QDialog>
class QComboBox;
+class QCheckBox;
class PreferencesDialog : public QDialog
{
@@ -14,6 +15,10 @@ public:
QString getBackgroundColor() const;
void setBackgroundColor(const QString &color);
+ bool getLockDocking() const;
+ void setLockDocking(bool lock);
+
private:
QComboBox *m_backgroundColorCombo;
+ QCheckBox *m_lockDockingCheck;
};