diff --git a/sources/elementsmover.cpp b/sources/elementsmover.cpp index 38e6ef0f6..d20995040 100644 --- a/sources/elementsmover.cpp +++ b/sources/elementsmover.cpp @@ -134,10 +134,12 @@ void ElementsMover::endMovement() current_movement_ ); - //There is only one element moved, we try auto connection of conductor; + //There is only one element moved, and project authorize auto conductor, + //we try auto connection of conductor; typedef DiagramContent dc; if (moved_content_.items(dc::TextFields | dc::Images | dc::Shapes).size() == 0 && - moved_content_.items(dc::Elements).size() == 1) + moved_content_.items(dc::Elements).size() == 1 && + diagram_ -> project() -> autoConductor()) { Element *elmt = moved_content_.elements.toList().first(); diff --git a/sources/qetdiagrameditor.cpp b/sources/qetdiagrameditor.cpp index 72616258f..0a0964330 100644 --- a/sources/qetdiagrameditor.cpp +++ b/sources/qetdiagrameditor.cpp @@ -188,6 +188,13 @@ void QETDiagramEditor::setUpActions() { copy = new QAction(QET::Icons::EditCopy, tr("Cop&ier"), this); paste = new QAction(QET::Icons::EditPaste, tr("C&oller"), this); conductor_reset = new QAction(QET::Icons::ConductorSettings, tr("R\351initialiser les conducteurs"), this); + + m_auto_conductor = new QAction (QET::Icons::ConductorSettings, tr("Cr\351ation automatique de conducteur(s)","Tool tip of auto conductor"), this); + m_auto_conductor -> setStatusTip (tr("Utiliser la cr\351ation automatique de conducteur(s) quand cela est possible", "Status tip of auto conductor")); + m_auto_conductor -> setCheckable (true); + m_auto_conductor -> setDisabled (true); + connect(m_auto_conductor, SIGNAL(triggered(bool)), this, SLOT(slot_autoConductor(bool))); + infos_diagram = new QAction(QET::Icons::DialogInformation, tr("Propri\351t\351s du sch\351ma"), this); prj_edit_prop = new QAction(QET::Icons::DialogInformation, tr("Propri\351t\351s du projet"), this); prj_add_diagram = new QAction(QET::Icons::DiagramAdd, tr("Ajouter un sch\351ma"), this); @@ -199,10 +206,10 @@ void QETDiagramEditor::setUpActions() { windowed_view_mode= new QAction( tr("en utilisant des fen\352tres"), this); mode_selection = new QAction(QET::Icons::PartSelect, tr("Mode Selection"), this); mode_visualise = new QAction(QET::Icons::ViewMove, tr("Mode Visualisation"), this); - tile_window = new QAction( tr("&Mosa\357que"), this); - cascade_window = new QAction( tr("&Cascade"), this); - next_window = new QAction( tr("Projet suivant"), this); - prev_window = new QAction( tr("Projet pr\351c\351dent"), this); + tile_window = new QAction( tr("&Mosa\357que"), this); + cascade_window = new QAction( tr("&Cascade"), this); + next_window = new QAction( tr("Projet suivant"), this); + prev_window = new QAction( tr("Projet pr\351c\351dent"), this); ///Files action/// QAction *new_file = m_file_actions_group.addAction( QET::Icons::DocumentNew, tr("&Nouveau") ); @@ -454,8 +461,9 @@ void QETDiagramEditor::setUpToolBar() { view_bar -> addSeparator(); view_bar -> addActions(m_zoom_action_toolBar); - diagram_bar -> addAction(infos_diagram); - diagram_bar -> addAction(conductor_reset); + diagram_bar -> addAction (infos_diagram); + diagram_bar -> addAction (conductor_reset); + diagram_bar -> addAction (m_auto_conductor); m_add_item_toolBar = new QToolBar(tr("Ajouter"), this); m_add_item_toolBar->setObjectName("adding"); @@ -1179,6 +1187,7 @@ void QETDiagramEditor::slot_updateActions() m_add_item_actions_group. setEnabled(editable_project); m_row_column_actions_group.setEnabled(editable_project); + slot_updateUndoStack(); slot_updateModeActions(); slot_updatePasteAction(); @@ -1266,18 +1275,21 @@ void QETDiagramEditor::slot_updateComplexActions() { } } - /** - Gere les actions relatives au mode du schema -*/ + * @brief QETDiagramEditor::slot_updateModeActions + * Manage action who need an opened diagram or project to be updated + */ void QETDiagramEditor::slot_updateModeActions() { DiagramView *dv = currentDiagram(); - // actions ayant aussi besoin d'un document ouvert et de la connaissance de son mode - if (!dv) { + if (!dv) + { grp_visu_sel -> setEnabled(false); - } else { - switch((int)(dv -> dragMode())) { + } + else + { + switch((int)(dv -> dragMode())) + { case QGraphicsView::NoDrag: grp_visu_sel -> setEnabled(false); break; @@ -1291,6 +1303,15 @@ void QETDiagramEditor::slot_updateModeActions() { break; } } + + + if (ProjectView *pv = currentProject()) + { + m_auto_conductor -> setEnabled (true); + m_auto_conductor -> setChecked (pv -> project() -> autoConductor()); + } + else + m_auto_conductor -> setDisabled(true); } /** @@ -1513,6 +1534,17 @@ void QETDiagramEditor::slot_resetConductors() { } } +/** + * @brief QETDiagramEditor::slot_autoConductor + * @param ac + * Update the auto conductor status of current project; + */ +void QETDiagramEditor::slot_autoConductor(bool ac) +{ + if (ProjectView *pv = currentProject()) + pv -> project() -> setAutoConductor(ac); +} + /** * @brief QETDiagramEditor::slot_addText * add text to curent diagram diff --git a/sources/qetdiagrameditor.h b/sources/qetdiagrameditor.h index 867bee2b6..fdb8bc991 100644 --- a/sources/qetdiagrameditor.h +++ b/sources/qetdiagrameditor.h @@ -115,6 +115,7 @@ class QETDiagramEditor : public QETMainWindow { void slot_removeRow(); void editSelectionProperties(); void slot_resetConductors(); + void slot_autoConductor(bool ac); void slot_addText(); void slot_addImage(); void slot_addLine(); @@ -179,6 +180,7 @@ class QETDiagramEditor : public QETMainWindow { QAction *copy; ///< Copy selection to clipboard QAction *paste; ///< Paste clipboard content on the current diagram QAction *conductor_reset; ///< Reset paths of selected conductors + QAction *m_auto_conductor; ///< Enable/Disable the use of auto conductor QAction *conductor_default; ///< Show a dialog to edit default conductor properties QAction *infos_diagram; ///< Show a dialog to edit diagram properties QAction *prj_edit_prop; ///< Edit the properties of the current project. diff --git a/sources/qetgraphicsitem/terminal.cpp b/sources/qetgraphicsitem/terminal.cpp index 3843bf950..e68de0420 100644 --- a/sources/qetgraphicsitem/terminal.cpp +++ b/sources/qetgraphicsitem/terminal.cpp @@ -280,18 +280,21 @@ void Terminal::paint(QPainter *p, const QStyleOptionGraphicsItem *options, QWidg { if (!m_help_line) m_help_line = new QGraphicsLineItem(this); + m_help_line -> setPen(QPen (Qt::darkBlue)); QLineF line(HelpLine()); - Terminal *t = alignedWithTerminal(); - if (t) + if (Diagram *dia = diagram()) { - line.setP2(t -> dockConductor()); - m_help_line -> setPen(QPen (Qt::darkGreen)); - } - else - { - m_help_line -> setPen(QPen (Qt::darkBlue)); + if (dia -> project() -> autoConductor()) + { + Terminal *t = alignedWithTerminal(); + if (t) + { + line.setP2(t -> dockConductor()); + m_help_line -> setPen(QPen (Qt::darkGreen)); + } + } } //Map the line (in scene coordinate) to help_line coordinate diff --git a/sources/qetproject.cpp b/sources/qetproject.cpp index 193039581..9f96e9661 100644 --- a/sources/qetproject.cpp +++ b/sources/qetproject.cpp @@ -41,13 +41,14 @@ QString QETProject::integration_category_name = "import"; @param parent QObject parent */ QETProject::QETProject(int diagrams, QObject *parent) : - QObject(parent), - collection_(0), - project_qet_version_(-1), - modified_(false), - read_only_(false), - titleblocks_(this), - folioSheetsQuantity(0) + QObject (parent), + collection_ (0 ), + project_qet_version_ (-1 ), + modified_ (false ), + read_only_ (false ), + titleblocks_ (this ), + folioSheetsQuantity (0 ), + m_auto_conductor (true ) { // 0 a n schema(s) vide(s) int diagrams_count = qMax(0, diagrams); @@ -75,13 +76,14 @@ QETProject::QETProject(int diagrams, QObject *parent) : @param parent QObject parent */ QETProject::QETProject(const QString &path, QObject *parent) : - QObject(parent), - collection_(0), - project_qet_version_(-1), - modified_(false), - read_only_(false), - titleblocks_(this), - folioSheetsQuantity(0) + QObject (parent), + collection_ (0 ), + project_qet_version_ (-1 ), + modified_ (false ), + read_only_ (false ), + titleblocks_ (this ), + folioSheetsQuantity (0 ), + m_auto_conductor (true ) { // ouvre le fichier QFile project_file(path); @@ -118,13 +120,14 @@ QETProject::QETProject(const QString &path, QObject *parent) : L'element XML fourni est copie et conserve dans la classe. */ QETProject::QETProject(const QDomElement &xml_element, QObject *parent) : - QObject(parent), - collection_(0), - project_qet_version_(-1), - modified_(false), - read_only_(false), - titleblocks_(this), - folioSheetsQuantity(0) + QObject (parent), + collection_ (0 ), + project_qet_version_ (-1 ), + modified_ (false ), + read_only_ (false ), + titleblocks_ (this ), + folioSheetsQuantity (0 ), + m_auto_conductor (true ) { // copie le contenu XML document_root_.appendChild(document_root_.importNode(xml_element, true)); @@ -505,6 +508,28 @@ NumerotationContext QETProject::conductorAutoNum (const QString &key) const { else return NumerotationContext(); } +/** + * @brief QETProject::autoConductor + * @return true if use of auto conductor is authorized. + * See also Q_PROPERTY autoConductor + */ +bool QETProject::autoConductor() const +{ + return m_auto_conductor; +} + +/** + * @brief QETProject::setAutoConductor + * @param ac + * Enable the use of auto conductor if true + * See also Q_PROPERTY autoConductor + */ +void QETProject::setAutoConductor(bool ac) +{ + if (ac != m_auto_conductor) + m_auto_conductor = ac; +} + /** @return un document XML representant le projet */ diff --git a/sources/qetproject.h b/sources/qetproject.h index 5d3d18b0f..870af8df8 100644 --- a/sources/qetproject.h +++ b/sources/qetproject.h @@ -45,20 +45,24 @@ class NumerotationContext; collection. This collection enables users to export diagrams on remote machines without wondering whether required elements are available to them. */ -class QETProject : public QObject { - Q_OBJECT +class QETProject : public QObject +{ + Q_OBJECT + + Q_PROPERTY(bool autoConductor READ autoConductor WRITE setAutoConductor) - // constructors, destructor + // constructors, destructor public: - QETProject(int = 1, QObject * = 0); - QETProject(const QString &, QObject * = 0); - QETProject(const QDomElement &, QObject * = 0); - virtual ~QETProject(); + QETProject (int = 1, QObject * = 0); + QETProject (const QString &, QObject * = 0); + QETProject (const QDomElement &, QObject * = 0); + virtual ~QETProject(); private: - QETProject(const QETProject &); + QETProject(const QETProject &); + void init (); - // enums + // enums public: /** This enum lists possible states for a particular project. @@ -72,74 +76,77 @@ class QETProject : public QObject { FileOpenDiscard = 5 /// the user cancelled the file opening }; - // methods + // methods public: - ProjectState state() const; - QList diagrams() const; - int getFolioSheetsQuantity() const; /// get the folio sheets quantity for this project - void setFolioSheetsQuantity(int); /// set the folio sheets quantity for this project - int folioIndex(const Diagram *) const; - ElementsCollection *embeddedCollection() const; - TitleBlockTemplatesProjectCollection *embeddedTitleBlockTemplatesCollection(); - QString filePath(); - void setFilePath(const QString &); - QString currentDir() const; - QString pathNameTitle() const; - QString title() const; - qreal declaredQElectroTechVersion(); - void setTitle(const QString &); - QList embeddedTitleBlockTemplates(); - const TitleBlockTemplate *getTemplateByName(const QString &template_name); - QDomElement getTemplateXmlDescriptionByName(const QString &); - bool setTemplateXmlDescription(const QString &, const QDomElement &); - void removeTemplateByName(const QString &); + ProjectState state() const; + QList diagrams() const; + int getFolioSheetsQuantity() const; /// get the folio sheets quantity for this project + void setFolioSheetsQuantity(int); /// set the folio sheets quantity for this project + int folioIndex(const Diagram *) const; + ElementsCollection *embeddedCollection() const; + TitleBlockTemplatesProjectCollection *embeddedTitleBlockTemplatesCollection(); + QString filePath(); + void setFilePath(const QString &); + QString currentDir() const; + QString pathNameTitle() const; + QString title() const; + qreal declaredQElectroTechVersion(); + void setTitle(const QString &); + QList embeddedTitleBlockTemplates(); + const TitleBlockTemplate *getTemplateByName(const QString &template_name); + QDomElement getTemplateXmlDescriptionByName(const QString &); + bool setTemplateXmlDescription(const QString &, const QDomElement &); + void removeTemplateByName(const QString &); - ///DEFAULT PROPERTIES - BorderProperties defaultBorderProperties() const; - void setDefaultBorderProperties(const BorderProperties &); + ///DEFAULT PROPERTIES + BorderProperties defaultBorderProperties() const; + void setDefaultBorderProperties(const BorderProperties &); - TitleBlockProperties defaultTitleBlockProperties() const; - void setDefaultTitleBlockProperties(const TitleBlockProperties &); + TitleBlockProperties defaultTitleBlockProperties() const; + void setDefaultTitleBlockProperties(const TitleBlockProperties &); - ConductorProperties defaultConductorProperties() const; - void setDefaultConductorProperties(const ConductorProperties &); + ConductorProperties defaultConductorProperties() const; + void setDefaultConductorProperties(const ConductorProperties &); - QString defaultReportProperties() const; - void setDefaultReportProperties (const QString &properties); + QString defaultReportProperties() const; + void setDefaultReportProperties (const QString &properties); - XRefProperties defaultXRefProperties (const QString &type) const {return m_default_xref_properties[type];} - QHash defaultXRefProperties() const {return m_default_xref_properties;} - void setDefaultXRefProperties(const QString type, const XRefProperties &properties); - void setDefaultXRefProperties(QHash hash); + XRefProperties defaultXRefProperties (const QString &type) const {return m_default_xref_properties[type];} + QHash defaultXRefProperties() const {return m_default_xref_properties;} + void setDefaultXRefProperties(const QString type, const XRefProperties &properties); + void setDefaultXRefProperties(QHash hash); - QHash conductorAutoNum() const; - void addConductorAutoNum (QString key, NumerotationContext context); - void removeConductorAutonum (QString key); - NumerotationContext conductorAutoNum(const QString &key) const; + QHash conductorAutoNum() const; + void addConductorAutoNum (QString key, NumerotationContext context); + void removeConductorAutonum (QString key); + NumerotationContext conductorAutoNum(const QString &key) const; - QDomDocument toXml(); - bool close(); - QETResult write(); - bool isReadOnly() const; - void setReadOnly(bool); - bool isEmpty() const; - bool ensureIntegrationCategoryExists(); - ElementsCategory *integrationCategory() const; - QString integrateElement(const QString &, QString &); - QString integrateElement(const QString &, MoveElementsHandler *, QString &); - QString integrateTitleBlockTemplate(const TitleBlockTemplateLocation &, MoveTitleBlockTemplatesHandler *handler); - bool usesElement(const ElementsLocation &); - bool usesTitleBlockTemplate(const TitleBlockTemplateLocation &); - void cleanUnusedTitleBlocKTemplates(); - void cleanUnusedElements(MoveElementsHandler *); - void cleanEmptyCategories(MoveElementsHandler *); - bool projectWasModified(); - bool projectOptionsWereModified(); - bool embeddedCollectionWasModified(); - bool titleBlockTemplateCollectionWasModified(); - DiagramContext projectProperties(); - void setProjectProperties(const DiagramContext &); - QUndoStack* undoStack() {return undo_stack_;} + bool autoConductor () const; + void setAutoConductor (bool ac); + + QDomDocument toXml(); + bool close(); + QETResult write(); + bool isReadOnly() const; + void setReadOnly(bool); + bool isEmpty() const; + bool ensureIntegrationCategoryExists(); + ElementsCategory *integrationCategory() const; + QString integrateElement(const QString &, QString &); + QString integrateElement(const QString &, MoveElementsHandler *, QString &); + QString integrateTitleBlockTemplate(const TitleBlockTemplateLocation &, MoveTitleBlockTemplatesHandler *handler); + bool usesElement(const ElementsLocation &); + bool usesTitleBlockTemplate(const TitleBlockTemplateLocation &); + void cleanUnusedTitleBlocKTemplates(); + void cleanUnusedElements(MoveElementsHandler *); + void cleanEmptyCategories(MoveElementsHandler *); + bool projectWasModified(); + bool projectOptionsWereModified(); + bool embeddedCollectionWasModified(); + bool titleBlockTemplateCollectionWasModified(); + DiagramContext projectProperties(); + void setProjectProperties(const DiagramContext &); + QUndoStack* undoStack() {return undo_stack_;} public slots: void componentWritten(); @@ -229,6 +236,7 @@ class QETProject : public QObject { QHash m_conductor_autonum; /// Folio List Sheets quantity for this project. int folioSheetsQuantity; + bool m_auto_conductor; }; Q_DECLARE_METATYPE(QETProject *) #endif