diff --git a/app/app.pro b/app/app.pro index a6343ca..92d8d44 100644 --- a/app/app.pro +++ b/app/app.pro @@ -116,6 +116,7 @@ SOURCES += \ src/BooksPaintContext.cpp \ src/BooksPathModel.cpp \ src/BooksPolicyPlugin.cpp \ + src/BooksPos.cpp \ src/BooksSaveTimer.cpp \ src/BooksSettings.cpp \ src/BooksShelf.cpp \ diff --git a/app/src/BooksBook.cpp b/app/src/BooksBook.cpp index 461adde..cbb126e 100644 --- a/app/src/BooksBook.cpp +++ b/app/src/BooksBook.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2015-2017 Jolla Ltd. - * Contact: Slava Monich + * Copyright (C) 2015-2018 Jolla Ltd. + * Copyright (C) 2015-2018 Slava Monich * * You may use this file under the terms of the BSD license as follows: * @@ -343,14 +343,7 @@ BooksBook::BooksBook(const BooksStorage& aStorage, QString aRelativePath, iPageStack.append(bookPos); } else { // New format (list of positions) - QVariantList list(position.toList()); - const int count = list.count(); - for (int k=0; k + * + * You may use this file under the terms of the BSD license as follows: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Jolla Ltd nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "BooksPos.h" + +QVariant BooksPos::toVariant() const +{ + QVariantList list; + list.append(iParagraphIndex); + list.append(iElementIndex); + list.append(iCharIndex); + return QVariant::fromValue(list); +} + +BooksPos BooksPos::fromVariant(QVariant aVariant) +{ + if (aVariant.isValid()) { + QVariantList list = aVariant.toList(); + if (list.count() == 3) { + bool ok = false; + int paraIndex = list.at(0).toInt(&ok); + if (ok) { + int elemIndex = list.at(1).toInt(&ok); + if (ok) { + int charIndex = list.at(2).toInt(&ok); + if (ok) { + return BooksPos(paraIndex, elemIndex, charIndex); + } + } + } + } + } + return BooksPos(); +} + +QVariantList BooksPos::List::toVariantList() const +{ + QVariantList result; + const int n = count(); + for (int i = 0; i < n; i++) { + result.append(at(i).toVariant()); + } + return result; +} + +BooksPos::List BooksPos::List::fromVariant(QVariant aVariant, bool aStrict) +{ + List result; + QVariantList list(aVariant.toList()); + const int n = list.count(); + for (int i = 0; i < n; i++) { + BooksPos pos(BooksPos::fromVariant(list.at(i))); + if (pos.valid()) { + result.append(pos); + } else if (aStrict) { + return List(); + } + } + return result; +} diff --git a/app/src/BooksPos.h b/app/src/BooksPos.h index 495c075..4ba5eb0 100644 --- a/app/src/BooksPos.h +++ b/app/src/BooksPos.h @@ -1,6 +1,6 @@ /* - * Copyright (C) 2015-2017 Jolla Ltd. - * Contact: Slava Monich + * Copyright (C) 2015-2018 Jolla Ltd. + * Copyright (C) 2015-2018 Slava Monich * * You may use this file under the terms of the BSD license as follows: * @@ -44,7 +44,15 @@ struct BooksPos { int iParagraphIndex, iElementIndex, iCharIndex; - typedef QList List; + class List : public QList { + public: + List() : QList() {} + List(const List& aList) : QList(aList) {} + + QVariantList toVariantList() const; + static List fromVariant(QVariant aVariant, bool aStrict = true); + }; + typedef QList::iterator Iterator; typedef QList::const_iterator ConstIterator; struct Stack { List iList; int iPos; }; @@ -89,35 +97,8 @@ struct BooksPos { iCharIndex = aCharIndex; } - QVariant toVariant() const - { - QVariantList list; - list.append(iParagraphIndex); - list.append(iElementIndex); - list.append(iCharIndex); - return QVariant::fromValue(list); - } - - static BooksPos fromVariant(QVariant aVariant) - { - if (aVariant.isValid()) { - QVariantList list = aVariant.toList(); - if (list.count() == 3) { - bool ok = false; - int paraIndex = list.at(0).toInt(&ok); - if (ok) { - int elemIndex = list.at(1).toInt(&ok); - if (ok) { - int charIndex = list.at(2).toInt(&ok); - if (ok) { - return BooksPos(paraIndex, elemIndex, charIndex); - } - } - } - } - } - return BooksPos(); - } + QVariant toVariant() const; + static BooksPos fromVariant(QVariant aVariant); const BooksPos& operator = (const BooksPos& aPos) {