Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgstextdocument.h 3 : : ----------------- 4 : : begin : May 2020 5 : : copyright : (C) Nyall Dawson 6 : : email : nyall dot dawson at gmail dot com 7 : : *************************************************************************** 8 : : * * 9 : : * This program is free software; you can redistribute it and/or modify * 10 : : * it under the terms of the GNU General Public License as published by * 11 : : * the Free Software Foundation; either version 2 of the License, or * 12 : : * (at your option) any later version. * 13 : : * * 14 : : ***************************************************************************/ 15 : : 16 : : #ifndef QGSTEXTDOCUMENT_H 17 : : #define QGSTEXTDOCUMENT_H 18 : : 19 : : #include "qgis_sip.h" 20 : : #include "qgis_core.h" 21 : : #include "qgsstringutils.h" 22 : : 23 : : #include <QVector> 24 : : 25 : : class QgsTextBlock; 26 : : class QgsTextFragment; 27 : : 28 : : /** 29 : : * \class QgsTextDocument 30 : : * \ingroup core 31 : : * 32 : : * \brief Represents a document consisting of one or more QgsTextBlock objects. 33 : : * 34 : : * \warning This API is not considered stable and may change in future QGIS versions. 35 : : * 36 : : * \since QGIS 3.14 37 : : */ 38 : 0 : class CORE_EXPORT QgsTextDocument 39 : : { 40 : : 41 : : public: 42 : : 43 : : QgsTextDocument(); 44 : : ~QgsTextDocument(); 45 : : 46 : : /** 47 : : * Constructor for a QgsTextDocument consisting of a single text \a block. 48 : : */ 49 : : explicit QgsTextDocument( const QgsTextBlock &block ); 50 : : 51 : : /** 52 : : * Constructor for a QgsTextDocument consisting of a single text \a fragment. 53 : : */ 54 : : explicit QgsTextDocument( const QgsTextFragment &fragment ); 55 : : 56 : : /** 57 : : * Constructor for QgsTextDocument consisting of a set of plain text \a lines. 58 : : */ 59 : : static QgsTextDocument fromPlainText( const QStringList &lines ); 60 : : 61 : : /** 62 : : * Constructor for QgsTextDocument consisting of a set of HTML formatted \a lines. 63 : : */ 64 : : static QgsTextDocument fromHtml( const QStringList &lines ); 65 : : 66 : : /** 67 : : * Appends a \a block to the document. 68 : : */ 69 : : void append( const QgsTextBlock &block ); 70 : : 71 : : /** 72 : : * Appends a \a block to the document. 73 : : */ 74 : : void append( QgsTextBlock &&block ) SIP_SKIP; 75 : : 76 : : /** 77 : : * Reserves the specified \a count of blocks for optimised block appending. 78 : : */ 79 : : void reserve( int count ); 80 : : 81 : : /** 82 : : * Returns the block at the specified \a index. 83 : : */ 84 : : const QgsTextBlock &at( int index ) const SIP_FACTORY; 85 : : #ifdef SIP_RUN 86 : : % MethodCode 87 : : if ( a0 < 0 || a0 >= sipCpp->size() ) 88 : : { 89 : : PyErr_SetString( PyExc_KeyError, QByteArray::number( a0 ) ); 90 : : sipIsErr = 1; 91 : : } 92 : : else 93 : : { 94 : : sipRes = new QgsTextBlock( sipCpp->at( a0 ) ); 95 : : } 96 : : % End 97 : : #endif 98 : : 99 : : /** 100 : : * Returns the block at the specified index. 101 : : */ 102 : : QgsTextBlock &operator[]( int index ) SIP_FACTORY; 103 : : #ifdef SIP_RUN 104 : : % MethodCode 105 : : SIP_SSIZE_T idx = sipConvertFromSequenceIndex( a0, sipCpp->size() ); 106 : : if ( idx < 0 ) 107 : : sipIsErr = 1; 108 : : else 109 : : sipRes = new QgsTextBlock( sipCpp->operator[]( idx ) ); 110 : : % End 111 : : #endif 112 : : 113 : : /** 114 : : * Returns the number of blocks in the document. 115 : : */ 116 : : int size() const; 117 : : 118 : : #ifdef SIP_RUN 119 : : int __len__() const; 120 : : % MethodCode 121 : : sipRes = sipCpp->size(); 122 : : % End 123 : : #endif 124 : : 125 : : /** 126 : : * Returns a list of plain text lines of text representing the document. 127 : : */ 128 : : QStringList toPlainText() const; 129 : : 130 : : /** 131 : : * Splits lines of text in the document to separate lines, using a specified wrap character (\a wrapCharacter) or newline characters. 132 : : * 133 : : * The \a autoWrapLength argument can be used to specify an ideal length of line to automatically 134 : : * wrap text to (automatic wrapping is disabled if \a autoWrapLength is 0). This automatic wrapping is performed 135 : : * after processing wrapping using \a wrapCharacter. When auto wrapping is enabled, the \a useMaxLineLengthWhenAutoWrapping 136 : : * argument controls whether the lines should be wrapped to an ideal maximum of \a autoWrapLength characters, or 137 : : * if FALSE then the lines are wrapped to an ideal minimum length of \a autoWrapLength characters. 138 : : */ 139 : : void splitLines( const QString &wrapCharacter, int autoWrapLength = 0, bool useMaxLineLengthWhenAutoWrapping = true ); 140 : : 141 : : /** 142 : : * Applies a \a capitalization style to the document's text. 143 : : * 144 : : * \since QGIS 3.16 145 : : */ 146 : : void applyCapitalization( QgsStringUtils::Capitalization capitalization ); 147 : : 148 : : #ifndef SIP_RUN 149 : : ///@cond PRIVATE 150 : : QVector< QgsTextBlock >::const_iterator begin() const; 151 : : QVector< QgsTextBlock >::const_iterator end() const; 152 : : ///@endcond 153 : : #endif 154 : : 155 : : private: 156 : : 157 : : QVector< QgsTextBlock > mBlocks; 158 : : 159 : : }; 160 : : 161 : : #endif // QGSTEXTDOCUMENT_H