diff options
author | Adriano Melo <adriano.melo@openbossa.org> | 2012-04-26 15:42:51 -0300 |
---|---|---|
committer | Luis Gabriel Lima <luis.gabriel@openbossa.org> | 2012-04-27 22:24:38 +0200 |
commit | d1dc0e8bbb60adf03aaffe9aa4018937a6503bfa (patch) | |
tree | c1b4a9ff3fb0dad76ce477df8de9ce1e9575c3bd | |
parent | 338a7f33e631376887a9f131eed945a6faf3b330 (diff) |
UiTextFileModel separator now is a regular expression
- Separator property changed from QString to QRegExp
- CaseSensitivity property added
- QML UiTextFileModel example modified to use a regular expression
Change-Id: I36e288ea87955c219bac1872ffde2fca17eb65fa
Reviewed-by: Daker Fernandes Pinheiro <daker.pinheiro@openbossa.org>
-rw-r--r-- | examples/models/quicktextfilemodel/main.qml | 9 | ||||
-rw-r--r-- | examples/models/quicktextfilemodel/qtmodules.txt | 9 | ||||
-rw-r--r-- | src/models/uitextfilemodel.cpp | 35 | ||||
-rw-r--r-- | src/models/uitextfilemodel.h | 6 | ||||
-rw-r--r-- | src/models/uitextfilemodel_p.h | 5 | ||||
-rw-r--r-- | tests/auto/models/uitextfilemodel/tst_uitextfilemodel.cpp | 18 |
6 files changed, 75 insertions, 7 deletions
diff --git a/examples/models/quicktextfilemodel/main.qml b/examples/models/quicktextfilemodel/main.qml index d93d360..cd272c5 100644 --- a/examples/models/quicktextfilemodel/main.qml +++ b/examples/models/quicktextfilemodel/main.qml @@ -50,12 +50,19 @@ Rectangle { TextFileModel { id: fileModel - source: "../../shared/countries.txt" + separator: "[\n, ]" + source: "qtmodules.txt" } ListView { anchors.fill: parent model: fileModel + header: Text { + anchors.horizontalCenter: parent.horizontalCenter + text: "Qt5 Modules" + font.pixelSize: 25 + } + delegate: Text { text: display height: 20 diff --git a/examples/models/quicktextfilemodel/qtmodules.txt b/examples/models/quicktextfilemodel/qtmodules.txt new file mode 100644 index 0000000..e045651 --- /dev/null +++ b/examples/models/quicktextfilemodel/qtmodules.txt @@ -0,0 +1,9 @@ +QtBluetooth, QtContacts, QtCore, QtGui, +QtLocation, QtMultimedia, QtNetwork, QtOpenGL, +QtOpenVG, QtOrganizer, QtPrintSupport, QtPublishSubscribe, +QtQml, QtQuick, QtScript, QtScriptTools, +QtSensors, QtServiceFramework, QtSql, QtSvg, +QtSystemInfo, QtVersit, QtWebKit, QtWidgets, +QtXml, QtXmlPatterns, Qt3D, Phonon, +QtDesigner, QtHelp, QtTest, QtUiTools, +QAxContainer, QAxServer, QtDBus diff --git a/src/models/uitextfilemodel.cpp b/src/models/uitextfilemodel.cpp index 8333199..9baf945 100644 --- a/src/models/uitextfilemodel.cpp +++ b/src/models/uitextfilemodel.cpp @@ -48,6 +48,7 @@ #include "QtCore/qscopedpointer.h" #include "QtCore/qstring.h" #include "QtCore/qstringlist.h" +#include "QtCore/qregexp.h" QT_BEGIN_NAMESPACE_UIHELPERS @@ -77,7 +78,12 @@ void UiTextFileModelPrivate::reload() if (text.isEmpty()) return; - QStringList list = text.split(separator); + if (!separator.isValid()) { + qWarning("UiTextFileModel: separator is not valid"); + return; + } + + QStringList list = text.split(separator, QString::SkipEmptyParts); foreach (const QString & textItem, list) { UiStandardItem *item = new UiStandardItem(textItem); q->appendRow(item); @@ -115,17 +121,17 @@ void UiTextFileModel::setSource(const QString &source) QString UiTextFileModel::separator() const { Q_D(const UiTextFileModel); - return d->separator; + return d->separator.pattern(); } void UiTextFileModel::setSeparator(const QString &separator) { Q_D(UiTextFileModel); - if (d->separator == separator) + if (d->separator.pattern() == separator) return; - d->separator = separator; + d->separator.setPattern(separator); if (!d->source.isEmpty()) d->reload(); @@ -133,6 +139,27 @@ void UiTextFileModel::setSeparator(const QString &separator) emit separatorChanged(); } +Qt::CaseSensitivity UiTextFileModel::caseSensitivity() const +{ + Q_D(const UiTextFileModel); + return d->separator.caseSensitivity(); +} + +void UiTextFileModel::setCaseSensitivity(const Qt::CaseSensitivity caseSensitivity) +{ + Q_D(UiTextFileModel); + + if (d->separator.caseSensitivity() != caseSensitivity) + return; + + d->separator.setCaseSensitivity(caseSensitivity); + + if (!d->source.isEmpty()) + d->reload(); + + emit caseSensitivityChanged(); +} + QT_END_NAMESPACE_UIHELPERS #endif // QT_NO_TEXTFILEMODEL diff --git a/src/models/uitextfilemodel.h b/src/models/uitextfilemodel.h index 4b8e999..62e1df5 100644 --- a/src/models/uitextfilemodel.h +++ b/src/models/uitextfilemodel.h @@ -47,6 +47,7 @@ #include "QtCore/qscopedpointer.h" #include "QtCore/qurl.h" #include "QtCore/qstring.h" +#include "QtCore/qregexp.h" QT_BEGIN_HEADER @@ -61,6 +62,8 @@ class UIHELPERS_EXPORT UiTextFileModel : public UiStandardItemModel Q_OBJECT Q_PROPERTY(QString source READ source WRITE setSource NOTIFY sourceChanged) Q_PROPERTY(QString separator READ separator WRITE setSeparator NOTIFY separatorChanged) + Q_PROPERTY(Qt::CaseSensitivity caseSensitivity READ caseSensitivity + WRITE setCaseSensitivity NOTIFY caseSensitivityChanged) public: explicit UiTextFileModel(QObject *parent = 0); @@ -70,10 +73,13 @@ public: void setSource(const QString &source); QString separator() const; void setSeparator(const QString &separator); + Qt::CaseSensitivity caseSensitivity() const; + void setCaseSensitivity(const Qt::CaseSensitivity caseSensitivity); Q_SIGNALS: void sourceChanged(); void separatorChanged(); + void caseSensitivityChanged(); private: Q_DISABLE_COPY(UiTextFileModel) diff --git a/src/models/uitextfilemodel_p.h b/src/models/uitextfilemodel_p.h index faf2380..3f6fd64 100644 --- a/src/models/uitextfilemodel_p.h +++ b/src/models/uitextfilemodel_p.h @@ -54,8 +54,9 @@ //// // -#include <QScopedPointer> #include "uitextfilemodel.h" +#include "QtCore/qregexp.h" +#include "QtCore/qscopedpointer.h" QT_BEGIN_NAMESPACE_UIHELPERS @@ -70,7 +71,7 @@ public: void reload(); QString source; - QString separator; + QRegExp separator; UiTextFileModel *q_ptr; }; diff --git a/tests/auto/models/uitextfilemodel/tst_uitextfilemodel.cpp b/tests/auto/models/uitextfilemodel/tst_uitextfilemodel.cpp index 4bd3e46..482f05e 100644 --- a/tests/auto/models/uitextfilemodel/tst_uitextfilemodel.cpp +++ b/tests/auto/models/uitextfilemodel/tst_uitextfilemodel.cpp @@ -63,6 +63,8 @@ private slots: void carriageReturnLineFeedSeparatorCount(); void specialCharacterSeparatorCount(); void withoutSeparatorCount(); + void regexpSimpleCount(); + void regexpLineBeginnigCount(); }; void tst_UiTextFileModel::init() @@ -130,5 +132,21 @@ void tst_UiTextFileModel::withoutSeparatorCount() QCOMPARE(model.rowCount(), rowsCount + 1); } +void tst_UiTextFileModel::regexpSimpleCount() +{ + UiHelpers::UiTextFileModel model; + model.setSeparator("[\n\r]"); + model.setSource(file.fileName()); + QCOMPARE(model.rowCount(), rowsCount + 1); +} + +void tst_UiTextFileModel::regexpLineBeginnigCount() +{ + UiHelpers::UiTextFileModel model; + model.setSeparator("(Come)"); + model.setSource(file.fileName()); + QCOMPARE(model.rowCount(), rowsCount + 1); +} + QTEST_MAIN(tst_UiTextFileModel) #include "tst_uitextfilemodel.moc" |