From 69adb10bcc89bcf8543f625883413c351c3e737b Mon Sep 17 00:00:00 2001 From: Simon De Backer Date: Sun, 1 Nov 2020 16:57:19 +0100 Subject: [PATCH 1/8] Add clang-format file (WIP) --- .clang-format | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 .clang-format diff --git a/.clang-format b/.clang-format new file mode 100644 index 000000000..3f1da8525 --- /dev/null +++ b/.clang-format @@ -0,0 +1,67 @@ +--- +BasedOnStyle: LLVM +AlignAfterOpenBracket: AlwaysBreak +AlignConsecutiveMacros: 'true' +AlignConsecutiveAssignments: 'true' +AlignConsecutiveDeclarations: 'true' +AlignEscapedNewlines: Right +AlignOperands: 'true' +AlignTrailingComments: 'true' +AllowAllArgumentsOnNextLine: 'false' +AllowAllConstructorInitializersOnNextLine: 'true' +AllowAllParametersOfDeclarationOnNextLine: 'true' +AllowShortBlocksOnASingleLine: 'true' +AllowShortCaseLabelsOnASingleLine: 'true' +AllowShortFunctionsOnASingleLine: All +AllowShortIfStatementsOnASingleLine: Always +AllowShortLambdasOnASingleLine: All +AllowShortLoopsOnASingleLine: 'true' +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: 'true' +AlwaysBreakTemplateDeclarations: 'Yes' +BinPackArguments: 'false' +BinPackParameters: 'false' +BreakAfterJavaFieldAnnotations: 'true' +BreakBeforeBinaryOperators: NonAssignment +BreakBeforeBraces: Allman +BreakBeforeTernaryOperators: 'false' +BreakConstructorInitializers: AfterColon +BreakInheritanceList: AfterColon +BreakStringLiterals: 'true' +ColumnLimit: '80' +CompactNamespaces: 'false' +ConstructorInitializerAllOnOneLineOrOnePerLine: 'true' +Cpp11BracedListStyle: 'true' +FixNamespaceComments: 'true' +IncludeBlocks: Regroup +IndentCaseLabels: 'false' +IndentPPDirectives: AfterHash +IndentWidth: '4' +JavaScriptWrapImports: 'true' +Language: Cpp +MaxEmptyLinesToKeep: '1' +NamespaceIndentation: All +PointerAlignment: Left +ReflowComments: 'true' +SortIncludes: 'true' +SortUsingDeclarations: 'true' +SpaceAfterCStyleCast: 'true' +SpaceAfterLogicalNot: 'true' +SpaceAfterTemplateKeyword: 'true' +SpaceBeforeAssignmentOperators: 'true' +SpaceBeforeCpp11BracedList: 'true' +SpaceBeforeCtorInitializerColon: 'true' +SpaceBeforeInheritanceColon: 'true' +SpaceBeforeParens: ControlStatements +SpaceBeforeRangeBasedForLoopColon: 'true' +SpaceInEmptyParentheses: 'false' +SpacesInAngles: 'false' +SpacesInCStyleCastParentheses: 'false' +SpacesInContainerLiterals: 'false' +SpacesInParentheses: 'false' +SpacesInSquareBrackets: 'false' +Standard: Cpp11 +TabWidth: '4' +UseTab: Always + +... From 41c7cde8ca5608970a1641e2ff4fd20a31593c6f Mon Sep 17 00:00:00 2001 From: Simon De Backer Date: Sun, 1 Nov 2020 18:11:55 +0100 Subject: [PATCH 2/8] Mod overlapping comparisons warning: overlapping comparisons always evaluate to true valid for a project made before 0.7 probably it will be better to delete the code completely. --- sources/qetgraphicsitem/element.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/sources/qetgraphicsitem/element.cpp b/sources/qetgraphicsitem/element.cpp index e12132489..401bf644d 100644 --- a/sources/qetgraphicsitem/element.cpp +++ b/sources/qetgraphicsitem/element.cpp @@ -1015,12 +1015,13 @@ bool Element::fromXml( if(deti->textFrom()== DynamicElementTextItem::ElementInfo && deti->infoName() == "label") { + qDebug() << "see 'Mod overlapping comparisons' in git"; qreal rotation = deti->rotation(); //Create the comment item DynamicElementTextItem *comment_text = nullptr; - if (m_link_type !=PreviousReport - || m_link_type !=NextReport) + if (m_link_type != PreviousReport + && m_link_type != NextReport) { m_state = QET::GIOK; return(true); @@ -1041,7 +1042,8 @@ bool Element::fromXml( } //create the location item DynamicElementTextItem *location_text = nullptr; - if (m_link_type !=PreviousReport || m_link_type !=NextReport) + if (m_link_type != PreviousReport + && m_link_type != NextReport) { m_state = QET::GIOK; return(true); @@ -1061,8 +1063,8 @@ bool Element::fromXml( } QPointF pos = deti->pos(); - if (m_link_type !=PreviousReport - || m_link_type !=NextReport) + if (m_link_type != PreviousReport + && m_link_type != NextReport) { m_state = QET::GIOK; return(true); From 1b10fe3b7f3422f259135a66f207d76e9987ae26 Mon Sep 17 00:00:00 2001 From: Simon De Backer Date: Sun, 1 Nov 2020 18:44:14 +0100 Subject: [PATCH 3/8] Mod container-anti-pattern Finds when temporary containers are being created needlessly. These cases are usually easy to fix by using iterators, avoiding memory allocations. And mod to return on first true can we test if the Elements collection reload faster or not? --- sources/NameList/nameslist.cpp | 39 ++++++++++++++++------------------ 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/sources/NameList/nameslist.cpp b/sources/NameList/nameslist.cpp index bd2bac29d..73e5d8e4f 100644 --- a/sources/NameList/nameslist.cpp +++ b/sources/NameList/nameslist.cpp @@ -229,28 +229,25 @@ bool NamesList::operator==(const NamesList &nl) const } /** - Return the adequate name regarding the current system locale. - By order of preference, this function chooses: - - the name in the system language - - the English name - - the provided fallback name if non-empty - - the first language encountered in the list - - an empty string - @param fallback_name name to be returned when no adequate name has been found - @return The adequate name regarding the current system locale. -*/ + * @brief NamesList::name + * Return the adequate name regarding the current system locale. + * By order of preference, this function chooses: + * - the name in the system language + * - the English name + * - the provided fallback name if non-empty + * - the first language encountered in the list + * - an empty string + * @param fallback_name + * name to be returned when no adequate name has been found + * @return The adequate name regarding the current system locale. + */ QString NamesList::name(const QString &fallback_name) const { QString system_language = QETApp::langFromSetting(); - QString returned_name; - if (!hash_names[system_language].isEmpty()) { - returned_name = hash_names[system_language]; - } else if (!hash_names["en"].isEmpty()) { - returned_name = hash_names["en"]; - } else if (!fallback_name.isEmpty()) { - returned_name = fallback_name; - } else if (hash_names.count()) { - returned_name = hash_names.value(hash_names.keys().first()); - } - return(returned_name); + if (! hash_names[system_language].isEmpty()) + return (hash_names[system_language]); + if (! hash_names["en"].isEmpty()) return (hash_names["en"]); + if (! fallback_name.isEmpty()) return (fallback_name); + if (hash_names.count()) return (hash_names.begin().value()); + return (QString("")); } From 859bf7f645853ed37d8c51df23eef51863b47d22 Mon Sep 17 00:00:00 2001 From: Simon De Backer Date: Sun, 1 Nov 2020 19:10:30 +0100 Subject: [PATCH 4/8] Mod clazy checks range-loop you're using C++11 range-loops with non-const Qt containers (potential detach). adding missing & --- .../fileelementcollectionitem.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/sources/ElementsCollection/fileelementcollectionitem.cpp b/sources/ElementsCollection/fileelementcollectionitem.cpp index f3f7f63a0..7cf06651f 100644 --- a/sources/ElementsCollection/fileelementcollectionitem.cpp +++ b/sources/ElementsCollection/fileelementcollectionitem.cpp @@ -282,9 +282,8 @@ void FileElementCollectionItem::setUpData() ElementsLocation loc(collectionPath()); DiagramContext context = loc.elementInformations(); QStringList search_list; - for (QString key : context.keys()) { - search_list.append(context.value(key).toString()); - } + for (QString& key : context.keys()) + { search_list.append(context.value(key).toString()); } search_list.append(localName(loc)); setData(search_list.join(" ")); } @@ -352,8 +351,8 @@ void FileElementCollectionItem::populate(bool set_data, bool hide_element) QDir dir (fileSystemPath()); //Get all directory in this directory. - for(auto str : dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot, - QDir::Name)) + for (auto& str : + dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name)) { FileElementCollectionItem *feci = new FileElementCollectionItem(); appendRow(feci); @@ -367,8 +366,8 @@ void FileElementCollectionItem::populate(bool set_data, bool hide_element) //Get all elmt file in this directory dir.setNameFilters(QStringList() << "*.elmt"); - for(auto str : dir.entryList(QDir::Files | QDir::NoDotAndDotDot, - QDir::Name)) + for (auto& str : + dir.entryList(QDir::Files | QDir::NoDotAndDotDot, QDir::Name)) { FileElementCollectionItem *feci = new FileElementCollectionItem(); appendRow(feci); From b514c39883d66a2fc7e3d97c877b99d78c022b15 Mon Sep 17 00:00:00 2001 From: Claveau Joshua Date: Sun, 1 Nov 2020 21:27:40 +0100 Subject: [PATCH 5/8] Improve update of the project database --- sources/dataBase/projectdatabase.cpp | 111 +++++++++++++++++++-------- sources/dataBase/projectdatabase.h | 20 +++-- sources/diagram.cpp | 2 + sources/qetproject.cpp | 3 +- 4 files changed, 94 insertions(+), 42 deletions(-) diff --git a/sources/dataBase/projectdatabase.cpp b/sources/dataBase/projectdatabase.cpp index 0cd57524e..d4dbd8e10 100644 --- a/sources/dataBase/projectdatabase.cpp +++ b/sources/dataBase/projectdatabase.cpp @@ -1,4 +1,4 @@ -/* +/* Copyright 2006-2020 QElectroTech Team This file is part of QElectroTech. @@ -42,6 +42,28 @@ projectDataBase::projectDataBase(QETProject *project, QObject *parent) : m_project(project) { createDataBase(); + connect(m_project, &QETProject::diagramAdded, [this](QETProject *, Diagram *diagram) { + this->addDiagram(diagram); + }); + connect(m_project, &QETProject::diagramRemoved, [this](QETProject *, Diagram *diagram) { + this->removeDiagram(diagram); + }); + connect(m_project, &QETProject::projectDiagramsOrderChanged, [this]() + { + for (auto diagram : m_project->diagrams()) + { + m_diagram_order_changed.bindValue(":pos", m_project->folioIndex(diagram)+1); + m_diagram_order_changed.bindValue(":uuid", diagram->uuid()); + m_diagram_order_changed.exec(); + + + m_diagram_info_order_changed.bindValue(":folio", diagram->border_and_titleblock.titleblockInformation().value("folio")); + m_diagram_info_order_changed.bindValue(":uuid", diagram->uuid()); + m_diagram_info_order_changed.exec(); + + } + emit dataBaseUpdated(); + }); } /** @@ -151,27 +173,12 @@ void projectDataBase::elementInfoChanged(Element *element) void projectDataBase::addDiagram(Diagram *diagram) { m_insert_diagram_query.bindValue(":uuid", diagram->uuid().toString()); - m_insert_diagram_query.bindValue(":pos", m_project->folioIndex(diagram)); + m_insert_diagram_query.bindValue(":pos", m_project->folioIndex(diagram)+1); if(!m_insert_diagram_query.exec()) { qDebug() << "projectDataBase::addDiagram insert error : " << m_insert_diagram_query.lastError(); } - - m_insert_diagram_info_query.bindValue(":uuid", diagram->uuid()); - auto infos = diagram->border_and_titleblock.titleblockInformation(); - for (auto key : QETApp::diagramInfoKeys()) - { - if (key == "date") - { - m_insert_diagram_info_query.bindValue( ":date", - QLocale::system().toDate(infos.value("date").toString(), - QLocale::ShortFormat)); - } else { - auto value = infos.value(key); - auto bind = key.prepend(":"); - m_insert_diagram_info_query.bindValue(bind, value); - } - } + bindDiagramInfoValues(m_insert_diagram_info_query, diagram); if (!m_insert_diagram_info_query.exec()) { qDebug() << "projectDataBase::addDiagram insert info error : " << m_insert_diagram_info_query.lastError(); @@ -190,6 +197,21 @@ void projectDataBase::removeDiagram(Diagram *diagram) } } +void projectDataBase::diagramInfoChanged(Diagram *diagram) +{ + bindDiagramInfoValues(m_update_diagram_info_query, diagram); + + if (!m_update_diagram_info_query.exec()) { + qDebug() << "projectDataBase::diagramInfoChanged update error : " << m_update_diagram_info_query.lastError(); + } else { + emit dataBaseUpdated(); + } +} + +void projectDataBase::diagramOrderChanged() +{ +} + /** @brief projectDataBase::createDataBase Create the data base @@ -342,7 +364,7 @@ void projectDataBase::populateDiagramTable() for (auto diagram : m_project->diagrams()) { m_insert_diagram_query.bindValue(":uuid", diagram->uuid().toString()); - m_insert_diagram_query.bindValue(":pos", m_project->folioIndex(diagram)); + m_insert_diagram_query.bindValue(":pos", m_project->folioIndex(diagram)+1); if(!m_insert_diagram_query.exec()) { qDebug() << "projectDataBase::populateDiagramTable insert error : " << m_insert_diagram_query.lastError(); } @@ -417,21 +439,7 @@ void projectDataBase::populateDiagramInfoTable() for (auto *diagram : m_project->diagrams()) { - m_insert_diagram_info_query.bindValue(":uuid", diagram->uuid()); - - auto infos = diagram->border_and_titleblock.titleblockInformation(); - for (auto key : QETApp::diagramInfoKeys()) - { - if (key == "date") { - m_insert_diagram_info_query.bindValue( ":date", - QLocale::system().toDate(infos.value("date").toString(), - QLocale::ShortFormat)); - } else { - auto value = infos.value(key); - auto bind = key.prepend(":"); - m_insert_diagram_info_query.bindValue(bind, value); - } - } + bindDiagramInfoValues(m_insert_diagram_info_query, diagram); if (!m_insert_diagram_info_query.exec()) { qDebug() << "projectDataBase::populateDiagramInfoTable insert error : " << m_insert_diagram_info_query.lastError(); @@ -462,6 +470,22 @@ void projectDataBase::prepareQuery() ")"); m_insert_diagram_info_query.prepare(insert_diag_info); + //UPDATE DIAGRAM INFO + QString update_diagram_str("UPDATE diagram_info SET "); + for (auto str : QETApp::diagramInfoKeys()) { + update_diagram_str.append(str + " = :" + str + ", "); + } + update_diagram_str.remove(update_diagram_str.length()-2, 2); //Remove the last ", " + update_diagram_str.append(" WHERE diagram_uuid = :uuid"); + m_update_diagram_info_query = QSqlQuery(m_data_base); + m_update_diagram_info_query.prepare(update_diagram_str); + + //UPDATE DIAGRAM ORDER + m_diagram_order_changed = QSqlQuery(m_data_base); + m_diagram_order_changed.prepare("UPDATE diagram SET pos = :pos WHERE uuid = :uuid"); + m_diagram_info_order_changed = QSqlQuery(m_data_base); + m_diagram_info_order_changed.prepare("UPDATE diagram_info SET folio = :folio WHERE diagram_uuid = :uuid"); + //INSERT ELEMENT QString insert_element_query("INSERT INTO element (uuid, diagram_uuid, pos, type, sub_type) VALUES (:uuid, :diagram_uuid, :pos, :type, :sub_type)"); m_insert_elements_query = QSqlQuery(m_data_base); @@ -518,6 +542,25 @@ QHash projectDataBase::elementInfoToString(Element *elmt) return hash; } +void projectDataBase::bindDiagramInfoValues(QSqlQuery &query, Diagram *diagram) +{ + query.bindValue(":uuid", diagram->uuid()); + + auto infos = diagram->border_and_titleblock.titleblockInformation(); + for (auto key : QETApp::diagramInfoKeys()) + { + if (key == "date") { + query.bindValue( ":date", + QLocale::system().toDate(infos.value("date").toString(), + QLocale::ShortFormat)); + } else { + auto value = infos.value(key); + auto bind = key.prepend(":"); + query.bindValue(bind, value); + } + } +} + #ifdef QET_EXPORT_PROJECT_DB /** @brief projectDataBase::sqliteHandle diff --git a/sources/dataBase/projectdatabase.h b/sources/dataBase/projectdatabase.h index 2fe470f87..9b7603979 100644 --- a/sources/dataBase/projectdatabase.h +++ b/sources/dataBase/projectdatabase.h @@ -47,11 +47,15 @@ class projectDataBase : public QObject void updateDB(); QETProject *project() const; QSqlQuery newQuery(const QString &query = QString()); - void addElement(Element *element); - void removeElement(Element *element); - void elementInfoChanged(Element *element); - void addDiagram(Diagram *diagram); - void removeDiagram(Diagram *diagram); + + void addElement (Element *element); + void removeElement (Element *element); + void elementInfoChanged (Element *element); + + void addDiagram (Diagram *diagram); + void removeDiagram (Diagram *diagram); + void diagramInfoChanged (Diagram *diagram); + void diagramOrderChanged(); signals: void dataBaseUpdated(); @@ -67,6 +71,7 @@ class projectDataBase : public QObject void prepareQuery(); static QHash elementInfoToString( Element *elmt); + void bindDiagramInfoValues(QSqlQuery &query, Diagram *diagram); private: QPointer m_project; @@ -77,7 +82,10 @@ class projectDataBase : public QObject m_update_element_query, m_insert_diagram_query, m_remove_diagram_query, - m_insert_diagram_info_query; + m_insert_diagram_info_query, + m_update_diagram_info_query, + m_diagram_order_changed, + m_diagram_info_order_changed; #ifdef QET_EXPORT_PROJECT_DB public: diff --git a/sources/diagram.cpp b/sources/diagram.cpp index 5414c35bb..f93e0bcfe 100644 --- a/sources/diagram.cpp +++ b/sources/diagram.cpp @@ -1650,6 +1650,8 @@ void Diagram::setTitleBlockTemplate(const QString &template_name) if (template_name != current_name) emit(usedTitleBlockTemplateChanged(template_name)); + + project()->dataBase()->diagramInfoChanged(this); } /** diff --git a/sources/qetproject.cpp b/sources/qetproject.cpp index 4e8238d3e..5d059ec2b 100644 --- a/sources/qetproject.cpp +++ b/sources/qetproject.cpp @@ -1221,7 +1221,6 @@ void QETProject::removeDiagram(Diagram *diagram) if (m_diagrams_list.removeAll(diagram)) { - m_data_base.removeDiagram(diagram); emit(diagramRemoved(this, diagram)); diagram->deleteLater(); } @@ -1652,7 +1651,7 @@ void QETProject::addDiagram(Diagram *diagram, int pos) } else { m_diagrams_list.insert(pos, diagram); } - m_data_base.addDiagram(diagram); + updateDiagramsFolioData(); } From 98de247a4d645f3bc9d2179fb1dc27e5a49414b9 Mon Sep 17 00:00:00 2001 From: Ole Carlsen Date: Mon, 2 Nov 2020 18:47:53 +0100 Subject: [PATCH 6/8] Minor danish translation update --- lang/qet_da.qm | Bin 245327 -> 245893 bytes lang/qet_da.ts | 74 ++++++++++++++++++++++++------------------------- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/lang/qet_da.qm b/lang/qet_da.qm index 50729bdc2680a8ddf92f6cc6c89074fcacc21613..810cb4b3a3d2b556fed30d0f22a33cf25b5b65e3 100644 GIT binary patch delta 17301 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 PmyE$HePHxqai9G!gi5%v delta 16986 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 diff --git a/lang/qet_da.ts b/lang/qet_da.ts index 98ad424a0..19dd4385e 100644 --- a/lang/qet_da.ts +++ b/lang/qet_da.ts @@ -1625,7 +1625,7 @@ Bemærk: Disse muligheder VIL IKKE tillade eller blokere autonummereringer, kun Ouvrir un élément dialog title - Åbne symbol + Åbn symbol @@ -1649,7 +1649,7 @@ Bemærk: Disse muligheder VIL IKKE tillade eller blokere autonummereringer, kun Ouvrir une catégorie dialog title - Åbne kategori + Åbn kategori @@ -2111,7 +2111,7 @@ Bemærk: Disse muligheder VIL IKKE tillade eller blokere autonummereringer, kun Ouvrir la configuration sélectionné - Åbne valgt konfiguration + Åbn valgt konfiguration @@ -2287,7 +2287,7 @@ Bemærk: Disse muligheder VIL IKKE tillade eller blokere autonummereringer, kun Ouvrir le dossier correspondant - Åbne mappe + Åbn mappe @@ -2488,7 +2488,7 @@ Alle symboler og fil indhold bliver slettet. Ouvrir le dossier correspondant - Åbne mappe + Åbn mappe @@ -5629,7 +5629,7 @@ Kommandovalg: Affiche ou non le panel d'appareils - Vise eller skjule symbol panel + Vis eller skjul symbol panel @@ -5840,7 +5840,7 @@ Kommandovalg: Ouvre un projet existant status bar tip - Åbne eksisterende projekt + Åbn eksisterende projekt @@ -6017,12 +6017,12 @@ Kommandovalg: &Ouvrir - &Åbne + &Åbn Ouvrir un fichier - Åbne fil + Åbn fil @@ -6092,17 +6092,17 @@ Kommandovalg: Affiche ou non la barre d'outils principale - Vise eller skjule værktøjslinje + Vis eller skjul værktøjslinje Affiche ou non la barre d'outils Affichage - Vise eller skjule værktøjslinjen Vise + Vis eller skjul værktøjslinjen Vis Affiche ou non la barre d'outils Schéma - Vise eller skjule værktøjslinjen Diagram + Vis eller skjul værktøjslinjen Diagram @@ -6127,7 +6127,7 @@ Kommandovalg: Affiche ou non la liste des modifications - Vise eller skjule gendan liste + Vis eller skjul gendan liste @@ -6159,7 +6159,7 @@ Kommandovalg: Chercher/remplacer - Søge/erstatte + Søg/erstat @@ -6169,7 +6169,7 @@ Kommandovalg: &Récemment ouverts - &Seneste åbnet + &Senest åbnet @@ -6367,7 +6367,7 @@ Kommandovalg: Présente les différents projets ouverts dans des sous-fenêtres status bar tip - Vise åbne projekter i vinduer + Vis åbne projekter i vinduer @@ -6378,7 +6378,7 @@ Kommandovalg: Présente les différents projets ouverts des onglets status bar tip - Vise åbne projekter i faneblade + Vis åbne projekter i faneblade @@ -6541,7 +6541,7 @@ Kommandovalg: &Ouvrir - &Åbne + &Åbn @@ -6687,7 +6687,7 @@ Kommandovalg: &Ouvrir depuis un fichier - &Åbne fra fil + &Åbn fra fil @@ -6855,7 +6855,7 @@ Gør den kørbar: chmod +x ./DXFtoQET &Récemment ouverts - &Seneste åbnet + &Senest åbnet @@ -7102,7 +7102,7 @@ betingelser ikke gyldig Ouvrir un fichier dialog title - Åbne fil + Åbn fil @@ -7437,13 +7437,13 @@ Hvad skal ske? &Ouvrir menu entry - &Åbne + &Åbn Ouvrir depuis un fichier menu entry - Åbne fra fil + Åbn fra fil @@ -8591,27 +8591,27 @@ Voulez-vous la remplacer ? Chercher/remplacer les propriétés de folio - Søge/erstatte ark egenskaber + Søg/erstat ark egenskaber Chercher/remplacer les propriétés d'éléments. - Søge/erstatte symbol egenskaber. + Søg/erstat symbol egenskaber. Chercher/remplacer les propriétés de conducteurs. - Søge/erstatte ledere egenskaber. + Søg/erstat ledere egenskaber. Rechercher / remplacer avancé - Søge/erstatte avanceret + Søg/erstat avanceret Chercher/remplacer des textes independants - Søge/erstatte uafhængige tekste + Søg/erstat uafhængige tekste @@ -9999,13 +9999,13 @@ De andre felter anvendes ikke. Pink : HotPink element part color - + Lyserød : Varm lyserød Pink : DeepPink element part color - + Lyserød : Dyb lyserød @@ -10017,13 +10017,13 @@ De andre felter anvendes ikke. Pink : MediumVioletRed element part color - + Lyserød : Mellem violet rød Red : LightSalmon element part color - + Rød : Lys laks @@ -10035,7 +10035,7 @@ De andre felter anvendes ikke. Red : DarkSalmon element part color - + Rød : Mørk laks @@ -10047,7 +10047,7 @@ De andre felter anvendes ikke. Red : IndianRed element part color - + Rød : Indianer rød @@ -10060,7 +10060,7 @@ De andre felter anvendes ikke. Red : Firebrick element part color - + Rød : Ild fast sten @@ -11898,7 +11898,7 @@ De andre felter anvendes ikke. Information à afficher - Vise information + Vis information @@ -13122,7 +13122,7 @@ Maksimum længde: %2piksel Rechercher/Remplacer avancé - Søge/erstatte avanceret + Søg/erstat avanceret From 62333506f10dfdf9f9853eda7ff25c0dbf5633e2 Mon Sep 17 00:00:00 2001 From: Claveau Joshua Date: Mon, 2 Nov 2020 19:13:56 +0100 Subject: [PATCH 7/8] Improve update of the project database --- sources/dataBase/projectdatabase.cpp | 15 +++++++++++++-- sources/dataBase/ui/summaryquerywidget.cpp | 5 ++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/sources/dataBase/projectdatabase.cpp b/sources/dataBase/projectdatabase.cpp index d4dbd8e10..d234acbe5 100644 --- a/sources/dataBase/projectdatabase.cpp +++ b/sources/dataBase/projectdatabase.cpp @@ -182,9 +182,20 @@ void projectDataBase::addDiagram(Diagram *diagram) if (!m_insert_diagram_info_query.exec()) { qDebug() << "projectDataBase::addDiagram insert info error : " << m_insert_diagram_info_query.lastError(); - } else { - emit dataBaseUpdated(); } + + //The information "folio" of other existing diagram can have the variable %total, + //so when a new diagram is added this variable change. + //We need to update this information in the database. + for (auto diagram : project()->diagrams()) + { + m_diagram_info_order_changed.bindValue(":folio", diagram->border_and_titleblock.titleblockInformation().value("folio")); + m_diagram_info_order_changed.bindValue(":uuid", diagram->uuid()); + if (!m_diagram_info_order_changed.exec()) { + qDebug() << "projectDataBase::addDiagram update diagram infp order error : " << m_diagram_info_order_changed.lastError(); + } + } + emit dataBaseUpdated(); } void projectDataBase::removeDiagram(Diagram *diagram) diff --git a/sources/dataBase/ui/summaryquerywidget.cpp b/sources/dataBase/ui/summaryquerywidget.cpp index 6c54dedc9..3fc7e5b72 100644 --- a/sources/dataBase/ui/summaryquerywidget.cpp +++ b/sources/dataBase/ui/summaryquerywidget.cpp @@ -61,6 +61,7 @@ QString SummaryQueryWidget::queryStr() const QStringList keys = selectedKeys(); QString select ="SELECT "; + QString order_by = " ORDER BY "; QString column; bool first = true; @@ -69,13 +70,15 @@ QString SummaryQueryWidget::queryStr() const first = false; } else { column += ", "; + order_by +=", "; } column += key; + order_by += key; } QString from = " FROM project_summary_view"; - QString q(select + column + from); + QString q(select + column + from + order_by); return q; } From ca0dcc9b7b5eabe440438de6bb0a89cee8ddbfeb Mon Sep 17 00:00:00 2001 From: Claveau Joshua Date: Mon, 2 Nov 2020 19:31:52 +0100 Subject: [PATCH 8/8] Fix crash --- sources/qetgraphicsitem/ViewItem/qetgraphicsheaderitem.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sources/qetgraphicsitem/ViewItem/qetgraphicsheaderitem.cpp b/sources/qetgraphicsitem/ViewItem/qetgraphicsheaderitem.cpp index a023be1a6..8301e0548 100644 --- a/sources/qetgraphicsitem/ViewItem/qetgraphicsheaderitem.cpp +++ b/sources/qetgraphicsitem/ViewItem/qetgraphicsheaderitem.cpp @@ -441,5 +441,7 @@ void QetGraphicsHeaderItem::adjustSize() void QetGraphicsHeaderItem::modelReseted() { setUpMinimumSectionsSize(); + m_current_sections_width.clear(); + m_current_sections_width.resize(m_sections_minimum_width.size()); adjustSize(); }