L'Xobjet MISC_X (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
|