From f519499a664692676d2785497f6ed6a507e28ebd Mon Sep 17 00:00:00 2001 From: plc-user <74435298+plc-user@users.noreply.github.com> Date: Sat, 9 Dec 2023 12:02:04 +0100 Subject: [PATCH] added a second user-collection --- lang/qet_de.qm | Bin 297223 -> 297895 bytes lang/qet_de.ts | 423 +++++++++--------- qelectrotech.qrc | 2 + .../elementscollectionmodel.cpp | 56 ++- .../elementscollectionmodel.h | 7 +- .../elementscollectionwidget.cpp | 10 +- .../ElementsCollection/elementslocation.cpp | 83 ++-- sources/ElementsCollection/elementslocation.h | 5 +- .../fileelementcollectionitem.cpp | 32 +- .../fileelementcollectionitem.h | 5 +- .../graphicspart/customelementgraphicpart.cpp | 12 +- sources/editor/graphicspart/partterminal.cpp | 1 + sources/elementdialog.cpp | 4 +- sources/elementspanel.cpp | 3 +- sources/elementspanel.h | 1 + sources/properties/elementdata.cpp | 7 + sources/properties/terminaldata.cpp | 1 + sources/qet.cpp | 4 + sources/qet.h | 1 + sources/qetapp.cpp | 149 ++++-- sources/qetapp.h | 11 +- sources/qetgraphicsitem/qetshapeitem.cpp | 6 +- sources/qeticons.cpp | 3 + sources/qeticons.h | 1 + sources/qetproject.cpp | 5 +- .../configpage/generalconfigurationpage.cpp | 38 ++ .../ui/configpage/generalconfigurationpage.h | 1 + .../ui/configpage/generalconfigurationpage.ui | 49 +- sources/ui/titleblockpropertieswidget.cpp | 2 + sources/utils/macosxopenevent.cpp | 2 +- 30 files changed, 589 insertions(+), 335 deletions(-) diff --git a/lang/qet_de.qm b/lang/qet_de.qm index 81d5d7089f01a4283e9e913ddf3db94641eea513..2e22a0177255f64087d942d7661b009191a1912f 100644 GIT binary patch delta 20372 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 VvB%Gf;z#y~FX@Tp!ldVp{|Ai%+A075 delta 20029 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 PtO-)-w2Tnxk<bus Bus: + + + TextLabel + TextLabel + @@ -982,11 +987,6 @@ Bemerkung: diese Optionen verhindern NICHT das automatische Nummerieren.Terre Erde - - - TextLabel - - Taille : @@ -1094,7 +1094,7 @@ Bemerkung: diese Optionen verhindern NICHT das automatische Nummerieren. GroupBox - + @@ -1105,7 +1105,7 @@ Bemerkung: diese Optionen verhindern NICHT das automatische Nummerieren. CustomElementGraphicPart - + Déplacer une primitive Stammfunktion verschieben @@ -2159,11 +2159,6 @@ Bemerkung: diese Optionen verhindern NICHT das automatische Nummerieren. ElementQueryWidget - - - Form - - Informations disponibles @@ -2274,6 +2269,11 @@ Bemerkung: diese Optionen verhindern NICHT das automatische Nummerieren.Organes de protection Schutzeinrichtungen + + + Form + + Configuration @@ -2516,13 +2516,13 @@ Bemerkung: diese Optionen verhindern NICHT das automatische Nummerieren.Suchen - + Supprimer l'élément ? message box title Bauteil löschen? - + Êtes-vous sûr de vouloir supprimer cet élément ? message box content @@ -2530,25 +2530,25 @@ Bemerkung: diese Optionen verhindern NICHT das automatische Nummerieren. - + Suppression de l'élément message box title Bauteil wird gelöscht - + La suppression de l'élément a échoué. message box content Das Löschen des Bauteils ist gescheitert. - + Supprimer le dossier? message box title Ordner löschen? - + Êtes-vous sûr de vouloir supprimer le dossier ? Tout les éléments et les dossier contenus dans ce dossier seront supprimés. message box content @@ -2556,24 +2556,24 @@ Tout les éléments et les dossier contenus dans ce dossier seront supprimés. - + Suppression du dossier message box title Ordner wird gelöscht - + La suppression du dossier a échoué. message box content Das Löschen vom Ordner ist gescheitert. - + Le dossier %1 contient Der Ordner %1 beinhaltet - + %n élément(s), répartie(s) %n Bauteil, verteilt @@ -2581,7 +2581,7 @@ Alle Bauteile und Unterordner von diesem Ordner werden ebenso gelöscht. - + dans %n dossier(s). in %n Ordner. @@ -2589,17 +2589,17 @@ Alle Bauteile und Unterordner von diesem Ordner werden ebenso gelöscht. - + Chemin de la collection : %1 Pfad der Sammlung: %1 - + Chemin dans le système de fichiers : %1 Pfad im Dateisystem: %1 - + Propriété du dossier %1 Eigenschaften vom Ordner %1 @@ -2630,25 +2630,25 @@ Alle Bauteile und Unterordner von diesem Ordner werden ebenso gelöscht.Ziehen/Ablegen, um das Schriftfeld auf der Folie anzuwenden. - + Double-cliquez pour réduire ou développer la collection de cartouches QElectroTech Status tip Doppelklick zum Öffnen oder Schließen der Sammlung "QElectroTech-Schriftfelder" - + Ceci est la collection de cartouches fournie avec QElectroTech. Installée en tant que composant système, vous ne pouvez normalement pas la personnaliser. "What's this" tip Diese Sammlung von Schriftfeldern kommt standardmäßig mit QElectroTech. Sie ist fester Bestandteil vom System und kann nicht verändert werden. - + Double-cliquez pour réduire ou développer votre collection personnelle de cartouches Status tip Doppelklick zum Öffnen oder Schließen Ihrer persönlichen Schriftfeld-Sammlung - + Ceci est votre collection personnelle de cartouches -- utilisez-la pour créer, stocker et éditer vos propres cartouches. "What's this" tip Dies ist Ihre persönliche Schriftfeld-Sammlung. Benutzen Sie sie, um Ihre eigenen Schriftfelder zu erstellen, ablegen und bearbeiten. @@ -3251,36 +3251,38 @@ Texte und Zahlen sind ebenso erlaubt. Farben vom Betriebssystem verwenden - + Chemin de la collection utilisateur Pfad zur Benutzersammlung - + Chemin des cartouches utilisateur Pfad zu den Benutzer-Schriftfeldern - + Chemin de la collection commune Pfad zur QET Sammlung - + + Par defaut Standard - + + Parcourir... Auswählen... - + (Recharger les collections d'éléments pour appliquer les changements) (Bauteilsammlungen neu laden, um die Änderungen zu aktualisieren) @@ -3317,19 +3319,19 @@ Texte und Zahlen sind ebenso erlaubt. min - + Mettre en valeur dans le panel les éléments fraîchement intégrés Neu zum Projekt hinzugefügte Bauteile in der Sammlung hervorheben - + Chaque élément embarque des informations sur ses auteurs, sa licence, ou tout autre renseignement que vous jugerez utile dans un champ libre. Vous pouvez spécifier ici la valeur par défaut de ce champ pour les éléments que vous créerez : Jedes Bauteil enthält Informationen über den Autor, die Lizenz und weiteren nützlichen Hinweise in einem frei definierbaren Textfeld. Hier unten kann der Standardwert dieses Textfeldes für Ihre eigenen Bauteile definiert werden: - + Appliqué au prochain lancement de QElectroTech Wirksam nach einem Neustart von QElectroTech @@ -3364,7 +3366,7 @@ Hier unten kann der Standardwert dieses Textfeldes für Ihre eigenen Bauteile de Pfad zur gemeinsamen Bauteilsammlung - + Répertoire de la collection utilisateur Pfad zur Benutzer-Bauteilsammlung @@ -3374,32 +3376,32 @@ Hier unten kann der Standardwert dieses Textfeldes für Ihre eigenen Bauteile de Pfad zu den Benutzer-Schriftfeldern - + Gestion des éléments Bauteilverwaltung - + Vous pouvez définir ici l'apparence par defaut des differents textes de QElectroTech Einstellungen für die Standarddarstellung der verschiedenen Texte - + Grille + Clavier Raster & Tastatur - + Grille : 1 - 30 Raster: 1 - 30 - + DiagramEditor xGrid Schaltplaneditor, Schrittweite x - + DiagramEditor yGrid Schaltplaneditor, Schrittweite y @@ -3419,98 +3421,103 @@ Hier unten kann der Standardwert dieses Textfeldes für Ihre eigenen Bauteile de Methode zur Skalierung bei hochauflösenden Bildschirmen (hdpi) (wirksam nach einem Neustart von QElectroTech): - + + Répertoire de la collection company + Pfad zur Firmen-Bauteilsammlung + + + Langues Sprachen - + Textes Texte - + Textes d'éléments Bauteiltexte - - - + + + Police : Schriftart: - - + + ° ° - + Longueur : Länge: - - + + Rotation : Drehung: - + Textes indépendants Unabhängige Textfelder - + Autres textes Sonstige Texte - + La Grille doite etre active pour pouvoir voir les modifications. Änderungen sind nur sichtbar, wenn das Raster aktiviert ist. - + Déplacement au clavier : 1 - 30 Bewegung mittels Tastatur: 1 - 30 - + DiagramEditor (touche : gauche / droite) xGrid Schaltplaneditor (rechts/links Tasten), Schrittweite x - + DiagramEditor (touche : haut / bas) yGrid Schaltplaneditor (hoch/runter Tasten), Schrittweite y - + Déplacement au clavier avec la touche ALT : 1 - 9 Bewegung mittels Tastatur und ALT Taste: 1 - 9 - + DiagramEditor (touche : gauche / droite ) xGrid Schaltplaneditor (rechts/links Tasten), Schrittweite x - + DiagramEditor (touche : haut / bas) yGrid Schaltplaneditor (hoch/runter Tasten), Schrittweite y - + Editor - + Editor - + Max. parts in Element Editor List - + Max. Anzahl in der Element Editor Liste @@ -3548,150 +3555,155 @@ Hier unten kann der Standardwert dieses Textfeldes für Ihre eigenen Bauteile de nicht runden - + Général configuration page title Allgemein - + Système System - + Arabe Arabisch - + Brézilien Brasilianisch - + Catalan Katalanisch - + Tchèque Tschechisch - + Allemand Deutsch - + Danois Dänisch - + Grec Grieschisch - + Anglais Englisch - + Espagnol Spanisch - + Français Französisch - + Croate Kroatisch - + Italien Italienisch - + Japonais Japanisch - + Polonais Polnisch - + Portugais Portugesisch - + Roumains Rumänisch - + Russe Russisch - + Slovène Slowenisch - + Pays-Bas Niederländisch - + Norvege Norwegisch - + Belgique-Flemish Belgien-Flandern - + Turc Türkisch - + Hongrois Ungarisch - + Mongol Mongolisch - + Ukrainien Ukrainisch - + Chinois - + Chinesisch - + + Chemin de la collection company + Firmen-Sammlung + + + To high values might lead to crashes of the application. - + Zu große Werte führen zum Absturz der Applikation @@ -3746,11 +3758,6 @@ Hier unten kann der Standardwert dieses Textfeldes für Ihre eigenen Bauteile de GraphicsTablePropertiesEditor - - - Form - - Affichage @@ -3817,6 +3824,11 @@ Hier unten kann der Standardwert dieses Textfeldes für Ihre eigenen Bauteile de Ajuster le tableau au folio Tabelle an Foliengröße anpassen + + + Form + + TextLabel @@ -3929,7 +3941,7 @@ Hier unten kann der Standardwert dieses Textfeldes für Ihre eigenen Bauteile de Appliquer la géometrie d'un tableau aux tableau liée à celui-ci Geometrie einer Tabelle auf alle damit verknüpften Tabellen anwenden - + Geometrie einer Tabelle auf alle damit verknüpften Tabellen anwenden @@ -4534,12 +4546,12 @@ Veuillez utiliser l'éditeur avancé pour cela. x: - + x: y: - + y: @@ -5189,7 +5201,7 @@ Folgende Variablen sind inkompatibel: Form - + @@ -5518,12 +5530,12 @@ Voulez-vous enregistrer les modifications ? Revenir au debut du projet - + Zurück zum Anfang des Projekts Aller à la fin du projet - + Zum Projektende springen @@ -5554,211 +5566,211 @@ Voulez-vous enregistrer les modifications ? QETApp - + Chargement... Initialisation du cache des collections d'éléments splash screen caption Laden... Initialisiere die Bauteilsammlungen - + Chargement... Éditeur de schéma splash screen caption Laden... Schaltplaneditor - + Chargement... Ouverture des fichiers splash screen caption Laden... Öffne Dateien - + LTR Translate this string to RTL if you are translating to a Right-to-Left language, else translate to LTR LTR - + Cartouches QET title of the title block templates collection provided by QElectroTech QET-Schriftfelder - + Cartouches utilisateur title of the user's title block templates collection Benutzer-Schriftfelder - + Q Single-letter example text - translate length, not meaning Q - + QET Small example text - translate length, not meaning QET - + Schema Normal example text - translate length, not meaning Folie - + Electrique Normal example text - translate length, not meaning Elektrik - + QElectroTech Long example text - translate length, not meaning QElectroTech - + Configurer QElectroTech window title QElectroTech Einstellungen - + Chargement... splash screen caption Lade... - + Chargement... icône du systray splash screen caption Lade... Symbole des Systemsbenachrichtigungsfelds - + QElectroTech systray menu title QElectroTech - + &Quitter &Beenden - + &Masquer &Verstecken - + &Restaurer &Zeigen - + &Masquer tous les éditeurs de schéma &Verstecke alle Schaltplaneditoren - + &Restaurer tous les éditeurs de schéma &Zeige alle Schaltplaneditoren - + &Masquer tous les éditeurs d'élément &Verstecke alle Bauteileditoren - + &Restaurer tous les éditeurs d'élément &Zeige alle Bauteileditoren - + &Masquer tous les éditeurs de cartouche systray submenu entry &Verstecke alle Schriftfeld-Editoren - + &Restaurer tous les éditeurs de cartouche systray submenu entry &Zeige alle Schriftfeld-Editoren - + &Nouvel éditeur de schéma &Neuer Schaltplaneditor - + &Nouvel éditeur d'élément &Neuer Bauteileditor - + Ferme l'application QElectroTech Anwendung QElectroTech schließen - + Réduire QElectroTech dans le systray QElectroTech in Systembenachrichtigungsfeld minimieren - + Restaurer QElectroTech QElectroTech wiederherstellen - + QElectroTech systray icon tooltip QElectroTech - + Éditeurs de schémas Schaltplaneditor - + Éditeurs d'élément Bauteileditor - + Éditeurs de cartouche systray menu entry Schriftfeld-Editor - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> <b>Die folgende Sicherungsdatei wurde gefunden,<br>Möchten Sie sie öffnen?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> <b>Die folgenden Sicherungsdateien wurden gefunden,<br>Möchten Sie sie öffnen?</b><br> - + Fichier de restauration Sicherungsdatei - + Usage : Verwendung: - + [options] [fichier]... @@ -5767,7 +5779,7 @@ Voulez-vous enregistrer les modifications ? - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -5784,28 +5796,28 @@ Verfügbare Optionen: - + --common-elements-dir=DIR Definir le dossier de la collection d'elements --common-elements-dir=DIR Setzt Pfad zur Bauteilsammlung - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches --common-tbt-dir=DIR Pfad zur Schriftfeld-Sammlung setzen - + --config-dir=DIR Definir le dossier de configuration --config-dir=DIR Setzt Pfad zur Konfiguration - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue --lang-dir=DIR Setzt Pfad zu den Sprachdateien @@ -6448,12 +6460,12 @@ Verfügbare Optionen: SPACE - + Ctrl+SPACE - + @@ -7623,19 +7635,19 @@ les conditions requises ne sont pas valides %1 [geändert] - + Une erreur s'est produite durant l'intégration du modèle. error message Ein Fehler ist beim Einfügen der Vorlage aufgetreten. - + Avertissement message box title Warnung - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 @@ -7643,7 +7655,7 @@ Vous utilisez actuellement QElectroTech en version %2 Sie verwenden derzeit QElectroTech Version %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? @@ -7651,32 +7663,32 @@ Que désirez vous faire ? Was möchten Sie tun? - + Avertissement message box title Warnung - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. Das Projekt, das Sie zu öffnen versuchen, ist teilweise mit Ihrer Version %1 von QElectroTech kompatibel. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? Um es vollständig kompatibel zu machen, öffnen Sie bitte das gleiche Projekt mit der QElectroTech-Version 0.8 oder 0.80, speichern Sie das Projekt und öffnen Sie es erneut mit dieser Version. Was möchten Sie tun? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> <p align="center"><b>Öffnen des Projekts...</b><br/>Folien werden erstellt</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> <p align="center"><b>Öffnen des Projekts...</b><br/>Querverweise werden eingelesen</p> @@ -8321,7 +8333,7 @@ Was möchten Sie tun? %n tableau(s) part of a sentence listing the content of diagram - + @@ -8347,7 +8359,7 @@ Was möchten Sie tun? - + Impossible d'ouvrir le fichier %1 en écriture, erreur %2 rencontrée. error message when attempting to write an XML file @@ -8360,62 +8372,62 @@ Was möchten Sie tun? Ein Fehler ist beim Schreiben der Datei %1 aufgetreten. Fehler ist: %2. - + Amener au premier plan Im Vordergrund - + Rapprocher Eine Ebene vor - + Éloigner Eine Ebene zurück - + Envoyer au fond Im Hintergrund - + Ramène la ou les sélections au premier plan Verschiebt die Auswahl in den Vordergrund - + Rapproche la ou les sélections Verschiebt die Auswahl eine Ebene nach vorne - + Éloigne la ou les sélections Verschiebt die Auswahl eine Ebene nach hinten - + Envoie en arrière plan la ou les sélections Verschiebt die Auswahl in den Hintergrund - + Ctrl+Shift+Up Strg+Umschalt+oben - + Ctrl+Shift+Down Strg+Umschalt+unten - + Ctrl+Shift+End Strg+Umschalt+Ende - + Ctrl+Shift+Home Strg+Umschalt+Pos1 @@ -8747,11 +8759,16 @@ Was möchten Sie tun? + Collection Company + Firmen-Sammlung + + + Collection utilisateur Benutzersammlung - + Collection inconnue Unbekannte Sammlung @@ -9142,16 +9159,16 @@ Möchten Sie sie ersetzen? Einfügen + - + + + - - - this is an error in the code dies ist ein Programmfehler @@ -9275,49 +9292,51 @@ Möchten Sie sie ersetzen? Klemme %1 sortieren - + + Générique generic terminal element type Generisch - + Fusible fuse terminal element type Sicherungsklemme - + Sectionable sectional terminal element type Trennklemme - + Diode diode terminal element type Diode - + Terre ground terminal element type Erde - + + Générique generic terminal element function Generisch - + Phase phase terminal element function Aussenleiter - + Neutre neutral terminal element function Neutralleiter @@ -9403,12 +9422,12 @@ Bitte fügen Sie eine neue Tabelle hinzu oder passen Sie die vorhandene Tabelle QetShapeItem - + une shape ein Shape - + une ligne einer Linie @@ -9438,17 +9457,17 @@ Bitte fügen Sie eine neue Tabelle hinzu oder passen Sie die vorhandene Tabelle %1 ändern - + un rectangle eines Rechtecks - + une éllipse einer Ellipse - + une polyligne eine Polylinie @@ -9713,7 +9732,7 @@ Bitte fügen Sie eine neue Tabelle hinzu oder passen Sie die vorhandene Tabelle PushButton - + @@ -12410,7 +12429,7 @@ Andere Felder werden nicht verwendet. Gray : Black element part filling - + Grau: Schwarz @@ -13217,7 +13236,7 @@ Andere Felder werden nicht verwendet. - + Créer un Folio Numérotation Auto Neue auto-nummerierte Folie anlegen @@ -13864,7 +13883,7 @@ Maximale Länge: %2px Form - + diff --git a/qelectrotech.qrc b/qelectrotech.qrc index e7095b1fe..00c5c219a 100644 --- a/qelectrotech.qrc +++ b/qelectrotech.qrc @@ -51,6 +51,7 @@ ico/16x16/endline-triangle.png ico/16x16/folder-new.png ico/16x16/folder.png + ico/16x16/go-company.png ico/16x16/go-down.png ico/16x16/go-home.png ico/16x16/go-up.png @@ -131,6 +132,7 @@ ico/22x22/folder-delete.png ico/22x22/folder-edit.png ico/22x22/folder-new.png + ico/22x22/go-company.png ico/22x22/go-down.png ico/22x22/go-home.png ico/22x22/go-up.png diff --git a/sources/ElementsCollection/elementscollectionmodel.cpp b/sources/ElementsCollection/elementscollectionmodel.cpp index 14c37c9fc..e3e6c8841 100644 --- a/sources/ElementsCollection/elementscollectionmodel.cpp +++ b/sources/ElementsCollection/elementscollectionmodel.cpp @@ -258,6 +258,7 @@ bool ElementsCollectionModel::dropMimeData(const QMimeData *data, @param projects : list of projects to load */ void ElementsCollectionModel::loadCollections(bool common_collection, + bool company_collection, bool custom_collection, QList projects) { @@ -265,10 +266,12 @@ void ElementsCollectionModel::loadCollections(bool common_collection, if (common_collection) addCommonCollection(false); + if (company_collection) + addCompanyCollection(false); if (custom_collection) addCustomCollection(false); - if (common_collection || custom_collection) + if (common_collection || company_collection || custom_collection) m_items_list_to_setUp.append(items()); @@ -321,22 +324,41 @@ void ElementsCollectionModel::addCommonCollection(bool set_data) } /** - @brief ElementsCollectionModel::addCustomCollection - Add the custom elements collection to this model - @param set_data + @brief ElementsCollectionModel::addCompanyCollection + Add the company elements collection to this model + @param set_data +*/ +void ElementsCollectionModel::addCompanyCollection(bool set_data) +{ + FileElementCollectionItem *feci = new FileElementCollectionItem(); + if (feci->setRootPath(QETApp::companyElementsDirN(), + set_data, + m_hide_element)) { + invisibleRootItem()->appendRow(feci); + if (set_data) + feci->setUpData(); + } + else + delete feci; +} + +/** + @brief ElementsCollectionModel::addCustomCollection + Add the custom elements collection to this model + @param set_data */ void ElementsCollectionModel::addCustomCollection(bool set_data) { - FileElementCollectionItem *feci = new FileElementCollectionItem(); - if (feci->setRootPath(QETApp::customElementsDirN(), - set_data, - m_hide_element)) { - invisibleRootItem()->appendRow(feci); - if (set_data) - feci->setUpData(); - } - else - delete feci; + FileElementCollectionItem *feci = new FileElementCollectionItem(); + if (feci->setRootPath(QETApp::customElementsDirN(), + set_data, + m_hide_element)) { + invisibleRootItem()->appendRow(feci); + if (set_data) + feci->setUpData(); + } + else + delete feci; } /** @@ -557,8 +579,9 @@ QModelIndex ElementsCollectionModel::indexFromLocation( { QList child_list; - for (int i=0 ; i(item(i))); + } foreach(ElementCollectionItem *eci, child_list) { @@ -567,7 +590,8 @@ QModelIndex ElementsCollectionModel::indexFromLocation( if (eci->type() == FileElementCollectionItem::Type) { if (FileElementCollectionItem *feci = static_cast(eci)) { if ( (location.isCommonCollection() && feci->isCommonCollection()) || - (location.isCustomCollection() && !feci->isCommonCollection()) ) { + (location.isCompanyCollection() && feci->isCompanyCollection()) || + (location.isCustomCollection() && !feci->isCommonCollection()) ) { match_eci = feci->itemAtPath(location.collectionPath(false)); } } diff --git a/sources/ElementsCollection/elementscollectionmodel.h b/sources/ElementsCollection/elementscollectionmodel.h index 9a3971c23..a435dc8c9 100644 --- a/sources/ElementsCollection/elementscollectionmodel.h +++ b/sources/ElementsCollection/elementscollectionmodel.h @@ -42,10 +42,11 @@ class ElementsCollectionModel : public QStandardItemModel bool canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const override; bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override; - void loadCollections(bool common_collection, bool custom_collection, QList projects); + void loadCollections(bool common_collection, bool company_collection, bool custom_collection, QList projects); - void addCommonCollection(bool set_data = true); - void addCustomCollection(bool set_data = true); + void addCommonCollection(bool set_data = true); + void addCompanyCollection(bool set_data = true); + void addCustomCollection(bool set_data = true); void addLocation(const ElementsLocation& location); void addProject(QETProject *project, bool set_data = true); diff --git a/sources/ElementsCollection/elementscollectionwidget.cpp b/sources/ElementsCollection/elementscollectionwidget.cpp index 7ea332cce..ebee5ab25 100644 --- a/sources/ElementsCollection/elementscollectionwidget.cpp +++ b/sources/ElementsCollection/elementscollectionwidget.cpp @@ -96,7 +96,7 @@ void ElementsCollectionWidget::addProject(QETProject *project) m_progress_bar->show(); m_tree_view->setDisabled(true); QList prj; prj.append(project); - m_model->loadCollections(false,false, prj); + m_model->loadCollections(false, false, false, prj); } else { m_waiting_project.append(project); @@ -387,7 +387,8 @@ void ElementsCollectionWidget::deleteElement() if (! (loc.isElement() && loc.exist() && loc.isFileSystem() - && loc.collectionPath().startsWith("custom://")) ) return; + && (loc.collectionPath().startsWith("company://") + || loc.collectionPath().startsWith("custom://"))) ) return; if (QET::QetMessageBox::question( this, @@ -430,7 +431,8 @@ void ElementsCollectionWidget::deleteDirectory() if (! (loc.isDirectory() && loc.exist() && loc.isFileSystem() - && loc.collectionPath().startsWith("custom://")) ) return; + && (loc.collectionPath().startsWith("company://") + || loc.collectionPath().startsWith("custom://"))) ) return; if (QET::QetMessageBox::question( this, @@ -655,7 +657,7 @@ void ElementsCollectionWidget::reload() this, &ElementsCollectionWidget::loadingFinished); - m_new_model->loadCollections(true, true, project_list); + m_new_model->loadCollections(true, true, true, project_list); } /** diff --git a/sources/ElementsCollection/elementslocation.cpp b/sources/ElementsCollection/elementslocation.cpp index f1e666384..617d902c7 100644 --- a/sources/ElementsCollection/elementslocation.cpp +++ b/sources/ElementsCollection/elementslocation.cpp @@ -168,7 +168,7 @@ QString ElementsLocation::baseName() const @brief ElementsLocation::collectionPath Return the path of the represented element relative to collection if protocol is true the path is prepended by - the collection type (common://, custom:// or embed://) + the collection type (common://, company://, custom:// or embed://) else if false, only the collection path is returned without the collection type. @param protocol @@ -181,7 +181,7 @@ QString ElementsLocation::collectionPath(bool protocol) const else { QString path = m_collection_path; - return path.remove(QRegularExpression("common://|custom://|embed://")); + return path.remove(QRegularExpression("common://|company://|custom://|embed://")); } } @@ -229,7 +229,7 @@ QString ElementsLocation::path() const @brief ElementsLocation::setPath Set the path of this item. The path can be relative to a collection - (start by common:// , custom:// or embed://) or not. + (start by common://, company://, custom:// or embed://) or not. @param path */ void ElementsLocation::setPath(const QString &path) @@ -290,15 +290,20 @@ void ElementsLocation::setPath(const QString &path) // The path is in file system, // the given path is relative to common or custom collection - else if (path.startsWith("common://") || path.startsWith("custom://")) + else if (path.startsWith("common://") || path.startsWith("company://") || path.startsWith("custom://")) { QString p; - if (path.startsWith("common://")) - { - tmp_path.remove("common://"); - p = QETApp::commonElementsDirN() + "/" + tmp_path; - } - else + if (path.startsWith("common://")) + { + tmp_path.remove("common://"); + p = QETApp::commonElementsDirN() + "/" + tmp_path; + } + else if (path.startsWith("company://")) + { + tmp_path.remove("company://"); + p = QETApp::companyElementsDirN() + "/" + tmp_path; + } + else { tmp_path.remove("custom://"); p = QETApp::customElementsDirN() + "/" + tmp_path; @@ -314,13 +319,19 @@ void ElementsLocation::setPath(const QString &path) if(path_.endsWith(".elmt")) { m_file_system_path = path_; - if (path_.startsWith(QETApp::commonElementsDirN())) - { - path_.remove(QETApp::commonElementsDirN()+="/"); - path_.prepend("common://"); - m_collection_path = path_; - } - else if (path_.startsWith(QETApp::customElementsDirN())) + if (path_.startsWith(QETApp::commonElementsDirN())) + { + path_.remove(QETApp::commonElementsDirN()+="/"); + path_.prepend("common://"); + m_collection_path = path_; + } + else if (path_.startsWith(QETApp::companyElementsDirN())) + { + path_.remove(QETApp::companyElementsDirN()+="/"); + path_.prepend("company://"); + m_collection_path = path_; + } + else if (path_.startsWith(QETApp::customElementsDirN())) { path_.remove(QETApp::customElementsDirN()+="/"); path_.prepend("custom://"); @@ -330,13 +341,19 @@ void ElementsLocation::setPath(const QString &path) else { m_file_system_path = path_; - if (path_.startsWith(QETApp::commonElementsDirN())) - { - path_.remove(QETApp::commonElementsDirN()+="/"); - path_.prepend("common://"); - m_collection_path = path_; - } - else if (path_.startsWith(QETApp::customElementsDirN())) + if (path_.startsWith(QETApp::commonElementsDirN())) + { + path_.remove(QETApp::commonElementsDirN()+="/"); + path_.prepend("common://"); + m_collection_path = path_; + } + else if (path_.startsWith(QETApp::companyElementsDirN())) + { + path_.remove(QETApp::companyElementsDirN()+="/"); + path_.prepend("company://"); + m_collection_path = path_; + } + else if (path_.startsWith(QETApp::customElementsDirN())) { path_.remove(QETApp::customElementsDirN()+="/"); path_.prepend("custom://"); @@ -484,13 +501,23 @@ bool ElementsLocation::isFileSystem() const } /** - @brief ElementsLocation::isCommonCollection - @return - True if this location represent an item from the common collection + @brief ElementsLocation::isCommonCollection + @return + True if this location represent an item from the common collection */ bool ElementsLocation::isCommonCollection() const { - return fileSystemPath().startsWith(QETApp::commonElementsDirN()); + return fileSystemPath().startsWith(QETApp::commonElementsDirN()); +} + +/** + @brief ElementsLocation::isCompanyCollection + @return + True if this location represent an item from the company collection +*/ +bool ElementsLocation::isCompanyCollection() const +{ + return fileSystemPath().startsWith(QETApp::companyElementsDirN()); } /** diff --git a/sources/ElementsCollection/elementslocation.h b/sources/ElementsCollection/elementslocation.h index b5223914d..501b32764 100644 --- a/sources/ElementsCollection/elementslocation.h +++ b/sources/ElementsCollection/elementslocation.h @@ -75,8 +75,9 @@ class ElementsLocation bool isElement() const; bool isDirectory() const; bool isFileSystem() const; - bool isCommonCollection() const; - bool isCustomCollection() const; + bool isCommonCollection() const; + bool isCompanyCollection() const; + bool isCustomCollection() const; bool isProject() const; bool exist() const; bool isWritable() const; diff --git a/sources/ElementsCollection/fileelementcollectionitem.cpp b/sources/ElementsCollection/fileelementcollectionitem.cpp index d3354435f..75f77aaf9 100644 --- a/sources/ElementsCollection/fileelementcollectionitem.cpp +++ b/sources/ElementsCollection/fileelementcollectionitem.cpp @@ -120,9 +120,11 @@ QString FileElementCollectionItem::localName() else if (isDir()) { if (isCollectionRoot()) { - if (m_path == QETApp::commonElementsDirN()) - setText(QObject::tr("Collection QET")); - else if (m_path == QETApp::customElementsDirN()) + if (m_path == QETApp::commonElementsDirN()) + setText(QObject::tr("Collection QET")); + else if (m_path == QETApp::companyElementsDirN()) + setText(QObject::tr("Collection Company")); + else if (m_path == QETApp::customElementsDirN()) setText(QObject::tr("Collection utilisateur")); else setText(QObject::tr("Collection inconnue")); @@ -194,6 +196,8 @@ QString FileElementCollectionItem::collectionPath() const if (isCollectionRoot()) { if (m_path == QETApp::commonElementsDirN()) return "common://"; + else if (m_path == QETApp::companyElementsDirN()) + return "company://"; else return "custom://"; } @@ -217,19 +221,29 @@ QString FileElementCollectionItem::collectionPath() const bool FileElementCollectionItem::isCollectionRoot() const { if (m_path == QETApp::commonElementsDirN() - || m_path == QETApp::customElementsDirN()) - return true; + || m_path == QETApp::companyElementsDirN() + || m_path == QETApp::customElementsDirN()) + return true; else return false; } /** - @brief FileElementCollectionItem::isCommonCollection - @return True if this item represent the common collection + @brief FileElementCollectionItem::isCommonCollection + @return True if this item represent the common collection */ bool FileElementCollectionItem::isCommonCollection() const { - return fileSystemPath().startsWith(QETApp::commonElementsDirN()); + return fileSystemPath().startsWith(QETApp::commonElementsDirN()); +} + +/** + @brief FileElementCollectionItem::isCompanyCollection + @return True if this item represent the company collection +*/ +bool FileElementCollectionItem::isCompanyCollection() const +{ + return fileSystemPath().startsWith(QETApp::companyElementsDirN()); } /** @@ -306,6 +320,8 @@ void FileElementCollectionItem::setUpIcon() if (isCollectionRoot()) { if (m_path == QETApp::commonElementsDirN()) setIcon(QIcon(":/ico/16x16/qet.png")); + else if (m_path == QETApp::companyElementsDirN()) + setIcon(QIcon(":/ico/16x16/go-company.png")); else setIcon(QIcon(":/ico/16x16/go-home.png")); } diff --git a/sources/ElementsCollection/fileelementcollectionitem.h b/sources/ElementsCollection/fileelementcollectionitem.h index 1e4cf87bf..230cf95d3 100644 --- a/sources/ElementsCollection/fileelementcollectionitem.h +++ b/sources/ElementsCollection/fileelementcollectionitem.h @@ -47,8 +47,9 @@ class FileElementCollectionItem : public ElementCollectionItem QString name() const override; QString collectionPath() const override; bool isCollectionRoot() const override; - bool isCommonCollection() const; - bool isCustomCollection() const; + bool isCommonCollection() const; + bool isCompanyCollection() const; + bool isCustomCollection() const; void addChildAtPath(const QString &collection_name) override; void setUpData() override; diff --git a/sources/editor/graphicspart/customelementgraphicpart.cpp b/sources/editor/graphicspart/customelementgraphicpart.cpp index 50bb4a9c5..abfa6317e 100644 --- a/sources/editor/graphicspart/customelementgraphicpart.cpp +++ b/sources/editor/graphicspart/customelementgraphicpart.cpp @@ -217,7 +217,8 @@ void CustomElementGraphicPart::stylesToXml(QDomElement &qde) const {HTMLYellowYellowFilling, "HTMLYellowYellow"}, {HTMLYellowLightYellowFilling, "HTMLYellowLightYellow"}, {HTMLYellowLemonChiffonFilling, "HTMLYellowLemonChiffon"}, - {HTMLYellowLightGoldenrodYellowFilling, "HTMLYellowLightGoldenrodYellow"}, + {HTMLYellowLightGoldenrodYellowFilling, + "HTMLYellowLightGoldenrodYellow"}, {HTMLYellowPapayaWhipFilling, "HTMLYellowPapayaWhip"}, {HTMLYellowMoccasinFilling, "HTMLYellowMoccasin"}, {HTMLYellowPeachPuffFilling, "HTMLYellowPeachPuff"}, @@ -594,7 +595,8 @@ void CustomElementGraphicPart::stylesFromXml(const QDomElement &qde) {"HTMLYellowYellow", HTMLYellowYellowFilling}, {"HTMLYellowLightYellow", HTMLYellowLightYellowFilling}, {"HTMLYellowLemonChiffon", HTMLYellowLemonChiffonFilling}, - {"HTMLYellowLightGoldenrodYellow", HTMLYellowLightGoldenrodYellowFilling}, + {"HTMLYellowLightGoldenrodYellow", + HTMLYellowLightGoldenrodYellowFilling}, {"HTMLYellowPapayaWhip", HTMLYellowPapayaWhipFilling}, {"HTMLYellowMoccasin", HTMLYellowMoccasinFilling}, {"HTMLYellowPeachPuff", HTMLYellowPeachPuffFilling}, @@ -629,7 +631,8 @@ void CustomElementGraphicPart::stylesFromXml(const QDomElement &qde) {"HTMLGreenChartreuse", HTMLGreenChartreuseFilling}, {"HTMLGreenGreenYellow", HTMLGreenGreenYellowFilling}, {"HTMLGreenSpringGreen", HTMLGreenSpringGreenFilling}, - {"HTMLGreenMediumSpringGreen", HTMLGreenMediumSpringGreenFilling}, + {"HTMLGreenMediumSpringGreen", + HTMLGreenMediumSpringGreenFilling}, {"HTMLGreenLightGreen", HTMLGreenLightGreenFilling}, {"HTMLGreenPaleGreen", HTMLGreenPaleGreenFilling}, {"HTMLGreenDarkSeaGreen", HTMLGreenDarkSeaGreenFilling}, @@ -759,7 +762,8 @@ void CustomElementGraphicPart::stylesFromXml(const QDomElement &qde) {"HTMLYellowYellow", HTMLYellowYellowColor}, {"HTMLYellowLightYellow", HTMLYellowLightYellowColor}, {"HTMLYellowLemonChiffon", HTMLYellowLemonChiffonColor}, - {"HTMLYellowLightGoldenrodYellow", HTMLYellowLightGoldenrodYellowColor}, + {"HTMLYellowLightGoldenrodYellow", + HTMLYellowLightGoldenrodYellowColor}, {"HTMLYellowPapayaWhip", HTMLYellowPapayaWhipColor}, {"HTMLYellowMoccasin", HTMLYellowMoccasinColor}, {"HTMLYellowPeachPuff", HTMLYellowPeachPuffColor}, diff --git a/sources/editor/graphicspart/partterminal.cpp b/sources/editor/graphicspart/partterminal.cpp index dc1a68101..c46c2dc96 100644 --- a/sources/editor/graphicspart/partterminal.cpp +++ b/sources/editor/graphicspart/partterminal.cpp @@ -176,6 +176,7 @@ qreal PartTerminal::rotation() const { case Qet::South : return 180; case Qet::West : return 270; } + return 0; } /** diff --git a/sources/elementdialog.cpp b/sources/elementdialog.cpp index 1c95c7175..fbbde70d8 100644 --- a/sources/elementdialog.cpp +++ b/sources/elementdialog.cpp @@ -93,9 +93,9 @@ void ElementDialog::setUpWidget() prjs.append(prj); if (m_mode == OpenElement) - m_model->loadCollections(true, true, prjs); + m_model->loadCollections(true, true, true, prjs); else - m_model->loadCollections(false, true, prjs); + m_model->loadCollections(false, true, true, prjs); m_tree_view->setModel(m_model); m_tree_view->setHeaderHidden(true); diff --git a/sources/elementspanel.cpp b/sources/elementspanel.cpp index 40d361d83..064dc76e9 100644 --- a/sources/elementspanel.cpp +++ b/sources/elementspanel.cpp @@ -221,8 +221,9 @@ bool ElementsPanel::matchesFilter(const QTreeWidgetItem *item, void ElementsPanel::reload() { QIcon system_icon(":/ico/16x16/qet.png"); + QIcon company_icon(":/ico/16x16/go-company.png"); QIcon user_icon(":/ico/16x16/go-home.png"); - + // load the common title block templates collection TitleBlockTemplatesCollection *common_tbt_collection = QETApp::commonTitleBlockTemplatesCollection(); common_tbt_collection_item_ = addTemplatesCollection(common_tbt_collection, invisibleRootItem()); diff --git a/sources/elementspanel.h b/sources/elementspanel.h index cee15905d..e5be94d79 100644 --- a/sources/elementspanel.h +++ b/sources/elementspanel.h @@ -81,6 +81,7 @@ class ElementsPanel : public GenericPanel { private: QSet projects_to_display_; ///< list of projects that have been added to this panel QTreeWidgetItem *common_tbt_collection_item_; ///< pointer to the item representing the common templates collection + QTreeWidgetItem *company_tbt_collection_item_; ///< pointer to the item representing the company's templates collection QTreeWidgetItem *custom_tbt_collection_item_; ///< pointer to the item representing the user templates collection bool first_reload_; ///< used to distinguish the first time this panel is reloaded QString filter_; ///< Currently applied filter diff --git a/sources/properties/elementdata.cpp b/sources/properties/elementdata.cpp index 309e98593..6209fb85d 100644 --- a/sources/properties/elementdata.cpp +++ b/sources/properties/elementdata.cpp @@ -362,6 +362,7 @@ QString ElementData::masterTypeToString(ElementData::MasterType type) case ElementData::Commutator: return QStringLiteral("commutator"); } + return QStringLiteral("coil"); } ElementData::MasterType ElementData::masterTypeFromString(const QString &string) @@ -394,6 +395,7 @@ QString ElementData::slaveTypeToString(ElementData::SlaveType type) case ElementData::delayOnOff: return QStringLiteral("delayOnOff"); } + return QStringLiteral("simple"); } ElementData::SlaveType ElementData::slaveTypeFromString(const QString &string) @@ -428,6 +430,7 @@ QString ElementData::slaveStateToString(ElementData::SlaveState type) case Other: return QStringLiteral("Other"); } + return QStringLiteral("Other"); } ElementData::SlaveState ElementData::slaveStateFromString(const QString &string) @@ -462,6 +465,7 @@ QString ElementData::terminalTypeToString(ElementData::TerminalType type) case ElementData::TTGround: return QStringLiteral("ground"); } + return QStringLiteral("generic"); } ElementData::TerminalType ElementData::terminalTypeFromString(const QString &string) @@ -498,6 +502,7 @@ QString ElementData::translatedTerminalType(ElementData::TerminalType type) case ElementData::TTGround: return QObject::tr("Terre", "ground terminal element type"); } + return QObject::tr("Générique", "generic terminal element type"); } QString ElementData::terminalFunctionToString(ElementData::TerminalFunction function) @@ -510,6 +515,7 @@ QString ElementData::terminalFunctionToString(ElementData::TerminalFunction func case ElementData::TFNeutral: return QStringLiteral("neutral"); } + return QStringLiteral("generic"); } ElementData::TerminalFunction ElementData::terminalFunctionFromString(const QString &string) @@ -535,6 +541,7 @@ QString ElementData::translatedTerminalFunction(ElementData::TerminalFunction fu case TFPhase : return QObject::tr("Phase", "phase terminal element function" ); case TFNeutral : return QObject::tr("Neutre", "neutral terminal element function"); } + return QObject::tr("Générique", "generic terminal element function"); } void ElementData::kindInfoFromXml(const QDomElement &xml_element) diff --git a/sources/properties/terminaldata.cpp b/sources/properties/terminaldata.cpp index 6eb471945..c073400c3 100644 --- a/sources/properties/terminaldata.cpp +++ b/sources/properties/terminaldata.cpp @@ -172,6 +172,7 @@ QString TerminalData::typeToString(TerminalData::Type type) case Outer : return QString("Outer"); } + return QString("Generic"); } /** diff --git a/sources/qet.cpp b/sources/qet.cpp index bfa47c503..1bf0ceabd 100644 --- a/sources/qet.cpp +++ b/sources/qet.cpp @@ -687,6 +687,8 @@ QString QET::qetCollectionToString(const QET::QetCollection &c) { case Common : return "common"; + case Company : + return "company"; case Custom : return "custom"; case Embedded : @@ -706,6 +708,8 @@ QET::QetCollection QET::qetCollectionFromString(const QString &str) { if (str == "common") return QetCollection::Common; + else if (str == "company") + return QetCollection::Company; else if (str == "custom") return QetCollection::Custom; else if (str == "embedded") diff --git a/sources/qet.h b/sources/qet.h index 5a5a2d9e6..5764a2cb3 100644 --- a/sources/qet.h +++ b/sources/qet.h @@ -147,6 +147,7 @@ namespace QET { ///Enum used to specify the origin of a collection of thing (title block, element etc...) enum QetCollection { Common, ///< From common collection + Company, ///< From company collection Custom, ///< From user collection Embedded ///< From an embedded collection (a project for example) }; diff --git a/sources/qetapp.cpp b/sources/qetapp.cpp index bb64c1ca5..cb27ddcac 100644 --- a/sources/qetapp.cpp +++ b/sources/qetapp.cpp @@ -75,6 +75,9 @@ TitleBlockTemplate *QETApp::default_titleblock_template_ = nullptr; QString QETApp::m_common_element_dir = QString(); bool QETApp::m_common_element_dir_is_set = false; +QString QETApp::m_company_element_dir = QString(); +bool QETApp::m_company_element_dir_is_set = false; + QString QETApp::m_custom_element_dir = QString(); bool QETApp::m_custom_element_dir_is_set = false; @@ -556,52 +559,101 @@ QString QETApp::commonElementsDir() } /** - @brief QETApp::customElementsDir - @return the dir path of user elements collection appended with a - "/" separator + @brief QETApp::customElementsDir + @return the dir path of user elements collection appended with a + "/" separator */ QString QETApp::customElementsDir() { - if (m_custom_element_dir_is_set) - { - return m_custom_element_dir; - } - else - { - m_custom_element_dir_is_set = true; + if (m_custom_element_dir_is_set) + { + return m_custom_element_dir; + } + else + { + m_custom_element_dir_is_set = true; - QSettings settings; - QString path = settings.value( - "elements-collections/custom-collection-path", - "default").toString(); - if (path != "default" && !path.isEmpty()) - { - QDir dir(path); - if (dir.exists()) - { - m_custom_element_dir = path; - if(!m_custom_element_dir.endsWith("/")) { - m_custom_element_dir.append("/"); - } - return m_custom_element_dir; - } - } + QSettings settings; + QString path = settings.value( + "elements-collections/custom-collection-path", + "default").toString(); + if (path != "default" && !path.isEmpty()) + { + QDir dir(path); + if (dir.exists()) + { + m_custom_element_dir = path; + if(!m_custom_element_dir.endsWith("/")) { + m_custom_element_dir.append("/"); + } + return m_custom_element_dir; + } + } - m_custom_element_dir = configDir() + "elements/"; - return m_custom_element_dir; - } + m_custom_element_dir = configDir() + "elements/"; + return m_custom_element_dir; + } } /** - @brief QETApp::commonElementsDirN - like QString QETApp::commonElementsDir but without "/" at the end - @return QString path + @brief QETApp::companyElementsDir + @return the dir path of company elements collection appended with a + "/" separator +*/ +QString QETApp::companyElementsDir() +{ + if (m_company_element_dir_is_set) + { + return m_company_element_dir; + } + else + { + m_company_element_dir_is_set = true; + + QSettings settings; + QString path = settings.value( + "elements-collections/company-collection-path", + "default").toString(); + if (path != "default" && !path.isEmpty()) + { + QDir dir(path); + if (dir.exists()) + { + m_company_element_dir = path; + if(!m_company_element_dir.endsWith("/")) { + m_company_element_dir.append("/"); + } + return m_company_element_dir; + } + } + + m_company_element_dir = configDir() + "elements/"; + return m_company_element_dir; + } +} + +/** + @brief QETApp::commonElementsDirN + like QString QETApp::commonElementsDir but without "/" at the end + @return QString path */ QString QETApp::commonElementsDirN() { - QString path = commonElementsDir(); - if (path.endsWith("/")) path.remove(path.length()-1, 1); - return path; + QString path = commonElementsDir(); + if (path.endsWith("/")) path.remove(path.length()-1, 1); + return path; +} + +/** + @brief QETApp::companyElementsDirN + like QString QETApp::companyElementsDir but without "/" at the end + @return QString path +*/ +QString QETApp::companyElementsDirN() +{ + QString path = companyElementsDir(); + if (path.endsWith("/")) path.remove(path.length()-1, 1); + return path; } /** @@ -758,9 +810,13 @@ QString QETApp::realPath(const QString &sym_path) { QString directory; if (sym_path.startsWith("common://")) { directory = commonElementsDir(); - } else if (sym_path.startsWith("custom://")) { - directory = customElementsDir(); - } else if (sym_path.startsWith(QETAPP_COMMON_TBT_PROTOCOL "://")) { + } else if (sym_path.startsWith("company://")) { + directory = companyElementsDir(); + } else if (sym_path.startsWith("company://")) { + directory = companyElementsDir(); + } else if (sym_path.startsWith("custom://")) { + directory = customElementsDir(); + } else if (sym_path.startsWith(QETAPP_COMMON_TBT_PROTOCOL "://")) { directory = commonTitleBlockTemplatesDir(); } else if (sym_path.startsWith(QETAPP_CUSTOM_TBT_PROTOCOL "://")) { directory = customTitleBlockTemplatesDir(); @@ -790,6 +846,7 @@ QString QETApp::symbolicPath(const QString &real_path) { // get the common and custom folders // recupere les dossier common et custom QString commond = commonElementsDir(); + QString companyd = companyElementsDir(); QString customd = customElementsDir(); QString chemin; // analyzes the file path passed in parameter @@ -798,6 +855,10 @@ QString QETApp::symbolicPath(const QString &real_path) { chemin = "common://" + real_path.right( real_path.length() - commond.length()); + } else if (real_path.startsWith(companyd)) { + chemin = "company://" + + real_path.right( + real_path.length() - companyd.length()); } else if (real_path.startsWith(customd)) { chemin = "custom://" + real_path.right( @@ -1913,11 +1974,15 @@ void QETApp::initConfiguration() QDir config_dir(QETApp::configDir()); if (!config_dir.exists()) config_dir.mkpath(QETApp::configDir()); - QDir custom_elements_dir(QETApp::customElementsDir()); - if (!custom_elements_dir.exists()) - custom_elements_dir.mkpath(QETApp::customElementsDir()); + QDir custom_elements_dir(QETApp::customElementsDir()); + if (!custom_elements_dir.exists()) + custom_elements_dir.mkpath(QETApp::customElementsDir()); - QDir custom_tbt_dir(QETApp::customTitleBlockTemplatesDir()); + QDir company_elements_dir(QETApp::companyElementsDir()); + if (!company_elements_dir.exists()) + company_elements_dir.mkpath(QETApp::companyElementsDir()); + + QDir custom_tbt_dir(QETApp::customTitleBlockTemplatesDir()); if (!custom_tbt_dir.exists()) custom_tbt_dir.mkpath(QETApp::customTitleBlockTemplatesDir()); diff --git a/sources/qetapp.h b/sources/qetapp.h index 042dc8204..5e3c59032 100644 --- a/sources/qetapp.h +++ b/sources/qetapp.h @@ -79,10 +79,12 @@ class QETApp : public QObject static QList availableTitleBlockTemplatesCollections(); static TitleBlockTemplatesCollection *titleBlockTemplatesCollection(const QString &); - static QString commonElementsDir(); - static QString customElementsDir(); + static QString commonElementsDir(); + static QString companyElementsDir(); + static QString customElementsDir(); static QString commonElementsDirN(); - static QString customElementsDirN(); + static QString companyElementsDirN(); + static QString customElementsDirN(); static void resetCollectionsPath(); static QString commonTitleBlockTemplatesDir(); static QString customTitleBlockTemplatesDir(); @@ -213,6 +215,9 @@ class QETApp : public QObject static QString m_common_element_dir; static bool m_common_element_dir_is_set; + static QString m_company_element_dir; + static bool m_company_element_dir_is_set; + static QString m_custom_element_dir; static bool m_custom_element_dir_is_set; diff --git a/sources/qetgraphicsitem/qetshapeitem.cpp b/sources/qetgraphicsitem/qetshapeitem.cpp index ff563d262..11ca96b66 100644 --- a/sources/qetgraphicsitem/qetshapeitem.cpp +++ b/sources/qetgraphicsitem/qetshapeitem.cpp @@ -970,10 +970,12 @@ bool QetShapeItem::toDXF(const QString &filepath,const QPen &pen) Createdxf::dxfColor(pen)); return true; case Polygon: - if(m_polygon.isClosed()) + if(m_polygon.isClosed()) { Createdxf::drawPolygon(filepath,m_polygon,Createdxf::dxfColor(pen)); - else + } + else { Createdxf::drawPolyline(filepath,m_polygon,Createdxf::dxfColor(pen)); + } return true; default: return false; diff --git a/sources/qeticons.cpp b/sources/qeticons.cpp index bb297486c..5a6091074 100644 --- a/sources/qeticons.cpp +++ b/sources/qeticons.cpp @@ -32,6 +32,7 @@ namespace QET { QIcon Autoconnect; QIcon BringForward; QIcon Cancel; + QIcon Company; QIcon Conductor; QIcon ConductorEdit; QIcon ConductorSettings; @@ -395,6 +396,8 @@ void QET::Icons::initIcons() Autoconnect .addFile(":/ico/22x22/autoconnect.png"); BringForward .addFile(":/ico/22x22/bring_forward.png"); Cancel .addFile(":/ico/16x16/item-cancel.png"); + Company .addFile(":/ico/16x16/go-company.png"); + Company .addFile(":/ico/22x22/go-company.png"); Conductor .addFile(":/ico/16x16/conductor.png"); ConductorEdit .addFile(":/ico/16x16/conductor-edit.png"); ConductorSettings .addFile(":/ico/16x16/conductor-reset.png"); diff --git a/sources/qeticons.h b/sources/qeticons.h index 3363e1abf..066742814 100644 --- a/sources/qeticons.h +++ b/sources/qeticons.h @@ -39,6 +39,7 @@ namespace QET { extern QIcon Autoconnect; extern QIcon BringForward; extern QIcon Cancel; + extern QIcon Company; extern QIcon Conductor; extern QIcon ConductorEdit; extern QIcon ConductorSettings; diff --git a/sources/qetproject.cpp b/sources/qetproject.cpp index 1b1ca6e51..cbd7ffa72 100644 --- a/sources/qetproject.cpp +++ b/sources/qetproject.cpp @@ -509,7 +509,10 @@ void QETProject::setDefaultTitleBlockProperties(const TitleBlockProperties &titl case QET::Common : collection = QETApp::commonTitleBlockTemplatesCollection(); break; - case QET::Custom : + case QET::Company : + // collection = QETApp::companyTitleBlockTemplatesCollection(); + break; + case QET::Custom : collection = QETApp::customTitleBlockTemplatesCollection(); break; case QET::Embedded : diff --git a/sources/ui/configpage/generalconfigurationpage.cpp b/sources/ui/configpage/generalconfigurationpage.cpp index 30d0adf6d..a32d0f590 100644 --- a/sources/ui/configpage/generalconfigurationpage.cpp +++ b/sources/ui/configpage/generalconfigurationpage.cpp @@ -138,6 +138,15 @@ GeneralConfigurationPage::GeneralConfigurationPage(QWidget *parent) : ui->m_common_elmt_path_cb->blockSignals(false); } + path = settings.value("elements-collections/company-collection-path", "default").toString(); + if (path != "default") + { + ui->m_company_elmt_path_cb->blockSignals(true); + ui->m_company_elmt_path_cb->setCurrentIndex(1); + ui->m_company_elmt_path_cb->setItemData(1, path, Qt::DisplayRole); + ui->m_company_elmt_path_cb->blockSignals(false); + } + path = settings.value("elements-collections/custom-collection-path", "default").toString(); if (path != "default") { @@ -241,6 +250,21 @@ void GeneralConfigurationPage::applyConf() QETApp::resetCollectionsPath(); } + path = settings.value("elements-collections/company-collection-path").toString(); + if (ui->m_company_elmt_path_cb->currentIndex() == 1) + { + QString path = ui->m_company_elmt_path_cb->currentText(); + QDir dir(path); + settings.setValue("elements-collections/company-collection-path", + dir.exists() ? path : "default"); + } + else { + settings.setValue("elements-collections/company-collection-path", "default"); + } + if (path != settings.value("elements-collections/company-collection-path").toString()) { + QETApp::resetCollectionsPath(); + } + path = settings.value("elements-collections/custom-collection-path").toString(); if (ui->m_custom_elmt_path_cb->currentIndex() == 1) { @@ -398,6 +422,20 @@ void GeneralConfigurationPage::on_m_common_elmt_path_cb_currentIndexChanged(int } } +void GeneralConfigurationPage::on_m_company_elmt_path_cb_currentIndexChanged(int index) +{ + if (index == 1) + { + QString path = QFileDialog::getExistingDirectory(this, tr("Chemin de la collection company"), QDir::homePath()); + if (!path.isEmpty()) { + ui->m_company_elmt_path_cb->setItemData(1, path, Qt::DisplayRole); + } + else { + ui->m_company_elmt_path_cb->setCurrentIndex(0); + } + } +} + void GeneralConfigurationPage::on_m_custom_elmt_path_cb_currentIndexChanged(int index) { if (index == 1) diff --git a/sources/ui/configpage/generalconfigurationpage.h b/sources/ui/configpage/generalconfigurationpage.h index 0fb6b4737..61fd8c6f6 100644 --- a/sources/ui/configpage/generalconfigurationpage.h +++ b/sources/ui/configpage/generalconfigurationpage.h @@ -42,6 +42,7 @@ class GeneralConfigurationPage : public ConfigPage void on_m_font_pb_clicked(); void on_m_dyn_text_font_pb_clicked(); void on_m_common_elmt_path_cb_currentIndexChanged(int index); + void on_m_company_elmt_path_cb_currentIndexChanged(int index); void on_m_custom_elmt_path_cb_currentIndexChanged(int index); void on_m_custom_tbt_path_cb_currentIndexChanged(int index); void on_m_indi_text_font_pb_clicked(); diff --git a/sources/ui/configpage/generalconfigurationpage.ui b/sources/ui/configpage/generalconfigurationpage.ui index 3645f6aa6..c6b08ba08 100644 --- a/sources/ui/configpage/generalconfigurationpage.ui +++ b/sources/ui/configpage/generalconfigurationpage.ui @@ -6,7 +6,7 @@ 0 0 - 822 + 872 411 @@ -17,7 +17,7 @@ - 0 + 2 @@ -243,13 +243,34 @@ + + + Répertoire de la collection company + + + + + + + + Par defaut + + + + + Parcourir... + + + + + Répertoire de la collection utilisateur - + @@ -263,7 +284,14 @@ - + + + + Répertoire des cartouches utilisateur + + + + @@ -277,20 +305,13 @@ - + (Recharger les collections d'éléments pour appliquer les changements) - - - - Répertoire des cartouches utilisateur - - - @@ -847,9 +868,9 @@ Vous pouvez spécifier ici la valeur par défaut de ce champ pour les éléments - + - + Max. parts in Element Editor List diff --git a/sources/ui/titleblockpropertieswidget.cpp b/sources/ui/titleblockpropertieswidget.cpp index 374694515..5cbc8e854 100644 --- a/sources/ui/titleblockpropertieswidget.cpp +++ b/sources/ui/titleblockpropertieswidget.cpp @@ -419,6 +419,8 @@ void TitleBlockPropertiesWidget::updateTemplateList() QET::QetCollection qc = tbt_c -> collection(); if (qc == QET::QetCollection::Common) icon = QET::Icons::QETLogo; + else if (qc == QET::QetCollection::Company) + icon = QET::Icons::Company; else if (qc == QET::QetCollection::Custom) icon = QET::Icons::Home; else if (qc == QET::QetCollection::Embedded) diff --git a/sources/utils/macosxopenevent.cpp b/sources/utils/macosxopenevent.cpp index e3a6e34d0..c98693fc4 100644 --- a/sources/utils/macosxopenevent.cpp +++ b/sources/utils/macosxopenevent.cpp @@ -17,7 +17,7 @@ */ #include "macosxopenevent.h" -#include "singleapplication.h" +#include "../singleapplication.h" #include