19 #include <QPushButton> 20 #include <QRegExpValidator> 21 #include <QSizePolicy> 27 const QStringList &extensions,
const QStringList &existing,
28 const QRegExp ®exp, Qt::CaseSensitivity cs,
29 QWidget *parent, Qt::WindowFlags flags )
30 :
QgsDialog( parent, flags, QDialogButtonBox::Ok | QDialogButtonBox::Cancel )
31 , mExiting( existing )
32 , mExtensions( extensions )
33 , mCaseSensitivity( cs )
36 setWindowTitle( tr(
"New Name" ) );
38 layout()->setSizeConstraint( QLayout::SetMinimumSize );
42 QString nameDesc =
mExtensions.isEmpty() ? tr(
"name" ) : tr(
"base name" );
43 if ( source.isEmpty() )
45 hintString = tr(
"Enter new %1" ).arg( nameDesc );
49 hintString = tr(
"Enter new %1 for %2" ).arg( nameDesc, source );
54 mLineEdit =
new QLineEdit( initial,
this );
55 if ( !regexp.isEmpty() )
57 QRegExpValidator *validator =
new QRegExpValidator( regexp,
this );
60 mLineEdit->setMinimumWidth(
mLineEdit->fontMetrics().width( QStringLiteral(
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ) ) );
65 mNamesLabel =
new QLabel( QStringLiteral(
" " ),
this );
66 mNamesLabel->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum );
73 mErrorLabel =
new QLabel( QStringLiteral(
" " ),
this );
74 mErrorLabel->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum );
108 return "<b>" + text +
"</b>";
114 QString namesString = tr(
"Full names" ) +
": ";
120 QPushButton *okButton =
buttonBox()->button( QDialogButtonBox::Ok );
122 okButton->setEnabled(
true );
124 QString newName =
name();
126 if ( newName.length() == 0 || ( !
mRegexp.isEmpty() && !
mRegexp.exactMatch( newName ) ) )
129 okButton->setEnabled(
false );
136 namesString +=
' ' + newNames.join( QStringLiteral(
", " ) );
142 if ( !conflicts.isEmpty() )
145 : tr(
"%n Name(s) %1 exists",
nullptr, conflicts.size() ).arg( conflicts.join( QStringLiteral(
", " ) ) );
149 okButton->setText( tr(
"Overwrite" ) );
153 okButton->setEnabled(
false );
167 const auto constExtensions = extensions;
168 for (
const QString &ext : constExtensions )
173 if ( list.isEmpty() )
181 Qt::CaseSensitivity cs )
185 const auto constNewNames = newNames;
186 for (
const QString &newName : constNewNames )
188 const auto constExistingNames = existingNames;
189 for (
const QString &existingName : constExistingNames )
191 if ( existingName.compare( newName, cs ) == 0 )
193 list << existingName;
201 const QStringList &existing, Qt::CaseSensitivity cs )
203 QStringList newNames =
fullNames( name, extensions );
204 QStringList conflicts =
matching( newNames, existing, cs );
205 return !conflicts.isEmpty();
A generic dialog with layout and button box.
QDialogButtonBox * buttonBox()
Returns the button box.
QVBoxLayout * layout()
Returns the central layout. Widgets added to it must have this dialog as parent.