<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>.: chiroux.com :. &#187; vista</title>
	<atom:link href="http://www.chiroux.com/tag/vista/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.chiroux.com</link>
	<description></description>
	<lastBuildDate>Fri, 09 Oct 2009 21:47:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Un gadget Vista pour la NeufBox 4</title>
		<link>http://www.chiroux.com/un-gadget-vista-pour-la-neufbox-4/</link>
		<comments>http://www.chiroux.com/un-gadget-vista-pour-la-neufbox-4/#comments</comments>
		<pubDate>Tue, 07 Aug 2007 15:17:54 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[neufbox]]></category>
		<category><![CDATA[vista]]></category>
		<category><![CDATA[widget]]></category>

		<guid isPermaLink="false">http://www.chiroux.com/article-1186499874.html</guid>
		<description><![CDATA[<p>C&#8217;est l&#8217;été, mais il fait moche, alors que faire a part un peu de code par ci par là&#8230;
Voici donc un petit gadget windows vista qui permet d&#8217;interroger la NB4 de neuf et d&#8217;afficher les états dans notre barre vista.
L&#8217;article explique comment ce gadget est codé et comment on interroge la NB4.
Bon ce n&#8217;est donc [...]]]></description>
			<content:encoded><![CDATA[<p>C&#8217;est l&#8217;été, mais il fait moche, alors que faire a part un peu de code par ci par là&#8230;<br />
Voici donc un petit gadget windows vista qui permet d&#8217;interroger la NB4 de neuf et d&#8217;afficher les états dans notre barre vista.<br />
L&#8217;article explique comment ce gadget est codé et comment on interroge la NB4.<br />
Bon ce n&#8217;est donc pas encore aujourd&#8217;hui que je pourrais écrire mon premier article sur une application django, mais j&#8217;y travaille&#8230;<br />
Peut être avant mes vacances, peut-être pas, nous verrons bien.</p>
<p>Neuf, avec la NB4, propose un routeur évolué et ouvert. Une petite API permet notamment d&#8217;interroger la NB4 et de récupérer les valeurs de différents paramètres en temps réél. Il n&#8217;y avait qu&#8217;un petit pas à franchir pour l&#8217;utiliser et afficher ces paramètres directement dans notre PC.</p>
<p><span id="more-24"></span></p>
<span id="Un_gadget_Vista"><h1>Un gadget Vista</h1></span>
<p>Etant sous vista sur mon PC &#8216;principal&#8217; (celui sur lequel je joue..), c&#8217;est tout naturellement que je me suis orienté sur cette plate-forme pour faire ce gadget. (Je vous rassure, tous mes autres PC sont sous linux <img src='http://www.chiroux.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Il doit être possible avec un minimum d&#8217;adaptation de le faire fonctionner sous mac ou sous d&#8217;autres outils style konfabulator (Yahoo widgets). Nous verrons cela peut-être dans une prochaine version.</p>
<p><a href="#Telechargement">[Je suis curieux mais paresseux et je voudrais tester tout de suite : envoyez moi directement au téléchargement]</a></p>
<span id="Sinon_un_gadget_vista_c8217est_quoi_"><h1>Sinon un gadget vista, c&#8217;est quoi ?</h1></span>
<p>Construire un gadget vista c&#8217;est assez simple : il suffit de placer les bons fichiers dans un répertoire.<br />
Les tutos officiels se trouvent ici :  <a href="http://gallery.live.com/devcenter.aspx#Dev_8" target="_blank">http://gallery.live.com/devcenter.aspx</a></p>
<p>il nous faut donc au minimum :</p>
<ul>
<li> un fichier gadget.xml, dans lequel nous allons décrire notre gadget</li>
<li> un fichier html, dont le nom est décrit dans le xml ci-dessus</li>
<li> un fichier d&#8217;icône (optionnel)</li>
<li>un css si on veut que ce soit joli</li>
</ul>
<span id="Le_Gadget_NB4"><h1>Le Gadget NB4</h1></span>
<span id="Les_fonctionnalits"><h2>Les fonctionnalités</h2></span>
<p>A ce jour, dans la version de dev actuelle, le gadget permet d&#8217;afficher deux type d&#8217;informations :</p>
<ul>
<li> des infos de type booléennes (on/off, oui/non, etc&#8230;) sous la forme (par défaut dans l&#8217;exemple) d&#8217;un petit feu rouge ou vert (mais vous pouvez mettre les graphismes que vous souhaitez)</li>
<li> des infos &#8216;historiques&#8217; (un graphique historique) basé sur des valeurs numériques retournées par la NB4</li>
</ul>
<p>Dans l&#8217;exemple, le gadget va chercher le status du lien DSL, le status du PPP, le status du wifi, ainsi que l&#8217;évolution du rapport signal/bruit de votre ligne :</p>
<p><img class="alignnone size-full wp-image-89" title="NB4_gadget_undocked" src="http://www.chiroux.com/wp-content/uploads/Import/Dev/NB4_gadget_undocked.JPG" alt="NB4_gadget_undocked" width="183" height="114" /></p>
<p>(Oui, il est moche, je sais, mais je suis assez nul en design et graphisme, je laisse ça aux spécialiste&#8230; le but est avant tout de démontrer la faisabilité de ce gadget. Si vous vous sentez l&#8217;âme d&#8217;un artiste, n&#8217;hésitez surtout pas <img src='http://www.chiroux.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<span id="Etat_du_dveloppement"><h2>Etat du développement</h2></span>
<p><strong><span style="color: #ff0000;">Le gadget est encore loin d&#8217;être terminé</span></strong>. Il manque tout particulièrement les écrans d&#8217;options qui permettrait à l&#8217;utilisateur lambda de choisir parmi une liste de paramètre ceux qu&#8217;il souhaite monitorer.<br />
Il faut pour cela construire les écrans de settins du gadget (ce qui n&#8217;est pas très compliqué en soit), mais également rendre plus générique un certain nombre d&#8217;éléments (comme les images on/off par exemple).<br />
J&#8217;ai souhaité quand même publier cet article avec ce qui avait déjà était fait, cela permettra aux plus bidouilleurs d&#8217;entre vous de continuer ou de partir sur d&#8217;autres orientations. Les grands principes sont là en tout cas.</p>
<span id="Comment_c8217est_fait_"><h2>Comment c&#8217;est fait ?</h2></span>
<p>Comme d&#8217;habitude, j&#8217;utilise  <a href="http://mootools.net/" target="_blank">mootools </a> comme librairie javascript, elle va notamment nous servir à réaliser les appels asynchrone vers la NB4 et récupérer les résultat à afficher.</p>
<p>Regardons maintenant un peu le contenu des fichiers :</p>
<span id="gadget.xml"><h3>gadget.xml</h3></span>
<p>Pas grand chose à dire sur ce fichier, on doit y updader le numéro de version, pointer sur le bon fichier d&#8217;icône et le bon fichier html. Les tutos microsofts sont assez clairs sur les contenus possible de ce fichier.</p>
<pre>
<pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
&lt;gadget&gt;
    &lt;name&gt;Neuf Box 4 DEV&lt;/name&gt;
    &lt;namespace&gt;neuf.fr&lt;/namespace&gt;
    &lt;version&gt;0.9.2&lt;/version&gt;
    &lt;author name=&quot;Thomas Chiroux&quot;&gt;
        &lt;info url=&quot;www.chiroux.com&quot; /&gt;
    &lt;/author&gt;
    &lt;copyright&gt;2007&lt;/copyright&gt;
    &lt;description&gt;Etat de la NeufBox&lt;/description&gt;
    &lt;icons&gt;
     &lt;icon height=&quot;128&quot; width=&quot;69&quot; src=&quot;icon_dev.png&quot; /&gt;
   &lt;/icons&gt;
    &lt;hosts&gt;
        &lt;host name=&quot;sidebar&quot;&gt;
            &lt;base type=&quot;HTML&quot; apiVersion=&quot;1.0.0&quot; src=&quot;NB4.html&quot; /&gt;
            &lt;permissions&gt;full&lt;/permissions&gt;
            &lt;platform minPlatformVersion=&quot;0.1&quot; /&gt;
        &lt;/host&gt;
    &lt;/hosts&gt;
&lt;/gadget&gt;
</pre>
</pre>
<span id="NB4.html"><h3>NB4.html</h3></span>
<p>C&#8217;est le fichier html qui est appelé par le moteur de gadget de vista et qui est rendu à l&#8217;écran. Il est lui aussi assez simple, car tout se fera dans le javascript.<br />
Dans le fichier html, il faut placer les div des éléments qu&#8217;on souhaite afficher, dans l&#8217;ordre qu&#8217;on souhaite :</p>
<pre>
<pre class="brush: xml;">
		&lt;div id=&quot;ADSLStatus&quot; class=&quot;NB4OnOff&quot;&gt; &lt;/div&gt;
        &lt;div id=&quot;PPPStatus&quot; class=&quot;NB4OnOff&quot;&gt; &lt;/div&gt;
        &lt;div id=&quot;WlanStatus&quot; class=&quot;NB4OnOff&quot;&gt; &lt;/div&gt;
        &lt;div id=&quot;HistoGraphSNR&quot;&gt;&lt;div id=&quot;SNRValue&quot;&gt;  &lt;/div&gt;&lt;/div&gt;
</pre>
</pre>
<p>Nous avons donc ici 4 éléments : 3 éléments de type &#8216;NB4OnOff&#8217; et un élément de type &#8216;Histo&#8217;.</p>
<span id="NB4.js"><h3>NB4.js</h3></span>
<p>C&#8217;est le fichier le plus important et c&#8217;est là que tout est fait aujourd&#8217;hui. Il est importé par NB4.html, juste après <a href="http://mootools.net/" target="_blank">mootools</a>.</p>
<p>Il est en gros composé de 2 parties :</p>
<ul>
<li>la définition des 2 classes (NB4OnOffClass et NB4HistoGraphClass) actuellement disponibles. Ces classes sont indépendantes de la structure &#8216;gadget&#8217; et pourraient être réutilisée dans d&#8217;autres contextes</li>
<li>le code javascript qui permet de gérer le gadget, notamment son initialisation</li>
</ul>
<p>Passons d&#8217;abord sur le code &#8217;spécial gadget&#8217; et sur l&#8217;initialisation. Les plus courageux pourront ensuite creuser le code des classes :</p>
<p>NB4.html, au chargement de la page, commence par lancer initGadget() :</p>
<p>initGadget() fait 2 choses :<br />
Initialiser la gestion des évènements lié à la mise en dock (la barre de gadget) et à l&#8217;opération inverse (le dé-dockage ?) :</p>
<pre>
<pre class="brush: jscript;">
function initGadget() {
    // variables globales
    if (!DEBUG_BOUCHON)
      gDockFlag = System.Gadget.docked;
    gAjaxWorking = 0;

    // Initialise les évènements de Dock et UnDock
    if (!DEBUG_BOUCHON) {
      System.Gadget.onUndock = procUndockEvent;
      System.Gadget.onDock = procDockEvent;
    }
</pre>
</pre>
<p>Donc ici, si le gadget revient dans sa barre, la fonction &#8216;procDockEvent&#8217; sera exécutée et si il en sort, c&#8217;est la fonction &#8216;procUndockEvent&#8217; qui le sera. Le principe et le fonctionnement de ces fonctions est assez bien décrit dans les exemples de microsoft. En gros elles s&#8217;occupent de redimentionner la fenêtre d&#8217;affichage pour que tout soit parfaitement affiché).</p>
<p>(ne vous préoccupez pas pour l&#8217;instant du &#8216;DEBUG-BOUCHON&#8217;, on en parlera dans la partie plus détaillée sur le développement)</p>
<p>Ensuite et c&#8217;est le plus important, cette fonction initalise les objets d&#8217;interrogations de la NB4 :</p>
<pre>
<pre class="brush: jscript;">
    objADSLStatus = new NB4OnOffClass('adsl_status', 'ADSLStatus', 'NB4_ADSL_On.png', 'NB4_ADSL_Off.png',5000);
    objPPPStatus = new NB4OnOffClass('ppp_status', 'PPPStatus', 'NB4_PPP_On.png', 'NB4_PPP_Off.png',5000);
    objWlanStatus = new NB4OnOffClass('wlan_active', 'WlanStatus', 'NB4_WIFI_On.png', 'NB4_WIFI_Off.png',5000);
    objSNRValue = new NB4HistoGraphClass('adsl_noise_down', 'SNRValue', 'SNR', 32, 'barre.gif', 10000);
</pre>
</pre>
<p>Pour le &#8217;simple&#8217; utilisateur, c&#8217;est tout, il n&#8217;y a rien d&#8217;autre à faire que de changer ces valeurs. (plus tard, dans une version ultérieure, il y aura des écrans de paramétrages pour éviter d&#8217;avoir à toucher le code).</p>
<p>Prenons la première ligne et détaillons les paramètres :</p>
<ul>
<li>le premier (&#8216;adsl_status&#8217;) est le nom du paramètre de la NB4. Attention il doit être exact, sinon la NB4 ne renvoie rien (plus exactement, elle renvoie &#8216;=&#8217;)</li>
<li>le second (&#8216;ADSLStatus&#8217;) est l&#8217;ID du &lt;div&gt; dans le code html qui va afficher le contenu</li>
<li>les troisième et quatrièmes (&#8216;NB4_ADSL_On.png&#8217;, &#8216;NB4_ADSL_Off.png&#8217;) sont les images à afficher (qui s&#8217;afficheront dans le div ci-dessus) lorsque les valeurs récupérées sont respectivement on ou off (ou up ou down, etc..)</li>
<li>le cinquième et dernier (5000) est la fréquence de rafraichissement (en ms) : ici il est paramétré à 5s, donc cet objet ira interroger la NB4 toute les 5 secondes.</li>
</ul>
<p>Donc si vous voulez interroger un autre paramètre de type &#8216;On/off&#8217; dans la NB4, il faut changer une de ces valeurs par une autre et si vous voulez le faire clean, il faut adapter le nom de l&#8217;objet et celui du div dans le code html en fonction du paramètre choisi.</p>
<span id="Les_deux_classes_de_monitoring"><h3>Les deux classes de monitoring</h3></span>
<p>Ces deux classes sont construites sur des principes communs :</p>
<ol>
<li>initalisation des paramètres</li>
<li>gestion d&#8217;un timer pour les interrogations régulières</li>
<li>appel de la fonction de la neufBox en AJAX (en utilisant les fonctions de mootools)</li>
<li>récupération et traitement du résultat</li>
<li>Mise à jour de l&#8217;affichage du gadget en fonction du résultat obtenu</li>
</ol>
<span id="NB4OnOffClass"><h3>NB4OnOffClass</h3></span>
<p>Cette classe est la plus simple, son objectif est de récupérer une valeur de type &#8216;on&#8217; ou &#8216;up&#8217;  ou encore &#8216;off&#8217; ou &#8216;down&#8217; venant de la NB4 et d&#8217;afficher l&#8217;image correspondante.</p>
<span id="L8217initialisation_:"><h4>L&#8217;initialisation :</h4></span>
<p>D&#8217;abord on va initaliser les variables de la classe avec des valeurs par défaut :</p>
<pre>
<pre class="brush: jscript;">
var NB4OnOffClass = new Class({
  c_parameterName : null,
  c_elementName : null,
  c_onOff : 0, // OFF par défaut
  c_oldOnOff : -1, // la valeur précédent du test onOff (au début -1 pour initialiser)
  c_imageON : null,
  c_imageOFF : null,
  c_time : 0,
  c_intervalTime : 0,
  c_timer : null,
  c_stoptimer : 0,
  c_urlNB4 : null,
</pre>
</pre>
<p>Voici ensuite le constructeur : il est appelé lors de l&#8217;instanciation de la classe :<br />
il va prendre les paramètres que l&#8217;on a choisi :</p>
<pre>
<pre class="brush: jscript;">initialize: function(parameterName, elementName, imageON, imageOFF, delais){  // Contructeur</pre>
</pre>
<p>, les stocker au sein de la classe :</p>
<pre>
<pre class="brush: jscript;">
this.c_parameterName = parameterName;
    this.c_elementName = elementName;
    this.c_imageON = 'images/' + imageON;
    this.c_imageOFF = 'images/' + imageOFF;
    this.c_intervalTime = delais; // durée de rafraichissement
    var date = new Date();
    this.c_time = date.getTime();
    if (DEBUG_BOUCHON)
      this.c_urlNB4 = DEBUG_URL;
     else
      this.c_urlNB4 = 'http://192.168.1.1/kit/get'; // ici on met la valeur en dur car elle sera a terme stockée dans les params du gadget
</pre>
</pre>
<p>et lancer une première mise à jour :</p>
<pre>
<pre class="brush: jscript;">
    // Aller chercher la valeur dans la NB4
    this.Update();
    }
</pre>
</pre>
<span id="update_des_donnes"><h4>update des données</h4></span>
<p>La fonction update fait 3 choses :</p>
<ul>
<li>Affiche la petite icône typique des appels ajax dans le coin du gadget</li>
<li>Remet à zéro le timer</li>
<li>Lance l&#8217;appel AJAX (en méthode POST, avec en paramètre la valeur cherchée et en forçant l&#8217;encodage à vide (en utf-8 la NB4 ne renvoie rien)</li>
</ul>
<p>Dans l&#8217;appel AJAX, nous avons définit la fonction de call back qui sera appelée lors du retour de la valeur (l&#8217;appel est asynchrone) : onComplete: this.callbackAjaxok.bind(this)<br />
C&#8217;est donc la fonction callbackAjaxok de cette classe qui sera lancée au retour de la NB4</p>
<pre>
<pre class="brush: jscript;">
    Update: function() {
      gAjaxWorking += 1;
      $('AjaxIndicator').style.display = 'block';
        var date = new Date();
      this.c_time= date.getTime();
    new Ajax(this.c_urlNB4,{data:'name='+this.c_parameterName, onComplete: this.callbackAjaxok.bind(this), method: 'post', encoding: ''}).request();
  },
</pre>
</pre>
<span id="Retour_des_infos_de_l8217IAD_:_callbackAjaxok"><h4>Retour des infos de l&#8217;IAD : callbackAjaxok</h4></span>
<p>Cette fonction est donc appelé au retour OK, je laisse mootols gérer les cas d&#8217;erreur : dans notre gadget si il y a des erreurs, rien ne sera affiché.</p>
<p>Dans l&#8217;ordre cette fonction fait les choses suivantes :</p>
<ul>
<li>stoppe l&#8217;affichage de la petit icône &#8216;appel ajax en cours&#8217;</li>
<li>récupère la valeur de retour et positionne le status de la classe en fonction de ce retour</li>
<li>si la valeur a changé depuis la dernière fois, réaffiche l&#8217;image dans le gadget en fonction de la nouvelle valeur</li>
<li>vérifie le temps écoulé et prépare le prochain update : soit immédiatement si l&#8217;intervalle de temps est déjà écoulée, soit plus tard (via la fonction delay) si le temps n&#8217;est pas encore écoulé. L&#8217;appel à update refait une boucle et ainsi de suite.</li>
</ul>
<pre>
<pre class="brush: jscript;">
  callbackAjaxok: function(obj) {
    // ici récupère la valeur du paramètre on/off et le stocke dans c_onOff
    gAjaxWorking -= 1;
    if (gAjaxWorking==0) {
         $('AjaxIndicator').style.display = 'none';
      }

    if ($type(obj)=='string') {
      var lvalue = obj.split('=')[1].clean().toLowerCase();
      if (lvalue=='up' || lvalue=='on') {
        this.c_onOff=1;
      } else {
        this.c_onOff=0;
      }
      if (this.c_oldOnOff != this.c_onOff) {
          this.GetHTMLOutput();
      }
      this.c_oldOnOff = this.c_onOff;
    }
    if (!this.c_stoptimer) {
      var date = new Date();
      var currentIntervalTime = date.getTime() - this.c_time;
      if ( currentIntervalTime &lt; this.c_intervalTime) { // on a encore du temps : on attends
        this.c_timer = this.Update.delay(this.c_intervalTime-currentIntervalTime, this); // lance update au bout du délais restant
      } else { // on a dépassé l'heure : on repart directement pour un tour
        this.Update();
      }
    }
  }
</pre>
</pre>
<span id="l8217affichage_:_GetHTMLOutput"><h4>l&#8217;affichage : GetHTMLOutput</h4></span>
<p>Cette fonction prépare simplement le bon tag &lt;img&gt; en fonction de la valeur on ou off et l&#8217;affiche dans le div concerné :</p>
<pre>
<pre class="brush: jscript;">
  GetHTMLOutput: function() {
    // Affiche l'image dans le div de destination
    var lHTMLoutput = '&lt;img src=&quot;'; // &lt;p style=&quot;writing-mode: tb-rl; filter: flipH() flipV();&quot;&gt;TEST&lt;/p&gt;
    if (this.c_onOff==0) {
      lHTMLoutput += this.c_imageOFF;
    } else {
      lHTMLoutput += this.c_imageON;
    }
    lHTMLoutput += '&quot;/&gt;';

    $(this.c_elementName).innerHTML=lHTMLoutput;
  }
</pre>
</pre>
<span id="NB4HistoGraphClass"><h4>NB4HistoGraphClass</h4></span>
<p>Cette classe a pour but d&#8217;afficher une évolution dans le temps d&#8217;une valeur numérique. A chaque update, nous allons afficher une valeur supplémentaire (une barre de 1 pixel représentant la valeur plus précisément), à la manière du monitoring CPU et mémoire du perfmon de windows.</p>
<p>Le fonctionnement global de la classe est exactement le même que la NB4OnOff, je ne reviens donc pas sur les fonctions d&#8217;initialistion et d&#8217;update</p>
<p>Il y a un point important à noter dans callBackAjaxOk : au lieu d&#8217;écraser la valeur précédente comme c&#8217;est le cas dans la classe OnOff, ici on ajoute la valeur reçue à un tableau de valeur :</p>
<pre>
<pre class="brush: jscript;">this.c_histo.extend([lvalue]);</pre>
</pre>
<p>Toutefois, la grosse différence se situe dans le code de rendu html : GetHTMLOutput :</p>
<ul>
<li>D&#8217;abord on récupère la taille de la zone d&#8217;affichage (elle peut varier en fonction notamment du mode docké ou non docké)</li>
<li>Et on en déduit le nombre de barres verticales affichables (a noter que pour l&#8217;instant c_imgwidth est un paramètre fixé une fois pour toute)</li>
<li>Puis enfin on réduit le tableau des valeurs à ce nombre :</li>
</ul>
<pre>
<pre class="brush: jscript;">
	// Récupère la taille actuelle du div
   var divHeight = $(this.c_elementName).getStyle('height').toInt();
   var divWidth = $(this.c_elementName).getStyle('width').toInt();

   // nombre max de barres affichables (division entière)
   var maxBarres = (divWidth - (divWidth % this.c_imgwidth)) / this.c_imgwidth;
   // réduit le tableau avec les dernières valeurs affichables
   if (this.c_histo.length&gt;maxBarres) {
     this.c_histo = this.c_histo.slice(this.c_histo.length - maxBarres);
   }
</pre>
</pre>
<ul>
<li>Puis si on a définit une hauteur dynamique au graphe, on va chercher quelle est la plus grande valeur du tableau afin de positionner l&#8217;échelle. Sinon on positionne l&#8217;échelle à une valeur fixe</li>
</ul>
<pre>
<pre class="brush: jscript;">
    if (this.c_maxHeightSize==0) { // taille dynamique
      var valeurMax= 0;
      this.c_histo.each( function(val) {
        if (val &gt;= valeurMax) {
          valeurMax = val;
        }
      });
    } else {  // taille fixe
      valeurMax = this.c_maxHeightSize;
    }
</pre>
</pre>
<ul>
<li>Enfin on parcoure le tableau de valeur en créant à chaque fois une image verticale dont la hauteur correspond à la valeur chiffrée du tableau et on l&#8217;affiche ainsi que le texte du paramètre de la NB4 qui est monitoré et la dernière valeur chiffrée :</li>
</ul>
<pre>
<pre class="brush: jscript;">
    var derniereValeur = 0;
    // affiche le graph
    for(var i=0;i&lt;this.c_histo.length;i++) {
      lHTMLoutput += '&lt;img src=&quot;';
      lHTMLoutput += this.c_imageHisto; //this.c_imageHisto;
      lHTMLoutput += '&quot;';
      lHTMLoutput += ' style=&quot;position: absolute; bottom: 0px; left:'+ i + 'px; width:'+ this.c_imgwidth + '; height:' + this.c_histo[i]*(divHeight/valeurMax) + ';&quot;';
      lHTMLoutput += '/&gt;';
      derniereValeur = this.c_histo[i];
    }
    $(this.c_elementName).innerHTML=lHTMLoutput;
</pre>
</pre>
<span id="Telechargement_et_Installation"><h1><a name="Telechargement"></a>Telechargement et Installation</h1></span>
<p>Deux versions sont téléchargeables : une de devt et une &#8216;normale&#8217; (on ne peut pas l&#8217;appeler &#8216;de production&#8217; à partir du moment où ce gadget n&#8217;est pas encore terminé).<br />
Le but est de montrer comme serait le package &#8216;minimal&#8217; d&#8217;un gadget NB4. J&#8217;ai donc enlevé dans la version &#8216;normale&#8217; tous les fichiers non nécessaires.</p>
<p>Pour l&#8217;installer, il suffit de télécharger l&#8217;archive, de le dézipper et de double cliquer sur le gadget, il devrait s&#8217;installer tout seul. Ensuite, normalement il devrait se trouver dans le répertoire windows suivant : Bureau\&lt;votre nom de user&gt;\AppData\Local\Microsoft\Windows Sidebar\Gadgets</p>
<p>La seconde archive (de développement) intégre un mootools non compressé (pratique pour le debug) ainsi que deux fichier supplémentaires et une icône de développement :</p>
<ul>
<li>testFormPost.html qui est une simple page pour interroger la NB4 en POST et récupérer le resultat, pratique pour tester des paramètres et ce qu&#8217;ils retournent</li>
<li>bouchon.php : permet de simuler la NB4 :
<ul>
<li>paramétrez DEBUG_BOUCHON à true dans NB4.js</li>
<li>hébergez le repertoire du gadget sur un serveur php et appelez directement la page NB4.html depuis un firefox équipé de firebug</li>
<li>Cela permet de faire du débug pas à pas, ce qui est pratique dans certains cas quand on ne comprend pas ce qu&#8217;il se passe : un des gros problème du développement de gadgets est la difficulté de debug car le browser embarqué dans windows sidebar n&#8217;est pas du tout accessible ni modifiable.</li>
</ul>
</ul>
Note: There is a file embedded within this post, please visit this post to download the file.
]]></content:encoded>
			<wfw:commentRss>http://www.chiroux.com/un-gadget-vista-pour-la-neufbox-4/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
