Obligement - L'Amiga au maximum

Mardi 12 décembre 2017 - 07:25  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

 · Actualité (récente)
 · Actualité (archive)
 · Comparatifs
 · Dossiers
 · Entrevues
 · Matériel (tests)
 · Matériel (bidouilles)
 · Points de vue
 · En pratique
 · Programmation
 · Reportages
 · Tests de jeux
 · Tests de logiciels
 · Tests de compilations
 · Articles divers

 · Articles in english
 · Articles in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


Jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Contact

David Brunet

Courriel

 


Programmation : C - AppIcons, AppWindows et AppMenuItems
(Article écrit par Olivier Jeannet et extrait d'Amiga News - juillet 1994)


Le système 2.0, grâce à la workbench.library, ne limite plus l'usage des icônes aux seules fenêtres du Workbench. Par exemple, un programme peut ouvrir une fenêtre, et être informé si on lâche des icônes dessus.

La workbench.library, créée avec le système 2.0, a apporté trois objets supplémentaires : l'AppIcon, l'AppWindow et l'AppMenuItem. Le "app" signifie application. Avec le système 1.3, on ne pouvait lâcher des icônes que sur les fenêtres du Workbench, c'est-à-dire les fenêtres correspondant aux répertoires ouverts. Si on lâchait des icônes sur des fenêtres autres que le Workbench, on avait droit à un flash d'écran et un message d'erreur. On ne pouvait utiliser les icônes que pour déplacer des fichiers ou lancer des applications.

Grâce à la workbench.library, le 2.0 (et les systèmes ultérieurs bien sûr) permet d'avoir une certaine interaction entre le Workbench et les applications. On peut, par exemple, lâcher une icône sur une fenêtre non-Workbench, si cette fenêtre est une AppWindow. Le programme qui gère la fenêtre en sera informé et pourra obtenir toutes les informations liées à l'icône : son nom, son répertoire, son outil par défaut, etc.

Pour donner rapidement une idée de ce qu'apporte cette nouvelle bibliothèque, nous allons prendre un bon exemple de programme qui utilise la workbench.library : le programme ToolManager, qui est DP (disponible dans la collection Fish) et livré avec ses sources. Celui-ci utilise en effet les trois objets mentionnés plus haut. Une proportion notable des utilisateurs du 2.0 qui ont essayé ToolManager l'ont probablement adopté, car il est pratique. De plus, c'est une commodité : on le met dans le tiroir WBStartup pour qu'il soit lancé au démarrage, et on peut l'appeler avec le programme Exchange. Nous allons nous étendre ici sur la version 1.5, qui semble plus simple à configurer que les versions ultérieures.

Quand on lance ToolManager, deux modifications apparaissent d'emblée sur le Workbench : une nouvelle icône dans la fenêtre principale (celle qui contient les icônes des disques), et une entrée supplémentaire (item) dans le menu "Outils" ("Tools" pour ceux qui sont restés en anglais), intitulée "Quit ToolManager". Le but de ToolManager est d'ajouter des entrées dans le menu Tool (?) du Workbench, pour pemettre un lancement rapide d'applications. On peut ainsi y mettre ses programmes favoris (PPMore, Az, Deluxe Paint, etc.) et les lancer en sélectionnant tout simplement le menu correspondant. Cela évite par exemple de devoir ouvrir des (sous) répertoires pour aller double-cliquer sur le programme.

Il y a mieux : avant de sélectionner le menu, en peut sélectionner des icônes, et le programme sera lancé avec ces icônes comme arguments. On peut ainsi cliquer sur un fichier texte et lancer son lecteur préféré avec le menu, au lieu d'utiliser celui indiqué dans l'outil par défaut de l'icône. Cette première caractéristique de ToolManager correspond à la notion d'AppMenuItem.

Deuxième caractéristique : l'icône apparue dans la fenêtre principale est particulière, et ce pour trois raisons. Tout d'abord, si on demande l'information sur cette icône (menu du Workbench Icône/Info), le Workbench affiche : "information manquante". Ensuite, en double-cliquant sur l'icône, on obtient la fenêtre de ToolManager : c'est une façon supplémentaire d'obtenir la fenêtre, en plus du raccourci clavier du programme et l'option "Montrer" du programme Exchange.

Enfin, en lâchant l'icône d'un programme sur cette icône, le nom de l'icône lâchée vient s'ajouter dans le menu "Outils" du Workbench : si on ouvre la fenêtre de ToolManager, le nom a également été rajouté dans la liste. Cette deuxième caractéristique de ToolManager correspond à la notion d'AppIcon : l'icône apparue est une AppIcon, elle ne correspond à aucun fichier existant.

La troisième notion, l'AppWindow, est utilisée par la fenêtre de ToolManager. Le fait de lâcher des icônes sur la fenêtre de ToolManager a le même effet que de les lâcher sur l'icône (l'AppIcon, pour être exact) de ToolManager. La méthode est pratique : il suffit d'aller cliquer sur l'icône du programme à ajouter à la liste et de la lâcher sur la fenêtre de ToolManager, au lieu de devoir rentrer le chemin et le nom associés au programme.

Le fichier autodoc de la workbench.library donne un autre exemple de programme utilisant une AppIcon et une AppWindow. On peut créer une icône de "spooler" (gestionnaire de file d'attente) d'impression et l'ajouter au Workbench comme AppIcon. Pour imprimer un fichier, il suffit alors de le lâcher sur l'AppIcon. En double-cliquant sur l'AppIcon, on obtient une fenêtre qui donne l'état de la file d'attente, qui permet de changer les priorités et d'annuler des fichiers en attente, etc. La fenêtre peut aussi être une AppWindow, pour ajouter aux possibilités. Comme exemple pratique, le programme DP PrintManager ouvre une AppIcon et gère une file d'impression.

Cet exemple un peu détaillé va nous permettre de passer rapidement à la programmation. Les trois fonctions de la workbench.library qui nous intéressent s'appellent : AddAppIconA, AddAppMenuItemA, AddAppWindowA. En voici les prototypes en C :

C

Explication des arguments communs
  • "id" est un nombre qui est ignoré par le Workbench, et sert à différencier les différents "AppObjets".
  • "userdata" est également ignoré par le Workbench : on y met ce qu'on veut, l'adresse d'une structure par exemple.
  • "text" donne le nom de l'AppIcon ou de l'AppMenuItem.
  • "msgport" est le port de communication par lequel le Workbench nous informera du lâcher d'icône (AppIcon/Window) ou de la sélection du menu (AppMenuItem).
  • "taglist" est une liste de tags, qui jusqu'à présent doit être vide.
Les arguments particuliers
  • "lock" est jusqu'à présent inutilisé (NULL).
  • "diskobj" pointe vers une structure DiskObject (en gros une icône), dont on peut soit préciser les champs "à la main" dans le programme, ce qui est un peu compliqué, soit créer une icône avec IconEdit et l'appeler avec GetDiskObject.
  • "window" pointe vers la fenêtre à ajouter.
Chaque fois qu'il y aura une action sur l'AppObjet, le Workbench va nous en informer, par le biais du port de communication qu'on spécifie dans la fonction. La notification consiste en un AppMessage, qui est une structure Message augmentée de plusieurs champs.

C

Il peut y avoir trois types de messages, chaque type correspondant à la nature de l'AppObjet manipulé : MTYPE_APPWINDOW, MTYPE_APPICON, MTYPE_APPMENUITEM. Les champs UserData et ID sont égaux aux arguments donnés lors de l'appel de la fonction d'initialisation (AddApp..).

La liste des arguments est en fait un tableau, on peut y accéder des deux façons suivantes :

C

En cas de succès, ces trois fonctions retournent un pointeur sur la structure "AppObjet" correspondante, dont on se sert uniquement pour enlever l'AppObjet a la fin du programme. En cas d'échec, la fonction retourne NULL. Cela peut arriver quand le Workbench ne tourne pas ou par manque de mémoire. Les trois fonctions qui servent à enlever les AppObjets s'appellent (assez logiquement) RemoveAppIcon, RemoveAppMenuItem, RemoveAppWindow.

Ce premier exemple ouvre une AppIcon sur le Workbench, et affiche le nom des icônes qu'on lâche dessus (une ou plusieurs à la fois). Le nom est tiré du champ wa_Name du message reçu du Workbench. Il informe également des double-clics sur l'AppIcon. En fait, ce programme n'affiche que les noms des icônes qui correspondent à des fichiers ou à des AppIcons ; il affiche une chaîne vide si on lâche l'icône d'un disque ou d'un répertoire. Pour obtenir le nom des disques ou des répertoires, il faut exploiter le champ wa_Lock du message reçu. On peut utiliser la fonction NameFromLock() de la dos.library (Workbench 2.0 et plus), qui permet d'obtenir le nom et le chemin d'un fichier d'après son "lock".

C
C

A présent, voyons comment utiliser un AppMenu et une AppWindow. Au lieu d'écrire un programme pour chaque objet, nous allons combiner l'utilisation des deux objets en un seul programme. Il sera sans doute un peu plus compliqué à comprendre, mais sera plus proche de la programmation d'un utilitaire comme ToolManager.

Le programme ouvre une fenêtre, la déclare comme AppWindow, et ajoute un intitulé "List" au menu "Outils" du Workbench (c'est l'AppMenu). On peut prendre une icône (ou plusieurs avec la multisélection) et ensuite, soit la lâcher sur l'AppWindow, soit sélectionner l'entrée "List" du menu "Outils". Dans les deux cas, les noms des icônes lâchées/sélectionnées seront affichés ; dans le cas de l'AppMenu, on cherchera le chemin des icônes et on appellera la commande "C:List" avec ces chemins. On aura ainsi le contenu du tiroir où se trouve chaque icône.

C
C
C
C

Vous avez probablement entendu parler de MyMenu et de ParM, qui permettaient de lancer un programme par un menu du Workbench, avec le système 1.3. Le 2.0 a intégré directement dans sa workbench.library des fonctions appropriées, il n'y a pas besoin de "bricoler" des utilitaires et de rectifier les bibliothèques du système. Le logiciel du DP de Nico François, ToolsDeamon, rectifie par exemple des vecteurs de l'intuition.library pour afficher des sous-menus dans le menu "Outils", ce qui n'est pas prévu par le 2.0 (ni le 3.0).

Le Workbench 3.0 a apporté une nouvelle fonction à la workbench.library : WBInfo (lock, name, screen). Elle permet d'obtenir la fenêtre d'information du Workbench sur un fichier quelconque, sans passer par le Workbench et son menu "Icônes/Information...". Browser II s'en sert en 3.0 et affiche la fenêtre d'information sur son propre écran.

Je conseille à tous ceux qui sont intéressés par la programmation système de se procurer les RKM sous forme de fichiers (appelés RKRM il me semble), dans le domaine public. Il existe aussi le "C Manual", qu'on peut trouver par exemple sur Aminet, répertoire dev/c sous le nom ACM.lha (443 ko).

En conclusion

Un des intérêts de l'AppIcon est également de pouvoir retailler l'écran du Workbench (avec ScreenModePrefs) et de garder l'application dans un coin sous forme d'AppIcon. L'iconification sous forme de fenêtre, comme le font AZ ou VirusX, ne permet pas de changer la résolution du Workbench, car il demande de fermer les fenêtres non-Workbench. On doit dans ce cas fermer les programmes correspondants, comme le CLI/Shell par exemple. Avec un programme DP comme KingCON (une console avec historique des commandes et beaucoup de possibilités variées), on peut garder son Shell sous forme iconifiée, changer le nombre de couleurs et la taille du Workbench, et rouvrir son Shell ensuite.

Voici un exemple de programmes qui utilisent les AppIcons : ToolManager, Browser II, XOper, Excellence!, KingCON, IconEdit, livré avec le 2.0, est une AppWindow. Excellence! ajoute également un AppMenu. On peut éditer un fichier en le lâchant sur l'AppIcon ou en sélectionnant l'entrée "Excellence!" du menu "Outils". Avec Browser II, le fait de lâcher une icône sur son AppIcon ouvre le répertoire correspondant à celui de l'icône. En lâchant un fichier sur la fenêtre KingCON, le nom et le chemin du fichier s'inscrit sur la ligne de commande.

Bref, ces trois fonctions de la workbench.library permettent une ouverture du Workbench vers les applications, en ajoutant certaines possibilités aux programmes. Cependant, on pourrait imaginer par exemple une fonction pour ouvrir directement un répertoire quelconque sur le Workbench. Le Workbench 3.0 s'avance déjà dans cette direction avec la fonction WBInfo(). Il est à noter que les derniers développements de X Window (sur Unix) et de Windows intègrent des possibilités qui existent déjà depuis le Workbench 2.0 sur Amiga.


[Retour en haut] / [Retour aux articles]