void TextBuffer::wrapLine (const KTextEditor::Cursor &position) { // only allowed if editing transaction running Q_ASSERT (m_editingTransactions > 0); // get block, this will assert on invalid line int blockIndex = blockForLine (position.line()); // let the block handle the wrapLine // this can only lead to one more line in this block // no other blocks will change ++m_lines; // first alter the line counter, as functions called will need the valid one m_blocks.at(blockIndex)->wrapLine (position); // remember changes ++m_revision; // update changed line interval if (position.line() < m_editingMinimalLineChanged || m_editingMinimalLineChanged == -1) m_editingMinimalLineChanged = position.line(); if (position.line() <= m_editingMaximalLineChanged) ++m_editingMaximalLineChanged; else m_editingMaximalLineChanged = position.line() + 1; // fixup all following blocks fixStartLines (blockIndex); // balance the changed block if needed balanceBlock (blockIndex); // emit signal about done change emit lineWrapped (position); }
KateLayoutCache::KateLayoutCache(KateRenderer* renderer, QObject* parent) : QObject(parent) , m_renderer(renderer) , m_startPos(-1,-1) , m_viewWidth(0) , m_wrap(false) , m_acceptDirtyLayouts (false) { Q_ASSERT(m_renderer); /** * connect to all possible editing primitives */ connect(&m_renderer->doc()->buffer(), SIGNAL(lineWrapped(KTextEditor::Cursor)), this, SLOT(wrapLine(KTextEditor::Cursor))); connect(&m_renderer->doc()->buffer(), SIGNAL(lineUnwrapped(int)), this, SLOT(unwrapLine(int))); connect(&m_renderer->doc()->buffer(), SIGNAL(textInserted(KTextEditor::Cursor,QString)), this, SLOT(insertText(KTextEditor::Cursor,QString))); connect(&m_renderer->doc()->buffer(), SIGNAL(textRemoved(KTextEditor::Range,QString)), this, SLOT(removeText(KTextEditor::Range))); }