diff --git a/sources/ui/linksingleelementwidget.cpp b/sources/ui/linksingleelementwidget.cpp index 7cc04559d..e2c3c8b38 100644 --- a/sources/ui/linksingleelementwidget.cpp +++ b/sources/ui/linksingleelementwidget.cpp @@ -17,7 +17,6 @@ */ #include "linksingleelementwidget.h" #include "contactgroupselectiondialog.h" -#include "../qetgraphicsitem/masterelement.h" #include "../qetgraphicsitem/conductor.h" #include "../diagram.h" #include "../diagramposition.h" @@ -418,11 +417,12 @@ QVector > LinkSingleElementWidget::availableElements() continue; } - // If the master is full, we'll remove it from the list! - MasterElement *master = static_cast(elmt); - if (master->isFull()) { - elmt_vector.removeAt(i); - } + // A master at its declared limit stays in the list. Removing + // it made a full master indistinguishable from one that does + // not exist: the candidate simply was not there, with nothing + // to say why. The limit is advisory -- see the prompt in + // MasterPropertiesWidget::on_link_button_clicked() -- so the + // user decides, rather than the list deciding for them. } } return elmt_vector; diff --git a/sources/ui/masterpropertieswidget.cpp b/sources/ui/masterpropertieswidget.cpp index bd5500e09..339938d06 100644 --- a/sources/ui/masterpropertieswidget.cpp +++ b/sources/ui/masterpropertieswidget.cpp @@ -307,15 +307,24 @@ void MasterPropertiesWidget::on_link_button_clicked() int max_slaves = max_slaves_variant.toInt(); int current_slaves = ui->m_link_tree_widget->topLevelItemCount(); - // If a limit is set and reached + // If a limit is set and reached, say so but let the user decide. + // The limit records how many contacts the part is expected to + // carry; it is not a rule the drawing has to obey, and refusing + // the link obstructs drawing a schematic before the hardware has + // been chosen. if (max_slaves != -1 && current_slaves >= max_slaves) { - // Show a message box with the actual window as parent to ensure it's on top - QMessageBox::warning(this->window(), - tr("Nombre maximal d'esclaves atteint."), - tr("Cet élément maître ne peut plus accepter aucun nouveau contact esclave, la limite fixée a été atteinte (Limite: %1).").arg(max_slaves)); - return; + const auto answer = QMessageBox::warning( + this->window(), + tr("Nombre maximal d'esclaves atteint."), + tr("La limite fixée pour cet élément maître est atteinte (Limite: %1).\n\n" + "Voulez-vous tout de même lier ce contact esclave ?").arg(max_slaves), + QMessageBox::Yes | QMessageBox::No, + QMessageBox::Yes); + if (answer != QMessageBox::Yes) { + return; + } } }