Pour l'essentiel, la fonction main() habituelle peut être conservée telle quelle. Il faut cependant ajouter l'appel à GscrGnomeInit(argc, argv) avant de lancer SCR_init().
main(int argc, char **argv)
{
GscrGnomeInit(argc, argv);
SCR_init();
...
}
GscrGnomeInit() initialise SCR/AL1 et Gnome, fixe la variable ERR_TYPE à 1 et les couleurs et pixmaps par défaut.
Un tableau d'image par défaut est disponible pour les TOOLBAR des APPL et des PAGES. Ce tableau peut être remplacé. Il suffit pour cela de fixerr après l'appel à GscrGnomeInit() la valeur de GSCR_PIXMAPS par la nouvelle liste d'icônes.
Les icônes sont des images définies en C au format XPM. GSCR_PIXMAPS est un pointeur vers la première image de la liste.
Exemple
static char *new_16[] = {
/* columns rows colors chars-per-pixel */
"16 16 16 1",
" c black",
". c #161616",
"X c gray25",
"o c #4b4b49",
"O c #5d5d5d",
"+ c #767676",
"@ c gray52",
"# c #a0a0a0",
"$ c #aaaaaa",
"% c #bcbcbc",
"& c #c2c2c2",
"* c #e5e5e5",
"= c #ebebeb",
"- c #f0f0f0",
"; c #fdfdfd",
": c None",
/* pixels */
": ::::",
": ;;;;;;;*& :::",
": ;------&$ ::",
": ;------$+OX ::",
": ;-----=*@o. ::",
": ;-------=-& ::",
": ;==-===-==& ::",
": ;--==-==-=& ::",
": ;=========% ::",
": ;=*=*=*=*=& ::",
": ;====*==**% ::",
": ;*********& ::",
": ;*=*******% ::",
": ;*********% ::",
": ::"
...
};
... autres définitions ...
GXPM MY_PIXMAPS[] = {
/* 0 */ new_16,
/* 1 */ open_16,
/* 2 */ save_16,
/* 3 */ cut_16,
/* 4 */ copy_16,
/* 5 */ paste_16,
/* 6 */ help_16,
/* 7 */ help_16,
/* 8 */ print_16,
/* 9 */ umbrella_16,
/* 10 */ trek_16,
};
int NB_PIXMAPS = 11;
Après GscrGnomeInit(), il suffit de faire :
GSCR_PIXMAPS = MY_PIXMAPS;
GSCR_NB_PIXMAPS = NB_PIXMAPS;
Pour obtenir les images bmp, jpg, gif, png, ... en format xpm, il suffit d'utiliser le filtre convert disponible sous Linux.
Les couleurs sont définies dans des structures GCOLOR :
typedef struct _GCOLOR_ {
char *name;
GdkColor color;
} GCOLOR;
Par défaut, elles sont définies comme suit :
GCOLOR GSCR_DFT_COLORS[] = {
/*SCR_INVISIBLE WCOL_INVISIBLE */ {"", {0, 0, 0, 0}},
/*SCR_DEFAULT WCOL_DEFAULT */ {"black", {0, 0, 0, 0xFFFF}},
/*SCR_REVERSE WCOL_REVERSE */ {"grey", {0, 0xAA99, 0xAA99, 0xAA99}},
/*SCR_UNDERLINE WCOL_UNDERLINE */ {"white", {0, 0, 0, 0xFFFF}},
/*SCR_BOLD WCOL_BOLD */ {"gray", {0, 0xFFFF, 0xFFFF, 0xFFFF}},
/*SCR_BLINKING WCOL_BLINKING */ {"red", {0, 0, 0, 0xFFFF}},
/*SCR_DIM WCOL_DIM */ {"yellow", {0, 0, 0, 0xFFFF}},
/*SCR_BLACK WCOL_BLACK */ {"black", {0, 0, 0, 0}},
/*SCR_BLUE WCOL_BLUE */ {"blue", {0, 0x0, 0, 0xFFFF}},
/*SCR_GREEN WCOL_GREEN */ {"green", {0, 0, 0xFFFF, 0}},
/*SCR_CYAN WCOL_CYAN */ {"cyan", {0, 0, 0xFFFF, 0xFFFF}},
/*SCR_RED WCOL_RED */ {"red", {0, 0xFFFF, 0, 0}},
/*SCR_MAGENTA WCOL_MAGENTA */ {"magenta", {0, 0xFFFF, 0, 0xFFFF}},
/*SCR_WHITE WCOL_WHITE */ {"white", {0, 0xFFFF, 0xFFFF, 0xFFFF}},
/*SCR_YELLOW WCOL_YELLOW */ {"yellow", {0, 0xFFFF, 0xFFFF, 0}},
/*SCR_SHADOW WCOL_DKGRAY */ {"gray", {0, 0x003F, 0x003F, 0x003F}},
/*SCR_CHELP1 WCOL_GRAY */ {"gray", {0, 0x7FFF, 0x7FFF, 0x7FFF}},
/*SCR_CHELP2 WCOL_LTGRAY */ {"gray", {0, 0xAFFF, 0xAFFF, 0xAFFF}},
/*SCR_CONDENSED WCOL_LTBLUE */ {"blue", {0, 0, 0x3FFF, 0xFFFF}},
/*SCR_ENLARGED WCOL_DKBLUE */ {"blue", {0, 0, 0x7FFF, 0xFFFF}}
};
Ce tableau peut être remplacé. Les attributs qu'on utilise dans les .f donnent lieu à la couleur définie ci-dessus.
Il suffit pour cela de remplacer après l'appel à GscrGnomeInit() la valeur de GSCR_COLORS par la nouvelle table définie sur le modèle ci-dessus.
Les positions des PAGES sont calculées comme suit :
La fonction WscrPosPg fixe les valeurs de pg_w_x et pg_w_y en fonction de la position courante d'un champ de page.
WscrPosPg(PAGE *pg, OBJ obj, int type);
type : 0 Sur le champ
1 juste en dessous
2 à droite du champ
3 en dessous à droite
Les menus peuvent être placés à une position en pixels en fixant les valeurs mn_w_x et mn_w_y de la structure MENU.
Ces positions peuvent être calculées automatiquement par la fonction WscrPosMenu.
WscrPosMenu(MENU *mn, OBJ obj)
Elle place le menu sous le champ donné.
Une APPL est maximisée (occupe tout l'écran) si son nombre de lignes (défini dans le .f) est supérieur à 20.
Si ce n'est pas le cas, on peut maximiser l'APPL après son affichage avec la fonction :
GapMaximise(APPL *ap)
Il est possible de placer une image au centre d'une APPL en plaçant dans la variable
char **GSCR_APPL_IMAGE;
un pointeur vers une image PIXMAP.
Exemple
/* XPM */
char *MyImage[] = {
/* columns rows colors chars-per-pixel */
"48 48 99 2",
" c #000000",
". c #1a1305",
"X c #1e1709",
"# c #372b10",
"$ c #322b1f",
"% c #3b2e12",
...
};
main()
{
...
GSCR_APPL_IMAGE = MyImage;
...
}
Sans objet dans la mesure où les PAGES n'ont pas de croix dans la barre de titre.
La largeur et la hauteur des caractères sont gouvernés par les variables suivantes :
Ces variables sont des entiers et peuvent être définies avant l'affichage d'un objet SCR/AL1 (p.ex. PAGE, MENU).
Les caractères inférieurs à blancs sont remplacés par des blancs.
Les caractères semi-graphiques de tableaux sont remplacés par des équivalents (-=+|).
Les HLINE, VLINE, BOX et traits dans le SCREEN peuvent être supprimés de l'affichage. On peut spécifier dans les GLOBAL :
GLOBAL { WIN_HLINE No WIN_VLINE No}
A partir de cette directive, toutes les PAGES ne contiendront plus de HLINE, VLINE, BOX ou traits dans les SCREEN.
On peut placer la directive à plusieurs endroits dans les .f.
Il est possible également de modifier une PAGE selon la même syntaxe WIN_HLINE et WIN_VLINE placée dans la définition de la PAGE.
La couleur des boutons est définie par la couleur du champ qui définit le bouton.
Lorsque la souris passe sur le bouton, le bouton indique son état intermédiaire en changeant de couleur. Cette couleur est indiquée par la variable GBUTTONACTIVATE.
Exemple
GBUTTONACTIVATE = SCR_RED;
Chaque PAGE créée par la suite utilisera le rouge pour indiquer que la souris passe dessus.
Lorsqu'un champ ne peut être quitté (END_FN retourne une valeur non nulle, CODEISAM non résolu), le champ courant est sélectionné et le curseur est placé en colonne 1.
Les commentaires sont implémentés comme en mode caractère dans les PAGES, MPAGES et BC.
Si le commentaire dépasse la largeur de la page (en caractères), le texte est tronqué (à améliorer dans une version future).
La fonction SCR_comment() n'est pas opérationnelle dans la mesure où on ne connaît pas la fenêtre destinataire (à améliorer).
TOOLBARS
Si l'image du toolbar n'existe pas dans la liste des GSCR_PIXMAPS, la première image est utilisée au lieu de planter le programme.
NUM LOCK
Les chiffres et autres caractères du pad numérique fonctionnent normalement. En fait, sous X, ces touches ne retournent pas les mêmes codes que les touches normales du clavier.
MPAGE
La souris ne permettait pas de sélectionner un record dans les lpg, bien que l'affichage le faisait croire. On peut maintenant cliquer ou double-cliquer sur une lpg pour entrer en édition.
Fenêtres modales
Toutes les fenêtres sont définies comme modales. Elles sont également "transient" par rapport à la fenêtre en cours au moment de leur création ou de leur édition.
Cela ne fonctionne cependant pas dans certains cas. On cherche...
MP_IMPORT
Non implémenté
ABORT dans les MPAGES
Non corrigé
Retour en édition de la APG dans un BC_edit_lbcs()
Non corrigé.
MPAGE sans champ dans APG
Non corrigé.
Fenêtres sans titre
Non implémenté.
Champs avec ALLOWED
Non implémenté.
WX+, ...
Non implémenté.
Champs EDITOR
Non implémenté.
Champs Radio
Non implémenté.
Menus avec sélection
Non implémenté.
AB_EDIT_ISAM
Non implémenté.
PG_EDIT_ISAM
Non implémenté.
BC_AB_EDIT_ISAM
Non implémenté.
TPAGES
Non implémenté.
Icône fenêtre
Non implémenté.
Copyright © 1998-2015 Jean-Marc Paul and Bernard PAUL - Envoyez vos remarques ou commentaires à bernard@xon.be