QElectroTech 0.200.1-dev
Loading...
Searching...
No Matches
projectview.h
Go to the documentation of this file.
1/*
2 Copyright 2006-2026 The QElectroTech Team
3 This file is part of QElectroTech.
4
5 QElectroTech is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 2 of the License, or
8 (at your option) any later version.
9
10 QElectroTech is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
17*/
18#ifndef PROJECT_VIEW_H
19#define PROJECT_VIEW_H
20
21#include "qetresult.h"
23
24#include <QCloseEvent>
25#include <QTabBar>
26#include <QWidget>
27#include <QtWidgets>
28
29#ifdef Q_OS_MACOS
30
31class WheelEnabledTabBar : public QTabWidget
32{
33public:
34 WheelEnabledTabBar(QWidget *parent = nullptr)
35 : QTabWidget(parent)
36 {}
37
38 void wheelEvent(QWheelEvent *event) override
39 {
40 // Only intercept if Ctrl is held down
41 if (event->modifiers() & Qt::ControlModifier) {
42 int index = currentIndex();
43 if (index != -1) {
44 // angleDelta().y() is usually 120 per click.
45 // Dividing by 120 gives you exactly +1 (scroll up) or -1 (scroll down)
46 int steps = event->angleDelta().y() / 120;
47
48 if (steps != 0) {
49 int newIndex = index - steps;
50
51 if (newIndex >= 0 && newIndex < count())
52 setCurrentIndex(newIndex);
53 }
54 }
55 event->accept(); // Mark event handled so parent widgets don't process it
56 } else {
57 // Allow the default QTabWidget wheel behavior to process if Ctrl isn't held
58 QTabWidget::wheelEvent(event);
59 }
60 }
61};
62#endif
63
64
65class QETProject;
66class DiagramView;
67class Diagram;
69class QTabWidget;
70class QLabel;
71class QVBoxLayout;
72
73
79class ProjectView : public QWidget
80{
81 Q_OBJECT
82
83 // constructors, destructor
84 public:
85 ProjectView(QETProject *, QWidget * = nullptr);
86 ~ProjectView() override;
87 private:
89
90 //Method related to construction of this class
92
93
94
95 // methods
96 public:
98 QList<DiagramView *> diagram_views() const;
100 void closeEvent(QCloseEvent *) override;
101 void changeTabUp();
102 void changeTabDown();
103 void changeFirstTab();
104 void changeLastTab();
105 void setDiagramPosition(Diagram *diagram, int new_position);
106
107 public slots:
108 void removeDiagram(DiagramView *diagram_view, bool silent = false);
109 void removeDiagram(Diagram *diagram, bool silent = false);
110 void showDiagram(DiagramView *);
111 void showDiagram(Diagram *);
117 void moveDiagramUp(Diagram *);
119 void moveDiagramDown(Diagram *);
130 void exportProject();
131 QETResult save();
134 int cleanProject();
135 void updateWindowTitle();
137 void updateAllTabsTitle();
138 void tabMoved(int, int);
139
140 signals:
145 void errorEncountered(const QString &);
146 // relayed signals
148
149 private:
150 void initActions();
151 void initWidgets();
152 void initLayout();
153 void loadDiagrams();
159 void rebuildDiagramsMap();
160 bool tryClosing();
162 int tryClosingDiagrams();
163 QString askUserForFilePath(bool = true);
165
166 private slots:
167 void tabChanged(int);
168 void tabDoubleClicked(int);
169 void setDisplayFallbackWidget(bool);
170 void adjustReadOnlyState();
171 void diagramAdded(Diagram *diagram);
172 void diagramRemoved(Diagram *diagram);
173
174 // attributes
175 private:
182 QVBoxLayout *layout_;
185
186#ifdef Q_OS_MACOS
187 WheelEnabledTabBar *m_tab;
188#else
189 QTabWidget *m_tab;
190#endif
191
192 QMap<int, DiagramView *> m_diagram_ids;
194 QList<DiagramView *> m_diagram_view_list;
195};
196
197
198#endif
The Diagram class This class represents an electric diagram. It manages its various child elements,...
Definition diagram.h:54
Definition diagramview.h:39
The ElementsLocation class This class represents the location, the location of an element or of a cat...
Definition elementslocation.h:47
DiagramView * firstDiagram()
Definition projectview.cpp:216
void updateTabTitle(DiagramView *)
ProjectView::updateTabTitle Update the title of the tab which display the diagram view.
Definition projectview.cpp:1044
QList< DiagramView * > m_diagram_view_list
Definition projectview.h:194
QAction * m_add_new_diagram
Definition projectview.h:176
void closeEvent(QCloseEvent *) override
Definition projectview.cpp:126
void rebuildDiagramsMap()
Definition projectview.cpp:1165
ProjectView(const ProjectView &)
void adjustReadOnlyState()
Definition projectview.cpp:998
~ProjectView() override
Definition projectview.cpp:59
void setDisplayFallbackWidget(bool)
Definition projectview.cpp:1220
QList< DiagramView * > diagram_views() const
Definition projectview.cpp:105
QLabel * fallback_label_
Definition projectview.h:184
int tryClosingDiagrams()
ProjectView::tryClosingDiagrams try to close this project, if diagram or project option are changed a...
Definition projectview.cpp:308
void moveDiagramDownx100(DiagramView *)
ProjectView::moveDiagramDownx100 Moves the diagram_view down / right x100.
Definition projectview.cpp:628
DiagramView * currentDiagram() const
ProjectView::currentDiagram.
Definition projectview.cpp:114
DiagramView * findDiagram(Diagram *)
Definition projectview.cpp:1153
void editCurrentDiagramProperties()
Definition projectview.cpp:491
void moveDiagramDown(DiagramView *)
Definition projectview.cpp:536
void moveDiagramDownx10(DiagramView *)
Definition projectview.cpp:651
void changeFirstTab()
change current diagramview to first tab
Definition projectview.cpp:206
void editProjectProperties()
Definition projectview.cpp:481
void moveDiagramUp(DiagramView *)
Definition projectview.cpp:515
void setDiagramPosition(Diagram *diagram, int new_position)
ProjectView::setDiagramPosition Move diagram's tab to new_position (out-of-range values are clamped b...
Definition projectview.cpp:1121
void setProject(QETProject *project)
ProjectView::setProject Set the project display by the project view.
Definition projectview.cpp:78
void diagramActivated(DiagramView *)
QMap< int, DiagramView * > m_diagram_ids
Definition projectview.h:192
void updateWindowTitle()
ProjectView::updateWindowTitle Update the project view title.
Definition projectview.cpp:983
QVBoxLayout * layout_
Definition projectview.h:182
QWidget * fallback_widget_
Definition projectview.h:183
void moveDiagramUpx10(DiagramView *)
Definition projectview.cpp:580
void changeTabDown()
change current diagramview to next folio
Definition projectview.cpp:139
bool tryClosing()
Definition projectview.cpp:233
int cleanProject()
Definition projectview.cpp:741
DiagramView * nextDiagram()
Definition projectview.cpp:151
void showDiagram(DiagramView *)
Definition projectview.cpp:461
void diagramAdded(DiagramView *)
void changeTabUp()
change current diagramview to previous tab
Definition projectview.cpp:164
void initActions()
Definition projectview.cpp:802
DiagramView * previousDiagram()
Definition projectview.cpp:176
void initLayout()
Definition projectview.cpp:914
bool tryClosingElementEditors()
Definition projectview.cpp:283
void loadDiagrams()
ProjectView::loadDiagrams Load diagrams of project. We create a diagram view for each diagram,...
Definition projectview.cpp:937
void errorEncountered(const QString &)
void exportProject()
Definition projectview.cpp:672
ProjectView(QETProject *, QWidget *=nullptr)
Definition projectview.cpp:44
QTabWidget * m_tab
Definition projectview.h:189
QETResult save()
Definition projectview.cpp:689
QETProject * project()
Definition projectview.cpp:68
void projectClosed(ProjectView *)
void tabMoved(int, int)
Definition projectview.cpp:1086
void editDiagramProperties(DiagramView *)
Definition projectview.cpp:499
void moveDiagramUpTop(DiagramView *)
Definition projectview.cpp:557
DiagramView * lastDiagram()
Definition projectview.cpp:198
void removeDiagram(DiagramView *diagram_view, bool silent=false)
ProjectView::removeDiagram Remove a diagram (folio) of the project.
Definition projectview.cpp:390
void updateAllTabsTitle()
ProjectView::updateAllTabsTitle Update all tabs title.
Definition projectview.cpp:1076
void tabChanged(int)
ProjectView::tabChanged Manage the tab change. If tab_id == -1 (there is no diagram opened),...
Definition projectview.cpp:1184
void tabDoubleClicked(int)
Definition projectview.cpp:1206
void initWidgets()
Definition projectview.cpp:825
QETProject * m_project
Definition projectview.h:181
QETResult doSave()
Definition projectview.cpp:716
QETResult saveAs()
Definition projectview.cpp:701
QAction * m_next_view_left
Definition projectview.h:179
int m_previous_tab_index
Definition projectview.h:193
void changeLastTab()
change current diagramview to last tab
Definition projectview.cpp:189
QAction * m_first_view
Definition projectview.h:177
void diagramRemoved(DiagramView *)
void moveDiagramUpx100(DiagramView *)
ProjectView::moveDiagramUpx100 Moves the diagram_view up / left x100.
Definition projectview.cpp:603
QString askUserForFilePath(bool=true)
Definition projectview.cpp:340
void findElementRequired(const ElementsLocation &)
QETResult noProjectResult() const
Definition projectview.cpp:378
QAction * m_end_view
Definition projectview.h:178
QAction * m_next_view_right
Definition projectview.h:180
Definition qetproject.h:77
Definition qetresult.h:26