cours - Irif

Transcription

cours - Irif
Mac OS X
Dashboard
[email protected]
http://www.liafa.jussieu.fr/~yunes/macosx/
jeudi 15 octobre 2009
Dashboard
• un ensemble d’outils toujours disponibles [F12]
• trois types d’outils :
• accessoires (très autonomes)
• extensions d’applications
• informatifs
horloge, calculatrice...
contrôleur iTunes...
météo, cours de la bourse...
jeudi 15 octobre 2009
Dashboard
• Un widget de base est un bundle particulier :
• répertoire d’extension .wdgt
• fichier HTML contenant l’interface
• une image de fond (PNG) Default.png
• une icône (PNG) Icon.png
• un fichier de propriétés Info.plist
jeudi 15 octobre 2009
Dashboard - HTML
• le HTML à employer devrait plutôt être
conforme à XHTML 1.0 :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Bonjour</title>
</head>
<body background="Default.png">
<h1>Bonjour tout le monde!</h1>
</body>
</html>
jeudi 15 octobre 2009
Dashboard - HTML
• Trois extensions disponibles :
• une balise canvas permettant de déclarer une
zone d’affichage
• l’attribut composite à employer avec la balise
image pour obtenir des rendus particuliers
• un nouveau type d’entrée search pour
obtenir créer un champ de recherche dans le
style Mac OS X
jeudi 15 octobre 2009
Dashboard - HTML
• l’exemple du widget Diderot (à télécharger
depuis http://www.liafa.jussieu.fr/~yunes/macosx/) :
<html>
<head>
<title>Diderot</title>
</head>
<body background="Default.png">
</body>
</html>
jeudi 15 octobre 2009
Dashboard - Icon.png
• Icon.png est utilisée pour représenter le
widget dans la barre de widgets, ses
caractéristiques doivent être :
• le contenu doit être défini dans une zone de
75px X 75px
• l’ombre projetée doit avoir :
•
•
•
•
jeudi 15 octobre 2009
50% d’opacité
une orientation de 90° par rapport à l’horizontale
un décalage de 3 pixels
et une taille de 3 pixels avec du « flou Gaussien »
Dashboard - Info.plist
• Contient des métadonnées sur le widget, les clés
obligatoires sont :
• CFBundleName : son nom «système»
• CFBundleDisplayName : son nom localisé
• CFBundleIdentifier : reverse Internet domain
• CFBundleVersion : version du widget
• MainHTML : fichier HTML principal
jeudi 15 octobre 2009
Dashboard - Info.plist
• Exemple du widget Diderot :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
!
<key>CFBundleDisplayName</key>
!
<string>Diderot</string>
!
<key>CFBundleIdentifier</key>
!
<string>fr.univ-paris-diderot.Diderot</string>
!
<key>CFBundleName</key>
!
<string>Diderot</string>
!
<key>CFBundleVersion</key>
!
<string>1.0</string>
!
<key>MainHTML</key>
<string>Diderot.html</string>
</dict>
</plist>
jeudi 15 octobre 2009
Dashboard Technologies
• peuvent être employées :
• HTML (XHTML 1.0, en fait WebKit)
• CSS
• Javascript
• + toutes les technologies Apple (Obj-C...)
structure
forme
logique
jeudi 15 octobre 2009
Dashboard - Ressources
• Quelques ressources standards sont fournies :
•/System/Library/WidgetResources/
on y trouve différentes classes Javascript, ainsi que diverses
images d’objets standards
• Les Widgets sont placés :
tous les utilisateurs dans
• pour
/Library/Widgets
chaque utilisateur dans
• pour
/Users/login/Library/Widgets
jeudi 15 octobre 2009
Dashboard Classes Apple
• Pour conserver l’apparence (look&feel) Apple,
des classes d’objets standards sont fournies :
• AppleScrollArea, AppleScrollbar
• AppleSlider
• AppleAnimator, AppleAnimation
• AppleButton
• les préférences et les faces
• les événements
• le glisser/déposer...
jeudi 15 octobre 2009
Dashboard Classes Apple
•Insertion de la définition Javascript de l’objet
•Insertion dans le document d’un élément permettant
de le représenter
Déclaration d’un handler permettant de réaliser les
initialisations utiles
Déclarations concernant le placement de l’objet
Définition du handler
•
•
•
jeudi 15 octobre 2009
Dashboard -
AppleButton
•Insertion du code Javascript contenant les
définitions utiles pour manipuler un bouton
«Apple»:
<script type=”text/javascript” src=”/
System/Library/WidgetResources/
AppleClasses/laClasse.js” charset=”utf-8”/>
•Ici laClasse est AppleButton
jeudi 15 octobre 2009
Dashboard -
AppleButton
•Insertion de l’élément du DOM en utilisant la
balise <div> et son attribut id:
<div id=”monBouton”></div>
•Insertion du handler d’initialisation
<body onload=”setup();”>
jeudi 15 octobre 2009
Dashboard -
AppleButton
•Déclarations de positionnement :
#monBouton {
position: absolute;
top: 200px;
left: 160px;
}
jeudi 15 octobre 2009
Dashboard -
AppleButton
•Définition de la fonction d’initialisation :
var bouton;
function unClic() { widget.openURL("http://www.google.fr/"); }
function setup() {
bouton = new AppleButton(
document.getElementById("monBouton"),
"Un clic?",
23,
"images/bGauche.png","images/bGaucheDown.png",
10,
"images/bMilieu.png","images/bMilieuDown.png",
"images/bDroit.png","images/bDroitDown.png",
10,unClic);
}
jeudi 15 octobre 2009
Dashboard -
AppleButton
•Les propriétés/méthodes des objets AppleButton :
•onclick : (propriété) le handler
•setDisabledImages(...): (méthode) positionne des
images à utiliser lorsque le bouton est inhibé
•enabled : (propriété) son statut
•setEnabled(boolean) : (méthode)
•remove() : (méthode) pour détruire l’objet
•textElement : (propriété) le label de l’objet
jeudi 15 octobre 2009
Dashboard -
AppleScrollbar
• Il y a deux objets à manipuler, la barre
•
•
•
jeudi 15 octobre 2009
(AppleScrollbar) et le contenu à faire défiler
(AppleScrollArea)
Donc deux éléments du DOM
Trois constructeurs :
AppleVerticalScrollbar(élément);
AppleHorizontalScrollbar(élément);
AppleScrollArea(élément);
une méthode d’association :
scrollArea.addScrollbar(scrollBar);
Dashboard -
AppleSlider
• Deux constructeurs :
AppleVerticalSlider(élément, handler);
AppleHorizontalSlider(élément, handler);
• le handler est de la forme :
function handler(valeur) { ... }
valeur est une valeur flottante entre 0 et 1
jeudi 15 octobre 2009
Dashboard -
AppleAnimator
• En réalité il s’agit de classes permettant de générer des
appels de fonctions à intervalles contrôlés en générant
des suites de valeur :
AppleAnimator(délai, intervalle);
AppleAnimation(début, fin, handler);
• le handler est de la forme :
function handler(animation, valeur, début, fin) { ... }
jeudi 15 octobre 2009
Dashboard -
AppleAnimator
• L’association entre un Animator et une Animation est
réalisée par un appel à :
animator.addAnimation(animation);
• le contrôle est réalisé par :
animator.start();
animator.stop();
jeudi 15 octobre 2009
Dashboard les préférences
• un mécanisme de conservation de valeurs est
disponibles. Il s’agit de « préférences » :
widget.setPreferenceForKey(valeur, clé);
widget.preferenceForKey(clé);
• Note : les préférences sont persistantes (y
compris aux sessions)
• Note : les préférences ne doivent être
manipulées qu’en face arrière
jeudi 15 octobre 2009
Dashboard - les faces
• les widgets possèdent deux faces :
• la face avant qui présente les données utiles
• la face arrière qui permet de contrôler les
préférences
• on bascule de l’une à l’autre à l’aide d’un
AppleInfoButton dans un sens et d’un
AppleGlassButton (appelé Done Button)
dans l’autre
jeudi 15 octobre 2009
Dashboard - les faces
• Le widget est divisés en deux parties :
<div id=”avant”>
<div id=”info”></div>
</div>
<div id=”arriere”>
<div id=”done”></div>
</div>
jeudi 15 octobre 2009
Dashboard - les faces
• Les handlers de bascule ressemblent à :
function showPrefs() {
var av = document.getElementById("avant");
var ar = document.getElementById("arriere");
if (window.widget)
widget.prepareForTransition("ToBack");
av.style.display="none";
ar.style.display="block";
if (window.widget)
setTimeout ('widget.performTransition();', 0);
}
jeudi 15 octobre 2009
Dashboard les événements
• l’apparition et le masquage :
widget.onshow, widget.onhide
• la captation des événements :
widget.onfocus, widget.onblur
• le déplacement :
widget.ondragstart, widget.ondragend
suppression :
• lawidget.onremove
jeudi 15 octobre 2009
Dashboard - les canvas
• la balise canvas :
<canvas id=”id” width=”largeur” height=”hauteur” />
• en Javascript on récupère l’objet, puis on manipule son
contexte graphique :
cv = document.getElementById(“id”);
ctxt = cv.getContext(“2d”);
jeudi 15 octobre 2009
Dashboard - les canvas
• les méthodes (non fixées) du contexte sont (non
exhaustif) :
save()
restore()
clearRect()
translate()
rotate()
drawImage()
fillRect()
setFillColor()
jeudi 15 octobre 2009
Dahsboard l’objet widget
• ses propriétés :
identifier
ondragstart
ondragend
onshow
onhide
onremove
jeudi 15 octobre 2009
Dahsboard l’objet widget
• ses méthodes :
openApplication(bundleId);
openURL(url);
preferenceForKey(clé);
prepareForTransition(transition);
performTransition();
setCloseBoxOffset(x,y);
setPreferenceForKey(valeur,clé);
system(commande,handler); nécessite AllowSystem true
jeudi 15 octobre 2009
Dahsboard les intentions
• Il est nécessaire de déclarer ce à quoi le widget a droit,
par l’intermédiaire de propriétés :
AllowFileAccessOutsideOfWidget
AllowFullAccess
AllowInternetPlugins
AllowJava
AllowNetworkAccess
AllowSystem
Plugin
jeudi 15 octobre 2009
Dashboard Accès au Web
• On peut accéder au Web via HTTP en utilisant
l’objet XMLHttpRequest :
XMLHttpRequest() constructeur
requête.open(méthode,url);
requête.setRequestHeader(champ,valeur);
requête.onload = handler;
requête.send(); / requête.abort();
requête.getResponseHeader(champ);
requête.responseXML / requête.responseText
jeudi 15 octobre 2009
Dashboard Documentation
• Dashboard Tutorial (Dashboard_Tutorial.pdf)
• Dashboard Reference (Dashboard_Ref.pdf)
• Web Kit DOM Programming Topics
(SafariJSProgTopics.pdf)
jeudi 15 octobre 2009