@@ -291,11 +291,13 @@ void DockContainerWidgetPrivate::saveChildNodesState(QDataStream& stream, QWidge
291
291
if (Splitter)
292
292
{
293
293
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;
295
296
for (int i = 0 ; i < Splitter->count (); ++i)
296
297
{
297
298
saveChildNodesState (stream, Splitter->widget (i));
298
299
}
300
+ stream << Splitter->sizes ();
299
301
}
300
302
else
301
303
{
@@ -322,28 +324,34 @@ void DockContainerWidgetPrivate::restoreChildNodes(QDataStream& stream,
322
324
stream >> Orientation >> WidgetCount;
323
325
std::cout << " Restore NodeSplitter Orientation: " << Orientation <<
324
326
" WidgetCount: " << WidgetCount << std::endl;
327
+ QSplitter* Splitter = internal::newSplitter ((Qt::Orientation)Orientation);
328
+ bool Visible = false ;
325
329
for (int i = 0 ; i < WidgetCount; ++i)
326
330
{
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);
329
340
}
330
341
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 ())
336
345
{
337
- ParentSplitter->addWidget(Splitter);
346
+ delete Splitter;
347
+ Splitter = nullptr ;
338
348
}
339
349
else
340
350
{
341
- Parent->layout()->addWidget(Splitter);
351
+ Splitter->setSizes (Sizes);
352
+ Splitter->setVisible (Visible);
342
353
}
343
- for (int i = 0; i < Count; ++i)
344
- {
345
- restoreChildNodes(stream, Splitter);
346
- }*/
354
+ CreatedWidget = Splitter;
347
355
}
348
356
else
349
357
{
@@ -352,6 +360,8 @@ void DockContainerWidgetPrivate::restoreChildNodes(QDataStream& stream,
352
360
stream >> Tabs >> CurrentIndex;
353
361
std::cout << " Restore NodeDockArea Tabs: " << Tabs << " CurrentIndex: "
354
362
<< CurrentIndex << std::endl;
363
+
364
+ CDockAreaWidget* DockArea = new CDockAreaWidget (DockManager, _this);
355
365
for (int i = 0 ; i < Tabs; ++i)
356
366
{
357
367
QString ObjectName;
@@ -369,11 +379,19 @@ void DockContainerWidgetPrivate::restoreChildNodes(QDataStream& stream,
369
379
{
370
380
std::cout << " Dock Widget found - parent " << DockWidget->parent ()
371
381
<< std::endl;
382
+ DockArea->addDockWidget (DockWidget);
372
383
}
384
+ DockWidget->toggleView (!Closed);
385
+ }
373
386
374
- CDockAreaWidget* DockArea = new CDockAreaWidget (DockManager, _this);
375
- DockArea->addDockWidget (DockWidget);
387
+ if (!DockArea->count ())
388
+ {
389
+ delete DockArea;
390
+ DockArea = nullptr ;
376
391
}
392
+ CreatedWidget = DockArea;
393
+ DockAreas.append (DockArea);
394
+ DockArea->setCurrentIndex (CurrentIndex);
377
395
}
378
396
}
379
397
@@ -680,19 +698,16 @@ QList<CDockAreaWidget*> CDockContainerWidget::openedDockAreas() const
680
698
// ============================================================================
681
699
void CDockContainerWidget::saveState (QDataStream& stream) const
682
700
{
683
- std::cout << " CDockContainerWidget::saveState" << std::endl;
701
+ std::cout << " CDockContainerWidget::saveState isFloating "
702
+ << isFloating () << std::endl;
684
703
stream << isFloating ();
685
704
if (isFloating ())
686
705
{
687
706
CFloatingDockContainer* FloatingWidget = internal::findParent<CFloatingDockContainer*>(this );
688
707
stream << FloatingWidget->saveGeometry ();
689
708
}
690
709
691
- QWidget* RootChild = d->Layout ->itemAt (0 )->widget ();
692
- if (RootChild)
693
- {
694
- d->saveChildNodesState (stream, RootChild);
695
- }
710
+ d->saveChildNodesState (stream, d->RootSplitter );
696
711
}
697
712
698
713
@@ -702,25 +717,25 @@ bool CDockContainerWidget::restoreState(QDataStream& stream)
702
717
bool IsFloating;
703
718
stream >> IsFloating;
704
719
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);
713
720
714
- /* if (isFloating())
721
+ QWidget* NewRootSplitter;
722
+ d->DockAreas .clear ();
723
+ if (isFloating ())
715
724
{
716
725
std::cout << " Restore floating widget" << std::endl;
717
726
CFloatingDockContainer* FloatingWidget = internal::findParent<CFloatingDockContainer*>(this );
718
727
QByteArray Geometry;
719
728
stream >> Geometry;
720
729
FloatingWidget->restoreGeometry (Geometry);
721
730
FloatingWidget->show ();
722
- }*/
731
+ }
732
+
733
+ d->restoreChildNodes (stream, NewRootSplitter);
723
734
735
+ d->Layout ->replaceWidget (d->RootSplitter , NewRootSplitter);
736
+ QSplitter* OldRoot = d->RootSplitter ;
737
+ d->RootSplitter = dynamic_cast <QSplitter*>(NewRootSplitter);
738
+ delete OldRoot;
724
739
return true ;
725
740
}
726
741
0 commit comments