LayoutSaver: Add an option to restore in relative sizes

and not touching the main window geometry.

The option is not exposed yet, there's a layouting bug to fix first.
This commit is contained in:
Sergio Martins
2020-02-20 23:30:35 +00:00
parent 435e61288e
commit ca211f2494
8 changed files with 252 additions and 17 deletions

View File

@@ -50,9 +50,11 @@ static MyWidget *newMyWidget()
}
MyMainWindow::MyMainWindow(const QString &uniqueName, KDDockWidgets::MainWindowOptions options,
bool dockWidget0IsNonClosable, const QString &affinityName, QWidget *parent)
bool dockWidget0IsNonClosable, bool restoreIsRelative,
const QString &affinityName, QWidget *parent)
: MainWindow(uniqueName, options, parent)
, m_dockWidget0IsNonClosable(dockWidget0IsNonClosable)
, m_restoreIsRelative(restoreIsRelative)
{
// qApp->installEventFilter(this);
@@ -85,7 +87,10 @@ MyMainWindow::MyMainWindow(const QString &uniqueName, KDDockWidgets::MainWindowO
});
auto restoreLayoutAction = fileMenu->addAction(QStringLiteral("Restore Layout"));
connect(restoreLayoutAction, &QAction::triggered, this, [] {
connect(restoreLayoutAction, &QAction::triggered, this, [this] {
KDDockWidgets::RestoreOptions options = KDDockWidgets::RestoreOption_None;
if (m_restoreIsRelative)
options |= KDDockWidgets::RestoreOption_RelativeToMainWindow;
KDDockWidgets::LayoutSaver saver;
saver.restoreFromFile(QStringLiteral("mylayout.json"));
});

View File

@@ -27,7 +27,7 @@ class MyMainWindow : public KDDockWidgets::MainWindow
Q_OBJECT
public:
explicit MyMainWindow(const QString &uniqueName, KDDockWidgets::MainWindowOptions options,
bool dockWidget0IsNonClosable,
bool dockWidget0IsNonClosable, bool restoreIsRelative,
const QString &affinityName = {}, // Usually not needed. Just here to show the feature.
QWidget *parent = nullptr);
@@ -36,4 +36,5 @@ private:
KDDockWidgets::DockWidgetBase* newDockWidget();
QMenu *m_toggleMenu = nullptr;
const bool m_dockWidget0IsNonClosable;
const bool m_restoreIsRelative;
};

View File

@@ -70,6 +70,9 @@ int main(int argc, char **argv)
QCommandLineOption nonClosableDockWidget("n", QCoreApplication::translate("main", "DockWidget #0 will be non-closable"));
parser.addOption(nonClosableDockWidget);
QCommandLineOption relativeRestore("s", QCoreApplication::translate("main", "Don't restore main window geometry, restore dock widgets in relative sizes"));
parser.addOption(relativeRestore);
#if defined(DOCKS_DEVELOPER_MODE)
QCommandLineOption noCentralFrame("c", QCoreApplication::translate("main", "No central frame"));
parser.addOption(noCentralFrame);
@@ -111,8 +114,9 @@ int main(int argc, char **argv)
KDDockWidgets::Config::self().setFlags(flags);
const bool nonClosableDockWidget0 = parser.isSet(nonClosableDockWidget);
const bool restoreIsRelative = parser.isSet(relativeRestore);
MyMainWindow mainWindow(QStringLiteral("MyMainWindow"), options, nonClosableDockWidget0);
MyMainWindow mainWindow(QStringLiteral("MyMainWindow"), options, nonClosableDockWidget0, restoreIsRelative);
mainWindow.setWindowTitle("Main Window 1");
mainWindow.resize(1200, 1200);
mainWindow.show();
@@ -124,7 +128,7 @@ int main(int argc, char **argv)
: QString();
auto mainWindow2 = new MyMainWindow(QStringLiteral("MyMainWindow-2"), options,
nonClosableDockWidget0, affinity);
nonClosableDockWidget0, restoreIsRelative, affinity);
if (affinity.isEmpty())
mainWindow2->setWindowTitle("Main Window 2");
else