Retour au sommaire

SourceServer
ForumServer

DesignServer

Accueil CanalOpenSource


Liens :

www.pmarty.com
www.4D.fr
www.fyi.4D.fr
www.ajar.ch
www.4DToday.com

 

Editeur d'interface utilisateur

Cet éditeur est une première version récente (Mars 2002). Le projet en cours aboutira à un éditeur beaucoup plus sophistiqué. L'éditeur actuel permet de paramétrer le comportement du formulaire [Forms]malp_ListH et des éléments d'interface générique du formulaire [Data]EntryData.

Ouvrez l'éditeur d'interface utilisateur


Vous avez ici les paramètres de l'Explorateur. Avant de définir ceux de Contact, je vais détailler ces paramètres.

Sur l'onglet liste, vous allez pouvoir définir un certains nombre de paramètres. Tous ne sont pas nécessaires, voyons seulement ceux dont vous avez besoin pour exploiter votre table Contact.

Le champ "Nom de donnée" permet d'indiquer quel est le nom de donnée qui sera géré par ce paramétrage. Juste en dessous, on désigne la table cible qui sera chargée et manipulée.

Formulaire liste n'a pour l'instant qu'une saisie possible : malp_ListH, c'est le formulaire liste prêt pour être utilisé par uid_ .

Titre de fenêtre reçoit comme libellé le titre qui sera affiché dans la barre de titre.

Définition de liste et champs : ce champ reçoit le nom de la définition de champs et de listes tel que nous l'avons vu précédemment.

Barre de menus : ce champ reçoit le nom de la barre de menu qui doit être affichée tel qu'elle a été nommée dans l'éditeur de menus.

Editeur de recherche rapide : cet outil est en cours de redéveloppement. Il n'est pas exploitable pour le moment.

Liste hiérarchique : ce champ reçoit le nom de la méthode qui doit être executée au chargement de la liste pour renseigner la liste hiérarchique qui se trouve dans le formulaire [Forms]malp_ListH.

Sur chargement : ce champ reçoit le nom de la méthode qui doit être executée au chargement de la liste.

Vous constatez que dans les champs Liste hiérarchique et Sur chargement, c'est une méthode recevant un paramètre qui est appelée. Ce n'est pas une obligation, c'est ma manière de développer. Il m'arrive souvent de regrouper dans une méthode du code qui est executé en fonction d'un sélecteur.

Ouvrez la méthode Explorer et regardez comment elle est construite. Cette méthode contient tout le code spécifique qui doit être ajouté pour manipuler les données et l'interface utilisateur en liste et en saisie. Plusieurs parties de ce code peuvent être copiées collées comme nous le verrons ultérieurement.

La méthode Explorer sera entièrement décortiquée et analysée comme la méthode cos_ qui contient le code spécifique de l'interface utilisateur de Canal OpenSource. Après cette analyse vous en saurez beaucoup plus sur xShell2002.

Créez votre propre définition d'interface utilisateur


La création de votre définition d'interface se passe de manière identique à celle des autres éditeurs. Le clic sur le bouton d'ajout vous positionne sur le champ qui vous permet de nommer votre définition et attend la sortie du champ pour valider l'enregistrement.

Observez ce qui a été saisi dans cette nouvelle définition. !ctc est notre nom de donnée par défaut comme il a été indiqué dans le fichier DBPrp.TXT. La table cible est la table [Contact]. Le formulaire liste est malp_ListH, il n'y en a pas d'autre possible pour l'instant. La défnition de liste et champs a été choisie dans le pop up menu à droite du champ, comme la barre de menu.
Quant aux champs "Liste hierarchique" et "Sur chargement", ils ont respectivement reçu les noms de méthodes 4D qui vont être créées et codées.

Créez les méthodes ContactListH et ContactSurChargement

Ces deux méthodes créées, voyons voir ce qui peut être écrit dedans.

Sur chargement, tout le fichier Contact va être chargé et présenté dans la liste AreaList Pro.

La liste hiérachique va présenter toutes les villes qui existent dans la table et lors d'un clic sur une ville, les contacts qui vivent dans cette ville seront affichés.

Dernière précision : ContactListH sera appelée avant ContactSurChargement.

Méthode ContactSurChargement :

rcd_GetIndexByDataName (rcd_GetDataName ;"French";Opt )
rcd_GetData (ptrData)
alp_UpDate (OnSelection )
uid_SetWndStatus (str_Get ("RecordNumberInList")+Chaine(Enregistrements trouves(rcd_CurrentDataTable->)))


La méthode rcd_getDataName retourne le nom de donnée courant. Ce nom a été renseigné par uid_ en fonction de la définition ci-dessus. Il est égale à "!ctc"

La méthode rcd_GetIndexByDataName sélectionne tous les index dont le nom de donnée est passé en paramètre.

Le nom de donnée d'un enregistrement de la table [Contact] est stocké dans la table [Index].

La méthode reçoit aussi comme information la langue qui doit être sélectionnée. Le dernier paramètre optionnel demande un contrôle d'accès à la ressource en fonction des droits de l'utilisateur connecté. L'utilisateur ne verra que les enregistrements qu'il a le droit de voir.


La méthode rcd_GetData retourne tous les enregistrements liés à la sélection courante de la table [Index]. Cela correspond à la commande SELECTION RETOUR.

rcd_GetData
prend comme paramètre un pointeur sur la table dont les enregistrements doivent être retournés, ici il s'agit de [Contact].

uid_
s'est chargé de renseigner la variable d'environnement ptrData qui contient le pointeur sur la table courante. Vous pouvez obtenir ce pointeur avec la méthode rcd_GetCurrentDataTable et fixer ce pointeur avec la méthode rcd_SetCurrentDataTable .


La méthode alp_UpDate commande la mise à jour de la liste AreaList Pro.

La constante qui lui est passée en paramètre demande une action supplémentaire lors de la mise à jour : le contrôle du nombre d'enregistrement dans la sélection courante pour afficher ou masquer les quatres boutons dédiés à la navigation dans les sous-sélections.

Rappelons que AreaList Pro est limité en affichage à la propre limite des tableaux 4D c'est-à-dire 32000. Il est de plus possible de réduire ce nombre dans l'éditeur de liste.

La méthode uid_SetWndStatus va affecter la variable qui se trouve dans le bas du formulaire malp_ListH et qui fait office de barre de statut. Dans ce cas précis, c'est le nombre d'enregistrements qui va être affiché. La variable d'environnement rcd_CurrentDataTable est affectée de la même manière que ptrData. Elle contient un pointeur sur la table courante.

Sachez qu'en quatre lignes de code vous avez sélectionné vos enregistrements en fonction d'un nom de données, de la langue et des droits de l'utilisateur et que vous les avez affichés dans la liste en indiquant leur nombre.

J'ajoute qu'il y a eu une séparation supplémentaire faite sur l'état de l'enregistrement, car dans xShell2002, les enregistrements ne sont pas supprimés physiquement, ils sont marqués comme ayant été jeté à la corbeille. rcd_GetIndexByDataName n'affiche pas les enregistrements qui sont dans la corbeille.


Méthode ContactListH :

rcd_GetIndexByDataName (rcd_GetDataName ;"French";Opt )
rcd_GetData (ptrData)

$ptr:=rcd_GetFieldPointer (ptrData;"Ville")
TABLEAU TEXTE(arrTxtVille;0)
VALEURS DISTINCTES($ptr->;arrTxtVille)

TABLEAU TEXTE(arr_DataList;1)
arr_DataList{1}:="Villes"

hls_SetParam
hls_SetOnClic ("ContactListH_SurClicSouris")
C_ENTIER LONG(hls_vl1;hls_vl2;hls_vl3)
hls_vl1:=0
hls_vl2:=0
hls_vl3:=0
hls_SetParam (Vrai;1;15446)
hls_Set (->hls_vl2;->arrTxtVille)
hls_SetParam (Vrai;1;15448)
hls_Set (->hls_vl1;->arr_DataList{1};->Refliste;->hls_vl2;Faux)
REDESSINER LISTE(hls_vl1)
CHOIX SAISISSABLE(hls_vl1;Faux)

SELECTIONNER ELEMENT(hls_vl1;1)
hls_SetParam (Vrai;1;15446)


Les deux premières lignes de ce code sont identiques à la méthode précédente.

La méthode rcd_GetFieldPointer reçoit en paramètre un pointeur de table et le nom d'un champ pour retourner un pointeur sur ce champ. Vous n'êtes pas obligé d'utiliser cette syntaxe dans votre code. Moi je l'utilise pour ne pas être lié à mes tables et pour pouvoir transporter du code avec 4D Insider sans entrainer de table. Vous verrez très rarement dans le code de xShell2002 des appels directs à un champ ou à une table. $ptr est un pointeur sur le champ [Contact]Ville.
La méthode rcd_GetFieldPointer ne peut pas être utilisée si la table n'a pas été déclarée avec rcd_StructureDefinition .

A partir de la sélection d'enregistrement, on construit un tableau des valeurs distinctes des villes de nos contacts.

Le tableau arr_DataList va être passé en paramètre à la méthode hls_Set pour construire la liste hiérachique des villes.

Les méthodes du thème "Liste hierarchiques" ne sont pas encore publiées. C'est un code que je veux revoir avant de le mettre à disposition. Mais il est utilisé dans xShell2002 et dans notre cas aussi.

hls_SetParam fixe les paramètres généraux de la liste.

hls_SetOnClic fixe la méthode à executer lors du clic souris. Ici elle reçoit comme paramètre "ContactListH_SurClicSouris".
C'est une méthode supplémentaire qu'il va falloir écrire, elle est décrite ci-après.

hls_Set construit la liste ou la sous liste selon les paramètres qui lui sont passés. Le premier appel construit la liste hls_vl2 qui reçoit la liste des villes. Le deuxième appel rattache hls_vl2 à la liste principale hls_vl1.



Méthode ContactListH_SurClicSouris

Cette dernière méthode va être appelée chaque fois que l'utilisateur cliquera sur une ville pour obtenir les contacts correspondants.


rcd_CloseListTrash
rcd_GetIndexByDataName (rcd_GetDataName ;"French";Opt )
rcd_GetData (ptrData)

$List:=hls_GetText (->hls_vl1)
Si ($List#arr_DataList{1})  `
   sch_ (rcd_GetFieldPointer (ptrData;"ville");$List;"=";opt)
Fin de si

alp_UpDate (OnSelection )
uid_SetWndStatus (str_Get ("RecordNumberInList")+Chaine(Enregistrements trouves(rcd_CurrentDataTable->)))


Dans cette dernière méthode, vous retrouvez des lignes de code déjà vues dans la méthode ContactSurChargement.

Il y a la méthode rcd_CloseListTrash qui apparaît. Dans le formulaire malp_ListH, il y a le bouton qui permet de jeter des enregistrements à la corbeille et il y a la corbeille. Cette dernière s'ouvre en cliquant dessus. Cette action a pour effet d'afficher tous les enregistrements qui sont dans la corbeille. Le méthode rcd_CloseListTrash est appelée lors du clic dans la liste hiérarchique pour refermer la corbeille.

hls_GetText retourne le texte de l'élément cliqué.

S'il ne s'agit pas de "Ville" qui est notre liste, on recherche dans la table [Contact] les contacts de la ville choisie.

La méthode sch_ reçoit comme premier paramètre un pointeur sur le champ et comme deuxième paramètre la chaine de caractère à rechercher. La méthode sch_ a d'autres syntaxes qui seront développées dans un chapitre ultérieur.

Nous allons passer maintenant dans l'onglet "Saisie" de l'éditeur d'interface et voir le travail à fournir en structure pour pouvoir saisir les contacts. Suite >>



Retour | Haut de page