Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Tobias Hunger
qt-creator
Commits
317533b5
Commit
317533b5
authored
Nov 18, 2009
by
Christian Kamm
Browse files
Add TextWriter from QML.
parent
81b0f81c
Changes
3
Hide whitespace changes
Inline
Side-by-side
src/libs/utils/textwriter.cpp
0 → 100644
View file @
317533b5
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the QtDeclarative module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
** This file contains pre-release code and may not be distributed.
** You may use this file in accordance with the terms and conditions
** contained in the Technology Preview License Agreement accompanying
** this package.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** If you have questions regarding the use of this file, please contact
** Nokia at qt-info@nokia.com.
**
**
**
**
**
**
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
#include "textwriter.h"
namespace
Utils
{
TextWriter
::
TextWriter
()
:
string
(
0
),
cursor
(
0
)
{
}
static
bool
overlaps
(
int
posA
,
int
lengthA
,
int
posB
,
int
lengthB
)
{
return
(
posA
<
posB
+
lengthB
&&
posA
+
lengthA
>
posB
+
lengthB
)
||
(
posA
<
posB
&&
posA
+
lengthA
>
posB
);
}
bool
TextWriter
::
hasOverlap
(
int
pos
,
int
length
)
{
{
QListIterator
<
Replace
>
i
(
replaceList
);
while
(
i
.
hasNext
())
{
const
Replace
&
cmd
=
i
.
next
();
if
(
overlaps
(
pos
,
length
,
cmd
.
pos
,
cmd
.
length
))
return
true
;
}
}
{
QListIterator
<
Move
>
i
(
moveList
);
while
(
i
.
hasNext
())
{
const
Move
&
cmd
=
i
.
next
();
if
(
overlaps
(
pos
,
length
,
cmd
.
pos
,
cmd
.
length
))
return
true
;
}
return
false
;
}
}
bool
TextWriter
::
hasMoveInto
(
int
pos
,
int
length
)
{
QListIterator
<
Move
>
i
(
moveList
);
while
(
i
.
hasNext
())
{
const
Move
&
cmd
=
i
.
next
();
if
(
cmd
.
to
>=
pos
&&
cmd
.
to
<
pos
+
length
)
return
true
;
}
return
false
;
}
void
TextWriter
::
replace
(
int
pos
,
int
length
,
const
QString
&
replacement
)
{
Q_ASSERT
(
!
hasOverlap
(
pos
,
length
));
Q_ASSERT
(
!
hasMoveInto
(
pos
,
length
));
Replace
cmd
;
cmd
.
pos
=
pos
;
cmd
.
length
=
length
;
cmd
.
replacement
=
replacement
;
replaceList
+=
cmd
;
}
void
TextWriter
::
move
(
int
pos
,
int
length
,
int
to
)
{
Q_ASSERT
(
!
hasOverlap
(
pos
,
length
));
Move
cmd
;
cmd
.
pos
=
pos
;
cmd
.
length
=
length
;
cmd
.
to
=
to
;
moveList
+=
cmd
;
}
void
TextWriter
::
doReplace
(
const
Replace
&
replace
)
{
int
diff
=
replace
.
replacement
.
size
()
-
replace
.
length
;
{
QMutableListIterator
<
Replace
>
i
(
replaceList
);
while
(
i
.
hasNext
())
{
Replace
&
c
=
i
.
next
();
if
(
replace
.
pos
<
c
.
pos
)
c
.
pos
+=
diff
;
else
if
(
replace
.
pos
+
replace
.
length
<
c
.
pos
+
c
.
length
)
c
.
length
+=
diff
;
}
}
{
QMutableListIterator
<
Move
>
i
(
moveList
);
while
(
i
.
hasNext
())
{
Move
&
c
=
i
.
next
();
if
(
replace
.
pos
<
c
.
pos
)
c
.
pos
+=
diff
;
else
if
(
replace
.
pos
+
replace
.
length
<
c
.
pos
+
c
.
length
)
c
.
length
+=
diff
;
if
(
replace
.
pos
<
c
.
to
)
c
.
to
+=
diff
;
}
}
if
(
string
)
{
string
->
replace
(
replace
.
pos
,
replace
.
length
,
replace
.
replacement
);
}
else
if
(
cursor
)
{
cursor
->
setPosition
(
replace
.
pos
);
cursor
->
setPosition
(
replace
.
pos
+
replace
.
length
,
QTextCursor
::
KeepAnchor
);
cursor
->
insertText
(
replace
.
replacement
);
}
}
void
TextWriter
::
doMove
(
const
Move
&
move
)
{
QString
text
;
if
(
string
)
{
text
=
string
->
mid
(
move
.
pos
,
move
.
length
);
}
else
if
(
cursor
)
{
cursor
->
setPosition
(
move
.
pos
);
cursor
->
setPosition
(
move
.
pos
+
move
.
length
,
QTextCursor
::
KeepAnchor
);
text
=
cursor
->
selectedText
();
}
Replace
cut
;
cut
.
pos
=
move
.
pos
;
cut
.
length
=
move
.
length
;
Replace
paste
;
paste
.
pos
=
move
.
to
;
paste
.
length
=
0
;
paste
.
replacement
=
text
;
replaceList
.
append
(
cut
);
replaceList
.
append
(
paste
);
Replace
cmd
;
while
(
!
replaceList
.
isEmpty
())
{
cmd
=
replaceList
.
first
();
replaceList
.
removeFirst
();
doReplace
(
cmd
);
}
}
void
TextWriter
::
write
(
QString
*
s
)
{
string
=
s
;
write_helper
();
string
=
0
;
}
void
TextWriter
::
write
(
QTextCursor
*
textCursor
)
{
cursor
=
textCursor
;
write_helper
();
cursor
=
0
;
}
void
TextWriter
::
write_helper
()
{
if
(
cursor
)
cursor
->
beginEditBlock
();
{
Replace
cmd
;
while
(
!
replaceList
.
isEmpty
())
{
cmd
=
replaceList
.
first
();
replaceList
.
removeFirst
();
doReplace
(
cmd
);
}
}
{
Move
cmd
;
while
(
!
moveList
.
isEmpty
())
{
cmd
=
moveList
.
first
();
moveList
.
removeFirst
();
doMove
(
cmd
);
}
}
if
(
cursor
)
cursor
->
endEditBlock
();
}
}
// end namespace Utils
src/libs/utils/textwriter.h
0 → 100644
View file @
317533b5
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the QtDeclarative module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
** This file contains pre-release code and may not be distributed.
** You may use this file in accordance with the terms and conditions
** contained in the Technology Preview License Agreement accompanying
** this package.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** If you have questions regarding the use of this file, please contact
** Nokia at qt-info@nokia.com.
**
**
**
**
**
**
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
#ifndef TEXTWRITER_H
#define TEXTWRITER_H
#include "utils_global.h"
#include <QtCore/QString>
#include <QtCore/QList>
#include <QtGui/QTextCursor>
namespace
Utils
{
class
QTCREATOR_UTILS_EXPORT
TextWriter
{
QString
*
string
;
QTextCursor
*
cursor
;
struct
Replace
{
int
pos
;
int
length
;
QString
replacement
;
};
QList
<
Replace
>
replaceList
;
struct
Move
{
int
pos
;
int
length
;
int
to
;
};
QList
<
Move
>
moveList
;
bool
hasOverlap
(
int
pos
,
int
length
);
bool
hasMoveInto
(
int
pos
,
int
length
);
void
doReplace
(
const
Replace
&
replace
);
void
doMove
(
const
Move
&
move
);
void
write_helper
();
public:
TextWriter
();
void
replace
(
int
pos
,
int
length
,
const
QString
&
replacement
);
void
move
(
int
pos
,
int
length
,
int
to
);
void
write
(
QString
*
s
);
void
write
(
QTextCursor
*
textCursor
);
};
}
// namespace Utils
#endif // TEXTWRITER_H
src/libs/utils/utils.pro
View file @
317533b5
...
...
@@ -36,7 +36,8 @@ SOURCES += reloadpromptutils.cpp \
iwelcomepage
.
cpp
\
fancymainwindow
.
cpp
\
detailsbutton
.
cpp
\
detailswidget
.
cpp
detailswidget
.
cpp
\
textwriter
.
cpp
win32
{
SOURCES
+=
abstractprocess_win
.
cpp
\
consoleprocess_win
.
cpp
\
...
...
@@ -80,7 +81,8 @@ HEADERS += utils_global.h \
iwelcomepage
.
h
\
fancymainwindow
.
h
\
detailsbutton
.
h
\
detailswidget
.
h
detailswidget
.
h
\
textwriter
.
h
FORMS
+=
filewizardpage
.
ui
\
projectintropage
.
ui
\
newclasswidget
.
ui
\
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment