Evènements

Chaque widget se comporte comme un périphérique logique. Il émet des évènements lorsque son état change. On va associer chaque widget à un objet "cible" qui va, recevoir ces évènements.Les langages à objets sont donc particulièrement adaptés.
On définit la classe Handler des objets pouvant recevoir des évènements et les traiter.

Class Handler
{
public
	virtual void HandleEvent (WidgetEvent *ev)=0;
}

C'est une fonction virtuelle pure, elle est déclarée dans cette classe mais pas son code qui le sera dans les classes dérivées. Ainsi, on ne peut pas l'utiliser telle quelle, on utilisera ses classes dérivées.

Class Dlog : public Handler
{
protected
Widget dlog;
public
Dlog (Widget dlog); /* constructeur */
virtual void Validate ()=0; /* virtuelle pure */
void HandlerEvent (WidgetEvent *ev)
{
switch (ev->type)
case CANCEL : CloseWindow (dlog);break;
case OK : Validate (),CloseWindow ();break;
default : Handler :: Handle Event(ev);
}
}
};
Class PrintDlog : public Dlog
{
protected :
char* fileName;
int numCopies;
public :
PrintDlog (Widget dlog) : Dlog(dlog)
{numCopies=1;}
void Validate()
{if (numCopies>0) Print (fileName,numCopies);}
void HandleEvent (WidgetEvent *ev)
{ switch (ev->type)
{case SETNAME : fileName = GetStringValue(...);
break;
case SETCOPIES : numCopies = GetValue (...);break;
default : Dlog :: HandleEvent(ev);
}
}
};

main ()
{...
PrintDlog* print;
print=new PrintDlog (dlog);


Watier Yves 2004-11-28