some more work on find/replace. Find part implemented apart from the 'selected text' option

This commit is contained in:
nemu 2009-05-13 07:49:49 +00:00
parent 8d75a68ad9
commit 37c3aacc91
4 changed files with 97 additions and 6 deletions

View File

@ -29,15 +29,39 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#include <qpushbutton.h>
#include <qcombobox.h>
#include <qcheckbox.h>
#include "PFindDialog.h"
//----------------------------------------------------------------------------------------------------
/**
* <p>
*/
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;
}
//----------------------------------------------------------------------------------------------------
/**
* <p>
*/
void PFindDialog::onFindTextAvailable()
{
if (fFind_comboBox->currentText() != "")
fFind_button->setEnabled(true);
else
fFind_button->setEnabled(false);
}
//----------------------------------------------------------------------------------------------------
// END
//----------------------------------------------------------------------------------------------------

View File

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

View File

@ -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(&para, &index);
} else {
para = 1;
index = 1;
}
if (currentEditor()->find(fFindReplaceData->findText,
fFindReplaceData->caseSensitive,
fFindReplaceData->wholeWordsOnly,
!fFindReplaceData->findBackwards,
&para, &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(&para, &index);
index++;
if (currentEditor()->find(fFindReplaceData->findText,
fFindReplaceData->caseSensitive,
fFindReplaceData->wholeWordsOnly,
true,
&para, &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(&para, &index);
if (currentEditor()->find(fFindReplaceData->findText,
fFindReplaceData->caseSensitive,
fFindReplaceData->wholeWordsOnly,
false,
&para, &index)) {
// set cursor to the correct position
currentEditor()->setCursorPosition(para, index);
}
}
//----------------------------------------------------------------------------------------------------

View File

@ -238,6 +238,12 @@
<receiver>PFindDialogBase</receiver>
<slot>accept()</slot>
</connection>
<connection>
<sender>fFind_comboBox</sender>
<signal>textChanged(const QString&amp;)</signal>
<receiver>PFindDialogBase</receiver>
<slot>onFindTextAvailable()</slot>
</connection>
</connections>
<tabstops>
<tabstop>fFind_comboBox</tabstop>
@ -249,5 +255,8 @@
<tabstop>fFind_button</tabstop>
<tabstop>fClose_button</tabstop>
</tabstops>
<slots>
<slot access="protected">onFindTextAvailable()</slot>
</slots>
<layoutdefaults spacing="6" margin="11"/>
</UI>