From 815e959a2d2fc05d3d36a4da3305504be49a0c0a Mon Sep 17 00:00:00 2001 From: Laurent Trinques Date: Fri, 27 Mar 2026 15:33:03 +0100 Subject: [PATCH 1/3] Revert "Feature: Implement max_slaves limit for Master elements" --- .../ui/elementpropertieseditorwidget.cpp | 31 +++---------------- .../ui/elementpropertieseditorwidget.ui | 19 +----------- sources/properties/elementdata.cpp | 17 ++-------- sources/properties/elementdata.h | 1 - sources/qetgraphicsitem/masterelement.cpp | 31 ------------------- sources/qetgraphicsitem/masterelement.h | 2 -- sources/ui/linksingleelementwidget.cpp | 19 ++---------- sources/ui/masterpropertieswidget.cpp | 24 ++------------ 8 files changed, 14 insertions(+), 130 deletions(-) diff --git a/sources/editor/ui/elementpropertieseditorwidget.cpp b/sources/editor/ui/elementpropertieseditorwidget.cpp index e88282fd7..7ed277efb 100644 --- a/sources/editor/ui/elementpropertieseditorwidget.cpp +++ b/sources/editor/ui/elementpropertieseditorwidget.cpp @@ -1,4 +1,4 @@ -/* +/* Copyright 2006-2026 The QElectroTech Team This file is part of QElectroTech. @@ -96,18 +96,8 @@ void ElementPropertiesEditorWidget::upDateInterface() } else if (m_data.m_type == ElementData::Master) { ui->m_master_type_cb->setCurrentIndex( - ui->m_master_type_cb->findData ( - m_data.m_master_type)); - - // NEU: Checkbox und Zahlenbox für max_slaves einstellen - if (m_data.m_max_slaves == -1) { - ui->max_slaves_checkbox->setChecked(false); - ui->max_slaves_spinbox->setEnabled(false); - } else { - ui->max_slaves_checkbox->setChecked(true); - ui->max_slaves_spinbox->setEnabled(true); - ui->max_slaves_spinbox->setValue(m_data.m_max_slaves); - } + ui->m_master_type_cb->findData ( + m_data.m_master_type)); } else if (m_data.m_type == ElementData::Terminal) { ui->m_terminal_type_cb->setCurrentIndex( ui->m_terminal_type_cb->findData( @@ -161,14 +151,10 @@ void ElementPropertiesEditorWidget::setUpInterface() ui->m_terminal_func_cb->addItem(tr("Phase"), ElementData::TFPhase); ui->m_terminal_func_cb->addItem(tr("Neutre"), ElementData::TFNeutral); - //Disable the edition of the first column of the information tree - //by this little workaround + //Disable the edition of the first column of the information tree + //by this little workaround ui->m_tree->setItemDelegate(new EditorDelegate(this)); ui->m_tree->header()->resizeSection(0, 150); - - // NEU: Checkbox mit der Zahlenbox verbinden (Aktivieren/Deaktivieren) - connect(ui->max_slaves_checkbox, SIGNAL(toggled(bool)), ui->max_slaves_spinbox, SLOT(setEnabled(bool))); - populateTree(); } @@ -240,13 +226,6 @@ void ElementPropertiesEditorWidget::on_m_buttonBox_accepted() } else if (m_data.m_type == ElementData::Master) { m_data.m_master_type = ui->m_master_type_cb->currentData().value(); - - // NEU: Wenn Häkchen gesetzt, speichere die Zahl, ansonsten -1 (unendlich) - if (ui->max_slaves_checkbox->isChecked()) { - m_data.m_max_slaves = ui->max_slaves_spinbox->value(); - } else { - m_data.m_max_slaves = -1; - } } else if (m_data.m_type == ElementData::Terminal) { diff --git a/sources/editor/ui/elementpropertieseditorwidget.ui b/sources/editor/ui/elementpropertieseditorwidget.ui index f7bf44641..6c3b33344 100644 --- a/sources/editor/ui/elementpropertieseditorwidget.ui +++ b/sources/editor/ui/elementpropertieseditorwidget.ui @@ -7,7 +7,7 @@ 0 0 527 - 492 + 442 @@ -104,23 +104,6 @@ - - - - max. Slaves definieren - - - - - - - false - - - 1 - - - diff --git a/sources/properties/elementdata.cpp b/sources/properties/elementdata.cpp index 944ce3c08..4a50c2fd2 100644 --- a/sources/properties/elementdata.cpp +++ b/sources/properties/elementdata.cpp @@ -76,14 +76,6 @@ QDomElement ElementData::kindInfoToXml(QDomDocument &document) xml_type.appendChild(type_txt); returned_elmt.appendChild(xml_type); - - // NEU: max_slaves speichern - auto xml_max_slaves = document.createElement(QStringLiteral("kindInformation")); - xml_max_slaves.setAttribute(QStringLiteral("name"), QStringLiteral("max_slaves")); - auto max_slaves_txt = document.createTextNode(QString::number(m_max_slaves)); - xml_max_slaves.appendChild(max_slaves_txt); - - returned_elmt.appendChild(xml_max_slaves); } else if (m_type == ElementData::Slave) { @@ -566,12 +558,9 @@ void ElementData::kindInfoFromXml(const QDomElement &xml_element) } auto name = dom_elmt.attribute(QStringLiteral("name")); - if (m_type == ElementData::Master) { - if (name == QLatin1String("type")) { - m_master_type = masterTypeFromString(dom_elmt.text()); - } else if (name == QLatin1String("max_slaves")) { - m_max_slaves = dom_elmt.text().toInt(); - } + if (m_type == ElementData::Master && + name == QLatin1String("type")) { + m_master_type = masterTypeFromString(dom_elmt.text()); } else if (m_type == ElementData::Slave ) { if (name == QLatin1String("type")) { diff --git a/sources/properties/elementdata.h b/sources/properties/elementdata.h index 5402d064b..b5561ef44 100644 --- a/sources/properties/elementdata.h +++ b/sources/properties/elementdata.h @@ -134,7 +134,6 @@ class ElementData : public PropertiesInterface ElementData::Type m_type = ElementData::Simple; ElementData::MasterType m_master_type = ElementData::Coil; - int m_max_slaves = -1; ElementData::SlaveType m_slave_type = ElementData::SSimple; ElementData::SlaveState m_slave_state = ElementData::NO; diff --git a/sources/qetgraphicsitem/masterelement.cpp b/sources/qetgraphicsitem/masterelement.cpp index 9d5f59f82..6f2394795 100644 --- a/sources/qetgraphicsitem/masterelement.cpp +++ b/sources/qetgraphicsitem/masterelement.cpp @@ -183,34 +183,3 @@ void MasterElement::aboutDeleteXref() return; } } - -/** - * @brief MasterElement::isFull - * @return true if the master has reached its maximum number of slaves - */ -bool MasterElement::isFull() const -{ - // Lese das Limit aus den XML-Daten (kindInformations) - // Die value() Funktion im DiagramContext nimmt nur einen Parameter! - QVariant max_slaves_variant = kindInformations().value("max_slaves"); - - // Wenn der Wert nicht existiert oder leer ist, ist das Bauteil nie voll - if (!max_slaves_variant.isValid() || max_slaves_variant.toString().isEmpty()) { - return false; - } - - // In Integer umwandeln - int max_slaves = max_slaves_variant.toInt(); - - // Wenn Limit -1 ist, ist der Master nie voll - if (max_slaves == -1) { - return false; - } - - // Wenn die Anzahl der verbundenen Elemente größer oder gleich dem Limit ist, ist er voll - if (connected_elements.size() >= max_slaves) { - return true; - } - - return false; -} diff --git a/sources/qetgraphicsitem/masterelement.h b/sources/qetgraphicsitem/masterelement.h index 23c6feaf1..19ceb9aaf 100644 --- a/sources/qetgraphicsitem/masterelement.h +++ b/sources/qetgraphicsitem/masterelement.h @@ -44,8 +44,6 @@ class MasterElement : public Element void unlinkElement (Element *elmt) override; void initLink (QETProject *project) override; QRectF XrefBoundingRect() const; - - bool isFull() const; // NEU: Prüft, ob das Slave-Limit erreicht ist protected: QVariant itemChange( diff --git a/sources/ui/linksingleelementwidget.cpp b/sources/ui/linksingleelementwidget.cpp index 4a7def2c3..0247989bd 100644 --- a/sources/ui/linksingleelementwidget.cpp +++ b/sources/ui/linksingleelementwidget.cpp @@ -16,7 +16,7 @@ along with QElectroTech. If not, see . */ #include "linksingleelementwidget.h" -#include "../qetgraphicsitem/masterelement.h" + #include "../qetgraphicsitem/conductor.h" #include "../diagram.h" #include "../diagramposition.h" @@ -386,22 +386,7 @@ QVector > LinkSingleElementWidget::availableElements() //If element is linked, remove is parent from the list if(!m_element->isFree()) elmt_vector.removeAll(m_element->linkedElements().first()); - // NEU: Filtere volle Master-Elemente aus der Liste heraus - for (int i = elmt_vector.size() - 1; i >= 0; --i) { - Element *elmt = elmt_vector.at(i); - - // Wenn das Element in der Liste ein Master ist - if (elmt->linkType() == Element::Master) { - - // Wir wandeln den generischen Element-Pointer in einen MasterElement-Pointer um - MasterElement *master = static_cast(elmt); - - // Wenn der Master voll ist, werfen wir ihn aus der Liste! - if (master->isFull()) { - elmt_vector.removeAt(i); - } - } - } + return elmt_vector; } diff --git a/sources/ui/masterpropertieswidget.cpp b/sources/ui/masterpropertieswidget.cpp index d1a346695..1a44571a5 100644 --- a/sources/ui/masterpropertieswidget.cpp +++ b/sources/ui/masterpropertieswidget.cpp @@ -348,34 +348,16 @@ void MasterPropertiesWidget::headerCustomContextMenuRequested(const QPoint &pos) @brief MasterPropertiesWidget::on_link_button_clicked move current item in the free_list to linked_list */ -/** - * @brief MasterPropertiesWidget::on_link_button_clicked - * move current item in the free_list to linked_list - */ void MasterPropertiesWidget::on_link_button_clicked() { - // --- NEU: Prüfen, ob das Master-Limit im UI bereits erreicht ist --- - QVariant max_slaves_variant = m_element->kindInformations().value("max_slaves"); - - if (max_slaves_variant.isValid() && !max_slaves_variant.toString().isEmpty()) { - int max_slaves = max_slaves_variant.toInt(); - - // Wir zählen, wie viele Elemente schon in der "Verbunden"-Liste liegen - if (max_slaves != -1 && ui->m_link_tree_widget->topLevelItemCount() >= max_slaves) { - // Limit erreicht! Wir brechen die Aktion einfach ab. - return; - } - } - // ------------------------------------------------------------------- - - //take the current item from free_list and push it to linked_list + //take the current item from free_list and push it to linked_list QTreeWidgetItem *qtwi = ui->m_free_tree_widget->currentItem(); if (qtwi) { ui->m_free_tree_widget->takeTopLevelItem( - ui->m_free_tree_widget->indexOfTopLevelItem(qtwi)); + ui->m_free_tree_widget->indexOfTopLevelItem(qtwi)); ui->m_link_tree_widget->insertTopLevelItem(0, qtwi); - + if(m_live_edit) apply(); } From 3f1db24d6de9bef3dba1c52d98486af60fab50a1 Mon Sep 17 00:00:00 2001 From: Laurent Trinques Date: Sun, 29 Mar 2026 21:58:32 +0200 Subject: [PATCH 2/3] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a04ddb055..a0831ece4 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ The main goal of the developers is to provide a libre, easy to use and effective ### Version -The current stable version is 0.90 and was released on 2023.01.06. +The current stable version is 0.100 and was released on 2026.01.25. Once it has been officially released, the stable version is always frozen and is no longer developed. New functionalities, bug and issue fixings are further made in the development version (currently 0.100), which can also be [downloaded](https://qelectrotech.org/download.php). From cb47094a1f8c5472c1bc39ad3f6d793e810334ea Mon Sep 17 00:00:00 2001 From: Laurent Trinques Date: Sun, 29 Mar 2026 22:00:43 +0200 Subject: [PATCH 3/3] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a0831ece4..310f8abf7 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ The main goal of the developers is to provide a libre, easy to use and effective The current stable version is 0.100 and was released on 2026.01.25. Once it has been officially released, the stable version is always frozen and is no longer developed. -New functionalities, bug and issue fixings are further made in the development version (currently 0.100), which can also be [downloaded](https://qelectrotech.org/download.php). +New functionalities, bug and issue fixings are further made in the development version (currently 0.100.1 or 0.200.0 if based on new Qt6 port), which can also be [downloaded](https://qelectrotech.org/download.php). Users who want to test and take benefits from the last software implementations should use the development version. But... use it at your own risk, since things are sometimes broken or only partially implemented until they are done!