@@ -41,6 +41,8 @@ QgsComposerManager::QgsComposerManager( QWidget * parent, Qt::WindowFlags f ): Q
4141 QSettings settings;
4242 restoreGeometry ( settings.value ( " /Windows/ComposerManager/geometry" ).toByteArray () );
4343
44+ mComposerListWidget ->setItemDelegate ( new QgsComposerNameDelegate ( mComposerListWidget ) );
45+
4446 connect ( mButtonBox , SIGNAL ( rejected () ), this , SLOT ( close () ) );
4547 connect ( QgisApp::instance (), SIGNAL ( composerAdded ( QgsComposerView* ) ), this , SLOT ( refreshComposers () ) );
4648 connect ( QgisApp::instance (), SIGNAL ( composerRemoved ( QgsComposerView* ) ), this , SLOT ( refreshComposers () ) );
@@ -487,3 +489,61 @@ void QgsComposerManager::on_mComposerListWidget_itemChanged( QListWidgetItem * i
487489 }
488490 mComposerListWidget ->sortItems ();
489491}
492+
493+
494+ //
495+ // QgsComposerNameDelegate
496+ //
497+
498+ QgsComposerNameDelegate::QgsComposerNameDelegate ( QObject *parent )
499+ : QItemDelegate( parent )
500+ {
501+
502+ }
503+
504+ QWidget *QgsComposerNameDelegate::createEditor ( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const
505+ {
506+ Q_UNUSED ( option );
507+ Q_UNUSED ( index );
508+
509+ // create a line edit
510+ QLineEdit *lineEdit = new QLineEdit ( parent );
511+ return lineEdit;
512+ }
513+
514+ void QgsComposerNameDelegate::setEditorData ( QWidget *editor, const QModelIndex &index ) const
515+ {
516+ QString text = index.model ()->data ( index, Qt::EditRole ).toString ();
517+ QLineEdit *lineEdit = static_cast <QLineEdit*>( editor );
518+ lineEdit->setText ( text );
519+ }
520+
521+ void QgsComposerNameDelegate::setModelData ( QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const
522+ {
523+ QLineEdit *lineEdit = static_cast <QLineEdit*>( editor );
524+ QString value = lineEdit->text ();
525+
526+ // has name changed?
527+ bool changed = model->data ( index, Qt::EditRole ).toString () != value;
528+
529+ // check if name already exists
530+ QStringList cNames;
531+ foreach ( QgsComposer* c, QgisApp::instance ()->printComposers () )
532+ {
533+ cNames << c->title ();
534+ }
535+ if ( changed && cNames.contains ( value ) )
536+ {
537+ // name exists!
538+ QMessageBox::warning ( 0 , tr ( " Rename composer" ), tr ( " There is already a composer named \" %1\" " ).arg ( value ) );
539+ return ;
540+ }
541+
542+ model->setData ( index, QVariant ( value ), Qt::EditRole );
543+ }
544+
545+ void QgsComposerNameDelegate::updateEditorGeometry ( QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index ) const
546+ {
547+ Q_UNUSED ( index );
548+ editor->setGeometry ( option.rect );
549+ }
0 commit comments