From 908cf0a47862c979ddc7172ac6636b98e7eaf5b4 Mon Sep 17 00:00:00 2001 From: nemu Date: Thu, 14 May 2009 19:26:30 +0000 Subject: [PATCH] some more work concerning find/replace --- src/musrgui/PReplaceDialog.cpp | 50 ++++- src/musrgui/PReplaceDialog.h | 5 +- src/musrgui/PTextEdit.cpp | 70 ++++++- src/musrgui/PTextEdit.h | 7 + .../forms/PReplaceConfirmationDialog.ui | 182 ++++++++++++++++++ src/musrgui/forms/PReplaceDialogBase.ui | 63 +++--- src/musrgui/musrgui.pro | 3 +- 7 files changed, 348 insertions(+), 32 deletions(-) create mode 100644 src/musrgui/forms/PReplaceConfirmationDialog.ui diff --git a/src/musrgui/PReplaceDialog.cpp b/src/musrgui/PReplaceDialog.cpp index e198c5d9..fcd000fe 100644 --- a/src/musrgui/PReplaceDialog.cpp +++ b/src/musrgui/PReplaceDialog.cpp @@ -29,15 +29,41 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#include +#include +#include + #include "PReplaceDialog.h" //---------------------------------------------------------------------------------------------------- /** *

*/ -PReplaceDialog::PReplaceDialog(PFindReplaceData *data, QWidget *parent, const char *name, bool modal, WFlags f) : +PReplaceDialog::PReplaceDialog(PFindReplaceData *data, const bool selection, QWidget *parent, const char *name, bool modal, WFlags f) : PReplaceDialogBase(parent, name, modal, f), fData(data) { + // if only empty text, disable find button + if (fData->findText == "") { + fReplace_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); + fReplacementText_comboBox->setCurrentText(fData->replaceText); + fCaseSensitive_checkBox->setChecked(fData->caseSensitive); + fWholeWordsOnly_checkBox->setChecked(fData->wholeWordsOnly); + fFromCursor_checkBox->setChecked(fData->fromCursor); + fFindBackwards_checkBox->setChecked(fData->findBackwards); + fPromptOnReplace_checkBox->setChecked(fData->promptOnReplace); + + if (selection) { + fSelectedText_checkBox->setChecked(fData->selectedText); + } } //---------------------------------------------------------------------------------------------------- @@ -46,9 +72,31 @@ PReplaceDialog::PReplaceDialog(PFindReplaceData *data, QWidget *parent, const ch */ PFindReplaceData* PReplaceDialog::getData() { + fData->findText = fFind_comboBox->currentText(); + fData->replaceText = fReplacementText_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(); + fData->promptOnReplace = fPromptOnReplace_checkBox->isChecked(); + return fData; } +//---------------------------------------------------------------------------------------------------- +/** + *

+ */ +void PReplaceDialog::onFindTextAvailable() +{ + if (fFind_comboBox->currentText() != "") + fReplace_button->setEnabled(true); + else + fReplace_button->setEnabled(false); +} + //---------------------------------------------------------------------------------------------------- // END //---------------------------------------------------------------------------------------------------- diff --git a/src/musrgui/PReplaceDialog.h b/src/musrgui/PReplaceDialog.h index 2c91c1a1..1c122dcb 100644 --- a/src/musrgui/PReplaceDialog.h +++ b/src/musrgui/PReplaceDialog.h @@ -40,12 +40,15 @@ class PReplaceDialog : public PReplaceDialogBase Q_OBJECT public: - PReplaceDialog(PFindReplaceData *data, QWidget *parent = 0, const char *name = 0, + PReplaceDialog(PFindReplaceData *data, const bool selection, QWidget *parent = 0, const char *name = 0, bool modal = TRUE, WFlags f = 0); virtual ~PReplaceDialog() {} virtual PFindReplaceData *getData(); + protected slots: + virtual void onFindTextAvailable(); + private: PFindReplaceData *fData; }; diff --git a/src/musrgui/PTextEdit.cpp b/src/musrgui/PTextEdit.cpp index a2299edf..e1fa700d 100644 --- a/src/musrgui/PTextEdit.cpp +++ b/src/musrgui/PTextEdit.cpp @@ -61,6 +61,7 @@ using namespace std; #include "PAdmin.h" #include "PFindDialog.h" #include "PReplaceDialog.h" +#include "forms/PReplaceConfirmationDialog.h" #include "PFitOutputHandler.h" #include "PPrefsDialog.h" #include "PGetDefaultDialog.h" @@ -834,7 +835,7 @@ void PTextEdit::editFindAndReplace() return; } - PReplaceDialog *dlg = new PReplaceDialog(fFindReplaceData); + PReplaceDialog *dlg = new PReplaceDialog(fFindReplaceData, currentEditor()->hasSelectedText()); dlg->exec(); @@ -846,7 +847,21 @@ void PTextEdit::editFindAndReplace() fFindReplaceData = dlg->getData(); delete dlg; - QMessageBox::information(this, "**INFO**", "Not Yet Implemented", QMessageBox::Ok); + + editFindNext(); + + PReplaceConfirmationDialog *confirmDlg = new PReplaceConfirmationDialog(this); + + // connect all the necessary signals/slots + QObject::connect(confirmDlg->fReplace_pushButton, SIGNAL(clicked()), this, SLOT(replace())); + QObject::connect(confirmDlg->fReplaceAndClose_pushButton, SIGNAL(clicked()), this, SLOT(replaceAndClose())); + QObject::connect(confirmDlg->fReplaceAll_pushButton, SIGNAL(clicked()), this, SLOT(replaceAll())); + QObject::connect(confirmDlg->fFindNext_pushButton, SIGNAL(clicked()), this, SLOT(editFindNext())); + QObject::connect(this, SIGNAL(close()), confirmDlg, SLOT(accept())); + + confirmDlg->exec(); + + delete confirmDlg; } //---------------------------------------------------------------------------------------------------- @@ -1598,6 +1613,57 @@ void PTextEdit::textChanged() fTabWidget->setTabLabel(fTabWidget->currentPage(), tabLabel+"*"); } +//---------------------------------------------------------------------------------------------------- +/** + *

+ */ +void PTextEdit::replace() +{ + currentEditor()->insert(fFindReplaceData->replaceText); + + editFindNext(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

+ */ +void PTextEdit::replaceAndClose() +{ + currentEditor()->insert(fFindReplaceData->replaceText); + + emit close(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

+ */ +void PTextEdit::replaceAll() +{ + int currentPara, currentIndex; + currentEditor()->getCursorPosition(¤tPara, ¤tIndex); + + currentEditor()->setCursorPosition(0,0); + + int para = 0, index = 0; + while (currentEditor()->find(fFindReplaceData->findText, + fFindReplaceData->caseSensitive, + fFindReplaceData->wholeWordsOnly, + true, + ¶, &index)) { + // set cursor to the correct position + currentEditor()->setCursorPosition(para, index); + + // replace the text + currentEditor()->insert(fFindReplaceData->replaceText); + } + + emit close(); + + currentEditor()->setCursorPosition(currentPara, currentIndex); +} + //---------------------------------------------------------------------------------------------------- // END //---------------------------------------------------------------------------------------------------- diff --git a/src/musrgui/PTextEdit.h b/src/musrgui/PTextEdit.h index 92b5bfdb..81af81df 100644 --- a/src/musrgui/PTextEdit.h +++ b/src/musrgui/PTextEdit.h @@ -53,6 +53,9 @@ public: PTextEdit( QWidget *parent = 0, const char *name = 0 ); virtual ~PTextEdit(); +signals: + void close(); + private: void setupFileActions(); void setupEditActions(); @@ -106,6 +109,10 @@ private slots: void fontChanged( const QFont &f ); void textChanged(); + void replace(); + void replaceAndClose(); + void replaceAll(); + private: PAdmin *fAdmin; diff --git a/src/musrgui/forms/PReplaceConfirmationDialog.ui b/src/musrgui/forms/PReplaceConfirmationDialog.ui new file mode 100644 index 00000000..91297b71 --- /dev/null +++ b/src/musrgui/forms/PReplaceConfirmationDialog.ui @@ -0,0 +1,182 @@ + +PReplaceConfirmationDialog + + + PReplaceConfirmationDialog + + + + 0 + 0 + 524 + 86 + + + + Replace Confirmation - musrgui + + + image0 + + + true + + + true + + + + line1 + + + + 10 + 30 + 501 + 20 + + + + HLine + + + Sunken + + + Horizontal + + + + + fTextLabel + + + + 10 + 10 + 435 + 20 + + + + Found an occurrence of your search term. What do you want to do? + + + + + fReplaceAndClose_pushButton + + + + 100 + 50 + 130 + 26 + + + + Re&place && Close + + + Alt+P + + + + + fClose_pushButton + + + + 450 + 50 + 60 + 26 + + + + &Close + + + Alt+C + + + + + fReplaceAll_pushButton + + + + 240 + 50 + 100 + 26 + + + + Replace &All + + + Alt+A + + + + + fReplace_pushButton + + + + 10 + 50 + 80 + 26 + + + + &Replace + + + Alt+R + + + + + fFindNext_pushButton + + + + 350 + 50 + 90 + 26 + + + + &Find Next + + + Alt+F + + + + + + 89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000000d349444154388db594510e84200c44a7864bd9fb673c16fe50b7a95501dd97104983435b06842422ab6ab5f946ca6941074b0ca813cd36eaa5f89f050049811352d53aac8a96b165640256fe468ac546b33eb5c298ededa3f05b1655adbef4b8c062a3e92fbc117d83643ebe6275d53dd1dd637345af3b3e3bbcb8e19470763b23ddc2de3924c58b676d2a67897b717f4b25dcd848f5a3b9e4f8c651dd200992c86205680f4f82c555b51e6b92fe5a2502c0cc3bd40a13b98a133faf17cb286639833fc4db56bce17fafdb9762deeb438fd0083bbf3298df1bba5b870000000049454e44ae426082 + + + + + fClose_pushButton + clicked() + PReplaceConfirmationDialog + reject() + + + + fReplace_pushButton + fReplaceAndClose_pushButton + fReplaceAll_pushButton + fFindNext_pushButton + fClose_pushButton + + + diff --git a/src/musrgui/forms/PReplaceDialogBase.ui b/src/musrgui/forms/PReplaceDialogBase.ui index 8d111c92..413e6564 100644 --- a/src/musrgui/forms/PReplaceDialogBase.ui +++ b/src/musrgui/forms/PReplaceDialogBase.ui @@ -244,31 +244,6 @@ - - - fFind_button - - - - 200 - 310 - 60 - 26 - - - - &Find - - - Alt+F - - - true - - - true - - fClose_button @@ -291,6 +266,31 @@ true + + + fReplace_button + + + + 190 + 310 + 70 + 26 + + + + &Replace + + + Alt+R + + + true + + + true + + @@ -300,11 +300,17 @@ reject() - fFind_button + fReplace_button clicked() PReplaceDialogBase accept() + + fFind_comboBox + textChanged(const QString&) + PReplaceDialogBase + onFindTextAvailable() + fFind_comboBox @@ -315,8 +321,11 @@ fFindBackwards_checkBox fSelectedText_checkBox fPromptOnReplace_checkBox - fFind_button + fReplace_button fClose_button + + onFindTextAvailable() + diff --git a/src/musrgui/musrgui.pro b/src/musrgui/musrgui.pro index 79ca0c26..77f3307e 100644 --- a/src/musrgui/musrgui.pro +++ b/src/musrgui/musrgui.pro @@ -52,7 +52,8 @@ SOURCES = PTextEdit.cpp \ main.cpp FORMS = forms/PFindDialogBase.ui \ - forms/PReplaceDialogBase.ui \ + forms/PReplaceDialogBase.ui \ + forms/PReplaceConfirmationDialog.ui \ forms/PGetDefaultDialogBase.ui \ forms/PMusrGuiAbout.ui \ forms/PPrefsDialogBase.ui \