Utils: refactored ClassNameValidatingLineEdit

Now this class can accept '.' namespaces delimiter, which is used in
python. Changed behavior a bit: if namespaces disabled, error message
for 'Namespace:Widget' now is 'The class name contains invalid
characters' instead of 'The class name must not contain namespace
delimiters'. Error message for 'Namespace::Widget' not changed.

Change-Id: I45283ca2002957552375419f1cf3137632dcacdb
Reviewed-by: hjk <qthjk@ovi.com>
This commit is contained in:
Sergey Shambir
2013-01-15 01:09:45 +04:00
committed by hjk
parent 931627e86c
commit 2151e763e4
2 changed files with 36 additions and 6 deletions

View File

@@ -46,8 +46,8 @@ namespace Utils {
struct ClassNameValidatingLineEditPrivate { struct ClassNameValidatingLineEditPrivate {
ClassNameValidatingLineEditPrivate(); ClassNameValidatingLineEditPrivate();
const QRegExp m_nameRegexp; QRegExp m_nameRegexp;
const QString m_namespaceDelimiter; QString m_namespaceDelimiter;
bool m_namespacesEnabled; bool m_namespacesEnabled;
bool m_lowerCaseFileName; bool m_lowerCaseFileName;
bool m_forceFirstCapitalLetter; bool m_forceFirstCapitalLetter;
@@ -67,6 +67,7 @@ ClassNameValidatingLineEdit::ClassNameValidatingLineEdit(QWidget *parent) :
Utils::BaseValidatingLineEdit(parent), Utils::BaseValidatingLineEdit(parent),
d(new ClassNameValidatingLineEditPrivate) d(new ClassNameValidatingLineEditPrivate)
{ {
updateRegExp();
} }
ClassNameValidatingLineEdit::~ClassNameValidatingLineEdit() ClassNameValidatingLineEdit::~ClassNameValidatingLineEdit()
@@ -84,11 +85,28 @@ void ClassNameValidatingLineEdit::setNamespacesEnabled(bool b)
d->m_namespacesEnabled = b; d->m_namespacesEnabled = b;
} }
/**
* @return Language-specific namespace delimiter, e.g. '::' or '.'
*/
QString ClassNameValidatingLineEdit::namespaceDelimiter()
{
return d->m_namespaceDelimiter;
}
/**
* @brief Sets language-specific namespace delimiter, e.g. '::' or '.'
* Do not use identifier characters in delimiter
*/
void ClassNameValidatingLineEdit::setNamespaceDelimiter(const QString &delimiter)
{
d->m_namespaceDelimiter = delimiter;
}
bool ClassNameValidatingLineEdit::validate(const QString &value, QString *errorMessage) const bool ClassNameValidatingLineEdit::validate(const QString &value, QString *errorMessage) const
{ {
static QRegExp nameRegexp(QLatin1String("[a-zA-Z_][a-zA-Z0-9_]*(::[a-zA-Z_][a-zA-Z0-9_]*)*")); QTC_ASSERT(d->m_nameRegexp.isValid(), return false);
QTC_ASSERT(nameRegexp.isValid(), return false);
if (!d->m_namespacesEnabled && value.contains(QLatin1Char(':'))) { if (!d->m_namespacesEnabled && value.contains(d->m_namespaceDelimiter)) {
if (errorMessage) if (errorMessage)
*errorMessage = tr("The class name must not contain namespace delimiters."); *errorMessage = tr("The class name must not contain namespace delimiters.");
return false; return false;
@@ -96,7 +114,7 @@ bool ClassNameValidatingLineEdit::validate(const QString &value, QString *errorM
if (errorMessage) if (errorMessage)
*errorMessage = tr("Please enter a class name."); *errorMessage = tr("Please enter a class name.");
return false; return false;
} else if (!nameRegexp.exactMatch(value)) { } else if (!d->m_nameRegexp.exactMatch(value)) {
if (errorMessage) if (errorMessage)
*errorMessage = tr("The class name contains invalid characters."); *errorMessage = tr("The class name contains invalid characters.");
return false; return false;
@@ -131,6 +149,13 @@ QString ClassNameValidatingLineEdit::fixInputString(const QString &string)
return fixedString; return fixedString;
} }
void ClassNameValidatingLineEdit::updateRegExp() const
{
QString identifierPatter(QLatin1String("[a-zA-Z_][a-zA-Z0-9_]*"));
QString pattern(QLatin1String("%1(%2%1)*"));
d->m_nameRegexp.setPattern(pattern.arg(identifierPatter).arg(d->m_namespaceDelimiter));
}
QString ClassNameValidatingLineEdit::createClassName(const QString &name) QString ClassNameValidatingLineEdit::createClassName(const QString &name)
{ {
// Remove spaces and convert the adjacent characters to uppercase // Remove spaces and convert the adjacent characters to uppercase

View File

@@ -51,6 +51,9 @@ public:
bool namespacesEnabled() const; bool namespacesEnabled() const;
void setNamespacesEnabled(bool b); void setNamespacesEnabled(bool b);
QString namespaceDelimiter();
void setNamespaceDelimiter(const QString &delimiter);
bool lowerCaseFileName() const; bool lowerCaseFileName() const;
void setLowerCaseFileName(bool v); void setLowerCaseFileName(bool v);
@@ -71,6 +74,8 @@ protected:
virtual QString fixInputString(const QString &string); virtual QString fixInputString(const QString &string);
private: private:
void updateRegExp() const;
ClassNameValidatingLineEditPrivate *d; ClassNameValidatingLineEditPrivate *d;
}; };