Add extension property to FileNameValidatingLineEdit

Does nothing if extension is empty. The extension check is case
sensitive.

Change-Id: I58f89eb57d53146dae95e58d77cd8b47826b8f42
Reviewed-on: http://codereview.qt-project.org/5163
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Alessandro Portale <alessandro.portale@nokia.com>
This commit is contained in:
Marco Bubke
2011-09-20 12:54:18 +02:00
committed by Alessandro Portale
parent 71cbd765b2
commit dfbdf28703
2 changed files with 54 additions and 4 deletions

View File

@@ -68,8 +68,7 @@ static const QRegExp &windowsDeviceSubDirPattern()
// ----------- FileNameValidatingLineEdit // ----------- FileNameValidatingLineEdit
FileNameValidatingLineEdit::FileNameValidatingLineEdit(QWidget *parent) : FileNameValidatingLineEdit::FileNameValidatingLineEdit(QWidget *parent) :
BaseValidatingLineEdit(parent), BaseValidatingLineEdit(parent),
m_allowDirectories(false), m_allowDirectories(false)
m_unused(0)
{ {
} }
@@ -143,7 +142,46 @@ bool FileNameValidatingLineEdit::validateFileName(const QString &name,
bool FileNameValidatingLineEdit::validate(const QString &value, QString *errorMessage) const bool FileNameValidatingLineEdit::validate(const QString &value, QString *errorMessage) const
{ {
return validateFileName(value, m_allowDirectories, errorMessage); return validateFileNameExtension(value, requiredExtensions(), errorMessage)
&& validateFileName(value, allowDirectories(), errorMessage);
}
bool FileNameValidatingLineEdit::validateFileNameExtension(const QString &fileName,
const QStringList &requiredExtensions,
QString *errorMessage)
{
// file extension
if (!requiredExtensions.isEmpty()) {
foreach (const QString &requiredExtension, requiredExtensions) {
QString extension = QLatin1String(".") + requiredExtension;
if (fileName.endsWith(extension, Qt::CaseSensitive) && extension.count() < fileName.count()) {
return true;
}
}
if (errorMessage) {
if (requiredExtensions.count() == 1) {
*errorMessage = tr("File extension %1 is required:").arg(requiredExtensions.first());
} else {
*errorMessage = tr("File extensions %1 are required:").arg(requiredExtensions.join(", "));
}
}
return false;
}
return true;
}
QStringList FileNameValidatingLineEdit::requiredExtensions() const
{
return m_requiredExtensionList;
}
void FileNameValidatingLineEdit::setRequiredExtensions(const QStringList &extensions)
{
m_requiredExtensionList = extensions;
} }
} // namespace Utils } // namespace Utils

View File

@@ -41,6 +41,7 @@ class QTCREATOR_UTILS_EXPORT FileNameValidatingLineEdit : public BaseValidatingL
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(bool allowDirectories READ allowDirectories WRITE setAllowDirectories) Q_PROPERTY(bool allowDirectories READ allowDirectories WRITE setAllowDirectories)
Q_PROPERTY(QStringList requiredExtensions READ requiredExtensions WRITE setRequiredExtensions)
public: public:
explicit FileNameValidatingLineEdit(QWidget *parent = 0); explicit FileNameValidatingLineEdit(QWidget *parent = 0);
@@ -49,6 +50,10 @@ public:
bool allowDirectories = false, bool allowDirectories = false,
QString *errorMessage = 0); QString *errorMessage = 0);
static bool validateFileNameExtension(const QString &name,
const QStringList &requiredExtensions = QStringList(),
QString *errorMessage = 0);
/** /**
* Sets whether entering directories is allowed. This will enable the user * Sets whether entering directories is allowed. This will enable the user
* to enter slashes in the filename. Default is off. * to enter slashes in the filename. Default is off.
@@ -56,12 +61,19 @@ public:
bool allowDirectories() const; bool allowDirectories() const;
void setAllowDirectories(bool v); void setAllowDirectories(bool v);
/**
* Sets a requred extension. If the extension is empty no extension is required.
* Default is empty.
*/
QStringList requiredExtensions() const;
void setRequiredExtensions(const QStringList &extensionList);
protected: protected:
virtual bool validate(const QString &value, QString *errorMessage) const; virtual bool validate(const QString &value, QString *errorMessage) const;
private: private:
bool m_allowDirectories; bool m_allowDirectories;
void *m_unused; QStringList m_requiredExtensionList;
}; };
} // namespace Utils } // namespace Utils