Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
make QgsDockableWidgetHelper a qobject and use canvas name instead of…
… objectName
  • Loading branch information
NEDJIMAbelgacem committed Jan 18, 2022
1 parent 0ada56d commit 6c9517d
Show file tree
Hide file tree
Showing 7 changed files with 36 additions and 32 deletions.
11 changes: 6 additions & 5 deletions src/app/3d/qgs3dmapcanvaswidget.cpp
Expand Up @@ -53,8 +53,9 @@

#include <QWidget>

Qgs3DMapCanvasWidget::Qgs3DMapCanvasWidget( bool isDocked )
Qgs3DMapCanvasWidget::Qgs3DMapCanvasWidget( const QString &name, bool isDocked )
: QWidget( nullptr )
, mCanvasName( name )
{
const QgsSettings setting;

Expand Down Expand Up @@ -225,7 +226,7 @@ Qgs3DMapCanvasWidget::Qgs3DMapCanvasWidget( bool isDocked )

onTotalPendingJobsCountChanged();

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

Expand Down Expand Up @@ -289,10 +290,10 @@ void Qgs3DMapCanvasWidget::measureLine()
mCanvas->setMapTool( action->isChecked() ? mMapToolMeasureLine : nullptr );
}

void Qgs3DMapCanvasWidget::setWindowTitle( const QString &title )
void Qgs3DMapCanvasWidget::setCanvasName( const QString &name )
{
QWidget::setWindowTitle( title );
mDockableWidget->setWindowTitle( title );
mCanvasName = name;
mDockableWidget->setWindowTitle( name );
}

void Qgs3DMapCanvasWidget::toggleNavigationWidget( bool visibility )
Expand Down
6 changes: 4 additions & 2 deletions src/app/3d/qgs3dmapcanvaswidget.h
Expand Up @@ -38,7 +38,7 @@ class APP_EXPORT Qgs3DMapCanvasWidget : public QWidget
{
Q_OBJECT
public:
Qgs3DMapCanvasWidget( bool isDocked );
Qgs3DMapCanvasWidget( const QString &name, bool isDocked );
~Qgs3DMapCanvasWidget();

//! takes ownership
Expand All @@ -54,7 +54,8 @@ class APP_EXPORT Qgs3DMapCanvasWidget : public QWidget

QgsDockableWidgetHelper *dockableWidget() { return mDockableWidget; }

void setWindowTitle( const QString &title );
void setCanvasName( const QString &name );
QString canvasName() const { return mCanvasName; }

signals:
void toggleDockModeRequested( bool docked );
Expand All @@ -81,6 +82,7 @@ class APP_EXPORT Qgs3DMapCanvasWidget : public QWidget
void currentMapThemeRenamed( const QString &theme, const QString &newTheme );

private:
QString mCanvasName;
Qgs3DMapCanvas *mCanvas = nullptr;
Qgs3DAnimationWidget *mAnimationWidget = nullptr;
QgsMapCanvas *mMainCanvas = nullptr;
Expand Down
3 changes: 1 addition & 2 deletions src/app/3d/qgs3dviewsmanagerdialog.cpp
Expand Up @@ -132,8 +132,7 @@ void Qgs3DViewsManagerDialog::renameClicked()

if ( Qgs3DMapCanvasWidget *widget = QgisApp::instance()->get3DMapView( oldTitle ) )
{
widget->setWindowTitle( newTitle );
widget->mapCanvas3D()->setObjectName( newTitle );
widget->setCanvasName( newTitle );
}

QgsProject::instance()->setDirty();
Expand Down
6 changes: 3 additions & 3 deletions src/app/layout/qgslayout3dmapwidget.cpp
Expand Up @@ -39,9 +39,9 @@ void _prepare3DViewsMenu( QMenu *menu, QgsLayout3DMapWidget *w, Func1 slot )
menu->clear();
for ( auto widget : lst )
{
QAction *a = menu->addAction( widget->mapCanvas3D()->objectName(), w, slot );
QAction *a = menu->addAction( widget->canvasName(), 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() );
a->setProperty( "name", widget->objectName() );
}
if ( lst.isEmpty() )
{
Expand All @@ -60,7 +60,7 @@ Qgs3DMapCanvasWidget *_dock3DViewFromSender( QObject *sender )
const QList<Qgs3DMapCanvasWidget *> lst = QgisApp::instance()->get3DMapViews();
for ( auto widget : lst )
{
QString objName = widget->mapCanvas3D()->objectName();
QString objName = widget->canvasName();
if ( objName == actionText )
{
return widget;
Expand Down
17 changes: 7 additions & 10 deletions src/app/qgisapp.cpp
Expand Up @@ -4799,7 +4799,7 @@ void QgisApp::closeAdditional3DMapCanvases()
QSet<Qgs3DMapCanvasWidget *> openDocks = mOpen3DMapViews;
for ( Qgs3DMapCanvasWidget *w : openDocks )
{
close3DMapView( w->windowTitle() );
close3DMapView( w->canvasName() );
}
#endif
}
Expand Down Expand Up @@ -10014,7 +10014,7 @@ Qgs3DMapCanvasWidget *QgisApp::get3DMapView( const QString &viewName )
#ifdef HAVE_3D
for ( Qgs3DMapCanvasWidget *w : mOpen3DMapViews )
{
if ( w->windowTitle() == viewName )
if ( w->canvasName() == viewName )
return w;
}
#else
Expand Down Expand Up @@ -13988,10 +13988,9 @@ void QgisApp::initLayouts()
Qgs3DMapCanvasWidget *QgisApp::createNew3DMapCanvasDock( const QString &name, bool isDocked )
{
#ifdef HAVE_3D
const QList<Qgs3DMapCanvas *> mapCanvases = findChildren<Qgs3DMapCanvas *>();
for ( Qgs3DMapCanvas *canvas : mapCanvases )
for ( Qgs3DMapCanvasWidget *canvas : mOpen3DMapViews )
{
if ( canvas->objectName() == name )
if ( canvas->canvasName() == name )
{
QgsDebugMsg( QStringLiteral( "A map canvas with name '%1' already exists!" ).arg( name ) );
return nullptr;
Expand All @@ -14000,11 +13999,9 @@ Qgs3DMapCanvasWidget *QgisApp::createNew3DMapCanvasDock( const QString &name, bo

markDirty();

Qgs3DMapCanvasWidget *widget = new Qgs3DMapCanvasWidget( isDocked );
Qgs3DMapCanvasWidget *widget = new Qgs3DMapCanvasWidget( name, isDocked );

mOpen3DMapViews.insert( widget );
widget->setWindowTitle( name );
widget->mapCanvas3D()->setObjectName( name );
widget->setMainCanvas( mMapCanvas );
widget->mapCanvas3D()->setTemporalController( mTemporalControllerWidget->temporalController() );

Expand Down Expand Up @@ -16701,7 +16698,7 @@ void QgisApp::write3DMapViewSettings( Qgs3DMapCanvasWidget *widget, QDomDocument
{
QgsReadWriteContext readWriteContext;
readWriteContext.setPathResolver( QgsProject::instance()->pathResolver() );
elem3DMap.setAttribute( QStringLiteral( "name" ), widget->mapCanvas3D()->objectName() );
elem3DMap.setAttribute( QStringLiteral( "name" ), widget->canvasName() );
QDomElement elem3DMapSettings = widget->mapCanvas3D()->map()->writeXml( doc, readWriteContext );
elem3DMap.appendChild( elem3DMapSettings );
QDomElement elemCamera = widget->mapCanvas3D()->cameraController()->writeXml( doc );
Expand Down Expand Up @@ -16835,7 +16832,7 @@ void QgisApp::writeProject( QDomDocument &doc )
QSet<Qgs3DMapCanvasWidget *> openDocks = mOpen3DMapViews;
for ( Qgs3DMapCanvasWidget *widget : openDocks )
{
QString viewName = widget->mapCanvas3D()->objectName();
QString viewName = widget->canvasName();
QDomElement elem3DMap = doc.createElement( QStringLiteral( "view" ) );
elem3DMap.setAttribute( QStringLiteral( "isOpen" ), 1 );
write3DMapViewSettings( widget, doc, elem3DMap );
Expand Down
18 changes: 10 additions & 8 deletions src/app/qgsdockablewidgethelper.cpp
Expand Up @@ -20,12 +20,13 @@

#include <QWidget>

QgsDockableWidgetHelper::QgsDockableWidgetHelper( bool isDocked, QWidget *widget )
: QWidget( nullptr )
QgsDockableWidgetHelper::QgsDockableWidgetHelper( bool isDocked, const QString &windowTitle, QWidget *widget )
: QObject( nullptr )
, mWidget( widget )
, mDialogGeometry( 0, 0, 200, 200 )
, mDockGeometry( QRect() )
, mIsDockFloating( true )
, mWindowTitle( windowTitle )
, mDockArea( Qt::RightDockWidgetArea )
{
toggleDockMode( isDocked );
Expand Down Expand Up @@ -120,7 +121,7 @@ void QgsDockableWidgetHelper::toggleDockMode( bool docked )
{
// going from window -> dock
mDock = new QgsDockWidget( QgisApp::instance() );
mDock->setWindowTitle( this->windowTitle() );
mDock->setWindowTitle( mWindowTitle );
mDock->setWidget( mWidget );
setupDockWidget();

Expand All @@ -129,15 +130,15 @@ void QgsDockableWidgetHelper::toggleDockMode( bool docked )
mDockGeometry = mDock->geometry();
mIsDockFloating = mDock->isFloating();
mDockArea = QgisApp::instance()->dockWidgetArea( mDock );
QgisApp::instance()->close3DMapView( this->windowTitle() );
QgisApp::instance()->close3DMapView( windowTitle() );
} );
}
else
{
// going from dock -> window
mDialog = new QDialog( QgisApp::instance(), Qt::Window );

mDialog->setWindowTitle( this->windowTitle() );
mDialog->setWindowTitle( mWindowTitle );
QVBoxLayout *vl = new QVBoxLayout();
vl->setContentsMargins( 0, 0, 0, 0 );
vl->addWidget( mWidget );
Expand All @@ -148,7 +149,7 @@ void QgsDockableWidgetHelper::toggleDockMode( bool docked )
connect( mDialog, &QDialog::finished, [ = ]()
{
mDialogGeometry = mDialog->geometry();
QgisApp::instance()->close3DMapView( this->windowTitle() );
QgisApp::instance()->close3DMapView( windowTitle() );
} );

mDialog->setGeometry( mDialogGeometry );
Expand All @@ -157,7 +158,8 @@ void QgsDockableWidgetHelper::toggleDockMode( bool docked )

void QgsDockableWidgetHelper::setWindowTitle( const QString &title )
{
QWidget::setWindowTitle( title );
mWindowTitle = title;
qDebug() << __PRETTY_FUNCTION__ << title;
if ( mDialog )
{
mDialog->setWindowTitle( title );
Expand Down Expand Up @@ -221,7 +223,7 @@ void QgsDockableWidgetHelper::setupDockWidget()
if ( mDockGeometry.isEmpty() )
{
// try to guess a nice initial placement for view - about 3/4 along, half way down
mDock->setGeometry( QRect( static_cast< int >( rect().width() * 0.75 ), static_cast< int >( rect().height() * 0.5 ), 400, 400 ) );
mDock->setGeometry( QRect( static_cast< int >( mWidget->rect().width() * 0.75 ), static_cast< int >( mWidget->rect().height() * 0.5 ), 400, 400 ) );
QgisApp::instance()->addDockWidget( mDockArea, mDock );
}
else
Expand Down
7 changes: 5 additions & 2 deletions src/app/qgsdockablewidgethelper.h
Expand Up @@ -26,11 +26,11 @@

class QgsDockWidget;

class APP_EXPORT QgsDockableWidgetHelper : public QWidget
class APP_EXPORT QgsDockableWidgetHelper : public QObject
{
Q_OBJECT
public:
QgsDockableWidgetHelper( bool isDocked, QWidget *widget );
QgsDockableWidgetHelper( bool isDocked, const QString &windowTitle, QWidget *widget );
~QgsDockableWidgetHelper();

void setWidget( QWidget *widget );
Expand All @@ -44,6 +44,7 @@ class APP_EXPORT QgsDockableWidgetHelper : public QWidget
bool isDocked() const;

void setWindowTitle( const QString &title );
QString windowTitle() const { return mWindowTitle; }

void setDialogGeometry( const QRect &geom );
void setDockGeometry( const QRect &geom, bool isFloating, Qt::DockWidgetArea area );
Expand Down Expand Up @@ -72,6 +73,8 @@ class APP_EXPORT QgsDockableWidgetHelper : public QWidget
QRect mDockGeometry;
bool mIsDockFloating;
Qt::DockWidgetArea mDockArea;

QString mWindowTitle;
};

#endif // QGSDOCKABLEWIDGETHELPER_H

0 comments on commit 6c9517d

Please sign in to comment.