mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-10-24 16:04:16 +02:00
Merge pull request #881 from Kellermorph/checkbox-master-slave
Add Hide full masters checkbox to slave linking widget
This commit is contained in:
@@ -25,10 +25,14 @@
|
||||
#include "../undocommand/linkelementcommand.h"
|
||||
#include "../qetinformation.h"
|
||||
#include "../qetproject.h"
|
||||
#include "../qetgraphicsitem/masterelement.h"
|
||||
#include "../ui_linksingleelementwidget.h"
|
||||
|
||||
#include <QTreeWidgetItem>
|
||||
#include <QInputDialog>
|
||||
#include <QCheckBox>
|
||||
#include <QSettings>
|
||||
#include <QSignalBlocker>
|
||||
|
||||
|
||||
/**
|
||||
@@ -52,6 +56,22 @@ LinkSingleElementWidget::LinkSingleElementWidget(Element *elmt,
|
||||
m_show_qtwi = new QAction(tr("Montrer l'élément"), this);
|
||||
m_show_element = new QAction(tr("Montrer l'élément esclave"), this);
|
||||
m_save_header_state = new QAction(tr("Enregistrer la disposition"), this);
|
||||
|
||||
// Hide the full-masters checkbox for non-slave elements
|
||||
const bool is_slave = (elmt && elmt->elementData().m_type == ElementData::Slave);
|
||||
ui->m_hide_full_masters_cb->setVisible(is_slave);
|
||||
|
||||
// Restore persisted state before connecting to avoid toggled firing buildTree()
|
||||
// while m_element is still null.
|
||||
{
|
||||
const QSignalBlocker blocker(ui->m_hide_full_masters_cb);
|
||||
QSettings settings;
|
||||
ui->m_hide_full_masters_cb->setChecked(
|
||||
settings.value(QStringLiteral("link-element-widget/hideFullMasters"), false).toBool());
|
||||
}
|
||||
|
||||
connect(ui->m_hide_full_masters_cb, &QCheckBox::toggled,
|
||||
this, &LinkSingleElementWidget::hideFullMastersToggled);
|
||||
|
||||
connect(m_show_qtwi, &QAction::triggered, this, [=]()
|
||||
{
|
||||
@@ -249,6 +269,7 @@ void LinkSingleElementWidget::buildTree()
|
||||
|
||||
if (m_element->elementData().m_type == ElementData::Slave)
|
||||
{
|
||||
m_full_masters.clear();
|
||||
|
||||
for(const auto &elmt : elmt_vector)
|
||||
{
|
||||
@@ -288,6 +309,16 @@ void LinkSingleElementWidget::buildTree()
|
||||
QTreeWidgetItem *qtwi = new QTreeWidgetItem(ui->m_tree_widget, str_list);
|
||||
m_qtwi_elmt_hash.insert(qtwi, elmt);
|
||||
m_qtwi_strl_hash.insert(qtwi, search_list);
|
||||
|
||||
// Check if this master is full
|
||||
if (elmt->linkType() == Element::Master) {
|
||||
MasterElement *me = qobject_cast<MasterElement*>(elmt);
|
||||
if (me && me->isFull()) {
|
||||
m_full_masters.insert(qtwi);
|
||||
if (ui->m_hide_full_masters_cb->isChecked())
|
||||
qtwi->setHidden(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -455,6 +486,8 @@ void LinkSingleElementWidget::setUpCompleter()
|
||||
*/
|
||||
void LinkSingleElementWidget::clearTreeWidget()
|
||||
{
|
||||
m_pending_qtwi = nullptr;
|
||||
|
||||
while(ui->m_tree_widget->topLevelItemCount())
|
||||
{
|
||||
QTreeWidgetItem *qtwi = ui->m_tree_widget->takeTopLevelItem(0);
|
||||
@@ -467,6 +500,7 @@ void LinkSingleElementWidget::clearTreeWidget()
|
||||
|
||||
m_qtwi_elmt_hash.clear();
|
||||
m_qtwi_strl_hash.clear();
|
||||
m_full_masters.clear();
|
||||
}
|
||||
|
||||
void LinkSingleElementWidget::setUpHeaderLabels()
|
||||
@@ -675,6 +709,7 @@ void LinkSingleElementWidget::hideButtons()
|
||||
ui->m_show_linked_pb->hide();
|
||||
ui->m_show_this_pb->hide();
|
||||
ui->m_search_field->show();
|
||||
ui->m_hide_full_masters_cb->show();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -688,6 +723,7 @@ void LinkSingleElementWidget::showButtons()
|
||||
ui->m_show_linked_pb->show();
|
||||
ui->m_show_this_pb->show();
|
||||
ui->m_search_field->hide();
|
||||
ui->m_hide_full_masters_cb->hide();
|
||||
}
|
||||
|
||||
void LinkSingleElementWidget::headerCustomContextMenuRequested(
|
||||
@@ -783,27 +819,35 @@ void LinkSingleElementWidget::on_m_show_this_pb_clicked()
|
||||
If arg1 is empty, show all items.
|
||||
@param arg1
|
||||
*/
|
||||
void LinkSingleElementWidget::on_m_search_field_textEdited(const QString &arg1)
|
||||
void LinkSingleElementWidget::on_m_search_field_textEdited(const QString &)
|
||||
{
|
||||
//Show all items if arg1 is empty, if not hide all items
|
||||
foreach(QTreeWidgetItem *qtwi, m_qtwi_elmt_hash.keys())
|
||||
qtwi->setHidden(!arg1.isEmpty());
|
||||
|
||||
QList <QTreeWidgetItem *> qtwi_list;
|
||||
|
||||
foreach(QTreeWidgetItem *qtwi, m_qtwi_strl_hash.keys())
|
||||
updateItemsVisibility();
|
||||
}
|
||||
|
||||
void LinkSingleElementWidget::hideFullMastersToggled(bool checked)
|
||||
{
|
||||
QSettings settings;
|
||||
settings.setValue(QStringLiteral("link-element-widget/hideFullMasters"), checked);
|
||||
updateItemsVisibility();
|
||||
}
|
||||
|
||||
void LinkSingleElementWidget::updateItemsVisibility()
|
||||
{
|
||||
const QString text = ui->m_search_field->text();
|
||||
const bool hide_full = ui->m_hide_full_masters_cb->isChecked();
|
||||
|
||||
for (auto it = m_qtwi_strl_hash.cbegin(); it != m_qtwi_strl_hash.cend(); ++it)
|
||||
{
|
||||
foreach(QString str, m_qtwi_strl_hash.value(qtwi))
|
||||
{
|
||||
if(str.contains(arg1, Qt::CaseInsensitive))
|
||||
{
|
||||
qtwi_list << qtwi;
|
||||
continue;
|
||||
bool match = text.isEmpty();
|
||||
if (!match) {
|
||||
for (const QString &str : it.value()) {
|
||||
if (str.contains(text, Qt::CaseInsensitive)) {
|
||||
match = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
it.key()->setHidden(!match
|
||||
|| (hide_full && m_full_masters.contains(it.key())));
|
||||
}
|
||||
|
||||
//Show items which match with arg1
|
||||
foreach(QTreeWidgetItem *qtwi, qtwi_list)
|
||||
qtwi->setHidden(false);
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include <QComboBox>
|
||||
|
||||
class QTreeWidgetItem;
|
||||
class QCheckBox;
|
||||
class Element;
|
||||
class QMenu;
|
||||
|
||||
@@ -71,6 +72,7 @@ class LinkSingleElementWidget : public AbstractElementPropertiesEditorWidget
|
||||
void setUpCompleter();
|
||||
void clearTreeWidget();
|
||||
void setUpHeaderLabels();
|
||||
void updateItemsVisibility();
|
||||
|
||||
private slots:
|
||||
void diagramWasRemovedFromProject();
|
||||
@@ -87,6 +89,7 @@ class LinkSingleElementWidget : public AbstractElementPropertiesEditorWidget
|
||||
void on_m_show_this_pb_clicked();
|
||||
|
||||
void on_m_search_field_textEdited(const QString &arg1);
|
||||
void hideFullMastersToggled(bool checked);
|
||||
|
||||
private:
|
||||
Ui::LinkSingleElementWidget *ui;
|
||||
@@ -103,6 +106,8 @@ class LinkSingleElementWidget : public AbstractElementPropertiesEditorWidget
|
||||
Element *m_showed_element = nullptr,
|
||||
*m_element_to_link = nullptr;
|
||||
|
||||
QSet<QTreeWidgetItem*> m_full_masters;
|
||||
|
||||
int m_pending_group_index = -1;
|
||||
|
||||
QMenu *m_context_menu{nullptr};
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0" colspan="3">
|
||||
<item row="4" column="0" colspan="3">
|
||||
<widget class="QTreeWidget" name="m_tree_widget">
|
||||
<property name="indentation">
|
||||
<number>5</number>
|
||||
@@ -57,30 +57,20 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0" colspan="3">
|
||||
<item row="3" column="0" colspan="3">
|
||||
<widget class="QLineEdit" name="m_search_field">
|
||||
<property name="placeholderText">
|
||||
<string>Recherche</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
||||
<item row="4" column="0" colspan="3">
|
||||
<widget class="QLabel" name="m_hidden_masters_label">
|
||||
<item row="2" column="0" colspan="3">
|
||||
<widget class="QCheckBox" name="m_hide_full_masters_cb">
|
||||
<property name="text">
|
||||
<string>Remarque : les éléments maîtres ayant atteint leur nombre maximal d'esclaves sont masqués.</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<italic>true</italic>
|
||||
</font>
|
||||
<string>Masquer les éléments maîtres pleins</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
|
||||
Reference in New Issue
Block a user