Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
fix close & open bugs
  • Loading branch information
NEDJIMAbelgacem committed Jan 13, 2022
1 parent 5b17f2d commit 5170d1c
Show file tree
Hide file tree
Showing 6 changed files with 94 additions and 76 deletions.
48 changes: 32 additions & 16 deletions src/app/3d/qgs3dmapcanvasdockwidget.cpp
Expand Up @@ -24,24 +24,32 @@
Qgs3DMapCanvasDockWidget::Qgs3DMapCanvasDockWidget( QWidget *parent )
: QWidget( parent )
{
mCanvasWidget = new Qgs3DMapCanvasWidget;
this->setAttribute( Qt::WA_DeleteOnClose );

mCanvasWidget = new Qgs3DMapCanvasWidget( this );

mDock = new QgsDockWidget( this );
mDock->setAttribute( Qt::WA_DeleteOnClose );

mDock = new QgsDockWidget( QgisApp::instance() );
mDock->setWidget( nullptr );
mDock->setAllowedAreas( Qt::AllDockWidgetAreas );

mDock->setVisible( false );

mDialog = new QDialog( QgisApp::instance(), Qt::Window );
mDialog = new QDialog( this, Qt::Window );
mDialog->setAttribute( Qt::WA_DeleteOnClose );
QVBoxLayout *vl = new QVBoxLayout();
vl->setContentsMargins( 0, 0, 0, 0 );
mDialog->setLayout( vl );
mDialog->hide();

connect( mDock, &QgsDockWidget::closed, this, &Qgs3DMapCanvasDockWidget::closed );
connect( mDock, &QgsDockWidget::closed, [ = ]()
{
this->close();
} );
connect( mDialog, &QDialog::finished, [ = ]()
{
emit this->closed();
this->close();
} );

connect( mCanvasWidget, &Qgs3DMapCanvasWidget::toggleDockMode, this, &Qgs3DMapCanvasDockWidget::toggleDockMode );
Expand All @@ -50,26 +58,18 @@ Qgs3DMapCanvasDockWidget::Qgs3DMapCanvasDockWidget( QWidget *parent )
switchToDockMode();
}

Qgs3DMapCanvasDockWidget::~Qgs3DMapCanvasDockWidget()
{
delete mCanvasWidget;
delete mDock;
delete mDialog;
}

Qgs3DMapCanvasWidget *Qgs3DMapCanvasDockWidget::widget()
QWidget *Qgs3DMapCanvasDockWidget::widget()
{
return mCanvasWidget;
}

bool Qgs3DMapCanvasDockWidget::isDocked()
bool Qgs3DMapCanvasDockWidget::isDocked() const
{
return mIsDocked;
}

void Qgs3DMapCanvasDockWidget::toggleDockMode( bool docked )
{
// TODO: handle window/dock widget sizes and window titles
if ( docked )
{
// going from window -> dock
Expand All @@ -82,7 +82,6 @@ void Qgs3DMapCanvasDockWidget::toggleDockMode( bool docked )
}
}


void Qgs3DMapCanvasDockWidget::switchToWindowMode()
{
if ( !mIsDocked )
Expand Down Expand Up @@ -123,3 +122,20 @@ void Qgs3DMapCanvasDockWidget::switchToDockMode()
mCanvasWidget->setDocked( true );
}

void Qgs3DMapCanvasDockWidget::setWindowTitle( const QString &title )
{
this->QWidget::setWindowTitle( title );
mDialog->setWindowTitle( title );
mDock->setWindowTitle( title );
}

void Qgs3DMapCanvasDockWidget::closeEvent( QCloseEvent *e )
{
mDialog->layout()->removeWidget( mCanvasWidget );
mDock->setWidget( nullptr );
mCanvasWidget->setParent( this );

emit closed();
QWidget::closeEvent( e );
}

12 changes: 8 additions & 4 deletions src/app/3d/qgs3dmapcanvasdockwidget.h
Expand Up @@ -38,20 +38,23 @@ class APP_EXPORT Qgs3DMapCanvasDockWidget : public QWidget
public:
Qgs3DMapCanvasDockWidget( QWidget *parent = nullptr );

~Qgs3DMapCanvasDockWidget();

Qgs3DMapCanvasWidget *widget();
QWidget *widget();

QgsDockWidget *dockWidget() { return mDock; }

QDialog *dialog() { return mDialog; }

bool isDocked();
bool isDocked() const;

void switchToWindowMode();

void switchToDockMode();

void setWindowTitle( const QString &title );

protected:
void closeEvent( QCloseEvent * ) override;

signals:
void closed();

Expand All @@ -66,6 +69,7 @@ class APP_EXPORT Qgs3DMapCanvasDockWidget : public QWidget
QgsDockWidget *mDock = nullptr;

QDialog *mDialog = nullptr;

QVBoxLayout *mDialogLayout = nullptr;
};

Expand Down
2 changes: 1 addition & 1 deletion src/app/3d/qgs3dmapcanvaswidget.cpp
Expand Up @@ -180,6 +180,7 @@ Qgs3DMapCanvasWidget::Qgs3DMapCanvasWidget( QWidget *parent )

connect( mCanvas, &Qgs3DMapCanvas::fpsCountChanged, this, &Qgs3DMapCanvasWidget::updateFpsCount );
connect( mCanvas, &Qgs3DMapCanvas::fpsCounterEnabledChanged, this, &Qgs3DMapCanvasWidget::toggleFpsCounter );
connect( mCanvas, &Qgs3DMapCanvas::cameraNavigationSpeedChanged, this, &Qgs3DMapCanvasWidget::cameraNavigationSpeedChanged );

mMapToolIdentify = new Qgs3DMapToolIdentify( mCanvas );

Expand Down Expand Up @@ -311,7 +312,6 @@ void Qgs3DMapCanvasWidget::setMapSettings( Qgs3DMapSettings *map )
mBtnMapThemes->setDisabled( !mCanvas->map()->terrainGenerator() || mCanvas->map()->terrainGenerator()->type() == QgsTerrainGenerator::Mesh );
mLabelFpsCounter->setVisible( map->isFpsCounterEnabled() );

connect( mCanvas, &Qgs3DMapCanvas::cameraNavigationSpeedChanged, this, &Qgs3DMapCanvasWidget::cameraNavigationSpeedChanged );
}

void Qgs3DMapCanvasWidget::setMainCanvas( QgsMapCanvas *canvas )
Expand Down
3 changes: 2 additions & 1 deletion src/app/3d/qgs3dviewsmanagerdialog.cpp
Expand Up @@ -138,7 +138,8 @@ void Qgs3DViewsManagerDialog::renameClicked()
if ( Qgs3DMapCanvasDockWidget *widget = QgisApp::instance()->get3DMapViewDock( oldTitle ) )
{
widget->setWindowTitle( newTitle );
widget->widget()->mapCanvas3D()->setObjectName( newTitle );
Qgs3DMapCanvasWidget *canvasWidget = dynamic_cast< Qgs3DMapCanvasWidget * >( widget->widget() );
canvasWidget->mapCanvas3D()->setObjectName( newTitle );
}

QgsProject::instance()->setDirty();
Expand Down
17 changes: 10 additions & 7 deletions src/app/layout/qgslayout3dmapwidget.cpp
Expand Up @@ -39,9 +39,10 @@ void _prepare3DViewsMenu( QMenu *menu, QgsLayout3DMapWidget *w, Func1 slot )
menu->clear();
for ( auto dock : lst )
{
QAction *a = menu->addAction( dock->widget()->mapCanvas3D()->objectName(), w, slot );
Qgs3DMapCanvasWidget *widget = dynamic_cast< Qgs3DMapCanvasWidget * >( dock->widget() );
QAction *a = menu->addAction( widget->mapCanvas3D()->objectName(), w, slot );
// need to use a custom property for identification because Qt likes to add "&" to the action text
a->setProperty( "name", dock->widget()->mapCanvas3D()->objectName() );
a->setProperty( "name", widget->mapCanvas3D()->objectName() );
}
if ( lst.isEmpty() )
{
Expand All @@ -60,7 +61,8 @@ Qgs3DMapCanvasDockWidget *_dock3DViewFromSender( QObject *sender )
const QList<Qgs3DMapCanvasDockWidget *> lst = QgisApp::instance()->findChildren<Qgs3DMapCanvasDockWidget *>();
for ( auto dock : lst )
{
QString objName = dock->widget()->mapCanvas3D()->objectName();
Qgs3DMapCanvasWidget *widget = dynamic_cast< Qgs3DMapCanvasWidget * >( dock->widget() );
QString objName = widget->mapCanvas3D()->objectName();
if ( objName == actionText )
{
return dock;
Expand Down Expand Up @@ -123,8 +125,8 @@ void QgsLayout3DMapWidget::copy3DMapSettings()
Qgs3DMapCanvasDockWidget *dock = _dock3DViewFromSender( sender() );
if ( !dock )
return;

Qgs3DMapSettings *settings = new Qgs3DMapSettings( *dock->widget()->mapCanvas3D()->map() );
Qgs3DMapCanvasWidget *widget = dynamic_cast< Qgs3DMapCanvasWidget * >( dock->widget() );
Qgs3DMapSettings *settings = new Qgs3DMapSettings( *widget->mapCanvas3D()->map() );

// first setting passed on
if ( !mMap3D->mapSettings() )
Expand All @@ -133,7 +135,7 @@ void QgsLayout3DMapWidget::copy3DMapSettings()
mMap3D->setBackgroundColor( settings->backgroundColor() );

// copy camera position details
mMap3D->setCameraPose( dock->widget()->mapCanvas3D()->cameraController()->cameraPose() );
mMap3D->setCameraPose( widget->mapCanvas3D()->cameraController()->cameraPose() );
updateCameraPoseWidgetsFromItem();
}

Expand All @@ -145,7 +147,8 @@ void QgsLayout3DMapWidget::copeCameraPose()
Qgs3DMapCanvasDockWidget *dock = _dock3DViewFromSender( sender() );
if ( dock )
{
mMap3D->setCameraPose( dock->widget()->mapCanvas3D()->cameraController()->cameraPose() );
Qgs3DMapCanvasWidget *widget = dynamic_cast< Qgs3DMapCanvasWidget * >( dock->widget() );
mMap3D->setCameraPose( widget->mapCanvas3D()->cameraController()->cameraPose() );
updateCameraPoseWidgetsFromItem();
}
}
Expand Down

0 comments on commit 5170d1c

Please sign in to comment.