1 /*
2     This file is part of the Okteta Kasten module, made within the KDE community.
3 
4     SPDX-FileCopyrightText: 2006-2009 Friedrich W. H. Kossebau <kossebau@kde.org>
5 
6     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
7 */
8 
9 #include "bytearraydocument.hpp"
10 
11 // Okteta core
12 #include <Okteta/PieceTableByteArrayModel>
13 // KF
14 #include <KLocalizedString>
15 
16 using Okteta::PieceTableByteArrayModel;
17 
18 namespace Kasten {
19 
ByteArrayDocument(const QString & initDescription)20 ByteArrayDocument::ByteArrayDocument(const QString& initDescription)
21     : mByteArray(new Okteta::PieceTableByteArrayModel())
22     , mInitDescription(initDescription)
23 {
24     connect(mByteArray, &PieceTableByteArrayModel::modifiedChanged, this, &ByteArrayDocument::onModelModified);
25     connect(mByteArray, &PieceTableByteArrayModel::readOnlyChanged, this, &ByteArrayDocument::readOnlyChanged);
26     connect(mByteArray, &PieceTableByteArrayModel::revertedToVersionIndex, this, &ByteArrayDocument::revertedToVersionIndex);
27     connect(mByteArray, &PieceTableByteArrayModel::headVersionChanged, this, &ByteArrayDocument::headVersionChanged);
28     connect(mByteArray, &PieceTableByteArrayModel::headVersionDescriptionChanged,
29             this, &ByteArrayDocument::onHeadVersionDescriptionChanged);
30 }
31 
~ByteArrayDocument()32 ByteArrayDocument::~ByteArrayDocument()
33 {
34     delete mByteArray;
35 }
36 
ByteArrayDocument(Okteta::PieceTableByteArrayModel * byteArray,const QString & initDescription)37 ByteArrayDocument::ByteArrayDocument(Okteta::PieceTableByteArrayModel* byteArray, const QString& initDescription)
38     : mByteArray(byteArray)
39     , mInitDescription(initDescription)
40 {
41     connect(mByteArray, &PieceTableByteArrayModel::modifiedChanged, this, &ByteArrayDocument::onModelModified);
42     connect(mByteArray, &PieceTableByteArrayModel::readOnlyChanged, this, &ByteArrayDocument::readOnlyChanged);
43     connect(mByteArray, &PieceTableByteArrayModel::revertedToVersionIndex, this, &ByteArrayDocument::revertedToVersionIndex);
44     connect(mByteArray, &PieceTableByteArrayModel::headVersionChanged, this, &ByteArrayDocument::headVersionChanged);
45     connect(mByteArray, &PieceTableByteArrayModel::headVersionDescriptionChanged,
46             this, &ByteArrayDocument::onHeadVersionDescriptionChanged);
47 }
48 
content() const49 Okteta::AbstractByteArrayModel* ByteArrayDocument::content() const { return mByteArray; }
50 
title() const51 QString ByteArrayDocument::title() const { return mTitle; }
mimeType() const52 QString ByteArrayDocument::mimeType() const { return QStringLiteral("ByteArrayDocument"); }
typeName() const53 QString ByteArrayDocument::typeName() const { return i18nc("name of the data type", "Byte Array"); }
54 
isModifiable() const55 bool ByteArrayDocument::isModifiable() const { return true; }
isReadOnly() const56 bool ByteArrayDocument::isReadOnly()   const { return mByteArray->isReadOnly(); }
setReadOnly(bool isReadOnly)57 void ByteArrayDocument::setReadOnly(bool isReadOnly) { mByteArray->setReadOnly(isReadOnly); }
58 
contentFlags() const59 ContentFlags ByteArrayDocument::contentFlags() const
60 {
61     return (mByteArray->isModified() ? ContentHasUnstoredChanges : ContentStateNormal);
62 }
63 
setTitle(const QString & title)64 void ByteArrayDocument::setTitle(const QString& title)
65 {
66     mTitle = title;
67     emit titleChanged(mTitle);
68 }
69 
versionIndex() const70 int ByteArrayDocument::versionIndex() const { return mByteArray->versionIndex(); }
versionCount() const71 int ByteArrayDocument::versionCount() const { return mByteArray->versionCount(); }
versionData(int versionIndex) const72 DocumentVersionData ByteArrayDocument::versionData(int versionIndex) const
73 {
74     const QString changeComment = (versionIndex == 0) ? mInitDescription : mByteArray->versionDescription(versionIndex);
75     return DocumentVersionData(versionIndex, changeComment);
76 }
77 
revertToVersionByIndex(int versionIndex)78 void ByteArrayDocument::revertToVersionByIndex(int versionIndex) { mByteArray->revertToVersionByIndex(versionIndex); }
79 
onModelModified(bool isModified)80 void ByteArrayDocument::onModelModified(bool isModified)
81 {
82     emit contentFlagsChanged((isModified ? ContentHasUnstoredChanges : ContentStateNormal));
83 }
84 
onHeadVersionDescriptionChanged(const QString & newDescription)85 void ByteArrayDocument::onHeadVersionDescriptionChanged(const QString& newDescription)
86 {
87     const DocumentVersionData data(mByteArray->versionIndex(), newDescription);
88     emit headVersionDataChanged(data);
89 }
90 
91 }
92