forked from qt-creator/qt-creator
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:
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user