commit bb7c20d61677e5138fab9c251866aacc90e87831
parent 6da66d41fdad15b4596e4a582210befed9fb8f38
Author: gduperon <gduperon@5d9ba3ac-444b-4713-9fb3-0b58e79229a2>
Date: Wed, 19 May 2010 07:27:23 +0000
v4, pendant connexions
git-svn-id: https://projetud.info-ufr.univ-montp2.fr/svn/flin607-2009-gduperon@64 5d9ba3ac-444b-4713-9fb3-0b58e79229a2
Diffstat:
32 files changed, 1165 insertions(+), 229 deletions(-)
diff --git a/jside3/index.html b/jside3/index.html
@@ -150,9 +150,8 @@
<table class="définitions vPorts-sortie"></table>
<div class="définitions vContenusTabs">
<div class="définition vCorps vAucune-définition">
- Aucune définition.
- <br/>
- Cliquez sur le + ci-dessus pour en créer une.
+ <h4>Aucune définition.</h4>
+ <p>Cliquez sur le + ci-dessus pour en créer une.</p>
</div>
</div>
</div>
diff --git a/jside4/bugs b/jside4/bugs
@@ -1,33 +1,19 @@
-TODO :
-- modèle ports
-~ Ajout de ports à un bloc
-#
-X ré-organisation des ports
-#
-Connexions - vue
-Connexions - modèle
-#
-Connexions - déplacement du port
-Connexions autorisées et ports autorisés.
-#
-types de définitions - interface
-#
-types de définitions - modèle
-#
-#.
-fenêtres "debug" (avec un pseudo-port qui va "piquer" sur un port, une connexion, …
-->interface
-#
-#
-"exécution" (pour les fenêtres debug)
-#
-#
-suppression de blocs, etc. remplissage des vues à la création
-(Lors de la création de la vue d'une instance-bloc, les définitions existantes ne sont pas encore ajoutées.)
-#
-annulation
-#
-#
-enregistrement
-#
-#
-\ No newline at end of file
+Être moins bête. !important
+
+Renomer les onAddXyz() en xyz.onAdd()
+
+TODO:
+Afficher les connexions
+- Chercher la vue du port d'entrée
+- Chercher la vue du port de sortie
+- Connecter
+
+Types de définitions
+- Afficher 2 boutons
+- ajouter un champ texte
+- toggle sur le champ texte
+
+Eval
+- chercher la connexion qui va sur le port
+- chercher d'où elle vient
+- faire des eval quelque part (?)
+\ No newline at end of file
diff --git a/jside4/callbacks.js b/jside4/callbacks.js
@@ -0,0 +1,70 @@
+Array.prototype.remove = function(i) {
+ if (typeof i != "number")
+ i = this.indexOf(i);
+ this.splice(i,1);
+ return i;
+}
+
+Array.prototype.insert = function(v, i) {
+ if (i === undefined)
+ i = this.length;
+ this.splice(i,0,v);
+ return i;
+}
+
+function faireCallbacks(liste) {
+ var a = $.makeArray(arguments);
+ a.shift();
+ for (var i = 0; i < liste.length; i++) {
+ liste[i].apply(a[0], a);
+ }
+}
+
+function makeCollection(obj, nom) {
+ var Nom = nom.charAt(0).toUpperCase() + nom.substring(1);
+ obj[nom] = [];
+ obj['add' + Nom] = function(stuff, position) {
+ obj[nom].insert(stuff, position);
+ faireCallbacks(obj['cbAdd' + Nom], obj, stuff, position);
+ };
+ obj['cbAdd' + Nom] = [];
+ obj['onAdd' + Nom] = function(callback) {
+ obj['cbAdd' + Nom].push(callback);
+ };
+ obj['remove' + Nom] = function(position) {
+ obj[nom].remove(position);
+ faireCallbacks(obj['cbRemove' + Nom], obj, position);
+ };
+ obj['cbRemove' + Nom] = [];
+ obj['onRemove' + Nom] = function(callback) {
+ obj['cbRemove' + Nom].push(callback);
+ };
+ obj['move' + Nom] = function(from, to) {
+ var stuff = obj[nom][from];
+ obj[nom].remove(from);
+ obj[nom].insert(stuff, to);
+ faireCallbacks(obj['cbMove' + Nom], obj, from, to);
+ };
+ obj['cbMove' + Nom] = [];
+ obj['onMove' + Nom] = function(callback) {
+ obj['cbMove' + Nom].push(callback);
+ };
+}
+
+// makeField(this, , new ());
+function makeField(obj, nom, defaultValue) {
+ var Nom = nom.charAt(0).toUpperCase() + nom.substring(1);
+ obj['_' + nom] = defaultValue;
+ obj[nom] = function(val) {
+ if (val === undefined) {
+ return obj['_' + nom];
+ } else {
+ obj['_' + nom] = val;
+ faireCallbacks(obj['cbChange' + Nom], obj, val);
+ }
+ };
+ obj['cbChange' + Nom] = [];
+ obj['onChange' + Nom] = function(callback) {
+ obj['cbChange' + Nom].push(callback);
+ };
+}
+\ No newline at end of file
diff --git a/jside4/callbacks.js~ b/jside4/callbacks.js~
@@ -0,0 +1,70 @@
+Array.prototype.remove = function(i) {
+ if (typeof i != "number")
+ i = this.indexOf(i);
+ this.splice(i,1);
+ return i;
+}
+
+Array.prototype.insert = function(v, i) {
+ if (arguments.length == 1)
+ i = this.length;
+ this.splice(i,0,v);
+ return i;
+}
+
+function faireCallbacks(liste) {
+ var a = $.makeArray(arguments);
+ a.shift();
+ for (var i = 0; i < liste.length; i++) {
+ liste[i].apply(a[0], a);
+ }
+}
+
+function makeCollection(obj, nom) {
+ var Nom = nom.charAt(0).toUpperCase() + nom.substring(1);
+ obj[nom] = [];
+ obj['add' + Nom] = function(stuff, position) {
+ obj[nom].insert(stuff, position);
+ faireCallbacks(obj['cbAdd' + Nom], obj, stuff, position);
+ };
+ obj['cbAdd' + Nom] = [];
+ obj['onAdd' + Nom] = function(callback) {
+ obj['cbAdd' + Nom].push(callback);
+ };
+ obj['remove' + Nom] = function(position) {
+ obj[nom].remove(position);
+ faireCallbacks(obj['cbRemove' + Nom], obj, position);
+ };
+ obj['cbRemove' + Nom] = [];
+ obj['onRemove' + Nom] = function(callback) {
+ obj['cbRemove' + Nom].push(callback);
+ };
+ obj['move' + Nom] = function(from, to) {
+ var stuff = obj[nom][from];
+ obj[nom].remove(from);
+ obj[nom].insert(stuff, to);
+ faireCallbacks(obj['cbMove' + Nom], obj, from, to);
+ };
+ obj['cbMove' + Nom] = [];
+ obj['onMove' + Nom] = function(callback) {
+ obj['cbMove' + Nom].push(callback);
+ };
+}
+
+// makeField(this, , new ());
+function makeField(obj, nom, defaultValue) {
+ var Nom = nom.charAt(0).toUpperCase() + nom.substring(1);
+ obj['_' + nom] = defaultValue;
+ obj[nom] = function(val) {
+ if (val === undefined) {
+ return obj['_' + nom];
+ } else {
+ obj['_' + nom] = val;
+ faireCallbacks(obj['cbChange' + Nom], obj, val);
+ }
+ };
+ obj['cbChange' + Nom] = [];
+ obj['onChange' + Nom] = function(callback) {
+ obj['cbChange' + Nom].push(callback);
+ };
+}
+\ No newline at end of file
diff --git a/jside4/index.html b/jside4/index.html
@@ -20,10 +20,7 @@
<script type="text/javascript" src="jquery/ui/jquery.ui.widget.js"></script>
<script type="text/javascript" src="jquery/ui/jquery.ui.mouse.js"></script>
<script type="text/javascript" src="jquery/ui/jquery.ui.draggable.js"></script>
-<!-- <script type="text/javascript" src="jquery/ui/jquery.ui.droppable.js"></script>-->
<script type="text/javascript" src="jquery/ui/jquery.ui.resizable.js"></script>
-<!-- <script type="text/javascript" src="jquery/ui/jquery.ui.sortable.js"></script>-->
-<!-- <script type="text/javascript" src="jquery/ui/jquery.ui.selectable.js"></script>-->
<script type="text/javascript" src="jquery/ui/jquery.ui.position.js"></script>
<script type="text/javascript" src="jquery/ui/jquery.effects.core.js"></script>
<script type="text/javascript" src="jquery/jquery.layout.js"></script>
@@ -31,203 +28,92 @@
<!-- jQuery - mes extensions -->
<script type="text/javascript" src="extensions-jQuery.js"></script>
- <!-- Modèle / Vue - fonctions utilitaires et explications -->
- <script type="text/javascript" src="modele.js"></script>
- <script type="text/javascript" src="vue.js"></script>
+ <!-- Fonctions utilitaires -->
+ <script type="text/javascript" src="callbacks.js"></script>
+ <script type="text/javascript" src="singleton.js"></script>
+ <script type="text/javascript" src="vues.js"></script>
<!-- MVC -->
<script type="text/javascript" src="mvc/monde.js"></script>
-
- <script type="text/javascript" src="mvc/barre-outils.js"></script>
-
- <script type="text/javascript" src="mvc/log.js"></script>
- <script type="text/javascript" src="mvc/instance-log.js"></script>
-
- <script type="text/javascript" src="mvc/recherche.js"></script>
- <script type="text/javascript" src="mvc/instance-recherche.js"></script>
- <script type="text/javascript" src="mvc/resultat-recherche.js"></script>
-
<script type="text/javascript" src="mvc/bloc.js"></script>
- <script type="text/javascript" src="mvc/instance-bloc.js"></script>
- <script type="text/javascript" src="mvc/definitions.js"></script>
- <script type="text/javascript" src="mvc/ports.js"></script>
- <script type="text/javascript" src="mvc/port-in-ports.js"></script>
+ <script type="text/javascript" src="mvc/liste-ports.js"></script>
+ <script type="text/javascript" src="mvc/titre-bloc.js"></script>
+ <script type="text/javascript" src="mvc/liste-définitions.js"></script>
<script type="text/javascript" src="mvc/port.js"></script>
-
- <script type="text/javascript" src="mvc/definition.js"></script>
+ <script type="text/javascript" src="mvc/tabs-définitions.js"></script>
+ <script type="text/javascript" src="mvc/définition.js"></script>
+ <script type="text/javascript" src="mvc/titre-définition.js"></script>
+ <script type="text/javascript" src="mvc/instance-bloc.js"></script>
<script type="text/javascript" src="mvc/connexion.js"></script>
+ <script type="text/javascript" src="mvc/instance-connexion.js"></script>
<!-- Test -->
<script type="text/javascript" src="test.js"></script>
<!-- Apparence -->
<link rel="stylesheet" type="text/css" href="style.css" />
+ <link rel="stylesheet" type="text/css" href="style2.css" />
</head>
<body style="position: absolute;" id="editeur">
- <script type="text/x-jqote-template" id="vue-monde">
- <![CDATA[
- <div class="monde">
- <div class="scratch"></div>
- </div>
- ]]>
- </script>
- <script type="text/x-jqote-template" id="vue-barre-outils">
- <![CDATA[
- <div class="barre-outils fenetre">
- <!--<div class="log barre-titre">-->
- <h2 class="barre-outils barre-titre titre">Barre d'outils</h2>
- <!--</div>-->
- <input type="button" value="Nouveau bloc" class="barre-outils nouveau-bloc"/>
- <input type="button" value="Recherche" class="barre-outils recherche"/>
- <input type="button" value="Log" class="barre-outils log"/>
- </div>
- ]]>
- </script>
- <script type="text/x-jqote-template" id="vue-log">
- <![CDATA[
- <div class="log fenetre">
- <div class="log barre-titre">
- <input type="button" class="log pause" value="▌▌" style="padding-right: 0.2em;" />
- <input type="button" class="log play" value="▶"/>
- <h2 class="titre">Log</h2>
- <div class="clearfloat"></div>
- </div>
- <div class="log messages">
- <div><!-- Il faut au moins un message (vide). --></div>
- </div>
+ <div id="éditeur">
+ </div>
+ <div id="vues" style="display: none;">
+ <div class="vInstanceBloc instance-bloc main">
+ <div class="vBloc instance-bloc contenu"></div>
+ </div>
+ <div class="vBloc main">
+ <div class="vTitreBloc"></div>
+ <div class="vListePortsEntrée"></div>
+ <div class="vListePortsSortie"></div>
+ <div class="vTitresTabsDéfinitions"></div>
+ <div class="vContenusTabsDéfinitions"></div>
+ </div>
+ <div class="vTitreBloc">
+ <h2 class="vTitre"></h2>
+ <form action="#" class="vÉdition">
+ <input type="text" class="vTexte" value=""/>
+ <input type="submit" class="vSubmit" value="Ok"/>
+ <input type="button" class="vCancel" value="Anuler"/>
+ </form>
+ </div>
+ <div class="vListePorts">
+ <div class="vPorts"></div>
+ <input type="button" class="vNouveauPort" value="+"/>
+ </div>
+ <div class="vPort port">
+ </div>
+ <div class="vTitresTabsDéfinitions">
+ <div class="vTitresTabs">
+ <h3 class="vTitreAucuneDéfinition">Aucune définition</h3>
</div>
- ]]>
- </script>
- <script type="text/x-jqote-template" id="vue-recherche">
- <![CDATA[
- <div class="recherche fenetre">
- <div class="recherche barre-titre">
- <input type="text" class="recherche termes" value="Recherche…"/>
- <h2 class="titre">Recherche</h2>
- <div class="clearfloat"></div>
+ <input type="button" class="vNouvelleDéfinition" value="+"/>
+ </div>
+ <div class="vContenusTabsDéfinitions">
+ <div class="vContenusTabs">
+ <div class="vContenuAucuneDéfinition">
+ <h4>Aucune définition.</h4>
+ <p>Cliquez sur le + ci-dessus pour en créer une.</p>
</div>
- <div class="recherche résultats">
- </div>
- </div>
- ]]>
- </script>
- <script type="text/x-jqote-template" id="vue-résultat-recherche">
- <![CDATA[
- <div class="résultat-recherche vMain">
- <span class="résultat-recherche vUid">
- </span>
- <span class="résultat-recherche vTexte">
- </span>
- </div>
- ]]>
- </script>
- <script type="text/x-jqote-template" id="vue-instance-bloc">
- <![CDATA[
- <div class="instance-bloc vMain fenetre">
- <div class="instance-bloc vBarre-titre">
- <h2 class="instance-bloc vTitre vVue-titre">Nom du bloc</h2>
- <form action="#" class="instance-bloc vÉdition-titre">
- <input type="text" class="instance-bloc vChamp-titre" value=""/>
- <input type="submit" class="instance-bloc vBouton-valider-titre" value="ok"/>
- </form>
- <div class="clearfloat"></div>
- </div>
- <div class="instance-bloc vDéfinitions">
- </div>
- </div>
- ]]>
- </script>
- <script type="text/x-jqote-template" id="vue-définitions">
- <![CDATA[
- <div class="définitions vMain">
- <div class="définitions vTitresTabs">
- <h3 class="définition vTitre vAucune-définition">Aucune définition</h3>
- <input type="button" class="définitions vNouvelle-définition" value="+"/>
- <div class="clearfloat"></div>
- </div>
- <div class="définitions vContenus">
- <table class="définitions vPorts-entrée"></table>
- <table class="définitions vPorts-sortie"></table>
- <div class="définitions vContenusTabs">
- <div class="définition vCorps vAucune-définition">
- Aucune définition.
- <br/>
- Cliquez sur le + ci-dessus pour en créer une.
- </div>
- </div>
- </div>
- </div>
- ]]>
- </script>
- <script type="text/x-jqote-template" id="vue-ports-entrée">
- <![CDATA[
- <div class="ports vVerticalBar vEntrée">
- <table class="ports vPorts vEntrée">
- </table>
- </div>
- ]]>
- </script>
- <script type="text/x-jqote-template" id="vue-ports-sortie">
- <![CDATA[
- <div class="ports vVerticalBar vSortie">
- <table class="ports vPorts vSortie">
- </table>
- </div>
- ]]>
- </script>
- <script type="text/x-jqote-template" id="vue-port">
- <![CDATA[
- <span class="port vBox vMain">
- </span>
- ]]>
- </script>
- <script type="text/x-jqote-template" id="vue-port-drag">
- <![CDATA[
- <span class="port vBox vMain drag">
- </span>
- ]]>
- </script>
- <script type="text/x-jqote-template" id="vue-port-in-ports">
- <![CDATA[
- <tr>
- <td class="port port-target">
- </td>
- </tr>
- ]]>
- </script>
- <script type="text/x-jqote-template" id="vue-port-placeholder">
- <![CDATA[
- <tr class="port placeholder vTr vMain">
- <td class="port placeholder vTd">
- <span class="port placeholder vBox">
- </span>
- </td>
- </tr>
- ]]>
- </script>
- <script type="text/x-jqote-template" id="vue-définition-titre">
- <![CDATA[
- <h3 class="définition vTitre">Nom de la définition</h3>
- ]]>
- </script>
- <script type="text/x-jqote-template" id="vue-définition">
- <![CDATA[
- <div class="définition vCorps">
</div>
- ]]>
- </script>
- <script type="text/x-jqote-template" id="vue-zone">
- <![CDATA[
- <div class="vZone">
+ </div>
+ <div class="vTitreDéfinition">
+ <h3 class="vTitre"></h3>
+ <form action="#" class="vÉdition">
+ <input type="text" class="vTexte" value=""/>
+ <input type="submit" class="vSubmit" value="Ok"/>
+ <input type="button" class="vCancel" value="Anuler"/>
+ </form>
+ </div>
+ <div class="vDéfinition">
+ <div class="vContenu">
+ 42.
</div>
- ]]>
- </script>
- <script type="x-exemple-local-storage">
- if (!localStorage[window.location.href]) {
- localStorage[window.location.href] = 0;
- }
- localStorage[window.location.href] = parseInt(localStorage[window.location.href]) + 1;
- document.getElementById('count').textContent = localStorage[window.location.href];
- </script>
+ </div>
+ <div class="vConnexion">
+ <div class="vSegment1 lien horizontal"></div>
+ <div class="vSegment2 lien vertical"></div>
+ <div class="vSegment3 lien horizontal"></div>
+ </div>
+ </div>
</body>
</html>
diff --git a/jside4/mvc/bloc.js b/jside4/mvc/bloc.js
@@ -0,0 +1,76 @@
+function MBloc() {
+ makeUid(this);
+ makeField(this, 'mTitreBloc', new MTitreBloc());
+ makeField(this, 'mListePortsEntrée', new MListePorts(true));
+ makeField(this, 'mListePortsSortie', new MListePorts(false));
+ makeField(this, 'mListeDéfinitions', new MListeDéfinitions());
+}
+
+function VBloc(mBloc, emplacement, mInstanceBloc_portClick) {
+ makeView(this, 'vBloc', emplacement, 'vTitreBloc', 'vListePortsEntrée', 'vListePortsSortie', 'vTitresTabsDéfinitions', 'vContenusTabsDéfinitions');
+ new VTitreBloc(mBloc.mTitreBloc(), this.parties.vTitreBloc);
+ var vpe = new VListePorts(mBloc.mListePortsEntrée(), this.parties.vListePortsEntrée);
+ var vps = new VListePorts(mBloc.mListePortsSortie(), this.parties.vListePortsSortie);
+
+ this.mvTabsDéfinitions = new MVTabsDéfinitions(mBloc.mListeDéfinitions());
+
+ new VTitresTabsDéfinitions(this.mvTabsDéfinitions, this.parties.vTitresTabsDéfinitions);
+ new VContenusTabsDéfinitions(this.mvTabsDéfinitions, this.parties.vContenusTabsDéfinitions);
+
+ var that = this;
+ var clicsPorts = function(mPort) {
+ singleton.portClickA.mInstanceBloc = mInstanceBloc_portClick;
+ singleton.portClickA.mDéfinition = that.mvTabsDéfinitions.définitionActive();
+
+ if (singleton.portClickB === null) {
+ singleton.portClickB = singleton.portClickA;
+ singleton.portClickA = {};
+ } else {
+ var a = singleton.portClickA;
+ var b = singleton.portClickB;
+ if (a.mPort == b.mPort) {
+ // Double clic, afficher la valeur du port
+ } else {
+ //console.log(singleton.portClickA, singleton.portClickB);
+ if (a.mDéfinition.uid == b.mInstanceBloc.dansDéfinition.uid) { // a parent de b
+ if (a.mListePorts.estEntrée) {
+ a.mDéfinition.addConnexions(
+ new MConnexion(true, a.mInstanceBloc, a.mPort, false, b.mInstanceBloc, b.mPort)
+ );
+ } else {
+ a.mDéfinition.addConnexions(
+ new MConnexion(false, b.mInstanceBloc, b.mPort, true, a.mInstanceBloc, a.mPort)
+ );
+ }
+ } else if (b.mDéfinition.uid == a.mInstanceBloc.dansDéfinition.uid) { // b parent de a
+ if (a.mListePorts.estEntrée) {
+ a.mDéfinition.addConnexions(
+ new MConnexion(true, a.mInstanceBloc, a.mPort, false, b.mInstanceBloc, b.mPort)
+ );
+ } else {
+ a.mDéfinition.addConnexions(
+ new MConnexion(false, b.mInstanceBloc, b.mPort, true, a.mInstanceBloc, a.mPort)
+ );
+ }
+ }
+
+ if (a.mInstanceBloc.dansDéfinition.uid == b.mInstanceBloc.dansDéfinition.uid) { // a et b même parent
+ if (a.mListePorts.estEntrée) {
+ a.mInstanceBloc.dansDéfinition.addConnexions(
+ new MConnexion(false, b.mInstanceBloc, b.mPort, false, a.mInstanceBloc, a.mPort)
+ );
+ } else {
+ a.mInstanceBloc.dansDéfinition.addConnexions(
+ new MConnexion(false, a.mInstanceBloc, a.mPort, false, b.mInstanceBloc, b.mPort)
+ );
+ }
+ }
+ }
+ singleton.portClickB = null;
+ singleton.portClickA = {};
+ }
+ }
+
+ vpe.onClickPort(clicsPorts);
+ vps.onClickPort(clicsPorts);
+}
+\ No newline at end of file
diff --git a/jside4/mvc/bloc.js~ b/jside4/mvc/bloc.js~
@@ -0,0 +1,19 @@
+function MBloc() {
+ makeUid(this);
+ makeField(this, 'mTitreBloc', new MTitreBloc());
+ makeField(this, 'mListePortsEntrée', new MListePorts(true));
+ makeField(this, 'mListePortsSortie', new MListePorts(false));
+ makeField(this, 'mListeDéfinitions', new MListeDéfinitions());
+}
+
+function VBloc(mBloc, emplacement) {
+ makeView(this, 'vBloc', emplacement, 'vTitreBloc', 'vListePortsEntrée', 'vListePortsSortie', 'vTitresTabsDéfinitions', 'vContenusTabsDéfinitions');
+ new VTitreBloc(mBloc.mTitreBloc(), this.parties.vTitreBloc);
+ new VListePorts(mBloc.mListePortsEntrée(), this.parties.vListePortsEntrée);
+ new VListePorts(mBloc.mListePortsSortie(), this.parties.vListePortsSortie);
+
+ this.mvTabsDéfinitions = new MVTabsDéfinitions(mBloc.mListeDéfinitions());
+
+ new VTitresTabsDéfinitions(this.mvTabsDéfinitions, this.parties.vTitresTabsDéfinitions);
+ new VContenusTabsDéfinitions(this.mvTabsDéfinitions, this.parties.vContenusTabsDéfinitions);
+}
+\ No newline at end of file
diff --git a/jside4/mvc/connexion.js b/jside4/mvc/connexion.js
@@ -0,0 +1,15 @@
+function MConnexion(deBloc, deMInstanceBloc, deMPort, versBloc, versMInstanceBloc, versMPort) {
+ makeUid(this);
+ makeField(this, 'deBloc', deBloc);
+ makeField(this, 'deMInstanceBloc', deMInstanceBloc);
+ makeField(this, 'deMPort', deMPort);
+ this.getDeMBloc = function() {
+ this.deBloc ? this.deMInstanceBloc : this.deMInstanceBloc.mBloc();
+ }
+ makeField(this, 'versBloc', versBloc);
+ makeField(this, 'versMInstanceBloc', versMInstanceBloc);
+ makeField(this, 'versMPort', versMPort);
+ this.getVersMBloc = function() {
+ this.versBloc ? this.versMInstanceBloc : this.versMInstanceBloc.mBloc();
+ }
+}
diff --git a/jside4/mvc/connexion.js~ b/jside4/mvc/connexion.js~
@@ -0,0 +1,15 @@
+function MConnexion(deBloc, deMInstanceBloc, deMPort, versBloc, versMInstanceBloc, versMPort) {
+ makeUid(this);
+ makeField(this, 'deBloc', deBloc);
+ makeField(this, 'deMInstanceBloc', deMInstanceBloc);
+ makeField(this, 'deMPort', deMPort);
+ this.getDeMBloc = function() {
+ this.deBloc ? this.deMInstanceBloc : this.deMInstanceBloc.mBloc();
+ }
+ makeField(this, 'versBloc', versBloc);
+ makeField(this, 'versMInstanceBloc', versMInstanceBloc);
+ makeField(this, 'versMPort', versMPort);
+ this.getVersMBloc = function() {
+ this.versBloc ? this.versMInstanceBloc : this.versMInstanceBloc.mBloc();
+ }
+}
+\ No newline at end of file
diff --git a/jside4/mvc/définition.js b/jside4/mvc/définition.js
@@ -0,0 +1,53 @@
+function MDéfinition() {
+ makeUid(this);
+ makeField(this, 'mTitreDéfinition', new MTitreDéfinition());
+ makeCollection(this, 'instancesBlocs');
+ makeCollection(this, 'connexions');
+}
+
+function VDéfinition(mDéfinition, emplacement) {
+ makeView(this, 'vDéfinition', emplacement, 'vContenu');
+
+ var vInstancesBlocsFilles = [];
+ var that = this;
+
+ // Actions
+ this.visible = function(val) {
+ if (val) that.vue.show();
+ else that.vue.hide();
+ };
+
+ this.ajoutInstanceBloc = function(_mDéfinition, mInstanceBloc) {
+ mInstanceBloc.dansDéfinition = mDéfinition; // TODO hack
+ var vib = new VInstanceBloc(mInstanceBloc, that.parties.vContenu);
+ vInstancesBlocsFilles.push(vib);
+ };
+
+ this.ajoutConnexion = function(_mDéfinition, mConnexion) {
+ console.log(mConnexion);
+ if (!mConnexion.deBloc()) {
+ for (i = 0; i < vInstancesBlocsFilles.length; i++) {
+ console.log(vInstancesBlocsFilles[i]);
+ }
+ }
+ /*var mvic = new MVInstanceConnexion(null, vib.vue, vib2.vue); */
+ /*new VInstanceConnexion(mvic, $('#éditeur')); */
+ }
+
+ this.vueNormale = function() {
+ }
+
+ // Binding
+ mDéfinition.onAddInstancesBlocs(this.ajoutInstanceBloc);
+ for (var i = 0; i < mDéfinition.instancesBlocs.length; i++) {
+ this.ajoutInstanceBloc(mDéfinition, mDéfinition.instancesBlocs[i]);
+ }
+
+ mDéfinition.onAddConnexions(this.ajoutConnexion);
+ for (var i = 0; i < mDéfinition.connexions.length; i++) {
+ this.ajoutConnexion(mDéfinition, mDéfinition.connexions[i]);
+ }
+
+ // Défauts
+ this.vueNormale();
+}
+\ No newline at end of file
diff --git a/jside4/mvc/définition.js~ b/jside4/mvc/définition.js~
@@ -0,0 +1,34 @@
+function MDéfinition() {
+ makeUid(this);
+ makeField(this, 'mTitreDéfinition', new MTitreDéfinition());
+ makeCollection(this, 'instancesBlocs');
+ makeCollection(this, 'connexions');
+}
+
+function VDéfinition(mDéfinition, emplacement) {
+ makeView(this, 'vDéfinition', emplacement, 'vContenu');
+
+ var that = this;
+
+ // Actions
+ this.visible = function(val) {
+ if (val) that.vue.show();
+ else that.vue.hide();
+ };
+
+ this.ajoutInstanceBloc = function(mDéfinition, mInstanceBloc) {
+ new VInstanceBloc(mInstanceBloc, that.parties.vContenu);
+ };
+
+ this.vueNormale = function() {
+ }
+
+ // Binding
+ mDéfinition.onAddInstancesBlocs(this.ajoutInstanceBloc);
+ for (var i = 0; i < mDéfinition.instancesBlocs.length; i++) {
+ this.ajoutInstanceBloc(mDéfinition, mDéfinition.instancesBlocs[i]);
+ }
+
+ // Défauts
+ this.vueNormale();
+}
+\ No newline at end of file
diff --git a/jside4/mvc/instance-bloc.js b/jside4/mvc/instance-bloc.js
@@ -0,0 +1,12 @@
+function MInstanceBloc(mBloc) {
+ makeUid(this);
+ makeField(this, 'mBloc', mBloc);
+ makeField(this, 'dansDéfinition', null);
+}
+
+function VInstanceBloc(mInstanceBloc, emplacement) {
+ makeView(this, 'vInstanceBloc', emplacement, 'vBloc');
+ this.vBloc = new VBloc(mInstanceBloc.mBloc(), this.parties.vBloc, mInstanceBloc);
+
+ this.vue.draggable().resizable();
+}
+\ No newline at end of file
diff --git a/jside4/mvc/instance-bloc.js~ b/jside4/mvc/instance-bloc.js~
@@ -0,0 +1,11 @@
+function MInstanceBloc(mBloc) {
+ makeUid(this);
+ makeField(this, 'mBloc', mBloc);
+}
+
+function VInstanceBloc(mInstanceBloc, emplacement) {
+ makeView(this, 'vInstanceBloc', emplacement, 'vBloc');
+ new VBloc(mInstanceBloc.mBloc(), this.parties.vBloc, mInstanceBloc);
+
+ this.vue.draggable().resizable();
+}
+\ No newline at end of file
diff --git a/jside4/mvc/instance-connexion.js b/jside4/mvc/instance-connexion.js
@@ -0,0 +1,53 @@
+function MVInstanceConnexion(mConnexion, vPortA, vPortB) {
+ makeUid(this);
+ makeField(this, 'mConnexion', mConnexion);
+ makeField(this, 'vPortA', vPortA);
+ makeField(this, 'vPortB', vPortB);
+}
+
+function VInstanceConnexion(mvInstanceConnexion, emplacement) {
+ makeView(this, 'vConnexion', emplacement, 'vSegment1', 'vSegment2', 'vSegment3');
+
+ var that = this;
+
+ // Actions
+ this.vueNormale = function() {
+ var _de = mvInstanceConnexion.vPortA();
+ var _vers = mvInstanceConnexion.vPortB();
+ var de, vers;
+ if ($(_de).centerX() < $(_vers).centerX()) {
+ de = $(_de);
+ vers = $(_vers);
+ } else {
+ de = $(_vers);
+ vers = $(_de);
+ }
+
+ var segment1 = that.parties.vSegment1;
+ var segment2 = that.parties.vSegment2;
+ var segment3 = that.parties.vSegment3;
+
+ $(segment1)
+ .width((vers.centerX() - de.centerX()) / 2)
+ .position({my: 'left center', at: 'center', of: de});
+ $(segment3)
+ .width((vers.centerX() - de.centerX()) / 2)
+ .position({my: 'right center', at: 'center', of: vers});
+
+ var neg = segment3.centerY() - segment1.centerY();
+
+ $(segment2)
+ .height((neg > 0) ? segment3.bottomY() - segment1.topY() : segment1.bottomY() - segment3.topY())
+ .position({
+ my: (neg > 0) ? 'center top' : 'center bottom',
+ at: (neg > 0) ? 'right top' : 'right bottom',
+ of: (neg > 0) ? segment1 : segment1
+ });
+ }
+
+ // Binding
+ // onMove (dePort, versPort)
+
+ // Défauts
+ this.vueNormale();
+}
diff --git a/jside4/mvc/instance-connexion.js~ b/jside4/mvc/instance-connexion.js~
@@ -0,0 +1,16 @@
+function VInstanceConnexion(mConnexion, emplacement) {
+ makeView(this, 'vConnexion', emplacement, 'vSegment1', 'vSegment2', 'vSegment3');
+
+ var that = this;
+
+ // Actions
+ this.vueNormale = function() {
+
+ }
+
+ // Binding
+ // onMove (dePort, versPort)
+
+ // Défauts
+ this.vueNormale();
+}
diff --git a/jside4/mvc/liste-définitions.js b/jside4/mvc/liste-définitions.js
@@ -0,0 +1,5 @@
+function MListeDéfinitions() {
+ makeUid(this);
+ makeCollection(this, 'définitions');
+ makeCollection(this, 'tabsDéfinitions');
+}
+\ No newline at end of file
diff --git a/jside4/mvc/liste-ports.js b/jside4/mvc/liste-ports.js
@@ -0,0 +1,45 @@
+function MListePorts(estEntrée) {
+ makeUid(this);
+ this.estEntrée = estEntrée;
+ makeCollection(this, 'ports');
+}
+
+function VListePorts(mListePorts, emplacement) {
+ makeView(this, 'vListePorts', emplacement, 'vPorts', 'vNouveauPort');
+
+ this.cbClickPort = [];
+ var that = this;
+
+ // Actions
+ this.actionNouveauPort = function() {
+ mListePorts.addPorts(new MPort());
+ };
+
+ this.clickPort = function(mPort) {
+ singleton.portClickA.mListePorts = mListePorts;
+ faireCallbacks(that.cbClickPort, mPort);
+ };
+
+ this.ajoutPort = function(mListePorts, mPort) {
+ var vp = new VPort(mPort, that.parties.vPorts);
+ vp.onClick(that.clickPort);
+ };
+
+ this.vueNormale = function() {
+ }
+
+ // Binding
+ mListePorts.onAddPorts(this.ajoutPort);
+ for (var i = 0; i < mListePorts.ports.length; i++) {
+ this.ajoutPort(mListePorts, mListePorts.ports[i]);
+ }
+
+ this.parties.vNouveauPort.click(this.actionNouveauPort);
+
+ this.onClickPort = function(callback) {
+ that.cbClickPort.push(callback);
+ };
+
+ // Défauts
+ this.vueNormale();
+}
+\ No newline at end of file
diff --git a/jside4/mvc/liste-ports.js~ b/jside4/mvc/liste-ports.js~
@@ -0,0 +1,34 @@
+function MListePorts(estEntrée) {
+ makeUid(this);
+ this.estEntrée = estEntrée;
+ makeCollection(this, 'ports');
+}
+
+function VListePorts(mListePorts, emplacement) {
+ makeView(this, 'vListePorts', emplacement, 'vPorts', 'vNouveauPort');
+
+ var that = this;
+
+ // Actions
+ this.actionNouveauPort = function() {
+ mListePorts.addPorts(new MPort());
+ };
+
+ this.ajoutPort = function(mListePorts, mPort) {
+ new VPort(mPort, that.parties.vPorts);
+ };
+
+ this.vueNormale = function() {
+ }
+
+ // Binding
+ mListePorts.onAddPorts(this.ajoutPort);
+ for (var i = 0; i < mListePorts.ports.length; i++) {
+ this.ajoutPort(mListePorts, mListePorts.ports[i]);
+ }
+
+ this.parties.vNouveauPort.click(this.actionNouveauPort);
+
+ // Défauts
+ this.vueNormale();
+}
+\ No newline at end of file
diff --git a/jside4/mvc/monde.js b/jside4/mvc/monde.js
@@ -0,0 +1,7 @@
+function MMonde() {
+ makeUid(this);
+ makeCollection(this, 'mBlocs');
+ makeCollection(this, 'mLog'); // TODO
+ makeCollection(this, 'mLogs'); // TODO
+ makeCollection(this, 'mRecherches'); // TODO
+}
+\ No newline at end of file
diff --git a/jside4/mvc/port.js b/jside4/mvc/port.js
@@ -0,0 +1,22 @@
+function MPort(mListePorts) {
+ makeUid(this);
+ //makeField(this, 'connexionEntrante', null); // Oui mais… quand on a plusieurs définitions
+ //makeCollection(this, 'connexionsSortantes');
+}
+
+function VPort(mPort, emplacement) {
+ makeView(this, 'vPort', emplacement);
+
+ var that = this;
+
+ this.cbClick = [];
+
+ this.vue.click(function() {
+ singleton.portClickA.mPort = mPort;
+ faireCallbacks(that.cbClick, mPort);
+ });
+
+ this.onClick = function(callback) {
+ that.cbClick.push(callback);
+ };
+}
+\ No newline at end of file
diff --git a/jside4/mvc/port.js~ b/jside4/mvc/port.js~
@@ -0,0 +1,9 @@
+function MPort() {
+ makeUid(this);
+}
+
+function VPort(mPort, emplacement) {
+ makeView(this, 'vPort', emplacement);
+
+ var that = this;
+}
+\ No newline at end of file
diff --git a/jside4/mvc/tabs-définitions.js b/jside4/mvc/tabs-définitions.js
@@ -0,0 +1,91 @@
+function MVTabsDéfinitions(mListeDéfinitions) { // Modèle ou vue ???
+ makeUid(this);
+ this.mListeDéfinitions = mListeDéfinitions;
+ makeField(this, 'définitionActive', 0);
+}
+
+debugctr = 0;
+function VTitresTabsDéfinitions(mvTabsDéfinitions, emplacement) {
+ makeView(this, 'vTitresTabsDéfinitions', emplacement, 'vTitresTabs', 'vTitreAucuneDéfinition', 'vNouvelleDéfinition');
+
+ var listeVues = {};
+ var that = this;
+
+ // Actions
+ this.actionNouvelleDéfinition = function() {
+ mvTabsDéfinitions.mListeDéfinitions.addDéfinitions(new MDéfinition());
+ };
+
+ this.ajoutDéfinition = function(mListeDéfinitions, mDéfinition) {
+ var vtd = new VTitreDéfinition(mDéfinition.mTitreDéfinition(), that.parties.vTitresTabs);
+ mvTabsDéfinitions.définitionActive(mDéfinition);
+ vtd.vue.click(function(){ // TODO : pas propre, devrait être vtd.onClick().
+ mvTabsDéfinitions.définitionActive(mDéfinition);
+ })
+ listeVues[mDéfinition.uid] = vtd;
+ that.vueNormale();
+ };
+
+ this.switchDéfinition = function(_mvTabsDéfinitions, _définitionActive) {
+ for (var i in listeVues)
+ listeVues[i].active(i == mvTabsDéfinitions.définitionActive().uid);
+ };
+
+ this.vueNormale = function() {
+ if (mvTabsDéfinitions.mListeDéfinitions.définitions.length == 0) {
+ that.parties.vTitreAucuneDéfinition.show();
+ } else {
+ that.parties.vTitreAucuneDéfinition.hide();
+ }
+ that.switchDéfinition();
+ };
+
+ // Binding
+ mvTabsDéfinitions.mListeDéfinitions.onAddDéfinitions(this.ajoutDéfinition);
+ var mld = mvTabsDéfinitions.mListeDéfinitions;
+ for (var i = 0; i < mld.définitions.length; i++) {
+ this.ajoutDéfinition(mld, mld.définitions[i]);
+ }
+
+ mvTabsDéfinitions.onChangeDéfinitionActive(this.switchDéfinition);
+
+ this.parties.vNouvelleDéfinition.click(this.actionNouvelleDéfinition);
+
+ // Défauts
+ this.vueNormale();
+}
+
+function VContenusTabsDéfinitions(mvTabsDéfinitions, emplacement) {
+ makeView(this, 'vContenusTabsDéfinitions', emplacement, 'vContenusTabs', 'vContenuAucuneDéfinition');
+
+ var listeVues = {};
+ var that = this;
+
+ // Actions
+ this.ajoutDéfinition = function(mListeDéfinitions, mDéfinition) {
+ var vd = new VDéfinition(mDéfinition, that.parties.vContenusTabs);
+ listeVues[mDéfinition.uid] = vd;
+ that.vueNormale();
+ };
+
+ this.switchDéfinition = function(_mvTabsDéfinitions, _définitionActive) {
+ for (var i in listeVues)
+ listeVues[i].visible(i == mvTabsDéfinitions.définitionActive().uid);
+ };
+
+ this.vueNormale = function() {
+ if (mvTabsDéfinitions.mListeDéfinitions.définitions.length == 0) {
+ that.parties.vContenuAucuneDéfinition.show();
+ } else {
+ that.parties.vContenuAucuneDéfinition.hide();
+ }
+ that.switchDéfinition();
+ };
+
+ // Binding
+ mvTabsDéfinitions.mListeDéfinitions.onAddDéfinitions(this.ajoutDéfinition);
+ mvTabsDéfinitions.onChangeDéfinitionActive(this.switchDéfinition);
+
+ // Défauts
+ this.vueNormale();
+}
+\ No newline at end of file
diff --git a/jside4/mvc/tabs-définitions.js~ b/jside4/mvc/tabs-définitions.js~
@@ -0,0 +1,91 @@
+function MVTabsDéfinitions(mListeDéfinitions) { // Modèle ou vue ???
+ makeUid(this);
+ this.mListeDéfinitions = mListeDéfinitions;
+ makeField(this, 'définitionActive', 0);
+}
+
+debugctr = 0;
+function VTitresTabsDéfinitions(mvTabsDéfinitions, emplacement) {
+ makeView(this, 'vTitresTabsDéfinitions', emplacement, 'vTitresTabs', 'vTitreAucuneDéfinition', 'vNouvelleDéfinition');
+
+ var listeVues = {};
+ var that = this;
+
+ // Actions
+ this.actionNouvelleDéfinition = function() {
+ mvTabsDéfinitions.mListeDéfinitions.addDéfinitions(new MDéfinition());
+ };
+
+ this.ajoutDéfinition = function(mListeDéfinitions, mDéfinition) {
+ var vtd = new VTitreDéfinition(mDéfinition.mTitreDéfinition(), that.parties.vTitresTabs);
+ mvTabsDéfinitions.définitionActive(mDéfinition.uid);
+ vtd.vue.click(function(){ // TODO : pas propre, devrait être vtd.onClick().
+ mvTabsDéfinitions.définitionActive(mDéfinition.uid);
+ })
+ listeVues[mDéfinition.uid] = vtd;
+ that.vueNormale();
+ };
+
+ this.switchDéfinition = function(_mvTabsDéfinitions, _définitionActive) {
+ for (var i in listeVues)
+ listeVues[i].active(i == mvTabsDéfinitions.définitionActive());
+ };
+
+ this.vueNormale = function() {
+ if (mvTabsDéfinitions.mListeDéfinitions.définitions.length == 0) {
+ that.parties.vTitreAucuneDéfinition.show();
+ } else {
+ that.parties.vTitreAucuneDéfinition.hide();
+ }
+ that.switchDéfinition();
+ };
+
+ // Binding
+ mvTabsDéfinitions.mListeDéfinitions.onAddDéfinitions(this.ajoutDéfinition);
+ var mld = mvTabsDéfinitions.mListeDéfinitions;
+ for (var i = 0; i < mld.définitions.length; i++) {
+ this.ajoutDéfinition(mld, mld.définitions[i]);
+ }
+
+ mvTabsDéfinitions.onChangeDéfinitionActive(this.switchDéfinition);
+
+ this.parties.vNouvelleDéfinition.click(this.actionNouvelleDéfinition);
+
+ // Défauts
+ this.vueNormale();
+}
+
+function VContenusTabsDéfinitions(mvTabsDéfinitions, emplacement) {
+ makeView(this, 'vContenusTabsDéfinitions', emplacement, 'vContenusTabs', 'vContenuAucuneDéfinition');
+
+ var listeVues = {};
+ var that = this;
+
+ // Actions
+ this.ajoutDéfinition = function(mListeDéfinitions, mDéfinition) {
+ var vd = new VDéfinition(mDéfinition, that.parties.vContenusTabs);
+ listeVues[mDéfinition.uid] = vd;
+ that.vueNormale();
+ };
+
+ this.switchDéfinition = function(_mvTabsDéfinitions, _définitionActive) {
+ for (var i in listeVues)
+ listeVues[i].visible(i == mvTabsDéfinitions.définitionActive());
+ };
+
+ this.vueNormale = function() {
+ if (mvTabsDéfinitions.mListeDéfinitions.définitions.length == 0) {
+ that.parties.vContenuAucuneDéfinition.show();
+ } else {
+ that.parties.vContenuAucuneDéfinition.hide();
+ }
+ that.switchDéfinition();
+ };
+
+ // Binding
+ mvTabsDéfinitions.mListeDéfinitions.onAddDéfinitions(this.ajoutDéfinition);
+ mvTabsDéfinitions.onChangeDéfinitionActive(this.switchDéfinition);
+
+ // Défauts
+ this.vueNormale();
+}
+\ No newline at end of file
diff --git a/jside4/mvc/titre-bloc.js b/jside4/mvc/titre-bloc.js
@@ -0,0 +1,52 @@
+function MTitreBloc() {
+ makeUid(this);
+ makeField(this, 'titre', 'Nom du Bloc');
+}
+
+function VTitreBloc(mTitreBloc, emplacement) {
+ makeView(this, 'vTitreBloc', emplacement, 'vTitre', 'vÉdition', 'vTexte', 'vSubmit', 'vCancel');
+
+ var that = this;
+
+ // Actions
+ this.updateTitreBloc = function(mTitreBloc, titre) {
+ that.parties.vTitre.text(titre);
+ that.parties.vTexte.val(titre);
+ };
+
+ this.editerTitreBloc = function() {
+ that.parties.vTitre.hide();
+ that.parties.vÉdition.show();
+ };
+
+ this.accepteÉditionTitreBloc = function() {
+ mTitreBloc.titre(that.parties.vTexte.val());
+ that.vueNormale();
+ };
+
+ this.anuleÉditionTitreBloc = function() {
+ that.parties.vTexte.val(mTitreBloc.titre());
+ that.vueNormale();
+ };
+
+ this.vueNormale = function() {
+ that.parties.vTitre.show();
+ that.parties.vÉdition.hide();
+ };
+
+ // Binding
+ mTitreBloc.onChangeTitre(this.updateTitreBloc);
+ this.updateTitreBloc(mTitreBloc, mTitreBloc.titre());
+
+ that.parties.vTitre.dblclick(this.editerTitreBloc);
+
+ that.parties.vCancel.click(this.anuleÉditionTitreBloc);
+
+ that.parties.vÉdition.submit(function(e) {
+ that.accepteÉditionTitreBloc();
+ return false;
+ });
+
+ // Défauts
+ this.vueNormale();
+}
+\ No newline at end of file
diff --git a/jside4/mvc/titre-définition.js b/jside4/mvc/titre-définition.js
@@ -0,0 +1,57 @@
+function MTitreDéfinition() {
+ makeUid(this);
+ makeField(this, 'titre', 'Nom de la définition');
+}
+
+function VTitreDéfinition(mTitreDéfinition, emplacement) {
+ makeView(this, 'vTitreDéfinition', emplacement, 'vTitre', 'vÉdition', 'vTexte', 'vSubmit', 'vCancel');
+
+ var that = this;
+
+ // Actions
+ this.updateTitreDéfinition = function(mTitreDéfinition, titre) {
+ that.parties.vTitre.text(titre);
+ that.parties.vTexte.val(titre);
+ };
+
+ this.editerTitreDéfinition = function() {
+ that.parties.vTitre.hide();
+ that.parties.vÉdition.show();
+ };
+
+ this.accepteÉditionTitreDéfinition = function() {
+ mTitreDéfinition.titre(that.parties.vTexte.val());
+ that.vueNormale();
+ };
+
+ this.anuleÉditionTitreDéfinition = function() {
+ that.parties.vTexte.val(mTitreDéfinition.titre());
+ that.vueNormale();
+ };
+
+ this.vueNormale = function() {
+ that.parties.vTitre.show();
+ that.parties.vÉdition.hide();
+ };
+
+ this.active = function(val) {
+ if (val) that.vue.addClass('active');
+ else that.vue.removeClass('active');
+ };
+
+ // Binding
+ mTitreDéfinition.onChangeTitre(this.updateTitreDéfinition);
+ this.updateTitreDéfinition(mTitreDéfinition, mTitreDéfinition.titre());
+
+ that.parties.vTitre.dblclick(this.editerTitreDéfinition);
+
+ that.parties.vCancel.click(this.anuleÉditionTitreDéfinition);
+
+ that.parties.vÉdition.submit(function(e) {
+ that.accepteÉditionTitreDéfinition();
+ return false;
+ });
+
+ // Défauts
+ this.vueNormale();
+}
+\ No newline at end of file
diff --git a/jside4/mvc/titre-définition.js~ b/jside4/mvc/titre-définition.js~
@@ -0,0 +1,52 @@
+function MTitreDéfinition() {
+ makeUid(this);
+ makeField(this, 'titre', 'Nom de la définition');
+}
+
+function VTitreDéfinition(mTitreDéfinition, emplacement) {
+ makeView(this, 'vTitreDéfinition', emplacement, 'vTitre', 'vÉdition', 'vTexte', 'vSubmit', 'vCancel');
+
+ var that = this;
+
+ // Actions
+ this.updateTitreDéfinition = function(mTitreDéfinition, titre) {
+ that.parties.vTitre.text(titre);
+ that.parties.vTexte.val(titre);
+ };
+
+ this.editerTitreDéfinition = function() {
+ that.parties.vTitre.hide();
+ that.parties.vÉdition.show();
+ };
+
+ this.accepteÉditionTitreDéfinition = function() {
+ mTitreDéfinition.titre(that.parties.vTexte.val());
+ that.vueNormale();
+ };
+
+ this.anuleÉditionTitreDéfinition = function() {
+ that.parties.vTexte.val(mTitreDéfinition.titre());
+ that.vueNormale();
+ };
+
+ this.vueNormale = function() {
+ that.parties.vTitre.show();
+ that.parties.vÉdition.hide();
+ };
+
+ // Binding
+ mTitreDéfinition.onChangeTitre(this.updateTitreDéfinition);
+ this.updateTitreDéfinition(mTitreDéfinition, mTitreDéfinition.titre());
+
+ that.parties.vTitre.dblclick(this.editerTitreDéfinition);
+
+ that.parties.vCancel.click(this.anuleÉditionTitreDéfinition);
+
+ that.parties.vÉdition.submit(function(e) {
+ that.accepteÉditionTitreDéfinition();
+ return false;
+ });
+
+ // Défauts
+ this.vueNormale();
+}
+\ No newline at end of file
diff --git a/jside4/singleton.js b/jside4/singleton.js
@@ -0,0 +1,14 @@
+singleton = (function() {
+ var s = { uid: 0 };
+ return {
+ uid: function () {
+ return s.uid++;
+ },
+ portClickA: {},
+ portClickB: null
+ };
+})();
+
+function makeUid(obj) {
+ obj.uid = singleton.uid();
+}
+\ No newline at end of file
diff --git a/jside4/singleton.js~ b/jside4/singleton.js~
@@ -0,0 +1,12 @@
+singleton = (function() {
+ var s = { uid: 0 };
+ return {
+ uid: function () {
+ return s.uid++;
+ }
+ };
+})();
+
+function makeUid(obj) {
+ obj.uid = singleton.uid();
+}
+\ No newline at end of file
diff --git a/jside4/style2.css b/jside4/style2.css
@@ -0,0 +1,39 @@
+.active {
+ color: gray;
+}
+
+.instance-bloc.main {
+ position: absolute;
+ top: 30%;
+ left: 40%;
+ width: 30%;
+ height: 40%;
+ border: thin solid blue;
+}
+
+.instance-bloc.contenu {
+ height: 100%;
+ width: 100%;
+}
+
+.vBloc.main {
+ width:100%;
+ height:100%;
+}
+
+.port {
+ display: inline-block;
+ background-color: lightblue;
+ border: thin solid blue;
+ width: 10px;
+ height: 10px;
+}
+
+.lien {
+ background-color: lightblue;
+ position: absolute;
+ top: -10px;
+ left: -10px;
+ width: 5px;
+ height: 5px;
+}
+\ No newline at end of file
diff --git a/jside4/style2.css~ b/jside4/style2.css~
@@ -0,0 +1,37 @@
+.active {
+ color: gray;
+}
+
+.instance-bloc.main {
+ position: absolute;
+ top: 30%;
+ left: 40%;
+ width: 30%;
+ height: 40%;
+ border: thin solid blue;
+}
+
+.instance-bloc.contenu {
+ height: 100%;
+ width: 100%;
+}
+
+.vBloc.main {
+ width:100%;
+ height:100%;
+}
+
+.port {
+ display: inline-block;
+ background-color: lightblue;
+ border: thin solid blue;
+ width: 10px;
+ height: 10px;
+}
+
+.lien {
+ background-color: lightblue;
+ position: absolute;
+ width: 10px;
+ height: 10px;
+}
+\ No newline at end of file
diff --git a/jside4/test.js b/jside4/test.js
@@ -1,10 +1,19 @@
-function testlog(m, count) {
- m.log.envoiMessage('Coucou !');
- var fdemo = function() {
- m.log.envoiMessage('Pioute !');
- if (--count > 0)
- window.setTimeout(fdemo, 100);
- }
- window.setTimeout(fdemo, 1000);
-}
+$(function() {
+ var mFibo = new MBloc();
+ var iFibo = new MInstanceBloc(mFibo);
+ var vFibo = new VInstanceBloc(iFibo, $('#éditeur'));
+ var mDéfinitionFibo = new MDéfinition();
+ mFibo.mListeDéfinitions().addDéfinitions(mDéfinitionFibo);
+
+ var mMoinsUn = new MBloc();
+ mDéfinitionFibo.addInstancesBlocs(new MInstanceBloc(mMoinsUn));
+
+ var mUn = new MBloc();
+ mDéfinitionFibo.addInstancesBlocs(new MInstanceBloc(mUn));
+
+ window.setTimeout(function() {
+ /*var mvic = new MVInstanceConnexion(null, vib.vue, vib2.vue); */
+ /*new VInstanceConnexion(mvic, $('#éditeur')); */
+ }, 2000);
+});
+\ No newline at end of file
diff --git a/jside4/vues.js b/jside4/vues.js
@@ -0,0 +1,20 @@
+function makeView(obj, type, emplacement) {
+ obj.vue = $('#vues > .' + type).clone().appendTo(emplacement);
+
+ //Debug
+ if (obj.vue.size() == 0) {
+ console.log("Warning! Couldn't append template #vues > ." + type + " to", emplacement);
+ }
+
+ var parties = $.makeArray(arguments);
+ obj.parties = {};
+ for (var i = 3; i < parties.length; i++) {
+ obj.parties[parties[i]] = obj.vue.find('.' + parties[i]);
+
+ // Debug
+ if (obj.parties[parties[i]].size() == 0) {
+ console.log("Warning! Couldn't find part", i, parties[i], "for", type, obj, ". obj is in debugPart.");
+ debugPart = obj;
+ }
+ }
+}