L'Xobjet MISC_X (D5-D6)
Avec Director 6.5, ses nouvelles fonctionnalités et surtout
sa nouvelle architecture ouverte, il reste semble-t-il bien peu
de place pour ces vieux xobjets ringards. Et pourtant, pour un coût
très faible ou nul, une occupation mémoire ridicule,
parfois une grande stabilité et toujours un mise en oeuvre
très simple, on trouvait des xobjets pour toutes les tâches
courantes du développement. MISC_X
faisait partie de ces outils fidèles (depuis 1994 - Macromind
director 3). L'xobjet n'est plus suivie aujourd'hui par l'éditeur
et n'apparaît plus dans aucun listing. Nous nous proposons
d'en faire le prétexte à une découverte des
Xobjets :
On s'enquiert des Xchoses disponibles en saisissant ShowXlib dans
la fenêtre message de Director :
showXlib
-- XLibraries:
-- Xtra: QTVRXtra
-- Xtra: ScriptColor
-- Xtra: PrintOMatic_Lite
-- Xtra: NetLingo
-- Xtra: Mui
-- Xtra: fileio
-- "*Standard.xlib"
-- XObject: SerialPort
Id:200
-- XObject: XCMDGlue
Id:2020
Aucun Xobjet externe n'apparaît dans la deuxième partie
de cette liste, nous allons y remédier en indiquant
à Director le chemin du fragment de code externe que nous
voulons utiliser ("MISC_X"). L'xobjet a été placé
sur le bureau du Mac; Nous saisissons :
openXlib "Macintosh HD:desktop folder:misc_X XObj"
Où "misc_X XObj" est le nom actuel du fichier contenant
le fragment de code. Director n'indique pas si l'ouverture de l'Xobjet
a réussie. pour le savoir et connaître le nom véritable
de l'Xobjet, Il nous faut interroger Director un nouvelle fois :
showXlib
-- XLibraries:
-- Xtra: QTVRXtra
-- Xtra: ScriptColor
-- Xtra: PrintOMatic_Lite
-- Xtra: NetLingo
-- Xtra: Mui
-- Xtra: fileio
-- "*Standard.xlib"
-- XObject: SerialPort
Id:200
-- XObject: XCMDGlue
Id:2020
-- "misc_X XObj"
-- XObject: MISC_X Id:10001
L'xobjet est désormais utilisable. Mais quelles sont ses
méthodes. Passée à l'objet, la méthode
globale mDescribe fournit la liste des fonctions disponibles :
MISC_X(mDescribe)
-- Factory: MISC_X ID:10001
-- Misc_X, Misc Utilities XObject, v2.0
I mNew
S mBootName -- get the name of the boot disk
S mSystemFolder -- get the path to the system folder
S mPrefsFolder -- get the path to the preferences folder
IS mFileExists, filePath -- return 1 if successful, otherwise
0
ISS mCopyFile, sourcePath, destPath -- return 1 if successful,
otherwise 0
IS mFolderExists, folderPath -- return 1 if exists, otherwise
0
IS mInsureFolder, folderPath -- create a full path to the folder,
return possible error
XS mDeleteFolder, folderPath -- delete folder along with contents
SS mFolderList, folderPath -- return list of folders in the folder
SSSSS mAsk, query, default, btnOk, btbCancel -- dialog box that
accepts user input
SSSSS mAnswer, query, btnL, btnM, btnR -- alert type dialog with
variable number of buttons
IS mSpaceOnVol, volumeName -- return the number of free bytes
on volume
X mFlushActions -- destroy all pending events in the queue ----
-- Copyright 1994 Sanctuary Woods --
-- written by Les R. Titze --
-- modified by Brian Parkinson -- --
-- Append folder name in mInsureFolder with a colon
-- gXObject(mInsureFolder, the pathName & "bands:genesis:")
--
-- The mAsk dialog box returns the text field is btnOk clicked,
otherwise the btnCancel text
-- The mAnswer dialog box returns the text of the button clicked
--
-- For mAnswer dialog box, the number of buttons is variable
-- gXObject(mAnswer, "Are you sure ?", "", "Yes", "No") -- two
buttons
-- gXObject(mAnswer, "A simple alert box", "", "", "Ok") -- one
button ----
L'affichage présente une à une et de façon
conventionnelle, les méthodes utilisables pour MISC_X. Chacune
de ces lignes est rédigée de la même manière
:
Le groupe de lettres initiales (capitales souvent) fournit de indications
sur le type que la fonction retourne (premier caractère)
et le type d'arguments qu'elle requiert (tous les autres).
X indique que la fonction ne retourne aucune valeur
I désigne un entier
S une chaîne de caractères entre guillemets
plus rarement on rencontre dans ces listes :
L pour une liste d'entiers
P pour une image
O pour une instance d'objet
V pour un type de données varié
La méthode mNew nous indique que et comment nous devons
commencer par créer une instance de MISC_X. L'instance (ou
enfant) doit recevoir un nom de baptême (CRAPO) nous permettant
de l'invoquer : Nous allons stocker l'instance dans une variable.
set CRAPO to misc_x(mNew)
Un objet-enfant est créé qui est stocké dans
la variable CRAPO. La méthode utilisée renvoie un
entier code d'erreur (le premier "i"). Si tout se passe bien le
résultat est 0.
Manipulation de fichiers
Notre objet CRAPO est maintenant prêt à obéir
à nos instructions. Il sait faire de nombreuse et diverses
choses. Toujours avec les Xobjets la structure est la suivante :
à l'objet on passe une méthode et ses éventuels
arguments entre parenthèses. Nous lui passons la méthode
mBootname :
CRAPO(mBootName)
L'objet doit retourner le nom du volume :
put the result
-- "Macintosh HD"
De la même manière l'objet peut retourner le chemin
au Dossier Système ou au dossier de préférences.
Si nous souhaitons copier un fichier, il nous faut nous assurer
que celui-ci existe : nous interrogeons CRAPO.
put CRAPO(mFileExists,CRAPO(mPrefsFolder) & "préférences
du Crapo")
-- 1
Notre question se traduit ainsi : dis-moi si un document nommé
"préférences du Crapo" est situé dans le dossier
préférences dont le chemin est connu par la méthode
mPrefsFolder. La réponse laconique : 1 est affirmative.
Nous pouvons procéder à la copie de ce fichier mais
nous souhaitons placer le nouvel exemplaire dans un dossier spécifique.
La méthode mInsureFolder autorise la création d'un
dossier ("Dossier Sauvergarde") et retourne une valeur d'erreur
nulle si l'opération réussit. Attention à terminer
la chaîne d'arguments par deux points (":") !
CRAPO(minsurefolder, "Macintosh HDl:desktop folder:Dossier Sauvegarde:")
put the result
-- 0
Aucune erreur, dossier créé. On effectue notre copie
sous le nom "old prefs" dans ce nouveau dossier. CRAPO répondra
1 en cas de succès.
CRAPO(mcopyfile, CRAPO(mPrefsFolder) & "préférences
du Crapo","Macintosh HD:desktop folder:Dossier Sauvegarde:old prefs")
put the résult
-- 1
Boîtes de Dialogues
MISC_X autorise en outre la création de dialogues simples
et dépouillés. Les méthodes sont mAsk et mAnswer.
Voyons ça. Toujours dans la fenêtre message,Nous saisissons :
CRAPO(mAsk, "Vous vous appelez", "Crapo", "Oui", "t'occupe !")
La méthode requiert 3 arguments de type chaîne. Le
deuxième intitulé sera le bouton de validation par
défaut.
Le choix utilisateur est retourné simplement. Il s'agit
du contenu du champs de saisie si l'utilisateur valide (bouton "Oui"),
de l'intitulé "t'occupe !" dans l'autre cas.
put the result
-- "Monsieur Crapo"
L'utilisateur a modifié le contenu par défaut du
champs de saisie ("Monsieur Crapo") et a cliquer sur le bouton de
validation.
Un autre type de boîte de dialogue acceptant plusieurs boutons
est créé par mAnswer.
CRAPO(mAnswer, "quoi d'autre", "bouton gauche", "bouton milieu",
"droite")
put the result
-- "droite"
L'utilisateur à choisit le bouton de droite, CRAPO retourne
l'intitulé du bouton. Un dialogue à deux bouton ?
CRAPO(mAnswer, "quoi d'autre", "bouton gauche", "", "droite")
put the result
-- "bouton gauche"
N'oublions pas de libérer la mémoire en disposant
de l'objet CRAPO par :
CRAPO(mDispose)
Puis de refermer le fichier de l'xobjet par Lingo.
closeXlib
Pour contacter l'éditeur de MISC_X,
Sanctuary Woods : http://www.theatrix.com/sw.html
<
Sommaire
|