From a4d213e8f4e190d1ba96c710a2cafda6ab483ea8 Mon Sep 17 00:00:00 2001 From: blacksun Date: Sat, 18 Feb 2017 13:30:38 +0000 Subject: [PATCH] Project view : prepend the positon number or the folio label (acording the configuration of qet) in the title of each diagram view tabs. git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@4918 bfdf4180-ca20-0410-9c96-a3a8aa849046 --- sources/projectview.cpp | 158 +++++++++++++++++++++-------------- sources/projectview.h | 84 +++++++++---------- sources/qetdiagrameditor.cpp | 16 ++-- sources/qetmainwindow.cpp | 16 +++- 4 files changed, 157 insertions(+), 117 deletions(-) diff --git a/sources/projectview.cpp b/sources/projectview.cpp index 309e1d0b1..f14746bae 100644 --- a/sources/projectview.cpp +++ b/sources/projectview.cpp @@ -32,6 +32,7 @@ #include "diagramfoliolist.h" #include "projectpropertiesdialog.h" #include "xmlelementcollection.h" +#include "autoNum/assignvariables.h" /** Constructeur @@ -55,8 +56,8 @@ ProjectView::ProjectView(QETProject *project, QWidget *parent) : */ ProjectView::~ProjectView() { // qDebug() << "Suppression du ProjectView" << ((void *)this); - foreach(int id, diagram_ids_.keys()) { - DiagramView *diagram_view = diagram_ids_.take(id); + foreach(int id, m_diagram_ids.keys()) { + DiagramView *diagram_view = m_diagram_ids.take(id); delete diagram_view; } } @@ -88,7 +89,7 @@ void ProjectView::setProject(QETProject *project) { /** @return la liste des schemas ouverts dans le projet */ -QList ProjectView::diagrams() const { +QList ProjectView::diagram_views() const { return(m_diagram_view_list); } @@ -123,7 +124,7 @@ DiagramView *ProjectView::currentDiagram() const { int current_tab_index = m_tab -> currentIndex(); if (current_tab_index == -1) return nullptr; - return(diagram_ids_[current_tab_index]); + return(m_diagram_ids[current_tab_index]); } /** @@ -157,8 +158,8 @@ void ProjectView::changeTabDown(){ DiagramView *ProjectView::nextDiagram() { int current_tab_index = m_tab -> currentIndex(); int next_tab_index = current_tab_index + 1; //get next tab index - if (next_tab_index= greatest tab the last tab is activated so no need to change tab. - return(diagram_ids_[next_tab_index]); + if (next_tab_index= greatest tab the last tab is activated so no need to change tab. + return(m_diagram_ids[next_tab_index]); else return NULL; } @@ -181,7 +182,7 @@ DiagramView *ProjectView::previousDiagram() { int current_tab_index = m_tab -> currentIndex(); int previous_tab_index = current_tab_index - 1; //get previous tab index if (previous_tab_index>=0) //if previous tab index = 0 then the first tab is activated so no need to change tab. - return(diagram_ids_[previous_tab_index]); + return(m_diagram_ids[previous_tab_index]); else return NULL; } @@ -198,7 +199,7 @@ void ProjectView::changeLastTab(){ @return last folio of current project */ DiagramView *ProjectView::lastDiagram(){ - return(diagram_ids_.last()); + return(m_diagram_ids.last()); } /** @@ -213,7 +214,7 @@ void ProjectView::changeFirstTab(){ @return first folio of current project */ DiagramView *ProjectView::firstDiagram(){ - return(diagram_ids_.first()); + return(m_diagram_ids.first()); } @@ -393,41 +394,41 @@ void ProjectView::addNewDiagramFolioList() { DiagramView *new_diagram_view = new DiagramView(d); addDiagram(new_diagram_view); showDiagram(new_diagram_view); - m_tab->tabBar()->moveTab(diagrams().size()-1, i); + m_tab->tabBar()->moveTab(diagram_views().size()-1, i); i++; } } -/** - Ajoute un schema au ProjectView - @param diagram Schema a ajouter -*/ /** * @brief ProjectView::addDiagram - * Add new digram to this project view - * @param diagram added diagram - * @param front: true add page at front - * false add page at back + * Add diagram view to this project view + * @param diagram_view */ -void ProjectView::addDiagram(DiagramView *diagram_view) { - if (!diagram_view) return; +void ProjectView::addDiagram(DiagramView *diagram_view) +{ + if (!diagram_view) + return; - // check diagram isn't present in the project - if (diagram_ids_.values().contains(diagram_view)) return; + //Check if diagram isn't present in the project + if (m_diagram_ids.values().contains(diagram_view)) + return; - // Add new tab for the diagram - m_tab -> addTab(diagram_view, QET::Icons::Diagram, diagram_view -> title()); - diagram_view -> setFrameStyle(QFrame::Plain | QFrame::NoFrame); + // Add new tab for the diagram + m_tab->addTab(diagram_view, QET::Icons::Diagram, diagram_view -> title()); + diagram_view->setFrameStyle(QFrame::Plain | QFrame::NoFrame); m_diagram_view_list << diagram_view; rebuildDiagramsMap(); + updateTabTitle(diagram_view); + connect(diagram_view, SIGNAL(showDiagram(Diagram*)), this, SLOT(showDiagram(Diagram*))); - connect(diagram_view, SIGNAL(titleChanged(DiagramView *, const QString &)), this, SLOT(updateTabTitle(DiagramView *, const QString &))); + connect(diagram_view, SIGNAL(titleChanged(DiagramView *, const QString &)), this, SLOT(updateTabTitle(DiagramView *))); connect(diagram_view, SIGNAL(findElementRequired(const ElementsLocation &)), this, SIGNAL(findElementRequired(const ElementsLocation &))); connect(diagram_view, SIGNAL(editElementRequired(const ElementsLocation &)), this, SIGNAL(editElementRequired(const ElementsLocation &))); + connect(&diagram_view->diagram()->border_and_titleblock , &BorderTitleBlock::titleBlockFolioChanged, [this, diagram_view]() {this->updateTabTitle(diagram_view);}); - // signal diagram was added + // signal diagram view was added emit(diagramAdded(diagram_view)); } @@ -440,7 +441,7 @@ void ProjectView::removeDiagram(DiagramView *diagram_view) { if (m_project -> isReadOnly()) return; // verifie que le schema est bien present dans le projet - if (!diagram_ids_.values().contains(diagram_view)) return; + if (!m_diagram_ids.values().contains(diagram_view)) return; //Ask confirmation to user. @@ -456,7 +457,7 @@ void ProjectView::removeDiagram(DiagramView *diagram_view) { } // enleve le DiagramView des onglets - int diagram_tab_id = diagram_ids_.key(diagram_view); + int diagram_tab_id = m_diagram_ids.key(diagram_view); m_tab -> removeTab(diagram_tab_id); m_diagram_view_list.removeAll(diagram_view); rebuildDiagramsMap(); @@ -543,7 +544,7 @@ void ProjectView::editDiagramProperties(Diagram *diagram) { void ProjectView::moveDiagramUp(DiagramView *diagram_view) { if (!diagram_view) return; - int diagram_view_position = diagram_ids_.key(diagram_view); + int diagram_view_position = m_diagram_ids.key(diagram_view); if (!diagram_view_position) { // le schema est le premier du projet return; @@ -564,8 +565,8 @@ void ProjectView::moveDiagramUp(Diagram *diagram) { void ProjectView::moveDiagramDown(DiagramView *diagram_view) { if (!diagram_view) return; - int diagram_view_position = diagram_ids_.key(diagram_view); - if (diagram_view_position + 1 == diagram_ids_.count()) { + int diagram_view_position = m_diagram_ids.key(diagram_view); + if (diagram_view_position + 1 == m_diagram_ids.count()) { // le schema est le dernier du projet return; } @@ -586,12 +587,12 @@ void ProjectView::moveDiagramUpTop(DiagramView *diagram_view) { if (!diagram_view) return; - int diagram_view_position = diagram_ids_.key(diagram_view); + int diagram_view_position = m_diagram_ids.key(diagram_view); if (!diagram_view_position) { // le schema est le premier du projet return; } - m_tab -> tabBar() -> moveTab(diagram_view_position, (diagrams().size(), 0)); + m_tab -> tabBar() -> moveTab(diagram_view_position, (diagram_views().size(), 0)); } /* @@ -608,7 +609,7 @@ void ProjectView::moveDiagramUpTop(Diagram *diagram) void ProjectView::moveDiagramUpx10(DiagramView *diagram_view) { if (!diagram_view) return; - int diagram_view_position = diagram_ids_.key(diagram_view); + int diagram_view_position = m_diagram_ids.key(diagram_view); if (!diagram_view_position) { // le schema est le premier du projet return; @@ -629,8 +630,8 @@ void ProjectView::moveDiagramUpx10(Diagram *diagram) { void ProjectView::moveDiagramDownx10(DiagramView *diagram_view) { if (!diagram_view) return; - int diagram_view_position = diagram_ids_.key(diagram_view); - if (diagram_view_position + 1 == diagram_ids_.count()) { + int diagram_view_position = m_diagram_ids.key(diagram_view); + if (diagram_view_position + 1 == m_diagram_ids.count()) { // le schema est le dernier du projet return; } @@ -903,7 +904,7 @@ void ProjectView::loadDiagrams() { // If project have the folios list, move it at the beginning of the project if (m_project -> getFolioSheetsQuantity()) { for (int i = 0; i < m_project->getFolioSheetsQuantity(); i++) - m_tab -> tabBar() -> moveTab(diagrams().size()-1, + 1); + m_tab -> tabBar() -> moveTab(diagram_views().size()-1, + 1); } } @@ -938,32 +939,63 @@ void ProjectView::adjustReadOnlyState() { } /** - Met a jour le titre d'un onglet - @param diagram Schema - @param diagram_title Titre du schema -*/ -void ProjectView::updateTabTitle(DiagramView *diagram, const QString &diagram_title) { - int diagram_tab_id = diagram_ids_.key(diagram, -1); - if (diagram_tab_id != -1) { - m_tab -> setTabText(diagram_tab_id, diagram_title); + * @brief ProjectView::updateTabTitle + * Update the title of the tab which display the diagram view @diagram_view. + * @param diagram : The diagram view. + */ +void ProjectView::updateTabTitle(DiagramView *diagram_view) +{ + int diagram_tab_id = m_diagram_ids.key(diagram_view, -1); + + if (diagram_tab_id != -1) + { + QSettings settings; + QString title; + Diagram *diagram = diagram_view->diagram(); + + if (settings.value("genericpanel/folio", false).toBool()) + { + QString formula = diagram->border_and_titleblock.folio(); + autonum::sequentialNumbers seq; + title = autonum::AssignVariables::formulaToLabel(formula, seq, diagram); + } + else + title = QString::number(diagram->folioIndex() + 1); + + title += " - "; + title += diagram->title(); + m_tab->setTabText(diagram_tab_id ,title); } } +/** + * @brief ProjectView::updateAllTabsTitle + * Update all tabs title + */ +void ProjectView::updateAllTabsTitle() +{ + for (DiagramView *dv : m_diagram_ids.values()) + updateTabTitle(dv); +} + /** @param from Index de l'onglet avant le deplacement @param to Index de l'onglet apres le deplacement */ -void ProjectView::tabMoved(int from, int to) { - if (!m_project) return; - - // signale au QETProject le changement d'ordre des schemas - m_project -> diagramOrderChanged(from, to); - - // reconstruit la liste associant les index des onglets aux schemas +void ProjectView::tabMoved(int from, int to) +{ + if (!m_project) + return; + + m_project->diagramOrderChanged(from, to); rebuildDiagramsMap(); - - // emet un signal pour informer le reste du monde que l'ordre des schemas a change - emit(diagramOrderChanged(this, from, to)); + + //Rebuild the title of each diagram in range from - to + for (int i= qMin(from,to) ; i< qMax(from,to)+1 ; ++i) + { + DiagramView *dv = m_diagram_ids.value(i); + updateTabTitle(dv); + } } /** @@ -972,7 +1004,7 @@ void ProjectView::tabMoved(int from, int to) { le schema n'est pas trouve */ DiagramView *ProjectView::findDiagram(Diagram *diagram) { - foreach(DiagramView *diagram_view, diagrams()) { + foreach(DiagramView *diagram_view, diagram_views()) { if (diagram_view -> diagram() == diagram) { return(diagram_view); } @@ -985,12 +1017,12 @@ DiagramView *ProjectView::findDiagram(Diagram *diagram) { */ void ProjectView::rebuildDiagramsMap() { // vide la map - diagram_ids_.clear(); + m_diagram_ids.clear(); foreach(DiagramView *diagram_view, m_diagram_view_list) { int dv_idx = m_tab -> indexOf(diagram_view); if (dv_idx == -1) continue; - diagram_ids_.insert(dv_idx, diagram_view); + m_diagram_ids.insert(dv_idx, diagram_view); } } @@ -1007,9 +1039,9 @@ void ProjectView::tabChanged(int tab_id) { else if(m_tab->count() == 1) setDisplayFallbackWidget(false); - emit(diagramActivated(diagram_ids_[tab_id])); - if (diagram_ids_[tab_id] != nullptr) - diagram_ids_[tab_id]->diagram()->diagramActivated(); + emit(diagramActivated(m_diagram_ids[tab_id])); + if (m_diagram_ids[tab_id] != nullptr) + m_diagram_ids[tab_id]->diagram()->diagramActivated(); } /** @@ -1018,7 +1050,7 @@ void ProjectView::tabChanged(int tab_id) { */ void ProjectView::tabDoubleClicked(int tab_id) { // repere le schema concerne - DiagramView *diagram_view = diagram_ids_[tab_id]; + DiagramView *diagram_view = m_diagram_ids[tab_id]; if (!diagram_view) return; diagram_view -> editDiagramProperties(); diff --git a/sources/projectview.h b/sources/projectview.h index 6e9fe6394..62f59d533 100644 --- a/sources/projectview.h +++ b/sources/projectview.h @@ -58,7 +58,7 @@ class ProjectView : public QWidget { public: QETProject *project(); void setProject(QETProject *); - QList diagrams() const; + QList diagram_views() const; QList getDiagrams(ProjectSaveOptions options); DiagramView *currentDiagram() const; void closeEvent(QCloseEvent *); @@ -68,48 +68,48 @@ class ProjectView : public QWidget { void changeLastTab(); public slots: - void addNewDiagram(); - void addNewDiagramFolioList(); - void addDiagram(DiagramView *); - void removeDiagram(DiagramView *); - void removeDiagram(Diagram *); - void showDiagram(DiagramView *); - void showDiagram(Diagram *); - void editProjectProperties(); - void editCurrentDiagramProperties(); - void editDiagramProperties(DiagramView *); - void editDiagramProperties(Diagram *); - void moveDiagramUp(DiagramView *); - void moveDiagramUp(Diagram *); - void moveDiagramDown(DiagramView *); - void moveDiagramDown(Diagram *); - void moveDiagramUpTop(DiagramView *); - void moveDiagramUpTop(Diagram *); - void moveDiagramUpx10(DiagramView *); - void moveDiagramUpx10(Diagram *); - void moveDiagramDownx10(DiagramView *); - void moveDiagramDownx10(Diagram *); - void printProject(); - void exportProject(); - QETResult save(); - QETResult saveAs(ProjectSaveOptions = ProjectSaveOptions(AllDiagrams)); - QETResult doSave(ProjectSaveOptions); - void saveDiagrams(const QList &); - int cleanProject(); - void updateWindowTitle(); - void updateTabTitle(DiagramView *, const QString &); - void tabMoved(int, int); + void addNewDiagram(); + void addNewDiagramFolioList(); + void addDiagram(DiagramView *); + void removeDiagram(DiagramView *); + void removeDiagram(Diagram *); + void showDiagram(DiagramView *); + void showDiagram(Diagram *); + void editProjectProperties(); + void editCurrentDiagramProperties(); + void editDiagramProperties(DiagramView *); + void editDiagramProperties(Diagram *); + void moveDiagramUp(DiagramView *); + void moveDiagramUp(Diagram *); + void moveDiagramDown(DiagramView *); + void moveDiagramDown(Diagram *); + void moveDiagramUpTop(DiagramView *); + void moveDiagramUpTop(Diagram *); + void moveDiagramUpx10(DiagramView *); + void moveDiagramUpx10(Diagram *); + void moveDiagramDownx10(DiagramView *); + void moveDiagramDownx10(Diagram *); + void printProject(); + void exportProject(); + QETResult save(); + QETResult saveAs(ProjectSaveOptions = ProjectSaveOptions(AllDiagrams)); + QETResult doSave(ProjectSaveOptions); + void saveDiagrams(const QList &); + int cleanProject(); + void updateWindowTitle(); + void updateTabTitle(DiagramView *); + void updateAllTabsTitle(); + void tabMoved(int, int); signals: - void diagramAdded(DiagramView *); - void diagramRemoved(DiagramView *); - void diagramActivated(DiagramView *); - void diagramOrderChanged(ProjectView *, int, int); - void projectClosed(ProjectView *); - void errorEncountered(const QString &); - // relayed signals - void findElementRequired(const ElementsLocation &); - void editElementRequired(const ElementsLocation &); + void diagramAdded(DiagramView *); + void diagramRemoved(DiagramView *); + void diagramActivated(DiagramView *); + void projectClosed(ProjectView *); + void errorEncountered(const QString &); + // relayed signals + void findElementRequired(const ElementsLocation &); + void editElementRequired(const ElementsLocation &); private: void initActions(); @@ -142,7 +142,7 @@ class ProjectView : public QWidget { QWidget *fallback_widget_; QLabel *fallback_label_; QTabWidget *m_tab; - QMap diagram_ids_; + QMap m_diagram_ids; QList m_diagram_view_list; }; Q_DECLARE_OPERATORS_FOR_FLAGS(ProjectView::ProjectSaveOptions) diff --git a/sources/qetdiagrameditor.cpp b/sources/qetdiagrameditor.cpp index 372e36d8b..32aaec44f 100644 --- a/sources/qetdiagrameditor.cpp +++ b/sources/qetdiagrameditor.cpp @@ -1055,7 +1055,7 @@ CustomElement *QETDiagramEditor::currentCustomElement() const { */ ProjectView *QETDiagramEditor::findProject(DiagramView *diagram_view) const { foreach(ProjectView *project_view, openedProjects()) { - if (project_view -> diagrams().contains(diagram_view)) { + if (project_view -> diagram_views().contains(diagram_view)) { return(project_view); } } @@ -1069,7 +1069,7 @@ ProjectView *QETDiagramEditor::findProject(DiagramView *diagram_view) const { */ ProjectView *QETDiagramEditor::findProject(Diagram *diagram) const { foreach(ProjectView *project_view, openedProjects()) { - foreach(DiagramView *diagram_view, project_view -> diagrams()) { + foreach(DiagramView *diagram_view, project_view -> diagram_views()) { if (diagram_view -> diagram() == diagram) { return(project_view); } @@ -1284,7 +1284,7 @@ void QETDiagramEditor::rowColumnGroupTriggered(QAction *action) void QETDiagramEditor::slot_setSelectionMode() { if (ProjectView *pv = currentProject()) - foreach(DiagramView *dv, pv -> diagrams()) + foreach(DiagramView *dv, pv -> diagram_views()) dv -> setSelectionMode(); } @@ -1295,7 +1295,7 @@ void QETDiagramEditor::slot_setSelectionMode() void QETDiagramEditor::slot_setVisualisationMode() { if (ProjectView *pv = currentProject()) - foreach(DiagramView *dv, pv -> diagrams()) + foreach(DiagramView *dv, pv -> diagram_views()) dv -> setVisualisationMode(); } @@ -1506,7 +1506,7 @@ void QETDiagramEditor::addProjectView(ProjectView *project_view) { if (!project_view) return; - foreach(DiagramView *dv, project_view -> diagrams()) + foreach(DiagramView *dv, project_view -> diagram_views()) diagramWasAdded(dv); //Manage the close event of project @@ -2035,7 +2035,7 @@ void QETDiagramEditor::removeDiagramFromProject() { // if the removed diagram was a folio sheet, then delete all the remaining folio sheets also. if (isFolioList) { - foreach (DiagramView *diag, current_project -> diagrams()) { + foreach (DiagramView *diag, current_project -> diagram_views()) { if (dynamic_cast(diag -> diagram())) { current_project -> removeDiagram(diag); } @@ -2043,8 +2043,8 @@ void QETDiagramEditor::removeDiagramFromProject() { // else if after diagram removal, the total diagram quantity becomes a factor of 58, then // remove one (last) folio sheet. - } else if (current_project -> diagrams().size() % 58 == 0) { - foreach (DiagramView *diag, current_project -> diagrams()) { + } else if (current_project -> diagram_views().size() % 58 == 0) { + foreach (DiagramView *diag, current_project -> diagram_views()) { DiagramFolioList *ptr = dynamic_cast(diag -> diagram()); if (ptr && ptr -> getId() == current_project -> project() -> getFolioSheetsQuantity() - 1) { current_project -> removeDiagram(diag); diff --git a/sources/qetmainwindow.cpp b/sources/qetmainwindow.cpp index 50c341e8c..8be55ec7c 100644 --- a/sources/qetmainwindow.cpp +++ b/sources/qetmainwindow.cpp @@ -26,6 +26,7 @@ #include "qeticons.h" #include "qetapp.h" #include "qetdiagrameditor.h" +#include "projectview.h" /** Constructor @@ -55,12 +56,19 @@ void QETMainWindow::initCommonActions() { configure_action_ = new QAction(QET::Icons::Configure, tr("&Configurer QElectroTech"), this); configure_action_ -> setStatusTip(tr("Permet de régler différents paramètres de QElectroTech", "status bar tip")); - connect(configure_action_, &QAction::triggered, [qet_app]() { + connect(configure_action_, &QAction::triggered, [qet_app]() + { qet_app->configureQET(); - //TODO we use reloadOldElementPanel only to keep up to date the string of the folio in the old element panel. - //then, if user change the option "Use labels of folio instead of their ID" the string of folio in the old element panel is up to date - foreach (QETDiagramEditor *qde, qet_app->diagramEditors()) + //TODO we use reloadOldElementPanel only to keep up to date the string of the folio in the old element panel. + //then, if user change the option "Use labels of folio instead of their ID" the string of folio in the old element panel is up to date + for (QETDiagramEditor *qde : qet_app->diagramEditors()) + { qde->reloadOldElementPanel(); + for (ProjectView *pv : qde->openedProjects()) + { + pv->updateAllTabsTitle(); + } + } }); fullscreen_action_ = new QAction(this);