Home

Tutoriel AppleScript Studio

Partie 2 - Gestion des tableaux

Etape 2 - Insertion de données dans un tableau

Commun Tiger & Léopard

Introduction

Pour de grosses bases de données, l'outil SQL est nécessaire. Ce n'est pas notre cas pour mon application CDClassic, la taille des données est faible, et la quantité moyenne. J'ai moins de 300 CD, pas de quoi écrouler un fichier Mac. Nous allons, donc, utiliser les outils proposés dans Cocoa.

Apple dans Cocoa, (donc AppleScript Studio en profite, pour faciliter la vie des développeurs) a créé une sorte de mini base de données associée à une table, appelée "Data Source". Elle est associée en mémoire centrale, et en dynamique à la table. Toutes les fonctions d'ajout de données, modification de l'ordre de tri, scrolling, sont automatiquement gérées.

En complément, pour le stockage sur disque des données, Cocoa offre les "p-list", un format de type html. J'en ai frémi d'horreur devant la non-lisibilité du fichier par TextEdit ou autre. Mais bonheur, "Property List Editor", lit les balises, et vous présente les données de manière tout à fait lisibles. Notez que, toutes les préférences de toutes les applications Mac sont dans ce format. Et, cela semble très rapide en temps d'accés.


Donc, nous allons apprendre successivement :

  1. A créer une Data Source" a partir d'une petite liste.
  2. A créer une p-list à partir d'un fichier TEXT.
  3. A lire cette p-list pour charger la Data Source."


Création d'une Data Source

Le résultat


Ci-dessous, le script complet à placer dans "awake from nib" pour être exécuté à l'ouverture de l'application.

Pas d'affolement, c'est assez facile. Nous allons voir phrase par phrase.

De plus vous avez l'exemple complet dans Data Source.zip

Toutes mes excuses pour les commentaires en anglais. Ils proviennent des exemples, que j'ai récupérés chez Apple. De plus, je mets moi aussi souvent mes commentaires en anglais.


on awake from nib theObject


if the name of theObject is "authorTableView" then

----------------------------- Initial list for demo --------------------------

set List_de_demo to {"BARTOK Bela (1881-1945)", "BELLINI Vincenzo (1801-1835)", "CANTELOUBE DE MALARET Marie-Joseph (1879-1957)", "VERDI Giuseppe (1813-1901)"}

------------------------------------------------------------------------------

--------- Now we define the data source associate to the table -----------

set AuthorDataSource to make new data source at end of data sources with properties {name:"AuthorDS"}

-- Create the data columns, including the sort information for each column

make new data column at end of data columns of AuthorDataSource with properties {name:"Author", sort order:ascending, sort type:alphabetical, sort case sensitivity:case sensitive}

set sorted of AuthorDataSource to true -- Les données devront être triées

-- Set the "priority" data column as the sort column

set sort column of AuthorDataSource to data column "Author" of AuthorDataSource

-- Finally, assign the data source of the table view to your data source

set data source of theObject to AuthorDataSource -- table view "authorTableView"

-- Add the data, associated to the table

append AuthorDataSource with List_de_demo -- les noms en minuscule vont après

end if

----------------------------------------------------------------------------------

end awake from nib


1 - Bloc du choix de l'objet

La première phrase est un IF permettant de savoir à quel objet s'adresse le script.

if the name of theObject is "authorTableView" then

Vous devez faire un bloc IF pour chaque objet à traiter.




2 - Définissons une liste en mémoire

Rappel en AppleScript la syntax est : "set nom to {"a", "b"}

Soit pour une liste de quatre auteurs :

set List_de_demo to {"BARTOK Bela (1881-1945)", "BELLINI Vincenzo (1801-1835)", "CANTELOUBE DE MALARET Marie-Joseph (1879-1957)", "VERDI Giuseppe (1813-1901)"}

PS : Comme on me le demande souvent, Canteloube de Malaret a répertorié les chants d'Auvergne. Je l'ai pris, car c'est le plus long pour la largeur de la fenêtre.




3 - Définition de la Data Source

set AuthorDataSource to make new data source at end of data sources with properties {name:"AuthorDS"}

"AuthorDataSource" est le nom de la variable qui pointe sur la Data Source. C'est ce nom de variable que nous utiliserons à chaque fois que nous nous adresserons à la Data Source.

"AuthorDS" est le nom de la Data Source. Je ne l'ai jamais vu dans un script.




4 - Définition des colonnes

make new data column at end of data columns of AuthorDataSource with properties {name:"Author", sort order:ascending, sort type:alphabetical, sort case sensitivity:case sensitive}

Une commande "make" pour chaque colonne. Dans mon application il n'y a qu'une colonne.

"Author" est le nom de la colonne dans la Data Source. Le nom de la colonne en "Attributes" et "Applescript" peuvent être différent. Il faut juste respecter l'ordre si vous avez plusieurs colonnes.




5 - Définition du tri

set sorted of AuthorDataSource to true -- Les données devront être triées


Puis, indiquez quelle est la colonne prioritaire pour le tri. Important s'il y a plusieurs colonnes.

set sort column of AuthorDataSource to data column "Author" of AuthorDataSource




6 - Affectation de la Data Souce à la table

Le nom de la table, c'est l'objet appelé "theObject" et sélectionné par le IF

set data source of theObject to AuthorDataSource -- table view "authorTableView"




Stockage des données

Le stockage des données se fait par la commande "append". Les données seront stockées à la fin du fichier Data Source.

append AuthorDataSource with List_de_demo

Vous pouvez avoir autant de commandes "append" dans votre code. A chaque fois, la liste de données sera ajoutée à la fin du fichier de la Data Source et, par bonheur, automatiquement dans la Scrolling view, le tri et l'affichage sera fait, par la gestion du scrolling.

Attention au piege : C'est la Scrolling view qui est triée, pas les données elles-mêmes. Exemple : vous avez les données B,C,D initialement. Vous stocké A. La liste devient B,C,D,A, mais comme vous avez spécifié que la Data Source est triée, la scrolling view affiche bien A,B,C,D. Cela fait un peu bizarre, de spécifier une Data Source triée, et les données ne le sont pas, c'est sa visibilité qui l'est. Encore pire, si vous demandez la rangée 2 à la scrolling view vous obtenez bien B, mais si vous demandez la rangée 2 à la "Data Source", là vous parlez à la liste non triée, et vous obtenez C. Nous y revenons dans le chapitre suivant, à l'étude des commandes pour la sélection des rangées./p>


Téléchargez l'exemple Data Source

Etudiez cette exemple. Vous verez il n'y a pas de définition de colonne dans Interface Builder, ni de connexion au script pour la colonne. Le nom est aussi différent. La Data Sourse est autarcique, et pointe uniquement sur le nom de la table "NSTableView".





La suite - Sélection d'une rangée d'un tableau


Page précédente

Page suivante

Merci de votre visite

UP