Renommage dossiers/fichiers après audit
This commit is contained in:
parent
0e1aeb293c
commit
7213efb714
|
@ -0,0 +1,804 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang=""><head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="generator" content="pandoc">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
||||||
|
<title>-</title>
|
||||||
|
<style>
|
||||||
|
html {
|
||||||
|
line-height: 1.5;
|
||||||
|
font-family: Georgia, serif;
|
||||||
|
font-size: 20px;
|
||||||
|
color: #1a1a1a;
|
||||||
|
background-color: #fdfdfd;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
margin: 0 auto;
|
||||||
|
max-width: 36em;
|
||||||
|
padding-left: 50px;
|
||||||
|
padding-right: 50px;
|
||||||
|
padding-top: 50px;
|
||||||
|
padding-bottom: 50px;
|
||||||
|
hyphens: auto;
|
||||||
|
overflow-wrap: break-word;
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
|
font-kerning: normal;
|
||||||
|
}
|
||||||
|
@media (max-width: 600px) {
|
||||||
|
body {
|
||||||
|
font-size: 0.9em;
|
||||||
|
padding: 1em;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
font-size: 1.8em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media print {
|
||||||
|
body {
|
||||||
|
background-color: transparent;
|
||||||
|
color: black;
|
||||||
|
font-size: 12pt;
|
||||||
|
}
|
||||||
|
p, h2, h3 {
|
||||||
|
orphans: 3;
|
||||||
|
widows: 3;
|
||||||
|
}
|
||||||
|
h2, h3, h4 {
|
||||||
|
page-break-after: avoid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p {
|
||||||
|
margin: 1em 0;
|
||||||
|
}
|
||||||
|
a {
|
||||||
|
color: #1a1a1a;
|
||||||
|
}
|
||||||
|
a:visited {
|
||||||
|
color: #1a1a1a;
|
||||||
|
}
|
||||||
|
img {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
margin-top: 1.4em;
|
||||||
|
}
|
||||||
|
h5, h6 {
|
||||||
|
font-size: 1em;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
h6 {
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
ol, ul {
|
||||||
|
padding-left: 1.7em;
|
||||||
|
margin-top: 1em;
|
||||||
|
}
|
||||||
|
li > ol, li > ul {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
blockquote {
|
||||||
|
margin: 1em 0 1em 1.7em;
|
||||||
|
padding-left: 1em;
|
||||||
|
border-left: 2px solid #e6e6e6;
|
||||||
|
color: #606060;
|
||||||
|
}
|
||||||
|
code {
|
||||||
|
font-family: Menlo, Monaco, 'Lucida Console', Consolas, monospace;
|
||||||
|
font-size: 85%;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
pre {
|
||||||
|
margin: 1em 0;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
pre code {
|
||||||
|
padding: 0;
|
||||||
|
overflow: visible;
|
||||||
|
overflow-wrap: normal;
|
||||||
|
}
|
||||||
|
.sourceCode {
|
||||||
|
background-color: transparent;
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
hr {
|
||||||
|
background-color: #1a1a1a;
|
||||||
|
border: none;
|
||||||
|
height: 1px;
|
||||||
|
margin: 1em 0;
|
||||||
|
}
|
||||||
|
table {
|
||||||
|
margin: 1em 0;
|
||||||
|
border-collapse: collapse;
|
||||||
|
width: 100%;
|
||||||
|
overflow-x: auto;
|
||||||
|
display: block;
|
||||||
|
font-variant-numeric: lining-nums tabular-nums;
|
||||||
|
}
|
||||||
|
table caption {
|
||||||
|
margin-bottom: 0.75em;
|
||||||
|
}
|
||||||
|
tbody {
|
||||||
|
margin-top: 0.5em;
|
||||||
|
border-top: 1px solid #1a1a1a;
|
||||||
|
border-bottom: 1px solid #1a1a1a;
|
||||||
|
}
|
||||||
|
th {
|
||||||
|
border-top: 1px solid #1a1a1a;
|
||||||
|
padding: 0.25em 0.5em 0.25em 0.5em;
|
||||||
|
}
|
||||||
|
td {
|
||||||
|
padding: 0.125em 0.5em 0.25em 0.5em;
|
||||||
|
}
|
||||||
|
header {
|
||||||
|
margin-bottom: 4em;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
#TOC li {
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
#TOC ul {
|
||||||
|
padding-left: 1.3em;
|
||||||
|
}
|
||||||
|
#TOC > ul {
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
#TOC a:not(:hover) {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
code{white-space: pre-wrap;}
|
||||||
|
span.smallcaps{font-variant: small-caps;}
|
||||||
|
div.columns{display: flex; gap: min(4vw, 1.5em);}
|
||||||
|
div.column{flex: auto; overflow-x: auto;}
|
||||||
|
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
|
||||||
|
ul.task-list{list-style: none;}
|
||||||
|
ul.task-list li input[type="checkbox"] {
|
||||||
|
width: 0.8em;
|
||||||
|
margin: 0 0.8em 0.2em -1.6em;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1 id="gem-graph-client">Gem-graph client</h1>
|
||||||
|
<p>version <code>0.0</code> commit
|
||||||
|
<code>8ce7191df3652ddd6284c4ac6d8d42c3cf32d2d5</code></p>
|
||||||
|
<h2 id="audit-de-code-source-et-structure-de-projet">Audit de code
|
||||||
|
source et structure de projet</h2>
|
||||||
|
<h3 id="arborescence-des-sources">Arborescence des sources</h3>
|
||||||
|
<p>Voici l’arborescence de la version actuelle du projet.</p>
|
||||||
|
<pre><code>├── data
|
||||||
|
│ ├── dimers random walk.xml
|
||||||
|
│ ├── image
|
||||||
|
│ │ ├── [...]
|
||||||
|
│ └── text
|
||||||
|
│ ├── [...]
|
||||||
|
├── include
|
||||||
|
│ ├── automat.h
|
||||||
|
│ ├── base.h
|
||||||
|
│ ├── calls.h
|
||||||
|
│ ├── graph.h
|
||||||
|
│ ├── parse.h
|
||||||
|
│ └── widgets.h
|
||||||
|
├── Makefile
|
||||||
|
├── manifest.scm
|
||||||
|
├── [...]
|
||||||
|
└── src
|
||||||
|
├── automat.c
|
||||||
|
├── calls.c
|
||||||
|
├── graph.c
|
||||||
|
│ ├── area.c
|
||||||
|
│ ├── draw.c
|
||||||
|
│ ├── grid.c
|
||||||
|
│ ├── init.c
|
||||||
|
│ ├── shader.frag
|
||||||
|
│ ├── shader.vert
|
||||||
|
│ └── stack.c
|
||||||
|
├── main.c
|
||||||
|
├── parse.c
|
||||||
|
└── widget.c
|
||||||
|
├── heads.c
|
||||||
|
├── labo.c
|
||||||
|
├── rules.c
|
||||||
|
├── state.c
|
||||||
|
├── stock.c
|
||||||
|
└── tree.c
|
||||||
|
|
||||||
|
8 dossiers, 46 fichiers</code></pre>
|
||||||
|
<p>Un certain nombre d’élements doivent être respectés :</p>
|
||||||
|
<ul class="task-list">
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">séparation
|
||||||
|
code/headers</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">séparation
|
||||||
|
data/code</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">prise en compte de
|
||||||
|
la structure dans le Makefile</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">1 header = 1
|
||||||
|
sous-dossier ou fichier de <code>src</code>, excepté
|
||||||
|
<code>base.h</code></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">chaque sous-dossier
|
||||||
|
de <code>src</code> constitue un module clairement défini</li>
|
||||||
|
</ul>
|
||||||
|
<p>Erreurs critiques :</p>
|
||||||
|
<ul>
|
||||||
|
<li>les sous-dossiers de <code>src</code> sont nommés comme des fichiers
|
||||||
|
(<code>*.c</code>)</li>
|
||||||
|
<li>le module <code>widget</code> est mal nommé car il est pointé par le
|
||||||
|
header <code>widgets.h</code></li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="analyse-formelle-des-sources">Analyse formelle des sources</h3>
|
||||||
|
<p>Généralités :</p>
|
||||||
|
<ul>
|
||||||
|
<li>le style du code manque de systématisme
|
||||||
|
<ul>
|
||||||
|
<li>la longueur des tabulations varie entre les fichiers</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>beaucoup de problèmes critiques (voir ci-après)</li>
|
||||||
|
</ul>
|
||||||
|
<h4 id="analyse-des-headers">Analyse des headers</h4>
|
||||||
|
<p>Problèmes critiques relevés :</p>
|
||||||
|
<ul>
|
||||||
|
<li>3 headers sont mal nommés</li>
|
||||||
|
<li>6 headers contiennent un en-tête de licence valide selon la norme
|
||||||
|
SPDX</li>
|
||||||
|
<li>4 headers ne contiennent une directive <code>pragma once</code></li>
|
||||||
|
<li>0 headers incluent <code>base.h</code> indûment</li>
|
||||||
|
<li>1 headers n’ont pas un style de commentaire minimal et
|
||||||
|
systématique</li>
|
||||||
|
<li>5 headers n’ont pas un style de code/déclaration du projet
|
||||||
|
respecté</li>
|
||||||
|
<li>1 headers ne présentent pas des commentaires clairs et utiles</li>
|
||||||
|
<li>5 headers ont au moins une fonction non documentée</li>
|
||||||
|
<li>3 headers nomment mal les fonctions du module</li>
|
||||||
|
</ul>
|
||||||
|
<h5 id="baseh-critique-à-retravailler">base.h <code>[critique]</code>
|
||||||
|
<code>[à retravailler]</code></h5>
|
||||||
|
<ul class="task-list">
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">le nom est clair et
|
||||||
|
correspond à une fonctionnalité</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">contient un en-tête de licence
|
||||||
|
valide selon la norme SPDX</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">contient une
|
||||||
|
directive <code>pragma once</code></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">n’inclut pas
|
||||||
|
<code>base.h</code></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">style de commentaire minimal et
|
||||||
|
systématique<ul>
|
||||||
|
<li>commentaires au style non systématiques</li>
|
||||||
|
<li>symboles inutiles (<)</li>
|
||||||
|
<li>espacement incorrect</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">style de code/déclaration du
|
||||||
|
projet respecté<ul>
|
||||||
|
<li>enum et struct invalides</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">clarté et utilité
|
||||||
|
des commentaires</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">chaque fonction est
|
||||||
|
documentée</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">chaque fonction est
|
||||||
|
nommée selon le module (non applicable)</li>
|
||||||
|
</ul>
|
||||||
|
<h5 id="automath-critique-à-retravailler">automat.h
|
||||||
|
<code>[critique]</code> <code>[à retravailler]</code></h5>
|
||||||
|
<ul class="task-list">
|
||||||
|
<li><input type="checkbox" disabled="disabled">le nom est clair et correspond
|
||||||
|
à une fonctionnalité<ul>
|
||||||
|
<li>automate est un terme français non traduisible pour ce contexte</li>
|
||||||
|
<li>le terme habituel en informatique est Finite State Machine</li>
|
||||||
|
<li>fsm.h ? (serait compris par le plus grand nombre)</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">contient un en-tête de licence
|
||||||
|
valide selon la norme SPDX</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">contient une directive
|
||||||
|
<code>pragma once</code></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">n’inclut pas
|
||||||
|
<code>base.h</code></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">style de commentaire
|
||||||
|
minimal et systématique</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">style de code/déclaration du
|
||||||
|
projet respecté<ul>
|
||||||
|
<li>enum invalides</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">clarté et utilité des
|
||||||
|
commentaires<ul>
|
||||||
|
<li><code>xor</code> est totalement incompréhensible et inutile</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">chaque fonction est
|
||||||
|
documentée</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">chaque fonction est nommée
|
||||||
|
selon le module<ul>
|
||||||
|
<li>les fonctions ne portent pas le préfixe <code>automat_</code></li>
|
||||||
|
</ul></li>
|
||||||
|
</ul>
|
||||||
|
<h5 id="callsh-critique-à-retravailler">calls.h <code>[critique]</code>
|
||||||
|
<code>[à retravailler]</code></h5>
|
||||||
|
<ul class="task-list">
|
||||||
|
<li><input type="checkbox" disabled="disabled">le nom est clair et correspond
|
||||||
|
à une fonctionnalité<ul>
|
||||||
|
<li>calls != callbacks, titre trompeur</li>
|
||||||
|
<li>calls => syscalls… or ça n’a rien à voir !!!</li>
|
||||||
|
<li>GTK appelle callbacks ce que la théorie nomme évènements (voir
|
||||||
|
“programmation évenementielle”)</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">contient un en-tête de licence
|
||||||
|
valide selon la norme SPDX</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">contient une directive
|
||||||
|
<code>pragma once</code></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">n’inclut pas
|
||||||
|
<code>base.h</code></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">style de commentaire
|
||||||
|
minimal et systématique</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">style de code/déclaration du
|
||||||
|
projet respecté<ul>
|
||||||
|
<li>dépassement de la limite de 80 caractères par ligne</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">clarté et utilité
|
||||||
|
des commentaires</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">chaque fonction est
|
||||||
|
documentée</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">chaque fonction est
|
||||||
|
nommée selon le module<ul>
|
||||||
|
<li>les fonctions portent le préfixe <code>on_</code>, courant pour un
|
||||||
|
module d’évènements</li>
|
||||||
|
</ul></li>
|
||||||
|
</ul>
|
||||||
|
<h5 id="graphh-critique-à-retravailler">graph.h <code>[critique]</code>
|
||||||
|
<code>[à retravailler]</code></h5>
|
||||||
|
<ul class="task-list">
|
||||||
|
<li><input type="checkbox" disabled="disabled">le nom est clair et correspond
|
||||||
|
à une fonctionnalité<ul>
|
||||||
|
<li>graph != graphics, titre trompeur</li>
|
||||||
|
<li>en anglais, graph est un mot complet et pas l’abbréviation de
|
||||||
|
graphics</li>
|
||||||
|
<li>confusion avec le graph de gem-graph…</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">contient un en-tête de licence
|
||||||
|
valide selon la norme SPDX</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">contient une
|
||||||
|
directive <code>pragma once</code></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">inclut
|
||||||
|
<code>base.h</code> (ok car types utilisés)</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">style de commentaire
|
||||||
|
minimal et systématique</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">style de code/déclaration du
|
||||||
|
projet respecté<ul>
|
||||||
|
<li>dépassement de la limite de 80 caractères par ligne</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">clarté et utilité
|
||||||
|
des commentaires</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">chaque fonction est
|
||||||
|
documentée</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">chaque fonction est
|
||||||
|
nommée selon le module<ul>
|
||||||
|
<li>les fonctions portent le préfixe <code>graph_</code></li>
|
||||||
|
</ul></li>
|
||||||
|
</ul>
|
||||||
|
<h5 id="parseh-critique-à-retravailler">parse.h <code>[critique]</code>
|
||||||
|
<code>[à retravailler]</code></h5>
|
||||||
|
<ul class="task-list">
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">le nom est clair et
|
||||||
|
correspond à une fonctionnalité</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">contient un en-tête de licence
|
||||||
|
valide selon la norme SPDX</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">contient une directive
|
||||||
|
<code>pragma once</code></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">n’inclut pas
|
||||||
|
<code>base.h</code></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">style de commentaire
|
||||||
|
minimal et systématique</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">style de
|
||||||
|
code/déclaration du projet respecté</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">clarté et utilité
|
||||||
|
des commentaires</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">chaque fonction est
|
||||||
|
documentée</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">chaque fonction est nommée
|
||||||
|
selon le module<ul>
|
||||||
|
<li>les fonctions ne portent pas le préfixe <code>parse_</code></li>
|
||||||
|
</ul></li>
|
||||||
|
</ul>
|
||||||
|
<h5 id="widgetsh-critique-à-retravailler">widgets.h
|
||||||
|
<code>[critique]</code> <code>[à retravailler]</code></h5>
|
||||||
|
<ul class="task-list">
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">le nom est clair et
|
||||||
|
correspond à une fonctionnalité</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">contient un en-tête de licence
|
||||||
|
valide selon la norme SPDX</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">contient une directive
|
||||||
|
<code>pragma once</code></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">n’inclut pas
|
||||||
|
<code>base.h</code></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">style de commentaire
|
||||||
|
minimal et systématique</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">style de code/déclaration du
|
||||||
|
projet respecté<ul>
|
||||||
|
<li>dépassement de la limite des 80 caractères</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">clarté et utilité
|
||||||
|
des commentaires</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">chaque fonction est
|
||||||
|
documentée</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">chaque fonction est nommée
|
||||||
|
selon le module<ul>
|
||||||
|
<li>les fonctions ne portent pas toutes le préfixe
|
||||||
|
<code>widget_</code></li>
|
||||||
|
</ul></li>
|
||||||
|
</ul>
|
||||||
|
<h4 id="analyse-du-code">Analyse du code</h4>
|
||||||
|
<p>Problèmes critiques relevés :</p>
|
||||||
|
<ul>
|
||||||
|
<li>9 fichiers de code ou module sont mal nommés</li>
|
||||||
|
<li>15 fichiers de code contiennent un en-tête de licence valide selon
|
||||||
|
la norme SPDX</li>
|
||||||
|
<li>3 fichiers de code n’ont pas un style de commentaire minimal et
|
||||||
|
systématique</li>
|
||||||
|
<li>12 fichiers de code n’ont pas un style de code/déclaration du projet
|
||||||
|
respecté</li>
|
||||||
|
<li>13 fichiers de code ne présentent pas des commentaires clairs et
|
||||||
|
utiles</li>
|
||||||
|
</ul>
|
||||||
|
<h5 id="mainc-critique-à-retravailler">main.c <code>[critique]</code>
|
||||||
|
<code>[à retravailler]</code></h5>
|
||||||
|
<ul>
|
||||||
|
<li><p><input type="checkbox" disabled="disabled" checked="checked">le nom est clair
|
||||||
|
et correspond à une fonctionnalité</p></li>
|
||||||
|
<li><p><input type="checkbox" disabled="disabled">contient un en-tête de
|
||||||
|
licence valide selon la norme SPDX</p></li>
|
||||||
|
<li><p><input type="checkbox" disabled="disabled" checked="checked">style de
|
||||||
|
commentaire minimal et systématique</p></li>
|
||||||
|
<li><p><input type="checkbox" disabled="disabled" checked="checked">style de
|
||||||
|
code/déclaration du projet respecté</p></li>
|
||||||
|
<li><p><input type="checkbox" disabled="disabled" checked="checked">clarté et utilité
|
||||||
|
des commentaires</p></li>
|
||||||
|
<li><p><code>@:340</code> l’id de l’application est incohérent</p></li>
|
||||||
|
</ul>
|
||||||
|
<h5 id="automatc-critique-à-retravailler">automat.c
|
||||||
|
<code>[critique]</code> <code>[à retravailler]</code></h5>
|
||||||
|
<ul>
|
||||||
|
<li><input type="checkbox" disabled="disabled">le nom est clair et correspond
|
||||||
|
à une fonctionnalité</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">contient un en-tête de licence
|
||||||
|
valide selon la norme SPDX</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">style de commentaire
|
||||||
|
minimal et systématique</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">style de code/déclaration du
|
||||||
|
projet respecté<ul>
|
||||||
|
<li>dépassement de la limite de 80 caractères</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">clarté et utilité des
|
||||||
|
commentaires<ul>
|
||||||
|
<li>commentaires inline complètement incompréhensibles/cryptiques</li>
|
||||||
|
<li>documentation des fonctions statiques absente</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>le formattage de variables en mi-minuscule mi-majuscule est
|
||||||
|
illisible</li>
|
||||||
|
<li>l’utilisation du terme “prescribed” est inhabituel et
|
||||||
|
incompréhensible</li>
|
||||||
|
<li><code>@:101:get_str_STATE_RULES_DATA()</code> très sous-optimal
|
||||||
|
<ul>
|
||||||
|
<li>on ne devrait jamais retourner des chaînes de caractères.</li>
|
||||||
|
<li>un tableau de hashage ferait mieux l’affaire qu’une fonction avec un
|
||||||
|
switch</li>
|
||||||
|
</ul></li>
|
||||||
|
</ul>
|
||||||
|
<h5 id="callsc-critique-à-retravailler">calls.c <code>[critique]</code>
|
||||||
|
<code>[à retravailler]</code></h5>
|
||||||
|
<ul>
|
||||||
|
<li><input type="checkbox" disabled="disabled">le nom est clair et correspond
|
||||||
|
à une fonctionnalité</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">contient un en-tête de licence
|
||||||
|
valide selon la norme SPDX</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">style de commentaire
|
||||||
|
minimal et systématique</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">style de code/déclaration du
|
||||||
|
projet respecté<ul>
|
||||||
|
<li>dépassement de la limite de 80 caractères</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">clarté et utilité des
|
||||||
|
commentaires<ul>
|
||||||
|
<li>documentation des fonctions statiques absente</li>
|
||||||
|
<li>certains commentaires perfectibles</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>le formattage de fonction en mi-minuscule mi-majuscule est
|
||||||
|
illisible</li>
|
||||||
|
<li>de manière générale, le nommage des évènements est peu clair
|
||||||
|
<ul>
|
||||||
|
<li>il faut séparer l’outil de ce qu’il représente (bouton vs
|
||||||
|
états)</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><code>@:249:switch_STATE_RULES_DATA()</code>
|
||||||
|
<ul>
|
||||||
|
<li>le switch pourrait être remplacé par une table de hashage de
|
||||||
|
pointeurs sur fonction (beaucoup plus optimal)</li>
|
||||||
|
<li>le nommage de cette fonction est trompeur (ça ne switch pas
|
||||||
|
l’état)</li>
|
||||||
|
</ul></li>
|
||||||
|
</ul>
|
||||||
|
<h5 id="parsec-critique-à-retravailler">parse.c <code>[critique]</code>
|
||||||
|
<code>[à retravailler]</code></h5>
|
||||||
|
<ul class="task-list">
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">le nom est clair et
|
||||||
|
correspond à une fonctionnalité</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">contient un en-tête de licence
|
||||||
|
valide selon la norme SPDX</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">style de commentaire
|
||||||
|
minimal et systématique</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">style de code/déclaration du
|
||||||
|
projet respecté<ul>
|
||||||
|
<li>dépassement de la limite de 80 caractères</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">clarté et utilité des
|
||||||
|
commentaires<ul>
|
||||||
|
<li>documentation des fonctions statiques absente</li>
|
||||||
|
</ul></li>
|
||||||
|
</ul>
|
||||||
|
<h5 id="module-graphc-critique-à-retravailler">module graph.c
|
||||||
|
<code>[critique]</code> <code>[à retravailler]</code></h5>
|
||||||
|
<ul class="task-list">
|
||||||
|
<li><input type="checkbox" disabled="disabled">le nom est clair et correspond
|
||||||
|
à une fonctionnalité</li>
|
||||||
|
</ul>
|
||||||
|
<h6 id="areac-critique-à-retravailler">area.c <code>[critique]</code>
|
||||||
|
<code>[à retravailler]</code></h6>
|
||||||
|
<ul class="task-list">
|
||||||
|
<li><input type="checkbox" disabled="disabled">le nom est clair et correspond
|
||||||
|
à une fonctionnalité<ul>
|
||||||
|
<li>ne gère pas une “area” mais gère une pile d’area et leurs
|
||||||
|
environnements</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">contient un en-tête de licence
|
||||||
|
valide selon la norme SPDX</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">style de commentaire
|
||||||
|
minimal et systématique</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">style de code/déclaration du
|
||||||
|
projet respecté<ul>
|
||||||
|
<li>dépassement de la limite de 80 caractères</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">clarté et utilité des
|
||||||
|
commentaires<ul>
|
||||||
|
<li>manque pas mal de commentaires, des fonctions sont documentés au
|
||||||
|
mauvais endroit</li>
|
||||||
|
</ul></li>
|
||||||
|
</ul>
|
||||||
|
<h6 id="drawc-critique-à-retravailler">draw.c <code>[critique]</code>
|
||||||
|
<code>[à retravailler]</code></h6>
|
||||||
|
<ul class="task-list">
|
||||||
|
<li><input type="checkbox" disabled="disabled">le nom est clair et correspond
|
||||||
|
à une fonctionnalité<ul>
|
||||||
|
<li>ne gère pas une “area” mais gère une pile d’area et leurs
|
||||||
|
environnements</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">contient un en-tête de licence
|
||||||
|
valide selon la norme SPDX</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">style de commentaire
|
||||||
|
minimal et systématique</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">style de code/déclaration du
|
||||||
|
projet respecté<ul>
|
||||||
|
<li>dépassement de la limite de 80 caractères</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">clarté et utilité des
|
||||||
|
commentaires<ul>
|
||||||
|
<li>manque pas mal de commentaires, des fonctions sont documentés au
|
||||||
|
mauvais endroit</li>
|
||||||
|
</ul></li>
|
||||||
|
</ul>
|
||||||
|
<h6 id="gridc-critique-à-retravailler">grid.c <code>[critique]</code>
|
||||||
|
<code>[à retravailler]</code></h6>
|
||||||
|
<ul class="task-list">
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">le nom est clair et
|
||||||
|
correspond à une fonctionnalité</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">contient un en-tête de licence
|
||||||
|
valide selon la norme SPDX</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">style de commentaire minimal et
|
||||||
|
systématique<ul>
|
||||||
|
<li>les commentaires inline sont mal formatés</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">style de code/déclaration du
|
||||||
|
projet respecté<ul>
|
||||||
|
<li>dépassement de la limite de 80 caractères</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">clarté et utilité des
|
||||||
|
commentaires<ul>
|
||||||
|
<li>QUASI RIEN !</li>
|
||||||
|
</ul></li>
|
||||||
|
</ul>
|
||||||
|
<h6 id="initc-critique-à-retravailler">init.c <code>[critique]</code>
|
||||||
|
<code>[à retravailler]</code></h6>
|
||||||
|
<ul class="task-list">
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">le nom est clair et
|
||||||
|
correspond à une fonctionnalité</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">contient un en-tête de licence
|
||||||
|
valide selon la norme SPDX</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">style de commentaire
|
||||||
|
minimal et systématique</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">style de code/déclaration du
|
||||||
|
projet respecté<ul>
|
||||||
|
<li>dépassement de la limite de 80 caractères</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">clarté et utilité
|
||||||
|
des commentaires<ul>
|
||||||
|
<li>peut toujours mieux faire mais ok</li>
|
||||||
|
</ul></li>
|
||||||
|
</ul>
|
||||||
|
<h6 id="shaderfrag-critique-à-retravailler">shader.frag
|
||||||
|
<code>[critique]</code> <code>[à retravailler]</code></h6>
|
||||||
|
<ul class="task-list">
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">le nom est clair et
|
||||||
|
correspond à une fonctionnalité</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">contient un en-tête de licence
|
||||||
|
valide selon la norme SPDX</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">style de commentaire
|
||||||
|
minimal et systématique</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">style de
|
||||||
|
code/déclaration du projet respecté</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">clarté et utilité des
|
||||||
|
commentaires<ul>
|
||||||
|
<li>à commenter</li>
|
||||||
|
</ul></li>
|
||||||
|
</ul>
|
||||||
|
<h6 id="shadervert-critique-à-retravailler">shader.vert
|
||||||
|
<code>[critique]</code> <code>[à retravailler]</code></h6>
|
||||||
|
<ul class="task-list">
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">le nom est clair et
|
||||||
|
correspond à une fonctionnalité</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">contient un en-tête de licence
|
||||||
|
valide selon la norme SPDX</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">style de commentaire
|
||||||
|
minimal et systématique</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">style de
|
||||||
|
code/déclaration du projet respecté</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">clarté et utilité des
|
||||||
|
commentaires<ul>
|
||||||
|
<li>à commenter</li>
|
||||||
|
</ul></li>
|
||||||
|
</ul>
|
||||||
|
<h6 id="stackc-critique-à-retravailler">stack.c <code>[critique]</code>
|
||||||
|
<code>[à retravailler]</code></h6>
|
||||||
|
<ul class="task-list">
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">le nom est clair et
|
||||||
|
correspond à une fonctionnalité</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">contient un en-tête de licence
|
||||||
|
valide selon la norme SPDX</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">style de commentaire
|
||||||
|
minimal et systématique</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">style de
|
||||||
|
code/déclaration du projet respecté</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">clarté et utilité des
|
||||||
|
commentaires<ul>
|
||||||
|
<li>il faut commenter davantage, c’est trop peu</li>
|
||||||
|
</ul></li>
|
||||||
|
</ul>
|
||||||
|
<h5 id="module-widgetc-critique-à-retravailler">module widget.c
|
||||||
|
<code>[critique]</code> <code>[à retravailler]</code></h5>
|
||||||
|
<ul class="task-list">
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">le nom est clair et
|
||||||
|
correspond à une fonctionnalité</li>
|
||||||
|
</ul>
|
||||||
|
<h6 id="headsc-critique-à-retravailler">heads.c <code>[critique]</code>
|
||||||
|
<code>[à retravailler]</code></h6>
|
||||||
|
<ul class="task-list">
|
||||||
|
<li><input type="checkbox" disabled="disabled">le nom est clair et correspond
|
||||||
|
à une fonctionnalité<ul>
|
||||||
|
<li>heads != headers…</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">contient un en-tête de licence
|
||||||
|
valide selon la norme SPDX</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">style de commentaire
|
||||||
|
minimal et systématique</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">style de code/déclaration du
|
||||||
|
projet respecté<ul>
|
||||||
|
<li>dépassement limite 80 caractères</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">clarté et utilité des
|
||||||
|
commentaires<ul>
|
||||||
|
<li>il faut commenter, quasi rien de fait</li>
|
||||||
|
</ul></li>
|
||||||
|
</ul>
|
||||||
|
<h6 id="laboc-critique-à-retravailler">labo.c <code>[critique]</code>
|
||||||
|
<code>[à retravailler]</code></h6>
|
||||||
|
<p><em>You who enter here, leave all hope of an understandable
|
||||||
|
code</em></p>
|
||||||
|
<p>Ok, je saute.</p>
|
||||||
|
<h6 id="rulesc-critique-à-retravailler">rules.c <code>[critique]</code>
|
||||||
|
<code>[à retravailler]</code></h6>
|
||||||
|
<ul>
|
||||||
|
<li><input type="checkbox" disabled="disabled">le nom est clair et correspond
|
||||||
|
à une fonctionnalité<ul>
|
||||||
|
<li>confusion entre l’outil (les arbres, les treeview, etc) et la
|
||||||
|
structure de données affichée (règles).</li>
|
||||||
|
<li>à nommer différemment, selon la fonction réelle</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">contient un en-tête de licence
|
||||||
|
valide selon la norme SPDX</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">style de commentaire
|
||||||
|
minimal et systématique</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">style de code/déclaration du
|
||||||
|
projet respecté<ul>
|
||||||
|
<li>dépassement limite 80 caractères</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">clarté et utilité des
|
||||||
|
commentaires<ul>
|
||||||
|
<li>il faut commenter, quasi rien de fait</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><code>@:32</code> En GTK4, il ne faut jamais utiliser la taille de
|
||||||
|
fenêtre comme comme référence ou aide au layout. Ce n’est pas dans
|
||||||
|
l’esprit de l’API. On utilisera plutôt les méthodes de layout (GtkGrid
|
||||||
|
par exemple).</li>
|
||||||
|
<li>de manière générale : les fonctions commençant par <code>get</code>
|
||||||
|
devraient être des des getters. C’est à dire renvoyer des valeurs et non
|
||||||
|
pas des widgets ! C’est un nommage trompeur et problématique.</li>
|
||||||
|
</ul>
|
||||||
|
<h6 id="statec-critique-à-retravailler">state.c <code>[critique]</code>
|
||||||
|
<code>[à retravailler]</code></h6>
|
||||||
|
<ul>
|
||||||
|
<li><input type="checkbox" disabled="disabled">le nom est clair et correspond
|
||||||
|
à une fonctionnalité<ul>
|
||||||
|
<li>nom trop commun et pas assez clair</li>
|
||||||
|
<li>state machine (c’est ce que c’est) mais en terme de widget ?</li>
|
||||||
|
<li>séparer la logique des widgets est nécessaire</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">contient un en-tête de licence
|
||||||
|
valide selon la norme SPDX</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">style de commentaire minimal et
|
||||||
|
systématique</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">style de code/déclaration du
|
||||||
|
projet respecté<ul>
|
||||||
|
<li>dépassement limite 80 caractères</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">clarté et utilité des
|
||||||
|
commentaires<ul>
|
||||||
|
<li>il faut commenter, quasi rien de fait</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><code>@:34</code> En GTK4, il ne faut jamais utiliser la taille de
|
||||||
|
fenêtre comme comme référence ou aide au layout. Ce n’est pas dans
|
||||||
|
l’esprit de l’API. On utilisera plutôt les méthodes de layout (GtkGrid
|
||||||
|
par exemple).</li>
|
||||||
|
<li>de manière générale : les fonctions commençant par <code>get</code>
|
||||||
|
devraient être des des getters. C’est à dire renvoyer des valeurs et non
|
||||||
|
pas des widgets ! C’est un nommage trompeur et problématique.</li>
|
||||||
|
</ul>
|
||||||
|
<h6 id="stockc-critique-à-retravailler">stock.c <code>[critique]</code>
|
||||||
|
<code>[à retravailler]</code></h6>
|
||||||
|
<ul class="task-list">
|
||||||
|
<li><input type="checkbox" disabled="disabled">le nom est clair et correspond
|
||||||
|
à une fonctionnalité<ul>
|
||||||
|
<li>???</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">contient un en-tête de licence
|
||||||
|
valide selon la norme SPDX</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">style de commentaire
|
||||||
|
minimal et systématique</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">style de code/déclaration du
|
||||||
|
projet respecté<ul>
|
||||||
|
<li>dépassement limite 80 caractères</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">clarté et utilité des
|
||||||
|
commentaires<ul>
|
||||||
|
<li>pas du tout commenté</li>
|
||||||
|
</ul></li>
|
||||||
|
</ul>
|
||||||
|
<h6 id="treec-critique-à-retravailler">tree.c <code>[critique]</code>
|
||||||
|
<code>[à retravailler]</code></h6>
|
||||||
|
<ul class="task-list">
|
||||||
|
<li><input type="checkbox" disabled="disabled" checked="checked">le nom est clair et
|
||||||
|
correspond à une fonctionnalité</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">contient un en-tête de licence
|
||||||
|
valide selon la norme SPDX</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">style de commentaire minimal et
|
||||||
|
systématique</li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">style de code/déclaration du
|
||||||
|
projet respecté<ul>
|
||||||
|
<li>dépassement limite 80 caractères</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><input type="checkbox" disabled="disabled">clarté et utilité des
|
||||||
|
commentaires<ul>
|
||||||
|
<li>pas assez commenté</li>
|
||||||
|
</ul></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
|
@ -7,4 +7,13 @@
|
||||||
// https://forge.a-lec.org/gem-graph/gem-graph-client/src/branch/devel/include/ui.h
|
// https://forge.a-lec.org/gem-graph/gem-graph-client/src/branch/devel/include/ui.h
|
||||||
// https://forge.a-lec.org/gem-graph/gem-graph-client/src/branch/devel/src/ui/events.c
|
// https://forge.a-lec.org/gem-graph/gem-graph-client/src/branch/devel/src/ui/events.c
|
||||||
// https://forge.a-lec.org/gem-graph/gem-graph-client/src/branch/devel/src/ui/application.c
|
// https://forge.a-lec.org/gem-graph/gem-graph-client/src/branch/devel/src/ui/application.c
|
||||||
|
//
|
||||||
|
// https://en.wikipedia.org/wiki/GIO_(software)
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <gtk-4.0/gtk/gtk.h>
|
||||||
|
|
||||||
|
void on_preferences_action(GSimpleAction *action,
|
||||||
|
GVariant *parameter,
|
||||||
|
gpointer user_data);
|
||||||
|
|
|
@ -40,6 +40,25 @@
|
||||||
} */
|
} */
|
||||||
//
|
//
|
||||||
// https://forge.a-lec.org/gem-graph/gem-graph-client/src/branch/devel/src/ui/application.c
|
// https://forge.a-lec.org/gem-graph/gem-graph-client/src/branch/devel/src/ui/application.c
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <gtk-4.0/gtk/gtk.h>
|
||||||
|
|
||||||
|
#define GEM_GRAPH_CLIENT_TYPE_WINDOW (gem_graph_client_window_get_type())
|
||||||
|
|
||||||
|
|
||||||
|
void on_preferences_action(GSimpleAction *action, // nom de type « GSimpleAction » inconnu
|
||||||
|
GVariant *parameter, // nom de type « GVariant » inconnu
|
||||||
|
gpointer user_data) // nom de type « gpointer » inconnu
|
||||||
|
{
|
||||||
|
// GemGraphClientApplication *self = user_data;
|
||||||
|
|
||||||
|
// g_assert(GEM_GRAPH_CLIENT_IS_APPLICATION(self));
|
||||||
|
|
||||||
|
// ui_send_internal_notification("Not implemented !");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* void ui_enable_action(const char *name) {
|
/* void ui_enable_action(const char *name) {
|
||||||
g_simple_action_set_enabled(
|
g_simple_action_set_enabled(
|
||||||
(GSimpleAction *)g_action_map_lookup_action(
|
(GSimpleAction *)g_action_map_lookup_action(
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
* * * * * * * * * * * * * * * * * * * * * * * * * * */
|
* * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
|
|
||||||
#include "../include/automat.h"
|
#include "../include/fsm.h"
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
|
@ -29,10 +29,10 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include "../include/automat.h"
|
#include "../include/fsm.h"
|
||||||
#include "../include/calls.h"
|
#include "../include/signal.h"
|
||||||
#include "../include/widgets.h"
|
#include "../include/widget.h"
|
||||||
#include "../include/graph.h"
|
#include "../include/graphics.h"
|
||||||
|
|
||||||
|
|
||||||
static void on_auto_notification (const char *message)
|
static void on_auto_notification (const char *message)
|
||||||
|
|
|
@ -1,191 +0,0 @@
|
||||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
||||||
* *
|
|
||||||
* Gem-graph client *
|
|
||||||
* *
|
|
||||||
* Init OpenGL graphism *
|
|
||||||
* *
|
|
||||||
* Copyright © 2021 Libre en Communs <contact@a-lec.org> *
|
|
||||||
* Copyright © 2023 Adrien Bourmault <neox@a-lec.org> *
|
|
||||||
* Copyright © 2023 Arthur Menges <arthur.menges@a-lec.org> *
|
|
||||||
* *
|
|
||||||
* This file is part of Gem-graph. *
|
|
||||||
* *
|
|
||||||
* This program is free software: you can redistribute it and/or modify it *
|
|
||||||
* under the terms of the GNU Affero General Public License *
|
|
||||||
* as publishedby the Free Software Foundation, *
|
|
||||||
* either version 3 of the License, or (at your option) any later version. *
|
|
||||||
* *
|
|
||||||
* This program is distributed in the hope that it will be useful, *
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
|
|
||||||
* See the GNU Affero General Public License for more details. *
|
|
||||||
* *
|
|
||||||
* You should have received a copy of the GNU Affero General Public License *
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
|
|
||||||
* *
|
|
||||||
* * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
#include "../../include/graph.h"
|
|
||||||
|
|
||||||
/* Initializes the buffer of a gl_area
|
|
||||||
* Calls according to the user preferences
|
|
||||||
* @param gl_area, ptr to the gl_area widget
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
void graph_init_buffers(const int stack_id)
|
|
||||||
{
|
|
||||||
struct graph_stack_t *graph_stack = NULL; // *graph_stack = &graph_stack[stack_id]; TODO
|
|
||||||
|
|
||||||
//XXX
|
|
||||||
graph_model_setup(stack_id);
|
|
||||||
|
|
||||||
GLuint vao, vertex_buffer, color_buffer;
|
|
||||||
|
|
||||||
glGenBuffers(1, &vertex_buffer);
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
|
|
||||||
glBufferData(GL_ARRAY_BUFFER,
|
|
||||||
graph_stack->buffer_vertex_size *
|
|
||||||
sizeof(graph_stack->buffer_vertex_origin[0]),
|
|
||||||
graph_stack->buffer_vertex_origin,
|
|
||||||
GL_STATIC_DRAW);
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
|
||||||
|
|
||||||
|
|
||||||
// colors
|
|
||||||
glGenBuffers(1, &color_buffer);
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, color_buffer);
|
|
||||||
glBufferData(GL_ARRAY_BUFFER, graph_stack->buffer_colors_size *
|
|
||||||
sizeof(graph_stack->buffer_colors_origin[0]),
|
|
||||||
graph_stack->buffer_colors_origin,
|
|
||||||
GL_STATIC_DRAW);
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
|
||||||
|
|
||||||
// We only use one VAO, so we always keep it bound
|
|
||||||
glGenVertexArrays(1, &vao);
|
|
||||||
glBindVertexArray(vao);
|
|
||||||
|
|
||||||
graph_stack->vao = vao;
|
|
||||||
graph_stack->position_buffer = vertex_buffer;
|
|
||||||
graph_stack->color_buffer = color_buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Initializes the shaders of a gl_area and link them to a program
|
|
||||||
*
|
|
||||||
* @param gl_area, ptr to the gl_area widget
|
|
||||||
*
|
|
||||||
* @return true if initialized
|
|
||||||
*/
|
|
||||||
bool graph_init_shaders(const int stack_id)
|
|
||||||
{
|
|
||||||
struct graph_stack_t *graph_stack = NULL; // *graph_stack = &graph_stack[stack_id]; TODO
|
|
||||||
char *vertex_shader;
|
|
||||||
char *fragment_shader;
|
|
||||||
int status;
|
|
||||||
GLuint vertex = 0, fragment; // 2024-06-05 j'initialise vertex à 0 (au pif !)
|
|
||||||
GLuint program = 0;
|
|
||||||
GLuint m = 0;
|
|
||||||
GLuint v = 0;
|
|
||||||
GLuint p = 0;
|
|
||||||
|
|
||||||
// Load vertex shader file
|
|
||||||
vertex_shader = read_file(VERTEX_SHADER_FILE);
|
|
||||||
if (vertex_shader == NULL)
|
|
||||||
return false;
|
|
||||||
vertex = graph_create_shader(stack_id, GL_VERTEX_SHADER, vertex_shader);
|
|
||||||
|
|
||||||
if(vertex == 0) {
|
|
||||||
graph_stack->program = 0;
|
|
||||||
g_free(vertex_shader);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Load fragment shader file
|
|
||||||
fragment_shader = read_file(FRAG_SHADER_FILE);
|
|
||||||
if (fragment_shader == NULL)
|
|
||||||
return false;
|
|
||||||
fragment = graph_create_shader(stack_id, GL_FRAGMENT_SHADER, fragment_shader);
|
|
||||||
|
|
||||||
if(fragment == 0) {
|
|
||||||
glDeleteShader(vertex);
|
|
||||||
graph_stack->program = 0;
|
|
||||||
g_free(vertex_shader);
|
|
||||||
g_free(fragment_shader);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Link shaders to program
|
|
||||||
program = glCreateProgram();
|
|
||||||
printf("\n------------------------------------------------------------------------------------------\n");
|
|
||||||
printf("[debug] graph_init_shaders() : program = %d, vertex = %d, fragment = %d\n\
|
|
||||||
exec > ** (myprogram:-----): WARNING ** : --:--:--:---: Linking failure: (address)\n",
|
|
||||||
program, vertex, fragment);
|
|
||||||
|
|
||||||
/* (myprogram:11732): WARNING **: 10:37:34.233: v plusieurs 'run' successifs
|
|
||||||
* (myprogram:11883): WARNING **: 10:38:22.979: glLinkProgram(program); < commenté
|
|
||||||
* (myprogram:11953): WARNING **: 10:38:46.170:
|
|
||||||
* (myprogram:12034): WARNING **: 10:39:14.709:
|
|
||||||
* (myprogram:12182): WARNING **: 10:40:49.788:
|
|
||||||
* > probablement la même adresse dans la librairie 'mesa' d'OpenGL (?) */
|
|
||||||
|
|
||||||
glAttachShader(program, vertex);
|
|
||||||
glAttachShader(program, fragment);
|
|
||||||
|
|
||||||
printf("Failed to link the graphic stack to widgets ! <> see init.c graph_init_shaders()\n");
|
|
||||||
printf("the error in not : vertex shader lacks `main' but : failed to link... (comment line 140)\n");
|
|
||||||
// https://registry.khronos.org/OpenGL-Refpages/gl4/html/glLinkProgram.xhtml
|
|
||||||
// glLinkProgram(program); // Linking failure: (address)
|
|
||||||
printf("------------------------------------------------------------------------------------------\n");
|
|
||||||
|
|
||||||
glGetProgramiv(program, GL_LINK_STATUS, &status); // Linking failure: (address)
|
|
||||||
|
|
||||||
if(status == GL_FALSE) {
|
|
||||||
int log_len;
|
|
||||||
char *buffer;
|
|
||||||
|
|
||||||
glGetProgramiv(program, GL_INFO_LOG_LENGTH, &log_len);
|
|
||||||
|
|
||||||
buffer = g_malloc(log_len + 1);
|
|
||||||
assert(buffer);
|
|
||||||
glGetProgramInfoLog(program, log_len, NULL, buffer);
|
|
||||||
|
|
||||||
g_warning("Linking failure:\n%s", buffer);
|
|
||||||
|
|
||||||
g_free(buffer);
|
|
||||||
|
|
||||||
glDeleteProgram(program);
|
|
||||||
program = 0;
|
|
||||||
|
|
||||||
glDeleteShader(vertex);
|
|
||||||
glDeleteShader(fragment);
|
|
||||||
|
|
||||||
g_free(vertex_shader);
|
|
||||||
g_free(fragment_shader);
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Get the location of the "mvp" uniform */
|
|
||||||
m = glGetUniformLocation(program, "model_matrix");
|
|
||||||
v = glGetUniformLocation(program, "view_matrix");
|
|
||||||
p = glGetUniformLocation(program, "projection_matrix");
|
|
||||||
|
|
||||||
glDetachShader(program, vertex);
|
|
||||||
glDetachShader(program, fragment);
|
|
||||||
|
|
||||||
glDeleteShader(vertex);
|
|
||||||
glDeleteShader(fragment);
|
|
||||||
|
|
||||||
graph_stack->program = program;
|
|
||||||
graph_stack->m = m;
|
|
||||||
graph_stack->v = v;
|
|
||||||
graph_stack->p = p;
|
|
||||||
|
|
||||||
g_free(vertex_shader);
|
|
||||||
g_free(fragment_shader);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
|
@ -29,7 +29,7 @@
|
||||||
#include <cglm/cglm.h>
|
#include <cglm/cglm.h>
|
||||||
|
|
||||||
#include "../../include/base.h"
|
#include "../../include/base.h"
|
||||||
#include "../../include/graph.h"
|
#include "../../include/graphics.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Writes values to describe a vertex at (x,y,z) intoq the vertex buffer
|
* Writes values to describe a vertex at (x,y,z) intoq the vertex buffer
|
|
@ -26,7 +26,7 @@
|
||||||
* * * * * * * * * * * * * * * * * * * * * * * * * * */
|
* * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
|
|
||||||
#include "../../include/graph.h"
|
#include "../../include/graphics.h"
|
||||||
|
|
||||||
int graph_draw_space_ridges_vertex (const int stack_id,
|
int graph_draw_space_ridges_vertex (const int stack_id,
|
||||||
long offset_vertex,
|
long offset_vertex,
|
|
@ -26,7 +26,7 @@
|
||||||
* * * * * * * * * * * * * * * * * * * * * * * * * * */
|
* * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
|
|
||||||
#include "../../include/graph.h"
|
#include "../../include/graphics.h"
|
||||||
#include "../../include/parse.h"
|
#include "../../include/parse.h"
|
||||||
|
|
||||||
#define TEST 0
|
#define TEST 0
|
||||||
|
@ -227,12 +227,8 @@ bool graph_shutdown(const int id, void *error_buffer)
|
||||||
*/
|
*/
|
||||||
void graph_model_setup (const int stack_id)
|
void graph_model_setup (const int stack_id)
|
||||||
{
|
{
|
||||||
/*------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/* I N I T I A L D A T A S P E C I F I C A T I O N */
|
/* I N I T I A L D A T A S P E C I F I C A T I O N */
|
||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
struct graph_stack_t *graph_stack = NULL; // *graph_stack = &graph_stack[stack_id]; TODO
|
struct graph_stack_t *graph_stack = NULL; // *graph_stack = &graph_stack[stack_id]; TODO
|
||||||
char dimension;
|
char dimension;
|
||||||
long space_X;
|
long space_X;
|
||||||
|
@ -279,12 +275,8 @@ void graph_model_setup (const int stack_id)
|
||||||
multiplicity = model_get_multiplicity();
|
multiplicity = model_get_multiplicity();
|
||||||
g_print("[GRAPH DEBUG] site_multiplicity = %d, density_max = %d\n", multiplicity, density_max);
|
g_print("[GRAPH DEBUG] site_multiplicity = %d, density_max = %d\n", multiplicity, density_max);
|
||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/* S P A C E D R A W I N G */
|
/* S P A C E D R A W I N G */
|
||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
graph_draw_space_ridges_vertex (stack_id, graph_stack->buffer_vertex_size, space_X, space_Y, space_Z);
|
graph_draw_space_ridges_vertex (stack_id, graph_stack->buffer_vertex_size, space_X, space_Y, space_Z);
|
||||||
graph_draw_space_ridges_lines (stack_id);
|
graph_draw_space_ridges_lines (stack_id);
|
||||||
graph_draw_grids_on_space_faces_vertex (stack_id, space_X, space_Y, space_Z);
|
graph_draw_grids_on_space_faces_vertex (stack_id, space_X, space_Y, space_Z);
|
||||||
|
@ -294,12 +286,8 @@ void graph_model_setup (const int stack_id)
|
||||||
graph_stack->buffer_colors_0_arrow = graph_stack->buffer_colors_size;
|
graph_stack->buffer_colors_0_arrow = graph_stack->buffer_colors_size;
|
||||||
graph_stack->buffer_lines_0_arrow = graph_stack->buffer_lines_size;
|
graph_stack->buffer_lines_0_arrow = graph_stack->buffer_lines_size;
|
||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/* A R R O W S D R A W I N G */
|
/* A R R O W S D R A W I N G */
|
||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
char state_id[30] = {0};
|
char state_id[30] = {0};
|
||||||
struct arrow_t arrow = {0};
|
struct arrow_t arrow = {0};
|
||||||
|
|
||||||
|
@ -329,3 +317,163 @@ void graph_model_setup (const int stack_id)
|
||||||
g_printerr("ARGH : not all arrows have been parsed !\n");
|
g_printerr("ARGH : not all arrows have been parsed !\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Initializes the buffer of a gl_area
|
||||||
|
* Calls according to the user preferences
|
||||||
|
* @param gl_area, ptr to the gl_area widget
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
void graph_init_buffers(const int stack_id)
|
||||||
|
{
|
||||||
|
struct graph_stack_t *graph_stack = NULL; // *graph_stack = &graph_stack[stack_id]; TODO
|
||||||
|
|
||||||
|
//XXX
|
||||||
|
graph_model_setup(stack_id);
|
||||||
|
|
||||||
|
GLuint vao, vertex_buffer, color_buffer;
|
||||||
|
|
||||||
|
glGenBuffers(1, &vertex_buffer);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
|
||||||
|
glBufferData(GL_ARRAY_BUFFER,
|
||||||
|
graph_stack->buffer_vertex_size *
|
||||||
|
sizeof(graph_stack->buffer_vertex_origin[0]),
|
||||||
|
graph_stack->buffer_vertex_origin,
|
||||||
|
GL_STATIC_DRAW);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
|
||||||
|
|
||||||
|
// colors
|
||||||
|
glGenBuffers(1, &color_buffer);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, color_buffer);
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, graph_stack->buffer_colors_size *
|
||||||
|
sizeof(graph_stack->buffer_colors_origin[0]),
|
||||||
|
graph_stack->buffer_colors_origin,
|
||||||
|
GL_STATIC_DRAW);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
|
||||||
|
// We only use one VAO, so we always keep it bound
|
||||||
|
glGenVertexArrays(1, &vao);
|
||||||
|
glBindVertexArray(vao);
|
||||||
|
|
||||||
|
graph_stack->vao = vao;
|
||||||
|
graph_stack->position_buffer = vertex_buffer;
|
||||||
|
graph_stack->color_buffer = color_buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initializes the shaders of a gl_area and link them to a program
|
||||||
|
*
|
||||||
|
* @param gl_area, ptr to the gl_area widget
|
||||||
|
*
|
||||||
|
* @return true if initialized
|
||||||
|
*/
|
||||||
|
bool graph_init_shaders(const int stack_id)
|
||||||
|
{
|
||||||
|
struct graph_stack_t *graph_stack = NULL; // *graph_stack = &graph_stack[stack_id]; TODO
|
||||||
|
char *vertex_shader;
|
||||||
|
char *fragment_shader;
|
||||||
|
int status;
|
||||||
|
GLuint vertex = 0, fragment; // 2024-06-05 j'initialise vertex à 0 (au pif !)
|
||||||
|
GLuint program = 0;
|
||||||
|
GLuint m = 0;
|
||||||
|
GLuint v = 0;
|
||||||
|
GLuint p = 0;
|
||||||
|
|
||||||
|
// Load vertex shader file
|
||||||
|
vertex_shader = read_file(VERTEX_SHADER_FILE);
|
||||||
|
if (vertex_shader == NULL)
|
||||||
|
return false;
|
||||||
|
vertex = graph_create_shader(stack_id, GL_VERTEX_SHADER, vertex_shader);
|
||||||
|
|
||||||
|
if(vertex == 0) {
|
||||||
|
graph_stack->program = 0;
|
||||||
|
g_free(vertex_shader);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load fragment shader file
|
||||||
|
fragment_shader = read_file(FRAG_SHADER_FILE);
|
||||||
|
if (fragment_shader == NULL)
|
||||||
|
return false;
|
||||||
|
fragment = graph_create_shader(stack_id, GL_FRAGMENT_SHADER, fragment_shader);
|
||||||
|
|
||||||
|
if(fragment == 0) {
|
||||||
|
glDeleteShader(vertex);
|
||||||
|
graph_stack->program = 0;
|
||||||
|
g_free(vertex_shader);
|
||||||
|
g_free(fragment_shader);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Link shaders to program
|
||||||
|
program = glCreateProgram();
|
||||||
|
printf("\n------------------------------------------------------------------------------------------\n");
|
||||||
|
printf("[debug] graph_init_shaders() : program = %d, vertex = %d, fragment = %d\n\
|
||||||
|
exec > ** (myprogram:-----): WARNING ** : --:--:--:---: Linking failure: (address)\n",
|
||||||
|
program, vertex, fragment);
|
||||||
|
|
||||||
|
/* (myprogram:11732): WARNING **: 10:37:34.233: v plusieurs 'run' successifs
|
||||||
|
* (myprogram:11883): WARNING **: 10:38:22.979: glLinkProgram(program); < commenté
|
||||||
|
* (myprogram:11953): WARNING **: 10:38:46.170:
|
||||||
|
* (myprogram:12034): WARNING **: 10:39:14.709:
|
||||||
|
* (myprogram:12182): WARNING **: 10:40:49.788:
|
||||||
|
* > probablement la même adresse dans la librairie 'mesa' d'OpenGL (?) */
|
||||||
|
|
||||||
|
glAttachShader(program, vertex);
|
||||||
|
glAttachShader(program, fragment);
|
||||||
|
|
||||||
|
printf("Failed to link the graphic stack to widgets ! <> see init.c graph_init_shaders()\n");
|
||||||
|
printf("the error in not : vertex shader lacks `main' but : failed to link... (comment line 140)\n");
|
||||||
|
// https://registry.khronos.org/OpenGL-Refpages/gl4/html/glLinkProgram.xhtml
|
||||||
|
// glLinkProgram(program); // Linking failure: (address)
|
||||||
|
printf("------------------------------------------------------------------------------------------\n");
|
||||||
|
|
||||||
|
glGetProgramiv(program, GL_LINK_STATUS, &status); // Linking failure: (address)
|
||||||
|
|
||||||
|
if(status == GL_FALSE) {
|
||||||
|
int log_len;
|
||||||
|
char *buffer;
|
||||||
|
|
||||||
|
glGetProgramiv(program, GL_INFO_LOG_LENGTH, &log_len);
|
||||||
|
|
||||||
|
buffer = g_malloc(log_len + 1);
|
||||||
|
assert(buffer);
|
||||||
|
glGetProgramInfoLog(program, log_len, NULL, buffer);
|
||||||
|
|
||||||
|
g_warning("Linking failure:\n%s", buffer);
|
||||||
|
|
||||||
|
g_free(buffer);
|
||||||
|
|
||||||
|
glDeleteProgram(program);
|
||||||
|
program = 0;
|
||||||
|
|
||||||
|
glDeleteShader(vertex);
|
||||||
|
glDeleteShader(fragment);
|
||||||
|
|
||||||
|
g_free(vertex_shader);
|
||||||
|
g_free(fragment_shader);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get the location of the "mvp" uniform */
|
||||||
|
m = glGetUniformLocation(program, "model_matrix");
|
||||||
|
v = glGetUniformLocation(program, "view_matrix");
|
||||||
|
p = glGetUniformLocation(program, "projection_matrix");
|
||||||
|
|
||||||
|
glDetachShader(program, vertex);
|
||||||
|
glDetachShader(program, fragment);
|
||||||
|
|
||||||
|
glDeleteShader(vertex);
|
||||||
|
glDeleteShader(fragment);
|
||||||
|
|
||||||
|
graph_stack->program = program;
|
||||||
|
graph_stack->m = m;
|
||||||
|
graph_stack->v = v;
|
||||||
|
graph_stack->p = p;
|
||||||
|
|
||||||
|
g_free(vertex_shader);
|
||||||
|
g_free(fragment_shader);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
|
@ -25,8 +25,8 @@
|
||||||
* * * * * * * * * * * * * * * * * * * * * * * * * * */
|
* * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
|
|
||||||
#include "../../include/graph.h"
|
#include "../../include/graphics.h"
|
||||||
#include "../../include/calls.h"
|
#include "../../include/signal.h"
|
||||||
|
|
||||||
struct stack_index_t {
|
struct stack_index_t {
|
||||||
long stack_id;
|
long stack_id;
|
|
@ -30,7 +30,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include "../include/calls.h"
|
#include "../include/signal.h"
|
||||||
|
|
||||||
/* Comment renommer les fonctions ?
|
/* Comment renommer les fonctions ?
|
||||||
* Cette question dépend de plusieurs choix
|
* Cette question dépend de plusieurs choix
|
||||||
|
@ -337,7 +337,7 @@ int main (int argc, char **argv)
|
||||||
GtkApplication *app;
|
GtkApplication *app;
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
app = gtk_application_new ("org.jean.gg_hack", G_APPLICATION_DEFAULT_FLAGS);
|
app = gtk_application_new ("org.gem-graph", G_APPLICATION_DEFAULT_FLAGS);
|
||||||
g_signal_connect (app, "activate", G_CALLBACK (on_windows_activation), NULL);
|
g_signal_connect (app, "activate", G_CALLBACK (on_windows_activation), NULL);
|
||||||
|
|
||||||
status = g_application_run (G_APPLICATION (app), argc, argv);
|
status = g_application_run (G_APPLICATION (app), argc, argv);
|
||||||
|
|
|
@ -1,132 +0,0 @@
|
||||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
||||||
* *
|
|
||||||
* Gem-graph client *
|
|
||||||
* *
|
|
||||||
* Tree *
|
|
||||||
* *
|
|
||||||
* Copyright © 2021 Libre en Communs <contact@a-lec.org> *
|
|
||||||
* Copyright © 2021 Adrien Bourmault <neox@a-lec.org> *
|
|
||||||
* Copyright © 2021 Jean Sirmai <jean@a-lec.org> *
|
|
||||||
* *
|
|
||||||
* This file is part of Gem-graph. *
|
|
||||||
* *
|
|
||||||
* This program is free software: you can redistribute it and/or modify it *
|
|
||||||
* under the terms of the GNU Affero General Public License *
|
|
||||||
* as published by the Free Software Foundation, *
|
|
||||||
* either version 3 of the License, *
|
|
||||||
* or (at your option) any later version. *
|
|
||||||
* *
|
|
||||||
* This program is distributed in the hope that it will be useful, *
|
|
||||||
* but WITHOUT ANY WARRANTY; *
|
|
||||||
* without even the implied warranty of MERCHANTABILITY *
|
|
||||||
* or FITNESS FOR A PARTICULAR PURPOSE. *
|
|
||||||
* See the GNU Affero General Public License for more details. *
|
|
||||||
* *
|
|
||||||
* You should have received a copy of the GNU Affero General Public License *
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
|
|
||||||
* *
|
|
||||||
* * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
||||||
|
|
||||||
|
|
||||||
#include "../../include/calls.h"
|
|
||||||
#include "../../include/widgets.h"
|
|
||||||
|
|
||||||
// GTK_ORIENTATION_VERTICAL GTK_ORIENTATION_HORIZONTAL
|
|
||||||
|
|
||||||
|
|
||||||
static void add_menu_item (struct MenuNode_t *parent, struct MenuNode_t *child){
|
|
||||||
if (parent->child) {
|
|
||||||
struct MenuNode_t *cur = parent->child;
|
|
||||||
while (cur && cur->next) {cur = cur->next;}
|
|
||||||
cur->next = child;
|
|
||||||
} else parent->child = child;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct MenuNode_t *create_user_menu_node (const gchar* text){
|
|
||||||
struct MenuNode_t *node = g_malloc0 (sizeof(struct MenuNode_t));
|
|
||||||
node->text = g_strdup (text);
|
|
||||||
node->child = NULL; // if (0) printf("create_user_menu_node %s\n", text);
|
|
||||||
return node;
|
|
||||||
}
|
|
||||||
|
|
||||||
static GListModel* get_user_menu_model_child (struct MenuNode_t *parent){
|
|
||||||
GtkStringList *list = NULL;
|
|
||||||
if (parent) {
|
|
||||||
if (0) printf("[get_user_menu_model_child] here is %s content : ", parent->text);
|
|
||||||
struct MenuNode_t *child = parent->child;
|
|
||||||
if (child) {list = gtk_string_list_new(NULL);}
|
|
||||||
while(child) {
|
|
||||||
gtk_string_list_append(list, child->text);
|
|
||||||
if (0) printf("%s ", child->text);
|
|
||||||
child = child->next;
|
|
||||||
}
|
|
||||||
} // else printf("hot.c GListModel* get_user_menu_model_child (struct MenuNode_t *parent) child = %d \n", parent);
|
|
||||||
if (0) printf("\n");
|
|
||||||
return G_LIST_MODEL(list);
|
|
||||||
}
|
|
||||||
|
|
||||||
static GListModel* get_user_menu_model (GObject *item, gpointer root){
|
|
||||||
struct MenuNode_t *cur = (struct MenuNode_t *)root;
|
|
||||||
struct MenuNode_t *parent = root;
|
|
||||||
const gchar *string = gtk_string_object_get_string (GTK_STRING_OBJECT (item));
|
|
||||||
while (cur) {
|
|
||||||
if (strcmp(string, cur->text) == 0) break;
|
|
||||||
cur = cur->next;
|
|
||||||
if (cur == NULL) {cur = parent->child; parent = cur;}
|
|
||||||
}
|
|
||||||
if (0) printf("[get_user_user_menu_model] looked for %s in %s item\n", cur->text, string);
|
|
||||||
// ! WARNING ! TODO CUR EST L'ENFANT, MAINTENANT DONC, SI CUR EST UNE FEUILLE, JE N'ATTEINDRAI PAS SON ENFANT
|
|
||||||
return get_user_menu_model_child (cur);
|
|
||||||
}
|
|
||||||
|
|
||||||
GtkWidget *get_menu_anchor()
|
|
||||||
{
|
|
||||||
// https://docs.gtk.org/gio/class.MenuModel.html
|
|
||||||
// https://www.geany.org/manual/gtk/gobject/index.html
|
|
||||||
// https://developer.gnome.org/hig/patterns/controls/menus.html
|
|
||||||
|
|
||||||
if (0) labo_create_a_simple_gtk_string_list ();
|
|
||||||
struct MenuNode_t *menu_root = create_user_menu_node("menu");
|
|
||||||
struct MenuNode_t *item_a = create_user_menu_node("item_a");add_menu_item (menu_root, item_a);
|
|
||||||
struct MenuNode_t *item_b = create_user_menu_node("item_b");add_menu_item (menu_root, item_b);
|
|
||||||
struct MenuNode_t *item_c = create_user_menu_node("item_c");add_menu_item (menu_root, item_c);
|
|
||||||
|
|
||||||
// GtkWidget* list_box = gtk_list_box_new();
|
|
||||||
|
|
||||||
GtkStringList *model = gtk_string_list_new (NULL);
|
|
||||||
gtk_string_list_append (model, menu_root->text);
|
|
||||||
GtkSignalListItemFactory *factory = GTK_SIGNAL_LIST_ITEM_FACTORY (gtk_signal_list_item_factory_new());
|
|
||||||
g_signal_connect (factory, "setup", G_CALLBACK(on_setup_user_menu_factory), NULL);
|
|
||||||
g_signal_connect (factory, "bind", G_CALLBACK(on_bind_user_menu_factory), NULL);
|
|
||||||
|
|
||||||
GtkTreeListModel *menu_model = gtk_tree_list_model_new (
|
|
||||||
G_LIST_MODEL (model),
|
|
||||||
FALSE, // Passthrough - False in actual usage with dynamic children retrieval
|
|
||||||
FALSE, // TRUE, // FALSE, // autoexpand
|
|
||||||
(GtkTreeListModelCreateModelFunc) &get_user_menu_model,
|
|
||||||
menu_root,
|
|
||||||
NULL // (GDestroyNotify) free_user_menu_node
|
|
||||||
);
|
|
||||||
|
|
||||||
GtkSingleSelection *selection_model = gtk_single_selection_new (G_LIST_MODEL (menu_model));
|
|
||||||
gtk_single_selection_set_autoselect (selection_model, FALSE);
|
|
||||||
gtk_single_selection_set_can_unselect (selection_model, TRUE);
|
|
||||||
GtkWidget *list_view = gtk_list_view_new (GTK_SELECTION_MODEL (selection_model),
|
|
||||||
GTK_LIST_ITEM_FACTORY (factory));
|
|
||||||
|
|
||||||
return list_view;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (gtk_scrolled_window_new());
|
|
||||||
// Allocation height too small. Tried to allocate 1922x1030, but GtkNotebook 0x25cd4c0 needs at least 1922x1064.
|
|
||||||
// even if I remove (comment) the next line :
|
|
||||||
gtk_scrolled_window_set_child (scrolled_window, list_view);
|
|
||||||
gtk_scrolled_window_set_policy (scrolled_window, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
|
|
||||||
gtk_widget_set_vexpand (GTK_WIDGET (scrolled_window), TRUE);
|
|
||||||
gtk_widget_set_visible (GTK_WIDGET (scrolled_window), TRUE);
|
|
||||||
gtk_widget_set_visible (GTK_WIDGET (list_view), TRUE);
|
|
||||||
return scrolled_window;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
* * * * * * * * * * * * * * * * * * * * * * * * * * */
|
* * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
|
|
||||||
#include "../../include/widgets.h"
|
#include "../../include/widget.h"
|
||||||
|
|
||||||
// (NB à terme, labo.c disparaitra, bien sûr !)
|
// (NB à terme, labo.c disparaitra, bien sûr !)
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
* * * * * * * * * * * * * * * * * * * * * * * * * * */
|
* * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
|
|
||||||
#include "../../include/widgets.h"
|
#include "../../include/widget.h"
|
||||||
|
|
||||||
#define W 1920 // TODO 2024-06-30
|
#define W 1920 // TODO 2024-06-30
|
||||||
#define H 960 // Ad hoc (pour mon écran)
|
#define H 960 // Ad hoc (pour mon écran)
|
|
@ -27,9 +27,9 @@
|
||||||
* * * * * * * * * * * * * * * * * * * * * * * * * * */
|
* * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
|
|
||||||
#include "../../include/automat.h"
|
#include "../../include/fsm.h"
|
||||||
#include "../../include/widgets.h"
|
#include "../../include/widget.h"
|
||||||
#include "../../include/calls.h"
|
#include "../../include/signal.h"
|
||||||
|
|
||||||
#define W 1920 // TODO 2024-06-30 (Ad hoc pour mon écran)
|
#define W 1920 // TODO 2024-06-30 (Ad hoc pour mon écran)
|
||||||
#define H 960
|
#define H 960
|
|
@ -28,8 +28,8 @@
|
||||||
|
|
||||||
|
|
||||||
#include "../../include/base.h"
|
#include "../../include/base.h"
|
||||||
#include "../../include/calls.h"
|
#include "../../include/signal.h"
|
||||||
#include "../../include/widgets.h"
|
#include "../../include/widget.h"
|
||||||
|
|
||||||
GtkWidget *get_STOCK_page () {
|
GtkWidget *get_STOCK_page () {
|
||||||
GtkBox *data_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 32));
|
GtkBox *data_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 32));
|
|
@ -29,8 +29,8 @@
|
||||||
|
|
||||||
|
|
||||||
#include "../../include/base.h"
|
#include "../../include/base.h"
|
||||||
#include "../../include/calls.h"
|
#include "../../include/signal.h"
|
||||||
#include "../../include/widgets.h"
|
#include "../../include/widget.h"
|
||||||
|
|
||||||
#define W_TEXT_WINDOW 700
|
#define W_TEXT_WINDOW 700
|
||||||
#define H_TEXT_WINDOW 1000
|
#define H_TEXT_WINDOW 1000
|
||||||
|
@ -122,7 +122,7 @@ void widget_head_DIALOG_WINDOW_design (GtkWindow *main_window, GtkWindow *dialog
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
/* M A I N W I N D O W C E N T E R */
|
/* M A I N W I N D O W H E A D C E N T E R */
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
static GtkWidget *window_header_bar (GtkWindow *window);
|
static GtkWidget *window_header_bar (GtkWindow *window);
|
||||||
|
@ -150,7 +150,7 @@ static GtkWidget *window_header_bar (GtkWindow *window)
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
/* M A I N W I N D O W L E F T */
|
/* M A I N W I N D O W H E A D L E F T */
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
static void window_header_bar_left (GtkWidget *header_bar)
|
static void window_header_bar_left (GtkWidget *header_bar)
|
||||||
|
@ -189,7 +189,7 @@ static void window_header_bar_left (GtkWidget *header_bar)
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
/* M A I N W I N D O W R I G H T */
|
/* M A I N W I N D O W H E A D R I G H T */
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
static void connect(GApplication *app, gpointer *data) { puts("Connect menu item clicked.\n"); }
|
static void connect(GApplication *app, gpointer *data) { puts("Connect menu item clicked.\n"); }
|
||||||
|
@ -214,12 +214,10 @@ static void window_header_bar_right (GtkWidget *header_bar)
|
||||||
|
|
||||||
|
|
||||||
GtkWidget* list_box = gtk_list_box_new();
|
GtkWidget* list_box = gtk_list_box_new();
|
||||||
GtkWidget *menu_item_A;
|
GtkWidget *label_A = GTK_WIDGET (gtk_label_new("A")); gtk_list_box_append (GTK_LIST_BOX (list_box), label_A);
|
||||||
if (0) menu_item_A = GTK_WIDGET (g_menu_item_new ("A", "activate"));
|
GtkWidget *label_B = GTK_WIDGET (gtk_label_new("B")); gtk_list_box_append (GTK_LIST_BOX (list_box), label_B);
|
||||||
else menu_item_A = GTK_WIDGET (gtk_label_new("A")); gtk_list_box_append (GTK_LIST_BOX (list_box), menu_item_A);
|
GtkWidget *label_C = GTK_WIDGET (gtk_label_new("C")); gtk_list_box_append (GTK_LIST_BOX (list_box), label_C);
|
||||||
GtkWidget *menu_item_B = GTK_WIDGET (gtk_label_new("B")); gtk_list_box_append (GTK_LIST_BOX (list_box), menu_item_B);
|
// gtk_menu_item_activate (label_C);
|
||||||
GtkWidget *menu_item_C = GTK_WIDGET (gtk_label_new("C")); gtk_list_box_append (GTK_LIST_BOX (list_box), menu_item_C);
|
|
||||||
// gtk_menu_item_activate (menu_item_C);
|
|
||||||
|
|
||||||
// https://discourse.gnome.org/t/when-do-we-really-have-to-use-gtk-popover-present-to-show-a-popover-at-a-given-widget/17566/5
|
// https://discourse.gnome.org/t/when-do-we-really-have-to-use-gtk-popover-present-to-show-a-popover-at-a-given-widget/17566/5
|
||||||
GtkWidget *pop = gtk_popover_new ();
|
GtkWidget *pop = gtk_popover_new ();
|
||||||
|
@ -240,23 +238,13 @@ static void window_header_bar_right (GtkWidget *header_bar)
|
||||||
GSimpleAction *act_connect = g_simple_action_new("connect", NULL);
|
GSimpleAction *act_connect = g_simple_action_new("connect", NULL);
|
||||||
// g_action_map_add_action(G_ACTION_MAP(app), G_ACTION(act_connect));
|
// g_action_map_add_action(G_ACTION_MAP(app), G_ACTION(act_connect));
|
||||||
g_signal_connect(act_connect, "activate", G_CALLBACK(connect), NULL);
|
g_signal_connect(act_connect, "activate", G_CALLBACK(connect), NULL);
|
||||||
// GMenuItem *menu_item_E = g_menu_item_new("connect", "app.connect");
|
// GMenuItem *label_E = g_menu_item_new("connect", "app.connect");
|
||||||
// gtk_list_box_append (GTK_LIST_BOX (list_box), GTK_WIDGET (menu_item_E));
|
// gtk_list_box_append (GTK_LIST_BOX (list_box), GTK_WIDGET (label_E));
|
||||||
|
|
||||||
|
|
||||||
g_signal_connect (open_menu, "activate", G_CALLBACK (on_clicked_menu_experiment), list_box);
|
g_signal_connect (open_menu, "activate", G_CALLBACK (on_clicked_menu_experiment), list_box);
|
||||||
|
|
||||||
|
|
||||||
// signal 'clicked' is invalid for instance '0xbcb2900' of type 'GtkMenuButton'
|
|
||||||
// signal 'clicked' is invalid for instance '0x2c992b9' of type 'GtkPopover'
|
|
||||||
// signal 'clicked' is invalid for instance '0x2812f80' of type 'GtkListBox'
|
|
||||||
// signal 'clicked' is invalid for instance '0x2a15120' of type 'GtkLabel'
|
|
||||||
//
|
|
||||||
// signal 'activate' is invalid for instance '0x3c3de7a' of type 'GtkPopover'
|
|
||||||
// signal 'activate' is invalid for instance '0x3d62f80' of type 'GtkListBox'
|
|
||||||
// signal 'activate' is invalid for instance '0x17fb93d' of type 'GtkLabel'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -292,7 +280,7 @@ static void window_header_bar_right (GtkWidget *header_bar)
|
||||||
printf("selected_row = %s\n",
|
printf("selected_row = %s\n",
|
||||||
gtk_button_get_label (GTK_BUTTON (gtk_list_box_row_get_child (selected_row))));
|
gtk_button_get_label (GTK_BUTTON (gtk_list_box_row_get_child (selected_row))));
|
||||||
|
|
||||||
// g_signal_connect (menu_item_C, "clicked", G_CALLBACK (on_clicked_HOME), no_local_data);
|
// g_signal_connect (label_C, "clicked", G_CALLBACK (on_clicked_HOME), no_local_data);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,8 +28,8 @@
|
||||||
* * * * * * * * * * * * * * * * * * * * * * * * * * */
|
* * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
|
|
||||||
#include "../../include/calls.h"
|
#include "../../include/signal.h"
|
||||||
#include "../../include/widgets.h"
|
#include "../../include/widget.h"
|
||||||
|
|
||||||
// GTK_ORIENTATION_VERTICAL GTK_ORIENTATION_HORIZONTAL
|
// GTK_ORIENTATION_VERTICAL GTK_ORIENTATION_HORIZONTAL
|
||||||
|
|
Loading…
Reference in New Issue