mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-09-13 20:23:04 +02:00
-Cette ligne, et les suivantes ci-dessous, seront ignorées-- M sources/aboutqet.cpp M sources/bordertitleblock.cpp M sources/conductorproperties.h M sources/configdialog.cpp M sources/configpages.cpp M sources/configpages.h M sources/createdxf.h M sources/diagram.cpp M sources/diagram.h M sources/diagramcommands.cpp M sources/diagramcommands.h M sources/diagramprintdialog.cpp M sources/diagramprintdialog.h M sources/diagramschooser.cpp M sources/diagramschooser.h M sources/diagramview.cpp M sources/diagramview.h M sources/dvevent/dveventaddimage.cpp M sources/dvevent/dveventaddshape.cpp M sources/editor/arceditor.cpp M sources/editor/arceditor.h M sources/editor/editorcommands.cpp M sources/editor/editorcommands.h M sources/editor/elementitemeditor.h M sources/editor/elementprimitivedecorator.cpp M sources/editor/elementscene.cpp M sources/editor/elementscene.h M sources/editor/elementview.cpp M sources/editor/ellipseeditor.cpp M sources/editor/ellipseeditor.h M sources/editor/esevent/eseventaddtext.cpp M sources/editor/esevent/eseventaddtextfield.cpp M sources/editor/esevent/eseventinterface.cpp M sources/editor/graphicspart/customelementpart.h M sources/editor/graphicspart/parttext.cpp M sources/editor/graphicspart/parttext.h M sources/editor/graphicspart/parttextfield.cpp M sources/editor/graphicspart/parttextfield.h M sources/editor/lineeditor.cpp M sources/editor/lineeditor.h M sources/editor/polygoneditor.cpp M sources/editor/qetelementeditor.cpp M sources/editor/qetelementeditor.h M sources/editor/rectangleeditor.cpp M sources/editor/rectangleeditor.h M sources/editor/styleeditor.cpp M sources/editor/styleeditor.h M sources/editor/terminaleditor.cpp M sources/editor/terminaleditor.h M sources/editor/texteditor.cpp M sources/editor/texteditor.h M sources/editor/textfieldeditor.cpp M sources/editor/textfieldeditor.h M sources/editor/ui/elementpropertieseditorwidget.cpp M sources/elementdefinition.cpp M sources/elementdeleter.cpp M sources/elementdeleter.h M sources/elementdialog.cpp M sources/elementscategorieslist.h M sources/elementscategorieswidget.cpp M sources/elementscategorieswidget.h M sources/elementscategory.cpp M sources/elementscategorydeleter.cpp M sources/elementscategorydeleter.h M sources/elementscategoryeditor.cpp M sources/elementscategoryeditor.h M sources/elementscollection.cpp M sources/elementscollectioncache.cpp M sources/elementspanel.cpp M sources/elementspanel.h M sources/elementspanelwidget.cpp M sources/elementspanelwidget.h M sources/elementtextsmover.h M sources/exportdialog.cpp M sources/exportdialog.h M sources/exportproperties.cpp M sources/exportpropertieswidget.cpp M sources/exportpropertieswidget.h M sources/genericpanel.cpp M sources/integrationmoveelementshandler.cpp M sources/integrationmoveelementshandler.h M sources/interactivemoveelementshandler.cpp M sources/nameslistwidget.cpp M sources/nameslistwidget.h M sources/newelementwizard.cpp M sources/newelementwizard.h M sources/nomenclature.cpp M sources/nomenclature.h M sources/projectconfigpages.cpp M sources/projectview.cpp M sources/projectview.h M sources/qet.cpp M sources/qetapp.cpp M sources/qetapp.h M sources/qetdiagrameditor.cpp M sources/qetdiagrameditor.h M sources/qetgraphicsitem/conductor.cpp M sources/qetgraphicsitem/conductortextitem.cpp M sources/qetgraphicsitem/customelement.cpp M sources/qetgraphicsitem/diagramimageitem.cpp M sources/qetgraphicsitem/diagramtextitem.cpp M sources/qetgraphicsitem/diagramtextitem.h M sources/qetgraphicsitem/element.cpp M sources/qetgraphicsitem/ghostelement.cpp M sources/qetgraphicsitem/qetshapeitem.cpp M sources/qetgraphicsitem/terminal.cpp M sources/qetgraphicsitem/terminal.h M sources/qeticons.cpp M sources/qeticons.h M sources/qetmainwindow.cpp M sources/qetmessagebox.cpp M sources/qetmessagebox.h M sources/qetprintpreviewdialog.cpp M sources/qetprintpreviewdialog.h M sources/qetproject.cpp M sources/qetsingleapplication.cpp M sources/qettabbar.h M sources/qfilenameedit.cpp M sources/qtextorientationspinboxwidget.cpp M sources/qtextorientationspinboxwidget.h M sources/qtextorientationwidget.cpp M sources/qtextorientationwidget.h M sources/richtext/richtexteditor.cpp M sources/richtext/richtexteditor_p.h M sources/richtext/ui_addlinkdialog.h M sources/titleblock/dimensionwidget.h M sources/titleblock/gridlayoutanimation.h M sources/titleblock/helpercell.h M sources/titleblock/integrationmovetemplateshandler.cpp M sources/titleblock/integrationmovetemplateshandler.h M sources/titleblock/qettemplateeditor.cpp M sources/titleblock/qettemplateeditor.h M sources/titleblock/templatecellsset.h M sources/titleblock/templatecellwidget.cpp M sources/titleblock/templatecellwidget.h M sources/titleblock/templatecommands.cpp M sources/titleblock/templatedeleter.cpp M sources/titleblock/templatedeleter.h M sources/titleblock/templatelocationchooser.cpp M sources/titleblock/templatelocationchooser.h M sources/titleblock/templatelocationsaver.cpp M sources/titleblock/templatelocationsaver.h M sources/titleblock/templatelogomanager.cpp M sources/titleblock/templatelogomanager.h M sources/titleblock/templateview.cpp M sources/titleblock/templatevisualcell.h M sources/titleblockcell.cpp M sources/titleblocktemplate.cpp M sources/treecoloranimation.h M sources/ui/conductorpropertieswidget.cpp M sources/ui/diagrampropertiesdialog.cpp M sources/ui/diagramselection.cpp M sources/ui/dialogautonum.cpp M sources/ui/dialogwaiting.cpp M sources/ui/elementpropertieswidget.cpp M sources/ui/elementselectorwidget.cpp M sources/ui/linksingleelementwidget.cpp M sources/ui/masterpropertieswidget.cpp M sources/ui/potentialtextsdialog.cpp M sources/ui/projectpropertiesdialog.cpp M sources/ui/selectautonumw.cpp M sources/ui/titleblockpropertieswidget.cpp M sources/ui/xrefpropertieswidget.cpp M sources/undocommand/changeelementinformationcommand.cpp git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@3783 bfdf4180-ca20-0410-9c96-a3a8aa849046
378 lines
12 KiB
C++
378 lines
12 KiB
C++
/*
|
|
Copyright 2006-2015 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 "elementdialog.h"
|
|
#include <QtWidgets>
|
|
#include "qetapp.h"
|
|
#include "elementscategorieslist.h"
|
|
#include "elementscollectionitem.h"
|
|
#include "qfilenameedit.h"
|
|
#include "qetmessagebox.h"
|
|
|
|
/**
|
|
Constructeur par defaut.
|
|
Construit un dialogue permettant d'ouvrir un element
|
|
@param mode Mode du dialogue
|
|
@see ElementDialog::Mode
|
|
@param parentWidget QWidget parent
|
|
@param parent QObject parent
|
|
|
|
*/
|
|
ElementDialog::ElementDialog(uint mode, QWidget *parentWidget, QObject *parent) :
|
|
QObject(parent),
|
|
mode_(mode),
|
|
buttons_(0),
|
|
list_(0),
|
|
textfield_(0)
|
|
{
|
|
dialog_ = new QDialog(parentWidget);
|
|
dialog_ -> setWindowModality(Qt::WindowModal);
|
|
#ifdef Q_OS_MAC
|
|
dialog_ -> setWindowFlags(Qt::Sheet);
|
|
#endif
|
|
buttons_ = new QDialogButtonBox();
|
|
|
|
// types selectionnables dans la liste
|
|
bool display_elements = (mode_ == OpenElement || mode_ == SaveElement);
|
|
int selectables = 0;
|
|
switch(mode_) {
|
|
case OpenElement: selectables = QET::Element; break;
|
|
case SaveElement: selectables = QET::ElementsCollectionItem; break;
|
|
case OpenCategory: selectables = QET::ElementsContainer; break;
|
|
case SaveCategory: selectables = QET::ElementsContainer; break;
|
|
}
|
|
list_ = new ElementsCategoriesList(display_elements, selectables);
|
|
connect(list_, SIGNAL(locationChanged(const ElementsLocation &)), this, SLOT(locationChanged(const ElementsLocation &)));
|
|
|
|
// titre et label
|
|
if (!mode) {
|
|
title_ = tr("Ouvrir un élément", "dialog title");
|
|
label_ = tr("Choisissez l'élément que vous souhaitez ouvrir.", "dialog content");
|
|
} else if (mode == 1) {
|
|
title_ = tr("Enregistrer un élément", "dialog title");
|
|
label_ = tr("Choisissez l'élément dans lequel vous souhaitez enregistrer votre définition.", "dialog content");
|
|
} else if (mode == 2) {
|
|
title_ = tr("Ouvrir une catégorie", "dialog title");
|
|
label_ = tr("Choisissez une catégorie.", "dialog content");
|
|
} else {
|
|
title_ = tr("Enregistrer une catégorie", "dialog title");
|
|
label_ = tr("Choisissez une catégorie.", "dialog content");
|
|
}
|
|
|
|
// mode ouverture / enregistrement
|
|
if (mode_ == SaveCategory || mode_ == SaveElement) {
|
|
buttons_ -> setStandardButtons(QDialogButtonBox::Save | QDialogButtonBox::Cancel);
|
|
textfield_ = new QFileNameEdit();
|
|
connect(textfield_, SIGNAL(textChanged(const QString &)), this, SLOT(textFieldChanged(const QString &)));
|
|
} else {
|
|
buttons_ -> setStandardButtons(QDialogButtonBox::Open | QDialogButtonBox::Cancel);
|
|
}
|
|
|
|
// connexions boutons -> dialogue
|
|
connect(buttons_, SIGNAL(accepted()), this, SLOT(checkDialog()));
|
|
connect(buttons_, SIGNAL(rejected()), dialog_, SLOT(reject()));
|
|
|
|
// connexions dialogue -> classe
|
|
connect(dialog_, SIGNAL(accepted()), this, SLOT(dialogAccepted()));
|
|
connect(dialog_, SIGNAL(rejected()), this, SLOT(dialogRejected()));
|
|
|
|
makeInterface();
|
|
}
|
|
|
|
/**
|
|
Destructeur
|
|
*/
|
|
ElementDialog::~ElementDialog() {
|
|
dialog_ -> setParent(0);
|
|
delete dialog_;
|
|
}
|
|
|
|
/**
|
|
Affiche un dialogue permettant a l'utilisateur de selectionner une categorie existant deja
|
|
@param parentWidget QWidget parent
|
|
@return le chemin virtuel de cette categorie
|
|
*/
|
|
ElementsLocation ElementDialog::getExistingCategoryLocation(QWidget *parentWidget) {
|
|
return(ElementDialog::execConfiguredDialog(ElementDialog::OpenCategory, parentWidget));
|
|
}
|
|
|
|
/**
|
|
Affiche un dialogue permettant a l'utilisateur de selectionner une nouvelle categorie
|
|
@param parentWidget QWidget parent
|
|
@return le chemin virtuel de cette categorie
|
|
*/
|
|
ElementsLocation ElementDialog::getNewCategoryLocation(QWidget *parentWidget) {
|
|
return(ElementDialog::execConfiguredDialog(ElementDialog::SaveCategory, parentWidget));
|
|
}
|
|
|
|
/**
|
|
Affiche un dialogue permettant a l'utilisateur de selectionner un element a ouvrir
|
|
@param parentWidget QWidget parent
|
|
@return le chemin virtuel de cet element
|
|
*/
|
|
ElementsLocation ElementDialog::getOpenElementLocation(QWidget *parentWidget) {
|
|
return(ElementDialog::execConfiguredDialog(ElementDialog::OpenElement, parentWidget));
|
|
}
|
|
|
|
/**
|
|
Affiche un dialogue permettant a l'utilisateur de selectionner un element (existant ou non)
|
|
qu'il souhaite enregistrer
|
|
@param parentWidget QWidget parent
|
|
@return le chemin virtuel de cet element
|
|
*/
|
|
ElementsLocation ElementDialog::getSaveElementLocation(QWidget *parentWidget) {
|
|
return(ElementDialog::execConfiguredDialog(ElementDialog::SaveElement, parentWidget));
|
|
}
|
|
|
|
/**
|
|
Lance un dialogue selon la configuration mode
|
|
@param mode Mode du dialogue
|
|
@param parentWidget QWidget parent
|
|
*/
|
|
ElementsLocation ElementDialog::execConfiguredDialog(int mode, QWidget *parentWidget) {
|
|
ElementDialog element_dialog(mode, parentWidget);
|
|
element_dialog.exec();
|
|
return(element_dialog.location());
|
|
}
|
|
|
|
/**
|
|
Assemble les widgets pour obtenir le dialogue final
|
|
*/
|
|
void ElementDialog::makeInterface() {
|
|
dialog_ -> setWindowTitle(title_);
|
|
|
|
// disposition verticale
|
|
QVBoxLayout *layout = new QVBoxLayout(dialog_);
|
|
layout -> addWidget(new QLabel(label_));
|
|
layout -> addWidget(list_);
|
|
if (textfield_) {
|
|
QHBoxLayout *filename_layout = new QHBoxLayout();
|
|
filename_layout -> addWidget(new QLabel(tr("Nom :")));
|
|
filename_layout -> addWidget(textfield_);
|
|
layout -> addLayout(filename_layout);
|
|
}
|
|
layout -> addWidget(buttons_);
|
|
}
|
|
|
|
/**
|
|
Execute le dialogue
|
|
@return QDialog::Accepted si le dialogue a ete accepte, false sinon
|
|
@see DialogCode
|
|
*/
|
|
int ElementDialog::exec() {
|
|
return(dialog_ -> exec());
|
|
}
|
|
|
|
/**
|
|
@return le chemin virtuel choisi via le dialogue
|
|
Si l'utilisateur n'a pas pu faire son choix, une chaine vide est retournee.
|
|
*/
|
|
ElementsLocation ElementDialog::location() const {
|
|
return(location_);
|
|
}
|
|
|
|
/**
|
|
gere le changement de chemin virtuel par l'utilisateur
|
|
@param new_loc le nouveau chemin virtuel choisi par l'utilisateur
|
|
*/
|
|
void ElementDialog::locationChanged(const ElementsLocation &new_loc) {
|
|
ElementsCollectionItem *item = QETApp::collectionItem(new_loc);
|
|
if (!item) return;
|
|
if (mode_ == OpenElement) {
|
|
buttons_ -> button(QDialogButtonBox::Open) -> setEnabled(item -> isElement());
|
|
} else if (mode_ == SaveElement) {
|
|
// si l'utilisateur choisit un element existant, on desactive le champ
|
|
textfield_ -> setEnabled(!item -> isElement());
|
|
// il faut soit un element selectionne soit une categorie et un nom
|
|
buttons_ -> button(QDialogButtonBox::Save) -> setEnabled(
|
|
((item -> isCategory() || item -> isCollection()) && !textfield_ -> text().isEmpty()) ||\
|
|
item -> isElement()
|
|
);
|
|
} else if (mode_ == OpenCategory) {
|
|
/// @todo
|
|
} else if (mode_ == SaveCategory) {
|
|
/// @todo
|
|
}
|
|
location_ = new_loc;
|
|
}
|
|
|
|
/**
|
|
Gere le changement de contenu dans le champ de texte
|
|
@param text Contenu du champ de texte
|
|
*/
|
|
void ElementDialog::textFieldChanged(const QString &text) {
|
|
ElementsCollectionItem *item = QETApp::collectionItem(list_ -> selectedLocation());
|
|
if (!item) return;
|
|
if (mode_ == SaveElement) {
|
|
// il faut soit un element selectionne soit une categorie et un nom
|
|
buttons_ -> button(QDialogButtonBox::Save) -> setEnabled(
|
|
((item -> isCategory() || item -> isCollection()) && !text.isEmpty()) ||\
|
|
item -> isElement()
|
|
);
|
|
} else if (mode_ == SaveCategory) {
|
|
// il faut forcement un nom pour la nouvelle categorie
|
|
buttons_ -> button(QDialogButtonBox::Save) -> setEnabled(!text.isEmpty());
|
|
}
|
|
}
|
|
|
|
/**
|
|
Verifie l'etat du dialogue au moment ou l'utilisateur le valide.
|
|
*/
|
|
void ElementDialog::checkDialog() {
|
|
// verifie si ce qui a ete selectionne par l'utilisateur correspond au mode du widget
|
|
if (mode_ == OpenElement) {
|
|
// l'utilisateur doit avoir choisi un element existant
|
|
|
|
// on verifie d'abord que l'utilisateur a choisi quelque chose
|
|
ElementsLocation location = list_ -> selectedLocation();
|
|
if (location.isNull()) {
|
|
QET::QetMessageBox::critical(
|
|
dialog_,
|
|
tr("Pas de sélection", "message box title"),
|
|
tr("Vous devez sélectionner un élément.", "message box content")
|
|
);
|
|
return;
|
|
}
|
|
|
|
// on verifie donc que la selection existe
|
|
ElementsCollectionItem *item = QETApp::collectionItem(location);
|
|
if (!item) {
|
|
QET::QetMessageBox::critical(
|
|
dialog_,
|
|
tr("Sélection inexistante", "message box title"),
|
|
tr("La sélection n'existe pas.", "message box content")
|
|
);
|
|
return;
|
|
}
|
|
|
|
// puis on verifie qu'il s'agit bien d'un element
|
|
if (!item -> isElement()) {
|
|
QET::QetMessageBox::critical(
|
|
dialog_,
|
|
tr("Sélection incorrecte", "message box title"),
|
|
tr("La sélection n'est pas un élément.", "message box content")
|
|
);
|
|
return;
|
|
}
|
|
|
|
location_ = location;
|
|
} else if (mode_ == SaveElement) {
|
|
/*
|
|
l'utilisateur doit avoir choisi soit :
|
|
-une categorie et un nom d'element
|
|
-un element existant
|
|
*/
|
|
ElementsLocation location = list_ -> selectedLocation();
|
|
if (location.isNull()) {
|
|
QET::QetMessageBox::critical(
|
|
dialog_,
|
|
tr("Pas de sélection", "message box title"),
|
|
tr("Vous devez sélectionner une catégorie ou un élément.", "message box content")
|
|
);
|
|
return;
|
|
}
|
|
|
|
// on verifie donc que la selection existe
|
|
ElementsCollectionItem *item = QETApp::collectionItem(location);
|
|
if (!item) {
|
|
QET::QetMessageBox::critical(
|
|
dialog_,
|
|
tr("Sélection inexistante", "message box title"),
|
|
tr("La sélection n'existe pas.", "message box content")
|
|
);
|
|
return;
|
|
}
|
|
|
|
ElementsLocation final_location(location);
|
|
if (!item -> isElement()) {
|
|
QString element_name(textfield_ -> text());
|
|
// si on a une categorie (ou une collection), il nous faut un nom d'element
|
|
if (element_name.isEmpty()) {
|
|
QET::QetMessageBox::critical(
|
|
dialog_,
|
|
tr("Nom manquant", "message box title"),
|
|
tr("Vous devez entrer un nom pour l'élément", "message box content")
|
|
);
|
|
return;
|
|
}
|
|
|
|
// ce nom d'element doit etre valide
|
|
if (QET::containsForbiddenCharacters(element_name)) {
|
|
QET::QetMessageBox::critical(
|
|
dialog_,
|
|
tr("Nom invalide", "message box title"),
|
|
QString(
|
|
tr(
|
|
"Vous ne pouvez pas utiliser les caractères "
|
|
"suivants dans le nom de l'élément : %1"
|
|
)
|
|
).arg(QET::forbiddenCharactersString(true))
|
|
);
|
|
return;
|
|
}
|
|
|
|
// ajoute .elmt a la fin du nom si necessaire
|
|
if (!element_name.endsWith(".elmt", Qt::CaseInsensitive)) {
|
|
element_name += ".elmt";
|
|
}
|
|
final_location.addToPath(element_name);
|
|
}
|
|
|
|
// determine si l'element n'existe pas deja
|
|
bool element_already_exists = (
|
|
item -> isElement() ||\
|
|
QETApp::collectionItem(final_location)
|
|
);
|
|
|
|
// si l'element existe, on demande confirmation pour son ecrasement
|
|
if (element_already_exists) {
|
|
QMessageBox::StandardButton answer = QET::QetMessageBox::question(
|
|
dialog_,
|
|
tr("Écraser l'élément ?", "message box title"),
|
|
tr("L'élément existe déjà. Voulez-vous l'écraser ?", "message box content"),
|
|
QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel,
|
|
QMessageBox::No
|
|
);
|
|
if (answer != QMessageBox::Yes) return;
|
|
}
|
|
|
|
location_ = final_location;
|
|
} else if (mode_ == OpenCategory) {
|
|
// l'utilisateur doit avoir choisi une categorie ou une collection existante
|
|
/// @todo effectuer les verifications necessaires
|
|
} else if (mode_ == SaveCategory) {
|
|
// l'utilisateur doit avoir choisi une categorie inexistante
|
|
/// @todo effectuer les verifications necessaires
|
|
}
|
|
|
|
// le dialogue est verifie, il peut etre accepte
|
|
dialog_ -> accept();
|
|
}
|
|
|
|
/**
|
|
Slot execute apres la validation du dialogue par l'utilisateur
|
|
*/
|
|
void ElementDialog::dialogAccepted() {
|
|
}
|
|
|
|
/**
|
|
Gere le rejet du dialogue par l'utilisateur.
|
|
*/
|
|
void ElementDialog::dialogRejected() {
|
|
location_ = ElementsLocation();
|
|
}
|