forked from len0rd/rockbox
Theme Editor: Added an edit menu with a find/replace function (copied from an LGPL library)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27137 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
5300c7014d
commit
be70fd89be
12 changed files with 937 additions and 3 deletions
64
utils/themeeditor/findreplace/findreplacedialog.cpp
Normal file
64
utils/themeeditor/findreplace/findreplacedialog.cpp
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* __________ __ ___.
|
||||||
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||||
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||||
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||||
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||||
|
* \/ \/ \/ \/ \/
|
||||||
|
* $Id$
|
||||||
|
*
|
||||||
|
* This file has been copied from Lorenzo Bettini, with minor modifications
|
||||||
|
* made available under the LGPL version 3, as the original file was licensed
|
||||||
|
*
|
||||||
|
****************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Lorenzo Bettini <http://www.lorenzobettini.it>
|
||||||
|
* See COPYING file that comes with this distribution
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "findreplacedialog.h"
|
||||||
|
#include "ui_findreplacedialog.h"
|
||||||
|
|
||||||
|
FindReplaceDialog::FindReplaceDialog(QWidget *parent) :
|
||||||
|
QDialog(parent),
|
||||||
|
ui(new Ui::FindReplaceDialog)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
FindReplaceDialog::~FindReplaceDialog()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FindReplaceDialog::changeEvent(QEvent *e)
|
||||||
|
{
|
||||||
|
QDialog::changeEvent(e);
|
||||||
|
switch (e->type()) {
|
||||||
|
case QEvent::LanguageChange:
|
||||||
|
ui->retranslateUi(this);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FindReplaceDialog::setTextEdit(QPlainTextEdit *textEdit) {
|
||||||
|
ui->findReplaceForm->setTextEdit(textEdit);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FindReplaceDialog::writeSettings(QSettings &settings, const QString &prefix) {
|
||||||
|
ui->findReplaceForm->writeSettings(settings, prefix);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FindReplaceDialog::readSettings(QSettings &settings, const QString &prefix) {
|
||||||
|
ui->findReplaceForm->readSettings(settings, prefix);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FindReplaceDialog::findNext() {
|
||||||
|
ui->findReplaceForm->findNext();
|
||||||
|
}
|
||||||
|
|
||||||
|
void FindReplaceDialog::findPrev() {
|
||||||
|
ui->findReplaceForm->findPrev();
|
||||||
|
}
|
80
utils/themeeditor/findreplace/findreplacedialog.h
Normal file
80
utils/themeeditor/findreplace/findreplacedialog.h
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* __________ __ ___.
|
||||||
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||||
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||||
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||||
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||||
|
* \/ \/ \/ \/ \/
|
||||||
|
* $Id$
|
||||||
|
*
|
||||||
|
* This file has been copied from Lorenzo Bettini, with minor modifications
|
||||||
|
* made available under the LGPL version 3, as the original file was licensed
|
||||||
|
*
|
||||||
|
****************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Lorenzo Bettini <http://www.lorenzobettini.it>
|
||||||
|
* See COPYING file that comes with this distribution
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FINDREPLACEDIALOG_H
|
||||||
|
#define FINDREPLACEDIALOG_H
|
||||||
|
|
||||||
|
#include <QDialog>
|
||||||
|
#include <QPlainTextEdit>
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class FindReplaceDialog;
|
||||||
|
}
|
||||||
|
|
||||||
|
class QTextEdit;
|
||||||
|
class QSettings;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A find/replace dialog.
|
||||||
|
*
|
||||||
|
* It relies on a FindReplaceForm object (see that class for the functionalities provided).
|
||||||
|
*/
|
||||||
|
class FindReplaceDialog : public QDialog {
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
FindReplaceDialog(QWidget *parent = 0);
|
||||||
|
virtual ~FindReplaceDialog();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Associates the text editor where to perform the search
|
||||||
|
* @param textEdit
|
||||||
|
*/
|
||||||
|
void setTextEdit(QPlainTextEdit *textEdit);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Writes the state of the form to the passed settings.
|
||||||
|
* @param settings
|
||||||
|
* @param prefix the prefix to insert in the settings
|
||||||
|
*/
|
||||||
|
virtual void writeSettings(QSettings &settings, const QString &prefix = "FindReplaceDialog");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads the state of the form from the passed settings.
|
||||||
|
* @param settings
|
||||||
|
* @param prefix the prefix to look for in the settings
|
||||||
|
*/
|
||||||
|
virtual void readSettings(QSettings &settings, const QString &prefix = "FindReplaceDialog");
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
/**
|
||||||
|
* Finds the next occurrence
|
||||||
|
*/
|
||||||
|
void findNext();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds the previous occurrence
|
||||||
|
*/
|
||||||
|
void findPrev();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void changeEvent(QEvent *e);
|
||||||
|
|
||||||
|
Ui::FindReplaceDialog *ui;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // FINDREPLACEDIALOG_H
|
32
utils/themeeditor/findreplace/findreplacedialog.ui
Normal file
32
utils/themeeditor/findreplace/findreplacedialog.ui
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>FindReplaceDialog</class>
|
||||||
|
<widget class="QDialog" name="FindReplaceDialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>342</width>
|
||||||
|
<height>140</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Find/Replace</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="FindReplaceForm" name="findReplaceForm" native="true"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>FindReplaceForm</class>
|
||||||
|
<extends>QWidget</extends>
|
||||||
|
<header location="global">findreplaceform.h</header>
|
||||||
|
<container>1</container>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
222
utils/themeeditor/findreplace/findreplaceform.cpp
Normal file
222
utils/themeeditor/findreplace/findreplaceform.cpp
Normal file
|
@ -0,0 +1,222 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* __________ __ ___.
|
||||||
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||||
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||||
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||||
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||||
|
* \/ \/ \/ \/ \/
|
||||||
|
* $Id$
|
||||||
|
*
|
||||||
|
* This file has been copied from Lorenzo Bettini, with minor modifications
|
||||||
|
* made available under the LGPL version 3, as the original file was licensed
|
||||||
|
*
|
||||||
|
****************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Lorenzo Bettini <http://www.lorenzobettini.it>
|
||||||
|
* See COPYING file that comes with this distribution
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <QtGui>
|
||||||
|
#include <QTextEdit>
|
||||||
|
#include <QRegExp>
|
||||||
|
#include <QSettings>
|
||||||
|
|
||||||
|
#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;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FindReplaceForm::hideReplaceWidgets() {
|
||||||
|
ui->replaceLabel->setVisible(false);
|
||||||
|
ui->textToReplace->setVisible(false);
|
||||||
|
ui->replaceButton->setVisible(false);
|
||||||
|
ui->replaceAllButton->setVisible(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FindReplaceForm::setTextEdit(QPlainTextEdit *textEdit_) {
|
||||||
|
textEdit = textEdit_;
|
||||||
|
connect(textEdit, SIGNAL(copyAvailable(bool)), ui->replaceButton, SLOT(setEnabled(bool)));
|
||||||
|
connect(textEdit, SIGNAL(copyAvailable(bool)), ui->replaceAllButton, SLOT(setEnabled(bool)));
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
QRegExp reg(text,
|
||||||
|
(ui->caseCheckBox->isChecked() ? Qt::CaseSensitive : Qt::CaseInsensitive));
|
||||||
|
|
||||||
|
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()) {
|
||||||
|
QRegExp reg(toSearch,
|
||||||
|
(ui->caseCheckBox->isChecked() ? Qt::CaseSensitive : Qt::CaseInsensitive));
|
||||||
|
|
||||||
|
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
|
||||||
|
textCursor.setPosition(0);
|
||||||
|
textEdit->setTextCursor(textCursor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
153
utils/themeeditor/findreplace/findreplaceform.h
Normal file
153
utils/themeeditor/findreplace/findreplaceform.h
Normal file
|
@ -0,0 +1,153 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* __________ __ ___.
|
||||||
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||||
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||||
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||||
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||||
|
* \/ \/ \/ \/ \/
|
||||||
|
* $Id$
|
||||||
|
*
|
||||||
|
* This file has been copied from Lorenzo Bettini, with minor modifications
|
||||||
|
* made available under the LGPL version 3, as the original file was licensed
|
||||||
|
*
|
||||||
|
****************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Lorenzo Bettini <http://www.lorenzobettini.it>
|
||||||
|
* See COPYING file that comes with this distribution
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FINDREPLACEFORM_H
|
||||||
|
#define FINDREPLACEFORM_H
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QTextCursor>
|
||||||
|
#include <QPlainTextEdit>
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class FindReplaceForm;
|
||||||
|
}
|
||||||
|
|
||||||
|
class QTextEdit;
|
||||||
|
class QSettings;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The form for the find/replace dialog. The form presents the typical
|
||||||
|
* widgets you find in standard find/replace dialogs, and it acts on a QTextEdit.
|
||||||
|
*
|
||||||
|
* \image html Screenshot-FindReplace.png
|
||||||
|
*
|
||||||
|
* You need to set the QTextEdit explicitly, using the method setTextEdit(QTextEdit *textEdit).
|
||||||
|
*
|
||||||
|
* For instance
|
||||||
|
* \code
|
||||||
|
* m_findReplaceDialog = new FindReplaceDialog(this);
|
||||||
|
* m_findReplaceDialog->setModal(false);
|
||||||
|
* m_findReplaceDialog->setTextEdit(ui->textEdit);
|
||||||
|
* \endcode
|
||||||
|
*
|
||||||
|
* The find functionalities is available even if the find dialog is not shown: if something
|
||||||
|
* to search for was already specified, the application can call the methods findNext() and
|
||||||
|
* findPrev() (e.g., by connecting them to menu items).
|
||||||
|
*
|
||||||
|
* In case a regular expression is used as the search term, the form also checks whether the
|
||||||
|
* expression is a valid regular expression (You may want to take a look at the syntax of regular expressions:
|
||||||
|
* http://doc.trolltech.com/qregexp.html).
|
||||||
|
*
|
||||||
|
* The form provides also functionalities to save and restore its state using a QSettings object (i.e.,
|
||||||
|
* the last word searched for, the options of the form, etc.) via the methods writeSettings()
|
||||||
|
* and readSettings().
|
||||||
|
*
|
||||||
|
* You can take a look at the \ref examples page.
|
||||||
|
*/
|
||||||
|
class FindReplaceForm : public QWidget {
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
FindReplaceForm(QWidget *parent = 0);
|
||||||
|
virtual ~FindReplaceForm();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Associates the text editor where to perform the search
|
||||||
|
* @param textEdit_
|
||||||
|
*/
|
||||||
|
void setTextEdit(QPlainTextEdit *textEdit_);
|
||||||
|
|
||||||
|
/// hides replace widgets from the form
|
||||||
|
void hideReplaceWidgets();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Writes the state of the form to the passed settings.
|
||||||
|
* @param settings
|
||||||
|
* @param prefix the prefix to insert in the settings
|
||||||
|
*/
|
||||||
|
virtual void writeSettings(QSettings &settings, const QString &prefix = "FindReplaceDialog");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads the state of the form from the passed settings.
|
||||||
|
* @param settings
|
||||||
|
* @param prefix the prefix to look for in the settings
|
||||||
|
*/
|
||||||
|
virtual void readSettings(QSettings &settings, const QString &prefix = "FindReplaceDialog");
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
/**
|
||||||
|
* performs the find task
|
||||||
|
* @param down whether to find the next or the previous
|
||||||
|
* occurrence
|
||||||
|
*/
|
||||||
|
void find(bool down);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds the next occurrence
|
||||||
|
*/
|
||||||
|
void find();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds the next occurrence
|
||||||
|
*/
|
||||||
|
void findNext() { find(true); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds the previous occurrence
|
||||||
|
*/
|
||||||
|
void findPrev() { find(false); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Replaces the found occurrences and goes to the next occurrence
|
||||||
|
*/
|
||||||
|
void replace();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Replaces all the found occurrences
|
||||||
|
*/
|
||||||
|
void replaceAll();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void changeEvent(QEvent *e);
|
||||||
|
|
||||||
|
/// shows an error in the dialog
|
||||||
|
void showError(const QString &error);
|
||||||
|
|
||||||
|
/// shows a message in the dialog
|
||||||
|
void showMessage(const QString &message);
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
/// when the text edit contents changed
|
||||||
|
void textToFindChanged();
|
||||||
|
|
||||||
|
/// checks whether the passed text is a valid regexp
|
||||||
|
void validateRegExp(const QString &text);
|
||||||
|
|
||||||
|
/// the regexp checkbox was selected
|
||||||
|
void regexpSelected(bool sel);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
Ui::FindReplaceForm *ui;
|
||||||
|
|
||||||
|
/// for searching into the text
|
||||||
|
QTextCursor textCursor;
|
||||||
|
|
||||||
|
/// the text editor (possibly) associated with this form
|
||||||
|
QPlainTextEdit *textEdit;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // FINDREPLACEFORM_H
|
204
utils/themeeditor/findreplace/findreplaceform.ui
Normal file
204
utils/themeeditor/findreplace/findreplaceform.ui
Normal file
|
@ -0,0 +1,204 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>FindReplaceForm</class>
|
||||||
|
<widget class="QWidget" name="FindReplaceForm">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>483</width>
|
||||||
|
<height>288</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Form</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<item>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_3">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Find:</string>
|
||||||
|
</property>
|
||||||
|
<property name="buddy">
|
||||||
|
<cstring>textToFind</cstring>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLineEdit" name="textToFind"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="replaceLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>R&eplace with:</string>
|
||||||
|
</property>
|
||||||
|
<property name="buddy">
|
||||||
|
<cstring>textToReplace</cstring>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QLineEdit" name="textToReplace"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="errorLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>errorLabel</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="groupBox">
|
||||||
|
<property name="title">
|
||||||
|
<string>D&irection</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="downRadioButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Down</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="upRadioButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Up</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="groupBox_2">
|
||||||
|
<property name="title">
|
||||||
|
<string>&Options</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="caseCheckBox">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Case sensitive</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="wholeCheckBox">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Whole words only</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="regexCheckBox">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||||
|
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||||
|
p, li { white-space: pre-wrap; }
|
||||||
|
</style></head><body style=" font-family:'Sans'; font-size:10pt; font-weight:400; font-style:normal;">
|
||||||
|
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">whether the text to search should be interpreted as a regular expression.</p>
|
||||||
|
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
|
||||||
|
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">You may want to take a look at the syntax of regular expressions:</p>
|
||||||
|
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://doc.trolltech.com/qregexp.html"><span style=" text-decoration: underline; color:#0000ff;">http://doc.trolltech.com/qregexp.html</span></a></p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>R&egular Expression</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>10</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="findButton">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Find</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="closeButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Close</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="replaceButton">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Replace</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="replaceAllButton">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Replace &All</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<tabstops>
|
||||||
|
<tabstop>textToFind</tabstop>
|
||||||
|
<tabstop>textToReplace</tabstop>
|
||||||
|
<tabstop>downRadioButton</tabstop>
|
||||||
|
<tabstop>upRadioButton</tabstop>
|
||||||
|
<tabstop>caseCheckBox</tabstop>
|
||||||
|
<tabstop>wholeCheckBox</tabstop>
|
||||||
|
<tabstop>regexCheckBox</tabstop>
|
||||||
|
<tabstop>findButton</tabstop>
|
||||||
|
<tabstop>closeButton</tabstop>
|
||||||
|
</tabstops>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
|
@ -200,6 +200,20 @@ void EditorWindow::setupMenus()
|
||||||
|
|
||||||
QObject::connect(ui->actionOpen_Project, SIGNAL(triggered()),
|
QObject::connect(ui->actionOpen_Project, SIGNAL(triggered()),
|
||||||
this, SLOT(openProject()));
|
this, SLOT(openProject()));
|
||||||
|
|
||||||
|
/* Connecting the edit menu */
|
||||||
|
QObject::connect(ui->actionUndo, SIGNAL(triggered()),
|
||||||
|
this, SLOT(undo()));
|
||||||
|
QObject::connect(ui->actionRedo, SIGNAL(triggered()),
|
||||||
|
this, SLOT(redo()));
|
||||||
|
QObject::connect(ui->actionCut, SIGNAL(triggered()),
|
||||||
|
this, SLOT(cut()));
|
||||||
|
QObject::connect(ui->actionCopy, SIGNAL(triggered()),
|
||||||
|
this, SLOT(copy()));
|
||||||
|
QObject::connect(ui->actionPaste, SIGNAL(triggered()),
|
||||||
|
this, SLOT(paste()));
|
||||||
|
QObject::connect(ui->actionFind_Replace, SIGNAL(triggered()),
|
||||||
|
this, SLOT(findReplace()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorWindow::addTab(TabContent *doc)
|
void EditorWindow::addTab(TabContent *doc)
|
||||||
|
@ -237,6 +251,12 @@ void EditorWindow::shiftTab(int index)
|
||||||
ui->actionClose_Document->setEnabled(false);
|
ui->actionClose_Document->setEnabled(false);
|
||||||
ui->actionToolbarSave->setEnabled(false);
|
ui->actionToolbarSave->setEnabled(false);
|
||||||
ui->fromTree->setEnabled(false);
|
ui->fromTree->setEnabled(false);
|
||||||
|
ui->actionUndo->setEnabled(false);
|
||||||
|
ui->actionRedo->setEnabled(false);
|
||||||
|
ui->actionCut->setEnabled(false);
|
||||||
|
ui->actionCopy->setEnabled(false);
|
||||||
|
ui->actionPaste->setEnabled(false);
|
||||||
|
ui->actionFind_Replace->setEnabled(false);
|
||||||
viewer->setScene(0);
|
viewer->setScene(0);
|
||||||
}
|
}
|
||||||
else if(widget->type() == TabContent::Config)
|
else if(widget->type() == TabContent::Config)
|
||||||
|
@ -245,6 +265,12 @@ void EditorWindow::shiftTab(int index)
|
||||||
ui->actionSave_Document_As->setEnabled(true);
|
ui->actionSave_Document_As->setEnabled(true);
|
||||||
ui->actionClose_Document->setEnabled(true);
|
ui->actionClose_Document->setEnabled(true);
|
||||||
ui->actionToolbarSave->setEnabled(true);
|
ui->actionToolbarSave->setEnabled(true);
|
||||||
|
ui->actionUndo->setEnabled(false);
|
||||||
|
ui->actionRedo->setEnabled(false);
|
||||||
|
ui->actionCut->setEnabled(false);
|
||||||
|
ui->actionCopy->setEnabled(false);
|
||||||
|
ui->actionPaste->setEnabled(false);
|
||||||
|
ui->actionFind_Replace->setEnabled(false);
|
||||||
viewer->setScene(0);
|
viewer->setScene(0);
|
||||||
}
|
}
|
||||||
else if(widget->type() == TabContent::Skin)
|
else if(widget->type() == TabContent::Skin)
|
||||||
|
@ -260,12 +286,26 @@ void EditorWindow::shiftTab(int index)
|
||||||
ui->actionToolbarSave->setEnabled(true);
|
ui->actionToolbarSave->setEnabled(true);
|
||||||
ui->fromTree->setEnabled(true);
|
ui->fromTree->setEnabled(true);
|
||||||
|
|
||||||
|
ui->actionUndo->setEnabled(true);
|
||||||
|
ui->actionRedo->setEnabled(true);
|
||||||
|
ui->actionCut->setEnabled(true);
|
||||||
|
ui->actionCopy->setEnabled(true);
|
||||||
|
ui->actionPaste->setEnabled(true);
|
||||||
|
ui->actionFind_Replace->setEnabled(true);
|
||||||
|
|
||||||
sizeColumns();
|
sizeColumns();
|
||||||
|
|
||||||
/* Syncing the preview */
|
/* Syncing the preview */
|
||||||
viewer->setScene(doc->scene());
|
viewer->setScene(doc->scene());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Hiding all the find/replace dialogs */
|
||||||
|
for(int i = 0; i < ui->editorTabs->count(); i++)
|
||||||
|
if(dynamic_cast<TabContent*>(ui->editorTabs->widget(i))->type() ==
|
||||||
|
TabContent::Skin)
|
||||||
|
dynamic_cast<SkinDocument*>(ui->editorTabs->widget(i))->hideFind();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EditorWindow::closeTab(int index)
|
bool EditorWindow::closeTab(int index)
|
||||||
|
@ -469,6 +509,56 @@ void EditorWindow::lineChanged(int line)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EditorWindow::undo()
|
||||||
|
{
|
||||||
|
TabContent* doc = dynamic_cast<TabContent*>
|
||||||
|
(ui->editorTabs->currentWidget());
|
||||||
|
if(doc->type() == TabContent::Skin)
|
||||||
|
dynamic_cast<SkinDocument*>(doc)->getEditor()->undo();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorWindow::redo()
|
||||||
|
{
|
||||||
|
TabContent* doc = dynamic_cast<TabContent*>
|
||||||
|
(ui->editorTabs->currentWidget());
|
||||||
|
if(doc->type() == TabContent::Skin)
|
||||||
|
dynamic_cast<SkinDocument*>(doc)->getEditor()->redo();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorWindow::cut()
|
||||||
|
{
|
||||||
|
TabContent* doc = dynamic_cast<TabContent*>
|
||||||
|
(ui->editorTabs->currentWidget());
|
||||||
|
if(doc->type() == TabContent::Skin)
|
||||||
|
dynamic_cast<SkinDocument*>(doc)->getEditor()->cut();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorWindow::copy()
|
||||||
|
{
|
||||||
|
TabContent* doc = dynamic_cast<TabContent*>
|
||||||
|
(ui->editorTabs->currentWidget());
|
||||||
|
if(doc->type() == TabContent::Skin)
|
||||||
|
dynamic_cast<SkinDocument*>(doc)->getEditor()->copy();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorWindow::paste()
|
||||||
|
{
|
||||||
|
TabContent* doc = dynamic_cast<TabContent*>
|
||||||
|
(ui->editorTabs->currentWidget());
|
||||||
|
if(doc->type() == TabContent::Skin)
|
||||||
|
dynamic_cast<SkinDocument*>(doc)->getEditor()->paste();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorWindow::findReplace()
|
||||||
|
{
|
||||||
|
TabContent* doc = dynamic_cast<TabContent*>
|
||||||
|
(ui->editorTabs->currentWidget());
|
||||||
|
if(doc->type() == TabContent::Skin)
|
||||||
|
dynamic_cast<SkinDocument*>(doc)->showFind();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void EditorWindow::expandLine(ParseTreeModel* model, QModelIndex parent,
|
void EditorWindow::expandLine(ParseTreeModel* model, QModelIndex parent,
|
||||||
int line)
|
int line)
|
||||||
{
|
{
|
||||||
|
|
|
@ -73,6 +73,12 @@ private slots:
|
||||||
void tabTitleChanged(QString title);
|
void tabTitleChanged(QString title);
|
||||||
void updateCurrent(); /* Generates code in the current tab */
|
void updateCurrent(); /* Generates code in the current tab */
|
||||||
void lineChanged(int line); /* Used for auto-expand */
|
void lineChanged(int line); /* Used for auto-expand */
|
||||||
|
void undo();
|
||||||
|
void redo();
|
||||||
|
void cut();
|
||||||
|
void copy();
|
||||||
|
void paste();
|
||||||
|
void findReplace();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/* Setup functions */
|
/* Setup functions */
|
||||||
|
|
|
@ -70,7 +70,21 @@
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="actionDevice_Configuration"/>
|
<addaction name="actionDevice_Configuration"/>
|
||||||
</widget>
|
</widget>
|
||||||
|
<widget class="QMenu" name="menuEdit">
|
||||||
|
<property name="title">
|
||||||
|
<string>&Edit</string>
|
||||||
|
</property>
|
||||||
|
<addaction name="actionUndo"/>
|
||||||
|
<addaction name="actionRedo"/>
|
||||||
|
<addaction name="separator"/>
|
||||||
|
<addaction name="actionCut"/>
|
||||||
|
<addaction name="actionCopy"/>
|
||||||
|
<addaction name="actionPaste"/>
|
||||||
|
<addaction name="separator"/>
|
||||||
|
<addaction name="actionFind_Replace"/>
|
||||||
|
</widget>
|
||||||
<addaction name="menuFile"/>
|
<addaction name="menuFile"/>
|
||||||
|
<addaction name="menuEdit"/>
|
||||||
<addaction name="menuView"/>
|
<addaction name="menuView"/>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QStatusBar" name="statusbar"/>
|
<widget class="QStatusBar" name="statusbar"/>
|
||||||
|
@ -303,6 +317,54 @@
|
||||||
<string>Ctrl+D</string>
|
<string>Ctrl+D</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
|
<action name="actionUndo">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Undo</string>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut">
|
||||||
|
<string>Ctrl+Z</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionRedo">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Redo</string>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut">
|
||||||
|
<string>Ctrl+Shift+Z</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionCut">
|
||||||
|
<property name="text">
|
||||||
|
<string>C&ut</string>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut">
|
||||||
|
<string>Ctrl+X</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionCopy">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Copy</string>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut">
|
||||||
|
<string>Ctrl+C</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionPaste">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Paste</string>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut">
|
||||||
|
<string>Ctrl+V</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionFind_Replace">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Find/Replace</string>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut">
|
||||||
|
<string>Ctrl+F</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
</widget>
|
</widget>
|
||||||
<tabstops>
|
<tabstops>
|
||||||
<tabstop>projectTree</tabstop>
|
<tabstop>projectTree</tabstop>
|
||||||
|
|
|
@ -151,6 +151,12 @@ void SkinDocument::setupUI()
|
||||||
QObject::connect(device, SIGNAL(settingsChanged()),
|
QObject::connect(device, SIGNAL(settingsChanged()),
|
||||||
this, SLOT(deviceChanged()));
|
this, SLOT(deviceChanged()));
|
||||||
|
|
||||||
|
/* Attaching the find/replace dialog */
|
||||||
|
findReplace = new FindReplaceDialog(this);
|
||||||
|
findReplace->setModal(false);
|
||||||
|
findReplace->setTextEdit(editor);
|
||||||
|
findReplace->hide();
|
||||||
|
|
||||||
settingsChanged();
|
settingsChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,8 @@
|
||||||
#include <QHBoxLayout>
|
#include <QHBoxLayout>
|
||||||
#include <QGraphicsScene>
|
#include <QGraphicsScene>
|
||||||
|
|
||||||
|
#include "findreplacedialog.h"
|
||||||
|
|
||||||
#include "skinhighlighter.h"
|
#include "skinhighlighter.h"
|
||||||
#include "parsetreemodel.h"
|
#include "parsetreemodel.h"
|
||||||
#include "preferencesdialog.h"
|
#include "preferencesdialog.h"
|
||||||
|
@ -61,6 +63,7 @@ public:
|
||||||
QString file() const{ return fileName; }
|
QString file() const{ return fileName; }
|
||||||
QString title() const{ return titleText; }
|
QString title() const{ return titleText; }
|
||||||
QString getStatus(){ return parseStatus; }
|
QString getStatus(){ return parseStatus; }
|
||||||
|
CodeEditor* getEditor(){ return editor; }
|
||||||
void genCode(){ editor->document()->setPlainText(model->genCode()); }
|
void genCode(){ editor->document()->setPlainText(model->genCode()); }
|
||||||
void setProject(ProjectModel* project){ this->project = project; }
|
void setProject(ProjectModel* project){ this->project = project; }
|
||||||
|
|
||||||
|
@ -73,6 +76,9 @@ public:
|
||||||
|
|
||||||
QGraphicsScene* scene(){ return model->render(project, device, &fileName); }
|
QGraphicsScene* scene(){ return model->render(project, device, &fileName); }
|
||||||
|
|
||||||
|
void showFind(){ findReplace->show(); }
|
||||||
|
void hideFind(){ findReplace->hide(); }
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
@ -104,6 +110,8 @@ private:
|
||||||
|
|
||||||
ProjectModel* project;
|
ProjectModel* project;
|
||||||
DeviceState* device;
|
DeviceState* device;
|
||||||
|
|
||||||
|
FindReplaceDialog* findReplace;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SKINDOCUMENT_H
|
#endif // SKINDOCUMENT_H
|
||||||
|
|
|
@ -11,6 +11,7 @@ RBBASE_DIR = $$replace(RBBASE_DIR,/utils/themeeditor,)
|
||||||
INCLUDEPATH += gui
|
INCLUDEPATH += gui
|
||||||
INCLUDEPATH += models
|
INCLUDEPATH += models
|
||||||
INCLUDEPATH += graphics
|
INCLUDEPATH += graphics
|
||||||
|
INCLUDEPATH += findreplace
|
||||||
|
|
||||||
# Stuff for the parse lib
|
# Stuff for the parse lib
|
||||||
libskin_parser.commands = @$(MAKE) \
|
libskin_parser.commands = @$(MAKE) \
|
||||||
|
@ -40,7 +41,9 @@ HEADERS += models/parsetreemodel.h \
|
||||||
graphics/rbrenderinfo.h \
|
graphics/rbrenderinfo.h \
|
||||||
graphics/rbimage.h \
|
graphics/rbimage.h \
|
||||||
graphics/rbfont.h \
|
graphics/rbfont.h \
|
||||||
gui/devicestate.h
|
gui/devicestate.h \
|
||||||
|
findreplace/findreplaceform.h \
|
||||||
|
findreplace/findreplacedialog.h
|
||||||
SOURCES += main.cpp \
|
SOURCES += main.cpp \
|
||||||
models/parsetreemodel.cpp \
|
models/parsetreemodel.cpp \
|
||||||
models/parsetreenode.cpp \
|
models/parsetreenode.cpp \
|
||||||
|
@ -57,7 +60,9 @@ SOURCES += main.cpp \
|
||||||
graphics/rbrenderinfo.cpp \
|
graphics/rbrenderinfo.cpp \
|
||||||
graphics/rbimage.cpp \
|
graphics/rbimage.cpp \
|
||||||
graphics/rbfont.cpp \
|
graphics/rbfont.cpp \
|
||||||
gui/devicestate.cpp
|
gui/devicestate.cpp \
|
||||||
|
findreplace/findreplaceform.cpp \
|
||||||
|
findreplace/findreplacedialog.cpp
|
||||||
OTHER_FILES += README \
|
OTHER_FILES += README \
|
||||||
resources/windowicon.png \
|
resources/windowicon.png \
|
||||||
resources/appicon.xcf \
|
resources/appicon.xcf \
|
||||||
|
@ -69,5 +74,7 @@ OTHER_FILES += README \
|
||||||
FORMS += gui/editorwindow.ui \
|
FORMS += gui/editorwindow.ui \
|
||||||
gui/preferencesdialog.ui \
|
gui/preferencesdialog.ui \
|
||||||
gui/configdocument.ui \
|
gui/configdocument.ui \
|
||||||
gui/skinviewer.ui
|
gui/skinviewer.ui \
|
||||||
|
findreplace/findreplaceform.ui \
|
||||||
|
findreplace/findreplacedialog.ui
|
||||||
RESOURCES += resources.qrc
|
RESOURCES += resources.qrc
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue