Multi paste dialog : add a check box for allows auto connection of the pasted elements.

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@5331 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
blacksun
2018-04-12 16:24:44 +00:00
parent ad7f52997d
commit 3228f3e5db
10 changed files with 66 additions and 32 deletions

View File

@@ -999,7 +999,7 @@ bool Diagram::fromXml(QDomElement &document, QPointF position, bool consider_inf
// remplissage des listes facultatives
if (content_ptr) {
content_ptr -> m_elements = added_elements.toSet();
content_ptr -> m_elements = added_elements;
content_ptr -> m_conductors_to_move = added_conductors.toSet();
content_ptr -> m_text_fields = added_texts.toSet();
content_ptr -> m_images = added_images.toSet();

View File

@@ -94,7 +94,7 @@ void PasteDiagramCommand::redo()
first_redo = false;
//this is the first paste, we do some actions for the new element
const QList <Element *> elmts_list = content.m_elements.toList();
const QList <Element *> elmts_list = content.m_elements;
for (Element *e : elmts_list)
{
//make new uuid, because old uuid are the uuid of the copied element

View File

@@ -238,10 +238,10 @@ int DiagramContent::removeNonMovableItems()
{
int count_ = 0;
const QSet<Element *> elements_set = m_elements;
const QList<Element *> elements_set = m_elements;
for(Element *elmt : elements_set) {
if (!elmt->isMovable()) {
m_elements.remove(elmt);
m_elements.removeAll(elmt);
++count_;
}
}

View File

@@ -64,7 +64,7 @@ class DiagramContent
SelectedOnly = 512
};
QSet<Element *> m_elements;
QList<Element *> m_elements;
QSet<IndependentTextItem *> m_text_fields;
QSet<DiagramImageItem *> m_images;
QSet<QetShapeItem *> m_shapes;

View File

@@ -819,7 +819,7 @@ void DiagramView::editSelectionProperties()
selection.conductors().first()->editProperty();
// edit element
else if (selection.m_elements.size())
selection.m_elements.toList().first() -> editProperty();
selection.m_elements.first() -> editProperty();
}
else {

View File

@@ -143,7 +143,7 @@ void ElementsMover::endMovement()
m_moved_content.items(dc::Elements).size() == 1 &&
diagram_ -> project() -> autoConductor())
{
Element *elmt = m_moved_content.m_elements.toList().first();
Element *elmt = m_moved_content.m_elements.first();
int acc = elmt->AlignedFreeTerminals().size();

View File

@@ -276,8 +276,8 @@ void QETDiagramEditor::setUpActions()
m_grey_background -> setCheckable (true);
connect (m_grey_background, &QAction::triggered, [this](bool checked) {
Diagram::background_color = checked ? Qt::darkGray : Qt::white;
if (this->currentDiagram() && this->currentDiagram()->diagram())
this->currentDiagram()->diagram()->update();
if (this->currentDiagramView() && this->currentDiagramView()->diagram())
this->currentDiagramView()->diagram()->update();
});
m_draw_grid = new QAction ( QET::Icons::Grid, tr("Afficher la grille"), this);
@@ -984,7 +984,7 @@ bool QETDiagramEditor::addProject(QETProject *project, bool update_panel) {
// met a jour le panel d'elements
if (update_panel) {
pa -> elementsPanel().projectWasOpened(project);
if (currentDiagram() != nullptr)
if (currentDiagramView() != nullptr)
m_autonumbering_dock->setProject(project, project_view);
}
@@ -1026,7 +1026,7 @@ ProjectView *QETDiagramEditor::currentProjectView() const {
@return Le schema actuellement edite (= l'onglet ouvert dans le projet
courant) ou 0 s'il n'y en a pas
*/
DiagramView *QETDiagramEditor::currentDiagram() const {
DiagramView *QETDiagramEditor::currentDiagramView() const {
if (ProjectView *project_view = currentProjectView()) {
return(project_view -> currentDiagram());
}
@@ -1041,11 +1041,11 @@ DiagramView *QETDiagramEditor::currentDiagram() const {
*/
Element *QETDiagramEditor::currentElement() const
{
DiagramView *dv = currentDiagram();
DiagramView *dv = currentDiagramView();
if (!dv)
return(nullptr);
QList<Element *> selected_elements = DiagramContent(dv->diagram()).m_elements.toList();
QList<Element *> selected_elements = DiagramContent(dv->diagram()).m_elements;
if (selected_elements.count() != 1)
return(nullptr);
@@ -1150,27 +1150,27 @@ void QETDiagramEditor::activateWidget(QWidget *widget) {
Effectue l'action "couper" sur le schema en cours
*/
void QETDiagramEditor::slot_cut() {
if(currentDiagram()) currentDiagram() -> cut();
if(currentDiagramView()) currentDiagramView() -> cut();
}
/**
Effectue l'action "copier" sur le diagram en cours
*/
void QETDiagramEditor::slot_copy() {
if(currentDiagram()) currentDiagram() -> copy();
if(currentDiagramView()) currentDiagramView() -> copy();
}
/**
Effectue l'action "coller" sur le schema en cours
*/
void QETDiagramEditor::slot_paste() {
if(currentDiagram()) currentDiagram() -> paste();
if(currentDiagramView()) currentDiagramView() -> paste();
}
void QETDiagramEditor::zoomGroupTriggered(QAction *action)
{
QString value = action->data().toString();
DiagramView *dv = currentDiagram();
DiagramView *dv = currentDiagramView();
if (!dv || value.isEmpty()) return;
@@ -1194,7 +1194,7 @@ void QETDiagramEditor::zoomGroupTriggered(QAction *action)
void QETDiagramEditor::selectGroupTriggered(QAction *action)
{
QString value = action->data().toString();
DiagramView *dv = currentDiagram();
DiagramView *dv = currentDiagramView();
if (!dv || value.isEmpty()) return;
@@ -1216,9 +1216,9 @@ void QETDiagramEditor::addItemGroupTriggered(QAction *action)
{
QString value = action->data().toString();
if (Q_UNLIKELY (!currentDiagram() || !currentDiagram()->diagram() || value.isEmpty())) return;
if (Q_UNLIKELY (!currentDiagramView() || !currentDiagramView()->diagram() || value.isEmpty())) return;
Diagram *d = currentDiagram()->diagram();
Diagram *d = currentDiagramView()->diagram();
DiagramEventInterface *diagram_event = nullptr;
if (value == "line")
@@ -1259,7 +1259,7 @@ void QETDiagramEditor::addItemGroupTriggered(QAction *action)
void QETDiagramEditor::selectionGroupTriggered(QAction *action)
{
QString value = action->data().toString();
DiagramView *dv = currentDiagram();
DiagramView *dv = currentDiagramView();
Diagram *diagram = dv->diagram();
DiagramContent dc(diagram);
@@ -1288,7 +1288,7 @@ void QETDiagramEditor::selectionGroupTriggered(QAction *action)
void QETDiagramEditor::rowColumnGroupTriggered(QAction *action)
{
QString value = action->data().toString();
DiagramView *dv = currentDiagram();
DiagramView *dv = currentDiagramView();
if (!dv || value.isEmpty() || dv->diagram()->isReadOnly()) return;
@@ -1336,7 +1336,7 @@ void QETDiagramEditor::slot_setVisualisationMode()
*/
void QETDiagramEditor::slot_updateActions()
{
DiagramView *dv = currentDiagram();
DiagramView *dv = currentDiagramView();
ProjectView *pv = currentProjectView();
bool opened_project = pv;
@@ -1377,7 +1377,7 @@ void QETDiagramEditor::slot_updateActions()
void QETDiagramEditor::slot_updateAutoNumDock() {
if ( workspace.subWindowList().indexOf(workspace.activeSubWindow()) != activeSubWindowIndex) {
activeSubWindowIndex = workspace.subWindowList().indexOf(workspace.activeSubWindow());
if (currentProjectView() != nullptr && currentDiagram() != nullptr) {
if (currentProjectView() != nullptr && currentDiagramView() != nullptr) {
m_autonumbering_dock->setProject(currentProjectView()->project(),currentProjectView());
}
}
@@ -1400,7 +1400,7 @@ void QETDiagramEditor::slot_updateUndoStack()
*/
void QETDiagramEditor::slot_updateComplexActions()
{
DiagramView *dv = currentDiagram();
DiagramView *dv = currentDiagramView();
if(!dv)
{
QList <QAction *> action_list;
@@ -1493,7 +1493,7 @@ void QETDiagramEditor::slot_updateComplexActions()
*/
void QETDiagramEditor::slot_updateModeActions()
{
DiagramView *dv = currentDiagram();
DiagramView *dv = currentDiagramView();
if (!dv)
grp_visu_sel -> setEnabled(false);
@@ -1528,7 +1528,7 @@ void QETDiagramEditor::slot_updateModeActions()
Gere les actions ayant besoin du presse-papier
*/
void QETDiagramEditor::slot_updatePasteAction() {
DiagramView *dv = currentDiagram();
DiagramView *dv = currentDiagramView();
bool editable_diagram = (dv && !dv -> diagram() -> isReadOnly());
// pour coller, il faut un schema ouvert et un schema dans le presse-papier
@@ -1738,7 +1738,7 @@ void QETDiagramEditor::editDiagramProperties(Diagram *diagram) {
Edite les proprietes des objets selectionnes
*/
void QETDiagramEditor::editSelectionProperties() {
if (DiagramView *dv = currentDiagram()) {
if (DiagramView *dv = currentDiagramView()) {
dv -> editSelectionProperties();
}
}
@@ -1747,7 +1747,7 @@ void QETDiagramEditor::editSelectionProperties() {
Reinitialise les conducteurs selectionnes
*/
void QETDiagramEditor::slot_resetConductors() {
if (DiagramView *dv = currentDiagram()) {
if (DiagramView *dv = currentDiagramView()) {
dv -> resetConductors();
}
}
@@ -2179,7 +2179,7 @@ void QETDiagramEditor::selectionChanged()
{
slot_updateComplexActions();
DiagramView *dv = currentDiagram();
DiagramView *dv = currentDiagramView();
if (dv && dv->diagram())
m_selection_properties_editor->setDiagram(dv->diagram());
}

View File

@@ -77,7 +77,7 @@ class QETDiagramEditor : public QETMainWindow {
private:
bool addProject(QETProject *, bool = true);
ProjectView *currentProjectView() const;
DiagramView *currentDiagram() const;
DiagramView *currentDiagramView() const;
Element *currentElement() const;
CustomElement * currentCustomElement() const;
ProjectView *findProject(DiagramView *) const;

View File

@@ -2,6 +2,8 @@
#include "ui_multipastedialog.h"
#include "diagram.h"
#include "diagramcommands.h"
#include "element.h"
#include "conductorautonumerotation.h"
MultiPasteDialog::MultiPasteDialog(Diagram *diagram, QWidget *parent) :
QDialog(parent),
@@ -74,7 +76,32 @@ void MultiPasteDialog::on_m_button_box_accepted()
if(m_pasted_content.count())
{
m_diagram->clearSelection();
m_diagram->undoStack().push(new PasteDiagramCommand(m_diagram, m_pasted_content));
QUndoCommand *undo = new QUndoCommand(tr("Multi-collage"));
new PasteDiagramCommand(m_diagram, m_pasted_content, undo);
if(ui->m_auto_connection_cb->isChecked())
{
for(Element *elmt : m_pasted_content.m_elements)
{
while (!elmt->AlignedFreeTerminals().isEmpty())
{
QPair <Terminal *, Terminal *> pair = elmt->AlignedFreeTerminals().takeFirst();
Conductor *conductor = new Conductor(pair.first, pair.second);
new AddItemCommand<Conductor *>(conductor, m_diagram, QPointF(), undo);
//Autonum the new conductor, the undo command associated for this, have for parent undo_object
ConductorAutoNumerotation can (conductor, m_diagram, undo);
can.numerate();
if (m_diagram->freezeNewConductors() || m_diagram->project()->isFreezeNewConductors()) {
conductor->setFreezeLabel(true);
}
}
}
}
m_diagram->undoStack().push(undo);
m_diagram->adjustSceneRect();
m_accept = true;
}

View File

@@ -87,6 +87,13 @@
</item>
</layout>
</item>
<item>
<widget class="QCheckBox" name="m_auto_connection_cb">
<property name="text">
<string>Auto-connection</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">