From 37c3aacc919c8dfd5fd17d6b2afeabdb01bd96d5 Mon Sep 17 00:00:00 2001 From: nemu Date: Wed, 13 May 2009 07:49:49 +0000 Subject: [PATCH] some more work on find/replace. Find part implemented apart from the 'selected text' option --- src/musrgui/PFindDialog.cpp | 46 +++++++++++++++++++++++++++- src/musrgui/PFindDialog.h | 5 ++- src/musrgui/PTextEdit.cpp | 43 +++++++++++++++++++++++--- src/musrgui/forms/PFindDialogBase.ui | 9 ++++++ 4 files changed, 97 insertions(+), 6 deletions(-) diff --git a/src/musrgui/PFindDialog.cpp b/src/musrgui/PFindDialog.cpp index 596e02ab..6bae60ba 100644 --- a/src/musrgui/PFindDialog.cpp +++ b/src/musrgui/PFindDialog.cpp @@ -29,15 +29,39 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#include +#include +#include + #include "PFindDialog.h" //---------------------------------------------------------------------------------------------------- /** *

*/ -PFindDialog::PFindDialog(PFindReplaceData *data, QWidget *parent, const char *name, bool modal, WFlags f) : +PFindDialog::PFindDialog(PFindReplaceData *data, const bool selection, QWidget *parent, const char *name, bool modal, WFlags f) : PFindDialogBase(parent, name, modal, f), fData(data) { + // if only empty text, disable find button + if (fData->findText == "") { + fFind_button->setEnabled(false); + } + + // if there is no selection, disable that option + if (!selection) { + fSelectedText_checkBox->setChecked(false); + fSelectedText_checkBox->setEnabled(false); + } + + fFind_comboBox->setCurrentText(fData->findText); + fCaseSensitive_checkBox->setChecked(fData->caseSensitive); + fWholeWordsOnly_checkBox->setChecked(fData->wholeWordsOnly); + fFromCursor_checkBox->setChecked(fData->fromCursor); + fFindBackwards_checkBox->setChecked(fData->findBackwards); + + if (selection) { + fSelectedText_checkBox->setChecked(fData->selectedText); + } } //---------------------------------------------------------------------------------------------------- @@ -46,9 +70,29 @@ PFindDialog::PFindDialog(PFindReplaceData *data, QWidget *parent, const char *na */ PFindReplaceData* PFindDialog::getData() { + fData->findText = fFind_comboBox->currentText(); + fData->caseSensitive = fCaseSensitive_checkBox->isChecked(); + fData->wholeWordsOnly = fWholeWordsOnly_checkBox->isChecked(); + fData->fromCursor = fFromCursor_checkBox->isChecked(); + fData->findBackwards = fFindBackwards_checkBox->isChecked(); + if (fSelectedText_checkBox->isEnabled()) + fData->selectedText = fSelectedText_checkBox->isChecked(); + return fData; } +//---------------------------------------------------------------------------------------------------- +/** + *

+ */ +void PFindDialog::onFindTextAvailable() +{ + if (fFind_comboBox->currentText() != "") + fFind_button->setEnabled(true); + else + fFind_button->setEnabled(false); +} + //---------------------------------------------------------------------------------------------------- // END //---------------------------------------------------------------------------------------------------- diff --git a/src/musrgui/PFindDialog.h b/src/musrgui/PFindDialog.h index 86e330b6..7e8e41f8 100644 --- a/src/musrgui/PFindDialog.h +++ b/src/musrgui/PFindDialog.h @@ -40,12 +40,15 @@ class PFindDialog : public PFindDialogBase Q_OBJECT public: - PFindDialog(PFindReplaceData *data, QWidget *parent = 0, const char *name = 0, + PFindDialog(PFindReplaceData *data, const bool selection, QWidget *parent = 0, const char *name = 0, bool modal = TRUE, WFlags f = 0); virtual ~PFindDialog() {} virtual PFindReplaceData *getData(); + protected slots: + virtual void onFindTextAvailable(); + private: PFindReplaceData *fData; }; diff --git a/src/musrgui/PTextEdit.cpp b/src/musrgui/PTextEdit.cpp index 123a5947..a2299edf 100644 --- a/src/musrgui/PTextEdit.cpp +++ b/src/musrgui/PTextEdit.cpp @@ -738,7 +738,7 @@ void PTextEdit::editFind() return; } - PFindDialog *dlg = new PFindDialog(fFindReplaceData); + PFindDialog *dlg = new PFindDialog(fFindReplaceData, currentEditor()->hasSelectedText()); dlg->exec(); @@ -751,7 +751,23 @@ void PTextEdit::editFind() delete dlg; - QMessageBox::information(this, "**INFO**", "Not Yet Implemented", QMessageBox::Ok); + // try to find the search text + int para = 1, index = 1; + if (fFindReplaceData->fromCursor) { + currentEditor()->getCursorPosition(¶, &index); + } else { + para = 1; + index = 1; + } + + if (currentEditor()->find(fFindReplaceData->findText, + fFindReplaceData->caseSensitive, + fFindReplaceData->wholeWordsOnly, + !fFindReplaceData->findBackwards, + ¶, &index)) { + // set cursor to the correct position + currentEditor()->setCursorPosition(para, index); + } } //---------------------------------------------------------------------------------------------------- @@ -760,7 +776,17 @@ void PTextEdit::editFind() */ void PTextEdit::editFindNext() { - QMessageBox::information(this, "**INFO**", "Not Yet Implemented", QMessageBox::Ok); + int para = 1, index = 1; + currentEditor()->getCursorPosition(¶, &index); + index++; + if (currentEditor()->find(fFindReplaceData->findText, + fFindReplaceData->caseSensitive, + fFindReplaceData->wholeWordsOnly, + true, + ¶, &index)) { + // set cursor to the correct position + currentEditor()->setCursorPosition(para, index); + } } //---------------------------------------------------------------------------------------------------- @@ -769,7 +795,16 @@ void PTextEdit::editFindNext() */ void PTextEdit::editFindPrevious() { - QMessageBox::information(this, "**INFO**", "Not Yet Implemented", QMessageBox::Ok); + int para = 1, index = 1; + currentEditor()->getCursorPosition(¶, &index); + if (currentEditor()->find(fFindReplaceData->findText, + fFindReplaceData->caseSensitive, + fFindReplaceData->wholeWordsOnly, + false, + ¶, &index)) { + // set cursor to the correct position + currentEditor()->setCursorPosition(para, index); + } } //---------------------------------------------------------------------------------------------------- diff --git a/src/musrgui/forms/PFindDialogBase.ui b/src/musrgui/forms/PFindDialogBase.ui index e5a99a07..ad0e935b 100644 --- a/src/musrgui/forms/PFindDialogBase.ui +++ b/src/musrgui/forms/PFindDialogBase.ui @@ -238,6 +238,12 @@ PFindDialogBase accept() + + fFind_comboBox + textChanged(const QString&) + PFindDialogBase + onFindTextAvailable() + fFind_comboBox @@ -249,5 +255,8 @@ fFind_button fClose_button + + onFindTextAvailable() +