File indexing completed on 2024-04-14 03:55:27
0001 /* 0002 SPDX-FileCopyrightText: 2010 Bernhard Beschow <bbeschow@cs.tu-berlin.de> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "document.h" 0008 #include "katedocument.h" 0009 0010 using namespace KTextEditor; 0011 0012 Document::Document(DocumentPrivate *impl, const KPluginMetaData &data, QObject *parent) 0013 : KParts::ReadWritePart(parent, data) 0014 , d(impl) 0015 { 0016 } 0017 0018 Document::~Document() = default; 0019 0020 namespace KTextEditor 0021 { 0022 /** 0023 * Private d-pointer type for EditingTransaction 0024 */ 0025 class EditingTransactionPrivate 0026 { 0027 public: 0028 /** 0029 * real document implementation 0030 */ 0031 DocumentPrivate *document; 0032 0033 /** 0034 * Indicator for running editing transaction 0035 */ 0036 bool transactionRunning; 0037 }; 0038 0039 } 0040 0041 Document::EditingTransaction::EditingTransaction(Document *document) 0042 : d(new EditingTransactionPrivate()) 0043 { 0044 // Although it works in release-mode, we usually want a valid document 0045 Q_ASSERT(document != nullptr); 0046 0047 // initialize d-pointer 0048 d->document = qobject_cast<KTextEditor::DocumentPrivate *>(document); 0049 d->transactionRunning = false; 0050 0051 // start the editing transaction 0052 start(); 0053 } 0054 0055 void Document::EditingTransaction::start() 0056 { 0057 if (d->document && !d->transactionRunning) { 0058 d->document->editStart(); 0059 d->transactionRunning = true; 0060 } 0061 } 0062 0063 void Document::EditingTransaction::finish() 0064 { 0065 if (d->document && d->transactionRunning) { 0066 d->document->editEnd(); 0067 d->transactionRunning = false; 0068 } 0069 } 0070 0071 Document::EditingTransaction::~EditingTransaction() 0072 { 0073 // finish the editing transaction 0074 finish(); 0075 0076 // delete our d-pointer 0077 delete d; 0078 } 0079 0080 bool Document::openingError() const 0081 { 0082 return d->m_openingError; 0083 } 0084 0085 bool KTextEditor::Document::replaceText(Range range, const QString &text, bool block) 0086 { 0087 bool success = true; 0088 EditingTransaction transaction(this); 0089 success &= removeText(range, block); 0090 success &= insertText(range.start(), text, block); 0091 return success; 0092 } 0093 0094 bool Document::replaceText(Range range, const QStringList &text, bool block) 0095 { 0096 bool success = true; 0097 EditingTransaction transaction(this); 0098 success &= removeText(range, block); 0099 success &= insertText(range.start(), text, block); 0100 return success; 0101 } 0102 0103 bool Document::isEmpty() const 0104 { 0105 return documentEnd() == Cursor::start(); 0106 } 0107 0108 QList<KTextEditor::Range> Document::searchText(KTextEditor::Range range, const QString &pattern, const SearchOptions options) const 0109 { 0110 return d->searchText(range, pattern, options); 0111 }