Skip to content

Commit

Permalink
Auto generated names for reports are 'Report #'
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Jan 5, 2018
1 parent b184c5e commit 3ac2141
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 12 deletions.
4 changes: 2 additions & 2 deletions python/core/composer/qgslayoutmanager.sip
Expand Up @@ -161,9 +161,9 @@ Generates a unique title for a new composition, which does not
clash with any already contained by the manager. clash with any already contained by the manager.
%End %End


QString generateUniqueTitle() const; QString generateUniqueTitle( QgsMasterLayoutInterface::Type type = QgsMasterLayoutInterface::PrintLayout ) const;
%Docstring %Docstring
Generates a unique title for a new layout, which does not Generates a unique title for a new layout of the specified ``type``, which does not
clash with any already contained by the manager. clash with any already contained by the manager.
%End %End


Expand Down
4 changes: 2 additions & 2 deletions src/app/layout/qgslayoutmanagerdialog.cpp
Expand Up @@ -249,7 +249,7 @@ void QgsLayoutManagerDialog::mAddButton_clicked()


if ( title.isEmpty() ) if ( title.isEmpty() )
{ {
title = QgsProject::instance()->layoutManager()->generateUniqueTitle(); title = QgsProject::instance()->layoutManager()->generateUniqueTitle( QgsMasterLayoutInterface::PrintLayout );
} }


std::unique_ptr< QgsPrintLayout > layout = qgis::make_unique< QgsPrintLayout >( QgsProject::instance() ); std::unique_ptr< QgsPrintLayout > layout = qgis::make_unique< QgsPrintLayout >( QgsProject::instance() );
Expand Down Expand Up @@ -302,7 +302,7 @@ void QgsLayoutManagerDialog::createReport()


if ( title.isEmpty() ) if ( title.isEmpty() )
{ {
title = QgsProject::instance()->layoutManager()->generateUniqueTitle(); title = QgsProject::instance()->layoutManager()->generateUniqueTitle( QgsMasterLayoutInterface::Report );
} }


std::unique_ptr< QgsReport > report = qgis::make_unique< QgsReport >( QgsProject::instance() ); std::unique_ptr< QgsReport > report = qgis::make_unique< QgsReport >( QgsProject::instance() );
Expand Down
4 changes: 2 additions & 2 deletions src/app/qgisapp.cpp
Expand Up @@ -7392,7 +7392,7 @@ bool QgisApp::uniqueLayoutTitle( QWidget *parent, QString &title, bool acceptEmp
else else
{ {
titleValid = true; titleValid = true;
newTitle = QgsProject::instance()->layoutManager()->generateUniqueTitle(); newTitle = QgsProject::instance()->layoutManager()->generateUniqueTitle( type );
} }
} }
else if ( layoutNames.indexOf( newTitle, 1 ) >= 0 ) else if ( layoutNames.indexOf( newTitle, 1 ) >= 0 )
Expand Down Expand Up @@ -7461,7 +7461,7 @@ QgsLayoutDesignerDialog *QgisApp::createNewLayout( QString title )
{ {
if ( title.isEmpty() ) if ( title.isEmpty() )
{ {
title = QgsProject::instance()->layoutManager()->generateUniqueTitle(); title = QgsProject::instance()->layoutManager()->generateUniqueTitle( QgsMasterLayoutInterface::PrintLayout );
} }
//create new layout object //create new layout object
QgsPrintLayout *layout = new QgsPrintLayout( QgsProject::instance() ); QgsPrintLayout *layout = new QgsPrintLayout( QgsProject::instance() );
Expand Down
12 changes: 10 additions & 2 deletions src/core/composer/qgslayoutmanager.cpp
Expand Up @@ -355,7 +355,7 @@ QString QgsLayoutManager::generateUniqueComposerTitle() const
return name; return name;
} }


QString QgsLayoutManager::generateUniqueTitle() const QString QgsLayoutManager::generateUniqueTitle( QgsMasterLayoutInterface::Type type ) const
{ {
QStringList names; QStringList names;
for ( QgsMasterLayoutInterface *l : mLayouts ) for ( QgsMasterLayoutInterface *l : mLayouts )
Expand All @@ -366,7 +366,15 @@ QString QgsLayoutManager::generateUniqueTitle() const
int id = 1; int id = 1;
while ( name.isEmpty() || names.contains( name ) ) while ( name.isEmpty() || names.contains( name ) )
{ {
name = tr( "Layout %1" ).arg( id ); switch ( type )
{
case QgsMasterLayoutInterface::PrintLayout:
name = tr( "Layout %1" ).arg( id );
break;
case QgsMasterLayoutInterface::Report:
name = tr( "Report %1" ).arg( id );
break;
}
id++; id++;
} }
return name; return name;
Expand Down
4 changes: 2 additions & 2 deletions src/core/composer/qgslayoutmanager.h
Expand Up @@ -161,10 +161,10 @@ class CORE_EXPORT QgsLayoutManager : public QObject
QString generateUniqueComposerTitle() const; QString generateUniqueComposerTitle() const;


/** /**
* Generates a unique title for a new layout, which does not * Generates a unique title for a new layout of the specified \a type, which does not
* clash with any already contained by the manager. * clash with any already contained by the manager.
*/ */
QString generateUniqueTitle() const; QString generateUniqueTitle( QgsMasterLayoutInterface::Type type = QgsMasterLayoutInterface::PrintLayout ) const;


signals: signals:


Expand Down
15 changes: 13 additions & 2 deletions tests/src/python/test_qgslayoutmanager.py
Expand Up @@ -19,7 +19,9 @@
from qgis.core import (QgsComposition, from qgis.core import (QgsComposition,
QgsPrintLayout, QgsPrintLayout,
QgsLayoutManager, QgsLayoutManager,
QgsProject) QgsProject,
QgsReport,
QgsMasterLayoutInterface)


from qgis.testing import start_app, unittest from qgis.testing import start_app, unittest
from utilities import unitTestDataPath from utilities import unitTestDataPath
Expand Down Expand Up @@ -375,20 +377,29 @@ def testDuplicateComposition(self):
def testGenerateUniqueTitle(self): def testGenerateUniqueTitle(self):
project = QgsProject() project = QgsProject()
manager = QgsLayoutManager(project) manager = QgsLayoutManager(project)
self.assertEqual(manager.generateUniqueTitle(), 'Layout 1') self.assertEqual(manager.generateUniqueTitle(QgsMasterLayoutInterface.PrintLayout), 'Layout 1')
self.assertEqual(manager.generateUniqueTitle(QgsMasterLayoutInterface.Report), 'Report 1')


layout = QgsPrintLayout(project) layout = QgsPrintLayout(project)
layout.setName(manager.generateUniqueTitle()) layout.setName(manager.generateUniqueTitle())
manager.addLayout(layout) manager.addLayout(layout)


self.assertEqual(manager.generateUniqueTitle(), 'Layout 2') self.assertEqual(manager.generateUniqueTitle(), 'Layout 2')
self.assertEqual(manager.generateUniqueTitle(QgsMasterLayoutInterface.Report), 'Report 1')
layout2 = QgsPrintLayout(project) layout2 = QgsPrintLayout(project)
layout2.setName(manager.generateUniqueTitle()) layout2.setName(manager.generateUniqueTitle())
manager.addLayout(layout2) manager.addLayout(layout2)


self.assertEqual(manager.generateUniqueTitle(), 'Layout 3') self.assertEqual(manager.generateUniqueTitle(), 'Layout 3')

report1 = QgsReport(project)
report1.setName(manager.generateUniqueTitle(QgsMasterLayoutInterface.Report))
manager.addLayout(report1)
self.assertEqual(manager.generateUniqueTitle(QgsMasterLayoutInterface.Report), 'Report 2')

manager.clear() manager.clear()
self.assertEqual(manager.generateUniqueTitle(), 'Layout 1') self.assertEqual(manager.generateUniqueTitle(), 'Layout 1')
self.assertEqual(manager.generateUniqueTitle(QgsMasterLayoutInterface.Report), 'Report 1')


def testRenameSignalCompositions(self): def testRenameSignalCompositions(self):
project = QgsProject() project = QgsProject()
Expand Down

0 comments on commit 3ac2141

Please sign in to comment.