Something went wrong. Try again.
A modern, network-enabled music player platform built on Rockbox technology. rockboxd.tsiry-sandratraina.com
rust deno navidrome airplay libadwaita zig mpris snapcast mpd rockbox audio subsonic
Something went wrong. Try again.
6.8 kB · 218 lines
C++
at master
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219/* * Copyright (C) 2009 Lorenzo Bettini <http://www.lorenzobettini.it> * See COPYING file that comes with this distribution */
#include <QtGui>#include <QTextEdit>#include <QRegularExpression>#include <QSettings>
#include "varianteditor.h"#include "findreplaceform.h"#include "ui_findreplaceform.h"
#define TEXT_TO_FIND "textToFind"#define TEXT_TO_REPLACE "textToReplace"#define DOWN_RADIO "downRadio"#define UP_RADIO "upRadio"#define CASE_CHECK "caseCheck"#define WHOLE_CHECK "wholeCheck"#define REGEXP_CHECK "regexpCheck"
FindReplaceForm::FindReplaceForm(QWidget *parent) : QWidget(parent), ui(new Ui::FindReplaceForm), textEdit(0){ ui->setupUi(this);
ui->errorLabel->setText("");
connect(ui->textToFind, SIGNAL(textChanged(QString)), this, SLOT(textToFindChanged())); connect(ui->textToFind, SIGNAL(textChanged(QString)), this, SLOT(validateRegExp(QString)));
connect(ui->regexCheckBox, SIGNAL(toggled(bool)), this, SLOT(regexpSelected(bool)));
connect(ui->findButton, SIGNAL(clicked()), this, SLOT(find())); connect(ui->closeButton, SIGNAL(clicked()), parent, SLOT(close()));
connect(ui->replaceButton, SIGNAL(clicked()), this, SLOT(replace())); connect(ui->replaceAllButton, SIGNAL(clicked()), this, SLOT(replaceAll()));}
FindReplaceForm::~FindReplaceForm(){ delete ui; if(textEdit) delete textEdit;}
void FindReplaceForm::hideReplaceWidgets() { ui->replaceLabel->setVisible(false); ui->textToReplace->setVisible(false); ui->replaceButton->setVisible(false); ui->replaceAllButton->setVisible(false);}
void FindReplaceForm::setTextEdit(QTextEdit *textEdit_) { textEdit = new VariantEditor(textEdit_); textEdit->connectToSetEnabled(ui->replaceButton); textEdit->connectToSetEnabled(ui->replaceAllButton);}
void FindReplaceForm::setTextEdit(QPlainTextEdit *textEdit_){ textEdit = new VariantEditor(textEdit_); textEdit->connectToSetEnabled(ui->replaceButton); textEdit->connectToSetEnabled(ui->replaceAllButton);}
void FindReplaceForm::changeEvent(QEvent *e){ QWidget::changeEvent(e); switch (e->type()) { case QEvent::LanguageChange: ui->retranslateUi(this); break; default: break; }}
void FindReplaceForm::textToFindChanged() { ui->findButton->setEnabled(ui->textToFind->text().size() > 0);}
void FindReplaceForm::regexpSelected(bool sel) { if (sel) validateRegExp(ui->textToFind->text()); else validateRegExp("");}
void FindReplaceForm::validateRegExp(const QString &text) { if (!ui->regexCheckBox->isChecked() || text.size() == 0) { ui->errorLabel->setText(""); return; // nothing to validate }
QRegularExpression reg(text, (ui->caseCheckBox->isChecked() ? QRegularExpression::NoPatternOption : QRegularExpression::CaseInsensitiveOption));
if (reg.isValid()) { showError(""); } else { showError(reg.errorString()); }}
void FindReplaceForm::showError(const QString &error) { if (error == "") { ui->errorLabel->setText(""); } else { ui->errorLabel->setText("<span style=\" font-weight:600; color:#ff0000;\">" + error + "</span>"); }}
void FindReplaceForm::showMessage(const QString &message) { if (message == "") { ui->errorLabel->setText(""); } else { ui->errorLabel->setText("<span style=\" font-weight:600; color:green;\">" + message + "</span>"); }}
void FindReplaceForm::find() { find(ui->downRadioButton->isChecked());}
void FindReplaceForm::find(bool next) { if (!textEdit) return; // TODO: show some warning?
// backward search bool back = !next;
const QString &toSearch = ui->textToFind->text();
bool result = false;
QTextDocument::FindFlags flags;
if (back) flags |= QTextDocument::FindBackward; if (ui->caseCheckBox->isChecked()) flags |= QTextDocument::FindCaseSensitively; if (ui->wholeCheckBox->isChecked()) flags |= QTextDocument::FindWholeWords;
if (ui->regexCheckBox->isChecked()) { QRegularExpression reg(toSearch, (ui->caseCheckBox->isChecked() ? QRegularExpression::NoPatternOption : QRegularExpression::CaseInsensitiveOption));
qDebug() << "searching for regexp: " << reg.pattern();
textCursor = textEdit->document()->find(reg, textCursor, flags); textEdit->setTextCursor(textCursor); result = (!textCursor.isNull()); } else { qDebug() << "searching for: " << toSearch;
result = textEdit->find(toSearch, flags); }
if (result) { showError(""); } else { showError(tr("no match found")); // move to the beginning of the document for the next find textEdit->setTextCursor(QTextCursor(textEdit->document()->begin())); }}
void FindReplaceForm::replace() { if (!textEdit->textCursor().hasSelection()) { find(); } else { textEdit->textCursor().insertText(ui->textToReplace->text()); find(); }}
void FindReplaceForm::replaceAll() { int i=0; while (textEdit->textCursor().hasSelection()){ textEdit->textCursor().insertText(ui->textToReplace->text()); find(); i++; } showMessage(tr("Replaced %1 occurrence(s)").arg(i));}
void FindReplaceForm::writeSettings(QSettings &settings, const QString &prefix) { settings.beginGroup(prefix); settings.setValue(TEXT_TO_FIND, ui->textToFind->text()); settings.setValue(TEXT_TO_REPLACE, ui->textToReplace->text()); settings.setValue(DOWN_RADIO, ui->downRadioButton->isChecked()); settings.setValue(UP_RADIO, ui->upRadioButton->isChecked()); settings.setValue(CASE_CHECK, ui->caseCheckBox->isChecked()); settings.setValue(WHOLE_CHECK, ui->wholeCheckBox->isChecked()); settings.setValue(REGEXP_CHECK, ui->regexCheckBox->isChecked()); settings.endGroup();}
void FindReplaceForm::readSettings(QSettings &settings, const QString &prefix) { settings.beginGroup(prefix); ui->textToFind->setText(settings.value(TEXT_TO_FIND, "").toString()); ui->textToReplace->setText(settings.value(TEXT_TO_REPLACE, "").toString()); ui->downRadioButton->setChecked(settings.value(DOWN_RADIO, true).toBool()); ui->upRadioButton->setChecked(settings.value(UP_RADIO, false).toBool()); ui->caseCheckBox->setChecked(settings.value(CASE_CHECK, false).toBool()); ui->wholeCheckBox->setChecked(settings.value(WHOLE_CHECK, false).toBool()); ui->regexCheckBox->setChecked(settings.value(REGEXP_CHECK, false).toBool()); settings.endGroup();}