DockTabMotherWidget::DockTabMotherWidget(QWidget *parent) :
	QWidget(parent)
{
	setStyleSheet("QSplitter::handle { background:darkGray; } QSplitter::handle:horizontal { width:1px; } QSplitter::handle:vertical { height:1px; }");
	
	_mainHorizontalSplitter = createSplitter(Qt::Horizontal);
	_mainVerticalSplitter = createSplitter(Qt::Vertical);
	_centralWidget = new QWidget;
	
	_mainVerticalSplitter->addWidget(_centralWidget);
	_mainVerticalSplitter->setStretchFactor(0, 1);
	
	_mainHorizontalSplitter->addWidget(_mainVerticalSplitter);
	_mainHorizontalSplitter->setStretchFactor(0, 1);
	
	auto layout = new QHBoxLayout;
	layout->addWidget(_mainHorizontalSplitter);
	layout->setContentsMargins(0, 0, 0, 0);
	setLayout(layout);
	
	setAcceptDrops(true);
}
bool DockTabMotherWidget::insertTabWidget(DockTabWidget *tabWidget, const TabWidgetArea &area)
{
	if (!area.isValid())
		goto error;
	
	if (area.tabWidgetIndex == -1)
	{
		Qt::Orientation orientation;
		if (area.dir == Left || area.dir == Right)
			orientation = Qt::Vertical;
		else
			orientation = Qt::Horizontal;
		
		auto splitter = createSplitter(orientation);
		splitter->addWidget(tabWidget);
		
		int mainSplitterIndex;
		QSplitter *mainSplitter;
		switch (area.dir)
		{
			case Left:
				mainSplitterIndex = area.splitterIndex;
				mainSplitter = _mainHorizontalSplitter;
				break;
			case Right:
				mainSplitterIndex = _mainHorizontalSplitter->count() - area.splitterIndex;
				mainSplitter = _mainHorizontalSplitter;
				break;
			case Top:
				mainSplitterIndex = area.splitterIndex;
				mainSplitter = _mainVerticalSplitter;
				break;
			case Bottom:
				mainSplitterIndex = _mainVerticalSplitter->count() - area.splitterIndex;
				mainSplitter = _mainVerticalSplitter;
				break;
			default:
				goto error;
		}
		
		mainSplitter->insertWidget(mainSplitterIndex, splitter);
		mainSplitter->setStretchFactor(mainSplitterIndex, 0);
		
		_splitterLists[area.dir].insert(area.splitterIndex, splitter);
	}
	else
	{
		QSplitter *splitter = _splitterLists[area.dir].at(area.splitterIndex);
		splitter->insertWidget(area.tabWidgetIndex, tabWidget);
	}
	
	connect(tabWidget, SIGNAL(willBeAutomaticallyDeleted(DockTabWidget*)), this, SLOT(onTabWidgetWillBeDeleted(DockTabWidget*)));
	
	return true;
	
error:
	
	PAINTFIELD_WARNING << "failed";
	//tabWidget->deleteLater();
	return false;
}
void PaneSubWidget::addWidget(QWidget *newWidget, const PanePosition Pos)
{
    if(qobject_cast<PaneSubWidget*>(newWidget)){
        qDebug() << "current wid: "<< qobject_cast<PaneSubWidget*>(newWidget)->idName() << " from parent "<< idName();
        qDebug() << "ask for position "<<Pos;
    }

    // how is your dady?
    newWidget->setParent(this);
    // try to interpret the widget as PaneSubWidget
    PaneSubWidget *paneWidget = qobject_cast<PaneSubWidget*>(newWidget);
    // unfortunetaly I cannot override the "windowTitle" method, so use the cast-result
    QString winTitle= (!paneWidget) ? newWidget->windowTitle() : paneWidget->windowTitle();

    // place widget at correct position
    switch(Pos)
    {
    default:
        qDebug() << Pos;
        qErrnoWarning("not implemented yet");
        break;
    case TabIn:
    {
        // this is easy just add a Tab
        int idx;
        idx = addTab(newWidget,winTitle);
        if(paneWidget)
        {
            // if widget is a PaneSubWidget --> create connections
            connect(paneWidget,SIGNAL(clickPane(QWidget*)),this,SLOT(onClickSubPane(QWidget*)));
            connect(paneWidget,SIGNAL(dragPane(CurrentWidget)),this,SLOT(onDragSubPane(CurrentWidget)));
            connect(paneWidget,SIGNAL(movePane(bool)),this,SLOT(onMoveSubPane(bool)));
            connect(paneWidget,SIGNAL(releasePane()),this,SLOT(onReleaseSubPane()));
        }
        setCurrentIndex(idx);
        break;
    }

    case RightOut:
    {
        // the new widget should be placed left of "this"
        // ----------------------------------------------
        // get parent panesub-object

        QWidget* parent = findGoodParent(this);

        if(qobject_cast<PaneSubWidget*>(parent)){
            // next interesting parent is PaneSubWidget --> use that
            PaneSubWidget* parentPane =  findParentOfType<PaneSubWidget*>(this);
            QWidget* find = parentPane->currentWidget();
            QSplitter *replace = createSplitter(this,newWidget,parentPane);

            parentPane->replaceTab(find,replace);
        }
        if(qobject_cast<QSplitter*>(parent)){
            // TODO :: QSplitter --> PaneSplitter for easier removing
        }
        break;
    }
    }
}