|
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
|