Ce programme permet de configurer certains aspects de votre imprimante HP LaserJet qui ne sont pas pris en compte par les drivers Acorn. Les aspects "remarquables" de ce programme sont:
Pour lancer l'application, double-cliquez sur l'icône !HPExplore:
L'icône apparaît alors au sein des applications installées. Double-cliquez sur celle-ci pour faire apparaître la fenêtre ci-dessous. La boite de dialogue principale (et l'unique fenêtre) a l'apparence ci-contre (sur un RISC PC ce qui explique la fonte antialiasée).
Dans sa version actuelle (v0.04), un certain nombre de fonctionnalités n'ont pas été implémentées:
Le source C complet des modules se trouve dans les pages en annexe ainsi que sur la disquette d'accompagnement.
Notons dans le code quelques points à noter au sein de la fonction principale d'initialisation (module hpexplore) example_init():
void HPExploreMenuMiscInit(dbox dialogue)
{
wimp_icon result;
wimpt_noerr(wimp_get_icon_info(dbox_syshandle(dialogue), FONT_MENU, &result));
xmenu= result.box.x1;
ymenu= result.box.y1;
dbox_fadefield(dialogue,DISGRAS);
dbox_fadefield(dialogue,DISITAL);
dbox_fadefield(dialogue,DISCONDENS);
}
Il sera ainsi possible d'afficher le menu juste en face de l'icône FONT_MENU. Les trois icônes option en dessous du nom de la fonte sélectionnée ne sont pas manipulables directement par l'utilisateur, c'est pourquoi elles sont dès le départ désactivées (N.D.A.: je n'ai pas trouvé le moyen de le faire sous !FormEd).
Les gestionnaires d'évènemnts sous la RISC OS Lib se répartissent en deux classes.
Intéressons nous d'abord au gestionnaire de bas niveau, il est appelé lors de l'apparition d'un évènement WIMP issu de l'appel à event_process() et qui n'aurait pas été masqué par event_setmask(). Il doit retourner un booléen indiquant si l'évènement a pu être traité au sein de la fonction ou non.
static BOOL HPExploreRawHandler(dbox dialogue, void *event, void *handle)
{
wimp_eventstr *e= (wimp_eventstr *) event;
switch(e->e)
{
case wimp_EMENU:
return(HPExploreMenuSelect(dialogue,&(e->data),handle));
...
case wimp_EBUT:
if(HPExploreMenuRawHandler(e, handle)) return(TRUE);
...
if(e->data.but.m.bbits== wimp_BRIGHT)
{
wimp_i icon= e->data.but.m.i;
if(!dbox_getnumeric(dialogue,icon))
switch(icon)
{
case IA_OUI:
case IA_NON:
case IA_AUTO:
case PP_OUI:
case PP_NON:
case PP_AUTO:
dbox_setnumeric(dialogue,icon,TRUE);
return(TRUE);
}
}
default:
/* Handles all interactive help requests:
* This is the simplest form of the process:
* returning constant messages (ie not
* depending upon the context) */
return(help_dboxrawevents(dialogue,event,"HICON"));
}
}
La fonction concernée, HPExploreHandler() traite les actions de nature applicative.
static void HPExploreHandler(dbox dialogue, void *handle)
{
/* Window remains open after processing */
BOOL filling= TRUE;
dbox_field idb= dbox_get(dialogue);
switch(idb)
{ ...
}
if(!filling)
{
/* Time to hide window and upd. status */
dbox_hide(dialogue);
ExploreDboxOpen= FALSE;
}
}
...
switch(idb)
{
case dbox_CLOSE:
/* Close window after processing */
filling= FALSE;
break;
case ICONCANCEL:
/* Clicking on an action button with the right mouse
* button will cause the window to remain visible */
filling= dbox_persist();
/* Speed's up process by hiding dialogue box before
* refreshing its contents (anyway it should be closed
* after the processing */
if(!filling) dbox_hide(dialogue);
refresh_dbox(dialogue,&vHPconfig);
break;
case ICONOK:
getconfig(dialogue);
/* Sends the config. to printer */
SendToPrinter(&vHPconfig);
/* Clicking on an action button with the right mouse
* button will cause the window to remain visible */
filling= dbox_persist();
break;
}
...
switch(idb)
{
...
case DENS_UP:
/* Clicking on the up arrow with the right mouse button
* will tend to decrease the density value */
if(dbox_persist())
decrement_density(dialogue);
else
increment_density(dialogue);
break;
case DENS_DWN:
/* Clicking on the down arrow with the right mouse button
* will tend to increase the density value */
if(dbox_persist())
increment_density(dialogue);
else
decrement_density(dialogue);
break;
}
...