File indexing completed on 2024-05-05 10:16:47
0001 /* 0002 This file is part of the Okteta Core library, made within the KDE community. 0003 0004 SPDX-FileCopyrightText: 2008-2009 Friedrich W. H. Kossebau <kossebau@kde.org> 0005 0006 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0007 */ 0008 0009 #ifndef OKTETA_PIECETABLEBYTEARRAYMODEL_HPP 0010 #define OKTETA_PIECETABLEBYTEARRAYMODEL_HPP 0011 0012 // lib 0013 #include "abstractbytearraymodel.hpp" 0014 #include "versionable.hpp" 0015 #include "bookmarkable.hpp" 0016 #include "changesdescribable.hpp" 0017 #include "changehistory.hpp" 0018 0019 namespace Okteta { 0020 0021 class PieceTableByteArrayModelPrivate; 0022 0023 /** 0024 * @author Friedrich W. H. Kossebau 0025 */ 0026 0027 class OKTETACORE_EXPORT PieceTableByteArrayModel : public AbstractByteArrayModel 0028 , public Versionable 0029 , public Bookmarkable 0030 , public ChangesDescribable 0031 , public ChangeHistory 0032 { 0033 Q_OBJECT 0034 Q_INTERFACES( 0035 Okteta::Versionable 0036 Okteta::Bookmarkable 0037 Okteta::ChangesDescribable 0038 Okteta::ChangeHistory 0039 ) 0040 0041 friend class PieceTableByteArrayModelPrivate; 0042 0043 public: 0044 explicit PieceTableByteArrayModel(const QByteArray& data, QObject* parent = nullptr); 0045 explicit PieceTableByteArrayModel(int size = 0, Byte fillByte = '\0', QObject* parent = nullptr); 0046 0047 ~PieceTableByteArrayModel() override; 0048 0049 public: // AbstractByteArrayModel API 0050 Byte byte(Address offset) const override; 0051 Size size() const override; 0052 bool isReadOnly() const override; 0053 bool isModified() const override; 0054 0055 Size insert(Address offset, const Byte* insertData, int insertLength) override; 0056 Size remove(const AddressRange& removeRange) override; 0057 Size replace(const AddressRange& removeRange, const Byte* insertData, int insertLength) override; 0058 bool swap(Address firstStart, const AddressRange& secondRange) override; 0059 Size fill(Byte fillByte, Address offset = 0, Size fillLength = -1) override; 0060 void setByte(Address offset, Byte byte) override; 0061 0062 void setModified(bool modified = true) override; 0063 void setReadOnly(bool isReadOnly = true) override; 0064 0065 // virtual int indexOf( const char *searchString, int length, int from = 0 ) const; 0066 // virtual int lastIndexOf( const char *searchString, int length, int from = -1 ) const; 0067 0068 public: // Versionable API 0069 int versionIndex() const override; 0070 int versionCount() const override; 0071 QString versionDescription(int versionIndex) const override; 0072 0073 public: // set/action 0074 void revertToVersionByIndex(int versionIndex) override; 0075 0076 public: // Bookmarkable API 0077 void addBookmarks(const QVector<Okteta::Bookmark>& bookmarks) override; 0078 void removeBookmarks(const QVector<Okteta::Bookmark>& bookmarks) override; 0079 void removeAllBookmarks() override; 0080 void setBookmark(unsigned int index, const Okteta::Bookmark& bookmark) override; 0081 0082 Okteta::BookmarksConstIterator createBookmarksConstIterator() const override; 0083 const Okteta::Bookmark& bookmarkAt(unsigned int index) const override; 0084 const Okteta::Bookmark& bookmarkFor(int offset) const override; 0085 bool containsBookmarkFor(int offset) const override; 0086 unsigned int bookmarksCount() const override; 0087 0088 public: // ChangesDescribable API 0089 void openGroupedChange(const QString& description) override; 0090 void cancelGroupedChange() override; 0091 void closeGroupedChange(const QString& description) override; 0092 0093 public: // ChangeHistory API 0094 QVector<ByteArrayChange> changes(int firstVersionIndex, int lastVersionIndex) const override; 0095 QByteArray initialData() const override; 0096 void doChanges(const QVector<Okteta::ByteArrayChange>& changes, 0097 int oldVersionIndex, int newVersionIndex) override; 0098 0099 public: 0100 void setData(const QByteArray& data); 0101 0102 Q_SIGNALS: // Versionable signals 0103 void revertedToVersionIndex(int versionIndex) override; 0104 void headVersionDescriptionChanged(const QString& versionDescription) override; 0105 void headVersionChanged(int newHeadVersionIndex) override; 0106 0107 Q_SIGNALS: // Bookmarkable signals 0108 void bookmarksAdded(const QVector<Okteta::Bookmark>& bookmarks) override; 0109 void bookmarksRemoved(const QVector<Okteta::Bookmark>& bookmarks) override; 0110 void bookmarksModified(bool modified) override; 0111 void bookmarksModified(const QVector<int>& indizes) override; 0112 0113 Q_SIGNALS: // ChangeHistory signals 0114 void changesDone(const QVector<Okteta::ByteArrayChange>& changes, 0115 int oldVersionIndex, int newVersionIndex) override; 0116 0117 private: 0118 Q_DECLARE_PRIVATE(PieceTableByteArrayModel) 0119 }; 0120 0121 } 0122 0123 #endif