Skip to content

Commit bca3f68

Browse files
author
mhugent
committed
[FEATURE]: implement possibility to place a set of default composer templates in pkgDataPath/composer_templates
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@13228 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent dc0e381 commit bca3f68

File tree

3 files changed

+85
-8
lines changed

3 files changed

+85
-8
lines changed

src/app/composer/qgscomposer.cpp

+1-3
Original file line numberDiff line numberDiff line change
@@ -903,9 +903,6 @@ void QgsComposer::on_mActionLoadFromTemplate_triggered()
903903

904904
deleteItems();
905905
readXML( templateDocument );
906-
907-
//clean up after template read (e.g. legend and map extent)
908-
cleanupAfterTemplateRead();
909906
}
910907

911908
void QgsComposer::on_mActionMoveItemContent_triggered()
@@ -1103,6 +1100,7 @@ void QgsComposer::readXML( const QDomDocument& doc )
11031100
return;
11041101
}
11051102
readXML( composerNodeList.at( 0 ).toElement(), doc, true );
1103+
cleanupAfterTemplateRead();
11061104
}
11071105

11081106
void QgsComposer::readXML( const QDomElement& composerElem, const QDomDocument& doc, bool fromTemplate )

src/app/composer/qgscomposermanager.cpp

+78-4
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@
1616

1717
#include "qgscomposermanager.h"
1818
#include "qgisapp.h"
19+
#include "qgsapplication.h"
1920
#include "qgscomposer.h"
21+
#include "qgslogger.h"
22+
#include <QDir>
2023
#include <QInputDialog>
2124
#include <QListWidgetItem>
2225
#include <QMessageBox>
@@ -48,6 +51,26 @@ void QgsComposerManager::initialize()
4851
item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable );
4952
mItemComposerMap.insert( item, *it );
5053
}
54+
55+
//search for default templates in $pkgDataPath/composer_templates
56+
QDir defaultTemplateDir( QgsApplication::pkgDataPath() + "/composer_templates" );
57+
if ( !defaultTemplateDir.exists() )
58+
{
59+
return;
60+
}
61+
62+
QFileInfoList defaultTemplateFiles = defaultTemplateDir.entryInfoList( QDir::Files );
63+
QFileInfoList::const_iterator fileIt = defaultTemplateFiles.constBegin();
64+
65+
for ( ; fileIt != defaultTemplateFiles.constEnd(); ++fileIt )
66+
{
67+
mDefaultTemplateMap.insert( fileIt->baseName(), fileIt->absoluteFilePath() );
68+
if ( mComposerListWidget->findItems( fileIt->baseName(), Qt::MatchExactly ).size() < 1 )
69+
{
70+
QListWidgetItem* item = new QListWidgetItem( fileIt->baseName(), mComposerListWidget );
71+
mItemComposerMap.insert( item, 0 );
72+
}
73+
}
5174
}
5275

5376
void QgsComposerManager::on_mAddButton_clicked()
@@ -110,13 +133,48 @@ void QgsComposerManager::on_mShowPushButton_clicked()
110133
return;
111134
}
112135

113-
//delete composer
114136
QMap<QListWidgetItem*, QgsComposer*>::iterator it = mItemComposerMap.find( item );
115137
if ( it != mItemComposerMap.end() )
116138
{
117-
it.value()->show();
118-
it.value()->activate();
119-
it.value()->stackUnder( this );
139+
QgsComposer* c = 0;
140+
if ( it.value() ) //a normal composer
141+
{
142+
c = it.value();
143+
it.value()->show();
144+
}
145+
else //create composer from default template
146+
{
147+
QMap<QString, QString>::const_iterator templateIt = mDefaultTemplateMap.find( it.key()->text() );
148+
if ( templateIt == mDefaultTemplateMap.constEnd() )
149+
{
150+
return;
151+
}
152+
153+
QDomDocument templateDoc;
154+
QFile templateFile( templateIt.value() );
155+
if ( !templateFile.open( QIODevice::ReadOnly ) )
156+
{
157+
return;
158+
}
159+
160+
if ( !templateDoc.setContent( &templateFile, false ) )
161+
{
162+
return;
163+
}
164+
c = mQgisApp->createNewComposer();
165+
c->setTitle( it.key()->text() );
166+
if ( c )
167+
{
168+
c->readXML( templateDoc );
169+
}
170+
}
171+
172+
if ( c )
173+
{
174+
c->show();
175+
c->activate();
176+
c->stackUnder( this );
177+
}
120178
}
121179
}
122180

@@ -157,3 +215,19 @@ void QgsComposerManager::on_mComposerListWidget_itemChanged( QListWidgetItem * i
157215
it.value()->setTitle( item->text() );
158216
}
159217
}
218+
219+
void QgsComposerManager::on_mComposerListWidget_currentItemChanged( QListWidgetItem* current, QListWidgetItem* previous )
220+
{
221+
if ( !current )
222+
{
223+
return;
224+
}
225+
if ( mDefaultTemplateMap.contains( current->text() ) )
226+
{
227+
mRenamePushButton->setEnabled( false );
228+
}
229+
else
230+
{
231+
mRenamePushButton->setEnabled( true );
232+
}
233+
}

src/app/composer/qgscomposermanager.h

+6-1
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,12 @@ class QgsComposerManager: public QDialog, private Ui::QgsComposerManagerBase
3535

3636
private:
3737
QgisApp* mQgisApp;
38-
/**Stores the relation between items and composer pointers */
38+
/**Stores the relation between items and composer pointers. A 0 pointer for the composer means that
39+
this composer needs to be created from a default template*/
3940
QMap<QListWidgetItem*, QgsComposer*> mItemComposerMap;
41+
/**Key: name of the default template (=filename without suffix). Value: absolute path of the template*/
42+
QMap<QString, QString > mDefaultTemplateMap;
43+
4044
/**Enters the composer instances and created the item-composer map*/
4145
void initialize();
4246

@@ -46,6 +50,7 @@ class QgsComposerManager: public QDialog, private Ui::QgsComposerManagerBase
4650
void on_mShowPushButton_clicked();
4751
void on_mRenamePushButton_clicked();
4852
void on_mComposerListWidget_itemChanged( QListWidgetItem * item );
53+
void on_mComposerListWidget_currentItemChanged( QListWidgetItem* current, QListWidgetItem* previous );
4954
};
5055

5156
#endif // QGSCOMPOSERMANAGER_H

0 commit comments

Comments
 (0)