Harmonisation de la facon d'afficher/editer les proprietes des objets sur les schemas.

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@645 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
xavier
2009-05-17 02:13:40 +00:00
parent 9007c555a6
commit 896c1d3ed7
8 changed files with 140 additions and 18 deletions

View File

@@ -54,6 +54,11 @@ QList<Conductor *> DiagramContent::conductors(int filter) const {
if (filter & ConductorsToMove) result += conductorsToMove; if (filter & ConductorsToMove) result += conductorsToMove;
if (filter & ConductorsToUpdate) result += conductorsToUpdate.keys(); if (filter & ConductorsToUpdate) result += conductorsToUpdate.keys();
if (filter & OtherConductors) result += otherConductors; if (filter & OtherConductors) result += otherConductors;
if (filter & SelectedOnly) {
foreach(Conductor *conductor, result) {
if (!conductor -> isSelected()) result.removeOne(conductor);
}
}
return(result); return(result);
} }
@@ -77,6 +82,11 @@ QList<QGraphicsItem *> DiagramContent::items(int filter) const {
foreach(QGraphicsItem *qgi, conductors(filter)) items_list << qgi; foreach(QGraphicsItem *qgi, conductors(filter)) items_list << qgi;
if (filter & Elements) foreach(QGraphicsItem *qgi, elements) items_list << qgi; if (filter & Elements) foreach(QGraphicsItem *qgi, elements) items_list << qgi;
if (filter & TextFields) foreach(QGraphicsItem *qgi, textFields) items_list << qgi; if (filter & TextFields) foreach(QGraphicsItem *qgi, textFields) items_list << qgi;
if (filter & SelectedOnly) {
foreach(QGraphicsItem *qgi, items_list) {
if (!qgi -> isSelected()) items_list.removeOne(qgi);
}
}
return(items_list); return(items_list);
} }
@@ -86,11 +96,19 @@ QList<QGraphicsItem *> DiagramContent::items(int filter) const {
*/ */
int DiagramContent::count(int filter) const { int DiagramContent::count(int filter) const {
int count = 0; int count = 0;
if (filter & Elements) count += elements.count(); if (filter & SelectedOnly) {
if (filter & TextFields) count += textFields.count(); if (filter & Elements) foreach(Element *element, elements) { if (element -> isSelected()) ++ count; }
if (filter & ConductorsToMove) count += conductorsToMove.count(); if (filter & TextFields) foreach(DiagramTextItem *dti, textFields) { if (dti -> isSelected()) ++ count; }
if (filter & ConductorsToUpdate) count += conductorsToUpdate.count(); if (filter & ConductorsToMove) foreach(Conductor *conductor, conductorsToMove) { if (conductor -> isSelected()) ++ count; }
if (filter & OtherConductors) count += otherConductors.count(); if (filter & ConductorsToUpdate) foreach(Conductor *conductor, conductorsToUpdate.keys()) { if (conductor -> isSelected()) ++ count; }
if (filter & OtherConductors) foreach(Conductor *conductor, otherConductors) { if (conductor -> isSelected()) ++ count; }
} else {
if (filter & Elements) count += elements.count();
if (filter & TextFields) count += textFields.count();
if (filter & ConductorsToMove) count += conductorsToMove.count();
if (filter & ConductorsToUpdate) count += conductorsToUpdate.count();
if (filter & OtherConductors) count += otherConductors.count();
}
return(count); return(count);
} }

View File

@@ -46,7 +46,8 @@ class DiagramContent {
ConductorsToUpdate = 8, ConductorsToUpdate = 8,
OtherConductors = 16, OtherConductors = 16,
AnyConductor = 28, AnyConductor = 28,
All = 31 All = 31,
SelectedOnly = 32
}; };
/// Elements de texte du schema /// Elements de texte du schema

View File

@@ -18,6 +18,7 @@
#include "diagramview.h" #include "diagramview.h"
#include "diagram.h" #include "diagram.h"
#include "customelement.h" #include "customelement.h"
#include "ghostelement.h"
#include "conductor.h" #include "conductor.h"
#include "diagramcommands.h" #include "diagramcommands.h"
#include "conductorpropertieswidget.h" #include "conductorpropertieswidget.h"
@@ -549,6 +550,85 @@ void DiagramView::applyReadOnly() {
setAcceptDrops(is_writable); setAcceptDrops(is_writable);
} }
/**
Edite les proprietes des objets selectionnes
*/
void DiagramView::editSelectionProperties() {
// recupere la selection
DiagramContent selection = scene -> selectedContent();
// s'il n'y a rien de selectionne, cette methode ne fait rien
int selected_items_count = selection.count(DiagramContent::All | DiagramContent::SelectedOnly);
if (!selected_items_count) return;
// si la selection ne comprend qu'un seul objet, on l'edite via un dialogue approprie
if (selected_items_count == 1) {
// cas d'un conducteur selectionne
QList<Conductor *> selected_conductors = selection.conductors(DiagramContent::AnyConductor | DiagramContent::SelectedOnly);
if (selected_conductors.count() == 1) {
editConductor(selected_conductors.at(0));
return;
}
// cas d'un element selectionne
if (selection.elements.count() == 1) {
editElement(selection.elements.at(0));
return;
}
// cas d'un champ de texte selectionne : pour le moment, on traite comme une selection multiple
}
// sinon on affiche un simple listing des elements selectionnes
QMessageBox::information(
this,
tr("Propri\351t\351s de la s\351lection"),
QString(
tr(
"La s\351lection contient %1.",
"%1 is a sentence listing the selected objects"
)
).arg(selection.sentence(DiagramContent::All | DiagramContent::SelectedOnly))
);
}
/**
Affiche des informations sur un element
@param element Element a afficher
*/
void DiagramView::editElement(Element *element) {
if (!element) return;
CustomElement *custom_element = qobject_cast<CustomElement *>(element);
GhostElement *ghost_element = qobject_cast<GhostElement *>(element);
// type de l'element
QString description_string;
if (ghost_element) {
description_string += tr("\311l\351ment manquant");
} else {
description_string += tr("\311l\351ment");
}
description_string += "\n";
// nom, nombre de bornes, dimensions
description_string += QString(tr("Nom\240: %1\n")).arg(element -> name());
description_string += QString(tr("Dimensions\240: %1\327%2\n")).arg(element -> size().width()).arg(element -> size().height());
description_string += QString(tr("Bornes\240: %1\n")).arg(element -> terminals().count());
description_string += QString(tr("Connexions internes\240: %1\n")).arg(element -> internalConnections() ? tr("Autoris\351es") : tr("Interdites"));
description_string += QString(tr("Champs de texte\240: %1\n")).arg(element -> texts().count());
if (custom_element) {
description_string += QString(tr("Emplacement\240: %1\n")).arg(custom_element -> location().toString());
}
QMessageBox::information(
this,
tr("Propri\351t\351s de l'\351l\351ment s\351lectionn\351"),
description_string
);
}
/** /**
Affiche un dialogue permettant d'editer le conducteur selectionne. Affiche un dialogue permettant d'editer le conducteur selectionne.
Ne fait rien s'il y a 0 ou plusieurs conducteurs selectionnes. Ne fait rien s'il y a 0 ou plusieurs conducteurs selectionnes.
@@ -723,11 +803,11 @@ void DiagramView::contextMenuEvent(QContextMenuEvent *e) {
context_menu -> addAction(qde -> cut); context_menu -> addAction(qde -> cut);
context_menu -> addAction(qde -> copy); context_menu -> addAction(qde -> copy);
context_menu -> addSeparator(); context_menu -> addSeparator();
context_menu -> addAction(qde -> conductor_reset);
context_menu -> addSeparator();
context_menu -> addAction(qde -> delete_selection); context_menu -> addAction(qde -> delete_selection);
context_menu -> addAction(qde -> rotate_selection); context_menu -> addAction(qde -> rotate_selection);
context_menu -> addSeparator(); context_menu -> addAction(qde -> selection_prop);
context_menu -> addAction(qde -> conductor_prop);
context_menu -> addAction(qde -> conductor_reset);
} }
// affiche le menu contextuel // affiche le menu contextuel
@@ -786,6 +866,8 @@ void DiagramView::mouseDoubleClickEvent(QMouseEvent *e) {
if (QGraphicsItem *qgi = itemAt(e -> pos())) { if (QGraphicsItem *qgi = itemAt(e -> pos())) {
if (Conductor *c = qgraphicsitem_cast<Conductor *>(qgi)) { if (Conductor *c = qgraphicsitem_cast<Conductor *>(qgi)) {
editConductor(c); editConductor(c);
} else if (Element *element = qgraphicsitem_cast<Element *>(qgi)) {
editElement(element);
} else { } else {
QGraphicsView::mouseDoubleClickEvent(e); QGraphicsView::mouseDoubleClickEvent(e);
} }

View File

@@ -19,10 +19,11 @@
#define DIAGRAMVIEW_H #define DIAGRAMVIEW_H
#include <QtGui> #include <QtGui>
#include "elementslocation.h" #include "elementslocation.h"
class Conductor;
class Diagram; class Diagram;
class DiagramTextItem; class DiagramTextItem;
class Element;
class QETDiagramEditor; class QETDiagramEditor;
class Conductor;
/** /**
Classe representant graphiquement un schema electrique Classe representant graphiquement un schema electrique
*/ */
@@ -108,6 +109,8 @@ class DiagramView : public QGraphicsView {
void pasteHere(); void pasteHere();
void adjustSceneRect(); void adjustSceneRect();
void updateWindowTitle(); void updateWindowTitle();
void editSelectionProperties();
void editElement(Element *);
void editConductor(); void editConductor();
void editConductor(Conductor *); void editConductor(Conductor *);
void resetConductors(); void resetConductors();

View File

@@ -95,6 +95,13 @@ QSize Element::setSize(int wid, int hei) {
return(dimensions = QSize(wid, hei)); return(dimensions = QSize(wid, hei));
} }
/**
@return la taille de l'element sur le schema
*/
QSize Element::size() const {
return(dimensions);
}
/** /**
Definit le hotspot de l'element par rapport au coin superieur gauche de son rectangle delimitant. Definit le hotspot de l'element par rapport au coin superieur gauche de son rectangle delimitant.
Necessite que la taille ait deja ete definie Necessite que la taille ait deja ete definie

View File

@@ -90,6 +90,7 @@ class Element : public QObject, public QGraphicsItem {
void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *); void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
QRectF boundingRect() const; QRectF boundingRect() const;
QSize setSize(int, int); QSize setSize(int, int);
QSize size() const;
QPixmap pixmap(); QPixmap pixmap();
// methodes relatives au point de saisie // methodes relatives au point de saisie

View File

@@ -214,7 +214,7 @@ void QETDiagramEditor::actions() {
select_invert = new QAction( tr("Inverser la s\351lection"), this); select_invert = new QAction( tr("Inverser la s\351lection"), this);
delete_selection = new QAction(QET::Icons::EditDelete, tr("Supprimer"), this); delete_selection = new QAction(QET::Icons::EditDelete, tr("Supprimer"), this);
rotate_selection = new QAction(QET::Icons::ObjectRotateRight, tr("Pivoter"), this); rotate_selection = new QAction(QET::Icons::ObjectRotateRight, tr("Pivoter"), this);
conductor_prop = new QAction(QET::Icons::Conductor, tr("Propri\351t\351s du conducteur"), this); selection_prop = new QAction(QET::Icons::DialogInformation, tr("Propri\351t\351s de la s\351lection"), this);
conductor_reset = new QAction(QET::Icons::ConductorSettings, tr("R\351initialiser les conducteurs"), this); conductor_reset = new QAction(QET::Icons::ConductorSettings, tr("R\351initialiser les conducteurs"), this);
conductor_default = new QAction(QET::Icons::DefaultConductor, tr("Conducteurs par d\351faut"), this); conductor_default = new QAction(QET::Icons::DefaultConductor, tr("Conducteurs par d\351faut"), this);
infos_diagram = new QAction(QET::Icons::DialogInformation, tr("Propri\351t\351s du sch\351ma"), this); infos_diagram = new QAction(QET::Icons::DialogInformation, tr("Propri\351t\351s du sch\351ma"), this);
@@ -272,7 +272,7 @@ void QETDiagramEditor::actions() {
select_invert -> setShortcut(QKeySequence(tr("Ctrl+I"))); select_invert -> setShortcut(QKeySequence(tr("Ctrl+I")));
delete_selection -> setShortcut(QKeySequence(tr("Suppr"))); delete_selection -> setShortcut(QKeySequence(tr("Suppr")));
rotate_selection -> setShortcut(QKeySequence(tr("Ctrl+R"))); rotate_selection -> setShortcut(QKeySequence(tr("Ctrl+R")));
conductor_prop -> setShortcut(QKeySequence(tr("Ctrl+J"))); selection_prop -> setShortcut(QKeySequence(tr("Ctrl+J")));
conductor_reset -> setShortcut(QKeySequence(tr("Ctrl+K"))); conductor_reset -> setShortcut(QKeySequence(tr("Ctrl+K")));
infos_diagram -> setShortcut(QKeySequence(tr("Ctrl+L"))); infos_diagram -> setShortcut(QKeySequence(tr("Ctrl+L")));
conductor_default -> setShortcut(QKeySequence(tr("Ctrl+D"))); conductor_default -> setShortcut(QKeySequence(tr("Ctrl+D")));
@@ -311,7 +311,7 @@ void QETDiagramEditor::actions() {
select_invert -> setStatusTip(tr("D\351s\351lectionne les \351l\351ments s\351lectionn\351s et s\351lectionne les \351l\351ments non s\351lectionn\351s", "status bar tip")); select_invert -> setStatusTip(tr("D\351s\351lectionne les \351l\351ments s\351lectionn\351s et s\351lectionne les \351l\351ments non s\351lectionn\351s", "status bar tip"));
delete_selection -> setStatusTip(tr("Enl\350ve les \351l\351ments s\351lectionn\351s du sch\351ma", "status bar tip")); delete_selection -> setStatusTip(tr("Enl\350ve les \351l\351ments s\351lectionn\351s du sch\351ma", "status bar tip"));
rotate_selection -> setStatusTip(tr("Pivote les \351l\351ments s\351lectionn\351s", "status bar tip")); rotate_selection -> setStatusTip(tr("Pivote les \351l\351ments s\351lectionn\351s", "status bar tip"));
conductor_prop -> setStatusTip(tr("\311dite les propri\351t\351s du conducteur s\351lectionn\351", "status bar tip")); selection_prop -> setStatusTip(tr("\311dite les propri\351t\351s des objets s\351lectionn\351", "status bar tip"));
conductor_reset -> setStatusTip(tr("Recalcule les chemins des conducteurs sans tenir compte des modifications", "status bar tip")); conductor_reset -> setStatusTip(tr("Recalcule les chemins des conducteurs sans tenir compte des modifications", "status bar tip"));
conductor_default -> setStatusTip(tr("Sp\351cifie les propri\351t\351s par d\351faut des conducteurs", "status bar tip")); conductor_default -> setStatusTip(tr("Sp\351cifie les propri\351t\351s par d\351faut des conducteurs", "status bar tip"));
infos_diagram -> setStatusTip(tr("\311dite les informations affich\351es par le cartouche", "status bar tip")); infos_diagram -> setStatusTip(tr("\311dite les informations affich\351es par le cartouche", "status bar tip"));
@@ -397,7 +397,7 @@ void QETDiagramEditor::actions() {
connect(cascade_window, SIGNAL(triggered()), &workspace, SLOT(cascadeSubWindows()) ); connect(cascade_window, SIGNAL(triggered()), &workspace, SLOT(cascadeSubWindows()) );
connect(next_window, SIGNAL(triggered()), &workspace, SLOT(activateNextSubWindow()) ); connect(next_window, SIGNAL(triggered()), &workspace, SLOT(activateNextSubWindow()) );
connect(prev_window, SIGNAL(triggered()), &workspace, SLOT(activatePreviousSubWindow()) ); connect(prev_window, SIGNAL(triggered()), &workspace, SLOT(activatePreviousSubWindow()) );
connect(conductor_prop, SIGNAL(triggered()), this, SLOT(slot_editConductor()) ); connect(selection_prop, SIGNAL(triggered()), this, SLOT(editSelectionProperties()) );
connect(conductor_reset, SIGNAL(triggered()), this, SLOT(slot_resetConductors()) ); connect(conductor_reset, SIGNAL(triggered()), this, SLOT(slot_resetConductors()) );
connect(conductor_default, SIGNAL(triggered()), this, SLOT(slot_editDefaultConductors())); connect(conductor_default, SIGNAL(triggered()), this, SLOT(slot_editDefaultConductors()));
connect(infos_diagram, SIGNAL(triggered()), this, SLOT(editCurrentDiagramProperties())); connect(infos_diagram, SIGNAL(triggered()), this, SLOT(editCurrentDiagramProperties()));
@@ -483,8 +483,8 @@ void QETDiagramEditor::menus() {
menu_edition -> addSeparator(); menu_edition -> addSeparator();
menu_edition -> addAction(delete_selection); menu_edition -> addAction(delete_selection);
menu_edition -> addAction(rotate_selection); menu_edition -> addAction(rotate_selection);
menu_edition -> addAction(selection_prop);
menu_edition -> addSeparator(); menu_edition -> addSeparator();
menu_edition -> addAction(conductor_prop);
menu_edition -> addAction(conductor_reset); menu_edition -> addAction(conductor_reset);
menu_edition -> addAction(conductor_default); menu_edition -> addAction(conductor_default);
menu_edition -> addSeparator(); menu_edition -> addSeparator();
@@ -569,6 +569,7 @@ void QETDiagramEditor::toolbar() {
main_bar -> addSeparator(); main_bar -> addSeparator();
main_bar -> addAction(delete_selection); main_bar -> addAction(delete_selection);
main_bar -> addAction(rotate_selection); main_bar -> addAction(rotate_selection);
main_bar -> addAction(selection_prop);
// Modes selection / visualisation et zoom // Modes selection / visualisation et zoom
view_bar -> addAction(mode_selection); view_bar -> addAction(mode_selection);
@@ -582,7 +583,6 @@ void QETDiagramEditor::toolbar() {
diagram_bar -> addAction(infos_diagram); diagram_bar -> addAction(infos_diagram);
diagram_bar -> addAction(add_text); diagram_bar -> addAction(add_text);
diagram_bar -> addAction(conductor_default); diagram_bar -> addAction(conductor_default);
diagram_bar -> addAction(conductor_prop);
diagram_bar -> addAction(conductor_reset); diagram_bar -> addAction(conductor_reset);
// ajout de la barre d'outils a la fenetre principale // ajout de la barre d'outils a la fenetre principale
@@ -1146,7 +1146,6 @@ void QETDiagramEditor::slot_updateComplexActions() {
// nombre de conducteurs selectionnes // nombre de conducteurs selectionnes
int selected_conductors_count = dv ? dv -> diagram() -> selectedConductors().count() : 0; int selected_conductors_count = dv ? dv -> diagram() -> selectedConductors().count() : 0;
conductor_prop -> setEnabled(editable_diagram && selected_conductors_count == 1);
conductor_reset -> setEnabled(editable_diagram && selected_conductors_count); conductor_reset -> setEnabled(editable_diagram && selected_conductors_count);
// actions ayant aussi besoin d'elements selectionnes // actions ayant aussi besoin d'elements selectionnes
@@ -1155,6 +1154,7 @@ void QETDiagramEditor::slot_updateComplexActions() {
copy -> setEnabled(selected_elements); copy -> setEnabled(selected_elements);
delete_selection -> setEnabled(editable_diagram && selected_elements); delete_selection -> setEnabled(editable_diagram && selected_elements);
rotate_selection -> setEnabled(editable_diagram && selected_elements); rotate_selection -> setEnabled(editable_diagram && selected_elements);
selection_prop -> setEnabled(editable_diagram && selected_elements);
} }
/** /**
@@ -1401,6 +1401,15 @@ void QETDiagramEditor::slot_removeRow() {
} }
} }
/**
Edite les proprietes des objets selectionnes
*/
void QETDiagramEditor::editSelectionProperties() {
if (DiagramView *dv = currentDiagram()) {
dv -> editSelectionProperties();
}
}
/** /**
Edite les proprietes du conducteur selectionne Edite les proprietes du conducteur selectionne
*/ */

View File

@@ -114,6 +114,7 @@ class QETDiagramEditor : public QMainWindow {
void slot_removeColumn(); void slot_removeColumn();
void slot_addRow(); void slot_addRow();
void slot_removeRow(); void slot_removeRow();
void editSelectionProperties();
void slot_editConductor(); void slot_editConductor();
void slot_resetConductors(); void slot_resetConductors();
void slot_editDefaultConductors(); void slot_editDefaultConductors();
@@ -173,7 +174,7 @@ class QETDiagramEditor : public QMainWindow {
QAction *select_invert; ///< Inverse la selection QAction *select_invert; ///< Inverse la selection
QAction *delete_selection; ///< Supprime la selection QAction *delete_selection; ///< Supprime la selection
QAction *rotate_selection; ///< Pivote les elements selectionnes QAction *rotate_selection; ///< Pivote les elements selectionnes
QAction *conductor_prop; ///< Lance le dialogue d'edition du conducteur selectionne QAction *selection_prop; ///< Lance le dialogue de description ou d'edition de la selection
QAction *conductor_reset; ///< Reinitialise les conducteurs selectionnes QAction *conductor_reset; ///< Reinitialise les conducteurs selectionnes
QAction *conductor_default; ///< Lance le dialogue d'edition des conducteurs par defaut QAction *conductor_default; ///< Lance le dialogue d'edition des conducteurs par defaut
QAction *infos_diagram; ///< Lance le dialogue d'edition des proprietes du schema QAction *infos_diagram; ///< Lance le dialogue d'edition des proprietes du schema