Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
restructure the map canvas docking
  • Loading branch information
NEDJIMAbelgacem committed Jan 17, 2022
1 parent f7c043d commit 66ffdea
Show file tree
Hide file tree
Showing 10 changed files with 438 additions and 299 deletions.
16 changes: 13 additions & 3 deletions src/app/3d/qgs3dmapcanvaswidget.cpp
Expand Up @@ -49,10 +49,12 @@
#include "qgsmap3dexportwidget.h"
#include "qgs3dmapexportsettings.h"

#include "qgsdockablewidgethelper.h"

#include <QWidget>

Qgs3DMapCanvasWidget::Qgs3DMapCanvasWidget( QWidget *parent )
: QWidget( parent )
Qgs3DMapCanvasWidget::Qgs3DMapCanvasWidget( bool isDocked )
: QWidget( nullptr )
{
const QgsSettings setting;
setAttribute( Qt::WA_DeleteOnClose ); // removes the dock widget from main window when
Expand Down Expand Up @@ -224,6 +226,15 @@ Qgs3DMapCanvasWidget::Qgs3DMapCanvasWidget( QWidget *parent )
this->setLayout( layout );

onTotalPendingJobsCountChanged();

mDockableWidget = new QgsDockableWidgetHelper( isDocked, this );
connect( this, &Qgs3DMapCanvasWidget::toggleDockModeRequested, mDockableWidget, &QgsDockableWidgetHelper::toggleDockMode );
}

Qgs3DMapCanvasWidget::~Qgs3DMapCanvasWidget()
{
this->setParent( QgisApp::instance() );
delete mDockableWidget;
}

void Qgs3DMapCanvasWidget::saveAsImage()
Expand Down Expand Up @@ -309,7 +320,6 @@ void Qgs3DMapCanvasWidget::setMapSettings( Qgs3DMapSettings *map )
// Disable button for switching the map theme if the terrain generator is a mesh, or if there is no terrain
mBtnMapThemes->setDisabled( !mCanvas->map()->terrainGenerator() || mCanvas->map()->terrainGenerator()->type() == QgsTerrainGenerator::Mesh );
mLabelFpsCounter->setVisible( map->isFpsCounterEnabled() );

}

void Qgs3DMapCanvasWidget::setMainCanvas( QgsMapCanvas *canvas )
Expand Down
10 changes: 8 additions & 2 deletions src/app/3d/qgs3dmapcanvaswidget.h
Expand Up @@ -32,22 +32,27 @@ class Qgs3DMapSettings;
class Qgs3DMapToolIdentify;
class Qgs3DMapToolMeasureLine;
class QgsMapCanvas;
class QgsDockableWidgetHelper;

class APP_EXPORT Qgs3DMapCanvasWidget : public QWidget
{
Q_OBJECT
public:
Qgs3DMapCanvasWidget( QWidget *parent = nullptr );
Qgs3DMapCanvasWidget( bool isDocked );
~Qgs3DMapCanvasWidget();

//! takes ownership
void setMapSettings( Qgs3DMapSettings *map );

void setMainCanvas( QgsMapCanvas *canvas );

Qgs3DMapCanvas *mapCanvas3D() { return mCanvas; }

Qgs3DAnimationWidget *animationWidget() { return mAnimationWidget; }

Qgs3DMapToolMeasureLine *measurementLineTool() { return mMapToolMeasureLine; }
Qgs3DMapToolMeasureLine *measurementLineTool() { return mMapToolMeasureLine; }

QgsDockableWidgetHelper *dockableWidget() { return mDockableWidget; }

void setDocked( bool docked );

Expand Down Expand Up @@ -94,6 +99,7 @@ class APP_EXPORT Qgs3DMapCanvasWidget : public QWidget
QAction *mActionEnableEyeDome = nullptr;
QToolButton *mBtnOptions = nullptr;
QToolButton *mDockUnDockBtn = nullptr;
QgsDockableWidgetHelper *mDockableWidget = nullptr;
};

#endif // QGS3DMAPCANVASWIDGET_H
21 changes: 8 additions & 13 deletions src/app/3d/qgs3dviewsmanagerdialog.cpp
Expand Up @@ -20,7 +20,7 @@
#include "qgs3dmapcanvas.h"
#include "qgsmapviewsmanager.h"
#include "qgs3dmapcanvaswidget.h"
#include "qgsdockablewidget.h"
#include "qgsdockablewidgethelper.h"

#include <QMessageBox>

Expand Down Expand Up @@ -64,8 +64,8 @@ void Qgs3DViewsManagerDialog::showClicked()

QString viewName = m3DViewsListView->selectionModel()->selectedRows().at( 0 ).data( Qt::DisplayRole ).toString();

QgsDockableWidget *widget = QgisApp::instance()->open3DMapView( viewName );
widget->show();
Qgs3DMapCanvasWidget *widget = QgisApp::instance()->open3DMapView( viewName );
widget->dockableWidget()->show();

m3DViewsListView->selectionModel()->setCurrentIndex( m3DViewsListView->selectionModel()->currentIndex(), QItemSelectionModel::Select );
currentChanged( m3DViewsListView->selectionModel()->currentIndex(), m3DViewsListView->selectionModel()->currentIndex() );
Expand All @@ -78,8 +78,7 @@ void Qgs3DViewsManagerDialog::hideClicked()

QString viewName = m3DViewsListView->selectionModel()->selectedRows().at( 0 ).data( Qt::DisplayRole ).toString();

QgsDockableWidget *widget = QgisApp::instance()->get3DMapViewDock( viewName );
widget->close();
QgisApp::instance()->close3DMapView( viewName );

m3DViewsListView->selectionModel()->setCurrentIndex( m3DViewsListView->selectionModel()->currentIndex(), QItemSelectionModel::Select );
currentChanged( m3DViewsListView->selectionModel()->currentIndex(), m3DViewsListView->selectionModel()->currentIndex() );
Expand Down Expand Up @@ -115,11 +114,8 @@ void Qgs3DViewsManagerDialog::removeClicked()
QString viewName = m3DViewsListView->selectionModel()->selectedRows().at( 0 ).data( Qt::DisplayRole ).toString();

QgsProject::instance()->viewsManager()->remove3DView( viewName );
if ( QgsDockableWidget *w = QgisApp::instance()->get3DMapViewDock( viewName ) )
{
w->close();
QgsProject::instance()->setDirty();
}
QgisApp::instance()->close3DMapView( viewName );
QgsProject::instance()->setDirty();
}

void Qgs3DViewsManagerDialog::renameClicked()
Expand All @@ -135,11 +131,10 @@ void Qgs3DViewsManagerDialog::renameClicked()

QgsProject::instance()->viewsManager()->rename3DView( oldTitle, newTitle );

if ( QgsDockableWidget *widget = QgisApp::instance()->get3DMapViewDock( oldTitle ) )
if ( Qgs3DMapCanvasWidget *widget = QgisApp::instance()->get3DMapView( oldTitle ) )
{
widget->setWindowTitle( newTitle );
Qgs3DMapCanvasWidget *canvasWidget = qobject_cast< Qgs3DMapCanvasWidget * >( widget->widget() );
canvasWidget->mapCanvas3D()->setObjectName( newTitle );
widget->mapCanvas3D()->setObjectName( newTitle );
}

QgsProject::instance()->setDirty();
Expand Down
2 changes: 1 addition & 1 deletion src/app/CMakeLists.txt
Expand Up @@ -73,7 +73,7 @@ set(QGIS_APP_SRCS
qgsrecentprojectsitemsmodel.cpp
qgsvectorlayerdigitizingproperties.cpp
qgswelcomepage.cpp
qgsdockablewidget.cpp
qgsdockablewidgethelper.cpp

qgsmaptooladdfeature.cpp
qgsmaptooladdpart.cpp
Expand Down
26 changes: 11 additions & 15 deletions src/app/layout/qgslayout3dmapwidget.cpp
Expand Up @@ -21,7 +21,7 @@
#include "qgscameracontroller.h"
#include <QMenu>
#include "qgs3dmapcanvaswidget.h"
#include "qgsdockablewidget.h"
#include "qgsdockablewidgethelper.h"

float _normalizedAngle( float x )
{
Expand All @@ -35,11 +35,10 @@ void _prepare3DViewsMenu( QMenu *menu, QgsLayout3DMapWidget *w, Func1 slot )
{
QObject::connect( menu, &QMenu::aboutToShow, w, [menu, w, slot]
{
const QList<QgsDockableWidget *> lst = QgisApp::instance()->get3DMapViews();
const QList<Qgs3DMapCanvasWidget *> lst = QgisApp::instance()->get3DMapViews();
menu->clear();
for ( auto dock : lst )
for ( auto widget : lst )
{
Qgs3DMapCanvasWidget *widget = qobject_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", widget->mapCanvas3D()->objectName() );
Expand All @@ -51,21 +50,20 @@ void _prepare3DViewsMenu( QMenu *menu, QgsLayout3DMapWidget *w, Func1 slot )
} );
}

QgsDockableWidget *_dock3DViewFromSender( QObject *sender )
Qgs3DMapCanvasWidget *_dock3DViewFromSender( QObject *sender )
{
QAction *action = qobject_cast<QAction *>( sender );
if ( !action )
return nullptr;

QString actionText = action->property( "name" ).toString();
const QList<QgsDockableWidget *> lst = QgisApp::instance()->get3DMapViews();
for ( auto dock : lst )
const QList<Qgs3DMapCanvasWidget *> lst = QgisApp::instance()->get3DMapViews();
for ( auto widget : lst )
{
Qgs3DMapCanvasWidget *widget = qobject_cast< Qgs3DMapCanvasWidget * >( dock->widget() );
QString objName = widget->mapCanvas3D()->objectName();
if ( objName == actionText )
{
return dock;
return widget;
}
}
return nullptr;
Expand Down Expand Up @@ -122,10 +120,9 @@ void QgsLayout3DMapWidget::updateCameraPoseWidgetsFromItem()

void QgsLayout3DMapWidget::copy3DMapSettings()
{
QgsDockableWidget *dock = _dock3DViewFromSender( sender() );
if ( !dock )
Qgs3DMapCanvasWidget *widget = _dock3DViewFromSender( sender() );
if ( !widget )
return;
Qgs3DMapCanvasWidget *widget = qobject_cast< Qgs3DMapCanvasWidget * >( dock->widget() );
Qgs3DMapSettings *settings = new Qgs3DMapSettings( *widget->mapCanvas3D()->map() );

// first setting passed on
Expand All @@ -144,10 +141,9 @@ void QgsLayout3DMapWidget::copy3DMapSettings()

void QgsLayout3DMapWidget::copeCameraPose()
{
QgsDockableWidget *dock = _dock3DViewFromSender( sender() );
if ( dock )
Qgs3DMapCanvasWidget *widget = _dock3DViewFromSender( sender() );
if ( widget )
{
Qgs3DMapCanvasWidget *widget = qobject_cast< Qgs3DMapCanvasWidget * >( dock->widget() );
mMap3D->setCameraPose( widget->mapCanvas3D()->cameraController()->cameraPose() );
updateCameraPoseWidgetsFromItem();
}
Expand Down

0 comments on commit 66ffdea

Please sign in to comment.