Attached Files | 0001-Search-functions-for-Output-window.patch [^] (3,584 bytes) 2013-03-08 22:22 [Show Content] [Hide Content]From 8bb150bce30358282800eb1c69af343c4ce5c828 Mon Sep 17 00:00:00 2001
From: Marc Bartholomaeus <marc.bartholomaeus@carmeq.com>
Date: Mon, 29 Oct 2012 00:38:06 +0100
Subject: [PATCH 1/5] Search functions for Output window
---
Source/QtDialog/CMakeSetupDialog.cxx | 63 ++++++++++++++++++++++++++++++++++++
Source/QtDialog/CMakeSetupDialog.h | 4 +++
2 files changed, 67 insertions(+)
diff --git a/Source/QtDialog/CMakeSetupDialog.cxx b/Source/QtDialog/CMakeSetupDialog.cxx
index c0dde1c..10bdbe9 100644
--- a/Source/QtDialog/CMakeSetupDialog.cxx
+++ b/Source/QtDialog/CMakeSetupDialog.cxx
@@ -28,6 +28,7 @@
#include <QShortcut>
#include <QKeySequence>
#include <QMacInstallDialog.h>
+#include <QInputDialog>
#include "QCMake.h"
#include "QCMakeCacheView.h"
@@ -158,6 +159,9 @@ CMakeSetupDialog::CMakeSetupDialog()
QObject::connect(filterShortcut, SIGNAL(activated()),
this, SLOT(startSearch()));
+ new QShortcut(QKeySequence::FindNext, this, SLOT(doOutputFindNext()));
+ new QShortcut(QKeySequence::FindPrevious, this, SLOT(doOutputFindPrev()));
+
this->setAcceptDrops(true);
// get the saved binary directories
@@ -1150,3 +1154,62 @@ void CMakeSetupDialog::setSearchFilter(const QString& str)
}
+void CMakeSetupDialog::doOutputFindDialog()
+{
+ QStringList strings(this->FindHistory);
+
+ QString selection = this->Output->textCursor().selectedText();
+ if (!selection.isEmpty() && !selection.contains(QChar(0x2029)))
+ {
+ // is a one-line selection
+ strings.push_front(selection);
+ }
+
+ bool ok;
+ QString search = QInputDialog::getItem(this, tr("Find in Output"), tr("Find:"), strings, 0, true, &ok);
+
+ if (ok && !search.isEmpty())
+ {
+ this->FindHistory.push_front(search);
+ this->FindHistory.removeDuplicates();
+ doOutputFindNext();
+ }
+}
+
+void CMakeSetupDialog::doOutputFindPrev()
+{
+ doOutputFindNext(false);
+}
+
+void CMakeSetupDialog::doOutputFindNext(bool directionForward)
+{
+ if (this->FindHistory.isEmpty())
+ {
+ doOutputFindDialog(); //will re-call this function again
+ return;
+ }
+
+ QString search = this->FindHistory.front();
+
+ QTextCursor cursor = this->Output->textCursor();
+ QTextDocument* document = this->Output->document();
+ QTextDocument::FindFlags flags = directionForward ? 0 : QTextDocument::FindBackward;
+
+ cursor = document->find(search, cursor, flags);
+ //qDebug("doOutputFindNext::selection: %d, %d..%d", pos.position(), pos.selectionStart(), pos.selectionEnd());
+
+ if (cursor.isNull())
+ {
+ // first search found nothing, wrap around and search again
+ cursor = this->Output->textCursor(); //movePosition() only works with nonNull cursors
+ cursor.movePosition(directionForward ? QTextCursor::Start : QTextCursor::End);
+ cursor = document->find(search, cursor, flags);
+ }
+
+ if (cursor.hasSelection())
+ {
+ this->Output->setTextCursor(cursor);
+ }
+
+}
+
diff --git a/Source/QtDialog/CMakeSetupDialog.h b/Source/QtDialog/CMakeSetupDialog.h
index 2599675..88fefcc 100644
--- a/Source/QtDialog/CMakeSetupDialog.h
+++ b/Source/QtDialog/CMakeSetupDialog.h
@@ -77,6 +77,9 @@ protected slots:
bool doConfigureInternal();
bool doGenerateInternal();
void exitLoop(int);
+ void doOutputFindDialog();
+ void doOutputFindNext(bool directionForward = true);
+ void doOutputFindPrev();
protected:
@@ -106,6 +109,7 @@ protected:
QTextCharFormat MessageFormat;
QStringList AddVariableCompletions;
+ QStringList FindHistory;
QEventLoop LocalLoop;
--
1.8.0.msysgit.0
0002-Search-functions-added-to-context-menu-of-the-Output.patch [^] (2,256 bytes) 2013-03-08 22:22 [Show Content] [Hide Content]From 9d6e7ee527fa23e2aed3abbc72c8b885b321b243 Mon Sep 17 00:00:00 2001
From: Marc Bartholomaeus <marc.bartholomaeus@carmeq.com>
Date: Sat, 9 Mar 2013 04:05:10 +0100
Subject: [PATCH 2/5] Search functions added to context menu of the Output
widget
---
Source/QtDialog/CMakeSetupDialog.cxx | 15 +++++++++++++++
Source/QtDialog/CMakeSetupDialog.h | 1 +
2 files changed, 16 insertions(+)
diff --git a/Source/QtDialog/CMakeSetupDialog.cxx b/Source/QtDialog/CMakeSetupDialog.cxx
index 10bdbe9..476d705 100644
--- a/Source/QtDialog/CMakeSetupDialog.cxx
+++ b/Source/QtDialog/CMakeSetupDialog.cxx
@@ -176,6 +176,10 @@ CMakeSetupDialog::CMakeSetupDialog()
this->Output->setFont(outputFont);
this->ErrorFormat.setForeground(QBrush(Qt::red));
+ this->Output->setContextMenuPolicy(Qt::CustomContextMenu);
+ connect(this->Output, SIGNAL(customContextMenuRequested(const QPoint&)),
+ this, SLOT(doOutputContextMenu(const QPoint &)));
+
// start the cmake worker thread
this->CMakeThread = new QCMakeThread(this);
QObject::connect(this->CMakeThread, SIGNAL(cmakeInitialized()),
@@ -1153,6 +1157,17 @@ void CMakeSetupDialog::setSearchFilter(const QString& str)
this->CacheValues->setSearchFilter(str);
}
+void CMakeSetupDialog::doOutputContextMenu(const QPoint &pt)
+{
+ QMenu *menu = this->Output->createStandardContextMenu();
+
+ menu->addSeparator();
+ menu->addAction(tr("Find..."), this, SLOT(doOutputFindDialog()));
+ menu->addAction(tr("Find Next"), this, SLOT(doOutputFindNext()), QKeySequence::FindNext);
+ menu->addAction(tr("Find Previous"), this, SLOT(doOutputFindPrev()), QKeySequence::FindPrevious);
+ menu->exec(this->Output->mapToGlobal(pt));
+ delete menu;
+}
void CMakeSetupDialog::doOutputFindDialog()
{
diff --git a/Source/QtDialog/CMakeSetupDialog.h b/Source/QtDialog/CMakeSetupDialog.h
index 88fefcc..100834d 100644
--- a/Source/QtDialog/CMakeSetupDialog.h
+++ b/Source/QtDialog/CMakeSetupDialog.h
@@ -77,6 +77,7 @@ protected slots:
bool doConfigureInternal();
bool doGenerateInternal();
void exitLoop(int);
+ void doOutputContextMenu(const QPoint &);
void doOutputFindDialog();
void doOutputFindNext(bool directionForward = true);
void doOutputFindPrev();
--
1.8.0.msysgit.0
0003-Changed-shortcuts-Alt-E-search-field-Ctrl-F-find-in-.patch [^] (2,305 bytes) 2013-03-08 22:22 [Show Content] [Hide Content]From ff692661444b960d0bf3259cd2c3a764204486d4 Mon Sep 17 00:00:00 2001
From: Marc Bartholomaeus <marc.bartholomaeus@carmeq.com>
Date: Sat, 9 Mar 2013 04:19:36 +0100
Subject: [PATCH 3/5] Changed shortcuts: Alt-E: search field; Ctrl-F: find in
output
---
Source/QtDialog/CMakeSetupDialog.cxx | 7 ++-----
Source/QtDialog/CMakeSetupDialog.ui | 5 ++++-
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/Source/QtDialog/CMakeSetupDialog.cxx b/Source/QtDialog/CMakeSetupDialog.cxx
index 476d705..5748a30 100644
--- a/Source/QtDialog/CMakeSetupDialog.cxx
+++ b/Source/QtDialog/CMakeSetupDialog.cxx
@@ -155,10 +155,7 @@ CMakeSetupDialog::CMakeSetupDialog()
QObject::connect(a, SIGNAL(triggered(bool)),
this, SLOT(doHelp()));
- QShortcut* filterShortcut = new QShortcut(QKeySequence::Find, this);
- QObject::connect(filterShortcut, SIGNAL(activated()),
- this, SLOT(startSearch()));
-
+ new QShortcut(QKeySequence::Find, this, SLOT(doOutputFindDialog()));
new QShortcut(QKeySequence::FindNext, this, SLOT(doOutputFindNext()));
new QShortcut(QKeySequence::FindPrevious, this, SLOT(doOutputFindPrev()));
@@ -1162,7 +1159,7 @@ void CMakeSetupDialog::doOutputContextMenu(const QPoint &pt)
QMenu *menu = this->Output->createStandardContextMenu();
menu->addSeparator();
- menu->addAction(tr("Find..."), this, SLOT(doOutputFindDialog()));
+ menu->addAction(tr("Find..."), this, SLOT(doOutputFindDialog()), QKeySequence::Find);
menu->addAction(tr("Find Next"), this, SLOT(doOutputFindNext()), QKeySequence::FindNext);
menu->addAction(tr("Find Previous"), this, SLOT(doOutputFindPrev()), QKeySequence::FindPrevious);
menu->exec(this->Output->mapToGlobal(pt));
diff --git a/Source/QtDialog/CMakeSetupDialog.ui b/Source/QtDialog/CMakeSetupDialog.ui
index dc8ee3f..98da249 100644
--- a/Source/QtDialog/CMakeSetupDialog.ui
+++ b/Source/QtDialog/CMakeSetupDialog.ui
@@ -107,7 +107,10 @@
</sizepolicy>
</property>
<property name="text">
- <string>Search:</string>
+ <string>S&earch:</string>
+ </property>
+ <property name="buddy">
+ <cstring>Search</cstring>
</property>
</widget>
</item>
--
1.8.0.msysgit.0
0004-Goto-next-error-in-Output-window.patch [^] (4,056 bytes) 2013-03-08 22:22 [Show Content] [Hide Content]From 4c649b147a637fe78e2c2433360e01d060854863 Mon Sep 17 00:00:00 2001
From: Marc Bartholomaeus <marc.bartholomaeus@carmeq.com>
Date: Sat, 9 Mar 2013 04:08:02 +0100
Subject: [PATCH 4/5] Goto next error in Output window
---
Source/QtDialog/CMakeSetupDialog.cxx | 51 ++++++++++++++++++++++++++++++++++++
Source/QtDialog/CMakeSetupDialog.h | 1 +
2 files changed, 52 insertions(+)
diff --git a/Source/QtDialog/CMakeSetupDialog.cxx b/Source/QtDialog/CMakeSetupDialog.cxx
index 5748a30..5c7ef3b 100644
--- a/Source/QtDialog/CMakeSetupDialog.cxx
+++ b/Source/QtDialog/CMakeSetupDialog.cxx
@@ -158,6 +158,9 @@ CMakeSetupDialog::CMakeSetupDialog()
new QShortcut(QKeySequence::Find, this, SLOT(doOutputFindDialog()));
new QShortcut(QKeySequence::FindNext, this, SLOT(doOutputFindNext()));
new QShortcut(QKeySequence::FindPrevious, this, SLOT(doOutputFindPrev()));
+ new QShortcut(QKeySequence(Qt::Key_F4), this, SLOT(doOutputErrorNext())); // in VisualStudio
+ new QShortcut(QKeySequence(Qt::Key_F8), this, SLOT(doOutputErrorNext())); // in VisualStudio
+ new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Period), this, SLOT(doOutputErrorNext())); // in Eclipse
this->setAcceptDrops(true);
@@ -1162,6 +1165,9 @@ void CMakeSetupDialog::doOutputContextMenu(const QPoint &pt)
menu->addAction(tr("Find..."), this, SLOT(doOutputFindDialog()), QKeySequence::Find);
menu->addAction(tr("Find Next"), this, SLOT(doOutputFindNext()), QKeySequence::FindNext);
menu->addAction(tr("Find Previous"), this, SLOT(doOutputFindPrev()), QKeySequence::FindPrevious);
+ menu->addSeparator();
+ menu->addAction(tr("Goto Next Error"), this, SLOT(doOutputErrorNext()), QKeySequence(Qt::Key_F8));
+
menu->exec(this->Output->mapToGlobal(pt));
delete menu;
}
@@ -1225,3 +1231,48 @@ void CMakeSetupDialog::doOutputFindNext(bool directionForward)
}
+void CMakeSetupDialog::doOutputErrorNext()
+{
+ QTextCursor cursor = this->Output->textCursor();
+ bool atEnd = false;
+
+ // move cursor out of current error-block
+ while (cursor.blockCharFormat() == this->ErrorFormat && !atEnd)
+ atEnd = !cursor.movePosition(QTextCursor::NextBlock);
+
+ // move cursor to next error-block
+ while (cursor.blockCharFormat() != this->ErrorFormat && !atEnd)
+ atEnd = !cursor.movePosition(QTextCursor::NextBlock);
+
+ if (atEnd)
+ {
+ // first search found nothing, wrap around and search again
+ atEnd = !cursor.movePosition(QTextCursor::Start);
+
+ // move cursor to next error-block
+ while (cursor.blockCharFormat() != this->ErrorFormat && !atEnd)
+ atEnd = !cursor.movePosition(QTextCursor::NextBlock);
+ }
+
+ if (!atEnd)
+ {
+ // move end-of-selection out of current error-block
+ while (cursor.blockCharFormat() == this->ErrorFormat && !atEnd)
+ atEnd = !cursor.movePosition(QTextCursor::NextBlock, QTextCursor::KeepAnchor);
+
+ if (atEnd)
+ cursor.movePosition(QTextCursor::End, QTextCursor::KeepAnchor);
+
+ //qDebug("doOutputFindNext::selection: %d..%d atErrorBlock %d nearEnd %d", cursor.selectionStart(), cursor.selectionEnd(), cursor.blockCharFormat() == this->ErrorFormat, nearEnd);
+
+ QTextCharFormat selectionFormat;
+ selectionFormat.setBackground(Qt::yellow);
+ QTextEdit::ExtraSelection extraSelection = {cursor, selectionFormat};
+ this->Output->setExtraSelections(QList<QTextEdit::ExtraSelection>() << extraSelection);
+
+ this->Output->setTextCursor(cursor); // make the whole error-block visible
+ cursor.setPosition(cursor.anchor());
+ this->Output->setTextCursor(cursor); // remove the selection to see the extraSelection
+ }
+
+}
diff --git a/Source/QtDialog/CMakeSetupDialog.h b/Source/QtDialog/CMakeSetupDialog.h
index 100834d..963c7d1 100644
--- a/Source/QtDialog/CMakeSetupDialog.h
+++ b/Source/QtDialog/CMakeSetupDialog.h
@@ -81,6 +81,7 @@ protected slots:
void doOutputFindDialog();
void doOutputFindNext(bool directionForward = true);
void doOutputFindPrev();
+ void doOutputErrorNext();
protected:
--
1.8.0.msysgit.0
0004-Goto-next-error-in-Output-window_v2.patch [^] (4,939 bytes) 2013-03-09 10:32 [Show Content] [Hide Content]From ec049cefe4d585f043f28e73f0e37001efabae67 Mon Sep 17 00:00:00 2001
From: Nagger <nagger@gmx.de>
Date: Sat, 9 Mar 2013 04:08:02 +0100
Subject: [PATCH 4/4] Goto next error in Output window
---
Source/QtDialog/CMakeSetupDialog.cxx | 63 ++++++++++++++++++++++++++++++++++--
Source/QtDialog/CMakeSetupDialog.h | 1 +
2 files changed, 62 insertions(+), 2 deletions(-)
diff --git a/Source/QtDialog/CMakeSetupDialog.cxx b/Source/QtDialog/CMakeSetupDialog.cxx
index 5748a30..7319e8e 100644
--- a/Source/QtDialog/CMakeSetupDialog.cxx
+++ b/Source/QtDialog/CMakeSetupDialog.cxx
@@ -158,6 +158,9 @@ CMakeSetupDialog::CMakeSetupDialog()
new QShortcut(QKeySequence::Find, this, SLOT(doOutputFindDialog()));
new QShortcut(QKeySequence::FindNext, this, SLOT(doOutputFindNext()));
new QShortcut(QKeySequence::FindPrevious, this, SLOT(doOutputFindPrev()));
+ new QShortcut(QKeySequence(Qt::Key_F4), this, SLOT(doOutputErrorNext())); // in VisualStudio
+ new QShortcut(QKeySequence(Qt::Key_F8), this, SLOT(doOutputErrorNext())); // in VisualStudio
+ new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Period), this, SLOT(doOutputErrorNext())); // in Eclipse
this->setAcceptDrops(true);
@@ -642,7 +645,13 @@ void CMakeSetupDialog::showProgress(const QString& /*msg*/, float percent)
void CMakeSetupDialog::error(const QString& msg)
{
this->Output->setCurrentCharFormat(this->ErrorFormat);
- this->Output->append(msg);
+ //QTextEdit will terminate the msg with a ParagraphSeparator, but it also replaces
+ //all newlines with ParagraphSeparators. By replacing the newlines by ourself, one
+ //error msg will be one paragraph.
+ QString paragraph(msg);
+ paragraph.replace(QLatin1Char('\n'), QChar::LineSeparator);
+ this->Output->append(paragraph);
+
}
void CMakeSetupDialog::message(const QString& msg)
@@ -1162,6 +1171,9 @@ void CMakeSetupDialog::doOutputContextMenu(const QPoint &pt)
menu->addAction(tr("Find..."), this, SLOT(doOutputFindDialog()), QKeySequence::Find);
menu->addAction(tr("Find Next"), this, SLOT(doOutputFindNext()), QKeySequence::FindNext);
menu->addAction(tr("Find Previous"), this, SLOT(doOutputFindPrev()), QKeySequence::FindPrevious);
+ menu->addSeparator();
+ menu->addAction(tr("Goto Next Error"), this, SLOT(doOutputErrorNext()), QKeySequence(Qt::Key_F8));
+
menu->exec(this->Output->mapToGlobal(pt));
delete menu;
}
@@ -1171,7 +1183,9 @@ void CMakeSetupDialog::doOutputFindDialog()
QStringList strings(this->FindHistory);
QString selection = this->Output->textCursor().selectedText();
- if (!selection.isEmpty() && !selection.contains(QChar(0x2029)))
+ if (!selection.isEmpty() &&
+ !selection.contains(QChar::ParagraphSeparator) &&
+ !selection.contains(QChar::LineSeparator))
{
// is a one-line selection
strings.push_front(selection);
@@ -1225,3 +1239,48 @@ void CMakeSetupDialog::doOutputFindNext(bool directionForward)
}
+void CMakeSetupDialog::doOutputErrorNext()
+{
+ QTextCursor cursor = this->Output->textCursor();
+ bool atEnd = false;
+
+ // move cursor out of current error-block
+ if (cursor.blockCharFormat() == this->ErrorFormat)
+ {
+ atEnd = !cursor.movePosition(QTextCursor::NextBlock);
+ }
+
+ // move cursor to next error-block
+ while (cursor.blockCharFormat() != this->ErrorFormat && !atEnd)
+ {
+ atEnd = !cursor.movePosition(QTextCursor::NextBlock);
+ }
+
+ if (atEnd)
+ {
+ // first search found nothing, wrap around and search again
+ atEnd = !cursor.movePosition(QTextCursor::Start);
+
+ // move cursor to next error-block
+ while (cursor.blockCharFormat() != this->ErrorFormat && !atEnd)
+ {
+ atEnd = !cursor.movePosition(QTextCursor::NextBlock);
+ }
+ }
+
+ if (!atEnd)
+ {
+ //qDebug("doOutputFindNext::selection: %d..%d atErrorBlock %d atEnd %d", cursor.selectionStart(), cursor.selectionEnd(), cursor.blockCharFormat() == this->ErrorFormat, atEnd);
+ cursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor);
+
+ QTextCharFormat selectionFormat;
+ selectionFormat.setBackground(Qt::yellow);
+ QTextEdit::ExtraSelection extraSelection = {cursor, selectionFormat};
+ this->Output->setExtraSelections(QList<QTextEdit::ExtraSelection>() << extraSelection);
+
+ this->Output->setTextCursor(cursor); // make the whole error-block visible
+ cursor.setPosition(cursor.anchor());
+ this->Output->setTextCursor(cursor); // remove the selection to see the extraSelection
+ }
+
+}
diff --git a/Source/QtDialog/CMakeSetupDialog.h b/Source/QtDialog/CMakeSetupDialog.h
index 100834d..963c7d1 100644
--- a/Source/QtDialog/CMakeSetupDialog.h
+++ b/Source/QtDialog/CMakeSetupDialog.h
@@ -81,6 +81,7 @@ protected slots:
void doOutputFindDialog();
void doOutputFindNext(bool directionForward = true);
void doOutputFindPrev();
+ void doOutputErrorNext();
protected:
--
1.8.0.msysgit.0
search for string_v2.zip [^] (5,622 bytes) 2013-04-17 19:14 |