Started inserting RootSplitter

This commit is contained in:
Uwe Kindler 2017-03-24 10:18:25 +01:00
parent 1cd1e7d6ec
commit a652deba71
8 changed files with 135 additions and 33 deletions

View File

@ -5,7 +5,7 @@
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/> <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/> <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuildCommandParser" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser" keep-relative-paths="false" name="CDT GCC Build Output Parser" parameter="(g?cc)|([gc]\+\+)|(clang)" prefer-non-shared="true"/> <provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuildCommandParser" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser" keep-relative-paths="false" name="CDT GCC Build Output Parser" parameter="(g?cc)|([gc]\+\+)|(clang)" prefer-non-shared="true"/>
<provider class="org.eclipse.cdt.managedbuilder.internal.language.settings.providers.GCCBuiltinSpecsDetectorMinGW" console="false" env-hash="-797032510223863550" id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetectorMinGW" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings MinGW" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true"> <provider class="org.eclipse.cdt.managedbuilder.internal.language.settings.providers.GCCBuiltinSpecsDetectorMinGW" console="false" env-hash="1111767096691303650" id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetectorMinGW" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings MinGW" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/> <language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/> <language-scope id="org.eclipse.cdt.core.g++"/>
</provider> </provider>

View File

@ -711,6 +711,8 @@ void CDockAreaWidget::onDockWidgetViewToggled(bool Open)
void CDockAreaWidget::saveState(QDataStream& stream) const void CDockAreaWidget::saveState(QDataStream& stream) const
{ {
stream << d->ContentsLayout->count() << d->ContentsLayout->currentIndex(); stream << d->ContentsLayout->count() << d->ContentsLayout->currentIndex();
std::cout << "CDockAreaWidget::saveState TabCount: " << d->ContentsLayout->count()
<< " CurrentIndex: " << d->ContentsLayout->currentIndex() << std::endl;
for (int i = 0; i < d->ContentsLayout->count(); ++i) for (int i = 0; i < d->ContentsLayout->count(); ++i)
{ {
dockWidget(i)->saveState(stream); dockWidget(i)->saveState(stream);

View File

@ -39,6 +39,7 @@ class CDockManager;
class CDockContainerWidget; class CDockContainerWidget;
class CDockWidget; class CDockWidget;
/** /**
* DockAreaWidget manages multiple instances of DckWidgets. * DockAreaWidget manages multiple instances of DckWidgets.
* It displays a title tab, which is clickable and will switch to * It displays a title tab, which is clickable and will switch to

View File

@ -33,7 +33,6 @@
#include <QEvent> #include <QEvent>
#include <QList> #include <QList>
#include <QGridLayout> #include <QGridLayout>
#include <QSplitter>
#include <QPointer> #include <QPointer>
#include "DockManager.h" #include "DockManager.h"
@ -43,6 +42,7 @@
#include "DockOverlay.h" #include "DockOverlay.h"
#include "DockStateSerialization.h" #include "DockStateSerialization.h"
#include "ads_globals.h" #include "ads_globals.h"
#include "DockSplitter.h"
#include <iostream> #include <iostream>
@ -75,6 +75,7 @@ struct DockContainerWidgetPrivate
unsigned int zOrderIndex = 0; unsigned int zOrderIndex = 0;
QList<CDockAreaWidget*> DockAreas; QList<CDockAreaWidget*> DockAreas;
QGridLayout* Layout = nullptr; QGridLayout* Layout = nullptr;
CDockSplitter* RootSplitter;
bool isFloating = false; bool isFloating = false;
/** /**
@ -123,7 +124,7 @@ struct DockContainerWidgetPrivate
/** /**
* Restore state of child nodes * Restore state of child nodes
*/ */
void restoreChildNodes(QDataStream& Stream, QWidget* Parent); void restoreChildNodes(QDataStream& Stream, QWidget*& CreatedWidget);
}; // struct DockContainerWidgetPrivate }; // struct DockContainerWidgetPrivate
@ -310,10 +311,10 @@ void DockContainerWidgetPrivate::saveChildNodesState(QDataStream& stream, QWidge
} }
else else
{ {
stream << NodeDockArea;
CDockAreaWidget* DockArea = dynamic_cast<CDockAreaWidget*>(Widget); CDockAreaWidget* DockArea = dynamic_cast<CDockAreaWidget*>(Widget);
if (DockArea) if (DockArea)
{ {
std::cout << "NodeDockArea " << std::endl;
DockArea->saveState(stream); DockArea->saveState(stream);
} }
} }
@ -321,17 +322,27 @@ void DockContainerWidgetPrivate::saveChildNodesState(QDataStream& stream, QWidge
//============================================================================ //============================================================================
void DockContainerWidgetPrivate::restoreChildNodes(QDataStream& stream, QWidget* Parent) void DockContainerWidgetPrivate::restoreChildNodes(QDataStream& stream,
QWidget*& CreatedWidget)
{ {
int NodeType; int NodeType;
stream >> NodeType; stream >> NodeType;
QSplitter* ParentSplitter = dynamic_cast<QSplitter*>(Parent);
if (NodeSplitter == NodeType) if (NodeSplitter == NodeType)
{ {
int Orientation; int Orientation;
int Count; int WidgetCount;
stream >> Orientation >> Count; stream >> Orientation >> WidgetCount;
std::cout << "Restore NodeSplitter " << Orientation << std::endl; std::cout << "Restore NodeSplitter Orientation: " << Orientation <<
" WidgetCount: " << WidgetCount << std::endl;
for (int i = 0; i < WidgetCount; ++i)
{
QWidget* Widget;
restoreChildNodes(stream, CreatedWidget);
}
/*std::cout << "Restore NodeSplitter " << Orientation << std::endl;
QSplitter* Splitter = internal::newSplitter((Qt::Orientation)Orientation); QSplitter* Splitter = internal::newSplitter((Qt::Orientation)Orientation);
if (ParentSplitter) if (ParentSplitter)
{ {
@ -344,21 +355,37 @@ void DockContainerWidgetPrivate::restoreChildNodes(QDataStream& stream, QWidget*
for (int i = 0; i < Count; ++i) for (int i = 0; i < Count; ++i)
{ {
restoreChildNodes(stream, Splitter); restoreChildNodes(stream, Splitter);
} }*/
} }
else else
{ {
std::cout << "Restore NodeDockArea " << std::endl; int Tabs;
CDockAreaWidget* DockArea = new CDockAreaWidget(DockManager, _this); int CurrentIndex;
if (ParentSplitter) stream >> Tabs >> CurrentIndex;
std::cout << "Restore NodeDockArea Tabs: " << Tabs << " CurrentIndex: "
<< CurrentIndex << std::endl;
for (int i = 0; i < Tabs; ++i)
{ {
ParentSplitter->addWidget(DockArea); QString ObjectName;
bool Closed;
stream >> ObjectName >> Closed;
std::cout << "Restore DockWidget " << ObjectName.toStdString() << " Closed: "
<< Closed << std::endl;
CDockWidget* DockWidget = DockManager->findChild<CDockWidget*>(ObjectName);
if (!DockWidget)
{
continue;
}
else
{
std::cout << "Dock Widget found - parent " << DockWidget->parent()
<< std::endl;
}
CDockAreaWidget* DockArea = new CDockAreaWidget(DockManager, _this);
DockArea->addDockWidget(DockWidget);
} }
else
{
Parent->layout()->addWidget(DockArea);
}
DockAreas.append(DockArea);
} }
} }
@ -380,7 +407,10 @@ void DockContainerWidgetPrivate::addDockArea(CDockAreaWidget* NewDockArea, DockW
auto InsertParam = internal::dockAreaInsertParameters(area); auto InsertParam = internal::dockAreaInsertParameters(area);
if (DockAreas.isEmpty()) if (DockAreas.isEmpty())
{ {
_this->layout()->addWidget(NewDockArea); QSplitter* Splitter = internal::newSplitter(Qt::Horizontal);
Splitter->addWidget(NewDockArea);
insertWidgetIntoSplitter(Splitter, NewDockArea, InsertParam.append());
_this->layout()->addWidget(Splitter);
} }
else if (DockAreas.count() == 1) else if (DockAreas.count() == 1)
{ {
@ -707,7 +737,17 @@ bool CDockContainerWidget::restoreState(QDataStream& stream)
{ {
bool IsFloating; bool IsFloating;
stream >> IsFloating; stream >> IsFloating;
if (isFloating()) std::cout << "Restore CDockContainerWidget Floating" << IsFloating << std::endl;
QWidget* RootChild = d->Layout->itemAt(0)->widget();
if (RootChild)
{
d->DockAreas.clear();
delete RootChild;
}
QWidget* Widget;
d->restoreChildNodes(stream, Widget);
/*if (isFloating())
{ {
std::cout << "Restore floating widget" << std::endl; std::cout << "Restore floating widget" << std::endl;
CFloatingDockContainer* FloatingWidget = internal::findParent<CFloatingDockContainer*>(this); CFloatingDockContainer* FloatingWidget = internal::findParent<CFloatingDockContainer*>(this);
@ -715,15 +755,8 @@ bool CDockContainerWidget::restoreState(QDataStream& stream)
stream >> Geometry; stream >> Geometry;
FloatingWidget->restoreGeometry(Geometry); FloatingWidget->restoreGeometry(Geometry);
FloatingWidget->show(); FloatingWidget->show();
} }*/
QWidget* RootChild = d->Layout->itemAt(0)->widget();
if (RootChild)
{
d->DockAreas.clear();
delete RootChild;
}
d->restoreChildNodes(stream, this);
return true; return true;
} }

27
src/DockSplitter.cpp Normal file
View File

@ -0,0 +1,27 @@
//============================================================================
/// \file DockSplitter.cpp
/// \author Uwe Kindler
/// \date 24.03.2017
/// \brief Implementation of CDockSplitter
//============================================================================
//============================================================================
// INCLUDES
//============================================================================
#include <DockSplitter.h>
#include <iostream>
namespace ads
{
//============================================================================
CDockSplitter::~CDockSplitter()
{
std::cout << "~CDockSplitter" << std::endl;
}
} // namespace ads
//---------------------------------------------------------------------------
// EOF DockSplitter.cpp

36
src/DockSplitter.h Normal file
View File

@ -0,0 +1,36 @@
#ifndef DockSplitterH
#define DockSplitterH
//============================================================================
/// \file DockSplitter.h
/// \author Uwe Kindler
/// \date 24.03.2017
/// \brief Declaration of CDockSplitter
//============================================================================
//============================================================================
// INCLUDES
//============================================================================
#include <QSplitter>
namespace ads
{
/**
* Splitter used internally instead of QSplitter
*/
class CDockSplitter : public QSplitter
{
Q_OBJECT
public:
using QSplitter::QSplitter;
/**
* Prints debug info
*/
virtual ~CDockSplitter();
}; // class CDockSplitter
} // namespace ads
//---------------------------------------------------------------------------
#endif // DockSplitterH

View File

@ -28,11 +28,12 @@
//============================================================================ //============================================================================
// INCLUDES // INCLUDES
//============================================================================ //============================================================================
#include <QSplitter>
#include <QVariant> #include <QVariant>
#include "DockSplitter.h"
#include "ads_globals.h" #include "ads_globals.h"
namespace ads namespace ads
{ {
@ -41,7 +42,7 @@ namespace internal
//============================================================================ //============================================================================
QSplitter* newSplitter(Qt::Orientation orientation, QWidget* parent) QSplitter* newSplitter(Qt::Orientation orientation, QWidget* parent)
{ {
QSplitter* s = new QSplitter(orientation, parent); QSplitter* s = new CDockSplitter(orientation, parent);
s->setProperty("ads-splitter", QVariant(true)); s->setProperty("ads-splitter", QVariant(true));
s->setChildrenCollapsible(false); s->setChildrenCollapsible(false);
s->setOpaqueResize(false); s->setOpaqueResize(false);

View File

@ -39,7 +39,8 @@ HEADERS += \
DockWidget.h \ DockWidget.h \
DockWidgetTitleBar.h \ DockWidgetTitleBar.h \
FloatingDockContainer.h \ FloatingDockContainer.h \
DockOverlay.h DockOverlay.h \
DockSplitter.h
@ -51,4 +52,5 @@ SOURCES += \
DockWidget.cpp \ DockWidget.cpp \
DockWidgetTitleBar.cpp \ DockWidgetTitleBar.cpp \
FloatingDockContainer.cpp \ FloatingDockContainer.cpp \
DockOverlay.cpp DockOverlay.cpp \
DockSplitter.cpp