From a2b437b903e18e1f54b00be7bfd72bf6d6e81df2 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 25 Feb 2020 14:55:21 +0000 Subject: [PATCH] Change Find/Replace dialog to have Find Next/Find Previous buttons * Enter and shift-enter in the find text go forwarwd and backwards respectively. * This replaces the previous system of selecting a direction explicitly and only ever going in that direction when finding. --- qrenderdoc/Widgets/FindReplace.cpp | 46 +++++++--- qrenderdoc/Widgets/FindReplace.h | 3 + qrenderdoc/Widgets/FindReplace.ui | 131 +++++++++++----------------- qrenderdoc/Windows/ShaderViewer.cpp | 5 +- 4 files changed, 90 insertions(+), 95 deletions(-) diff --git a/qrenderdoc/Widgets/FindReplace.cpp b/qrenderdoc/Widgets/FindReplace.cpp index 4d7c78677..21987c371 100644 --- a/qrenderdoc/Widgets/FindReplace.cpp +++ b/qrenderdoc/Widgets/FindReplace.cpp @@ -25,6 +25,7 @@ #include "FindReplace.h" #include #include +#include "Widgets/Extended/RDLineEdit.h" #include "ui_FindReplace.h" FindReplace::FindReplace(QWidget *parent) : QFrame(parent), ui(new Ui::FindReplace) @@ -37,8 +38,25 @@ FindReplace::FindReplace(QWidget *parent) : QFrame(parent), ui(new Ui::FindRepla setReplaceMode(false); setDirection(FindReplace::Down); - QObject::connect(ui->findText->lineEdit(), &QLineEdit::returnPressed, this, - &FindReplace::on_find_clicked); + RDLineEdit *edit = new RDLineEdit(this); + ui->findText->setLineEdit(edit); + + QObject::connect(edit, &RDLineEdit::keyPress, [this](QKeyEvent *event) { + if(event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter) + { + SearchDirection dir = m_direction; + + if(event->modifiers() & Qt::ShiftModifier) + m_direction = SearchDirection::Up; + else + m_direction = SearchDirection::Down; + + addHistory(ui->findText); + emit performFind(); + + m_direction = dir; + } + }); QObject::connect(ui->replaceText->lineEdit(), &QLineEdit::returnPressed, this, &FindReplace::on_replace_clicked); } @@ -60,7 +78,7 @@ FindReplace::SearchContext FindReplace::context() FindReplace::SearchDirection FindReplace::direction() { - return ui->searchUp->isChecked() ? FindReplace::Up : FindReplace::Down; + return m_direction; } bool FindReplace::matchCase() @@ -108,10 +126,7 @@ void FindReplace::setReplaceMode(bool replacing) void FindReplace::setDirection(SearchDirection dir) { - if(dir == FindReplace::Up) - ui->searchUp->setChecked(true); - else - ui->searchDown->setChecked(true); + m_direction = dir; } void FindReplace::takeFocus() @@ -124,19 +139,16 @@ void FindReplace::keyPressEvent(QKeyEvent *event) { if(event->key() == Qt::Key_F3) { - SearchDirection dir = direction(); + SearchDirection dir = m_direction; if(event->modifiers() & Qt::ShiftModifier) - ui->searchUp->setChecked(true); + m_direction = SearchDirection::Up; else - ui->searchDown->setChecked(true); + m_direction = SearchDirection::Down; emit performFind(); - if(dir == FindReplace::Up) - ui->searchUp->setChecked(true); - else - ui->searchDown->setChecked(true); + m_direction = dir; } } @@ -158,6 +170,12 @@ void FindReplace::addHistory(QComboBox *combo) combo->setCurrentText(text); } +void FindReplace::on_findPrev_clicked() +{ + addHistory(ui->findText); + emit performFind(); +} + void FindReplace::on_find_clicked() { addHistory(ui->findText); diff --git a/qrenderdoc/Widgets/FindReplace.h b/qrenderdoc/Widgets/FindReplace.h index 55dc475cf..3d35785bb 100644 --- a/qrenderdoc/Widgets/FindReplace.h +++ b/qrenderdoc/Widgets/FindReplace.h @@ -78,6 +78,7 @@ signals: private slots: // automatic slots + void on_findPrev_clicked(); void on_find_clicked(); void on_findAll_clicked(); void on_replace_clicked(); @@ -90,5 +91,7 @@ private: Ui::FindReplace *ui; + SearchDirection m_direction; + void addHistory(QComboBox *combo); }; diff --git a/qrenderdoc/Widgets/FindReplace.ui b/qrenderdoc/Widgets/FindReplace.ui index 035df53ea..62710ad53 100644 --- a/qrenderdoc/Widgets/FindReplace.ui +++ b/qrenderdoc/Widgets/FindReplace.ui @@ -7,10 +7,26 @@ 0 0 321 - 352 + 291 + + + + Qt::Vertical + + + QSizePolicy::MinimumExpanding + + + + 0 + 0 + + + + @@ -81,7 +97,23 @@ - + + + + Qt::Horizontal + + + QSizePolicy::MinimumExpanding + + + + 40 + 20 + + + + + @@ -102,34 +134,41 @@ 0 - + Replace All - - - - Replace - - - - + Find Next - + Find All + + + + Find Previous + + + + + + + Replace + + + @@ -196,74 +235,6 @@ - - - - Qt::Vertical - - - QSizePolicy::MinimumExpanding - - - - 0 - 0 - - - - - - - - Qt::Horizontal - - - QSizePolicy::MinimumExpanding - - - - 40 - 20 - - - - - - - - Direction - - - - - - Up - - - - - - - Down - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - diff --git a/qrenderdoc/Windows/ShaderViewer.cpp b/qrenderdoc/Windows/ShaderViewer.cpp index eb504e5f4..326056ef6 100644 --- a/qrenderdoc/Windows/ShaderViewer.cpp +++ b/qrenderdoc/Windows/ShaderViewer.cpp @@ -4098,7 +4098,7 @@ void ShaderViewer::find(bool down) FindReplace::SearchContext context = m_FindReplace->context(); - QString findHash = QFormatStr("%1%2%3").arg(find).arg(flags).arg((int)context); + QString findHash = QFormatStr("%1%2%3%4").arg(find).arg(flags).arg((int)context).arg(down); if(findHash != m_FindState.hash) { @@ -4106,6 +4106,9 @@ void ShaderViewer::find(bool down) m_FindState.start = 0; m_FindState.end = cur->length(); m_FindState.offset = cur->currentPos(); + if(down && cur->selectionStart() == m_FindState.offset && + cur->selectionEnd() - m_FindState.offset == find.length()) + m_FindState.offset += find.length(); } int start = m_FindState.start + m_FindState.offset;