/* Copyright 2006-2026 The QElectroTech Team This file is part of QElectroTech. QElectroTech is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. QElectroTech is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with QElectroTech. If not, see . */ #ifndef MASTERPROPERTIESWIDGET_H #define MASTERPROPERTIESWIDGET_H #include #include #include #include "abstractelementpropertieseditorwidget.h" class Element; class QUndoCommand; class QETProject; class Diagram; class QTreeWidgetItem; class QMenu; class QAction; class QTableWidget; class QSpinBox; class QCheckBox; class QComboBox; namespace Ui { class MasterPropertiesWidget; } /** @brief The MasterPropertiesWidget class This class is a widget for make link between a master element with several slave element. This class embenddedthe undo/redo command when apply new connection. */ class MasterPropertiesWidget : public AbstractElementPropertiesEditorWidget { Q_OBJECT public: explicit MasterPropertiesWidget(Element *elmt, QWidget *parent = nullptr); ~MasterPropertiesWidget() override; void setElement (Element *element) override; void apply() override; void reset() override; QUndoCommand *associatedUndo () const override; /** @brief title @return QString title */ QString title() const override { return tr("Référence croisée (maître)");} bool setLiveEdit(bool live_edit) override; public slots: void updateUi() override; private slots: void headerCustomContextMenuRequested(const QPoint &pos); void on_link_button_clicked(); void on_unlink_button_clicked(); void showElementFromTWI(QTreeWidgetItem *qtwi, int column); void showedElementWasDeleted (); void diagramWasdeletedFromProject(); void customContextMenu(const QPoint &pos, int i=0); // PLC IO table slots void plcPasteFromClipboard(); void setCellFromValue(int row, int col, const QString &val); void plcAddRow(); void plcRemoveRow(); void plcMoveRowUp(); void plcMoveRowDown(); void plcIOCellChanged(int row, int column); void plcUpdateDisplaySettings(); void plcShowTableContextMenu(const QPoint &pos); private: Ui::MasterPropertiesWidget *ui; QHash m_qtwi_hash; QMap m_pending_group_indices; QTreeWidgetItem *m_qtwi_at_context_menu = nullptr; QPointer m_showed_element; QETProject *m_project; QMenu *m_context_menu; QAction *m_link_action, *m_unlink_action, *m_show_qtwi, *m_show_element, *m_save_header_state; // PLC-specific members QWidget *m_plc_widget = nullptr; QTableWidget *m_plc_table = nullptr; QCheckBox *m_plc_break_checkboxes[4] = {nullptr, nullptr, nullptr, nullptr}; QSpinBox *m_plc_break_spinboxes[4] = {nullptr, nullptr, nullptr, nullptr}; QSpinBox *m_plc_row_height_spinbox = nullptr; QList m_plc_col_visibility_checkboxes; QList m_plc_col_width_spinboxes; bool m_plc_updating = false; // Guard against recursive updates }; #endif // MASTERPROPERTIESWIDGET_H