summaryrefslogtreecommitdiffstats
path: root/objects/mark.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'objects/mark.cpp')
-rw-r--r--objects/mark.cpp65
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