Fonctionnement du volet de navigation
1.3 Taille du volet de navigation
1.4 Zone des fenêtres de l’application
2. Intégrer son application dans le volet de navigation
2.1 Quelques Règles de fonctionnement
2.1.1 Menu général et Menu graphique :
2.1.2 Notion de « contexte d’application »
2.1.3 Affichage d’un bouton pour une application :
2.2 Création automatique du menu général
3.1 Une application avec menu texte et menu graphique
3.2 Une application avec menu texte et fenêtre standard
3.3 Application avec menu texte uniquement
3.4 Lancement différé d’une application
1. Concept de présentation
1.1 Zone de menu texte
Chaque application devra présenter un menu texte qui facilitera la navigation et permettra de trouver les options difficilement accessibles depuis le menu graphique.
Oxygène permet d’ « exporter » le menu graphique en un menu texte qui reprendra toute les entrées des menus contextuels du menu. Ce menu peut ensuite être modifié manuellement et fourni avec l’application.
Il est fortement recommandé de ne pas se satisfaire de ce menu dont la présentation est très aléatoire, mais de créer un menu
texte « intelligent » et ergonomique : celui-ci pourra mettre en avant les opérations les plus fréquentes en gestion, faciliter la prise en main par des utilisateurs novices …
Le menu exporté par défaut en compta est peu ergonomique
1.2 Boutons de sélection
La zone des boutons de sélection permet de naviguer entre les applications. Elle contient un bouton pour chaque application, plus un bouton pour la page d’accueil Oxygène.
La zone des boutons peut être réduite en hauteur de manière à n’afficher qu’un nombre limité de boutons. Dans cette première version, la position des boutons n’est pas sauvegardée.
Chaque bouton est constitué de deux icônes (icône de bouton affiché, plus icône de bouton caché), et d’un libellé extrait du libellé du menu texte associé.
Quand on clique sur le bouton d’une application, le menu texte de l’application apparaît, ainsi que les fenêtres ouvertes par cette application.
1.3 Taille du volet de navigation
La largeur du volet de navigation peut être modifiée en bougeant la barre séparatrice verticale. Votre choix sera mémorisé dans la table PREFL de la base $$.
L’icône en forme de chevron placée en bas à droite du
volet de navigation permet
de réduire d’un coup la taille du volet de navigation, ne laissant que
les icônes visibles, afin de libérer le maximum de place à l’application.
Une fois cette réduction effectuée, une autre icône permet de retrouver une taille normale.
1.4 Zone des fenêtres de l’application
Chaque application peut définir un menu graphique, qui sera considéré comme la fenêtre principale de l’application. Ce menu est cependant facultatif : il est possible de définir une application contenant juste un menu texte (la zone de droite est vide par défaut), ou bien d’utiliser une fenêtre standard comme fenêtre principale de l’application.
Ici, la fenêtre d’application est une fenêtre standard contenant sur une page Web
2. Intégrer son application dans le volet de navigation
2.1 Quelques Règles de fonctionnement
2.1.1 Menu général et Menu graphique :
Un menu général est un fichier .men situé dans le répertoire "bin".
Un menu graphique est un écran avec l’extension .MNG, lancé au chargement de sa dll (dll d'extension .run avec un objet "auto").
Note : Si la fenêtre a l’extension .ECR, elle doit définir MENUGRPH ou MENUGRPH2 comme modèle de test de l’écran. (Menu Option / sélection du type de modèle dans l’éditeur d’écran Oxygène). Il est à noter que toute fenêtre peut donc devenir l’écran principal de l’application.
2.1.2 Notion de « contexte d’application »
Toutes les fenêtres lancées par le menu graphique ou le menu texte font partie du contexte de l’application, et sont visible uniquement quand l’application est active (quand on clique sur le bouton de l’application).
Les menus lancés au démarrage, sont affichés sous le bouton Oxygène
Les fenêtres lancées au démarrage par des .run, restent invisible si elles n’ont pas le même nom qu’un des .men associé à un bouton.
Note : Si une application est composée d’une fenêtre lancée automatiquement au démarrage d’Oxygène, un menu texte doit être créé du même nom que l’écran pour que celui-ci s’affiche.
2.1.3 Affichage d’un bouton pour une application :
Pour forcer un menu à s’ancrer dans le volet de navigation dès le démarrage, il faut ajouter « MENU_APPLICATION » à l’état du menu.
Attention : l’éditeur Oxygène ne permet pas encore de définir cette option. Il faut ouvrir l’écran avec un éditeur de texte (comme le bloc-notes Windows). Modifier et sauver ce même écran par la suite avec Oxygène retirera l’option.
MenuGeneral :
{
(...)
Etat: LANCER, OUVERT, LIVRE, MENU_APPLICATION ;Cette option peut être utilisée pour définir qu’une application est composée seulement d’un menu texte (panneau de droite vide au lancement).
Sinon, quand Oxygène rencontre un menu général du même nom qu’un menu graphique, il crée un bouton et considère qu’il s’agit d’une application.
Note : bien qu’il ne soit pas indispensable d’ajouter l’option MENU_APPLICATION à son menu principal, ceci est fortement recommandé car le démarrage d’Oxygène s’en trouve amélioré.
- Les icônes facultatives à afficher pour chaque
application sont au format TIF et doivent êtres copiées dans le répertoire
bin :
- Nom_appli.tif : icône du bouton (taille maxi 30x30px)
- Nom_appli_small.tif : icône affichée quand le bouton est caché (taille maxi 24x24px)
Note : pour une utilisation en TSE en mode 256 couleurs, il faut créer d’autres versions de ces icônes. Voir la FAQ en annexe.
2.1.4 Chargement différé
Pour que le menu lance un module uniquement quand on clique sur le bouton (par exemple le menu graphique de l’application, il faut ajouter « Module: "NOM_MODULE.DLL" » à l’entête du menu général. Cette option est utilisée pour lancer les applications de manière différée, permettant ainsi d’accélérer le lancement.
MenuGeneral :
{
(...)
Libelle: "Paie" ;
Module: "PA_MENU.DLL" ;
Note : bien qu'il ne soit pas indispensable d'implémenter le chargement différé (on peut conserver le fonctionnement des anciens .run), il est recommandé de séparer la phase d'initialisation du lancement de la fenêtre d'application. Ceci optimise largement le démarrage d'Oxygène.
2.2 Création automatique du menu général
Dans sa version développeur, Oxygène génère automatiquement un fichier d’extension ".~MEN" sous le répertoire oxydev\systeme\bin pour chaque écran graphique rencontré, si le fichier n’existe pas (effacer le fichier ".~MEN" pour qu’il soit régénéré).
Le menu texte est créé à partir des menus contextuels définis sur les zones dessin du menu graphique. Le titre principal est le libellé du menu.
Pour chaque zone dessin, un sous menu est créé, dont le titre est l’aide du dessin (texte affiché dans l’info bulle du dessin).
Le sous menu est ensuite rempli avec les entrées du menu contextuel.
3. Comment faire, pas à pas
3.1 Une application avec menu texte et menu graphique
J’ai une application ouvrant sur un menu graphique, comment faire pour l’intégrer dans le volet de navigation ?
Dans Oxygène 7.10, cette application se présentera avec un menu texte plus ce menu graphique.
a) Vérifier que le menu est bien considéré comme menu graphique (voir paragraphe 3.2.1). Il doit soit porter l’extension .MNG, soit définir MENUGRPH ou MENUGRPH2 comme modèle.
b) Lancer Oxygène une première fois pour générer automatiquement le menu texte
c) Renommer le fichier ".~MEN" en ".MEN"
d) Retravailler le fichier avec un l’éditeur Oxygène, pour le rendre agréable à l’utilisateur
e) Créer les deux icônes au format TIF avec un outil graphique adapté (PaintShop, GIMP…).
3.2 Une application avec menu texte et fenêtre standard
J’ai une application ouvrant sur une fenêtre standard (ex : ACCES ou GESTION), comment faire pour l’intégrer dans le volet de navigation ?
Dans Oxygène 7.10, cette application se présentera avec un menu texte plus cette fenêtre.
a) Ouvrir l’écran avec l’éditeur d’écran puis changer le type de modèle en MENUGRPH ou menuGRPH2
b) Créer un menu général comme expliqué au paragraphe précédent.
c) Créer les deux icônes au format TIF avec un outil graphique adapté (PaintShop, GIMP…).
Il n’y a pas d’intérêt dans ce cas à générer automatiquement le menu texte, car celui-ci reprend uniquement les menus des zones dessin.
3.3 Application avec menu texte uniquement
J’ai une application ouvrant sur un menu général Texte, comment faire pour l’intégrer dans le volet de navigation ?
Dans Oxygène 7.10, cette application se présentera avec un menu texte et un panneau.
a) Ouvrir le menu avec un éditeur supportant le mode OEM, par exemple edit sous une session Dos.
b) Ajouter l’état MENU_APPLICATION à la liste des états.
c) Créer les deux icônes au format TIF avec un outil graphique adapté (PaintShop, GIMP …).
3.4 Lancement différé d’une application
J’ai une application avec une dll « .run » qui ouvre automatiquement un menu graphique ou une fenêtre. Comment faire pour que l’écran ne se lance que quand on clique sur mon bouton ?
Il est à noter que cette modification peut être délicate à mettre au point si le code de lancement de l’application est un peu complexe.
a) Créer une nouvelle dll et y déplacer le code spécifique du lancement du menu graphique. Laisser dans le .run le code de MAJ de la base de données à l’installation.
Exemple : gcpmenu.run -> gcpmenu.dll -> gcpstart.run
Un objet de type "auto" doit être responsable de lancer le menu graphique ou l’écran dans gcpmenu.dll
b) Mettre à jour le menu texte en définissant la propriété « Module » vers le nom de la dll
Note : Quand un objet de l’application tente de lancer le menu graphique (pour le relancer par exemple), on se retrouve parfois avec un blocage ou deux menus graphiques. L’objet menu graphique étant de type "auto", il se lance deux fois (une fois au chargement de la dll, puis une fois quand il est appelé). Il peut être utile dans ce cas de définir un objet inutile dans la dll, qu’on appellera par programme au lieu d’appeler le menu graphique (celui-ci se lancera quand même au chargement de la dll. Autre option : utiliser un objet de type « serveur » (par exemple un objet calcul) dans la dll pour éviter qu’elle ne se décharge.
4. Programmation avancée
Si on souhaite connaître sous quel menu est ouvert un objet, on peut écrire :
Methode DEBUT
AppliquerDefaut
Variables: Chaine vAppContexte
_C{ if(ecran()) v_vappcontexte = ecran()->GetAppContext();
}
Si vAppContexte="NOM_DU_MENU" Alors
BoiteMessage "Vous êtes désormais dans
l'application "+vAppContexte
FinSi
FinMethode
A l'inverse si l'on souhaite qu'un écran s'ouvre dans un autre contexte que celui en cours, c'est possible ; en ajoutant :
Methode DEBUT
_C{
if (ecran())
ecran()->SetAppContext("NOM_DU_MENU");
}
AppliquerDefaut
FinMethode
"NOM_DU_MENU" correspond au nom du fichier .men (sans chemin ni extension).
Pour que l'écran ne soit pas attaché à un contexte particulier (i.e. qu'il soit visible dans tous les contextes), il faut mettre "OX_NO_CTX".
Voir les questions fréquentes (FAQ)