diff options
Diffstat (limited to 'objects/mark.cpp')
| -rw-r--r-- | objects/mark.cpp | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/objects/mark.cpp b/objects/mark.cpp new file mode 100644 index 0000000..3168964 --- /dev/null +++ b/objects/mark.cpp @@ -0,0 +1,65 @@ +#include "mark.h" +#include "basetexteditor.h" +#include <texteditor/basetexteditor.h> +namespace Scripting { +namespace Internal { + +Mark::Mark(BaseTextEditor *editor, int column, int line) + :m_editor(editor) +{ + m_pos = convertPosition(column,line); + ::TextEditor::BaseTextEditorWidget* widget = editor->textEditorWidget(); + QTextDocument* document = widget->document(); + connect( document, SIGNAL(contentsChange(int,int,int)), this, SLOT(update(int,int,int))); +} + +int Mark::convertPosition(int line, int column) +{ + const int origLine = m_editor->currentLine(); + const int origColumn = m_editor->currentColumn(); + + m_editor->gotoLine(line, column); + const int result = m_editor->position(); + + m_editor->gotoLine(origLine, origColumn); + + return result; +} + +QString Mark::fileName() const +{ + return m_editor->fileName(); +} + +int Mark::line() const +{ + return m_editor->convertPosition(m_pos).y(); +} + +int Mark::column() const +{ + return m_editor->convertPosition(m_pos).x(); +} + +void Mark::update(int from, int charsRemoved, int charsAdded) +{ + if (m_pos <= from ) + return; + + const int delta = charsAdded - charsRemoved; + + // Overlap the position + if ( m_pos <= from+charsRemoved ) + m_pos = from; + else + m_pos += delta; +} + +Mark *Mark::create(BaseTextEditor *editor, int line, int column) +{ + // Object is owned by Qt Script + return new Mark(editor, line, column); +} + +} // namespace Internal +} // namespace Scripting |
