/* Copyright 2006-2021 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 QET_DIAGRAM_EDITOR_H #define QET_DIAGRAM_EDITOR_H #include "SearchAndReplace/ui/searchandreplacewidget.h" #include "qetmainwindow.h" #include #include #include #include #include #include class QMdiSubWindow; class QETProject; class QETResult; class ProjectView; class CustomElement; class Diagram; class DiagramView; class Element; class ElementsPanelWidget; class ElementsLocation; class RecentFiles; class DiagramPropertiesEditorDockWidget; class ElementsCollectionWidget; class AutoNumberingDockWidget; #ifdef BUILD_WITHOUT_KF5 #else class KAutoSaveFile; #endif /** This class represents the main window of the QElectroTech diagram editor and, ipso facto, the most important part of the QElectroTech user interface. */ class QETDiagramEditor : public QETMainWindow { Q_OBJECT public: QETDiagramEditor( const QStringList & = QStringList(), QWidget * = nullptr); ~QETDiagramEditor() override; void closeEvent (QCloseEvent *) override; QList openedProjects () const; void addProjectView (ProjectView *); bool openAndAddProject (const QString &, bool = true); QList editedFiles () const; ProjectView *viewForFile (const QString &) const; ProjectView *currentProjectView() const; QETProject *currentProject() const; bool drawGrid() const; #ifdef BUILD_WITHOUT_KF5 #else void openBackupFiles (QList backup_files); #endif protected: bool event(QEvent *) override; private: QETDiagramEditor(const QETDiagramEditor &); void setUpElementsPanel (); void setUpElementsCollectionWidget(); void setUpUndoStack (); void setUpSelectionPropertiesEditor(); void setUpAutonumberingWidget(); void setUpActions (); void setUpToolBar (); void setUpMenu (); bool addProject(QETProject *, bool = true); DiagramView *currentDiagramView() const; Element *currentElement() const; ProjectView *findProject(DiagramView *) const; ProjectView *findProject(Diagram *) const; ProjectView *findProject(QETProject *) const; ProjectView *findProject(const QString &) const; QMdiSubWindow *subWindowForWidget(QWidget *) const; public slots: void save(); void saveAs(); bool newProject(); bool openProject(); bool openRecentFile(const QString &); bool closeProject(ProjectView *); bool closeProject(QETProject *); void zoomGroupTriggered (QAction *action); void selectGroupTriggered (QAction *action); void addItemGroupTriggered (QAction *action); void selectionGroupTriggered (QAction *action); void rowColumnGroupTriggered (QAction *action); void slot_updateActions(); void slot_updateUndoStack(); void slot_updateModeActions(); void slot_updateComplexActions(); void slot_updatePasteAction(); void slot_updateWindowsMenu(); void slot_updateAutoNumDock(); void generateTerminalBlock(); void setWindowedMode(); void setTabbedMode(); void readSettings(); void writeSettings(); void activateProject(QETProject *); void activateProject(ProjectView *); void activateWidget(QWidget *); void projectWasClosed(ProjectView *); void editProjectProperties(ProjectView *); void editProjectProperties(QETProject *); void editDiagramProperties(DiagramView *); void editDiagramProperties(Diagram *); void addDiagramToProject(QETProject *); void removeDiagram(Diagram *); void removeDiagramFromProject(); void moveDiagramUp(Diagram *); void moveDiagramDown(Diagram *); void moveDiagramUpTop(Diagram *); void moveDiagramUpx10(Diagram *); void moveDiagramDownx10(Diagram *); void reloadOldElementPanel(); void diagramWasAdded(DiagramView *); void findElementInPanel(const ElementsLocation &); void showError(const QETResult &); void showError(const QString &); void subWindowActivated(QMdiSubWindow *subWindows); private slots: void selectionChanged(); public: QAction *m_edit_diagram_properties, ///< Show a dialog to edit diagram properties *m_conductor_reset, ///< Reset paths of selected conductors *m_cut, ///< Cut selection to clipboard *m_copy; ///< Copy selection to clipboard QActionGroup m_row_column_actions_group, /// Action related to add/remove rows/column in diagram m_selection_actions_group, ///Action related to edit a selected item *m_depth_action_group = nullptr; private: QActionGroup *grp_visu_sel, ///< Action group for visualisation vs edition mode *m_group_view_mode, ///< Action group for project m_add_item_actions_group, ///Action related to adding (add text image shape...) m_zoom_actions_group, ///Action related to zoom for diagram m_select_actions_group, ///Action related to global selections m_file_actions_group; ///Actions related to file (open, close, save...) QAction *m_tabbed_view_mode, ///< Display projects as tabs *m_windowed_view_mode, ///< Display projects as windows *m_mode_selection, ///< Set edition mode *m_mode_visualise, ///< Set visualisation mode *m_export_to_images, ///< Export diagrams of the current project as imagess *m_export_to_pdf = nullptr, ///< Export project to pdf. *m_print, ///< Print diagrams of the current project *m_quit_editor, ///< Quit the diagram editor *undo, ///< Cancel the latest action *redo, ///< Redo the latest cancelled operation *m_paste, ///< Paste clipboard content on the current diagram *m_auto_conductor, ///< Enable/Disable the use of auto conductor *conductor_default, ///< Show a dialog to edit default conductor properties *m_grey_background, ///< Switch the background color in white or grey *m_draw_grid, ///< Switch the background grid display or not *m_project_edit_properties, ///< Edit the properties of the current project. *m_project_add_diagram, ///< Add a diagram to the current project. *m_remove_diagram_from_project, ///< Delete a diagram from the current project *m_clean_project, ///< Clean the content of the curent project by removing useless items *m_project_folio_list, ///< Sommaire des schemas *m_csv_export, ///< generate nomenclature *m_add_nomenclature, ///< Add nomenclature graphics item; *m_add_summary, /// m_zoom_action_toolBar; ///Only zoom action must displayed in the toolbar QMdiArea m_workspace; QSignalMapper windowMapper; QDir open_dialog_dir; /// Directory to use for file dialogs such as File > save QDockWidget *qdw_pa, /// Dock for the elements panel *m_qdw_elmt_collection, *qdw_undo; /// Dock for the undo list ElementsCollectionWidget *m_element_collection_widget; DiagramPropertiesEditorDockWidget *m_selection_properties_editor; /// Elements panel ElementsPanelWidget *pa; QMenu *windows_menu; QToolBar *main_tool_bar = nullptr, *view_tool_bar = nullptr, *diagram_tool_bar = nullptr, *m_add_item_tool_bar = nullptr, *m_depth_tool_bar = nullptr; QUndoGroup undo_group; AutoNumberingDockWidget *m_autonumbering_dock; int activeSubWindowIndex; bool m_first_show = true; SearchAndReplaceWidget m_search_and_replace_widget; }; #endif