3333#include < QEvent>
3434#include < QList>
3535#include < QGridLayout>
36- #include < QSplitter>
3736#include < QPointer>
3837
3938#include " DockManager.h"
4342#include " DockOverlay.h"
4443#include " DockStateSerialization.h"
4544#include " ads_globals.h"
45+ #include " DockSplitter.h"
4646
4747#include < iostream>
4848
@@ -75,6 +75,7 @@ struct DockContainerWidgetPrivate
7575 unsigned int zOrderIndex = 0 ;
7676 QList<CDockAreaWidget*> DockAreas;
7777 QGridLayout* Layout = nullptr ;
78+ CDockSplitter* RootSplitter;
7879 bool isFloating = false ;
7980
8081 /* *
@@ -123,7 +124,7 @@ struct DockContainerWidgetPrivate
123124 /* *
124125 * Restore state of child nodes
125126 */
126- void restoreChildNodes (QDataStream& Stream, QWidget* Parent );
127+ void restoreChildNodes (QDataStream& Stream, QWidget*& CreatedWidget );
127128}; // struct DockContainerWidgetPrivate
128129
129130
@@ -310,28 +311,38 @@ void DockContainerWidgetPrivate::saveChildNodesState(QDataStream& stream, QWidge
310311 }
311312 else
312313 {
314+ stream << NodeDockArea;
313315 CDockAreaWidget* DockArea = dynamic_cast <CDockAreaWidget*>(Widget);
314316 if (DockArea)
315317 {
316- std::cout << " NodeDockArea " << std::endl;
317318 DockArea->saveState (stream);
318319 }
319320 }
320321}
321322
322323
323324// ============================================================================
324- void DockContainerWidgetPrivate::restoreChildNodes (QDataStream& stream, QWidget* Parent)
325+ void DockContainerWidgetPrivate::restoreChildNodes (QDataStream& stream,
326+ QWidget*& CreatedWidget)
325327{
326328 int NodeType;
327329 stream >> NodeType;
328- QSplitter* ParentSplitter = dynamic_cast <QSplitter*>(Parent);
329330 if (NodeSplitter == NodeType)
330331 {
331332 int Orientation;
332- int Count;
333- stream >> Orientation >> Count;
334- std::cout << " Restore NodeSplitter " << Orientation << std::endl;
333+ int WidgetCount;
334+ stream >> Orientation >> WidgetCount;
335+ std::cout << " Restore NodeSplitter Orientation: " << Orientation <<
336+ " WidgetCount: " << WidgetCount << std::endl;
337+ for (int i = 0 ; i < WidgetCount; ++i)
338+ {
339+ QWidget* Widget;
340+ restoreChildNodes (stream, CreatedWidget);
341+ }
342+
343+
344+
345+ /* std::cout << "Restore NodeSplitter " << Orientation << std::endl;
335346 QSplitter* Splitter = internal::newSplitter((Qt::Orientation)Orientation);
336347 if (ParentSplitter)
337348 {
@@ -344,21 +355,37 @@ void DockContainerWidgetPrivate::restoreChildNodes(QDataStream& stream, QWidget*
344355 for (int i = 0; i < Count; ++i)
345356 {
346357 restoreChildNodes(stream, Splitter);
347- }
358+ }*/
348359 }
349360 else
350361 {
351- std::cout << " Restore NodeDockArea " << std::endl;
352- CDockAreaWidget* DockArea = new CDockAreaWidget (DockManager, _this);
353- if (ParentSplitter)
354- {
355- ParentSplitter->addWidget (DockArea);
356- }
357- else
362+ int Tabs;
363+ int CurrentIndex;
364+ stream >> Tabs >> CurrentIndex;
365+ std::cout << " Restore NodeDockArea Tabs: " << Tabs << " CurrentIndex: "
366+ << CurrentIndex << std::endl;
367+ for (int i = 0 ; i < Tabs; ++i)
358368 {
359- Parent->layout ()->addWidget (DockArea);
369+ QString ObjectName;
370+ bool Closed;
371+ stream >> ObjectName >> Closed;
372+ std::cout << " Restore DockWidget " << ObjectName.toStdString () << " Closed: "
373+ << Closed << std::endl;
374+
375+ CDockWidget* DockWidget = DockManager->findChild <CDockWidget*>(ObjectName);
376+ if (!DockWidget)
377+ {
378+ continue ;
379+ }
380+ else
381+ {
382+ std::cout << " Dock Widget found - parent " << DockWidget->parent ()
383+ << std::endl;
384+ }
385+
386+ CDockAreaWidget* DockArea = new CDockAreaWidget (DockManager, _this);
387+ DockArea->addDockWidget (DockWidget);
360388 }
361- DockAreas.append (DockArea);
362389 }
363390}
364391
@@ -380,7 +407,10 @@ void DockContainerWidgetPrivate::addDockArea(CDockAreaWidget* NewDockArea, DockW
380407 auto InsertParam = internal::dockAreaInsertParameters (area);
381408 if (DockAreas.isEmpty ())
382409 {
383- _this->layout ()->addWidget (NewDockArea);
410+ QSplitter* Splitter = internal::newSplitter (Qt::Horizontal);
411+ Splitter->addWidget (NewDockArea);
412+ insertWidgetIntoSplitter (Splitter, NewDockArea, InsertParam.append ());
413+ _this->layout ()->addWidget (Splitter);
384414 }
385415 else if (DockAreas.count () == 1 )
386416 {
@@ -707,23 +737,26 @@ bool CDockContainerWidget::restoreState(QDataStream& stream)
707737{
708738 bool IsFloating;
709739 stream >> IsFloating;
710- if (isFloating ())
740+ std::cout << " Restore CDockContainerWidget Floating" << IsFloating << std::endl;
741+ QWidget* RootChild = d->Layout ->itemAt (0 )->widget ();
742+ if (RootChild)
743+ {
744+ d->DockAreas .clear ();
745+ delete RootChild;
746+ }
747+ QWidget* Widget;
748+ d->restoreChildNodes (stream, Widget);
749+
750+ /* if (isFloating())
711751 {
712752 std::cout << "Restore floating widget" << std::endl;
713753 CFloatingDockContainer* FloatingWidget = internal::findParent<CFloatingDockContainer*>(this);
714754 QByteArray Geometry;
715755 stream >> Geometry;
716756 FloatingWidget->restoreGeometry(Geometry);
717757 FloatingWidget->show();
718- }
758+ }*/
719759
720- QWidget* RootChild = d->Layout ->itemAt (0 )->widget ();
721- if (RootChild)
722- {
723- d->DockAreas .clear ();
724- delete RootChild;
725- }
726- d->restoreChildNodes (stream, this );
727760 return true ;
728761}
729762
0 commit comments