`+jfs_lst_makeLNText(toHTML.match(/ |
`); } }).call(this); /* * File : jfs_image_util.js * Author : Jean-Ferdinand SUSINI * Created in : 5-02-2014 * import javascript functions initially written in * http://jeanferdysusini.free.fr/Cours/CP48/index.php * This file contains utility functions to deal with a popup image viewer. */ JFS.events.DP = { reload: SC.evt("&reload") }; /* intialise l'image viewer comme un champ du document */ JFS.DP = SC.tools.makeImage({ id : "JFS_DOMID_currentImgInTheImageViewer" , alt: "Capture d'écran" , beh : SC.actionOn(JFS.events.DP.reload , "jfs_imageReloaded" , undefined , SC.forever ) }); JFS.DP.jfs_imageReloaded = function(events, m){ var frame = this.parentNode; //var img_tag = frame.children[0]; var ratio_h = (this.width+0.0)/frame.offsetWidth; var ratio_v = (this.height+0.0)/frame.offsetHeight; var imw = this.width; var imh = this.height; var msg = ((ratio_h>1)?"\nratio_h = "+ratio_h:""); msg += ((ratio_v>1)?"\nratio_v = "+ratio_v:""); msg += "\nframe.offsetWidth = "+frame.offsetWidth; msg += "\nframe.offsetHeight = "+frame.offsetHeight; msg += "\nthis.width = "+this.width; msg += "\nthis.height = "+this.height; //alert(msg); if(ratio_h > ratio_v){ if(ratio_h < 1){ ratio_h = 1; } if((frame.offsetWidth - 10) < imw){ this.style.width = (frame.offsetWidth - 10)+"px"; this.style.left = "5px"; } else{ this.style.width = "auto"; this.style.left = ((frame.offsetWidth-imw)/2)+"px"; } this.style.height = "auto"; this.style.top = Math.round((frame.offsetHeight-imh/ratio_h)/2)+"px"; msg += "imh/ratio_h"+(imh/ratio_h); //alert(msg+"\nimg_tag.style.top = "+img_tag.style.top); } else{ if(ratio_v < 1){ ratio_v = 1; } if((frame.offsetHeight - 10) < imh){ this.style.height = (frame.offsetHeight - 10)+"px"; this.style.top = "5px"; //alert("img_tag.style.height = "+img_tag.style.height); } else{ this.style.height = "auto"; this.style.top = ((frame.offsetHeight-imh)/2)+"px"; //alert("img_tag.style.top = "+img_tag.style.top); } this.style.width = "auto"; this.style.left = Math.round((frame.offsetWidth-imw/ratio_v)/2)+"px"; //alert("img_tag.style.left = "+img_tag.style.left); } this.hidden = false; }.bind(JFS.DP); function jfs_intializePopupImageViewer(){ console.log("popup viewer"); /*var popupFrame = document.createElement("div"); popupFrame.style.display="none"; popupFrame.setAttribute("id", "JFS_DOMID_popupImageViewer"); var imgView = document.createElement("img"); imgView.setAttribute("id", "JFS_DOMID_currentImgInTheImageViewer"); imgView.setAttribute("alt", "Capture d'écran"); imgView.setAttribute("onclick", "javascript:jfs_hidePopupImageViewer();"); imgView.setAttribute("onload", "javascript:jfs_resizeImageViewer();");*/ JFS.DP.setAttribute("onload", "SC.tools.generateEvent(JFS.events.DP.reload);"); /*popupFrame.appendChild(imgView); imgView = document.createElement("img"); imgView.setAttribute("alt", "Fermeture Capture d'écran"); imgView.setAttribute("onclick", "javascript:jfs_hidePopupImageViewer();"); imgView.setAttribute("src", "/images/png/Close.png"); imgView.setAttribute("class", "JFS_IHMStyle_CloseBtn"); popupFrame.appendChild(imgView); document.body.appendChild(popupFrame); document.JFS_Global_PopupViewer = popupFrame;*/ } /* Masque la vue l'image viewer */ /*function jfs_hidePopupImageViewer(){ document.JFS_Global_PopupViewer.style.display = 'none'; }*/ /* Masque la vue l'image viewer */ //function jfs_hidePopupPaperViewer(){ // document.JFS_Global_PopupPaperViewer.style.display = 'none'; //} /* affichage de la photo dans le cadre dédié */ JFS.paperTool = SC.tools.makeDiv({ id : 'JFSDOMID_pageViewer' }); function jfs_displayPaper(file){ var section = JFS.paperTool; SC.tools.generateEvent(JFS.events.popup.show); JFS.popupTools.jfs_content.innerHTML=""; JFS.popupTools.jfs_content.appendChild(section); JFS.loadData(file, (function(section){ return function(res){ section.innerHTML = res; var scriptNodes = section.getElementsByTagName("script"); try{ for(var i = 0; i < scriptNodes.length; i++){ eval(scriptNodes[i].text); } if(navigator.onLine){ MathJax.Hub.Queue(["Typeset",MathJax.Hub,"JFSDOMID_pageViewer"]); } } catch(e){} }})(section)); return false; } /* affichage de la photo dans le cadre dédié */ function jfs_displayPhoto(src){ //var frame = document.JFS_Global_PopupViewer; console.log("draw "+src); SC.tools.generateEvent(JFS.events.popup.setNewContent, JFS.DP); SC.tools.generateEvent(JFS.events.popup.show); //var img_tag = frame.children[0]; if(JFS.DP.getAttribute("src") != src){ JFS.DP.hidden = true; JFS.DP.setAttribute("src",src); } //frame.style.display = "block"; return false; } /* Ajoute le thumb dans la série de screenshots */ function jfs_addNewImage(the_path, the_id, the_alt){ var img_thumb = document.createElement("img"); img_thumb.setAttribute("src",the_path); img_thumb.setAttribute("onclick","javascript:jfs_displayPhoto(\""+the_path+"\");"); img_thumb.style.height="200px"; img_thumb.style.alt=the_alt; document.getElementById(the_id).appendChild(img_thumb); } ;
mercredi 17 juin 2020
Ce devoir à rendre sur la plateforme Moodle pour le vendredi 10 juillet 2020, va compter pour votre évaluation de l'UE NFA025. Ce travail doit être personnel. Le travaille sera remis sous la forme d'un fichier texte (pas de format binaire type Word ou autre), éventuellement avec des enrichissement Mardown si vous le souhaitez.Un développeur Android doit réaliser une application dédiée à faciliter le déroulement de parties de jeu de société.
Cette application doit permettre de récolter les inscriptions de participants. Par contre le système veut ne pas être tributaire des échanges réseaux et donc permettra l'échange d'information par QRcode.
Comme d'habitude, nous nous intéressons ici qu'à une version très embryonnaire de cette application, disposant essentiellement d'une activité principale, lancée au démarrage de l'application implantée par la classe Bienvenue
, qui constitue le point d'entrée de l'application et propose à l'utilisateur plusieurs possibilités. À partir de ce point d'entrée principal, l'utilisateur peut :
Participation
permettant au participant de créer un profile de participation avec différentes informations permettant de préciser des informations sur le joueur ;
MaitreDuJeu
permettant de récupérer les informations par QRcode sur les joueurs participants et d'organiser la partie.
LanceDeDes
qui simule des lancés de Dés.
AndroidManifest.xml
LanceDeDes
quand l'utilisateur clique dessus. Donnez le code permettant de prendre en compte les clic sur le bouton de l'interface graphique de l'application principale et le lancement de l'activité correspondante.
Le développeur de l'application a instrumenté toutes les méthodes du cycle de vie de toutes les activités de son application en utilisant le même TAG, sans erreur et sans oubli. Il souhaite ainsi vérifier l'enchaînement correcte de différents composants de son application. Pour chacune des méthodes, il affiche un message dans le logcat à l'entrée dans la méthode et un autre à la sortie.
Pour chacun des scénarios suivant, donnez la liste des messages envoyés par l'application (dans leur ordre d'apparition) dans lelogcat
Android ; mais cette fois-ci je vous demande également de rajouter une courte explication sur le contexte qui provoque cet affichage.
Figure 1 : IHM de l'activité LanceDeDes
VueDeDe
qui étend la classe View
. que nous étudierons ensuite.
VueDeDe
permettant de dessiner à l'écran les faces de dés avec leur valeurs. On vous fournit les élément de code suivant.
Pour dessiner les faces de dés dans la vues on vous fournit le code suivant qui devra être ajouté à votre implantation de la classe VueDeDe
.
Pour stoker de manière permanente les données d'un personnage sur le terminal, le développeur propose d'utiliser une base de donné SQLite.
Proposez le code donnant accès à la base de donnée SQLite et les requêtes permettant de lister les personnages créés et leurs caractéristiques, ainsi que les parties en cours (quel personnage dans quel partie).