From 65faca6fae7366a150c6f308c8d1acbba41c0560 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaakko=20Ker=C3=A4nen?= Date: Sun, 13 Apr 2014 15:36:40 +0300 Subject: [PATCH] libappfw|GuiWidget: Manually saving/restoring widget tree state Sometimes it is beneficial to save/restore state at other times in addition to widget de/initialization. --- .../libappfw/include/de/framework/guiwidget.h | 12 ++++++ doomsday/libappfw/src/guiwidget.cpp | 38 +++++++++++++++++-- 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/doomsday/libappfw/include/de/framework/guiwidget.h b/doomsday/libappfw/include/de/framework/guiwidget.h index 23ed08c162..2d784fea7a 100644 --- a/doomsday/libappfw/include/de/framework/guiwidget.h +++ b/doomsday/libappfw/include/de/framework/guiwidget.h @@ -261,6 +261,18 @@ class LIBAPPFW_PUBLIC GuiWidget : public QObject, public Widget */ void enableStateSerialization(bool enabled = true); + /** + * Save the state of the widget and all its children (those who support state + * serialization). + */ + void saveState(); + + /** + * Restore the state of the widget and all its children (those who support state + * serialization). + */ + void restoreState(); + // Events. void initialize(); void deinitialize(); diff --git a/doomsday/libappfw/src/guiwidget.cpp b/doomsday/libappfw/src/guiwidget.cpp index 3c67ed9cc0..7857ff6287 100644 --- a/doomsday/libappfw/src/guiwidget.cpp +++ b/doomsday/libappfw/src/guiwidget.cpp @@ -321,7 +321,6 @@ DENG2_PIMPL(GuiWidget) void restoreState() { - if(!stateSerializationEnabled) return; try { if(IPersistent *po = self.maybeAs()) @@ -339,7 +338,6 @@ DENG2_PIMPL(GuiWidget) void saveState() { - if(!stateSerializationEnabled) return; try { if(IPersistent *po = self.maybeAs()) @@ -548,6 +546,32 @@ void GuiWidget::enableStateSerialization(bool enabled) d->stateSerializationEnabled = enabled; } +void GuiWidget::saveState() +{ + d->saveState(); + + foreach(Widget *child, childWidgets()) + { + if(GuiWidget *widget = child->maybeAs()) + { + widget->saveState(); + } + } +} + +void GuiWidget::restoreState() +{ + d->restoreState(); + + foreach(Widget *child, childWidgets()) + { + if(GuiWidget *widget = child->maybeAs()) + { + widget->restoreState(); + } + } +} + void GuiWidget::initialize() { if(d->inited) return; @@ -557,7 +581,10 @@ void GuiWidget::initialize() d->inited = true; glInit(); - d->restoreState(); + if(d->stateSerializationEnabled) + { + d->restoreState(); + } } catch(Error const &er) { @@ -572,7 +599,10 @@ void GuiWidget::deinitialize() try { - d->saveState(); + if(d->stateSerializationEnabled) + { + d->saveState(); + } d->inited = false; d->deinitBlur();