Search and replace : Diagram properties can be changed (and mass changed) through the search and replace widget.

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@5564 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
blacksun
2018-10-21 09:54:59 +00:00
parent 0bc34cfb6d
commit 94dc195028
16 changed files with 1163 additions and 166 deletions

View File

@@ -0,0 +1,140 @@
/*
Copyright 2006-2018 The QElectroTech Team
This file is part of QElectroTech.
QElectroTech is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
QElectroTech is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/
#include "searchandreplaceworker.h"
#include "diagram.h"
#include "changetitleblockcommand.h"
SearchAndReplaceWorker::SearchAndReplaceWorker()
{}
/**
* @brief SearchAndReplaceWorker::clear
* All registred properties
*/
void SearchAndReplaceWorker::clear()
{
m_titleblock_properties = TitleBlockProperties();
}
/**
* @brief SearchAndReplaceWorker::replaceDiagram
* Replace all properties of each diagram in @diagram_list,
* by the current titleblock propertie of this worker
* @param diagram_list, list of diagram to be changed, all diagrams must belong to the same project;
*/
void SearchAndReplaceWorker::replaceDiagram(QList<Diagram *> diagram_list)
{
if (diagram_list.isEmpty()) {
return;
}
QETProject *project = diagram_list.first()->project();
for (Diagram *d : diagram_list) {
if (d->project() != project) {
return;
}
}
QUndoStack *us = project->undoStack();
us->beginMacro(QObject::tr("Chercher remplacer les propriétés de folio"));
for (Diagram *d : diagram_list)
{
TitleBlockProperties old_propertie = d->border_and_titleblock.exportTitleBlock();
TitleBlockProperties new_properties = old_propertie;
if (!m_titleblock_properties.title.isEmpty())
{
if (m_titleblock_properties.title == eraseText()) {
new_properties.title.clear();
} else {
new_properties.title = m_titleblock_properties.title;
}
}
if (!m_titleblock_properties.author.isEmpty())
{
if (m_titleblock_properties.author == eraseText()) {
new_properties.author.clear();
} else {
new_properties.author = m_titleblock_properties.author;
}
}
if (!m_titleblock_properties.filename.isEmpty())
{
if (m_titleblock_properties.filename == eraseText()) {
new_properties.filename.clear();
} else {
new_properties.filename = m_titleblock_properties.filename;
}
}
if (!m_titleblock_properties.machine.isEmpty())
{
if (m_titleblock_properties.machine == eraseText()) {
new_properties.machine.clear();
} else {
new_properties.machine = m_titleblock_properties.machine;
}
}
if (!m_titleblock_properties.locmach.isEmpty())
{
if (m_titleblock_properties.locmach == eraseText()) {
new_properties.locmach.clear();
} else {
new_properties.locmach = m_titleblock_properties.locmach;
}
}
if (!m_titleblock_properties.indexrev.isEmpty())
{
if (m_titleblock_properties.indexrev == eraseText()) {
new_properties.indexrev.clear();
} else {
new_properties.indexrev = m_titleblock_properties.indexrev;
}
}
if (!m_titleblock_properties.folio.isEmpty())
{
if (m_titleblock_properties.folio == eraseText()) {
new_properties.folio.clear();
} else {
new_properties.folio = m_titleblock_properties.folio;
}
}
if (m_titleblock_properties.date.isValid())
{
if (m_titleblock_properties.date == eraseDate()) {
new_properties.date = QDate();
} else {
new_properties.date = m_titleblock_properties.date;
}
}
new_properties.context.add(m_titleblock_properties.context);
if (old_propertie != new_properties) {
project->undoStack()->push(new ChangeTitleBlockCommand(d, old_propertie, new_properties));
}
}
us->endMacro();
}
void SearchAndReplaceWorker::replaceDiagram(Diagram *diagram)
{
QList<Diagram *> list;
list.append(diagram);
replaceDiagram(list);
}

View File

@@ -0,0 +1,49 @@
/*
Copyright 2006-2018 The QElectroTech Team
This file is part of QElectroTech.
QElectroTech is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
QElectroTech is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef SEARCHANDREPLACEWORKER_H
#define SEARCHANDREPLACEWORKER_H
#include <QDate>
#include "titleblockproperties.h"
class Diagram;
/**
* @brief The SearchAndReplaceWorker class
* This class is the worker use to change properties when use the search and replace function of QET
*/
class SearchAndReplaceWorker
{
public:
SearchAndReplaceWorker();
void clear();
void replaceDiagram(QList <Diagram *> diagram_list);
void replaceDiagram(Diagram *diagram);
static QString eraseText() {return QString("XXXXXXXXXXXXXXXXXXX");}
static QDate eraseDate() {return QDate(1900, 1, 1);}
private:
TitleBlockProperties m_titleblock_properties;
friend class SearchAndReplaceWidget;
};
#endif // SEARCHANDREPLACEWORKER_H

View File

@@ -0,0 +1,178 @@
/*
Copyright 2006-2018 The QElectroTech Team
This file is part of QElectroTech.
QElectroTech is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
QElectroTech is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/
#include "replacefoliowidget.h"
#include "ui_replacefoliowidget.h"
#include "diagramcontextwidget.h"
#include "searchandreplaceworker.h"
#include <QDialogButtonBox>
ReplaceFolioWidget::ReplaceFolioWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::ReplaceFolioWidget)
{
ui->setupUi(this);
m_diagram_context_widget = new DiagramContextWidget(this);
ui->m_tab2_vlayout->addWidget(m_diagram_context_widget);
}
ReplaceFolioWidget::~ReplaceFolioWidget()
{
delete ui;
}
/**
* @brief ReplaceFolioWidget::titleBlockProperties
* @return the title block properties edited by this widget
*/
TitleBlockProperties ReplaceFolioWidget::titleBlockProperties() const
{
TitleBlockProperties prop;
prop.title = ui->m_title_le ->text();
prop.author = ui->m_author_le->text();
prop.filename = ui->m_file_le ->text();
prop.machine = ui->m_mach ->text();
prop.locmach = ui->m_loc ->text();
prop.indexrev = ui->m_indice ->text();
prop.folio = ui->m_folio_le ->text();
if (ui->m_unchanged_date->isChecked()) {
prop.date = QDate();
prop.useDate = TitleBlockProperties::UseDateValue;
}
if (ui->m_no_date_rb->isChecked()) {
prop.date = SearchAndReplaceWorker::eraseDate();
prop.useDate = TitleBlockProperties::UseDateValue;
}
else if (ui->m_fixed_date_rb->isChecked()) {
prop.date = ui->m_date_edit->date();
prop.useDate = TitleBlockProperties::UseDateValue;
}
prop.context = m_diagram_context_widget->context();
return prop;
}
/**
* @brief ReplaceFolioWidget::setTitleBlockProperties
* Set the title block properties edited by this widget
* @param properties
*/
void ReplaceFolioWidget::setTitleBlockProperties(const TitleBlockProperties &properties)
{
ui->m_title_le ->setText (properties.title);
ui->m_author_le->setText (properties.author);
ui->m_file_le ->setText (properties.filename);
ui->m_mach ->setText (properties.machine);
ui->m_loc ->setText (properties.locmach);
ui->m_indice ->setText (properties.indexrev);
ui->m_folio_le ->setText (properties.folio);
//About date
ui->m_date_now_pb->setDisabled(true);
ui->m_date_edit ->setDisabled(true);
ui->m_date_edit ->setDate(QDate::currentDate());
if (properties.useDate == TitleBlockProperties::CurrentDate) {
ui -> m_fixed_date_rb ->setChecked(true);
}
else
{
if (properties.date.isNull()) {
ui->m_unchanged_date->setChecked(true);
}
else if (properties.date == SearchAndReplaceWorker::eraseDate()) {
ui->m_no_date_rb->setChecked(true);
}
else
{
ui->m_fixed_date_rb->setChecked(true);
ui->m_date_edit->setDate(properties.date);
}
}
//About date
m_diagram_context_widget->setContext(properties.context);
}
ReplaceFolioDialog::ReplaceFolioDialog(QWidget *parent) :
QDialog(parent)
{
QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(m_widget = new ReplaceFolioWidget(this));
layout->addWidget(m_button_box = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Reset, this));
connect(m_button_box, &QDialogButtonBox::clicked, [this](QAbstractButton *button_)
{
this->done(m_button_box->buttonRole(button_));
});
}
ReplaceFolioDialog::~ReplaceFolioDialog()
{}
/**
* @brief ReplaceFolioDialog::titleBlockProperties
* @return The title block properties edited by this dialog
*/
TitleBlockProperties ReplaceFolioDialog::titleBlockProperties() const {
return m_widget->titleBlockProperties();
}
/**
* @brief ReplaceFolioDialog::setTitleBlockProperties
* @param properties : set the title block properties edited by this dialog
*/
void ReplaceFolioDialog::setTitleBlockProperties(const TitleBlockProperties &properties) {
m_widget->setTitleBlockProperties(properties);
}
void ReplaceFolioWidget::on_m_title_cb_clicked() {
ui->m_title_le->setText(ui->m_title_cb->isChecked() ? SearchAndReplaceWorker::eraseText() : QString());
ui->m_title_le->setDisabled(ui->m_title_cb->isChecked());
}
void ReplaceFolioWidget::on_m_author_cb_clicked() {
ui->m_author_le->setText(ui->m_author_cb->isChecked() ? SearchAndReplaceWorker::eraseText() : QString());
ui->m_author_le->setDisabled(ui->m_author_cb->isChecked());
}
void ReplaceFolioWidget::on_m_file_cb_clicked() {
ui->m_file_le->setText(ui->m_file_cb->isChecked() ? SearchAndReplaceWorker::eraseText() : QString());
ui->m_file_le->setDisabled(ui->m_file_cb->isChecked());
}
void ReplaceFolioWidget::on_m_folio_cb_clicked() {
ui->m_folio_le->setText(ui->m_folio_cb->isChecked() ? SearchAndReplaceWorker::eraseText() : QString());
ui->m_folio_le->setDisabled(ui->m_folio_cb->isChecked());
}
void ReplaceFolioWidget::on_m_mach_cb_clicked() {
ui->m_mach->setText(ui->m_mach_cb->isChecked() ? SearchAndReplaceWorker::eraseText() : QString());
ui->m_mach->setDisabled(ui->m_mach_cb->isChecked());
}
void ReplaceFolioWidget::on_m_loc_cb_clicked() {
ui->m_loc->setText(ui->m_loc_cb->isChecked() ? SearchAndReplaceWorker::eraseText() : QString());
ui->m_loc->setDisabled(ui->m_loc_cb->isChecked());
}
void ReplaceFolioWidget::on_m_indice_cb_clicked() {
ui->m_indice->setText(ui->m_indice_cb->isChecked() ? SearchAndReplaceWorker::eraseText() : QString());
ui->m_indice->setDisabled(ui->m_indice_cb->isChecked());
}

View File

@@ -0,0 +1,76 @@
/*
Copyright 2006-2018 The QElectroTech Team
This file is part of QElectroTech.
QElectroTech is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
QElectroTech is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef REPLACEFOLIOWIDGET_H
#define REPLACEFOLIOWIDGET_H
#include <QWidget>
#include <QDialog>
#include "diagramcontext.h"
#include "titleblockproperties.h"
class DiagramContextWidget;
class QDialogButtonBox;
namespace Ui {
class ReplaceFolioWidget;
}
class ReplaceFolioWidget : public QWidget
{
Q_OBJECT
public:
explicit ReplaceFolioWidget(QWidget *parent = nullptr);
~ReplaceFolioWidget();
TitleBlockProperties titleBlockProperties() const;
void setTitleBlockProperties (const TitleBlockProperties &properties);
private slots:
void on_m_title_cb_clicked();
void on_m_author_cb_clicked();
void on_m_file_cb_clicked();
void on_m_folio_cb_clicked();
void on_m_mach_cb_clicked();
void on_m_loc_cb_clicked();
void on_m_indice_cb_clicked();
private:
Ui::ReplaceFolioWidget *ui;
DiagramContextWidget *m_diagram_context_widget = nullptr;
};
class ReplaceFolioDialog : public QDialog
{
Q_OBJECT
public:
ReplaceFolioDialog(QWidget *parent = nullptr);
~ReplaceFolioDialog();
TitleBlockProperties titleBlockProperties() const;
void setTitleBlockProperties (const TitleBlockProperties &properties);
private:
ReplaceFolioWidget *m_widget = nullptr;
QDialogButtonBox *m_button_box = nullptr;
};
#endif // REPLACEFOLIOWIDGET_H

View File

@@ -0,0 +1,388 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ReplaceFolioWidget</class>
<widget class="QWidget" name="ReplaceFolioWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>449</width>
<height>389</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="tabPosition">
<enum>QTabWidget::South</enum>
</property>
<property name="tabShape">
<enum>QTabWidget::Rounded</enum>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<property name="elideMode">
<enum>Qt::ElideNone</enum>
</property>
<property name="usesScrollButtons">
<bool>true</bool>
</property>
<property name="tabsClosable">
<bool>false</bool>
</property>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>Principales</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QGridLayout" name="gridLayout_4">
<item row="9" column="1">
<widget class="QLabel" name="label_12">
<property name="text">
<string>Indice Rev</string>
</property>
</widget>
</item>
<item row="8" column="1">
<widget class="QLabel" name="label_11">
<property name="text">
<string>Localisation</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Fichier :</string>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QLineEdit" name="m_title_le">
<property name="toolTip">
<string>Disponible en tant que %title pour les modèles de cartouches</string>
</property>
<property name="placeholderText">
<string>Non modifier</string>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QLineEdit" name="m_author_le">
<property name="toolTip">
<string>Disponible en tant que %author pour les modèles de cartouches</string>
</property>
<property name="placeholderText">
<string>Non modifier</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Auteur :</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Date :</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QLabel" name="label_10">
<property name="text">
<string>Installation :</string>
</property>
</widget>
</item>
<item row="9" column="3">
<widget class="QLineEdit" name="m_indice">
<property name="toolTip">
<string>Disponible en tant que %indexrev pour les modèles de cartouches</string>
</property>
<property name="placeholderText">
<string>Non modifier</string>
</property>
</widget>
</item>
<item row="4" column="3">
<widget class="QLineEdit" name="m_file_le">
<property name="toolTip">
<string>Disponible en tant que %filename pour les modèles de cartouches</string>
</property>
<property name="placeholderText">
<string>Non modifier</string>
</property>
</widget>
</item>
<item row="10" column="3">
<layout class="QGridLayout" name="gridLayout"/>
</item>
<item row="5" column="1">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Folio :</string>
</property>
</widget>
</item>
<item row="3" column="3">
<layout class="QGridLayout" name="gridLayout_2" columnstretch="0,0,0">
<item row="1" column="0">
<widget class="QRadioButton" name="m_no_date_rb">
<property name="text">
<string>Pas de date</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QDateEdit" name="m_date_edit">
<property name="toolTip">
<string>Disponible en tant que %date pour les modèles de cartouches</string>
</property>
<property name="frame">
<bool>true</bool>
</property>
<property name="calendarPopup">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QRadioButton" name="m_fixed_date_rb">
<property name="text">
<string>Date fixe :</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QPushButton" name="m_date_now_pb">
<property name="toolTip">
<string>Appliquer la date actuelle</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../../../qelectrotech.qrc">
<normaloff>:/ico/22x22/start.png</normaloff>:/ico/22x22/start.png</iconset>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QRadioButton" name="m_unchanged_date">
<property name="text">
<string>Non &amp;modifier</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="5" column="3">
<widget class="QLineEdit" name="m_folio_le">
<property name="toolTip">
<string>Disponible en tant que %folio pour les modèles de cartouches
Les variables suivantes sont utilisables :
- %id : numéro du folio courant dans le projet
- %total : nombre total de folios dans le projet
- %autonum : Folio Auto Numeration</string>
</property>
<property name="placeholderText">
<string>Non modifier</string>
</property>
</widget>
</item>
<item row="8" column="3">
<widget class="QLineEdit" name="m_loc">
<property name="toolTip">
<string>Disponible en tant que %locmach pour les modèles de cartouches</string>
</property>
<property name="placeholderText">
<string>Non modifier</string>
</property>
</widget>
</item>
<item row="6" column="3">
<widget class="QLineEdit" name="m_mach">
<property name="toolTip">
<string>Disponible en tant que %machine pour les modèles de cartouches</string>
</property>
<property name="placeholderText">
<string>Non modifier</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Titre :</string>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QCheckBox" name="m_title_cb">
<property name="toolTip">
<string>Supprimer ce texte</string>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="4">
<widget class="QCheckBox" name="m_author_cb">
<property name="toolTip">
<string>Supprimer ce texte</string>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="4" column="4">
<widget class="QCheckBox" name="m_file_cb">
<property name="toolTip">
<string>Supprimer ce texte</string>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="5" column="4">
<widget class="QCheckBox" name="m_folio_cb">
<property name="toolTip">
<string>Supprimer ce texte</string>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="6" column="4">
<widget class="QCheckBox" name="m_mach_cb">
<property name="toolTip">
<string>Supprimer ce texte</string>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="8" column="4">
<widget class="QCheckBox" name="m_loc_cb">
<property name="toolTip">
<string>Supprimer ce texte</string>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="9" column="4">
<widget class="QCheckBox" name="m_indice_cb">
<property name="toolTip">
<string>Supprimer ce texte</string>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</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>
</widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
<string>Personnalisées</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QVBoxLayout" name="m_tab2_vlayout">
<item>
<widget class="QLabel" name="label_8">
<property name="text">
<string>Vous pouvez définir ici vos propres associations noms/valeurs pour que le cartouche en tienne compte. Exemple :
associer le nom &quot;volta&quot; et la valeur &quot;1745&quot; remplacera %{volta} par 1745 dans le cartouche.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<resources>
<include location="../../../qelectrotech.qrc"/>
</resources>
<connections>
<connection>
<sender>m_fixed_date_rb</sender>
<signal>toggled(bool)</signal>
<receiver>m_date_edit</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>144</x>
<y>145</y>
</hint>
<hint type="destinationlabel">
<x>250</x>
<y>145</y>
</hint>
</hints>
</connection>
<connection>
<sender>m_fixed_date_rb</sender>
<signal>toggled(bool)</signal>
<receiver>m_date_now_pb</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>144</x>
<y>145</y>
</hint>
<hint type="destinationlabel">
<x>356</x>
<y>145</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@@ -24,6 +24,7 @@
#include "element.h"
#include "independenttextitem.h"
#include "conductor.h"
#include "replacefoliowidget.h"
#include <QSettings>
@@ -202,8 +203,9 @@ void SearchAndReplaceWidget::setHideAdvanced(bool hide) const
ui->m_advanced_pb ->setChecked(!hide);
ui->m_replace ->setHidden(hide);
ui->m_replace_le ->setHidden(hide);
ui->m_mode ->setHidden(hide);
ui->m_mode_cb ->setHidden(hide);
ui->m_folio_pb ->setHidden(hide);
ui->m_element_pb ->setHidden(hide);
ui->m_conductor_pb ->setHidden(hide);
ui->m_tree_widget ->setHidden(hide);
ui->m_replace_pb ->setHidden(hide);
ui->m_replace_all_pb->setHidden(hide);
@@ -574,6 +576,22 @@ void SearchAndReplaceWidget::updateParentCheckState(QTreeWidgetItem *item, bool
}
}
/**
* @brief SearchAndReplaceWidget::activateNextChecked
* Activate the next checked (and visible) item
*/
void SearchAndReplaceWidget::activateNextChecked()
{
//Next button is disabled, so there is not a next item.
if (!ui->m_next_pb->isEnabled())
return;
do {
on_m_next_pb_clicked();
} while ((ui->m_tree_widget->currentItem()->checkState(0) != Qt::Checked) &&
ui->m_next_pb->isEnabled());
}
void SearchAndReplaceWidget::on_m_quit_button_clicked() {
this->setHidden(true);
}
@@ -675,6 +693,11 @@ void SearchAndReplaceWidget::on_m_tree_widget_currentItemChanged(QTreeWidgetItem
}
updateNextPreviousButtons();
if (current->checkState(0) == Qt::Checked && !m_category_qtwi.contains(current)) {
ui->m_replace_pb->setEnabled(true);
} else {
ui->m_replace_pb->setDisabled(true);
}
}
void SearchAndReplaceWidget::on_m_next_pb_clicked()
@@ -720,3 +743,69 @@ void SearchAndReplaceWidget::on_m_previous_pb_clicked()
ui->m_tree_widget->scrollToItem(item);
on_m_tree_widget_itemDoubleClicked(item, 0);
}
void SearchAndReplaceWidget::on_m_folio_pb_clicked()
{
ReplaceFolioDialog *dialog = new ReplaceFolioDialog(this);
dialog->setTitleBlockProperties(m_worker.m_titleblock_properties);
int result = dialog->exec();
if (result == QDialogButtonBox::AcceptRole)
{
QString text = ui->m_folio_pb->text();
if (!text.endsWith(tr(" [Édité]"))) {
text.append(tr(" [Édité]"));
}
ui->m_folio_pb->setText(text);
m_worker.m_titleblock_properties = dialog->titleBlockProperties();
}
else if (result == QDialogButtonBox::ResetRole)
{
QString text = ui->m_folio_pb->text();
if (text.endsWith(tr(" [Édité]"))) {
text.remove(tr(" [Édité]"));
}
ui->m_folio_pb->setText(text);
m_worker.m_titleblock_properties = TitleBlockProperties();
}
}
void SearchAndReplaceWidget::on_m_replace_pb_clicked()
{
QTreeWidgetItem *qtwi = ui->m_tree_widget->currentItem();
if(!qtwi) {
return;
}
if (!m_category_qtwi.contains(qtwi) && qtwi->checkState(0) == Qt::Checked)
{
if (ui->m_folio_pb->text().endsWith(tr(" [Édité]")) &&
m_diagram_hash.keys().contains(qtwi))
{
QPointer<Diagram> d = m_diagram_hash.value(qtwi);
if (d) {
m_worker.replaceDiagram(d.data());
}
}
}
activateNextChecked();
ui->m_replace_pb->setEnabled(ui->m_next_pb->isEnabled());
}
void SearchAndReplaceWidget::on_m_replace_all_pb_clicked()
{
if (ui->m_folio_pb->text().endsWith(tr(" [Édité]")))
{
QList <Diagram *> d;
for (QTreeWidgetItem *qtwi : m_diagram_hash.keys())
{
if (!qtwi->isHidden() && qtwi->checkState(0) == Qt::Checked)
{
QPointer <Diagram> p = m_diagram_hash.value(qtwi);
if (p) {
d.append(p.data());
}
}
}
m_worker.replaceDiagram(d);
}
}

View File

@@ -20,8 +20,10 @@
#include <QWidget>
#include <QTreeWidgetItemIterator>
#include "element.h"
#include "independenttextitem.h"
#include "searchandreplaceworker.h"
class QTreeWidgetItem;
@@ -57,6 +59,7 @@ class SearchAndReplaceWidget : public QWidget
void itemChanged(QTreeWidgetItem *item, int column);
void setChildCheckState(QTreeWidgetItem *item, Qt::CheckState check, bool deep = true);
void updateParentCheckState(QTreeWidgetItem *item, bool all_parents = true);
void activateNextChecked();
private slots:
void on_m_quit_button_clicked();
@@ -66,6 +69,9 @@ class SearchAndReplaceWidget : public QWidget
void on_m_tree_widget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
void on_m_next_pb_clicked();
void on_m_previous_pb_clicked();
void on_m_folio_pb_clicked();
void on_m_replace_pb_clicked();
void on_m_replace_all_pb_clicked();
private:
Ui::SearchAndReplaceWidget *ui;
@@ -88,6 +94,7 @@ class SearchAndReplaceWidget : public QWidget
QPointer<Element> m_highlighted_element;
QPointer<QGraphicsObject> m_last_selected;
QHash<QTreeWidgetItem *, QPointer <Diagram>> m_diagram_hash;
SearchAndReplaceWorker m_worker;
};
#endif // SEARCHANDREPLACEWIDGET_H

View File

@@ -26,6 +26,20 @@
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="6">
<widget class="QPushButton" name="m_reload_pb">
<property name="toolTip">
<string>Actualiser</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../../../qelectrotech.qrc">
<normaloff>:/ico/16x16/view-refresh.png</normaloff>:/ico/16x16/view-refresh.png</iconset>
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QPushButton" name="m_next_pb">
<property name="toolTip">
@@ -43,6 +57,29 @@
</property>
</widget>
</item>
<item row="0" column="7">
<widget class="QPushButton" name="m_advanced_pb">
<property name="toolTip">
<string>Avancé</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../../../qelectrotech.qrc">
<normaloff>:/ico/16x16/configure-toolbars.png</normaloff>:/ico/16x16/configure-toolbars.png</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<property name="flat">
<bool>false</bool>
</property>
</widget>
</item>
<item row="4" column="0" colspan="8">
<widget class="QTreeWidget" name="m_tree_widget">
<property name="uniformRowHeights">
@@ -81,6 +118,19 @@
</property>
</widget>
</item>
<item row="5" column="0">
<spacer name="m_v_spacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="0">
<widget class="QPushButton" name="m_quit_button">
<property name="toolTip">
@@ -100,75 +150,24 @@
</item>
<item row="0" column="3" rowspan="3">
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="1" colspan="4">
<item row="1" column="1" colspan="2">
<widget class="QLineEdit" name="m_replace_le">
<property name="placeholderText">
<string>Champ texte de folio</string>
</property>
<property name="clearButtonEnabled">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="m_replace">
<item row="1" column="3">
<widget class="QPushButton" name="m_folio_pb">
<property name="text">
<string>Remplacer :</string>
<string>Folio</string>
</property>
</widget>
</item>
<item row="2" column="2">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="3">
<widget class="QPushButton" name="m_replace_pb">
<property name="toolTip">
<string>Remplacer la correspondance séléctionner</string>
</property>
<property name="text">
<string>Remplacer</string>
</property>
</widget>
</item>
<item row="2" column="4">
<widget class="QPushButton" name="m_replace_all_pb">
<property name="toolTip">
<string>Remplacer les correspondances coché</string>
</property>
<property name="text">
<string>Tout remplacer</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="m_mode">
<property name="text">
<string>Mode :</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="m_mode_cb">
<item>
<property name="text">
<string>Texte brut</string>
</property>
</item>
<item>
<property name="text">
<string>Mots entiers</string>
</property>
</item>
</widget>
</item>
<item row="0" column="1" colspan="4">
<item row="0" column="1" colspan="5">
<widget class="QLineEdit" name="m_search_le">
<property name="clearButtonEnabled">
<bool>true</bool>
@@ -182,55 +181,68 @@
</property>
</widget>
</item>
</layout>
</item>
<item row="0" column="7">
<widget class="QPushButton" name="m_advanced_pb">
<property name="toolTip">
<string>Avancé</string>
<item row="1" column="4">
<widget class="QPushButton" name="m_element_pb">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../../../qelectrotech.qrc">
<normaloff>:/ico/16x16/configure-toolbars.png</normaloff>:/ico/16x16/configure-toolbars.png</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<property name="flat">
<bool>false</bool>
<string>Élément</string>
</property>
</widget>
</item>
<item row="5" column="0">
<spacer name="m_v_spacer">
<item row="1" column="5">
<widget class="QPushButton" name="m_conductor_pb">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Conducteur</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="m_replace">
<property name="text">
<string>Remplacer :</string>
</property>
</widget>
</item>
<item row="2" column="1">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>0</height>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="6">
<widget class="QPushButton" name="m_reload_pb">
</layout>
</item>
<item row="2" column="4" colspan="2">
<widget class="QPushButton" name="m_replace_pb">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Actualiser</string>
<string>Remplacer la correspondance séléctionner</string>
</property>
<property name="text">
<string/>
<string>Remplacer</string>
</property>
<property name="icon">
<iconset resource="../../../qelectrotech.qrc">
<normaloff>:/ico/16x16/view-refresh.png</normaloff>:/ico/16x16/view-refresh.png</iconset>
</widget>
</item>
<item row="2" column="6" colspan="2">
<widget class="QPushButton" name="m_replace_all_pb">
<property name="toolTip">
<string>Remplacer les correspondances coché</string>
</property>
<property name="text">
<string>Tout remplacer</string>
</property>
</widget>
</item>

View File

@@ -1,5 +1,5 @@
/*
Copyright 2006-2017 The QElectroTech Team
Copyright 2006-2018 The QElectroTech Team
This file is part of QElectroTech.
QElectroTech is free software: you can redistribute it and/or modify
@@ -528,44 +528,6 @@ void ResetConductorCommand::redo() {
}
}
/**
Constructeur
@param d Schema dont on modifie le cartouche
@param old_ip Anciennes proprietes du cartouche
@param new_ip Nouvelles proprietes du cartouche
@param parent QUndoCommand parent
*/
ChangeTitleBlockCommand::ChangeTitleBlockCommand(
Diagram *d,
const TitleBlockProperties &old_ip,
const TitleBlockProperties &new_ip,
QUndoCommand *parent
) :
QUndoCommand(QObject::tr("modifier le cartouche", "undo caption"), parent),
diagram(d),
old_titleblock(old_ip),
new_titleblock(new_ip)
{
}
/// Destructeur
ChangeTitleBlockCommand::~ChangeTitleBlockCommand() {
}
/// Annule la modification de cartouche
void ChangeTitleBlockCommand::undo() {
diagram -> showMe();
diagram -> border_and_titleblock.importTitleBlock(old_titleblock);
diagram -> invalidate(diagram -> border_and_titleblock.borderAndTitleBlockRect());
}
/// Refait la modification de cartouche
void ChangeTitleBlockCommand::redo() {
diagram -> showMe();
diagram -> border_and_titleblock.importTitleBlock(new_titleblock);
diagram -> invalidate(diagram -> border_and_titleblock.borderAndTitleBlockRect());
}
/**
Constructeur
@param dia Schema modifie

View File

@@ -1,5 +1,5 @@
/*
Copyright 2006-2017 The QElectroTech Team
Copyright 2006-2018 The QElectroTech Team
This file is part of QElectroTech.
QElectroTech is free software: you can redistribute it and/or modify
@@ -21,7 +21,6 @@
#include "borderproperties.h"
#include "qetgraphicsitem/conductor.h"
#include "diagramcontent.h"
#include "titleblockproperties.h"
#include "qet.h"
#include "qetgraphicsitem/qetshapeitem.h"
#include "conductorprofile.h"
@@ -273,31 +272,7 @@ class ResetConductorCommand : public QUndoCommand {
Diagram *diagram;
};
/**
This command changes the title block properties for a particular diagram.
*/
class ChangeTitleBlockCommand : public QUndoCommand {
// constructors, destructor
public:
ChangeTitleBlockCommand(Diagram *, const TitleBlockProperties &, const TitleBlockProperties &, QUndoCommand * = nullptr);
~ChangeTitleBlockCommand() override;
private:
ChangeTitleBlockCommand(const ChangeTitleBlockCommand &);
// methods
public:
void undo() override;
void redo() override;
// attributes
private:
/// modified diagram
Diagram *diagram;
/// properties before the change
TitleBlockProperties old_titleblock;
/// properties after the change
TitleBlockProperties new_titleblock;
};
/**
This command changes the border properties of a particular diagram.

View File

@@ -20,6 +20,21 @@
#include "qet.h"
#include <algorithm>
/**
* @brief DiagramContext::add
* Add all value of @other to this.
* If a key already exist, the value is replaced.
* If a key doesn't exist, she will be added.
* All other keys of this context, which are not present in @other, stay unchanged.
* @param other
*/
void DiagramContext::add(DiagramContext other)
{
for (QString key : other.keys()) {
addValue(key, other.value(key));
}
}
/**
@return a list containing all the keys in the context object.
*/

View File

@@ -56,6 +56,7 @@ class DiagramContext
DecreasingLength
};
void add(DiagramContext other);
QList<QString> keys(KeyOrder = None) const;
bool contains(const QString &) const;
const QVariant operator[](const QString &) const;

View File

@@ -43,6 +43,7 @@
#include "undocommand/deleteqgraphicsitemcommand.h"
#include "dynamicelementtextitem.h"
#include "multipastedialog.h"
#include "changetitleblockcommand.h"
/**
Constructeur

View File

@@ -22,6 +22,7 @@
#include "diagramcommands.h"
#include "projectpropertiesdialog.h"
#include "diagram.h"
#include "changetitleblockcommand.h"
/**
* @brief DiagramPropertiesDialog::DiagramPropertiesDialog

View File

@@ -0,0 +1,55 @@
/*
Copyright 2006-2018 The QElectroTech Team
This file is part of QElectroTech.
QElectroTech is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
QElectroTech is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/
#include "changetitleblockcommand.h"
#include "diagram.h"
/**
* @brief ChangeTitleBlockCommand::ChangeTitleBlockCommand
* @param d
* @param old_ip
* @param new_ip
* @param parent
*/
ChangeTitleBlockCommand::ChangeTitleBlockCommand(
Diagram *d,
const TitleBlockProperties &old_ip,
const TitleBlockProperties &new_ip,
QUndoCommand *parent
) :
QUndoCommand(QObject::tr("modifier le cartouche", "undo caption"), parent),
diagram(d),
old_titleblock(old_ip),
new_titleblock(new_ip)
{}
ChangeTitleBlockCommand::~ChangeTitleBlockCommand() {}
void ChangeTitleBlockCommand::undo()
{
diagram -> showMe();
diagram -> border_and_titleblock.importTitleBlock(old_titleblock);
diagram -> invalidate(diagram -> border_and_titleblock.borderAndTitleBlockRect());
}
void ChangeTitleBlockCommand::redo()
{
diagram -> showMe();
diagram -> border_and_titleblock.importTitleBlock(new_titleblock);
diagram -> invalidate(diagram -> border_and_titleblock.borderAndTitleBlockRect());
}

View File

@@ -0,0 +1,48 @@
/*
Copyright 2006-2018 The QElectroTech Team
This file is part of QElectroTech.
QElectroTech is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
QElectroTech is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef CHANGETITLEBLOCKCOMMAND_H
#define CHANGETITLEBLOCKCOMMAND_H
#include <QUndoCommand>
#include "titleblockproperties.h"
class Diagram;
/**
* @brief The ChangeTitleBlockCommand class
* This command changes the title block properties for a particular diagram.
*/
class ChangeTitleBlockCommand : public QUndoCommand
{
public:
ChangeTitleBlockCommand(Diagram *, const TitleBlockProperties &, const TitleBlockProperties &, QUndoCommand * = nullptr);
~ChangeTitleBlockCommand() override;
private:
ChangeTitleBlockCommand(const ChangeTitleBlockCommand &);
public:
void undo() override;
void redo() override;
private:
Diagram *diagram;
TitleBlockProperties old_titleblock;
TitleBlockProperties new_titleblock;
};
#endif // CHANGETITLEBLOCKCOMMAND_H