TextEditor::TextEditor(QWidget *parent): QPlainTextEdit(parent) { connect(this, SIGNAL(textChanged()), this, SLOT(UpdateDocumentStatus())); LineCountArea = new LineNumberArea(this); connect(this, SIGNAL(blockCountChanged(int)), this, SLOT(UpdateLineNumberAreaWidth(int))); connect(this, SIGNAL(updateRequest(QRect,int)), this, SLOT(UpdateLineNumberArea(QRect,int))); UpdateLineNumberAreaWidth(0); // connect(this, SIGNAL(cursorPositionChanged()), // this, SLOT(Highlight_Current_Line())); connect(this, SIGNAL(cursorPositionChanged()), this, SLOT(bracketValidate())); setFont(QFont("Monaco", 12)); setTabSize(4); Size = 0; Counter = 0; Start = 0; End = 0; // Setup autocomplete minCompleterLength = 1; c = new QCompleter(this); // c->setModelSorting(QCompleter::CaseInsensitivelySortedModel); c->setCompletionMode(QCompleter::PopupCompletion); c->setCaseSensitivity(Qt::CaseInsensitive); c->setWrapAround(false); c->setWidget(this); c->popup()->setObjectName("autocomplete"); completerModel = new QStringListModel(getWords(), c); c->setModel(completerModel); connect(this, SIGNAL(textChanged()), this, SLOT(updateCompleterModel())); QTextOption option = document()->defaultTextOption(); bool on = false; if (on) { option.setFlags(option.flags() | QTextOption::ShowTabsAndSpaces); } else { option.setFlags(option.flags() & ~QTextOption::ShowTabsAndSpaces); } option.setFlags(option.flags() | QTextOption::AddSpaceForLineAndParagraphSeparators); document()->setDefaultTextOption(option); setTabsAsSpaces(true); bracketMismatchFormat = currentCharFormat(); bracketMismatchFormat.setBackground(QColor(255, 223, 223)); bracketMatchFormat = currentCharFormat(); bracketMatchFormat.setBackground(QColor(158, 209, 255)); }
void FormatTextEdit::setVisualizeWhitespace(bool value) { QTextOption option = document()->defaultTextOption(); if (value) { option.setFlags(option.flags() | QTextOption::ShowLineAndParagraphSeparators | QTextOption::ShowTabsAndSpaces); } else { option.setFlags(option.flags() & ~QTextOption::ShowLineAndParagraphSeparators & ~QTextOption::ShowTabsAndSpaces); } document()->setDefaultTextOption(option); }
TextDocument::TextDocument(Id id) : d(new TextDocumentPrivate) { QObject::connect(&d->m_document, &QTextDocument::modificationChanged, [this](bool modified) { // we only want to update the block revisions when going back to the saved version, // e.g. with undo if (!modified) d->updateRevisions(); emit changed(); }); connect(&d->m_document, &QTextDocument::contentsChanged, this, &Core::IDocument::contentsChanged); connect(&d->m_document, &QTextDocument::contentsChange, this, &TextDocument::contentsChangedWithPosition); // set new document layout QTextOption opt = d->m_document.defaultTextOption(); opt.setTextDirection(Qt::LeftToRight); opt.setFlags(opt.flags() | QTextOption::IncludeTrailingSpaces | QTextOption::AddSpaceForLineAndParagraphSeparators ); d->m_document.setDefaultTextOption(opt); d->m_document.setDocumentLayout(new TextDocumentLayout(&d->m_document)); if (id.isValid()) setId(id); setSuspendAllowed(true); }
FormatTextEdit::FormatTextEdit(QWidget *parent) : ExpandingTextEdit(parent) { setLineWrapMode(QTextEdit::WidgetWidth); setAcceptRichText(false); QTextOption option = document()->defaultTextOption(); option.setFlags(option.flags() | QTextOption::ShowLineAndParagraphSeparators | QTextOption::ShowTabsAndSpaces); document()->setDefaultTextOption(option); // Do not set different background if disabled QPalette p = palette(); p.setColor(QPalette::Disabled, QPalette::Base, p.color(QPalette::Active, QPalette::Base)); setPalette(p); setEditable(true); m_highlighter = new MessageHighlighter(this); }
TextDocument::TextDocument(Id id) : d(new TextDocumentPrivate) { connect(&d->m_document, &QTextDocument::modificationChanged, this, &TextDocument::modificationChanged); connect(&d->m_document, &QTextDocument::contentsChanged, this, &Core::IDocument::contentsChanged); connect(&d->m_document, &QTextDocument::contentsChange, this, &TextDocument::contentsChangedWithPosition); // set new document layout QTextOption opt = d->m_document.defaultTextOption(); opt.setTextDirection(Qt::LeftToRight); opt.setFlags(opt.flags() | QTextOption::IncludeTrailingSpaces | QTextOption::AddSpaceForLineAndParagraphSeparators ); d->m_document.setDefaultTextOption(opt); d->m_document.setDocumentLayout(new TextDocumentLayout(&d->m_document)); if (id.isValid()) setId(id); setSuspendAllowed(true); }
void TextDocumentLayout::layoutBlock(const QTextBlock &block) { QTextDocument *doc = document(); qreal margin = doc->documentMargin(); qreal blockMaximumWidth = 0; qreal height = 0; QTextLayout *tl = block.layout(); QTextOption option = doc->defaultTextOption(); tl->setTextOption(option); int extraMargin = 0; if (option.flags() & QTextOption::AddSpaceForLineAndParagraphSeparators) { QFontMetrics fm(block.charFormat().font()); extraMargin += fm.width(QChar(0x21B5)); } tl->beginLayout(); qreal availableWidth = d->width; if (availableWidth <= 0) { availableWidth = qreal(INT_MAX); // similar to text edit with pageSize.width == 0 } availableWidth -= 2*margin + extraMargin; qreal indentMargin = 0; while (1) { QTextLine line = tl->createLine(); if (!line.isValid()) break; line.setLeadingIncluded(true); line.setLineWidth(availableWidth - indentMargin); line.setPosition(QPointF(margin + indentMargin, height)); if(!height) //enter only in the first iteration { indentMargin = indentWidth(block); } height += line.height(); blockMaximumWidth = qMax(blockMaximumWidth, line.naturalTextWidth() + 2*margin); } tl->endLayout(); int previousLineCount = doc->lineCount(); const_cast<QTextBlock&>(block).setLineCount(block.isVisible() ? tl->lineCount() : 0); int lineCount = doc->lineCount(); bool emitDocumentSizeChanged = previousLineCount != lineCount; if (blockMaximumWidth > d->maximumWidth) { // new longest line d->maximumWidth = blockMaximumWidth; d->maximumWidthBlockNumber = block.blockNumber(); emitDocumentSizeChanged = true; } else if (block.blockNumber() == d->maximumWidthBlockNumber && blockMaximumWidth < d->maximumWidth) { // longest line shrinking QTextBlock b = doc->firstBlock(); d->maximumWidth = 0; QTextBlock maximumBlock; while (b.isValid()) { qreal blockMaximumWidth = blockWidth(b); if (blockMaximumWidth > d->maximumWidth) { d->maximumWidth = blockMaximumWidth; maximumBlock = b; } b = b.next(); } if (maximumBlock.isValid()) { d->maximumWidthBlockNumber = maximumBlock.blockNumber(); emitDocumentSizeChanged = true; } } if (emitDocumentSizeChanged)// && !d->blockDocumentSizeChanged) emit documentSizeChanged(documentSize()); emit updateBlock(block); }
int TextOption::flags ( lua_State * L ) //const Flags { QTextOption* lhs = ValueInstaller2<QTextOption>::check( L, 1 ); lhs->flags(); return 0; }