cmake-gui: Add search functions for Output window (#9733)

Signed-off-by: Alex Neundorf <neundorf@kde.org>
This commit is contained in:
Marc Bartholomaeus 2013-04-18 01:01:10 +02:00 committed by Alex Neundorf
parent 6a3ee5dd4e
commit df3663bfab
2 changed files with 76 additions and 0 deletions

View File

@ -28,6 +28,7 @@
#include <QShortcut>
#include <QKeySequence>
#include <QMacInstallDialog.h>
#include <QInputDialog>
#include "QCMake.h"
#include "QCMakeCacheView.h"
@ -122,6 +123,16 @@ CMakeSetupDialog::CMakeSetupDialog()
QObject::connect(this->InstallForCommandLineAction, SIGNAL(triggered(bool)),
this, SLOT(doInstallForCommandLine()));
#endif
ToolsMenu->addSeparator();
ToolsMenu->addAction(tr("&Find in Output..."),
this, SLOT(doOutputFindDialog()));
ToolsMenu->addAction(tr("&Find Next"),
this, SLOT(doOutputFindNext()),
QKeySequence::FindNext);
ToolsMenu->addAction(tr("&Find Previous"),
this, SLOT(doOutputFindPrev()),
QKeySequence::FindPrevious);
QMenu* OptionsMenu = this->menuBar()->addMenu(tr("&Options"));
this->SuppressDevWarningsAction =
OptionsMenu->addAction(tr("&Suppress dev Warnings (-Wno-dev)"));
@ -1149,4 +1160,65 @@ void CMakeSetupDialog::setSearchFilter(const QString& str)
this->CacheValues->setSearchFilter(str);
}
void CMakeSetupDialog::doOutputFindDialog()
{
QStringList strings(this->FindHistory);
QString selection = this->Output->textCursor().selectedText();
if (!selection.isEmpty() && !selection.contains(QChar::ParagraphSeparator))
{
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())
{
if (!this->FindHistory.contains(search))
{
this->FindHistory.push_front(search);
}
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;
if (!directionForward)
{
flags |= QTextDocument::FindBackward;
}
cursor = document->find(search, cursor, flags);
if (cursor.isNull())
{
// first search found nothing, wrap around and search again
cursor = this->Output->textCursor();
cursor.movePosition(directionForward ? QTextCursor::Start
: QTextCursor::End);
cursor = document->find(search, cursor, flags);
}
if (cursor.hasSelection())
{
this->Output->setTextCursor(cursor);
}
}

View File

@ -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;