Présentation
Documentation
L'équipe
Sérialisation
 
Programmes
Objets
Libs Utilitaires
Libs Internes
   
 
Editeur
Syntaxes
Windows
Versions
   

SCR/AL1 - TOME III. Les librairies utilitaires

7. Le groupe s_scroll

7.2 La structure SCROLL

La structure SCROLL est définie ci-dessous et comporte 3 types d'éléments:

Structure SCROLL

typedef struct _scroll {
/* Eléments modifiables par l'utilisateur */
char *sc_pcl; /* Data permettant d'identifier la structure */
UCHAR *sc_cmt; /* Comment */
YYKEYS *sc_scmts; /* Commentaires structurés (null term. list)*/
UCHAR *sc_help; /* Topic du help */
int sc_ipl, /* Ligne supérieure de la fenêtre dans l'écran*/
sc_ipc; /* Colonne gauche de la fenêtre dans l'écran */
int sc_inlc, /* Nombre de lignes total de la fenêtre */
sc_incc; /* Nombre de colonnes total de la fenêtre */
int sc_iattr, /* Attribut d'affichage */
sc_irattr, /* Attribut inversé (cellule courante) */
sc_ilc0, /* Longueur de la colonne de titres */
sc_irlen; /* Longueur des colonnes en rotate */
int sc_norot; /* Rotate possible ? !!! 0 = oui, 1 = non ! */
int sc_nohsb; /* Horiz. scroll bar ? !!! 0 = oui, 1 = non ! */
int sc_ir; /* Indicateur de rotation de la fenêtre */
int sc_noltit; /* Pas de titre de lignes */
int sc_noctit; /* Pas de titre de colonnes (2 lignes gagnées)*/

/* Eléments modifiés par le programme */
IMAGE *sc_im; /* Image de l'écran */
int sc_icl, /* ligne courante dans l'écran */
sc_icc; /* colonne courante dans l'écran */
int sc_icl0, /* ligne de la première cellule dans l'écran */
sc_icc0; /* colonne de la première cellule dans l'écran*/
int sc_inl, /* nbre de lignes visibles */
sc_inc; /* nbre de colonnes visibles */
int sc_iml, /* ligne maximum */
sc_imc; /* colonne maximum */
int sc_ins; /* nombre de lignes sélectionnée */
int *sc_ias; /* tableau des lignes sélectionnées */
S_BAR sc_vbar; /* Scrollbar horizontal */
S_BAR sc_hbar; /* Scrollbar vertical */
int sc_max; /* Scroll Maximized ? */
int sc_ocl, /* Précédente line courante (old current line)*/
sc_occ, /* Précédente col courante (old current col )*/
sc_onl, /* Précédent nb lines (old nl) */
sc_onc; /* Précédent nb cols (old nc) */

/* Fonctions à définir par l'utilisateur */
char *(*sc_ftitle)(), /* Fn retournant le titre général */
*(*sc_fctitle)(), /* Fn retournant le titre d'un colonne*/
*(*sc_fltitle)(), /* Fn retournant le titre d'une ligne */
*(*sc_ftext)(); /* Fn retournant le texte d'une cell */
int (*sc_fnl)(), /* Fn retournant le nombre de lignes */
(*sc_fnc)(), /* Fn retournant le nombre de colonnes*/
(*sc_flen)(); /* Fn retournant la largeur d'une col */
int (*sc_fedit)(), /* Fn d'édition d'une cellule */
(*sc_fdel)(), /* Fn de destruction d'une cellule */
(*sc_fins)(); /* Fn de création d'une cellule */
int (*sc_ffn)(), /* Fn exécutée pour une touche fn */
(*sc_fbeg)(), /* Fn de début d'édition */
(*sc_fend)(), /* Fn de fin d'édition */
(*sc_fattr)(), /* Attribut (SCR_BLUE, ..) cellule */
(*sc_flattr)(), /* Attribut (SCR_BLUE, ..) tit ligne */
(*sc_fcattr)(), /* Attribut (SCR_BLUE, ..) tit col */
(*sc_fdisp)(); /* Fn avant display cellule */
char reserved[16]; /* reservé */
} SCROLL;

Variables de la structure à assigner ou à consulter

    YYKEYS OSCRL_TABSCMTS[] = {
"Help", SCR_F1,
"Test table", SCR_F7,
"Graphic", SCR_F8,
"Modify", SCR_ENTER,
"Delete", SCR_DELETE,
"New", SCR_INSERT,
" ", 0,
"Maximize", SCR_C_X,
"Move", SCR_C_O,
"Resize", SCR_C_Z,
" ", 0,
"Quit", SCR_ESCAPE,
0, 0
};

Pointeurs vers fonctions

Toutes les fonctions utilisées par SCRL_edit() sont définies ci-dessous. Le pointeur vers la structure SCROLL est passé comme premier argument de toutes les fonctions poiur permettre aux fonctions de déterminer quel tableau est en cours d'édition (il suffit pour cela d'assigner à l'initialisation de la structure l'élément data de la structure SCROLL).

Titre général

Retourne le titre général de la fenêtre, affiché sur la ligne supérieure.

Syntax

    char *sc_ftitle(SCROLL *scrl)

Exemple

    char *SW_title(scrl)
SCROLL *scrl;
{
return("Tables de multiplication");
}

Titre des lignes et des colonnes

Retourne le titre de la ligne (colonne) i, affiché dans la première colonne (ligne) de la fenêtre.

Syntax

    char *sc_fltitle(SCROLL *scrl, int line)
char *sc_fctitle(SCROLL *scrl, int col)

Exemple

    char *SW_ltitle(scrl, i)
SCROLL *scrl;
int i;
{
static char buf[20];

sprintf(buf, "%-6d", i + 1);
return(buf);
}

Texte des cellules

Retourne le texte de la cellule (i, j). Si ce texte est trop long pour être affiché dans l'écran, seuls les premiers caractères sont conservés et le signe > est placé en dernière position, indiquant qu'une partie du texte n'apparaît pas.

Syntax

    char *sc_ftext(SCROLL *scrl, int line, int col)

Exemple

    char *SW_text(scrl, i, j)
SCROLL *scrl;
int i, j;
{
static char buf[20];

sprintf(buf, "%6d", (i + 1) * (j + 1));
return(buf);
}

Nombre total de lignes et de colonnes du tableau

Retourne le nombre de lignes (colonnes) total du tableau.

Syntax

    int sc_fnl(SCROLL *scrl)
int sc_fnc(SCROLL *scrl)

Exemple

    int SW_nl(scrl)
SCROLL *scrl;
{
return(((DATA *)(scrl->sc_pcl))->nb_lines);
}

Largeur d'une colonne

Retourne le nombre de caractères d'une colonne.

Syntax

    int sc_flen(SCROLL *scrl, int col)

Exemple

    int SW_len(scrl, col)
SCROLL *scrl;
int col;
{
return(6);
}

Fonction d'édition d'une cellule

Edite la cellule (i, j). Cette fonction est appelée lorsque la touche ENTER est utilisée sur la cellule (i, j). Le contrôle est passé au programme qui peut effectuer n'importe quelle opération, y compris sur le tableau et ses dimensions. En sortie de cette fonction, toute la fenêtre de scroll est redessinée.

Cette fonction retourne la nouvelle ligne courante. Si cette valeur est -1, la ligne courante reste inchagée.

Si la fonction n'est pas définie, il faut mettre un pointeur null dans la structure SCROLL.

Syntax

    int sc_fedit(SCROLL *scrl, int line, int col)

Exemple

    SW_edit(scrl, i, j)
SCROLL *scrl;
int i, j;
{
SCR_set_double(p_edit_val, table[i][j]);

PG_edit_window(p_edit);
if(SCR_LKEY == SCR_ESCAPE) return(-1);
table[i][j] = SCR_get_double(p_edit_val);
return(-1);
}

Fonction de destruction de ligne

Détruit la cellule (i, j). Le contrôle est passé au programme qui peut effectuer n'importe quelle opération, y compris sur le tableau et ses dimensions. En sortie de cette fonction, toute la fenêtre de scroll est redessinée.

Cette fonction retourne la nouvelle ligne courante. Si cette valeur est -1, la ligne courante reste inchagée.

Si la fonction n'est pas définie, il faut mettre un pointeur null dans la structure SCROLL.

Cette fonction est appelée lorsque la touche DEL est pressée.

Syntax

    int sc_fdel(SCROLL *scrl, int line, int col)

Exemple

    SW_del(scrl, i, j)
SCROLL *scrl;
int i, j;
{
DeleteLine(scrl->sc_pcl, i);
return(-1);
}

Fonction de création de ligne

Crée une nouvelle cellule après la cellule (i, j). Le contrôle est passé au programme qui peut effectuer n'importe quelle opération, y compris sur le tableau et ses dimensions. En sortie de cette fonction, toute la fenêtre de scroll est redessinée.

Cette fonction retourne la nouvelle ligne courante. Si cette valeur est -1, la ligne courante reste inchagée.

Si la fonction n'est pas définie, il faut mettre un pointeur null dans la structure SCROLL.

Cette fonction est appelée lorsque la touche INS est pressée.

Syntax

    int sc_fins(SCROLL *scrl, int line, int col)

Exemple

    SW_ins(scrl, i, j)
SCROLL *scrl;
int i, j;
{
CreateLine(scrl->sc_pcl, i);
return(-1);
}

Utilisation des touches fonctions

Exécute une action utilisateur sur base d'une touche fonction. Le contrôle est passé au programme qui peut effectuer n'importe quelle opération, y compris sur le tableau et ses dimensions. En sortie de cette fonction, toute la fenêtre de scroll est redessinée.

Cette fonction retourne la nouvelle ligne courante. Si cette valeur est -1, la ligne courante reste inchagée.

Si la fonction n'est pas définie, il faut mettre un pointeur null dans la structure SCROLL.

Cette fonction est appelée lorsqu'une touche fonction est pressée.

Syntax

    int sc_ffn(SCROLL *scrl, int key, int line, int col)

Exemple

    SW_ffn(scrl, key, i, j)
SCROLL *scrl;
int key, i, j;
{
switch(key) {
case A_F1 : PG_edit_window(p_parms); break;
case A_F2 : PrintLine(scrl->sc_pcl, i); break;
default : SCR_beep(); break;
}
return(-1);
}

Fonctions de début et de fin

Ces fonctions s'exécutent avant le début de l'édition et après l'édition respectivement.

La fonction de fin (sc_fend) doit retourner une valeur > 0 pour que l'édition se termine. Sinon l'édition continue.

Si une de ces fonctions n'est pas définie, il faut mettre un pointeur null dans la structure SCROLL.

Syntax

    int sc_fbeg(SCROLL *scrl)
int sc_fend(SCROLL *scrl)

Fonctions de définition de couleurs

Ces fonctions permettent de changer la couleur des cellules affichées. Trois fonctions sont prévues: titre de ligne, de colonne et cellule.

Syntax

    int sc_fattr(SCROLL *scrl, int i, int j) : cellule i, j
int sc_flattr(SCROLL *scrl, int i) : titre ligne i
int sc_fcattr(SCROLL *scrl, int j) : titre colonne j

Fonction à exécuter avant affichage

Cette fonctions s'exécute avant l'affichage d'une cellule.

Syntax

    int sc_fdisp(SCROLL *scrl, int i, int j)

Copyright © 1998-2015 Jean-Marc Paul and Bernard PAUL - Envoyez vos remarques ou commentaires à bernard@xon.be