summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesper K. Pedersen <jesper.pedersen@kdab.com>2013-05-08 08:32:09 +0200
committerJesper K. Pedersen <jesper.pedersen@kdab.com>2013-05-13 10:17:11 +0200
commitf5448f89f28f6e3ffd252e2b7e26b302662aab45 (patch)
treeaed21c290c838dc273f0305d60451f303dc624c5
parent985b7197f051a1992554413b882a56eb0bd5b9a4 (diff)
Introduced the class Position
Using QPoint with x,y is very confusing on the scripting level, where the mental picture is line and columns rather than y,x Change-Id: I4d9353afa26879d9aa44436d56841f55a50723bd Reviewed-by: Nicolas Arnaud-Cormos <nicolas@kdab.com>
-rw-r--r--examples/rectangle-commands.js8
-rw-r--r--objects/mark.cpp6
-rw-r--r--objects/texteditor.cpp5
-rw-r--r--objects/texteditor.h3
-rw-r--r--scripting.pro6
-rw-r--r--scriptrunner.cpp2
-rw-r--r--scriptwrappers.cpp16
-rw-r--r--utils/position.cpp33
-rw-r--r--utils/position.h28
9 files changed, 96 insertions, 11 deletions
diff --git a/examples/rectangle-commands.js b/examples/rectangle-commands.js
index 5e620d8..33e2bef 100644
--- a/examples/rectangle-commands.js
+++ b/examples/rectangle-commands.js
@@ -1,12 +1,12 @@
var editor = editors.current()
var anchorPos = editor.position(PositionOperation.Anchor)
-var anchorColumn = editor.convertPosition(anchorPos).x
-var anchorLine = editor.convertPosition(anchorPos).y
+var anchorColumn = editor.convertPosition(anchorPos).column
+var anchorLine = editor.convertPosition(anchorPos).line
var pointPos = editor.position(PositionOperation.Current)
-var pointColumn = editor.convertPosition(pointPos).x
-var pointLine = editor.convertPosition(pointPos).y
+var pointColumn = editor.convertPosition(pointPos).column
+var pointLine = editor.convertPosition(pointPos).line
var startColumn, endColumn, startLine, endLine
if ( anchorLine < pointLine || (anchorLine == pointLine && anchorColumn < pointColumn)) {
diff --git a/objects/mark.cpp b/objects/mark.cpp
index b6755fb..222b90c 100644
--- a/objects/mark.cpp
+++ b/objects/mark.cpp
@@ -1,6 +1,8 @@
#include "mark.h"
#include "basetexteditor.h"
#include <texteditor/basetexteditor.h>
+#include "utils/position.h"
+
namespace Scripting {
namespace Internal {
@@ -33,12 +35,12 @@ QString Mark::fileName() const
int Mark::line() const
{
- return m_editor->convertPosition(m_pos).y();
+ return m_editor->convertPosition(m_pos).line();
}
int Mark::column() const
{
- return m_editor->convertPosition(m_pos).x();
+ return m_editor->convertPosition(m_pos).column();
}
void Mark::update(int from, int charsRemoved, int charsAdded)
diff --git a/objects/texteditor.cpp b/objects/texteditor.cpp
index 3557476..068a876 100644
--- a/objects/texteditor.cpp
+++ b/objects/texteditor.cpp
@@ -1,4 +1,5 @@
#include "texteditor.h"
+#include "utils/position.h"
namespace Scripting {
namespace Internal {
@@ -13,11 +14,11 @@ int TextEditor::position(Enums::PositionOperation posOp, int at) const
return editor()->position( static_cast< ::TextEditor::ITextEditor::PositionOperation>(posOp), at);
}
-QPoint TextEditor::convertPosition(int pos) const
+Position TextEditor::convertPosition(int pos) const
{
int line, column;
editor()->convertPosition(pos,&line,&column);
- return QPoint(column,line);
+ return Position(line,column);
}
QRect TextEditor::cursorRect(int pos) const
diff --git a/objects/texteditor.h b/objects/texteditor.h
index faea155..6187d8e 100644
--- a/objects/texteditor.h
+++ b/objects/texteditor.h
@@ -4,6 +4,7 @@
#include "editor.h"
#include <texteditor/itexteditor.h>
#include "enums.h"
+#include "utils/position.h"
namespace Scripting {
namespace Internal {
@@ -17,7 +18,7 @@ public:
public slots:
int position(Enums::PositionOperation posOp = Enums::Current, int at = -1) const;
- QPoint convertPosition(int pos) const;
+ Position convertPosition(int pos) const;
QRect cursorRect(int pos = -1) const;
int columnCount() const;
int rowCount() const;
diff --git a/scripting.pro b/scripting.pro
index d6acaaa..ac421bb 100644
--- a/scripting.pro
+++ b/scripting.pro
@@ -21,7 +21,8 @@ SOURCES += scriptingplugin.cpp \
utils/dialogs.cpp \
objects/cppfunction.cpp \
objects/cppargument.cpp \
- objects/mark.cpp
+ objects/mark.cpp \
+ utils/position.cpp
HEADERS += scriptingplugin.h \
scripting_global.h \
@@ -42,7 +43,8 @@ HEADERS += scriptingplugin.h \
utils/dialogs.h \
objects/cppfunction.h \
objects/cppargument.h \
- objects/mark.h
+ objects/mark.h \
+ utils/position.h
# Qt Creator linking
diff --git a/scriptrunner.cpp b/scriptrunner.cpp
index c75a90d..44a34fa 100644
--- a/scriptrunner.cpp
+++ b/scriptrunner.cpp
@@ -160,6 +160,8 @@ ScriptRunner::QScriptEnginePtr ScriptRunner::ensureEngineInitialized()
qRegisterMetaType<Mark*>("Mark*");
registerQObject<Mark>(m_engine.data());
+ qRegisterMetaType<Position>("Position");
+
qScriptRegisterSequenceMetaType< QList<CppArgument*> >(m_engine.data());
registerGlobal(new Console, QLatin1String("console"));
diff --git a/scriptwrappers.cpp b/scriptwrappers.cpp
index 2111504..3e85bd2 100644
--- a/scriptwrappers.cpp
+++ b/scriptwrappers.cpp
@@ -1,6 +1,7 @@
#include "scriptwrappers.h"
#include <QPoint>
#include <QRect>
+#include "utils/position.h"
namespace Scripting {
namespace Internal {
@@ -19,6 +20,20 @@ void QPointFromScriptValue(const QScriptValue &obj, QPoint& point)
point.setY( obj.property(QLatin1String("y")).toInt32() );
}
+QScriptValue scriptValueFromPosition(QScriptEngine *engine, const Position &pos)
+{
+ QScriptValue obj = engine->newObject();
+ obj.setProperty(QLatin1String("line"), pos.line());
+ obj.setProperty(QLatin1String("column"), pos.column());
+ return obj;
+}
+
+void PositionFromScriptValue(const QScriptValue &obj, Position& pos)
+{
+ pos.setLine( obj.property(QLatin1String("line")).toInt32() );
+ pos.setColumn( obj.property(QLatin1String("column")).toInt32() );
+}
+
QScriptValue scriptValueFromQRect(QScriptEngine *engine, const QRect &rect)
{
QScriptValue obj = engine->newObject();
@@ -41,6 +56,7 @@ void QRectFromScriptValue(const QScriptValue &obj, QRect& rect)
void registerWrappers(QScriptEngine* engine )
{
qScriptRegisterMetaType(engine, scriptValueFromQPoint, QPointFromScriptValue );
+ qScriptRegisterMetaType(engine, scriptValueFromPosition, PositionFromScriptValue );
qScriptRegisterMetaType(engine, scriptValueFromQRect, QRectFromScriptValue );
}
diff --git a/utils/position.cpp b/utils/position.cpp
new file mode 100644
index 0000000..719cf27
--- /dev/null
+++ b/utils/position.cpp
@@ -0,0 +1,33 @@
+#include "position.h"
+
+namespace Scripting {
+namespace Internal {
+
+Position::Position(int line, int column)
+ : m_line(line), m_column(column)
+{
+}
+
+int Position::line() const
+{
+ return m_line;
+}
+
+void Position::setLine(int line)
+{
+ m_line = line;
+}
+
+int Position::column() const
+{
+ return m_column;
+}
+
+void Position::setColumn(int column)
+{
+ m_column = column;
+}
+
+
+} // namespace Internal
+} // namespace Scripting
diff --git a/utils/position.h b/utils/position.h
new file mode 100644
index 0000000..4a32bac
--- /dev/null
+++ b/utils/position.h
@@ -0,0 +1,28 @@
+#ifndef SCRIPTING_INTERNAL_POSITION_H
+#define SCRIPTING_INTERNAL_POSITION_H
+
+#include <QMetaType>
+
+namespace Scripting {
+namespace Internal {
+
+class Position
+{
+public:
+ explicit Position(int line=1, int column=1);
+ int line() const;
+ void setLine(int line);
+ int column() const;
+ void setColumn(int column);
+
+private:
+ int m_line;
+ int m_column;
+};
+
+} // namespace Internal
+} // namespace Scripting
+
+Q_DECLARE_METATYPE(Scripting::Internal::Position)
+
+#endif // SCRIPTING_INTERNAL_POSITION_H