Réflexions sur le futur des cartouches

Besoins exprimés

  • Les utilisateurs ont souvent besoin d'un cartouche différent / plus évolué que celui utilisé par QET actuellement : il faut donc qu'ils puissent modifier ses champs, leur valeur et leur agencement.
  • En revanche, chaque utilisateur se sert souvent du même type de cartouche, qu'il a besoin d'appliquer dans de nombreux schémas, voire de transmettre à des collègues : il faut donc un système de template (modèle ?)
  • La plupart des informations affichées par un cartouche correspondent à un champ texte ; toutefois, il est courant qu'une entreprise appose son logo : il faut donc prévoir deux types d'informations affichées : les champs de texte et les logos
  • Il est actuellement possible de pré-remplir certains champs du cartouche depuis la configuration de QET ; de même, certaines valeurs affichées par les cartouches peuvent être calculées (numéro du schéma, nombre de schémas dans le projet) ; il faut étendre ces possibilités en prévoyant plus de variables, utilisables dans tous les champs

Réflexions sur l'implémentation

Format des modèles

Les modèles de cartouche (titleblock templates) pourraient être exportables sous forme de fichiers .int. Leur contenu serait bien entendu au format XML pour une intégration plus facile dans les fichiers projets.

Exemple de modèle de cartouche :

<!-- le modèle de cartouche porte un nom qui permet de le référencer depuis un schéma.
Toutefois, contrairement aux éléments, on ne s'encombre pas d'un système d'arborescence -->
<titleblocktemplate name="ERDF">
    <!-- on commence par déclarer les images embarquées utilisables comme logos -->
    <logos>
        <!-- Solution basique pour embarquer des images non vectorielles : les insérer en base64 dans le XML -->
        <logo storage="base64" type="png" name="dott.png">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</logo>
        <logo storage="base64" type="png" name="qt.png">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</logo>
        <!-- L'intégration des logos SVG ne devrait pas poser de gros problème -->
        <logo storage="xml" type="svg" name="test.svg">
            <svg width="300px" xmlns="http://www.w3.org/2000/svg" height="300px" xmlns:xlink="http://www.w3.org/1999/xlink">
                <title>Small SVG example</title>
                <circle cx="120" cy="150" style="fill: gold;" r="60"/>
                <polyline points="120 30, 25 150, 290 150" stroke="brown" style="fill: none;" stroke-width="4"/>
                <polygon points="210 100, 210 200, 270 150" style="fill: lawngreen;"/>
                <text x="60" y="250" fill="blue">Hello, World!</text>
            </svg>
        </logo>
        <!-- pas sur que l'attribut "type" soit indispensable, par contre -->
    </logos>
    <!--
  Une fois qu'on a notre réserve de logos, on commence par définir notre cartouche comme une grille s'inscrivant dans un rectangle (= la place allouée au cartouche).
  La longueur de ce rectangle est inconnue (elle est héritée du schéma), et sa hauteur doit être fixée de manière absolue.
  On définit donc le nombre de colonnes et le nombre de lignes de la grille en entrant leurs dimensions séparées par des points-virgules.
  Les dimensions peuvent être exprimées de manière absolue en étant suivies de "px" pour pixels, mais aussi :
    - relativement a la longueur totale du rectangle, en étant suivies de "%" et précédées de "t" (pour "total" ; ce type de mesure est transcrit en mesure absolue des que la longueur du rectangle est connue) 
    - relativement a la longueur totale du rectangle, duquel on soustrait la somme des dimensions absolues, en étant suivies de "%" et précédées de "r" (pour "remaining")
  Ce dernier type de mesure permet par exemple de réserver la place pour un logo (taille absolue), et de partager l'espace restant avec des mesures relatives
   -->
    <grid cols="50px;r25%;r50%;r25%;50px;" rows="25px;25px">
        <!-- On a donc ici défini deux lignes mesurant 30px chacune, soit une hauteur fixe de 60px pour le cartouche, mais aussi un espace fixe de 60px a gauche, tandis que le reste est partage entre trois espaces.
             On définit maintenant des champs et logos, en indiquant dans quelle case de la grille ils se logent (attributs row et col), et sur combien de cases supplémentaires ils s'étendent (attributs rowspan et colspan, valant 0 par défaut).
         -->
        <logo rowspan="1" row="0" col="0" resource="dott.png"/>
        <!-- pour les champs de texte, on distingue le nom du champ, son nom affiché (qu'on appelle "label", et qui peut être affiché //ou non// sur le cartouche) de sa valeur, systématiquement affichée, dont on ne mentionne que la valeur par défaut -->
        <field rowspan="0" row="0" col="1" name="author" displaylabel="true"  align="left">
            <label>
                <!-- le label et la valeur peuvent être traduits -->
                <translation lang="fr">Auteur</translation>
                <translation lang="en">Author</translation>
            </label>
            <value>
                <translation lang="en">%author</translation>
            </value>
        </field>
        <!-- Il est également possible de spécifier la taille de police à utiliser dans la cellule -->
        <field rowspan="0" row="1" col="1" name="date" displaylabel="true" fontsize="12" hadjust="true" align="left">
            <!-- L'option hadjust="true" peut etre utilisee pour reduire la taille du texte s'il s'avere que celui-ci est trop lent pour tenir dans la cellule -->
            <label>
                <!-- le label et la valeur peuvent être traduits -->
                <translation lang="fr">Date</translation>
                <translation lang="en">Date</translation>
            </label>
            <value>
                <translation lang="en">%date</translation>
            </value>
        </field>
        <field rowspan="1" row="0" col="2" name="title"  displaylabel="false" align="center">
            <label>
                <!-- le label et la valeur peuvent être traduits -->
                <translation lang="fr">Titre</translation>
                <translation lang="en">Title</translation>
            </label>
            <value>
                <translation lang="en">%title</translation>
            </value>
        </field>
        <field rowspan="0" row="0" col="3" name="file"  displaylabel="true"  align="left">
            <label>
                <!-- le label et la valeur peuvent être traduits -->
                <translation lang="fr">Fichier</translation>
                <translation lang="en">File</translation>
            </label>
            <value>
                <translation lang="en">%filename</translation>
            </value>
        </field>
        <field rowspan="0" row="1" col="3" name="folio"  displaylabel="true"  align="left">
            <label>
                <!-- le label et la valeur peuvent être traduits -->
                <translation lang="fr">Folio</translation>
                <translation lang="en">Folio</translation>
            </label>
            <value>
                <translation lang="en">%{folio-id}/%{folio-total}</translation>
            </value>
        </field>
        <logo rowspan="1" row="0" col="4" resource="test.svg" />
    </grid>
</titleblocktemplate>

Note sur l'encodage en base 64 ; d'après l'article Wikipedia sur base64, pour un fichier de n octets, son encodage en base64 prendra (n + 2 - ((n + 2) % 3)) * 4 / 3 octets.

Format des schémas

Dans les schémas, on ajouterait un simple attribut XML titleblocktemplate qui ferait référence au nom du template. Exemple :

<diagram displayrows="true" cols="15" rows="6" order="1" rowsize="80" colsize="50" titleblocktemplate="ERDF">
[---]
</diagram>

Liste des fonctionnalités à implémenter

Il faudrait donc implémenter :

  1. une classe capable de lire un tel document XML, de le vérifier et de le dessiner
  2. l'embarquement de templates dans les projets
  3. les menus, fonctions et annulations nécessaires pour changer le template d'un schema
  4. les menus, fonctions et annulations nécessaires pour changer les couples noms/valeurs associés à un schema
  5. la mise en place de dossiers pour les templates fournis avec QET et pour les templates persos
  6. la gestion de la configuration par défaut :
    1. qui se décompose en :
      1. définition d'un template à utiliser par défaut
      2. définition de 0 à n couples noms/valeurs par défaut
    2. et qui doit être traitée aux niveaux suivants :
      1. En dur dans l'application : template reproduisant le cartouche classique + les noms/valeurs actuels
      2. Dans la configuration QElectroTech - le modèle est alors choisi parmi les templates common et custom
      3. Dans les propriétés de chaque projet - le modèle est alors choisi parmi ceux déjà embarqués
  7. Conséquence : il pourrait être utile qu'un template expose facilement les noms de variables qu'il utilise pour son rendu
  8. un éditeur de template :
    1. dans un premier temps : un simple champ de texte
    2. à terme un éditeur WYSIWYG

⇒ pour suivre l'évolution de la TODO relative à ces fonctionnalités (construction de la TODO et réalisation des tâches), se reporter à la page notes

Imprimer/exporter