forked from qt-creator/qt-creator
Merge branch '1.1' of git@scm.dev.nokia.troll.no:creator/mainline into 1.1
This commit is contained in:
@@ -43,10 +43,12 @@ unix:!macx {
|
|||||||
QMAKE_POST_LINK += $${QMAKE_COPY_FILE} $${COPYSRC} $${COPYDEST} $$SEPARATOR
|
QMAKE_POST_LINK += $${QMAKE_COPY_FILE} $${COPYSRC} $${COPYDEST} $$SEPARATOR
|
||||||
}
|
}
|
||||||
|
|
||||||
target.files += $$OUT_PWD/$$DESTDIR/$$IDE_APP_WRAPPER
|
wrapper.files = $$OUT_PWD/$$DESTDIR/$$IDE_APP_WRAPPER
|
||||||
target.files += $$OUT_PWD/$$DESTDIR/$$IDE_APP_TARGET
|
wrapper.path = /bin
|
||||||
|
|
||||||
target.path = /bin
|
target.path = /bin
|
||||||
INSTALLS += target
|
|
||||||
|
INSTALLS += target wrapper
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -75,6 +75,8 @@ CMakeOpenProjectWizard::CMakeOpenProjectWizard(CMakeManager *cmakeManager, const
|
|||||||
setPage(CMakeRunPageId, new CMakeRunPage(this));
|
setPage(CMakeRunPageId, new CMakeRunPage(this));
|
||||||
|
|
||||||
setStartId(startid);
|
setStartId(startid);
|
||||||
|
setOption(QWizard::NoCancelButton);
|
||||||
|
setOption(QWizard::NoBackButtonOnStartPage);
|
||||||
}
|
}
|
||||||
|
|
||||||
CMakeOpenProjectWizard::CMakeOpenProjectWizard(CMakeManager *cmakeManager, const QString &sourceDirectory,
|
CMakeOpenProjectWizard::CMakeOpenProjectWizard(CMakeManager *cmakeManager, const QString &sourceDirectory,
|
||||||
@@ -87,6 +89,8 @@ CMakeOpenProjectWizard::CMakeOpenProjectWizard(CMakeManager *cmakeManager, const
|
|||||||
addPage(new CMakeRunPage(this, buildDirectory, false));
|
addPage(new CMakeRunPage(this, buildDirectory, false));
|
||||||
foreach(const QString &buildDirectory, needToUpdate)
|
foreach(const QString &buildDirectory, needToUpdate)
|
||||||
addPage(new CMakeRunPage(this, buildDirectory, true));
|
addPage(new CMakeRunPage(this, buildDirectory, true));
|
||||||
|
setOption(QWizard::NoCancelButton);
|
||||||
|
setOption(QWizard::NoBackButtonOnStartPage);
|
||||||
}
|
}
|
||||||
|
|
||||||
CMakeManager *CMakeOpenProjectWizard::cmakeManager() const
|
CMakeManager *CMakeOpenProjectWizard::cmakeManager() const
|
||||||
@@ -255,6 +259,9 @@ void CMakeRunPage::initWidgets()
|
|||||||
|
|
||||||
m_output = new QPlainTextEdit(this);
|
m_output = new QPlainTextEdit(this);
|
||||||
m_output->setReadOnly(true);
|
m_output->setReadOnly(true);
|
||||||
|
QSizePolicy pl = m_output->sizePolicy();
|
||||||
|
pl.setVerticalStretch(1);
|
||||||
|
m_output->setSizePolicy(pl);
|
||||||
fl->addRow(m_output);
|
fl->addRow(m_output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -512,7 +512,6 @@ void CMakeProject::restoreSettingsImpl(ProjectExplorer::PersistentSettingsReader
|
|||||||
cleanMakeStep->setValue("clean", true);
|
cleanMakeStep->setValue("clean", true);
|
||||||
} else {
|
} else {
|
||||||
// We have a user file, but we could still be missing the cbp file
|
// We have a user file, but we could still be missing the cbp file
|
||||||
// TODO check that we have a cbp file and if not, open up a dialog ?
|
|
||||||
// or simply run createXml with the saved settings
|
// or simply run createXml with the saved settings
|
||||||
QFileInfo sourceFileInfo(m_fileName);
|
QFileInfo sourceFileInfo(m_fileName);
|
||||||
QStringList needToCreate;
|
QStringList needToCreate;
|
||||||
|
@@ -158,7 +158,7 @@ DebuggerSettings *DebuggerSettings::instance()
|
|||||||
instance->insertItem(UseDebuggingHelpers, item);
|
instance->insertItem(UseDebuggingHelpers, item);
|
||||||
item->setDefaultValue(true);
|
item->setDefaultValue(true);
|
||||||
item->setSettingsKey("DebugMode", "UseDebuggingHelper");
|
item->setSettingsKey("DebugMode", "UseDebuggingHelper");
|
||||||
item->setText(tr("Use Debugging Helper"));
|
item->setText(tr("Use debugging helper"));
|
||||||
item->setCheckable(true);
|
item->setCheckable(true);
|
||||||
item->setDefaultValue(true);
|
item->setDefaultValue(true);
|
||||||
|
|
||||||
|
@@ -103,6 +103,7 @@ enum GdbCommandType
|
|||||||
GdbQuerySources,
|
GdbQuerySources,
|
||||||
GdbAsyncOutput2,
|
GdbAsyncOutput2,
|
||||||
GdbStart,
|
GdbStart,
|
||||||
|
GdbExit,
|
||||||
GdbAttached,
|
GdbAttached,
|
||||||
GdbStubAttached,
|
GdbStubAttached,
|
||||||
GdbExecRun,
|
GdbExecRun,
|
||||||
@@ -755,6 +756,9 @@ void GdbEngine::handleResult(const GdbResultRecord & record, int type,
|
|||||||
case GdbInfoThreads:
|
case GdbInfoThreads:
|
||||||
handleInfoThreads(record);
|
handleInfoThreads(record);
|
||||||
break;
|
break;
|
||||||
|
case GdbExit:
|
||||||
|
handleExit(record);
|
||||||
|
break;
|
||||||
|
|
||||||
case GdbShowVersion:
|
case GdbShowVersion:
|
||||||
handleShowVersion(record);
|
handleShowVersion(record);
|
||||||
@@ -1167,7 +1171,7 @@ void GdbEngine::handleAsyncOutput(const GdbMi &data)
|
|||||||
+ data.findChild("signal-name").toString();
|
+ data.findChild("signal-name").toString();
|
||||||
}
|
}
|
||||||
q->showStatusMessage(msg);
|
q->showStatusMessage(msg);
|
||||||
sendCommand("-gdb-exit");
|
sendCommand("-gdb-exit", GdbExit);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1525,7 +1529,7 @@ void GdbEngine::exitDebugger()
|
|||||||
sendCommand("detach");
|
sendCommand("detach");
|
||||||
else
|
else
|
||||||
sendCommand("kill");
|
sendCommand("kill");
|
||||||
sendCommand("-gdb-exit");
|
sendCommand("-gdb-exit", GdbExit);
|
||||||
// 20s can easily happen when loading webkit debug information
|
// 20s can easily happen when loading webkit debug information
|
||||||
m_gdbProc.waitForFinished(20000);
|
m_gdbProc.waitForFinished(20000);
|
||||||
if (m_gdbProc.state() != QProcess::Running) {
|
if (m_gdbProc.state() != QProcess::Running) {
|
||||||
@@ -1797,6 +1801,12 @@ void GdbEngine::handleAttach()
|
|||||||
qq->reloadRegisters();
|
qq->reloadRegisters();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GdbEngine::handleExit(const GdbResultRecord &response)
|
||||||
|
{
|
||||||
|
Q_UNUSED(response);
|
||||||
|
q->showStatusMessage(tr("Debugger exited."));
|
||||||
|
}
|
||||||
|
|
||||||
void GdbEngine::stepExec()
|
void GdbEngine::stepExec()
|
||||||
{
|
{
|
||||||
setTokenBarrier();
|
setTokenBarrier();
|
||||||
@@ -2210,6 +2220,11 @@ void GdbEngine::extractDataFromInfoBreak(const QString &output, BreakpointData *
|
|||||||
// within namespaces.
|
// within namespaces.
|
||||||
// Sometimes the path is relative too.
|
// Sometimes the path is relative too.
|
||||||
|
|
||||||
|
// 2 breakpoint keep y <MULTIPLE> 0x0040168e
|
||||||
|
// 2.1 y 0x0040168e in MainWindow::MainWindow(QWidget*) at mainwindow.cpp:7
|
||||||
|
// 2.2 y 0x00401792 in MainWindow::MainWindow(QWidget*) at mainwindow.cpp:7
|
||||||
|
|
||||||
|
// tested in ../../../tests/auto/debugger/
|
||||||
QRegExp re("MULTIPLE.*(0x[0-9a-f]+) in (.*)\\s+at (.*):([\\d]+)([^\\d]|$)");
|
QRegExp re("MULTIPLE.*(0x[0-9a-f]+) in (.*)\\s+at (.*):([\\d]+)([^\\d]|$)");
|
||||||
re.setMinimal(true);
|
re.setMinimal(true);
|
||||||
|
|
||||||
@@ -2218,6 +2233,10 @@ void GdbEngine::extractDataFromInfoBreak(const QString &output, BreakpointData *
|
|||||||
data->bpFuncName = re.cap(2).trimmed();
|
data->bpFuncName = re.cap(2).trimmed();
|
||||||
data->bpLineNumber = re.cap(4);
|
data->bpLineNumber = re.cap(4);
|
||||||
QString full = fullName(re.cap(3));
|
QString full = fullName(re.cap(3));
|
||||||
|
if (full.isEmpty()) {
|
||||||
|
qDebug() << "NO FULL NAME KNOWN FOR" << re.cap(3);
|
||||||
|
full = re.cap(3); // FIXME: wrong, but prevents recursion
|
||||||
|
}
|
||||||
data->markerLineNumber = data->bpLineNumber.toInt();
|
data->markerLineNumber = data->bpLineNumber.toInt();
|
||||||
data->markerFileName = full;
|
data->markerFileName = full;
|
||||||
data->bpFileName = full;
|
data->bpFileName = full;
|
||||||
@@ -3400,14 +3419,15 @@ void GdbEngine::handleQueryDebuggingHelper(const GdbResultRecord &record)
|
|||||||
m_availableSimpleDebuggingHelpers.append(item.data());
|
m_availableSimpleDebuggingHelpers.append(item.data());
|
||||||
if (m_availableSimpleDebuggingHelpers.isEmpty()) {
|
if (m_availableSimpleDebuggingHelpers.isEmpty()) {
|
||||||
m_debuggingHelperState = DebuggingHelperUnavailable;
|
m_debuggingHelperState = DebuggingHelperUnavailable;
|
||||||
QMessageBox::warning(q->mainWindow(),
|
q->showStatusMessage(tr("Debugging helpers not found."));
|
||||||
tr("Cannot find special data dumpers"),
|
//QMessageBox::warning(q->mainWindow(),
|
||||||
tr("The debugged binary does not contain information needed for "
|
// tr("Cannot find special data dumpers"),
|
||||||
"nice display of Qt data types.\n\n"
|
// tr("The debugged binary does not contain information needed for "
|
||||||
"You might want to try including the file\n\n"
|
// "nice display of Qt data types.\n\n"
|
||||||
".../share/qtcreator/gdbmacros/gdbmacros.cpp\n\n"
|
// "You might want to try including the file\n\n"
|
||||||
"into your project directly.")
|
// ".../share/qtcreator/gdbmacros/gdbmacros.cpp\n\n"
|
||||||
);
|
// "into your project directly.")
|
||||||
|
// );
|
||||||
} else {
|
} else {
|
||||||
m_debuggingHelperState = DebuggingHelperAvailable;
|
m_debuggingHelperState = DebuggingHelperAvailable;
|
||||||
q->showStatusMessage(tr("%1 custom dumpers found.")
|
q->showStatusMessage(tr("%1 custom dumpers found.")
|
||||||
|
@@ -199,6 +199,7 @@ private:
|
|||||||
void handleQueryPwd(const GdbResultRecord &response);
|
void handleQueryPwd(const GdbResultRecord &response);
|
||||||
void handleQuerySources(const GdbResultRecord &response);
|
void handleQuerySources(const GdbResultRecord &response);
|
||||||
void handleTargetCore(const GdbResultRecord &response);
|
void handleTargetCore(const GdbResultRecord &response);
|
||||||
|
void handleExit(const GdbResultRecord &response);
|
||||||
void debugMessage(const QString &msg);
|
void debugMessage(const QString &msg);
|
||||||
QString dumperLibraryName() const;
|
QString dumperLibraryName() const;
|
||||||
|
|
||||||
|
@@ -932,7 +932,6 @@ QString WatchHandler::watcherName(const QString &exp)
|
|||||||
void WatchHandler::watchExpression(const QString &exp)
|
void WatchHandler::watchExpression(const QString &exp)
|
||||||
{
|
{
|
||||||
// FIXME: 'exp' can contain illegal characters
|
// FIXME: 'exp' can contain illegal characters
|
||||||
//MODEL_DEBUG("WATCH: " << exp);
|
|
||||||
m_watchers[exp] = watcherCounter++;
|
m_watchers[exp] = watcherCounter++;
|
||||||
WatchData data;
|
WatchData data;
|
||||||
data.exp = exp;
|
data.exp = exp;
|
||||||
|
@@ -96,7 +96,7 @@ public:
|
|||||||
} else if (index.column() == 0) {
|
} else if (index.column() == 0) {
|
||||||
// the watcher name column
|
// the watcher name column
|
||||||
theDebuggerAction(RemoveWatchExpression)->trigger(exp);
|
theDebuggerAction(RemoveWatchExpression)->trigger(exp);
|
||||||
theDebuggerAction(WatchExpression)->trigger(lineEdit->text());
|
theDebuggerAction(WatchExpression)->trigger(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -175,8 +175,6 @@ void WatchWindow::contextMenuEvent(QContextMenuEvent *ev)
|
|||||||
QModelIndex idx = indexAt(ev->pos());
|
QModelIndex idx = indexAt(ev->pos());
|
||||||
QModelIndex mi0 = idx.sibling(idx.row(), 0);
|
QModelIndex mi0 = idx.sibling(idx.row(), 0);
|
||||||
QString exp = model()->data(mi0).toString();
|
QString exp = model()->data(mi0).toString();
|
||||||
QModelIndex mi1 = idx.sibling(idx.row(), 0);
|
|
||||||
QString value = model()->data(mi1).toString();
|
|
||||||
|
|
||||||
menu.addSeparator();
|
menu.addSeparator();
|
||||||
int type = (m_type == LocalsType) ? WatchExpression : RemoveWatchExpression;
|
int type = (m_type == LocalsType) ? WatchExpression : RemoveWatchExpression;
|
||||||
|
14
src/plugins/fakevim/README
Normal file
14
src/plugins/fakevim/README
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
|
||||||
|
|
||||||
|
fakevim is based on eventFilters installed on a QTextEdit or a QPlainTextEdit.
|
||||||
|
It basically catches all keystrokes and modifies some internal state that
|
||||||
|
make the resulting text in the editor look like it was using vim.
|
||||||
|
|
||||||
|
There are only a few files in here:
|
||||||
|
|
||||||
|
fakevimplugin.{h,cpp} - interaction with the rest of Creator
|
||||||
|
fakevimactions.{h,cpp} - settings
|
||||||
|
fakevimhandler.{h,cpp} - the "real" event
|
||||||
|
|
||||||
|
There are some more hints for developers in fakevimhandler.cpp
|
||||||
|
|
@@ -29,13 +29,18 @@
|
|||||||
|
|
||||||
#include "fakevimhandler.h"
|
#include "fakevimhandler.h"
|
||||||
|
|
||||||
// Please do not add any direct dependencies to other Qt Creator code here.
|
//
|
||||||
|
// ATTENTION:
|
||||||
|
//
|
||||||
|
// 1 Please do not add any direct dependencies to other Qt Creator code here.
|
||||||
// Instead emit signals and let the FakeVimPlugin channel the information to
|
// Instead emit signals and let the FakeVimPlugin channel the information to
|
||||||
// Qt Creator. The idea is to keep this file here in a "clean" state that
|
// Qt Creator. The idea is to keep this file here in a "clean" state that
|
||||||
// allows easy reuse with any QTextEdit or QPlainTextEdit derived class.
|
// allows easy reuse with any QTextEdit or QPlainTextEdit derived class.
|
||||||
|
//
|
||||||
|
// 2 There are a few auto tests located in ../../../tests/auto/fakevim.
|
||||||
// Some conventions:
|
// Commands that are covered there are marked as "// tested" below.
|
||||||
|
//
|
||||||
|
// 3 Some conventions:
|
||||||
//
|
//
|
||||||
// Use 1 based line numbers and 0 based column numbers. Even though
|
// Use 1 based line numbers and 0 based column numbers. Even though
|
||||||
// the 1 based line are not nice it matches vim's and QTextEdit's 'line'
|
// the 1 based line are not nice it matches vim's and QTextEdit's 'line'
|
||||||
@@ -47,10 +52,10 @@
|
|||||||
// There is always a "current" cursor (m_tc). A current "region of interest"
|
// There is always a "current" cursor (m_tc). A current "region of interest"
|
||||||
// spans between m_anchor (== anchor()) and m_tc.position() (== position())
|
// spans between m_anchor (== anchor()) and m_tc.position() (== position())
|
||||||
// The value of m_tc.anchor() is not used.
|
// The value of m_tc.anchor() is not used.
|
||||||
|
//
|
||||||
|
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
|
|
||||||
|
|
||||||
#include <QtCore/QDebug>
|
#include <QtCore/QDebug>
|
||||||
#include <QtCore/QFile>
|
#include <QtCore/QFile>
|
||||||
#include <QtCore/QObject>
|
#include <QtCore/QObject>
|
||||||
@@ -278,7 +283,7 @@ public:
|
|||||||
typedef QTextCursor::MoveOperation MoveOperation;
|
typedef QTextCursor::MoveOperation MoveOperation;
|
||||||
typedef QTextCursor::MoveMode MoveMode;
|
typedef QTextCursor::MoveMode MoveMode;
|
||||||
void moveToEndOfDocument() { m_tc.movePosition(EndOfDocument, MoveAnchor); }
|
void moveToEndOfDocument() { m_tc.movePosition(EndOfDocument, MoveAnchor); }
|
||||||
void moveToStartOfLine() { m_tc.movePosition(StartOfLine, MoveAnchor); }
|
void moveToStartOfLine();
|
||||||
void moveToEndOfLine();
|
void moveToEndOfLine();
|
||||||
void moveUp(int n = 1) { moveDown(-n); }
|
void moveUp(int n = 1) { moveDown(-n); }
|
||||||
void moveDown(int n = 1); // { m_tc.movePosition(Down, MoveAnchor, n); }
|
void moveDown(int n = 1); // { m_tc.movePosition(Down, MoveAnchor, n); }
|
||||||
@@ -353,6 +358,8 @@ public:
|
|||||||
|
|
||||||
// extra data for '.'
|
// extra data for '.'
|
||||||
void replay(const QString &text, int count);
|
void replay(const QString &text, int count);
|
||||||
|
void setDotCommand(const QString &cmd) { m_dotCommand = cmd; }
|
||||||
|
void setDotCommand(const QString &cmd, int n) { m_dotCommand = cmd.arg(n); }
|
||||||
QString m_dotCommand;
|
QString m_dotCommand;
|
||||||
bool m_inReplay; // true if we are executing a '.'
|
bool m_inReplay; // true if we are executing a '.'
|
||||||
|
|
||||||
@@ -613,8 +620,9 @@ void FakeVimHandler::Private::moveDown(int n)
|
|||||||
m_tc.movePosition(Down, MoveAnchor, n);
|
m_tc.movePosition(Down, MoveAnchor, n);
|
||||||
#else
|
#else
|
||||||
const int col = m_tc.position() - m_tc.block().position();
|
const int col = m_tc.position() - m_tc.block().position();
|
||||||
const int line = m_tc.block().blockNumber();
|
const int lastLine = m_tc.document()->lastBlock().blockNumber();
|
||||||
const QTextBlock &block = m_tc.document()->findBlockByNumber(line + n);
|
const int targetLine = qMax(0, qMin(lastLine, m_tc.block().blockNumber() + n));
|
||||||
|
const QTextBlock &block = m_tc.document()->findBlockByNumber(targetLine);
|
||||||
const int pos = block.position();
|
const int pos = block.position();
|
||||||
setPosition(pos + qMin(block.length() - 1, col));
|
setPosition(pos + qMin(block.length() - 1, col));
|
||||||
moveToTargetColumn();
|
moveToTargetColumn();
|
||||||
@@ -632,6 +640,17 @@ void FakeVimHandler::Private::moveToEndOfLine()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FakeVimHandler::Private::moveToStartOfLine()
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
// does not work for "hidden" documents like in the autotests
|
||||||
|
m_tc.movePosition(StartOfLine, MoveAnchor);
|
||||||
|
#else
|
||||||
|
const QTextBlock &block = m_tc.block();
|
||||||
|
setPosition(block.position());
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void FakeVimHandler::Private::finishMovement(const QString &dotCommand)
|
void FakeVimHandler::Private::finishMovement(const QString &dotCommand)
|
||||||
{
|
{
|
||||||
//qDebug() << "ANCHOR: " << position() << anchor();
|
//qDebug() << "ANCHOR: " << position() << anchor();
|
||||||
@@ -656,7 +675,7 @@ void FakeVimHandler::Private::finishMovement(const QString &dotCommand)
|
|||||||
if (anchor() >= position())
|
if (anchor() >= position())
|
||||||
m_anchor++;
|
m_anchor++;
|
||||||
if (!dotCommand.isEmpty())
|
if (!dotCommand.isEmpty())
|
||||||
m_dotCommand = "c" + dotCommand;
|
setDotCommand("c" + dotCommand);
|
||||||
QString text = removeSelectedText();
|
QString text = removeSelectedText();
|
||||||
//qDebug() << "CHANGING TO INSERT MODE" << text;
|
//qDebug() << "CHANGING TO INSERT MODE" << text;
|
||||||
m_registers[m_register] = text;
|
m_registers[m_register] = text;
|
||||||
@@ -668,7 +687,7 @@ void FakeVimHandler::Private::finishMovement(const QString &dotCommand)
|
|||||||
if (anchor() >= position())
|
if (anchor() >= position())
|
||||||
m_anchor++;
|
m_anchor++;
|
||||||
if (!dotCommand.isEmpty())
|
if (!dotCommand.isEmpty())
|
||||||
m_dotCommand = "d" + dotCommand;
|
setDotCommand("d" + dotCommand);
|
||||||
m_registers[m_register] = removeSelectedText();
|
m_registers[m_register] = removeSelectedText();
|
||||||
m_submode = NoSubMode;
|
m_submode = NoSubMode;
|
||||||
if (atEndOfLine())
|
if (atEndOfLine())
|
||||||
@@ -694,8 +713,6 @@ void FakeVimHandler::Private::finishMovement(const QString &dotCommand)
|
|||||||
updateMiniBuffer();
|
updateMiniBuffer();
|
||||||
}
|
}
|
||||||
|
|
||||||
moveToTargetColumn();
|
|
||||||
|
|
||||||
m_moveType = MoveInclusive;
|
m_moveType = MoveInclusive;
|
||||||
m_mvcount.clear();
|
m_mvcount.clear();
|
||||||
m_opcount.clear();
|
m_opcount.clear();
|
||||||
@@ -847,13 +864,19 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
|
|||||||
} else if (m_submode == RegisterSubMode) {
|
} else if (m_submode == RegisterSubMode) {
|
||||||
m_register = key;
|
m_register = key;
|
||||||
m_submode = NoSubMode;
|
m_submode = NoSubMode;
|
||||||
} else if (m_submode == ChangeSubMode && key == 'c') {
|
} else if (m_submode == ChangeSubMode && key == 'c') { // tested
|
||||||
moveToStartOfLine();
|
moveDown(count() - 1);
|
||||||
|
moveToEndOfLine();
|
||||||
|
moveLeft();
|
||||||
setAnchor();
|
setAnchor();
|
||||||
moveDown(count());
|
moveToStartOfLine();
|
||||||
|
setTargetColumn();
|
||||||
|
moveUp(count() - 1);
|
||||||
m_moveType = MoveLineWise;
|
m_moveType = MoveLineWise;
|
||||||
finishMovement("c");
|
m_lastInsertion.clear();
|
||||||
} else if (m_submode == DeleteSubMode && key == 'd') {
|
setDotCommand("%1cc", count());
|
||||||
|
finishMovement();
|
||||||
|
} else if (m_submode == DeleteSubMode && key == 'd') { // tested
|
||||||
moveToStartOfLine();
|
moveToStartOfLine();
|
||||||
setAnchor();
|
setAnchor();
|
||||||
moveDown(count());
|
moveDown(count());
|
||||||
@@ -869,19 +892,19 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
|
|||||||
setAnchor();
|
setAnchor();
|
||||||
moveDown(count() - 1);
|
moveDown(count() - 1);
|
||||||
m_moveType = MoveLineWise;
|
m_moveType = MoveLineWise;
|
||||||
m_dotCommand = QString("%1<<").arg(count());
|
setDotCommand("%1<<", count());
|
||||||
finishMovement();
|
finishMovement();
|
||||||
} else if (m_submode == ShiftRightSubMode && key == '>') {
|
} else if (m_submode == ShiftRightSubMode && key == '>') {
|
||||||
setAnchor();
|
setAnchor();
|
||||||
moveDown(count() - 1);
|
moveDown(count() - 1);
|
||||||
m_moveType = MoveLineWise;
|
m_moveType = MoveLineWise;
|
||||||
m_dotCommand = QString("%1>>").arg(count());
|
setDotCommand("%1>>", count());
|
||||||
finishMovement();
|
finishMovement();
|
||||||
} else if (m_submode == IndentSubMode && key == '=') {
|
} else if (m_submode == IndentSubMode && key == '=') {
|
||||||
setAnchor();
|
setAnchor();
|
||||||
moveDown(count() - 1);
|
moveDown(count() - 1);
|
||||||
m_moveType = MoveLineWise;
|
m_moveType = MoveLineWise;
|
||||||
m_dotCommand = QString("%1>>").arg(count());
|
setDotCommand("%1>>", count());
|
||||||
finishMovement();
|
finishMovement();
|
||||||
} else if (m_submode == ZSubMode) {
|
} else if (m_submode == ZSubMode) {
|
||||||
//qDebug() << "Z_MODE " << cursorLineInDocument() << linesOnScreen();
|
//qDebug() << "Z_MODE " << cursorLineInDocument() << linesOnScreen();
|
||||||
@@ -928,7 +951,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
|
|||||||
m_tc.insertText(QString(count(), text.at(0)));
|
m_tc.insertText(QString(count(), text.at(0)));
|
||||||
m_moveType = MoveExclusive;
|
m_moveType = MoveExclusive;
|
||||||
m_submode = NoSubMode;
|
m_submode = NoSubMode;
|
||||||
m_dotCommand = QString("%1r%2").arg(count()).arg(text);
|
setDotCommand("%1r" + text, count());
|
||||||
finishMovement();
|
finishMovement();
|
||||||
} else {
|
} else {
|
||||||
m_submode = NoSubMode;
|
m_submode = NoSubMode;
|
||||||
@@ -1125,7 +1148,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
|
|||||||
handleStartOfLine();
|
handleStartOfLine();
|
||||||
scrollToLineInDocument(cursorLineInDocument() - sline);
|
scrollToLineInDocument(cursorLineInDocument() - sline);
|
||||||
finishMovement();
|
finishMovement();
|
||||||
} else if (key == 'e') {
|
} else if (key == 'e') { // tested
|
||||||
m_moveType = MoveInclusive;
|
m_moveType = MoveInclusive;
|
||||||
moveToWordBoundary(false, true);
|
moveToWordBoundary(false, true);
|
||||||
finishMovement();
|
finishMovement();
|
||||||
@@ -1175,13 +1198,13 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
|
|||||||
handleStartOfLine();
|
handleStartOfLine();
|
||||||
finishMovement();
|
finishMovement();
|
||||||
} else if (key == 'i') {
|
} else if (key == 'i') {
|
||||||
m_dotCommand = "i"; //QString("%1i").arg(count());
|
setDotCommand("i"); // setDotCommand("%1i", count());
|
||||||
enterInsertMode();
|
enterInsertMode();
|
||||||
updateMiniBuffer();
|
updateMiniBuffer();
|
||||||
if (atEndOfLine())
|
if (atEndOfLine())
|
||||||
moveLeft();
|
moveLeft();
|
||||||
} else if (key == 'I') {
|
} else if (key == 'I') {
|
||||||
m_dotCommand = "I"; //QString("%1I").arg(count());
|
setDotCommand("I"); // setDotCommand("%1I", count());
|
||||||
enterInsertMode();
|
enterInsertMode();
|
||||||
if (m_gflag)
|
if (m_gflag)
|
||||||
moveToStartOfLine();
|
moveToStartOfLine();
|
||||||
@@ -1256,7 +1279,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
|
|||||||
search(lastSearchString(), !m_lastSearchForward);
|
search(lastSearchString(), !m_lastSearchForward);
|
||||||
recordJump();
|
recordJump();
|
||||||
} else if (key == 'o' || key == 'O') {
|
} else if (key == 'o' || key == 'O') {
|
||||||
m_dotCommand = QString("%1o").arg(count());
|
setDotCommand("%1o", count());
|
||||||
enterInsertMode();
|
enterInsertMode();
|
||||||
moveToFirstNonBlankOnLine();
|
moveToFirstNonBlankOnLine();
|
||||||
if (key == 'O')
|
if (key == 'O')
|
||||||
@@ -1293,18 +1316,18 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
|
|||||||
moveLeft();
|
moveLeft();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_dotCommand = QString("%1p").arg(count());
|
setDotCommand("%1p", count());
|
||||||
finishMovement();
|
finishMovement();
|
||||||
} else if (key == 'r') {
|
} else if (key == 'r') {
|
||||||
m_submode = ReplaceSubMode;
|
m_submode = ReplaceSubMode;
|
||||||
m_dotCommand = "r";
|
setDotCommand("r");
|
||||||
} else if (key == 'R') {
|
} else if (key == 'R') {
|
||||||
// FIXME: right now we repeat the insertion count() times,
|
// FIXME: right now we repeat the insertion count() times,
|
||||||
// but not the deletion
|
// but not the deletion
|
||||||
m_lastInsertion.clear();
|
m_lastInsertion.clear();
|
||||||
m_mode = InsertMode;
|
m_mode = InsertMode;
|
||||||
m_submode = ReplaceSubMode;
|
m_submode = ReplaceSubMode;
|
||||||
m_dotCommand = "R";
|
setDotCommand("R");
|
||||||
} else if (key == control('r')) {
|
} else if (key == control('r')) {
|
||||||
redo();
|
redo();
|
||||||
} else if (key == 's') {
|
} else if (key == 's') {
|
||||||
@@ -1313,7 +1336,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
|
|||||||
setAnchor();
|
setAnchor();
|
||||||
moveRight(qMin(count(), rightDist()));
|
moveRight(qMin(count(), rightDist()));
|
||||||
m_registers[m_register] = removeSelectedText();
|
m_registers[m_register] = removeSelectedText();
|
||||||
m_dotCommand = "s"; //QString("%1s").arg(count());
|
setDotCommand("s"); // setDotCommand("%1s", count());
|
||||||
m_opcount.clear();
|
m_opcount.clear();
|
||||||
m_mvcount.clear();
|
m_mvcount.clear();
|
||||||
enterInsertMode();
|
enterInsertMode();
|
||||||
@@ -1340,7 +1363,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
|
|||||||
enterVisualMode(VisualLineMode);
|
enterVisualMode(VisualLineMode);
|
||||||
} else if (key == control('v')) {
|
} else if (key == control('v')) {
|
||||||
enterVisualMode(VisualBlockMode);
|
enterVisualMode(VisualBlockMode);
|
||||||
} else if (key == 'w') {
|
} else if (key == 'w') { // tested
|
||||||
// Special case: "cw" and "cW" work the same as "ce" and "cE" if the
|
// Special case: "cw" and "cW" work the same as "ce" and "cE" if the
|
||||||
// cursor is on a non-blank.
|
// cursor is on a non-blank.
|
||||||
if (m_submode == ChangeSubMode) {
|
if (m_submode == ChangeSubMode) {
|
||||||
@@ -1369,7 +1392,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
|
|||||||
setAnchor();
|
setAnchor();
|
||||||
m_submode = DeleteSubMode;
|
m_submode = DeleteSubMode;
|
||||||
moveRight(qMin(count(), rightDist()));
|
moveRight(qMin(count(), rightDist()));
|
||||||
m_dotCommand = QString("%1x").arg(count());
|
setDotCommand("%1x", count());
|
||||||
finishMovement();
|
finishMovement();
|
||||||
} else if (key == 'X') {
|
} else if (key == 'X') {
|
||||||
if (leftDist() > 0) {
|
if (leftDist() > 0) {
|
||||||
@@ -1957,16 +1980,16 @@ void FakeVimHandler::Private::highlightMatches(const QString &needle0)
|
|||||||
|
|
||||||
void FakeVimHandler::Private::moveToFirstNonBlankOnLine()
|
void FakeVimHandler::Private::moveToFirstNonBlankOnLine()
|
||||||
{
|
{
|
||||||
QTextBlock block = m_tc.block();
|
|
||||||
QTextDocument *doc = m_tc.document();
|
QTextDocument *doc = m_tc.document();
|
||||||
m_tc.movePosition(StartOfLine, KeepAnchor);
|
const QTextBlock &block = m_tc.block();
|
||||||
int firstPos = m_tc.position();
|
int firstPos = block.position();
|
||||||
for (int i = firstPos, n = firstPos + block.length(); i < n; ++i) {
|
for (int i = firstPos, n = firstPos + block.length(); i < n; ++i) {
|
||||||
if (!doc->characterAt(i).isSpace()) {
|
if (!doc->characterAt(i).isSpace()) {
|
||||||
m_tc.setPosition(i, KeepAnchor);
|
setPosition(i);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
setPosition(block.position());
|
||||||
}
|
}
|
||||||
|
|
||||||
void FakeVimHandler::Private::indentRegion(QChar typedChar)
|
void FakeVimHandler::Private::indentRegion(QChar typedChar)
|
||||||
@@ -1978,7 +2001,7 @@ void FakeVimHandler::Private::indentRegion(QChar typedChar)
|
|||||||
qSwap(beginLine, endLine);
|
qSwap(beginLine, endLine);
|
||||||
int amount = 0;
|
int amount = 0;
|
||||||
emit q->indentRegion(&amount, beginLine, endLine, typedChar);
|
emit q->indentRegion(&amount, beginLine, endLine, typedChar);
|
||||||
m_dotCommand = QString("%1==").arg(endLine - beginLine + 1);
|
setDotCommand("%1==", endLine - beginLine + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FakeVimHandler::Private::shiftRegionRight(int repeat)
|
void FakeVimHandler::Private::shiftRegionRight(int repeat)
|
||||||
@@ -2000,7 +2023,7 @@ void FakeVimHandler::Private::shiftRegionRight(int repeat)
|
|||||||
|
|
||||||
setPosition(firstPos);
|
setPosition(firstPos);
|
||||||
moveToFirstNonBlankOnLine();
|
moveToFirstNonBlankOnLine();
|
||||||
m_dotCommand = QString("%1>>").arg(endLine - beginLine + 1);
|
setDotCommand("%1>>", endLine - beginLine + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FakeVimHandler::Private::shiftRegionLeft(int repeat)
|
void FakeVimHandler::Private::shiftRegionLeft(int repeat)
|
||||||
@@ -2037,17 +2060,20 @@ void FakeVimHandler::Private::shiftRegionLeft(int repeat)
|
|||||||
|
|
||||||
setPosition(firstPos);
|
setPosition(firstPos);
|
||||||
moveToFirstNonBlankOnLine();
|
moveToFirstNonBlankOnLine();
|
||||||
m_dotCommand = QString("%1<<").arg(endLine - beginLine + 1);
|
setDotCommand("%1<<", endLine - beginLine + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FakeVimHandler::Private::moveToTargetColumn()
|
void FakeVimHandler::Private::moveToTargetColumn()
|
||||||
{
|
{
|
||||||
if (m_targetColumn == -1 || m_tc.block().length() <= m_targetColumn) {
|
|
||||||
const QTextBlock &block = m_tc.block();
|
const QTextBlock &block = m_tc.block();
|
||||||
|
int col = m_tc.position() - m_tc.block().position();
|
||||||
|
if (col == m_targetColumn)
|
||||||
|
return;
|
||||||
|
//qDebug() << "CORRECTING COLUMN FROM: " << col << "TO" << m_targetColumn;
|
||||||
|
if (m_targetColumn == -1 || m_tc.block().length() <= m_targetColumn)
|
||||||
m_tc.setPosition(block.position() + block.length() - 1, KeepAnchor);
|
m_tc.setPosition(block.position() + block.length() - 1, KeepAnchor);
|
||||||
} else {
|
else
|
||||||
m_tc.setPosition(m_tc.block().position() + m_targetColumn, KeepAnchor);
|
m_tc.setPosition(m_tc.block().position() + m_targetColumn, KeepAnchor);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if simple is given:
|
/* if simple is given:
|
||||||
@@ -2075,7 +2101,7 @@ void FakeVimHandler::Private::moveToWordBoundary(bool simple, bool forward)
|
|||||||
int lastClass = -1;
|
int lastClass = -1;
|
||||||
while (true) {
|
while (true) {
|
||||||
QChar c = doc->characterAt(m_tc.position() + (forward ? 1 : -1));
|
QChar c = doc->characterAt(m_tc.position() + (forward ? 1 : -1));
|
||||||
qDebug() << "EXAMINING: " << c << " AT " << position();
|
//qDebug() << "EXAMINING: " << c << " AT " << position();
|
||||||
int thisClass = charClass(c, simple);
|
int thisClass = charClass(c, simple);
|
||||||
if (thisClass != lastClass && lastClass != 0)
|
if (thisClass != lastClass && lastClass != 0)
|
||||||
--repeat;
|
--repeat;
|
||||||
@@ -2319,6 +2345,7 @@ QString FakeVimHandler::Private::removeSelectedText()
|
|||||||
m_tc.setPosition(pos, KeepAnchor);
|
m_tc.setPosition(pos, KeepAnchor);
|
||||||
QString from = m_tc.selection().toPlainText();
|
QString from = m_tc.selection().toPlainText();
|
||||||
m_tc.removeSelectedText();
|
m_tc.removeSelectedText();
|
||||||
|
setAnchor();
|
||||||
return from;
|
return from;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -346,14 +346,15 @@ bool ProFileEvaluator::Private::parseLine(const QString &line0)
|
|||||||
m_contNextLine = escaped;
|
m_contNextLine = escaped;
|
||||||
if (escaped) {
|
if (escaped) {
|
||||||
m_proitem.chop(1);
|
m_proitem.chop(1);
|
||||||
|
updateItem();
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
if (!m_syntaxError) {
|
if (!m_syntaxError) {
|
||||||
updateItem();
|
updateItem();
|
||||||
if (!m_contNextLine)
|
|
||||||
finalizeBlock();
|
finalizeBlock();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return !m_syntaxError;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -235,26 +235,26 @@ examples/xml/xmlstreamlint/xmlstreamlint
|
|||||||
examples/xmlpatterns/filetree/filetree
|
examples/xmlpatterns/filetree/filetree
|
||||||
examples/xmlpatterns/qobjectxmlmodel/qobjectxmlmodel
|
examples/xmlpatterns/qobjectxmlmodel/qobjectxmlmodel
|
||||||
examples/xmlpatterns/recipes/recipes
|
examples/xmlpatterns/recipes/recipes
|
||||||
lib/libQt3Support.so.4.5.0
|
lib/libQt3Support.so.4.5.1
|
||||||
lib/libQtAssistantClient.so.4.5.0
|
lib/libQtAssistantClient.so.4.5.1
|
||||||
lib/libQtCLucene.so.4.5.0
|
lib/libQtCLucene.so.4.5.1
|
||||||
lib/libQtCore.so.4.5.0
|
lib/libQtCore.so.4.5.1
|
||||||
lib/libQtDBus.so.4.5.0
|
lib/libQtDBus.so.4.5.1
|
||||||
lib/libQtDesigner.so.4.5.0
|
lib/libQtDesigner.so.4.5.1
|
||||||
lib/libQtDesignerComponents.so.4.5.0
|
lib/libQtDesignerComponents.so.4.5.1
|
||||||
lib/libQtGui.so.4.5.0
|
lib/libQtGui.so.4.5.1
|
||||||
lib/libQtHelp.so.4.5.0
|
lib/libQtHelp.so.4.5.1
|
||||||
lib/libQtNetwork.so.4.5.0
|
lib/libQtNetwork.so.4.5.1
|
||||||
lib/libQtOpenGL.so.4.5.0
|
lib/libQtOpenGL.so.4.5.1
|
||||||
lib/libQtScript.so.4.5.0
|
lib/libQtScript.so.4.5.1
|
||||||
lib/libQtScriptTools.so.4.5.0
|
lib/libQtScriptTools.so.4.5.1
|
||||||
lib/libQtSql.so.4.5.0
|
lib/libQtSql.so.4.5.1
|
||||||
lib/libQtSvg.so.4.5.0
|
lib/libQtSvg.so.4.5.1
|
||||||
lib/libQtTest.so.4.5.0
|
lib/libQtTest.so.4.5.1
|
||||||
lib/libQtUiTools.a
|
lib/libQtUiTools.a
|
||||||
lib/libQtWebKit.so.4.5.0
|
lib/libQtWebKit.so.4.5.1
|
||||||
lib/libQtXml.so.4.5.0
|
lib/libQtXml.so.4.5.1
|
||||||
lib/libQtXmlPatterns.so.4.5.0
|
lib/libQtXmlPatterns.so.4.5.1
|
||||||
plugins/accessible/libqtaccessiblecompatwidgets.so
|
plugins/accessible/libqtaccessiblecompatwidgets.so
|
||||||
plugins/accessible/libqtaccessiblewidgets.so
|
plugins/accessible/libqtaccessiblewidgets.so
|
||||||
plugins/codecs/libqcncodecs.so
|
plugins/codecs/libqcncodecs.so
|
||||||
|
@@ -79,6 +79,9 @@ private slots:
|
|||||||
void mi10() { testMi(test10); }
|
void mi10() { testMi(test10); }
|
||||||
void mi11() { testMi(test11); }
|
void mi11() { testMi(test11); }
|
||||||
void mi12() { testMi(test12); }
|
void mi12() { testMi(test12); }
|
||||||
|
|
||||||
|
void infoBreak();
|
||||||
|
|
||||||
void runQtc();
|
void runQtc();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
@@ -100,6 +103,41 @@ static QByteArray stripped(QByteArray ba)
|
|||||||
return ba;
|
return ba;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void tst_Debugger::infoBreak()
|
||||||
|
{
|
||||||
|
// This tests the regular expression used in GdbEngine::extractDataFromInfoBreak
|
||||||
|
// to discover breakpoints in constructors.
|
||||||
|
|
||||||
|
// Copied from gdbengine.cpp:
|
||||||
|
|
||||||
|
QRegExp re("MULTIPLE.*(0x[0-9a-f]+) in (.*)\\s+at (.*):([\\d]+)([^\\d]|$)");
|
||||||
|
re.setMinimal(true);
|
||||||
|
|
||||||
|
QCOMPARE(re.indexIn(
|
||||||
|
"2 breakpoint keep y <MULTIPLE> 0x0040168e\n"
|
||||||
|
"2.1 y 0x0040168e "
|
||||||
|
"in MainWindow::MainWindow(QWidget*) at mainwindow.cpp:7\n"
|
||||||
|
"2.2 y 0x00401792 "
|
||||||
|
"in MainWindow::MainWindow(QWidget*) at mainwindow.cpp:7\n"), 33);
|
||||||
|
QCOMPARE(re.cap(1), QString("0x0040168e"));
|
||||||
|
QCOMPARE(re.cap(2).trimmed(), QString("MainWindow::MainWindow(QWidget*)"));
|
||||||
|
QCOMPARE(re.cap(3), QString("mainwindow.cpp"));
|
||||||
|
QCOMPARE(re.cap(4), QString("7"));
|
||||||
|
|
||||||
|
|
||||||
|
QCOMPARE(re.indexIn(
|
||||||
|
"Num Type Disp Enb Address What"
|
||||||
|
"4 breakpoint keep y <MULTIPLE> 0x00000000004066ad"
|
||||||
|
"4.1 y 0x00000000004066ad in CTorTester"
|
||||||
|
" at /main/tests/manual/gdbdebugger/simple/app.cpp:124"), 88);
|
||||||
|
|
||||||
|
QCOMPARE(re.cap(1), QString("0x00000000004066ad"));
|
||||||
|
QCOMPARE(re.cap(2).trimmed(), QString("CTorTester"));
|
||||||
|
QCOMPARE(re.cap(3), QString("/main/tests/manual/gdbdebugger/simple/app.cpp"));
|
||||||
|
QCOMPARE(re.cap(4), QString("124"));
|
||||||
|
}
|
||||||
|
|
||||||
void tst_Debugger::readStandardOutput()
|
void tst_Debugger::readStandardOutput()
|
||||||
{
|
{
|
||||||
qDebug() << "qtcreator-out: " << stripped(m_proc.readAllStandardOutput());
|
qDebug() << "qtcreator-out: " << stripped(m_proc.readAllStandardOutput());
|
||||||
|
@@ -55,13 +55,17 @@ public slots:
|
|||||||
void changeExtraInformation(const QString &info) { m_infoMessage = info; }
|
void changeExtraInformation(const QString &info) { m_infoMessage = info; }
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void commandDollar();
|
// command mode
|
||||||
void commandDown();
|
void command_cc();
|
||||||
void commandLeft();
|
void command_dd();
|
||||||
void commandRight();
|
void command_dollar();
|
||||||
void commandI();
|
void command_down();
|
||||||
void commandUp();
|
void command_e();
|
||||||
void commandW();
|
void command_i();
|
||||||
|
void command_left();
|
||||||
|
void command_right();
|
||||||
|
void command_up();
|
||||||
|
void command_w();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setup();
|
void setup();
|
||||||
@@ -73,6 +77,9 @@ private:
|
|||||||
const char* file, int line);
|
const char* file, int line);
|
||||||
QString insertCursor(const QString &needle0);
|
QString insertCursor(const QString &needle0);
|
||||||
|
|
||||||
|
QString lmid(int i, int n = -1) const
|
||||||
|
{ return QStringList(l.mid(i, n)).join("\n"); }
|
||||||
|
|
||||||
QTextEdit *m_textedit;
|
QTextEdit *m_textedit;
|
||||||
QPlainTextEdit *m_plaintextedit;
|
QPlainTextEdit *m_plaintextedit;
|
||||||
FakeVimHandler *m_handler;
|
FakeVimHandler *m_handler;
|
||||||
@@ -82,6 +89,8 @@ private:
|
|||||||
QString m_statusData;
|
QString m_statusData;
|
||||||
QString m_infoMessage;
|
QString m_infoMessage;
|
||||||
|
|
||||||
|
// the individual lines
|
||||||
|
static const QStringList l; // identifier intentionally kept short
|
||||||
static const QString lines;
|
static const QString lines;
|
||||||
static const QString escape;
|
static const QString escape;
|
||||||
};
|
};
|
||||||
@@ -100,8 +109,11 @@ const QString tst_FakeVim::lines =
|
|||||||
" return app.exec();\n"
|
" return app.exec();\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
|
const QStringList tst_FakeVim::l = tst_FakeVim::lines.split('\n');
|
||||||
|
|
||||||
const QString tst_FakeVim::escape = QChar(27);
|
const QString tst_FakeVim::escape = QChar(27);
|
||||||
|
|
||||||
|
|
||||||
tst_FakeVim::tst_FakeVim(bool usePlainTextEdit)
|
tst_FakeVim::tst_FakeVim(bool usePlainTextEdit)
|
||||||
{
|
{
|
||||||
if (usePlainTextEdit) {
|
if (usePlainTextEdit) {
|
||||||
@@ -170,16 +182,16 @@ bool tst_FakeVim::checkContentsHelper(QString want, const char* file, int line)
|
|||||||
QStringList wantlist = want.split('\n');
|
QStringList wantlist = want.split('\n');
|
||||||
QStringList gotlist = got.split('\n');
|
QStringList gotlist = got.split('\n');
|
||||||
if (!QTest::qCompare(gotlist.size(), wantlist.size(), "", "", file, line)) {
|
if (!QTest::qCompare(gotlist.size(), wantlist.size(), "", "", file, line)) {
|
||||||
qDebug() << "WANT: " << want;
|
qDebug() << "0 WANT: " << want;
|
||||||
qDebug() << "GOT: " << got;
|
qDebug() << "0 GOT: " << got;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
for (int i = 0; i < wantlist.size() && i < gotlist.size(); ++i) {
|
for (int i = 0; i < wantlist.size() && i < gotlist.size(); ++i) {
|
||||||
QString g = QString("line %1: %2").arg(i + 1).arg(gotlist.at(i));
|
QString g = QString("line %1: %2").arg(i + 1).arg(gotlist.at(i));
|
||||||
QString w = QString("line %1: %2").arg(i + 1).arg(wantlist.at(i));
|
QString w = QString("line %1: %2").arg(i + 1).arg(wantlist.at(i));
|
||||||
if (!QTest::qCompare(g, w, "", "", file, line)) {
|
if (!QTest::qCompare(g, w, "", "", file, line)) {
|
||||||
qDebug() << "WANT: " << want;
|
qDebug() << "1 WANT: " << want;
|
||||||
qDebug() << "GOT: " << got;
|
qDebug() << "1 GOT: " << got;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -222,11 +234,78 @@ QString tst_FakeVim::insertCursor(const QString &needle0)
|
|||||||
needle.remove('@');
|
needle.remove('@');
|
||||||
QString lines0 = lines;
|
QString lines0 = lines;
|
||||||
int pos = lines0.indexOf(needle);
|
int pos = lines0.indexOf(needle);
|
||||||
|
if (pos == -1)
|
||||||
|
qDebug() << "Cannot find: \n----\n" + needle + "\n----\n";
|
||||||
lines0.replace(pos, needle.size(), needle0);
|
lines0.replace(pos, needle.size(), needle0);
|
||||||
return lines0;
|
return lines0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_FakeVim::commandI()
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Command mode
|
||||||
|
//
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void tst_FakeVim::command_cc()
|
||||||
|
{
|
||||||
|
setup();
|
||||||
|
move("j", "@" + l[1]);
|
||||||
|
check("ccabc" + escape, l[0] + "\nab@c\n" + lmid(2));
|
||||||
|
check("ccabc" + escape, l[0] + "\nab@c\n" + lmid(2));
|
||||||
|
check(".", l[0] + "\nab@c\n" + lmid(2));
|
||||||
|
check("j", l[0] + "\nabc\n#i@nclude <QtGui>\n" + lmid(3));
|
||||||
|
check("3ccxyz" + escape, l[0] + "\nabc\nxy@z\n" + lmid(5));
|
||||||
|
}
|
||||||
|
|
||||||
|
void tst_FakeVim::command_dd()
|
||||||
|
{
|
||||||
|
setup();
|
||||||
|
move("j", "@" + l[1]);
|
||||||
|
check("dd", l[0] + "\n@" + lmid(2));
|
||||||
|
check(".", l[0] + "\n@" + lmid(3));
|
||||||
|
check("3dd", l[0] + "\n@" + lmid(6));
|
||||||
|
}
|
||||||
|
|
||||||
|
void tst_FakeVim::command_dollar()
|
||||||
|
{
|
||||||
|
setup();
|
||||||
|
move("j$", "<QtCore>@");
|
||||||
|
move("j$", "<QtGui>@");
|
||||||
|
move("2j", ")@");
|
||||||
|
}
|
||||||
|
|
||||||
|
void tst_FakeVim::command_down()
|
||||||
|
{
|
||||||
|
setup();
|
||||||
|
move("j", "@" + l[1]);
|
||||||
|
move("3j", "@int main");
|
||||||
|
move("4j", "@ return app.exec()");
|
||||||
|
}
|
||||||
|
|
||||||
|
void tst_FakeVim::command_e()
|
||||||
|
{
|
||||||
|
setup();
|
||||||
|
move("e", "@#include <QtCore");
|
||||||
|
move("e", "#includ@e <QtCore");
|
||||||
|
move("e", "#include @<QtCore");
|
||||||
|
move("3e", "@#include <QtGui");
|
||||||
|
move("e", "#includ@e <QtGui");
|
||||||
|
move("e", "#include @<QtGui");
|
||||||
|
move("e", "#include <QtGu@i");
|
||||||
|
move("4e", "int main@(int argc, char *argv[])");
|
||||||
|
move("e", "int main(in@t argc, char *argv[])");
|
||||||
|
move("e", "int main(int arg@c, char *argv[])");
|
||||||
|
move("e", "int main(int argc@, char *argv[])");
|
||||||
|
move("e", "int main(int argc, cha@r *argv[])");
|
||||||
|
move("e", "int main(int argc, char @*argv[])");
|
||||||
|
move("e", "int main(int argc, char *arg@v[])");
|
||||||
|
move("e", "int main(int argc, char *argv[]@)");
|
||||||
|
move("e", "@{");
|
||||||
|
move("10k","@\n"); // home.
|
||||||
|
}
|
||||||
|
|
||||||
|
void tst_FakeVim::command_i()
|
||||||
{
|
{
|
||||||
setup();
|
setup();
|
||||||
|
|
||||||
@@ -255,40 +334,7 @@ return;
|
|||||||
check("u", "@" + lines);
|
check("u", "@" + lines);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_FakeVim::commandDollar()
|
void tst_FakeVim::command_left()
|
||||||
{
|
|
||||||
setup();
|
|
||||||
move("j$", "<QtCore>@");
|
|
||||||
move("j$", "<QtGui>@");
|
|
||||||
move("2j", ")@");
|
|
||||||
}
|
|
||||||
|
|
||||||
void tst_FakeVim::commandDown()
|
|
||||||
{
|
|
||||||
setup();
|
|
||||||
move("j", "@#include <QtCore");
|
|
||||||
move("3j", "@int main");
|
|
||||||
move("4j", "@ return app.exec()");
|
|
||||||
}
|
|
||||||
|
|
||||||
void tst_FakeVim::commandUp()
|
|
||||||
{
|
|
||||||
setup();
|
|
||||||
move("j", "@#include <QtCore");
|
|
||||||
move("3j", "@int main");
|
|
||||||
move("4j", "@ return app.exec()");
|
|
||||||
}
|
|
||||||
|
|
||||||
void tst_FakeVim::commandRight()
|
|
||||||
{
|
|
||||||
setup();
|
|
||||||
move("4j", "@int main");
|
|
||||||
move("l", "i@nt main");
|
|
||||||
move("3l", "int @main");
|
|
||||||
move("50l", "argv[])@");
|
|
||||||
}
|
|
||||||
|
|
||||||
void tst_FakeVim::commandLeft()
|
|
||||||
{
|
{
|
||||||
setup();
|
setup();
|
||||||
move("4j", "@int main");
|
move("4j", "@int main");
|
||||||
@@ -299,16 +345,44 @@ void tst_FakeVim::commandLeft()
|
|||||||
move("50h", "@int main");
|
move("50h", "@int main");
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_FakeVim::commandW()
|
void tst_FakeVim::command_right()
|
||||||
|
{
|
||||||
|
setup();
|
||||||
|
move("4j", "@int main");
|
||||||
|
move("l", "i@nt main");
|
||||||
|
move("3l", "int @main");
|
||||||
|
move("50l", "argv[])@");
|
||||||
|
}
|
||||||
|
|
||||||
|
void tst_FakeVim::command_up()
|
||||||
|
{
|
||||||
|
setup();
|
||||||
|
move("j", "@#include <QtCore");
|
||||||
|
move("3j", "@int main");
|
||||||
|
move("4j", "@ return app.exec()");
|
||||||
|
}
|
||||||
|
|
||||||
|
void tst_FakeVim::command_w()
|
||||||
{
|
{
|
||||||
setup();
|
setup();
|
||||||
move("w", "@#include <QtCore");
|
move("w", "@#include <QtCore");
|
||||||
move("w", "#@include <QtCore");
|
move("w", "#@include <QtCore");
|
||||||
move("w", "#include @<QtCore");
|
move("w", "#include @<QtCore");
|
||||||
move("3w", "@#include <QtGui");
|
move("3w", "@#include <QtGui");
|
||||||
|
move("w", "#@include <QtGui");
|
||||||
|
move("w", "#include @<QtGui");
|
||||||
|
move("w", "#include <@QtGui");
|
||||||
|
move("4w", "int main@(int argc, char *argv[])");
|
||||||
|
move("w", "int main(@int argc, char *argv[])");
|
||||||
|
move("w", "int main(int @argc, char *argv[])");
|
||||||
|
move("w", "int main(int argc@, char *argv[])");
|
||||||
|
move("w", "int main(int argc, @char *argv[])");
|
||||||
|
move("w", "int main(int argc, char @*argv[])");
|
||||||
|
move("w", "int main(int argc, char *@argv[])");
|
||||||
|
move("w", "int main(int argc, char *argv@[])");
|
||||||
|
move("w", "@{");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
#include <QtCore>
|
#include <QtCore>
|
||||||
#include <QtGui>
|
#include <QtGui>
|
||||||
@@ -321,6 +395,14 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Main
|
||||||
|
//
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
int main(int argc, char *argv[]) \
|
int main(int argc, char *argv[]) \
|
||||||
{
|
{
|
||||||
int res = 0;
|
int res = 0;
|
||||||
|
@@ -87,6 +87,12 @@ public:
|
|||||||
b = 2 + s + t;
|
b = 2 + s + t;
|
||||||
a += 1;
|
a += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
~Foo()
|
||||||
|
{
|
||||||
|
a = 5;
|
||||||
|
}
|
||||||
|
|
||||||
void doit()
|
void doit()
|
||||||
{
|
{
|
||||||
static QObject ob;
|
static QObject ob;
|
||||||
|
Reference in New Issue
Block a user