@@ -51,26 +51,26 @@ void QgsComposerManager::initialize()
51
51
item->setFlags ( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable );
52
52
mItemComposerMap .insert ( item, *it );
53
53
}
54
+ }
55
+
56
+ QMap<QString, QString> QgsComposerManager::defaultTemplates () const
57
+ {
58
+ QMap<QString, QString> templateMap;
54
59
55
60
// search for default templates in $pkgDataPath/composer_templates
56
61
QDir defaultTemplateDir ( QgsApplication::pkgDataPath () + " /composer_templates" );
57
62
if ( !defaultTemplateDir.exists () )
58
63
{
59
- return ;
64
+ return templateMap ;
60
65
}
61
66
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 )
66
70
{
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 () );
73
72
}
73
+ return templateMap;
74
74
}
75
75
76
76
void QgsComposerManager::on_mAddButton_clicked ()
@@ -79,11 +79,56 @@ void QgsComposerManager::on_mAddButton_clicked()
79
79
{
80
80
return ;
81
81
}
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 ();
83
114
if ( !newComposer )
84
115
{
85
116
return ;
86
117
}
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
+
87
132
QListWidgetItem* item = new QListWidgetItem ( newComposer->title (), mComposerListWidget );
88
133
item->setFlags ( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable );
89
134
mItemComposerMap .insert ( item, newComposer );
@@ -140,45 +185,55 @@ void QgsComposerManager::on_mShowPushButton_clicked()
140
185
if ( it.value () ) // a normal composer
141
186
{
142
187
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
188
if ( c )
167
189
{
168
- c->readXML ( templateDoc );
169
- mItemComposerMap .insert ( it.key (), c );
190
+ c->show ();
191
+ c->activate ();
192
+ c->stackUnder ( this );
193
+ raise ();
194
+ activateWindow ();
170
195
}
171
196
}
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
+ }
172
213
214
+ if ( !templateDoc.setContent( &templateFile, false ) )
215
+ {
216
+ return;
217
+ }
218
+ c = mQgisApp->createNewComposer();
219
+ c->setTitle( it.key()->text() );
173
220
if ( c )
174
221
{
175
- c->show ();
176
- c->activate ();
177
- c->stackUnder ( this );
178
- raise ();
179
- activateWindow ();
222
+ c->readXML( templateDoc );
223
+ mItemComposerMap.insert( it.key(), c );
180
224
}
181
225
}
226
+
227
+ if ( c )
228
+ {
229
+ c->show();
230
+ c->activate();
231
+ c->stackUnder( this );
232
+ raise();
233
+ activateWindow();
234
+ }
235
+ }
236
+ #endif // 0
182
237
}
183
238
184
239
void QgsComposerManager::on_mRenamePushButton_clicked ()
@@ -218,21 +273,3 @@ void QgsComposerManager::on_mComposerListWidget_itemChanged( QListWidgetItem * i
218
273
it.value ()->setTitle ( item->text () );
219
274
}
220
275
}
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
- }
0 commit comments