代码拉取完成,页面将自动刷新
同步操作将从 陈炳煌/sqlitebrowser 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include "FindReplaceDialog.h"
#include "ui_FindReplaceDialog.h"
#include "ExtendedScintilla.h"
#include <QWhatsThis>
FindReplaceDialog::FindReplaceDialog(QWidget* parent)
: QDialog(parent),
ui(new Ui::FindReplaceDialog),
findInProgress(false)
{
// Create UI
ui->setupUi(this);
}
FindReplaceDialog::~FindReplaceDialog()
{
delete ui;
}
void FindReplaceDialog::setExtendedScintilla(ExtendedScintilla* scintilla)
{
m_scintilla = scintilla;
// Create indicator for find-all and replace-all occurrences
foundIndicatorNumber = m_scintilla->indicatorDefine(QsciScintilla::StraightBoxIndicator);
m_scintilla->setIndicatorForegroundColor(Qt::magenta, foundIndicatorNumber);
m_scintilla->setIndicatorDrawUnder(true, foundIndicatorNumber);
bool isWriteable = ! m_scintilla->isReadOnly();
ui->replaceWithText->setEnabled(isWriteable);
ui->replaceButton->setEnabled(isWriteable);
ui->replaceAllButton->setEnabled(isWriteable);
connect(m_scintilla, SIGNAL(destroyed()), this, SLOT(hide()));
connect(ui->findText, SIGNAL(editingFinished()), this, SLOT(cancelFind()));
connect(ui->regexpCheckBox, &QCheckBox::toggled, this, &FindReplaceDialog::cancelFind);
connect(ui->caseCheckBox, &QCheckBox::toggled, this, &FindReplaceDialog::cancelFind);
connect(ui->wholeWordsCheckBox, &QCheckBox::toggled, this, &FindReplaceDialog::cancelFind);
connect(ui->wrapCheckBox, &QCheckBox::toggled, this, &FindReplaceDialog::cancelFind);
connect(ui->backwardsCheckBox, &QCheckBox::toggled, this, &FindReplaceDialog::cancelFind);
connect(ui->selectionCheckBox, &QCheckBox::toggled, this, &FindReplaceDialog::cancelFind);
connect(ui->selectionCheckBox, &QCheckBox::toggled, ui->wrapCheckBox, &QCheckBox::setDisabled);
}
bool FindReplaceDialog::findFirst(bool wrap, bool forward)
{
if (ui->selectionCheckBox->isChecked())
return m_scintilla->findFirstInSelection
(ui->findText->text(),
ui->regexpCheckBox->isChecked(),
ui->caseCheckBox->isChecked(),
ui->wholeWordsCheckBox->isChecked(),
forward,
/* show */ true,
/* posix */ true,
/* cxx11 */ true);
else
return m_scintilla->findFirst
(ui->findText->text(),
ui->regexpCheckBox->isChecked(),
ui->caseCheckBox->isChecked(),
ui->wholeWordsCheckBox->isChecked(),
wrap,
forward,
/* line */ -1,
/* index */ -1,
/* show */ true,
/* posix */ true,
/* cxx11 */ true);
}
bool FindReplaceDialog::findNext()
{
clearIndicators();
if (findInProgress)
findInProgress = m_scintilla->findNext();
else
findInProgress = findFirst(ui->wrapCheckBox->isChecked(),
!ui->backwardsCheckBox->isChecked());
if (!findInProgress)
ui->messageLabel->setText(tr("The searched text was not found"));
return findInProgress;
}
void FindReplaceDialog::showFindReplaceDialog(bool hasReplace)
{
ui->replaceWithText->setVisible(hasReplace);
ui->replaceButton->setVisible(hasReplace);
ui->replaceWithLabel->setVisible(hasReplace);
ui->replaceAllButton->setVisible(hasReplace);
show();
}
void FindReplaceDialog::show()
{
ui->findText->setFocus();
// If there is multi-line selected text set automatically the selection
// check box. If it's only part of a line, use it as text to find.
if (m_scintilla->hasSelectedText())
if (m_scintilla->selectedText().contains("\n"))
ui->selectionCheckBox->setChecked(true);
else {
ui->findText->setText(m_scintilla->selectedText());
ui->selectionCheckBox->setChecked(false);
}
else
ui->selectionCheckBox->setChecked(false);
ui->findText->selectAll();
QDialog::show();
}
void FindReplaceDialog::replace()
{
if (m_scintilla->hasSelectedText())
m_scintilla->replace(ui->replaceWithText->text());
findNext();
}
void FindReplaceDialog::indicateSelection()
{
int fromRow, fromIndex, toRow, toIndex;
m_scintilla->getSelection(&fromRow, &fromIndex, &toRow, &toIndex);
m_scintilla->fillIndicatorRange(fromRow, fromIndex, toRow, toIndex, foundIndicatorNumber);
}
void FindReplaceDialog::searchAll(bool replace)
{
clearIndicators();
if (!ui->selectionCheckBox->isChecked())
m_scintilla->setCursorPosition(0, 0);
bool found = findFirst(/* wrap */ false, /* fordward */ true);
int occurrences = 0;
while (found) {
if (replace)
m_scintilla->replace(ui->replaceWithText->text());
indicateSelection();
++occurrences;
found = m_scintilla->findNext();
}
if (!ui->selectionCheckBox->isChecked())
m_scintilla->clearSelection();
QString message;
switch (occurrences) {
case 0:
message = tr("The searched text was not found.");
break;
case 1:
if (replace)
message = tr("The searched text was replaced one time.");
else
message = tr("The searched text was found one time.");
break;
default:
if (replace)
message = tr("The searched text was replaced %1 times.").arg(occurrences);
else
message = tr("The searched text was found %1 times.").arg(occurrences);
break;
}
ui->messageLabel->setText(message);
}
void FindReplaceDialog::findAll()
{
searchAll(/* replace */ false);
}
void FindReplaceDialog::replaceAll()
{
searchAll(/* replace */ true);
}
void FindReplaceDialog::cancelFind()
{
m_scintilla->findFirst(QString(), false, false, false, false);
clearIndicators();
findInProgress = false;
ui->messageLabel->setText("");
}
void FindReplaceDialog::help()
{
QWhatsThis::enterWhatsThisMode();
}
void FindReplaceDialog::clearIndicators()
{
m_scintilla->clearIndicatorRange(0, 0, m_scintilla->lines(), m_scintilla->lineLength(m_scintilla->lines()), foundIndicatorNumber);
ui->messageLabel->setText("");
}
void FindReplaceDialog::close()
{
m_scintilla->clearSelection();
// Reset any previous find so it does not interfere with the next time
// the dialog is open.
cancelFind();
QDialog::close();
}
void FindReplaceDialog::buttonBox_clicked(QAbstractButton* button)
{
if (button == ui->buttonBox->button(QDialogButtonBox::Help))
help();
else if (button == ui->buttonBox->button(QDialogButtonBox::Close))
close();
}
void FindReplaceDialog::reject()
{
close();
QDialog::reject();
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。