4 Autres Personnalisations de l'interface Utilisateurs
Ce chapitre traite de personnalisations connexes à FORMS (c'est-à-dire pouvant être utilisé depuis FORMS, ou pouvant exploiter FORMS)
4.1 UIManager
4.1.1 Le composant UIManagerContext
Le composant UIManager permet d'obtenir les données de contexte de l'interface utilisateur. Les fonctions qu'il implémente peuvent n'avoir de sens que dans certains contextes
 
4.1.1.1 Fonctions génériques
.GetCmd as Integer : nom interne de la commande en cours de traitement, le cas échéant. Si la commande est une commande de menu, le nom de la commande correspond au numéro absolu de la commande précédé d'un « # ». Si c'est une commande standard, le nom corresponds à celui de cette commande.
.GetObject as MegaObject : objet impacté par la commande
.GetContainer as MegaCollection : collection impactée par la commande
.GetSelection as MegaCollection : selection impactée par la commande, lorsque la commande est lancée depuis une selection multiple.
.GetDefaultPermission : CRUD de l'objet ou de la collection impactée par la commande
.GetTargetClass : identifiant de la MetaClasse cible de la commande, utilisée en particulier dans les commandes de creation.
.SetCompleted(optional Name as String,optional Value as String) As String: indique que la commande s'est déroulée normalement; utilisée en particulier dans les commandes de suppression. Name : Value, s'ils sont présents, sont insérés dans le JSON décrivant le résultat de la commande. La valeur renvoyée est le JSON décrivant le résultat de la commande.
.IsMultiSelection as Boolean : indique sin True que la commande porte sur une multiselection ; auquel cas GetSelection renvoie la sélection concernée, et GetObject n'est pas exploitable.
.IsContainer: indique si True que la commande ne porte pas sur un objet, mais sur une collection. Auquel cas on accèdera à l'élément de contexte par GetContainer au lieu de GetObject ;
.GetCmdNumber : numéro de la commande, le cas échéant. Correspond au numéro de commande défini dans l'ajout de commande de menu. Vaut 0 dans le cas d'une commande standard.
.GetAttributeControl as MegaObject : attributeControl depuis lequel la commande a été lancée, le cas échéant.
.Dirty :
.GetCreationContext
.GetLinkOption
.AddResultObject
.GetCreateMode
 
4.1.1.2 Utilisation dans une fonction de construction de menu
Dans ce contexte d'utilisation les fonctions suivantes sont également disponibles
.CmdAdd(CmdNumber as Integer,Name as String,Options as String)
Cette function permet d'insérer un élément de menu
CmdNumber : numéro de la commande ; ce numéro sera utilisé dans Context.GetCmdNumber lors de l'appel de l'exécution d'une commande de menu. Ce numéro doit être positif et non nul ; il est conseillé d'utiliser des numéros consécutifs et de valeur minimale. Lorsqu'on définit des sous-menu popup, les numéros des éléments de menu popup ne doivent pas coïncider avec des numéros du menu principal.
Name : nom de la commande. Ce nom ne peut pas être vide.
Options : chaîne de caractère contenant les options de l'élément de menu. Cette chaîne est optionnelle, de la forme « opt1=value1;opt2=Value2 » et peut contenir tout ou partie des éléments définis ci-dessous :
Picture=<Field> : défini au moyen d'un identifiant de MetaPicture l'image associée à l'élément de menu
Category=<String> : précise la catégorie de la commande. Les catégories possibles sont :
Input ou Analysis : commandes destinées aux mise à jour des collections
Display ou Consult : commandes d'affichage de résultat
Action ou Function : actions sur l'objet
Explore : commandes d'exploration de l'objet
Description : commandes de diagnostic sur l'objet
Entry : commandes de mise à jour
Documentation ou Publication : commandes de documentaion de l'objet
Container ou Shortcut : commandes de creation de racourcis
New : commande “nouveau”, généralement présentées dans un menu popup
Link : commande “relier”, généralement présentées dans un menu popup
Clipboard : commande relative au clipboard
Manage : commandes d'administration techniques, généralement présentées dans un menu popup.
Les catégories suivantes sont destinées aux commandes figurant dans la barre de menu du bureau windows et se positionnent dans les menus popup correspondants.
File.Export, File.Import, File.Synchronize, Reverse, Localisation, Synchronize
 
Il est possible de faire figurer les options suivante dans la catégories, en lui concaténant,séparées par des « , » et sans espaces :
IsStandard : la commande remplace la commande standard de même numéro ; les commandes standard remplaçables sont :
RPVC_UNLINK (Unlink) 16
RPVC_DESTROY (Destroy) 17
RPVC_CREATE (Create) 18
RPVC_LINK (Link) 19
RPVC_COPY (Copy) 23
RPVC_PASTE (Paste) 24
RPVC_QUERYCREATE 25
RPVC_ORDER (Reorder) 26
RPVC_WHEREUSED 33
RPVC_ADDTOFAVORITE 34
RPVC_EXPLORE (Explore) 35
 
IsOpenCommand : commande sélectionnée par défaut
NoEnumListView : commande n'apparaissant pas dans les éléments de listviews
IsEnumListView : commande n'apparaissant que dans les éléments de listview
IsToolBarCommand : commande apparaissant dans les toolbar génériques
IsDesktop : commande de bureau
NoAccessRightCheck : commande apparaissant même si sa catégorie est filtrée.
ForComponent : commande n'apparaissant que sur les composants dans le cadre des menus composants/référence
ForReference : commande n'apparaissant que sur les références dans le cadre des menus composants/référence
 
Enfin, il est possible de donner la catégorie sous forme numérique, en utilisant une chaîne de la forme « #nnn » où nnn est un nombre décimal.
Order=<Number> : ordre de la commande; ce parametre permet de trier les commandes au sein d'une catégorie
Style=<String> : determine le style de la commande. Le Style principal peut être :
PUSHBUTTON : commande standard
POPUP : sous-menu popup
CHECKBOX : commande munie d'une case à cocher
RADIOBUTTON : commande munie d'une case à cocher exclusive
 
Les styles secondaires suivant de la commande peuvent être concaténés, séparées par des « , » et sans espaces :
AFTERSEPARATOR : la commande est précédée d'un séparateur
BEFORESEPARATOR : la commande est suivie par un séparateur
CENTER : la commande est centrée lorsqu'elle est présentée dans une toolbar
RIGHT : la commande est alignée à droite lorsqu'elle est présentée dans une toolbar
DYNAMIC : le menu popup est calculé dynamiquement.
Group=<Number> : permet de définir un groupe de commande, afin en particulier de définir des commandes à cochage exclusifs (radiobuttons) ; le nombre transmis est le numéro de la première commande du groupe.
Il est possible de donner le style sous forme numérique, en utilisant une chaîne de la forme « #nnn » où nnn est un nombre décimal.
Owner=<String> : détermine le type d'objet auquel peut s'appliquer la commande. Peut être OBJECT, CONTAINER ou CONSTITUENT.
MaxPopupIndex=<Number> : lorsque la commande est un popup, il convient de donner une valeur maximale de numéro commande pour les éléments de ce popup.
Status=<String> : Status initial de la commande de Menu. Si ce status peut changer dans le temps, il est préférable d'utiliser directement la fonction SetCmdStatus dans la fonction de vérification du menu (voir ci-dessous) avec le même paramètre.
IsAnywhere=0 ou 1 : indique si 1 que la commande est affichée en mode WEB. Sinon elle ne sera visible que dans le client windows. Par défaut, la commande est affichée en mode WEB, donc seule l'option IsAnywhere=0 est nécessaire.
 
.GetCmdCollection
.GroupID
 
4.1.1.3 Utilisation dans une fonction de vérification de menu
.GetCmdStatus(CmdNumber as Integer) as String
.SetCmdStatus(CmdNumber as Integer,Status as String) : ces fonctions sont accessibles lors d'une phase de verification de menu
Status est une chaîne de caractère contenant les caractères majuscules suivant :
H : (Hidden) : la commande est cachée
C (Checked) : la commande est cochée
D ou E (Enabled ou Disabled) : la commande est autorisée ou interdite (grisée)
4.1.1.4 Utilisation dans UIManager_Permission
.CheckUIPermission as Boolean : indique si False que le calcul de permission surcharge le calcule de l'UIPermission
4.1.1.5 Utilisation dans UIManager_IsAvailable
.GetDefaultAvailability : valeur par défaut de la validité de la commande.
4.1.2 Définition de la personnalisation par UIManager
 
UIManager_Capabilities : définition de la portée de l'UIManager
4.1.3 Fonctionnalités personnalisables par un UIManager
4.1.3.1 Surcharge du calcul du CRUD d'un élément
UIManager_Permission
4.1.3.2 Création interactive d'un élément dans une collection :
Function AskCreation(Container as MegaCollection,in Service as Currency)
Function DoCreation(Container as MegaCollection,in Service as Currency,in Mode as Integer)
 
Ou
UIManager_IsAvailable(UIManagerContext)
UIManager_Invoke(UIManagerContext)
avec UIManagerContext.CmdName = «Create»
 
 
4.1.3.3 Insertion interactive d'un élément déjà existant dans une collection (Connect ou Link).
 
Function AskLink(Container as MegaCollection,in Service as Currency,in Mode as Integer) As Boolean
Function DoLink(Container as MegaCollection,in Service as Currency,Bug As Bug) As MegaCollection
 
Ou
UIManager_IsAvailable(UIManagerContext)
UIManager_Invoke(UIManagerContext)
avec UIManagerContext.CmdName = «Link»
 
4.1.3.4 Réordonner une collection
 
Function AskReorder(Container as MegaCollection,in Service as Currency,in Mode as Integer) As Boolean
Function DoReorder(Container as MegaCollection,in Service as Currency,Bug As Bug) As Boolean
 
Ou
UIManager_IsAvailable(UIManagerContext)
UIManager_Invoke(UIManagerContext)
avec UIManagerContext.CmdName = «ReOrder»
 
4.1.3.5 Supprimer ou Délier un élement
UIManager_IsAvailable(UIManagerContext)
UIManager_Invoke(UIManagerContext)
avec UIManagerContext.CmdName = «Destroy» ou «Unlink»
 
4.1.3.6 Surcharger un Menu
UIManager_CmdInit
UIManager_CmdCheck
UIManager_Invoke
 
4.1.3.7 Surcharger le Paste/Drop
Function CanPaste(Context as MegaPastContext,Target as MegaCollection) As Boolean
Function DoPaste(Context as MegaPastContext,Target as MegaCollection) As Boolean
 
4.2 Personnalisation des menus
La création de commandes de menus se fait au moyen d'un MetaCommand Manager. Un MetaCommand Manager est associé à une Macro qui définit des commandes à insérer dans le Menu et implé mente leur exécution.
4.2.1 Implémentation compatible
CmdCount
4.2.2 Implémentation HOPEX
Cette nouvelle interface permet une définition dynamique des commandes de menu, contextualisable, et adaptée aux menus popup spécifiques qui peuvent ainsi être calculés a posteriori et donc ne pas grever le temps d'ouverture initiale du menu.
A la différence des anciennes implémentations, les fonctions à implémenter utilisent un objet contextuel adapté : le composant UIManagerContext, décrit ci-dessus