mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-10-19 20:44:16 +02:00
Merge pull request #1205 from ispyisail/feature/multi-wire-properties-panel
Edit several wires at once in the Selection properties panel
This commit is contained in:
@@ -38,6 +38,7 @@
|
||||
#include "../ui/shapegraphicsitempropertieswidget.h"
|
||||
|
||||
#include <QGraphicsItem>
|
||||
#include <QSet>
|
||||
#include <QSettings>
|
||||
|
||||
/**
|
||||
@@ -82,22 +83,30 @@ PropertiesEditorWidget *PropertiesEditorFactory::propertiesEditor(
|
||||
PropertiesEditorWidget *editor,
|
||||
QWidget *parent)
|
||||
{
|
||||
//Selecting a conductor's text label edits its parent conductor (#500),
|
||||
//mirroring how double-clicking the label opens the conductor dialog.
|
||||
//A rubber band over wires selects their labels too: each label
|
||||
//counts as its conductor, once.
|
||||
QList<QGraphicsItem *> mapped;
|
||||
QSet<QGraphicsItem *> seen;
|
||||
for (QGraphicsItem *qgi : std::as_const(items)) {
|
||||
if (auto *cti = qgraphicsitem_cast<ConductorTextItem *>(qgi)) {
|
||||
if (Conductor *parent_cond = cti->parentConductor()) {
|
||||
qgi = parent_cond;
|
||||
}
|
||||
}
|
||||
if (!seen.contains(qgi)) {
|
||||
seen.insert(qgi);
|
||||
mapped << qgi;
|
||||
}
|
||||
}
|
||||
items = mapped;
|
||||
|
||||
const int count_ = items.size();
|
||||
if (count_ == 0) {
|
||||
return nullptr;
|
||||
}
|
||||
QGraphicsItem *item = items.first();
|
||||
|
||||
//Selecting a conductor's text label edits its parent conductor (#500),
|
||||
//mirroring how double-clicking the label opens the conductor dialog.
|
||||
if (count_ == 1) {
|
||||
if (auto *cti = qgraphicsitem_cast<ConductorTextItem *>(item)) {
|
||||
if (Conductor *parent_cond = cti->parentConductor()) {
|
||||
items = {parent_cond};
|
||||
item = parent_cond;
|
||||
}
|
||||
}
|
||||
}
|
||||
const int type_ = item->type();
|
||||
|
||||
//The editor widget can only edit one item
|
||||
@@ -124,18 +133,17 @@ PropertiesEditorWidget *PropertiesEditorFactory::propertiesEditor(
|
||||
false).toBool()) {
|
||||
return nullptr;
|
||||
}
|
||||
//Prototype (#500): single-conductor editing in the dock.
|
||||
if (count_ > 1) {
|
||||
return nullptr;
|
||||
QList<Conductor *> conductors;
|
||||
for (QGraphicsItem *qgi : std::as_const(items)) {
|
||||
conductors << static_cast<Conductor *>(qgi);
|
||||
}
|
||||
auto conductor = static_cast<Conductor*>(item);
|
||||
|
||||
if (class_name == ConductorPropertiesEditorWidget::staticMetaObject.className())
|
||||
{
|
||||
static_cast<ConductorPropertiesEditorWidget*>(editor)->setConductor(conductor);
|
||||
static_cast<ConductorPropertiesEditorWidget*>(editor)->setConductors(conductors);
|
||||
return editor;
|
||||
}
|
||||
return new ConductorPropertiesEditorWidget(conductor, parent);
|
||||
return new ConductorPropertiesEditorWidget(conductors, parent);
|
||||
}
|
||||
case Element::Type: //1000
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user