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 #include #include +#include #include #include @@ -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 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; };