/* 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 PROJECTCONFIGPAGES_H #define PROJECTCONFIGPAGES_H #include "configpage.h" #include #include #include "../../autoNum/autonumschemecommand.h" class QLabel; class QComboBox; class QLineEdit; class QCheckBox; class QPushButton; class QSpinBox; class QGroupBox; class QETProject; class BorderPropertiesWidget; class ConductorPropertiesWidget; class DiagramContextWidget; class ReportPropertieWidget; class XRefPropertiesWidget; class SelectAutonumW; class QTabWidget; class QGroupBox; class Element; class QTableWidget; class ElementAutoNumSchemeCommand; class FolioAutonumberingW; class FormulaAutonumberingW; class AutoNumberingManagementW; /** @brief The ProjectConfigPage class This class, derived from ConfigPage, aims at providing the basic skeleton for a project configuration page. */ class ProjectConfigPage : public ConfigPage { Q_OBJECT // Constructor, destructor public: ProjectConfigPage(QETProject *, QWidget * = nullptr); ~ProjectConfigPage() override; private: ProjectConfigPage(const ProjectConfigPage &); // methods public: virtual QETProject *project() const; virtual QETProject *setProject(QETProject *project, bool = true); void applyConf() override; /** Apply configuration to the project after user input. This method is automatically called when the ConfigDialog is validated, and only if the project is both non-zero and not read-only. */ virtual void applyProjectConf() = 0; protected: virtual void init(); /** Use this pure virtual method to initialize your page widgets. */ virtual void initWidgets() = 0; /** Use this pure virtual method to initialize your page layout. This method is always called after initWidgets(). */ virtual void initLayout() = 0; /** Use this pure virtual method to fill widgets with project values. */ virtual void readValuesFromProject() = 0; /** Use this pure virtual method to adjust the "read only" state of your page widgets according to the currently edited project. */ virtual void adjustReadOnly() = 0; // attributes protected: QETProject *m_project; ///< Currently edited project }; /** This page enables users to configure the main properties of a project. */ class ProjectMainConfigPage : public ProjectConfigPage { Q_OBJECT // Constructor, destructor public: ProjectMainConfigPage(QETProject *, QWidget * = nullptr); ~ProjectMainConfigPage() override; private: ProjectMainConfigPage(const ProjectMainConfigPage &); // methods public: QString title() const override; QIcon icon() const override; void applyProjectConf() override; QString projectTitle() const; protected: void initWidgets() override; void initLayout() override; void readValuesFromProject() override; void adjustReadOnly() override; private slots: void resetUsageTracker(); void updateWiringRulesWidgets(); // attributes protected: QLabel *title_label_; QLineEdit *title_value_; QLabel *title_information_; QLabel *project_variables_label_; DiagramContextWidget *project_variables_; QLabel *usage_label_; QLabel *usage_value_; QCheckBox *usage_enabled_cb_; QPushButton *usage_reset_pb_; QLabel *wire_hops_label_; QComboBox *wire_hops_cb_; QGroupBox *wiring_rules_gb_; QCheckBox *use_application_rules_cb_; QLabel *max_wires_label_; QSpinBox *max_wires_sb_; QCheckBox *one_wire_per_report_cb_; QLabel *wiring_rules_off_label_; }; class ProjectAutoNumConfigPage : public ProjectConfigPage { Q_OBJECT //Methods public: ProjectAutoNumConfigPage (QETProject *project, QWidget *parent = nullptr); QString title() const override; QIcon icon() const override; void applyProjectConf() override; virtual void changeToTab(int); protected: void initWidgets() override; void initLayout() override {} void readValuesFromProject() override; void adjustReadOnly() override; private: void buildConnections(); private slots: void updateContextConductor(const QString&);//conductor void saveContextConductor(); void removeContextConductor(); void updateContextFolio(const QString&);//folio void saveContextFolio(); void removeContextFolio(); void updateContextElement(const QString&);//element void saveContextElement(); void removeContextElement(); void newContextElement(); void renameContextElement(); void refreshElementSchemes(const QString &selected); void refreshElementUsers(); void assignFreeNumber(); void updateAssignNumberButton(); void newContextConductor(); void renameContextConductor(); void newContextFolio(); void renameContextFolio(); QString askElementSchemeName(const QString &title, QString name, const QString &ignored_title); bool pushElementSchemeCommand(ElementAutoNumSchemeCommand *cmd); void importFromProject(); void applyAutoNum(); void applyManagement(); private: //Conductor and folio numberings using SchemeKind = AutoNumSchemeCommand::Kind; SelectAutonumW *sawFor(SchemeKind kind) const; void refreshSchemes(SchemeKind kind, const QString &selected); void refreshSchemeUsers(SchemeKind kind); QString askSchemeName(SchemeKind kind, const QString &title, QString name, const QString &ignored_title); void newScheme(SchemeKind kind); void renameScheme(SchemeKind kind); void saveScheme(SchemeKind kind); void removeScheme(SchemeKind kind); signals: void setAutoNum(QString); void setAutoNum(int,int); void saveCurrentTbp(); void loadSavedTbp(); //Attributes private: SelectAutonumW *m_saw_conductor; SelectAutonumW *m_saw_folio; SelectAutonumW *m_saw_element; QTabWidget *m_tab_widget = nullptr; QGroupBox *m_conductor_users_box = nullptr; QTableWidget *m_conductor_users = nullptr; QGroupBox *m_folio_users_box = nullptr; QTableWidget *m_folio_users = nullptr; QGroupBox *m_element_users_box = nullptr; QTableWidget *m_element_users = nullptr; QPushButton *m_assign_number_pb = nullptr; QVector> m_element_rows; ///< the element of each row of the table, none for a gap FolioAutonumberingW *m_faw; AutoNumberingManagementW *m_amw; QPushButton *m_import_pb = nullptr; }; #endif