Fixed setting of tab widget visibility and toggleViewAction() state when dragging dock areas with closed dock widgets

This commit is contained in:
Uwe Kindler 2018-09-07 12:38:11 +02:00
parent 67199a81f4
commit c9123c3640
4 changed files with 28 additions and 12 deletions

View File

@ -348,7 +348,7 @@ void CDockAreaWidget::insertDockWidget(int index, CDockWidget* DockWidget,
DockWidget->tabWidget()->setDockAreaWidget(this); DockWidget->tabWidget()->setDockAreaWidget(this);
auto TabWidget = DockWidget->tabWidget(); auto TabWidget = DockWidget->tabWidget();
d->TabsLayout->insertWidget(index, TabWidget); d->TabsLayout->insertWidget(index, TabWidget);
TabWidget->show(); TabWidget->setVisible(!DockWidget->isClosed());
connect(TabWidget, SIGNAL(clicked()), this, SLOT(onDockWidgetTitleClicked())); connect(TabWidget, SIGNAL(clicked()), this, SLOT(onDockWidgetTitleClicked()));
DockWidget->setProperty(INDEX_PROPERTY, index); DockWidget->setProperty(INDEX_PROPERTY, index);
if (Activate) if (Activate)
@ -421,7 +421,7 @@ CDockWidget* CDockAreaWidget::currentDockWidget() const
//============================================================================ //============================================================================
void CDockAreaWidget::setCurrentDockWidget(CDockWidget* DockWidget) void CDockAreaWidget::setCurrentDockWidget(CDockWidget* DockWidget)
{ {
int Index = tabIndex(DockWidget); int Index = index(DockWidget);
if (Index < 0) if (Index < 0)
{ {
return; return;
@ -497,12 +497,19 @@ QRect CDockAreaWidget::contentAreaGeometry() const
//============================================================================ //============================================================================
int CDockAreaWidget::tabIndex(CDockWidget* DockWidget) int CDockAreaWidget::index(CDockWidget* DockWidget)
{ {
return d->ContentsLayout->indexOf(DockWidget); return d->ContentsLayout->indexOf(DockWidget);
} }
//============================================================================
int CDockAreaWidget::tabIndex(CDockWidget* DockWidget)
{
}
//============================================================================ //============================================================================
QList<CDockWidget*> CDockAreaWidget::dockWidgets() const QList<CDockWidget*> CDockAreaWidget::dockWidgets() const
{ {

View File

@ -113,6 +113,16 @@ protected:
*/ */
CDockWidget* nextOpenDockWidget(CDockWidget* DockWidget) const; CDockWidget* nextOpenDockWidget(CDockWidget* DockWidget) const;
/**
* Returns the index of the given DockWidget in the internal layout
*/
int index(CDockWidget* DockWidget);
/**
* Returns the tab index for the given dock widget
*/
int tabIndex(CDockWidget* DockWidget);
public: public:
/** /**
* Default Constructor * Default Constructor
@ -145,11 +155,6 @@ public:
*/ */
QRect contentAreaGeometry() const; QRect contentAreaGeometry() const;
/**
* Returns the tab index of the given DockWidget
*/
int tabIndex(CDockWidget* DockWidget);
/** /**
* Returns a list of all dock widgets in this dock area. * Returns a list of all dock widgets in this dock area.
* This list contains open and closed dock widgets. * This list contains open and closed dock widgets.

View File

@ -49,6 +49,8 @@
#include "DockSplitter.h" #include "DockSplitter.h"
#include "ads_globals.h" #include "ads_globals.h"
#include <iostream>
namespace ads namespace ads
{ {
/** /**
@ -121,7 +123,7 @@ void DockWidgetPrivate::showDockWidget()
else else
{ {
DockArea->show(); DockArea->show();
DockArea->setCurrentIndex(DockArea->tabIndex(_this)); DockArea->setCurrentDockWidget(_this);
QSplitter* Splitter = internal::findParent<QSplitter*>(_this); QSplitter* Splitter = internal::findParent<QSplitter*>(_this);
while (Splitter && !Splitter->isVisible()) while (Splitter && !Splitter->isVisible())
{ {
@ -380,6 +382,8 @@ void CDockWidget::setToggleViewActionMode(eToggleViewActionMode Mode)
//============================================================================ //============================================================================
void CDockWidget::toggleView(bool Open) void CDockWidget::toggleView(bool Open)
{ {
std::cout << "CDockWidget::toggleView " << objectName().toStdString()
<< " " << Open << std::endl;
QAction* Sender = qobject_cast<QAction*>(sender()); QAction* Sender = qobject_cast<QAction*>(sender());
if (Sender == d->ToggleViewAction && !d->ToggleViewAction->isCheckable()) if (Sender == d->ToggleViewAction && !d->ToggleViewAction->isCheckable())
{ {
@ -412,7 +416,7 @@ void CDockWidget::toggleView(bool Open)
void CDockWidget::setDockArea(CDockAreaWidget* DockArea) void CDockWidget::setDockArea(CDockAreaWidget* DockArea)
{ {
d->DockArea = DockArea; d->DockArea = DockArea;
d->ToggleViewAction->setChecked(DockArea != nullptr); d->ToggleViewAction->setChecked(DockArea != nullptr && !this->isClosed());
} }

View File

@ -244,14 +244,14 @@ void CDockWidgetTab::mouseReleaseEvent(QMouseEvent* ev)
{ {
// Find tab under mouse // Find tab under mouse
QPoint pos = d->DockArea->mapFromGlobal(ev->globalPos()); QPoint pos = d->DockArea->mapFromGlobal(ev->globalPos());
int fromIndex = d->DockArea->tabIndex(d->DockWidget); int fromIndex = d->DockArea->index(d->DockWidget);
int toIndex = d->DockArea->indexOfContentByTitlePos(pos, this); int toIndex = d->DockArea->indexOfContentByTitlePos(pos, this);
if (-1 == toIndex) if (-1 == toIndex)
{ {
toIndex = d->DockArea->count() - 1; toIndex = d->DockArea->count() - 1;
} }
qDebug() << "Move tab from " << fromIndex << " to " << toIndex; qDebug() << "Move tab from " << fromIndex << " to " << toIndex;
d->DockArea->reorderDockWidget(fromIndex, toIndex); //d->DockArea->reorderDockWidget(fromIndex, toIndex);
} }
if (!d->DragStartMousePosition.isNull()) if (!d->DragStartMousePosition.isNull())