mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-17 00:04:02 -04:00
[composer] Move code for creating groups to QgsComposition
Previously this code was located in QgsComposerView. Moving it to QgsComposition simplifies grouping items for plugins. Also start a new unit test for QgsComposerItemGroup.
This commit is contained in:
parent
71fbe9c9ce
commit
993f0dcd3d
@ -407,6 +407,13 @@ class QgsComposition : QGraphicsScene
|
|||||||
void lockSelectedItems();
|
void lockSelectedItems();
|
||||||
/**Unlock all items*/
|
/**Unlock all items*/
|
||||||
void unlockAllItems();
|
void unlockAllItems();
|
||||||
|
|
||||||
|
/**Creates a new group from a list of composer items and adds it to the composition.
|
||||||
|
* @param items items to include in group
|
||||||
|
* @returns QgsComposerItemGroup of grouped items, if grouping was possible
|
||||||
|
* @note added in QGIS 2.6
|
||||||
|
*/
|
||||||
|
QgsComposerItemGroup* groupItems( QList<QgsComposerItem*> items );
|
||||||
|
|
||||||
/**Sorts the zList. The only time where this function needs to be called is from QgsComposer
|
/**Sorts the zList. The only time where this function needs to be called is from QgsComposer
|
||||||
* after reading all the items from xml file
|
* after reading all the items from xml file
|
||||||
@ -521,7 +528,10 @@ class QgsComposition : QGraphicsScene
|
|||||||
QImage printPageAsRaster( int page );
|
QImage printPageAsRaster( int page );
|
||||||
|
|
||||||
/**Render a page to a paint device
|
/**Render a page to a paint device
|
||||||
@note added in version 1.9*/
|
* @param p destination painter
|
||||||
|
* @param page page number, 0 based such that the first page is page 0
|
||||||
|
* @note added in version 1.9
|
||||||
|
*/
|
||||||
void renderPage( QPainter* p, int page );
|
void renderPage( QPainter* p, int page );
|
||||||
|
|
||||||
/** Compute world file parameters */
|
/** Compute world file parameters */
|
||||||
|
@ -1791,6 +1791,26 @@ void QgsComposition::unlockAllItems()
|
|||||||
QgsProject::instance()->dirty( true );
|
QgsProject::instance()->dirty( true );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QgsComposerItemGroup *QgsComposition::groupItems( QList<QgsComposerItem *> items )
|
||||||
|
{
|
||||||
|
if ( items.size() < 2 )
|
||||||
|
{
|
||||||
|
//not enough items for a group
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
QgsComposerItemGroup* itemGroup = new QgsComposerItemGroup( this );
|
||||||
|
|
||||||
|
QList<QgsComposerItem*>::iterator itemIter = items.begin();
|
||||||
|
for ( ; itemIter != items.end(); ++itemIter )
|
||||||
|
{
|
||||||
|
itemGroup->addItem( *itemIter );
|
||||||
|
}
|
||||||
|
|
||||||
|
addItem( itemGroup );
|
||||||
|
return itemGroup;
|
||||||
|
}
|
||||||
|
|
||||||
void QgsComposition::updateZValues( const bool addUndoCommands )
|
void QgsComposition::updateZValues( const bool addUndoCommands )
|
||||||
{
|
{
|
||||||
int counter = mItemsModel->zOrderListSize();
|
int counter = mItemsModel->zOrderListSize();
|
||||||
|
@ -47,6 +47,7 @@ class QgsComposerMouseHandles;
|
|||||||
class QgsComposerHtml;
|
class QgsComposerHtml;
|
||||||
class QgsComposerTableV2;
|
class QgsComposerTableV2;
|
||||||
class QgsComposerItem;
|
class QgsComposerItem;
|
||||||
|
class QgsComposerItemGroup;
|
||||||
class QgsComposerLabel;
|
class QgsComposerLabel;
|
||||||
class QgsComposerLegend;
|
class QgsComposerLegend;
|
||||||
class QgsComposerMap;
|
class QgsComposerMap;
|
||||||
@ -470,6 +471,13 @@ class CORE_EXPORT QgsComposition : public QGraphicsScene
|
|||||||
/**Unlock all items*/
|
/**Unlock all items*/
|
||||||
void unlockAllItems();
|
void unlockAllItems();
|
||||||
|
|
||||||
|
/**Creates a new group from a list of composer items and adds it to the composition.
|
||||||
|
* @param items items to include in group
|
||||||
|
* @returns QgsComposerItemGroup of grouped items, if grouping was possible
|
||||||
|
* @note adde in QGIS 2.6
|
||||||
|
*/
|
||||||
|
QgsComposerItemGroup* groupItems( QList<QgsComposerItem*> items );
|
||||||
|
|
||||||
/**Sorts the zList. The only time where this function needs to be called is from QgsComposer
|
/**Sorts the zList. The only time where this function needs to be called is from QgsComposer
|
||||||
* after reading all the items from xml file
|
* after reading all the items from xml file
|
||||||
* @deprecated use refreshZList instead
|
* @deprecated use refreshZList instead
|
||||||
@ -583,7 +591,9 @@ class CORE_EXPORT QgsComposition : public QGraphicsScene
|
|||||||
QImage printPageAsRaster( int page );
|
QImage printPageAsRaster( int page );
|
||||||
|
|
||||||
/**Render a page to a paint device
|
/**Render a page to a paint device
|
||||||
@note added in version 1.9*/
|
* @param p destination painter
|
||||||
|
* @param page page number, 0 based such that the first page is page 0
|
||||||
|
* @note added in version 1.9*/
|
||||||
void renderPage( QPainter* p, int page );
|
void renderPage( QPainter* p, int page );
|
||||||
|
|
||||||
/** Compute world file parameters */
|
/** Compute world file parameters */
|
||||||
|
@ -1777,20 +1777,16 @@ void QgsComposerView::groupItems()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//group selected items
|
||||||
QList<QgsComposerItem*> selectionList = composition()->selectedComposerItems();
|
QList<QgsComposerItem*> selectionList = composition()->selectedComposerItems();
|
||||||
if ( selectionList.size() < 2 )
|
QgsComposerItemGroup* itemGroup = composition()->groupItems( selectionList );
|
||||||
{
|
|
||||||
return; //not enough items for a group
|
|
||||||
}
|
|
||||||
QgsComposerItemGroup* itemGroup = new QgsComposerItemGroup( composition() );
|
|
||||||
|
|
||||||
QList<QgsComposerItem*>::iterator itemIter = selectionList.begin();
|
if ( !itemGroup )
|
||||||
for ( ; itemIter != selectionList.end(); ++itemIter )
|
|
||||||
{
|
{
|
||||||
itemGroup->addItem( *itemIter );
|
//group could not be created
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
composition()->addItem( itemGroup );
|
|
||||||
itemGroup->setSelected( true );
|
itemGroup->setSelected( true );
|
||||||
emit selectedItemChanged( itemGroup );
|
emit selectedItemChanged( itemGroup );
|
||||||
}
|
}
|
||||||
|
@ -111,6 +111,7 @@ ADD_QGIS_TEST(composerutils testqgscomposerutils.cpp)
|
|||||||
ADD_QGIS_TEST(compositiontest testqgscomposition.cpp)
|
ADD_QGIS_TEST(compositiontest testqgscomposition.cpp)
|
||||||
ADD_QGIS_TEST(composermodel testqgscomposermodel.cpp)
|
ADD_QGIS_TEST(composermodel testqgscomposermodel.cpp)
|
||||||
ADD_QGIS_TEST(composermultiframetest testqgscomposermultiframe.cpp)
|
ADD_QGIS_TEST(composermultiframetest testqgscomposermultiframe.cpp)
|
||||||
|
ADD_QGIS_TEST(composergrouptest testqgscomposergroup.cpp)
|
||||||
ADD_QGIS_TEST(composerpapertest testqgscomposerpaper.cpp)
|
ADD_QGIS_TEST(composerpapertest testqgscomposerpaper.cpp)
|
||||||
ADD_QGIS_TEST(composermaptest testqgscomposermap.cpp)
|
ADD_QGIS_TEST(composermaptest testqgscomposermap.cpp)
|
||||||
ADD_QGIS_TEST(composermapgridtest testqgscomposermapgrid.cpp)
|
ADD_QGIS_TEST(composermapgridtest testqgscomposermapgrid.cpp)
|
||||||
|
116
tests/src/core/testqgscomposergroup.cpp
Normal file
116
tests/src/core/testqgscomposergroup.cpp
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
testqgscomposergroup.cpp
|
||||||
|
-----------------------
|
||||||
|
begin : October 2014
|
||||||
|
copyright : (C) 2014 by Nyall Dawson
|
||||||
|
email : nyall dot dawson at gmail dot com
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "qgscomposeritemgroup.h"
|
||||||
|
#include "qgscomposerlabel.h"
|
||||||
|
#include "qgscomposition.h"
|
||||||
|
#include "qgscompositionchecker.h"
|
||||||
|
#include <QObject>
|
||||||
|
#include <QtTest>
|
||||||
|
|
||||||
|
class TestQgsComposerGroup: public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT;
|
||||||
|
private slots:
|
||||||
|
void initTestCase();// will be called before the first testfunction is executed.
|
||||||
|
void cleanupTestCase();// will be called after the last testfunction was executed.
|
||||||
|
void init();// will be called before each testfunction is executed.
|
||||||
|
void cleanup();// will be called after every testfunction.
|
||||||
|
void createGroup(); //test grouping items
|
||||||
|
void ungroup(); //test ungrouping items
|
||||||
|
void deleteGroup(); //test deleting group works
|
||||||
|
void undoRedo(); //test that group/ungroup undo/redo commands don't crash
|
||||||
|
|
||||||
|
private:
|
||||||
|
QgsComposition* mComposition;
|
||||||
|
QgsMapSettings mMapSettings;
|
||||||
|
QgsComposerLabel* mItem1;
|
||||||
|
QgsComposerLabel* mItem2;
|
||||||
|
QString mReport;
|
||||||
|
};
|
||||||
|
|
||||||
|
void TestQgsComposerGroup::initTestCase()
|
||||||
|
{
|
||||||
|
mComposition = new QgsComposition( mMapSettings );
|
||||||
|
mComposition->setPaperSize( 297, 210 ); //A4 landscape
|
||||||
|
|
||||||
|
//create some items
|
||||||
|
mItem1 = new QgsComposerLabel( mComposition );
|
||||||
|
mComposition->addItem( mItem1 );
|
||||||
|
mItem2 = new QgsComposerLabel( mComposition );
|
||||||
|
mComposition->addItem( mItem2 );
|
||||||
|
|
||||||
|
mReport = "<h1>Composer Grouped Item Tests</h1>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
void TestQgsComposerGroup::cleanupTestCase()
|
||||||
|
{
|
||||||
|
delete mComposition;
|
||||||
|
|
||||||
|
QString myReportFile = QDir::tempPath() + QDir::separator() + "qgistest.html";
|
||||||
|
QFile myFile( myReportFile );
|
||||||
|
if ( myFile.open( QIODevice::WriteOnly | QIODevice::Append ) )
|
||||||
|
{
|
||||||
|
QTextStream myQTextStream( &myFile );
|
||||||
|
myQTextStream << mReport;
|
||||||
|
myFile.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TestQgsComposerGroup::init()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void TestQgsComposerGroup::cleanup()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void TestQgsComposerGroup::createGroup()
|
||||||
|
{
|
||||||
|
//group items
|
||||||
|
QList<QgsComposerItem*> items;
|
||||||
|
items << mItem1 << mItem2;
|
||||||
|
QgsComposerItemGroup* group = mComposition->groupItems( items );
|
||||||
|
|
||||||
|
//check result
|
||||||
|
QVERIFY( group );
|
||||||
|
QCOMPARE( group->items().size(), 2 );
|
||||||
|
QVERIFY( group->items().contains( mItem1 ) );
|
||||||
|
QVERIFY( group->items().contains( mItem2 ) );
|
||||||
|
QVERIFY( mItem1->isGroupMember() );
|
||||||
|
QVERIFY( mItem2->isGroupMember() );
|
||||||
|
}
|
||||||
|
|
||||||
|
void TestQgsComposerGroup::ungroup()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void TestQgsComposerGroup::deleteGroup()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void TestQgsComposerGroup::undoRedo()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
QTEST_MAIN( TestQgsComposerGroup )
|
||||||
|
#include "moc_testqgscomposergroup.cxx"
|
Loading…
x
Reference in New Issue
Block a user