Utilisation des rappels
Les applications qui utilisent des méthodes d'entrée doivent fournir des fonctions de rappel afin que l'éditeur de méthode d'entrée (IMED) puisse communiquer avec l'utilisateur. Le type de méthode d'entrée que vous utilisez détermine si les rappels sont nécessaires ou non. Par exemple, la méthode d'entrée à un octet n'a pas besoin de rappels, mais la méthode d'entrée japonaise les utilise abondamment avec la fonction de pré-édition. La fonction de pré-édition permet le traitement des caractères avant qu'ils ne soient validés dans l'application.
Lorsque vous utilisez une méthode d'entrée, seule l'application peut insérer ou supprimer des données de pré-édition et faire défiler le texte. Par conséquent, l'écho des frappes est réalisé par l'application à la demande de la logique de la méthode d'entrée par le biais de rappels.
Lorsque vous entrez une frappe, l'application appelle la sous-routine IMFilter. Avant de revenir, la méthode d'entrée peut appeler la fonction de rappel d'écho pour insérer de nouvelles frappes. Une fois qu'un caractère a été composé, la sous-routine IMFilter le renvoie et les frappes sont supprimées.
Dans plusieurs cas, la logique de la méthode d'entrée doit rappeler le client. Chacun d'eux est défini par une action de rappel. Le client spécifie quel rappel doit être appelé pour chaque action.
Les types de rappels sont décrits comme suit :
- Dessin de texte
L'IMED utilise des rappels de texte pour dessiner tout texte de pré-édition actuellement en cours de composition. Lorsque les rappels sont nécessaires, l'application et l'IMED partagent une mémoire tampon à une seule ligne dans laquelle l'édition est effectuée. L'IMED fournit également des informations sur le curseur que les rappels présentent ensuite à l'utilisateur.
Les rappels de texte sont les suivants :
- IMTextDraw
- Demande au programme d'application de dessiner la chaîne de texte.
- IMTextHide
- Indique au programme d'application de masquer la zone de texte.
- IMTextStart
- Informe le programme d'application de la longueur de l'espace de pré-édition.
- IMTextCursor
- Demande au programme d'application de déplacer le curseur de texte.
- Indicateur (statut)
L'IMED utilise des rappels d'indicateur pour demander le statut interne. La sous-routine IMIoctl fonctionne avec la commande IMQueryIndicatorString pour extraire la chaîne de texte qui fournit le statut interne. Les rappels d'indicateur sont similaires aux rappels de texte, sauf qu'au lieu de partager une mémoire tampon à une seule ligne, une valeur de statut est utilisée.
Les rappels d'indicateurs sont les suivants :
- IMIndicatorDraw
- Indique au programme d'application de dessiner l'indicateur de statut.
- IMIndicatorHide
- Indique au programme d'application de masquer l'indicateur de statut.
- IMBeep
- Indique au programme d'application d'émettre un signal sonore.
- Auxiliaire
L'IMED utilise des rappels auxiliaires pour demander des dialogues complexes avec l'utilisateur. Par conséquent, ces rappels sont plus sophistiqués que les rappels de texte ou d'indicateur.
Les rappels auxiliaires sont les suivants :
- IMAuxCreate
- Indique au programme d'application de créer une zone auxiliaire.
- IMAuxDraw
- Indique au programme d'application de dessiner une zone auxiliaire.
- IMAuxHide
- Indique au programme d'application de masquer une zone auxiliaire.
- IMAuxDestroy
- Indique au programme d'application de détruire une zone auxiliaire.
La structure IMAuxInfo définit le dialogue requis par l'IMED.
Le contenu de la zone auxiliaire est défini par la structure IMAuxInfo, qui se trouve dans la bibliothèque /usr/include/im.h.
Contenu de la sous-routine Descriptif IMTitle Définit le titre de la zone auxiliaire. Il s'agit d'une chaîne multi-octets. Si title.lenest égal à 0, aucun titre ne s'affiche.IMMessage Définit une liste de messages à présenter. Dans la perspective des applications, la structure IMMessage doit être traitée comme du texte informatif, en sortie uniquement. Toutefois, certaines méthodes d'entrée utilisent la structure IMMessage pour mener un dialogue avec l'utilisateur dans lequel les événements de touche reçus par la sous-routine IMFilter ou IMLookupString sont traités comme des entrées de la méthode d'entrée. Dans de tels cas, la méthode d'entrée peut traiter la structure IMMessage comme une liste sélectionnable ou une zone d'invite. Dans les deux cas, l'application affiche uniquement le contenu du message. La sous-routine IMProcessAuxiliary n'a pas besoin d'être appelée si la structure IMSelection ne contient pas de structures IMPanel et que la zone IMButton a la valeur null.
message.nlineindique le nombre de messages contenus dans la structure IMMessage. Chaque message est supposé être à une seule ligne. Les caractères de contrôle, tels que \t, ne sont pas reconnus. Le texte de chaque message est défini par la structure IMSTRATT, qui se compose à la fois d'une chaîne multi-octets et d'une chaîne d'attributs. Chaque attribut est mappé un à un pour chaque octet de la chaîne de texte.IMButton Indique les boutons possibles qui peuvent être présentés à un utilisateur. La zone IMButton indique à l'application quels contrôles d'interface utilisateur doivent être fournis pour l'utilisateur final. Le membre du bouton est de type int et peut contenir les masques suivants : - IM_OK
- Présente le bouton OK.
- IM_CANCEL
- Présente le bouton CANCEL.
- IM_ENTER
- Présente le bouton ENTER.
- IM_RETRY
- Présente le bouton RETRY.
- IM_ABORT
- Présente le bouton ABORT.
- IM_YES
- Présente le bouton YES.
- IM_NO
- Présente le bouton NO.
- IM_HELP
- Présente le bouton HELP.
- IM_PREV
- Présente le bouton PREV.
- IM_NEXT
- Présente le bouton NEXT.
L'application doit utiliser la sous-routine IMProcessAuxiliary pour communiquer la sélection du bouton.
IMSelection Définit une liste d'éléments, tels que des idéogrammes, qu'un utilisateur final peut sélectionner. Cette structure est utilisée lorsque la méthode d'entrée souhaite afficher un grand nombre d'éléments mais ne souhaite pas contrôler la manière dont la liste est présentée à l'utilisateur. La structure IMSelection est définie comme une liste de structures IMPanel. Toutes les applications ne prennent pas en charge les structures IMSelection dans la structure IMAuxInfo. Les applications qui prennent en charge les structures IMSelection doivent effectuer l'opération IM_SupportSelection à l'aide de la sous-routine IMIoctl immédiatement après la création de Objet IMT. En outre, toutes les applications ne prennent pas en charge plusieurs structures IMPanel. Par conséquent, les zones
panel_rowetpanel_colsont limitées à un paramètre de 1 par toutes les méthodes d'entrée.Chaque structure IMPanel se compose d'une liste de zones
IMItemqui doit être traitée comme une liste bidimensionnelle de lignes/colonnes dont les dimensions sont définies commeitem_rowfoisitem_col. Siitem_colest 1, il n'y a qu'une seule colonne. La taille de la structure IMPanel est définie en octets. Chaque élément de la structure IMPanel est inférieur ou égal àpanel->maxwidth.L'application doit utiliser la sous-routine IMProcessAuxiliary pour communiquer une ou plusieurs sélections utilisateur. La valeur IM_SELECTED indique l'élément sélectionné. La valeur IM_CANCEL indique que l'utilisateur souhaite mettre fin au dialogue auxiliaire.
hint Utilisé par la méthode d'entrée pour fournir des informations sur le contexte de la structure IMAuxInfo. La valeur IM_AtTheEventindique que la structure IMAuxInfo est associée au dernier événement transmis à la méthode d'entrée par la sous-routine IMFilter ou IMLookupString. D'autres astuces permettent de distinguer lorsque plusieurs structures IMAuxInfo sont affichées.status Utilisé par la méthode d'entrée pour le traitement interne. Cette zone ne doit pas être utilisée par les applications. Chaque structure IMAuxInfo est indépendante des autres. La méthode utilisée pour afficher les membres est déterminée par l'appelant de la méthode d'entrée. La structure IMAuxInfo est utilisée par le rappel IMAuxDraw.