@@ -291,11 +291,13 @@ void DockContainerWidgetPrivate::saveChildNodesState(QDataStream& stream, QWidge
291291 if (Splitter)
292292 {
293293 stream << NodeSplitter << Splitter->orientation () << Splitter->count ();
294- std::cout << " NodeSplitter " << Splitter->orientation () << std::endl;
294+ std::cout << " NodeSplitter orient: " << Splitter->orientation ()
295+ << " WidgetCont: " << Splitter->count () << std::endl;
295296 for (int i = 0 ; i < Splitter->count (); ++i)
296297 {
297298 saveChildNodesState (stream, Splitter->widget (i));
298299 }
300+ stream << Splitter->sizes ();
299301 }
300302 else
301303 {
@@ -322,28 +324,34 @@ void DockContainerWidgetPrivate::restoreChildNodes(QDataStream& stream,
322324 stream >> Orientation >> WidgetCount;
323325 std::cout << " Restore NodeSplitter Orientation: " << Orientation <<
324326 " WidgetCount: " << WidgetCount << std::endl;
327+ QSplitter* Splitter = internal::newSplitter ((Qt::Orientation)Orientation);
328+ bool Visible = false ;
325329 for (int i = 0 ; i < WidgetCount; ++i)
326330 {
327- QWidget* Widget;
328- restoreChildNodes (stream, CreatedWidget);
331+ QWidget* ChildNode;
332+ restoreChildNodes (stream, ChildNode);
333+ if (ChildNode)
334+ {
335+ Splitter->addWidget (ChildNode);
336+ }
337+ std::cout << " ChildNode isVisible " << ChildNode->isVisible ()
338+ << " isVisibleTo " << ChildNode->isVisibleTo (Splitter) << std::endl;
339+ Visible |= ChildNode->isVisibleTo (Splitter);
329340 }
330341
331-
332-
333- /* std::cout << "Restore NodeSplitter " << Orientation << std::endl;
334- QSplitter* Splitter = internal::newSplitter((Qt::Orientation)Orientation);
335- if (ParentSplitter)
342+ QList<int > Sizes;
343+ stream >> Sizes;
344+ if (!Splitter->count ())
336345 {
337- ParentSplitter->addWidget(Splitter);
346+ delete Splitter;
347+ Splitter = nullptr ;
338348 }
339349 else
340350 {
341- Parent->layout()->addWidget(Splitter);
351+ Splitter->setSizes (Sizes);
352+ Splitter->setVisible (Visible);
342353 }
343- for (int i = 0; i < Count; ++i)
344- {
345- restoreChildNodes(stream, Splitter);
346- }*/
354+ CreatedWidget = Splitter;
347355 }
348356 else
349357 {
@@ -352,6 +360,8 @@ void DockContainerWidgetPrivate::restoreChildNodes(QDataStream& stream,
352360 stream >> Tabs >> CurrentIndex;
353361 std::cout << " Restore NodeDockArea Tabs: " << Tabs << " CurrentIndex: "
354362 << CurrentIndex << std::endl;
363+
364+ CDockAreaWidget* DockArea = new CDockAreaWidget (DockManager, _this);
355365 for (int i = 0 ; i < Tabs; ++i)
356366 {
357367 QString ObjectName;
@@ -369,11 +379,19 @@ void DockContainerWidgetPrivate::restoreChildNodes(QDataStream& stream,
369379 {
370380 std::cout << " Dock Widget found - parent " << DockWidget->parent ()
371381 << std::endl;
382+ DockArea->addDockWidget (DockWidget);
372383 }
384+ DockWidget->toggleView (!Closed);
385+ }
373386
374- CDockAreaWidget* DockArea = new CDockAreaWidget (DockManager, _this);
375- DockArea->addDockWidget (DockWidget);
387+ if (!DockArea->count ())
388+ {
389+ delete DockArea;
390+ DockArea = nullptr ;
376391 }
392+ CreatedWidget = DockArea;
393+ DockAreas.append (DockArea);
394+ DockArea->setCurrentIndex (CurrentIndex);
377395 }
378396}
379397
@@ -680,19 +698,16 @@ QList<CDockAreaWidget*> CDockContainerWidget::openedDockAreas() const
680698// ============================================================================
681699void CDockContainerWidget::saveState (QDataStream& stream) const
682700{
683- std::cout << " CDockContainerWidget::saveState" << std::endl;
701+ std::cout << " CDockContainerWidget::saveState isFloating "
702+ << isFloating () << std::endl;
684703 stream << isFloating ();
685704 if (isFloating ())
686705 {
687706 CFloatingDockContainer* FloatingWidget = internal::findParent<CFloatingDockContainer*>(this );
688707 stream << FloatingWidget->saveGeometry ();
689708 }
690709
691- QWidget* RootChild = d->Layout ->itemAt (0 )->widget ();
692- if (RootChild)
693- {
694- d->saveChildNodesState (stream, RootChild);
695- }
710+ d->saveChildNodesState (stream, d->RootSplitter );
696711}
697712
698713
@@ -702,25 +717,25 @@ bool CDockContainerWidget::restoreState(QDataStream& stream)
702717 bool IsFloating;
703718 stream >> IsFloating;
704719 std::cout << " Restore CDockContainerWidget Floating" << IsFloating << std::endl;
705- QWidget* RootChild = d->Layout ->itemAt (0 )->widget ();
706- if (RootChild)
707- {
708- d->DockAreas .clear ();
709- delete RootChild;
710- }
711- QWidget* Widget;
712- d->restoreChildNodes (stream, Widget);
713720
714- /* if (isFloating())
721+ QWidget* NewRootSplitter;
722+ d->DockAreas .clear ();
723+ if (isFloating ())
715724 {
716725 std::cout << " Restore floating widget" << std::endl;
717726 CFloatingDockContainer* FloatingWidget = internal::findParent<CFloatingDockContainer*>(this );
718727 QByteArray Geometry;
719728 stream >> Geometry;
720729 FloatingWidget->restoreGeometry (Geometry);
721730 FloatingWidget->show ();
722- }*/
731+ }
732+
733+ d->restoreChildNodes (stream, NewRootSplitter);
723734
735+ d->Layout ->replaceWidget (d->RootSplitter , NewRootSplitter);
736+ QSplitter* OldRoot = d->RootSplitter ;
737+ d->RootSplitter = dynamic_cast <QSplitter*>(NewRootSplitter);
738+ delete OldRoot;
724739 return true ;
725740}
726741
0 commit comments