Skip to content

Commit f01d8dd

Browse files
author
mhugent
committed
Ask user what template to use if default composer templates are found
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@13283 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 3f860ec commit f01d8dd

File tree

2 files changed

+100
-63
lines changed

2 files changed

+100
-63
lines changed

src/app/composer/qgscomposermanager.cpp

Lines changed: 97 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -51,26 +51,26 @@ void QgsComposerManager::initialize()
5151
item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable );
5252
mItemComposerMap.insert( item, *it );
5353
}
54+
}
55+
56+
QMap<QString, QString> QgsComposerManager::defaultTemplates() const
57+
{
58+
QMap<QString, QString> templateMap;
5459

5560
//search for default templates in $pkgDataPath/composer_templates
5661
QDir defaultTemplateDir( QgsApplication::pkgDataPath() + "/composer_templates" );
5762
if ( !defaultTemplateDir.exists() )
5863
{
59-
return;
64+
return templateMap;
6065
}
6166

62-
QFileInfoList defaultTemplateFiles = defaultTemplateDir.entryInfoList( QDir::Files );
63-
QFileInfoList::const_iterator fileIt = defaultTemplateFiles.constBegin();
64-
65-
for ( ; fileIt != defaultTemplateFiles.constEnd(); ++fileIt )
67+
QFileInfoList fileInfoList = defaultTemplateDir.entryInfoList( QDir::Files );
68+
QFileInfoList::const_iterator infoIt = fileInfoList.constBegin();
69+
for ( ; infoIt != fileInfoList.constEnd(); ++infoIt )
6670
{
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-
}
71+
templateMap.insert( infoIt->baseName(), infoIt->absoluteFilePath() );
7372
}
73+
return templateMap;
7474
}
7575

7676
void QgsComposerManager::on_mAddButton_clicked()
@@ -79,11 +79,56 @@ void QgsComposerManager::on_mAddButton_clicked()
7979
{
8080
return;
8181
}
82-
QgsComposer* newComposer = mQgisApp->createNewComposer();
82+
83+
QMap<QString, QString> templateMap = defaultTemplates();
84+
QString composerTemplate;
85+
QgsComposer* newComposer = 0;
86+
87+
if ( templateMap.size() > 0 )
88+
{
89+
//show template dialog
90+
QStringList templateNameList;
91+
templateNameList.append( tr( "Empty composer" ) );
92+
QMap<QString, QString>::const_iterator templateIt = templateMap.constBegin();
93+
for ( ; templateIt != templateMap.constEnd(); ++templateIt )
94+
{
95+
templateNameList.append( templateIt.key() );
96+
}
97+
98+
QInputDialog templateDialog;
99+
templateDialog.setLabelText( tr( "Select a composer template" ) );
100+
templateDialog.setComboBoxItems( templateNameList );
101+
if ( templateDialog.exec() == QDialog::Rejected )
102+
{
103+
return;
104+
}
105+
106+
QMap<QString, QString>::const_iterator selectedTemplate = templateMap.find( templateDialog.textValue() );
107+
if ( selectedTemplate != templateMap.constEnd() )
108+
{
109+
composerTemplate = selectedTemplate.value();
110+
}
111+
}
112+
113+
newComposer = mQgisApp->createNewComposer();
83114
if ( !newComposer )
84115
{
85116
return;
86117
}
118+
119+
if ( !composerTemplate.isEmpty() ) //create composer from template
120+
{
121+
QDomDocument templateDoc;
122+
QFile templateFile( composerTemplate );
123+
if ( templateFile.open( QIODevice::ReadOnly ) )
124+
{
125+
if ( templateDoc.setContent( &templateFile, false ) )
126+
{
127+
newComposer->readXML( templateDoc );
128+
}
129+
}
130+
}
131+
87132
QListWidgetItem* item = new QListWidgetItem( newComposer->title(), mComposerListWidget );
88133
item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable );
89134
mItemComposerMap.insert( item, newComposer );
@@ -140,45 +185,55 @@ void QgsComposerManager::on_mShowPushButton_clicked()
140185
if ( it.value() ) //a normal composer
141186
{
142187
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() );
166188
if ( c )
167189
{
168-
c->readXML( templateDoc );
169-
mItemComposerMap.insert( it.key(), c );
190+
c->show();
191+
c->activate();
192+
c->stackUnder( this );
193+
raise();
194+
activateWindow();
170195
}
171196
}
197+
}
198+
#if 0
199+
else //create composer from default template
200+
{
201+
QMap<QString, QString>::const_iterator templateIt = mDefaultTemplateMap.find( it.key()->text() );
202+
if ( templateIt == mDefaultTemplateMap.constEnd() )
203+
{
204+
return;
205+
}
206+
207+
QDomDocument templateDoc;
208+
QFile templateFile( templateIt.value() );
209+
if ( !templateFile.open( QIODevice::ReadOnly ) )
210+
{
211+
return;
212+
}
172213

214+
if ( !templateDoc.setContent( &templateFile, false ) )
215+
{
216+
return;
217+
}
218+
c = mQgisApp->createNewComposer();
219+
c->setTitle( it.key()->text() );
173220
if ( c )
174221
{
175-
c->show();
176-
c->activate();
177-
c->stackUnder( this );
178-
raise();
179-
activateWindow();
222+
c->readXML( templateDoc );
223+
mItemComposerMap.insert( it.key(), c );
180224
}
181225
}
226+
227+
if ( c )
228+
{
229+
c->show();
230+
c->activate();
231+
c->stackUnder( this );
232+
raise();
233+
activateWindow();
234+
}
235+
}
236+
#endif //0
182237
}
183238

184239
void QgsComposerManager::on_mRenamePushButton_clicked()
@@ -218,21 +273,3 @@ void QgsComposerManager::on_mComposerListWidget_itemChanged( QListWidgetItem * i
218273
it.value()->setTitle( item->text() );
219274
}
220275
}
221-
222-
void QgsComposerManager::on_mComposerListWidget_currentItemChanged( QListWidgetItem* current, QListWidgetItem* previous )
223-
{
224-
if ( !current )
225-
{
226-
return;
227-
}
228-
if ( mDefaultTemplateMap.contains( current->text() ) )
229-
{
230-
mRenamePushButton->setEnabled( false );
231-
mRemoveButton->setEnabled( false );
232-
}
233-
else
234-
{
235-
mRenamePushButton->setEnabled( true );
236-
mRemoveButton->setEnabled( true );
237-
}
238-
}

src/app/composer/qgscomposermanager.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,19 +38,19 @@ class QgsComposerManager: public QDialog, private Ui::QgsComposerManagerBase
3838
/**Stores the relation between items and composer pointers. A 0 pointer for the composer means that
3939
this composer needs to be created from a default template*/
4040
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;
4341

4442
/**Enters the composer instances and created the item-composer map*/
4543
void initialize();
4644

45+
/**Returns the default templates (key: template name, value: absolute path to template file)*/
46+
QMap<QString, QString> defaultTemplates() const;
47+
4748
private slots:
4849
void on_mAddButton_clicked();
4950
void on_mRemoveButton_clicked();
5051
void on_mShowPushButton_clicked();
5152
void on_mRenamePushButton_clicked();
5253
void on_mComposerListWidget_itemChanged( QListWidgetItem * item );
53-
void on_mComposerListWidget_currentItemChanged( QListWidgetItem* current, QListWidgetItem* previous );
5454
};
5555

5656
#endif // QGSCOMPOSERMANAGER_H

0 commit comments

Comments
 (0)