Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Q
qt-creator
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Tobias Hunger
qt-creator
Commits
042c9f06
Commit
042c9f06
authored
14 years ago
by
hjk
Browse files
Options
Downloads
Patches
Plain Diff
fakevim: create a document() accessor function.
parent
259c0c1d
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/plugins/fakevim/fakevimhandler.cpp
+35
-40
35 additions, 40 deletions
src/plugins/fakevim/fakevimhandler.cpp
with
35 additions
and
40 deletions
src/plugins/fakevim/fakevimhandler.cpp
+
35
−
40
View file @
042c9f06
...
...
@@ -51,11 +51,10 @@
// over a character. FakeVim interprets the QTextCursor to be over the character
// to the right of the QTextCursor's position().
//
//
There is always a "current" cursor (m_tc).
A current "region of interest"
// A current "region of interest"
// spans between m_anchor (== anchor()), i.e. the character below anchor()), and
// m_
tc.
position()
(== position())
. The character below position() is not included
// m_position(). The character below position() is not included
// if the last movement command was exclusive (MoveExclusive).
// The value of m_tc.anchor() is not used.
//
#include
"fakevimhandler.h"
...
...
@@ -98,7 +97,7 @@
//#define DEBUG_UNDO 1
#if DEBUG_UNDO
# define UNDO_DEBUG(s) qDebug() << <<
m_tc.
document()->availableUndoSteps() << s
# define UNDO_DEBUG(s) qDebug() << << document()->availableUndoSteps() << s
#else
# define UNDO_DEBUG(s)
#endif
...
...
@@ -708,8 +707,9 @@ public:
void
updateSelection
();
void
updateCursor
();
QWidget
*
editor
()
const
;
QTextDocument
*
document
()
const
{
return
EDITOR
(
document
());
}
QChar
characterAtCursor
()
const
{
return
m_tc
.
document
()
->
characterAt
(
m_tc
.
position
());
}
{
return
document
()
->
characterAt
(
m_tc
.
position
());
}
void
beginEditBlock
()
{
UNDO_DEBUG
(
"BEGIN EDIT BLOCK"
);
m_tc
.
beginEditBlock
();
}
void
beginEditBlock
(
int
pos
)
{
setUndoPosition
(
pos
);
beginEditBlock
();
}
void
endEditBlock
()
{
UNDO_DEBUG
(
"END EDIT BLOCK"
);
m_tc
.
endEditBlock
();
}
...
...
@@ -1303,7 +1303,7 @@ void FakeVimHandler::Private::stopIncrementalFind()
void
FakeVimHandler
::
Private
::
setUndoPosition
(
int
pos
)
{
//qDebug() << " CURSOR POS: " << m_undoCursorPosition;
m_undoCursorPosition
[
m_tc
.
document
()
->
availableUndoSteps
()]
=
pos
;
m_undoCursorPosition
[
document
()
->
availableUndoSteps
()]
=
pos
;
}
void
FakeVimHandler
::
Private
::
setAnchor
()
...
...
@@ -1323,9 +1323,9 @@ void FakeVimHandler::Private::moveDown(int n)
m_tc.movePosition(Down, MoveAnchor, n);
#else
const
int
col
=
m_tc
.
position
()
-
m_tc
.
block
().
position
();
const
int
lastLine
=
m_tc
.
document
()
->
lastBlock
().
blockNumber
();
const
int
lastLine
=
document
()
->
lastBlock
().
blockNumber
();
const
int
targetLine
=
qMax
(
0
,
qMin
(
lastLine
,
m_tc
.
block
().
blockNumber
()
+
n
));
const
QTextBlock
&
block
=
m_tc
.
document
()
->
findBlockByNumber
(
targetLine
);
const
QTextBlock
&
block
=
document
()
->
findBlockByNumber
(
targetLine
);
const
int
pos
=
block
.
position
();
setPosition
(
pos
+
qMax
(
0
,
qMin
(
block
.
length
()
-
2
,
col
)));
moveToTargetColumn
();
...
...
@@ -3606,7 +3606,6 @@ void FakeVimHandler::Private::searchBalanced(bool forward, QChar needle, QChar o
int
level
=
1
;
int
pos
=
m_tc
.
position
();
const
int
npos
=
forward
?
lastPositionInDocument
()
:
0
;
QTextDocument
*
doc
=
m_tc
.
document
();
while
(
true
)
{
if
(
forward
)
++
pos
;
...
...
@@ -3614,7 +3613,7 @@ void FakeVimHandler::Private::searchBalanced(bool forward, QChar needle, QChar o
--
pos
;
if
(
pos
==
npos
)
return
;
QChar
c
=
doc
->
characterAt
(
pos
);
QChar
c
=
doc
ument
()
->
characterAt
(
pos
);
if
(
c
==
other
)
++
level
;
else
if
(
c
==
needle
)
...
...
@@ -3656,10 +3655,10 @@ void FakeVimHandler::Private::search(const SearchData &sd)
m_searchCursor
=
QTextCursor
();
QRegExp
needleExp
(
needle
);
QTextCursor
tc
=
m_tc
.
document
()
->
find
(
needleExp
,
startPos
,
flags
);
QTextCursor
tc
=
document
()
->
find
(
needleExp
,
startPos
,
flags
);
if
(
tc
.
isNull
())
{
int
startPos
=
sd
.
forward
?
0
:
lastPositionInDocument
();
tc
=
m_tc
.
document
()
->
find
(
needleExp
,
startPos
,
flags
);
tc
=
document
()
->
find
(
needleExp
,
startPos
,
flags
);
if
(
tc
.
isNull
())
{
if
(
!
incSearch
)
{
highlightMatches
(
QString
());
...
...
@@ -3733,7 +3732,7 @@ void FakeVimHandler::Private::highlightMatches(const QString &needle0)
void
FakeVimHandler
::
Private
::
moveToFirstNonBlankOnLine
()
{
QTextDocument
*
doc
=
m_tc
.
document
();
QTextDocument
*
doc
=
document
();
const
QTextBlock
&
block
=
m_tc
.
block
();
int
firstPos
=
block
.
position
();
for
(
int
i
=
firstPos
,
n
=
firstPos
+
block
.
length
();
i
<
n
;
++
i
)
{
...
...
@@ -3924,7 +3923,7 @@ void FakeVimHandler::Private::setupCharClass()
void
FakeVimHandler
::
Private
::
moveToWordBoundary
(
bool
simple
,
bool
forward
,
bool
changeWord
)
{
int
repeat
=
count
();
QTextDocument
*
doc
=
m_tc
.
document
();
QTextDocument
*
doc
=
document
();
int
n
=
forward
?
lastPositionInDocument
()
:
0
;
int
lastClass
=
-
1
;
if
(
changeWord
)
{
...
...
@@ -3960,7 +3959,7 @@ bool FakeVimHandler::Private::handleFfTt(QString key)
// m_subsubmode \in { 'f', 'F', 't', 'T' }
bool
forward
=
m_subsubdata
.
is
(
'f'
)
||
m_subsubdata
.
is
(
't'
);
int
repeat
=
count
();
QTextDocument
*
doc
=
m_tc
.
document
();
QTextDocument
*
doc
=
document
();
QTextBlock
block
=
m_tc
.
block
();
int
n
=
block
.
position
();
if
(
forward
)
...
...
@@ -4126,11 +4125,10 @@ int FakeVimHandler::Private::linesInDocument() const
{
if
(
m_tc
.
isNull
())
return
0
;
const
QTextDocument
*
doc
=
m_tc
.
document
();
const
int
count
=
doc
->
blockCount
();
const
int
count
=
document
()
->
blockCount
();
// Qt inserts an empty line if the last character is a '\n',
// but that's not how vi does it.
return
doc
->
lastBlock
().
length
()
<=
1
?
count
-
1
:
count
;
return
doc
ument
()
->
lastBlock
().
length
()
<=
1
?
count
-
1
:
count
;
}
void
FakeVimHandler
::
Private
::
scrollToLine
(
int
line
)
...
...
@@ -4161,7 +4159,7 @@ void FakeVimHandler::Private::scrollUp(int count)
int
FakeVimHandler
::
Private
::
lastPositionInDocument
()
const
{
QTextBlock
block
=
m_tc
.
document
()
->
lastBlock
();
QTextBlock
block
=
document
()
->
lastBlock
();
return
block
.
position
()
+
block
.
length
()
-
1
;
}
...
...
@@ -4177,7 +4175,7 @@ QString FakeVimHandler::Private::selectText(const Range &range) const
QTextCursor
tc
=
m_tc
;
int
firstPos
=
firstPositionInLine
(
lineForPosition
(
range
.
beginPos
));
int
lastLine
=
lineForPosition
(
range
.
endPos
);
int
lastPos
=
lastLine
==
m_tc
.
document
()
->
lastBlock
().
blockNumber
()
+
1
int
lastPos
=
lastLine
==
document
()
->
lastBlock
().
blockNumber
()
+
1
?
lastPositionInDocument
()
:
firstPositionInLine
(
lastLine
+
1
);
tc
.
setPosition
(
firstPos
,
MoveAnchor
);
tc
.
setPosition
(
lastPos
,
KeepAnchor
);
...
...
@@ -4196,7 +4194,7 @@ QString FakeVimHandler::Private::selectText(const Range &range) const
}
int
len
=
endColumn
-
beginColumn
+
1
;
QString
contents
;
QTextBlock
block
=
m_tc
.
document
()
->
findBlockByNumber
(
beginLine
-
1
);
QTextBlock
block
=
document
()
->
findBlockByNumber
(
beginLine
-
1
);
for
(
int
i
=
beginLine
;
i
<=
endLine
&&
block
.
isValid
();
++
i
)
{
QString
line
=
block
.
text
();
if
(
range
.
rangemode
==
RangeBlockMode
)
{
...
...
@@ -4281,7 +4279,7 @@ void FakeVimHandler::Private::transformText(const Range &range,
int
endColumn
=
qMax
(
column1
,
column2
);
if
(
range
.
rangemode
==
RangeBlockAndTailMode
)
endColumn
=
INT_MAX
-
1
;
QTextBlock
block
=
m_tc
.
document
()
->
findBlockByNumber
(
endLine
-
1
);
QTextBlock
block
=
document
()
->
findBlockByNumber
(
endLine
-
1
);
beginEditBlock
(
range
.
beginPos
);
for
(
int
i
=
beginLine
;
i
<=
endLine
&&
block
.
isValid
();
++
i
)
{
int
bCol
=
qMin
(
beginColumn
,
block
.
length
()
-
1
);
...
...
@@ -4473,12 +4471,12 @@ void FakeVimHandler::Private::fixMarks(int from, int delta)
QString
FakeVimHandler
::
Private
::
lineContents
(
int
line
)
const
{
return
m_tc
.
document
()
->
findBlockByNumber
(
line
-
1
).
text
();
return
document
()
->
findBlockByNumber
(
line
-
1
).
text
();
}
void
FakeVimHandler
::
Private
::
setLineContents
(
int
line
,
const
QString
&
contents
)
{
QTextBlock
block
=
m_tc
.
document
()
->
findBlockByNumber
(
line
-
1
);
QTextBlock
block
=
document
()
->
findBlockByNumber
(
line
-
1
);
QTextCursor
tc
=
m_tc
;
const
int
begin
=
block
.
position
();
const
int
len
=
block
.
length
();
...
...
@@ -4491,12 +4489,12 @@ void FakeVimHandler::Private::setLineContents(int line, const QString &contents)
int
FakeVimHandler
::
Private
::
firstPositionInLine
(
int
line
)
const
{
return
m_tc
.
document
()
->
findBlockByNumber
(
line
-
1
).
position
();
return
document
()
->
findBlockByNumber
(
line
-
1
).
position
();
}
int
FakeVimHandler
::
Private
::
lastPositionInLine
(
int
line
)
const
{
QTextBlock
block
=
m_tc
.
document
()
->
findBlockByNumber
(
line
-
1
);
QTextBlock
block
=
document
()
->
findBlockByNumber
(
line
-
1
);
return
block
.
position
()
+
block
.
length
()
-
1
;
}
...
...
@@ -4540,16 +4538,15 @@ QWidget *FakeVimHandler::Private::editor() const
void
FakeVimHandler
::
Private
::
undo
()
{
//qDebug() << " CURSOR POS: " << m_undoCursorPosition;
QTextDocument
*
doc
=
m_tc
.
document
();
// FIXME: That's only an approximaxtion. The real solution might
// be to store marks and old userData with QTextBlock setUserData
// and retrieve them afterward.
const
int
current
=
doc
->
availableUndoSteps
();
const
int
oldCount
=
doc
->
characterCount
();
const
int
current
=
doc
ument
()
->
availableUndoSteps
();
const
int
oldCount
=
doc
ument
()
->
characterCount
();
EDITOR
(
undo
());
const
int
delta
=
doc
->
characterCount
()
-
oldCount
;
const
int
delta
=
doc
ument
()
->
characterCount
()
-
oldCount
;
fixMarks
(
position
(),
delta
);
const
int
rev
=
doc
->
availableUndoSteps
();
const
int
rev
=
doc
ument
()
->
availableUndoSteps
();
if
(
current
==
rev
)
showBlackMessage
(
FakeVimHandler
::
tr
(
"Already at oldest change"
));
else
...
...
@@ -4564,13 +4561,12 @@ void FakeVimHandler::Private::undo()
void
FakeVimHandler
::
Private
::
redo
()
{
QTextDocument
*
doc
=
m_tc
.
document
();
const
int
current
=
m_tc
.
document
()
->
availableUndoSteps
();
const
int
oldCount
=
doc
->
characterCount
();
const
int
current
=
document
()
->
availableUndoSteps
();
const
int
oldCount
=
document
()
->
characterCount
();
EDITOR
(
redo
());
const
int
delta
=
doc
->
characterCount
()
-
oldCount
;
const
int
delta
=
doc
ument
()
->
characterCount
()
-
oldCount
;
fixMarks
(
position
(),
delta
);
const
int
rev
=
doc
->
availableUndoSteps
();
const
int
rev
=
doc
ument
()
->
availableUndoSteps
();
if
(
rev
==
current
)
showBlackMessage
(
FakeVimHandler
::
tr
(
"Already at newest change"
));
else
...
...
@@ -4765,17 +4761,16 @@ void FakeVimHandler::Private::selectParagraphTextObject(bool inner)
void
FakeVimHandler
::
Private
::
selectBlockTextObject
(
bool
inner
,
char
left
,
char
right
)
{
QTextDocument
*
doc
=
m_tc
.
document
();
QString
sleft
=
QString
(
QLatin1Char
(
left
));
QString
sright
=
QString
(
QLatin1Char
(
right
));
QTextCursor
tc2
=
doc
->
find
(
sright
,
m_tc
);
QTextCursor
tc2
=
doc
ument
()
->
find
(
sright
,
m_tc
);
if
(
tc2
.
isNull
())
return
;
QTextCursor
tc1
=
doc
->
find
(
sleft
,
m_tc
,
QTextDocument
::
FindBackward
);
QTextCursor
tc1
=
doc
ument
()
->
find
(
sleft
,
m_tc
,
QTextDocument
::
FindBackward
);
if
(
tc1
.
isNull
())
return
;
int
p1
=
tc1
.
position
()
+
inner
-
sleft
.
size
();
if
(
inner
&&
m_tc
.
document
()
->
characterAt
(
p1
)
==
ParagraphSeparator
)
if
(
inner
&&
document
()
->
characterAt
(
p1
)
==
ParagraphSeparator
)
++
p1
;
const
int
p2
=
tc2
.
position
()
-
inner
-
sright
.
size
();
setMark
(
'>'
,
p1
);
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment