diff --git a/sources/configpages.cpp b/sources/configpages.cpp index 5c93fd155..cb541dd1c 100644 --- a/sources/configpages.cpp +++ b/sources/configpages.cpp @@ -24,42 +24,38 @@ #include "bordertitleblock.h" #include "qeticons.h" #include "exportpropertieswidget.h" +#include "ui/reportpropertiewidget.h" /** Constructeur @param parent QWidget parent */ NewDiagramPage::NewDiagramPage(QWidget *parent) : ConfigPage(parent) { - // dimensions par defaut d'un schema - bpw = new BorderPropertiesWidget(QETDiagramEditor::defaultBorderProperties()); - - // proprietes par defaut d'un cartouche + // main tab widget + QTabWidget *tab_widget = new QTabWidget(this); + + // dimensions by default for diagram + bpw = new BorderPropertiesWidget(QETDiagramEditor::defaultBorderProperties()); + // default titleblock properties ipw = new TitleBlockPropertiesWidget(QETDiagramEditor::defaultTitleBlockProperties(), true); + QWidget *diagram_widget = new QWidget(); + QVBoxLayout *diagram_layout = new QVBoxLayout(diagram_widget); + diagram_layout -> addWidget(bpw); + diagram_layout -> addWidget(ipw); + tab_widget->addTab(diagram_widget, tr("Sch\351ma")); - // proprietes par defaut des conducteurs + // default conductor properties cpw = new ConductorPropertiesWidget(QETDiagramEditor::defaultConductorProperties()); cpw -> setContentsMargins(0, 0, 0, 0); + tab_widget->addTab(cpw, tr("Conducteur")); + + // default propertie of report label + rpw = new ReportPropertieWidget(QETDiagramEditor::defaultReportProperties()); + tab_widget->addTab(rpw, ("Report de folio")); QVBoxLayout *vlayout1 = new QVBoxLayout(); - - QLabel *title = new QLabel(this -> title()); - vlayout1 -> addWidget(title); - - QFrame *horiz_line = new QFrame(); - horiz_line -> setFrameShape(QFrame::HLine); - vlayout1 -> addWidget(horiz_line); - - QHBoxLayout *hlayout1 = new QHBoxLayout(); - QVBoxLayout *vlayout2 = new QVBoxLayout(); - - vlayout2 -> addWidget(bpw); - vlayout2 -> addWidget(ipw); - vlayout2 -> setSpacing(5); - hlayout1 -> addLayout(vlayout2); - hlayout1 -> addWidget(cpw); - vlayout1 -> addLayout(hlayout1); - vlayout1 -> addStretch(1); - hlayout1 -> setAlignment(cpw, Qt::AlignTop); + vlayout1->addWidget(tab_widget); + setLayout(vlayout1); } @@ -81,6 +77,9 @@ void NewDiagramPage::applyConf() { // proprietes par defaut des conducteurs cpw -> conductorProperties().toSettings(settings, "diagrameditor/defaultconductor"); + + // default report propertie + rpw->toSettings(settings, "diagrameditor/defaultreport"); } /// @return l'icone de cette page diff --git a/sources/configpages.h b/sources/configpages.h index 0b61f0100..004ef3960 100644 --- a/sources/configpages.h +++ b/sources/configpages.h @@ -23,6 +23,7 @@ class BorderPropertiesWidget; class ConductorPropertiesWidget; class TitleBlockPropertiesWidget; class ExportPropertiesWidget; +class ReportPropertieWidget; /** This configuration page enables users to define the properties of new @@ -44,10 +45,11 @@ class NewDiagramPage : public ConfigPage { QIcon icon() const; // attributes - public: + private: BorderPropertiesWidget *bpw; ///< Widget to edit default diagram dimensions TitleBlockPropertiesWidget *ipw; ///< Widget to edit default title block properties ConductorPropertiesWidget *cpw; ///< Widget to edit default conductor properties + ReportPropertieWidget *rpw;///< Widget to edit default report label }; /** diff --git a/sources/diagram.cpp b/sources/diagram.cpp index 9528abeb3..9e9a6e522 100644 --- a/sources/diagram.cpp +++ b/sources/diagram.cpp @@ -531,7 +531,7 @@ bool Diagram::fromXml(QDomElement &document, QPointF position, bool consider_inf if (type_id.startsWith("embed://")) element_location.setProject(project_); int state = 0; - Element *nvel_elmt = ElementFactory::Instance()->createElement(element_location, 0, 0, &state); + Element *nvel_elmt = ElementFactory::Instance()->createElement(element_location, 0, this, &state); if (state) { QString debug_message = QString("Diagram::fromXml() : Le chargement de la description de l'element %1 a echoue avec le code d'erreur %2").arg(element_location.path()).arg(state); qDebug() << qPrintable(debug_message); @@ -1162,6 +1162,7 @@ QETProject *Diagram::project() const { */ void Diagram::setProject(QETProject *project) { project_ = project; + connect(project_, SIGNAL(reportPropertiesChanged(QString)), this, SIGNAL(reportPropertiesChanged(QString))); } /** diff --git a/sources/diagram.h b/sources/diagram.h index 26bb3df0e..69f056fd0 100644 --- a/sources/diagram.h +++ b/sources/diagram.h @@ -102,6 +102,7 @@ class Diagram : public QGraphicsScene { virtual void keyReleaseEvent(QKeyEvent *); public: + QString defaultReportProperties () const {return project_->defaultReportProperties();} static bool clipboardMayContainDiagram(); bool setNumerotation (NumerotationType, NumerotationContext); NumerotationContext getNumerotation (NumerotationType) const; @@ -208,6 +209,7 @@ class Diagram : public QGraphicsScene { void findElementRequired(const ElementsLocation &); /// Signal emitted when users wish to edit an element from the diagram void editElementRequired(const ElementsLocation &); + void reportPropertiesChanged(QString); }; Q_DECLARE_METATYPE(Diagram *) diff --git a/sources/diagramposition.h b/sources/diagramposition.h index cba8bfac8..c3ba762ad 100644 --- a/sources/diagramposition.h +++ b/sources/diagramposition.h @@ -38,6 +38,8 @@ class DiagramPosition { void setPosition(const QPointF &); QString toString(); bool isOutOfBounds() const; + unsigned int number()const {return number_;} + QString letter()const {return letter_;} // attributes private: diff --git a/sources/diagramview.cpp b/sources/diagramview.cpp index 554e9dab5..cc690462a 100644 --- a/sources/diagramview.cpp +++ b/sources/diagramview.cpp @@ -849,7 +849,7 @@ bool DiagramView::mustIntegrateTitleBlockTemplate(const TitleBlockTemplateLocati bool DiagramView::addElementAtPos(const ElementsLocation &location, const QPoint &pos) { // construit une instance de l'element correspondant a l'emplacement int state; - Element *el = ElementFactory::Instance()->createElement(location, 0, 0, &state); + Element *el = ElementFactory::Instance()->createElement(location, 0, diagram(), &state); if (state) { delete el; return(false); diff --git a/sources/projectconfigpages.cpp b/sources/projectconfigpages.cpp index 110f92f41..377f353d1 100644 --- a/sources/projectconfigpages.cpp +++ b/sources/projectconfigpages.cpp @@ -6,6 +6,7 @@ #include "diagramcontextwidget.h" #include "titleblockpropertieswidget.h" #include +#include "ui/reportpropertiewidget.h" /** Constructor @@ -236,6 +237,12 @@ void ProjectNewDiagramConfigPage::applyProjectConf() { project_ -> setDefaultConductorProperties(conductor_ -> conductorProperties()); modified_project = true; } + + QString new_report_prop = report_->ReportProperties(); + if (project_->defaultReportProperties() != new_report_prop) { + project_->setDefaultReportProperties(new_report_prop); + modified_project = true; + } if (modified_project) { project_ -> setModified(modified_project); @@ -256,29 +263,29 @@ void ProjectNewDiagramConfigPage::initWidgets() { titleblock_ = new TitleBlockPropertiesWidget(TitleBlockProperties(), true); conductor_ = new ConductorPropertiesWidget(); conductor_ -> setContentsMargins(0, 0, 0, 0); + report_ = new ReportPropertieWidget("_"); } /** Initialize the layout of this page. */ void ProjectNewDiagramConfigPage::initLayout() { - // put border properties above title block properties - QVBoxLayout *vlayout2 = new QVBoxLayout(); - vlayout2 -> addWidget(border_); - vlayout2 -> addWidget(titleblock_); - vlayout2 -> setSpacing(5); - - // add conductor properties on the right - QHBoxLayout *hlayout1 = new QHBoxLayout(); - hlayout1 -> addLayout(vlayout2); - hlayout1 -> addWidget(conductor_); - hlayout1 -> setAlignment(conductor_, Qt::AlignTop); - - // add the informative label above previous widgets + // main tab widget + QTabWidget *tab_widget = new QTabWidget(this); + + QWidget *diagram_widget = new QWidget(); + QVBoxLayout *diagram_layout = new QVBoxLayout(diagram_widget); + diagram_layout -> addWidget(border_); + diagram_layout -> addWidget(titleblock_); + tab_widget->addTab(diagram_widget, tr("Sch\351ma")); + + tab_widget->addTab(conductor_, tr("Conducteur")); + + tab_widget->addTab(report_, ("Report de folio")); + QVBoxLayout *vlayout1 = new QVBoxLayout(); - vlayout1 -> addWidget(informative_label_); - vlayout1 -> addLayout(hlayout1); - vlayout1 -> addStretch(); + vlayout1->addWidget(tab_widget); + setLayout(vlayout1); } @@ -289,6 +296,7 @@ void ProjectNewDiagramConfigPage::readValuesFromProject() { border_ -> setEditedBorder(project_ -> defaultBorderProperties()); conductor_ -> setConductorProperties(project_ -> defaultConductorProperties()); titleblock_ -> setTitleBlockProperties(project_ -> defaultTitleBlockProperties()); + report_->setReportProperties(project_->defaultReportProperties()); } /** diff --git a/sources/projectconfigpages.h b/sources/projectconfigpages.h index d4740a2c1..3c0283a8c 100644 --- a/sources/projectconfigpages.h +++ b/sources/projectconfigpages.h @@ -8,6 +8,7 @@ class BorderPropertiesWidget; class TitleBlockPropertiesWidget; class ConductorPropertiesWidget; class DiagramContextWidget; +class ReportPropertieWidget; /** This class, derived from ConfigPage, aims at providing the basic skeleton @@ -125,6 +126,7 @@ class ProjectNewDiagramConfigPage : public ProjectConfigPage { BorderPropertiesWidget *border_; TitleBlockPropertiesWidget *titleblock_; ConductorPropertiesWidget *conductor_; + ReportPropertieWidget *report_; }; #endif diff --git a/sources/qetdiagrameditor.cpp b/sources/qetdiagrameditor.cpp index 39633c51a..1613e7ada 100644 --- a/sources/qetdiagrameditor.cpp +++ b/sources/qetdiagrameditor.cpp @@ -644,6 +644,7 @@ bool QETDiagramEditor::newProject() { new_project -> setDefaultBorderProperties(defaultBorderProperties()); new_project -> setDefaultConductorProperties(defaultConductorProperties()); new_project -> setDefaultTitleBlockProperties(defaultTitleBlockProperties()); + new_project -> setDefaultReportProperties(defaultReportProperties()); // ajoute un schema au projet new_project -> addNewDiagram(); @@ -1301,7 +1302,7 @@ void QETDiagramEditor::addProjectView(ProjectView *project_view) { // gere la fermeture du projet connect(project_view, SIGNAL(projectClosed(ProjectView*)), this, SLOT(projectWasClosed(ProjectView *))); - + // gere l'ajout et le retrait de schema du projet connect(project_view, SIGNAL(diagramAdded(DiagramView *)), this, SLOT(diagramWasAdded(DiagramView *))); connect(project_view, SIGNAL(diagramAdded(DiagramView *)), this, SLOT(slot_updateActions())); @@ -1331,6 +1332,7 @@ void QETDiagramEditor::addProjectView(ProjectView *project_view) { // affiche la fenetre if (maximise) project_view -> showMaximized(); else project_view -> show(); + slot_updateActions(); } @@ -1979,3 +1981,12 @@ ExportProperties QETDiagramEditor::defaultPrintProperties() { return(def); } + +/** + * @brief QETDiagramEditor::defaultReportProperties + * @return default folio report properties + */ +QString QETDiagramEditor::defaultReportProperties() { + QSettings &settings= QETApp::settings(); + return(settings.value("diagrameditor/defaultreportlabel", "%f-%l%c").toString()); +} diff --git a/sources/qetdiagrameditor.h b/sources/qetdiagrameditor.h index 7f43f50da..af3678dd9 100644 --- a/sources/qetdiagrameditor.h +++ b/sources/qetdiagrameditor.h @@ -62,6 +62,7 @@ class QETDiagramEditor : public QETMainWindow { static ConductorProperties defaultConductorProperties(); static ExportProperties defaultExportProperties(); static ExportProperties defaultPrintProperties(); + static QString defaultReportProperties(); protected: void actions(); diff --git a/sources/qetgraphicsitem/reportelement.cpp b/sources/qetgraphicsitem/reportelement.cpp index f43dfc63c..283b71f58 100644 --- a/sources/qetgraphicsitem/reportelement.cpp +++ b/sources/qetgraphicsitem/reportelement.cpp @@ -26,6 +26,10 @@ ReportElement::ReportElement(const ElementsLocation &location, QString link_type texts().at(0)->setNoEditable(); link_type == "next_report"? link_type_=NextReport : link_type_=PreviousReport; link_type == "next_report"? inverse_report=PreviousReport : inverse_report=NextReport; + if (s) { + label_ = s->defaultReportProperties(); + connect(s, SIGNAL(reportPropertiesChanged(QString)), this, SLOT(setLabel(QString))); + } } ReportElement::~ReportElement() { @@ -97,6 +101,16 @@ int ReportElement::linkType() const { return link_type_; } +/** + * @brief ReportElement::setLabel + * Set new label and call updatelabel + * @param label new label + */ +void ReportElement::setLabel(QString label) { + label_ = label; + updateLabel(); +} + /** * @brief ReportElement::updateLabel * Update the displayed label. @@ -105,8 +119,11 @@ int ReportElement::linkType() const { void ReportElement::updateLabel() { if (!connected_elements.isEmpty()){ Element *elmt = connected_elements.at(0); - texts().at(0)->setPlainText(QString ("%1-%2").arg(elmt->diagram()->folioIndex() + 1) - .arg(elmt->diagram() -> convertPosition(elmt -> scenePos()).toString())); + QString label = label_; + label.replace("%f", QString::number(elmt->diagram()->folioIndex()+1)); + label.replace("%c", QString::number(elmt->diagram() -> convertPosition(elmt -> scenePos()).number())); + label.replace("%l", elmt->diagram() -> convertPosition(elmt -> scenePos()).letter()); + texts().at(0)->setPlainText(label); } else { texts().at(0)->setPlainText("_"); } diff --git a/sources/qetgraphicsitem/reportelement.h b/sources/qetgraphicsitem/reportelement.h index 7fc78006a..e2401c068 100644 --- a/sources/qetgraphicsitem/reportelement.h +++ b/sources/qetgraphicsitem/reportelement.h @@ -40,10 +40,12 @@ class ReportElement : public CustomElement { private: int link_type_; int inverse_report; + QString label_; signals: private slots: + void setLabel (QString label); void updateLabel(); }; diff --git a/sources/qetproject.cpp b/sources/qetproject.cpp index 9d3fb2453..9fbdd1c5e 100644 --- a/sources/qetproject.cpp +++ b/sources/qetproject.cpp @@ -421,6 +421,15 @@ void QETProject::setDefaultConductorProperties(const ConductorProperties &conduc default_conductor_properties_ = conductor; } +QString QETProject::defaultReportProperties() const { + return default_report_properties_; +} + +void QETProject::setDefaultReportProperties(const QString &properties) { + default_report_properties_ = properties; + emit reportPropertiesChanged(properties); +} + /** @return un document XML representant le projet */ @@ -1074,9 +1083,10 @@ void QETProject::readDefaultPropertiesXml() { default_border_properties_ = QETDiagramEditor::defaultBorderProperties(); default_titleblock_properties_ = QETDiagramEditor::defaultTitleBlockProperties(); default_conductor_properties_ = QETDiagramEditor::defaultConductorProperties(); + default_report_properties_ = QETDiagramEditor::defaultReportProperties(); // lecture des valeurs indiquees dans le projet - QDomElement border_elmt, titleblock_elmt, conductors_elmt; + QDomElement border_elmt, titleblock_elmt, conductors_elmt, report_elmt; // recherche des elements XML concernant les dimensions, le cartouche et les conducteurs for (QDomNode child = newdiagrams_elmt.firstChild() ; !child.isNull() ; child = child.nextSibling()) { @@ -1088,13 +1098,16 @@ void QETProject::readDefaultPropertiesXml() { titleblock_elmt = child_elmt; } else if (child_elmt.tagName() == "conductors") { conductors_elmt = child_elmt; + } else if (child_elmt.tagName() == "report") { + report_elmt = child_elmt; } } - // dimensions, cartouche, et conducteurs + // size, titleblock, conductor, report if (!border_elmt.isNull()) default_border_properties_.fromXml(border_elmt); if (!titleblock_elmt.isNull()) default_titleblock_properties_.fromXml(titleblock_elmt); if (!conductors_elmt.isNull()) default_conductor_properties_.fromXml(conductors_elmt); + if (!report_elmt.isNull()) setDefaultReportProperties(report_elmt.attribute("label")); } /** @@ -1122,6 +1135,11 @@ void QETProject::writeDefaultPropertiesXml(QDomElement &xml_element) { QDomElement conductor_elmt = xml_document.createElement("conductors"); default_conductor_properties_.toXml(conductor_elmt); xml_element.appendChild(conductor_elmt); + + // export default report properties + QDomElement report_elmt = xml_document.createElement("report"); + report_elmt.setAttribute("label", defaultReportProperties()); + xml_element.appendChild(report_elmt); } /** diff --git a/sources/qetproject.h b/sources/qetproject.h index e8359dd93..815bb1139 100644 --- a/sources/qetproject.h +++ b/sources/qetproject.h @@ -95,6 +95,8 @@ class QETProject : public QObject { void setDefaultTitleBlockProperties(const TitleBlockProperties &); ConductorProperties defaultConductorProperties() const; void setDefaultConductorProperties(const ConductorProperties &); + QString defaultReportProperties() const; + void setDefaultReportProperties (const QString &properties); QDomDocument toXml(); bool close(); QETResult write(); @@ -138,6 +140,7 @@ class QETProject : public QObject { void elementIntegrated(QETProject *, const ElementsLocation &); void diagramUsedTemplate(TitleBlockTemplatesCollection *, const QString &); void readOnlyChanged(QETProject *, bool); + void reportPropertiesChanged(QString); private slots: void updateDiagramsFolioData(); @@ -191,6 +194,8 @@ class QETProject : public QObject { ConductorProperties default_conductor_properties_; /// Default title block properties for new diagrams created within the project TitleBlockProperties default_titleblock_properties_; + /// Default report properties + QString default_report_properties_; /// Embedded title block templates collection TitleBlockTemplatesProjectCollection titleblocks_; /// project-wide variables that will be made available to child diagrams diff --git a/sources/ui/folioreportproperties.cpp b/sources/ui/folioreportproperties.cpp index 51a79ba4d..ae03ca5e3 100644 --- a/sources/ui/folioreportproperties.cpp +++ b/sources/ui/folioreportproperties.cpp @@ -89,7 +89,7 @@ void FolioReportProperties::buildRadioList() { void FolioReportProperties::buildUnlinkButton() { unlink_widget = new QWidget(this); QHBoxLayout *unlink_layout = new QHBoxLayout(unlink_widget); - QLabel *lb = new QLabel(tr("Ce report est d\351j\340 lier."), unlink_widget); + QLabel *lb = new QLabel(tr("Ce report est d\351j\340 li\351."), unlink_widget); QPushButton *pb = new QPushButton(tr("D\351lier"), unlink_widget); connect(pb, SIGNAL(clicked()), this, SLOT(unlinkClicked())); unlink_layout->addWidget(lb); diff --git a/sources/ui/reportpropertiewidget.cpp b/sources/ui/reportpropertiewidget.cpp new file mode 100644 index 000000000..e5d0aac76 --- /dev/null +++ b/sources/ui/reportpropertiewidget.cpp @@ -0,0 +1,27 @@ +#include "reportpropertiewidget.h" +#include "ui_reportpropertiewidget.h" + +ReportPropertieWidget::ReportPropertieWidget(QString value, QWidget *parent) : + QWidget(parent), + ui(new Ui::ReportPropertieWidget) +{ + ui->setupUi(this); + ui->line_edit->setText(value); +} + +ReportPropertieWidget::~ReportPropertieWidget() +{ + delete ui; +} + +void ReportPropertieWidget::toSettings(QSettings &settings, const QString &prefix) { + settings.setValue(prefix + "label", ui->line_edit->text()); +} + +void ReportPropertieWidget::setReportProperties(QString label) { + ui->line_edit->setText(label); +} + +QString ReportPropertieWidget::ReportProperties() const { + return ui->line_edit->text(); +} diff --git a/sources/ui/reportpropertiewidget.h b/sources/ui/reportpropertiewidget.h new file mode 100644 index 000000000..0a9aa0b86 --- /dev/null +++ b/sources/ui/reportpropertiewidget.h @@ -0,0 +1,27 @@ +#ifndef REPORTPROPERTIEWIDGET_H +#define REPORTPROPERTIEWIDGET_H + +#include +#include + + +namespace Ui { + class ReportPropertieWidget; +} + +class ReportPropertieWidget : public QWidget +{ + Q_OBJECT + + public: + explicit ReportPropertieWidget(QString value, QWidget *parent = 0); + ~ReportPropertieWidget(); + void toSettings (QSettings &settings, const QString &prefix); + void setReportProperties (QString label); + QString ReportProperties () const; + + private: + Ui::ReportPropertieWidget *ui; +}; + +#endif // REPORTPROPERTIEWIDGET_H diff --git a/sources/ui/reportpropertiewidget.ui b/sources/ui/reportpropertiewidget.ui new file mode 100644 index 000000000..55d1f09b9 --- /dev/null +++ b/sources/ui/reportpropertiewidget.ui @@ -0,0 +1,71 @@ + + + ReportPropertieWidget + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + + Label de report de folio + + + + + + + + + + + + + + + Vous pouvez définir un label personnalisé pour les reports de folio. +Créer votre propre texte en vous aidant des variables suivantes : +%f : le numéro de folio +%l : le numéro de ligne +%c : le numéro de colonne + + + false + + + true + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + +