12
1 Réunion CESAME, Grenoble, 12-13 mars 2007 aptation au contexte supportée par Usi Jean Vanderdonckt, Sophie Lepreux Belgian Lab. of Computer-Human Interaction (BCHI) Unité de Systèmes d’Information (ISYS) Louvain School of Management (IAG) Université catholique de Louvain (UCL) http://www.isys.ucl.ac.be/bchi

1 Réunion CESAME, Grenoble, 12-13 mars 2007 Adaptation au contexte supportée par UsiXML Jean Vanderdonckt, Sophie Lepreux Belgian Lab. of Computer-Human

Embed Size (px)

Citation preview

Page 1: 1 Réunion CESAME, Grenoble, 12-13 mars 2007 Adaptation au contexte supportée par UsiXML Jean Vanderdonckt, Sophie Lepreux Belgian Lab. of Computer-Human

1 Réunion CESAME, Grenoble, 12-13 mars 2007

Adaptation au contexte supportée par UsiXML

Jean Vanderdonckt, Sophie Lepreux

Belgian Lab. of Computer-Human Interaction (BCHI)Unité de Systèmes d’Information (ISYS)Louvain School of Management (IAG)

Université catholique de Louvain (UCL)

http://www.isys.ucl.ac.be/bchi

Page 2: 1 Réunion CESAME, Grenoble, 12-13 mars 2007 Adaptation au contexte supportée par UsiXML Jean Vanderdonckt, Sophie Lepreux Belgian Lab. of Computer-Human

2 Réunion CESAME, Grenoble, 12-13 mars 2007

Premier exemple: adaptabilité

[Framework révisé par UJF]

Page 3: 1 Réunion CESAME, Grenoble, 12-13 mars 2007 Adaptation au contexte supportée par UsiXML Jean Vanderdonckt, Sophie Lepreux Belgian Lab. of Computer-Human

3 Réunion CESAME, Grenoble, 12-13 mars 2007

Exemple d‘un Feature Model

Calculator

Background

Number keys

Pi Exp

Keyboard

Figures

Basicoperations

Otherfunctions

+ * - / +/- . =

Clear

Screen fieldOperations

Sin

Cos

Tan

X^2

X^3

X^Y

Log Ln n! Mod

OptionalMandatoryAlternat

e

Page 4: 1 Réunion CESAME, Grenoble, 12-13 mars 2007 Adaptation au contexte supportée par UsiXML Jean Vanderdonckt, Sophie Lepreux Belgian Lab. of Computer-Human

4 Réunion CESAME, Grenoble, 12-13 mars 2007

Calculator

Background

Number keys

Pi Exp

Keyboard

Figures

Basicoperations

Otherfunctions

+ * - / +/- . =

Clear

Screen fieldOperations

Sin

Cos

Tan

X^2

X^3

X^Y

Log Ln n! Mod

0

0

0

1

1

1

1 1 1

1

1

1

1 1

1

11 1 1

10

Interprétation du modèle

[Schlee & Vanderdonckt, 2004]

Page 5: 1 Réunion CESAME, Grenoble, 12-13 mars 2007 Adaptation au contexte supportée par UsiXML Jean Vanderdonckt, Sophie Lepreux Belgian Lab. of Computer-Human

5 Réunion CESAME, Grenoble, 12-13 mars 2007

Transformation en UsiXML

Calculator

Number keys

Pi Exp

Keyboard

Figures

Basicoperations

Otherfunctions

+ * - / +/- . =

Clear

Screen fieldOperations

Sin

Cos

X^2

X^Y

Log n! Mod

1

1

1

1 1 1

1

1

1

1 1

1

11 1 1

1

<uiModel xmlns="http://www.usixml.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.usixml.org/ http://www.usixml.org/spec/UsiXML-ui_model.xsd" id="Calculator_25" name="Calculator" creationDate="2007-01-25T17:31:50.577+01:00" schemaVersion="1.8"> <auiModel id="Calculator-aui_25" name="Calculator-aui"/> <cuiModel id="Calculator-cui_25" name="Calculator-cui"> <window id="window_component_3" name="window_component_3" width="581" height="497"> <borderBox id="border_box_5" name="border_box_5"> <topBox> <flowBox id="flow_box_6" name="flow_box_6" alignment="right"> <inputText id="input_text_component_9" name="input_text_component_9" <…>

Page 6: 1 Réunion CESAME, Grenoble, 12-13 mars 2007 Adaptation au contexte supportée par UsiXML Jean Vanderdonckt, Sophie Lepreux Belgian Lab. of Computer-Human

6 Réunion CESAME, Grenoble, 12-13 mars 2007

void areaOperation(const int&, const int&, const int&, const int&, ImgProcessT<T>& (ImgProcessT<T>::*pimgpr)(const int&, Pl*), const int& nAngle, Pl* ppl );

void areaOperation(const int&, const int&, const int&, const int&, ImgProcessT<T>& (ImgProcessT<T>::*pimgpr)(Pl*), Pl* ppl );

void areaOperation(const int&, const int&, const int&, const int&, ImgProcessT<T>& (ImgProcessT<T>::*pimgpr)(const int&, const int&, const int&, const int& ), const int&, const int&, const int&, const int& );

void channelShowHistogram( int*, const int&, const int&, const int&, const int&, const int&, const int&, const int& n = 0 ) const;

void channelFft ( T*, T*, T*, const unsigned int&, const unsigned int&, Pl* ppl = NULL ); void channelIfft ( T*, T*, T*, const unsigned int&, const unsigned int&, Pl* ppl = NULL );

void channelFftSpectrum(T*, T*, T*, Pl* ppl = NULL); void channelRange (T*, Pl* ppl = NULL ); void nlinFilterCommon (const int& nID, Mask*, Pl*); int pot (const unsigned int& ) const;

ImgProcessT<T>& channelXor (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelMix (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSub (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelAdd (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSubBalanced(T*, T*, Pl* ppl = NULL);

public: ImgProcessT(const char* const psz = "", Pl* ppl = NULL); ImgProcessT(const int&, const int& nWidth = 20, const int& nHeight = 20, const int& nFillColor = 0, ProgressLine* ppl = NULL ); ImgProcessT(const ImgProcessT<T>&); virtual ~ImgProcessT();

virtual char* getClassName() const; virtual char getClassID () const;

ImgProcessT<T>& operator+=(const ImgProcessT<T>&);I

void areaOperation(const int&, const int&, const int&, const int&, ImgProcessT<T>& (ImgProcessT<T>::*pimgpr)(const int&, Pl*), const int& nAngle, Pl* ppl );

void areaOperation(const int&, const int&, const int&, const int&, ImgProcessT<T>& (ImgProcessT<T>::*pimgpr)(Pl*), Pl* ppl );

void areaOperation(const int&, const int&, const int&, const int&, ImgProcessT<T>& (ImgProcessT<T>::*pimgpr)(const int&, const int&, const int&, const int& ), const int&, const int&, const int&, const int& );

void channelShowHistogram( int*, const int&, const int&, const int&, const int&, const int&, const int&, const int& n = 0 ) const;

void channelFft ( T*, T*, T*, const unsigned int&, const unsigned int&, Pl* ppl = NULL ); void channelIfft ( T*, T*, T*, const unsigned int&, const unsigned int&, Pl* ppl = NULL );

void channelFftSpectrum(T*, T*, T*, Pl* ppl = NULL); void channelRange (T*, Pl* ppl = NULL ); void nlinFilterCommon (const int& nID, Mask*, Pl*); int pot (const unsigned int& ) const;

ImgProcessT<T>& channelXor (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelMix (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSub (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelAdd (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSubBalanced(T*, T*, Pl* ppl = NULL);

public: ImgProcessT(const char* const psz = "", Pl* ppl = NULL); ImgProcessT(const int&, const int& nWidth = 20, const int& nHeight = 20, const int& nFillColor = 0, ProgressLine* ppl = NULL ); ImgProcessT(const ImgProcessT<T>&); virtual ~ImgProcessT();

virtual char* getClassName() const; virtual char getClassID () const;

ImgProcessT<T>& operator+=(const ImgProcessT<T>&);I

Code final

void channelFftSpectrum(T*, T*, T*, Pl* ppl = NULL); void channelRange (T*, Pl* ppl = NULL ); void nlinFilterCommon (const int& nID, Mask*, Pl*); int pot (const unsigned int& ) const;

ImgProcessT<T>& channelXor (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelMix (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSub (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelAdd (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSubBalanced(T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelMix ImgProcessT<T>& channelSub (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelAdd (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSubBalanced(T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelMix (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSub (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelAdd (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSubBalanced(T*, T*, Pl* ppl = NULL);

void channelFftSpectrum(T*, T*, T*, Pl* ppl = NULL); void channelRange (T*, Pl* ppl = NULL ); void nlinFilterCommon (const int& nID, Mask*, Pl*); int pot (const unsigned int& ) const;

ImgProcessT<T>& channelXor (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelMix (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSub (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelAdd (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSubBalanced(T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelMix ImgProcessT<T>& channelSub (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelAdd (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSubBalanced(T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelMix (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSub (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelAdd (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSubBalanced(T*, T*, Pl* ppl = NULL);

V

oid channelFftSpectrum(T*, T*, T*, Pl* ppl = NULL); void channelRange (T*, Pl* ppl = NULL ); void nlinFilterCommon (const int& nID, Mask*, Pl*); int pot (const unsigned int& ) const;

ImgProcessT<T>& channelXor (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelMix (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSub (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelAdd (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSubBalanced(T*, T*, Pl* ppl = NULL);

public: ImgProcessT(const char* const psz = "", Pl* ppl = NULL); ImgProcessT(const int&, const int& nWidth = 20, const int& nHeight = 20, const int& nFillColor = 0, ProgressLine* ppl = NULL ); ImgProcessT(const ImgProcessT<T>&); virtual ~ImgProcessT();

virtual char* getClassName() const; virtual char getClassID () const;

ImgProcessT<T>& operator+=(const ImgProcessT<T>&); ImgProcessT<T>& operator-=(const ImgProcessT<T>&); ImgProcessT<T>& operator^=(const ImgProcessT<T>&); ImgProcessT<T> operator+ (const ImgProcessT<T>&); ImgProcessT<T> operator- (const ImgProcessT<T>&); ImgProcessT<T> operator^ (const ImgProcessT<T>&);

ImgProcessT<T>& channelNLinFilter(const int&, Mask*, T*, Pl* ppl=NULL);mgProcessT<T>& operator+=(const ImgProcessT<T>&); ImgProcessT<T>& operator-=(const ImgProcessT<T>&); ImgProcessT<T>& operator^=(const ImgProcessT<T>&); ImgProcessT<T> operator+ (const ImgProcessT<T>&); ImgProcessT<T> operator- (const ImgProcessT<T>&); ImgProcessT<T> operator^ (const ImgProcessT<T>&);

ImgProcessT<T>& channelNLinFilter(const int&, Mask*, T*, Pl* ppl=NULL);

V

oid channelFftSpectrum(T*, T*, T*, Pl* ppl = NULL); void channelRange (T*, Pl* ppl = NULL ); void nlinFilterCommon (const int& nID, Mask*, Pl*); int pot (const unsigned int& ) const;

ImgProcessT<T>& channelXor (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelMix (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSub (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelAdd (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSubBalanced(T*, T*, Pl* ppl = NULL);

public: ImgProcessT(const char* const psz = "", Pl* ppl = NULL); ImgProcessT(const int&, const int& nWidth = 20, const int& nHeight = 20, const int& nFillColor = 0, ProgressLine* ppl = NULL ); ImgProcessT(const ImgProcessT<T>&); virtual ~ImgProcessT();

virtual char* getClassName() const; virtual char getClassID () const;

ImgProcessT<T>& operator+=(const ImgProcessT<T>&); ImgProcessT<T>& operator-=(const ImgProcessT<T>&); ImgProcessT<T>& operator^=(const ImgProcessT<T>&); ImgProcessT<T> operator+ (const ImgProcessT<T>&); ImgProcessT<T> operator- (const ImgProcessT<T>&); ImgProcessT<T> operator^ (const ImgProcessT<T>&);

ImgProcessT<T>& channelNLinFilter(const int&, Mask*, T*, Pl* ppl=NULL);mgProcessT<T>& operator+=(const ImgProcessT<T>&); ImgProcessT<T>& operator-=(const ImgProcessT<T>&); ImgProcessT<T>& operator^=(const ImgProcessT<T>&); ImgProcessT<T> operator+ (const ImgProcessT<T>&); ImgProcessT<T> operator- (const ImgProcessT<T>&); ImgProcessT<T> operator^ (const ImgProcessT<T>&);

ImgProcessT<T>& channelNLinFilter(const int&, Mask*, T*, Pl* ppl=NULL);

void channelFftSpectrum(T*, T*, T*, Pl* ppl = NULL); void channelRange (T*, Pl* ppl = NULL ); void nlinFilterCommon (const int& nID, Mask*, Pl*); int pot (const unsigned int& ) const;

ImgProcessT<T>& channelXor (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelMix (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSub (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelAdd (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSubBalanced(T*, T*, Pl* ppl = NULL);

void channelFftSpectrum(T*, T*, T*, Pl* ppl = NULL); void channelRange (T*, Pl* ppl = NULL ); void nlinFilterCommon (const int& nID, Mask*, Pl*); int pot (const unsigned int& ) const;

ImgProcessT<T>& channelXor (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelMix (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSub (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelAdd (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSubBalanced(T*, T*, Pl* ppl = NULL);

ImgProcessT<T>& channelMix (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSub (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelAdd (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSubBalanced(T*, T*, Pl* ppl = NULL) ImgProcessT<T>& channelMix (T*, T*, Pl* ppl = NULL);

ImgProcessT<T>& channelSub (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelAdd (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSubBalanced(T*, T*, Pl* ppl = NULL)

ImgProcessT<T>& channelMix (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSub (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelAdd (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSubBalanced(T*, T*, Pl* ppl = NULL) ImgProcessT<T>& channelMix (T*, T*, Pl* ppl = NULL);

ImgProcessT<T>& channelSub (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelAdd (T*, T*, Pl* ppl = NULL); ImgProcessT<T>& channelSubBalanced(T*, T*, Pl* ppl = NULL)

ComposantsImgProcessT<T>& channelAdd (T*, T*, Pl* ppl = NULL);

ImgProcessT<T>& channelSubBalanced(T*, T*, Pl* ppl = NULL);

public:

ImgProcessT(const char* const psz = "", Pl* ppl = NULL);

ImgProcessT(const int&,

const int& nWidth = 20,

const int& nHeight = 20,

const int& nFillColor = 0,

ProgressLine* ppl = NULL

);

ImgProcessT<T>& channelAdd (T*, T*, Pl* ppl = NULL);

ImgProcessT<T>& channelSubBalanced(T*, T*, Pl* ppl = NULL);

public:

ImgProcessT(const char* const psz = "", Pl* ppl = NULL);

ImgProcessT(const int&,

const int& nWidth = 20,

const int& nHeight = 20,

const int& nFillColor = 0,

ProgressLine* ppl = NULL

);

void channelFftSpectrum(T*, T*, T*, Pl* ppl = NULL);

void channelRange (T*, Pl* ppl = NULL );

void channelFftSpectrum(T*, T*, T*, Pl* ppl = NULL);

void channelRange (T*, Pl* ppl = NULL );

void channelFftSpectrum(T*, T*, T*, Pl* ppl = NULL);

void channelRange (T*, Pl* ppl = NULL );

void channelFftSpectrum(T*, T*, T*, Pl* ppl = NULL);

void channelRange (T*, Pl* ppl = NULL );

void channelFftSpectrum(T*, T*, T*, Pl* ppl = NULL);

void channelRange (T*, Pl* ppl = NULL );

void channelFftSpectrum(T*, T*, T*, Pl* ppl = NULL);

void channelRange (T*, Pl* ppl = NULL );

void channelFftSpectrum(T*, T*, T*, Pl* ppl = NULL);

void channelRange (T*, Pl* ppl = NULL );

void channelFftSpectrum(T*, T*, T*, Pl* ppl = NULL);

void channelRange (T*, Pl* ppl = NULL );

Spé

cific

atio

ns U

siX

MLGénération automatique du code par assemblage de composants

Page 7: 1 Réunion CESAME, Grenoble, 12-13 mars 2007 Adaptation au contexte supportée par UsiXML Jean Vanderdonckt, Sophie Lepreux Belgian Lab. of Computer-Human

7 Réunion CESAME, Grenoble, 12-13 mars 2007

Deuxième exemple: adaptation à l’exécution

Page 8: 1 Réunion CESAME, Grenoble, 12-13 mars 2007 Adaptation au contexte supportée par UsiXML Jean Vanderdonckt, Sophie Lepreux Belgian Lab. of Computer-Human

8 Réunion CESAME, Grenoble, 12-13 mars 2007

Adaptation à l’exécution

• Sensibilité– À la plate-forme

• Résolution: 640x480, 640x200, 320x480, 320x320,… ou à la demande

• Type de plate-forme: MacOs X, Linux, Windows– A l’utilisateur

• Préférence à la saisie vs sélection des données• Préférence pour la représentation textuelle vs graphique

• Au moyen de règles ECA– On Event IF Condition Then Action

[Collignon, 2006]

Page 9: 1 Réunion CESAME, Grenoble, 12-13 mars 2007 Adaptation au contexte supportée par UsiXML Jean Vanderdonckt, Sophie Lepreux Belgian Lab. of Computer-Human

9 Réunion CESAME, Grenoble, 12-13 mars 2007

Troisième exemple: IHM distribuée

Page 10: 1 Réunion CESAME, Grenoble, 12-13 mars 2007 Adaptation au contexte supportée par UsiXML Jean Vanderdonckt, Sophie Lepreux Belgian Lab. of Computer-Human

10 Réunion CESAME, Grenoble, 12-13 mars 2007

IHM multi-plate-forme distribuée

• Ancien exemple: FlexClock

Horloge

Calendrier

Mois précédent Mois suivant

Mois courant

Agenda

• Nouvel exemple: Calendrier distribuable

[Grolaux, 2007]

Page 11: 1 Réunion CESAME, Grenoble, 12-13 mars 2007 Adaptation au contexte supportée par UsiXML Jean Vanderdonckt, Sophie Lepreux Belgian Lab. of Computer-Human

11 Réunion CESAME, Grenoble, 12-13 mars 2007

UsiXML DVD Release 2 (14 fév. 2007)

• Version UsiXML V1.8.0 avec les nouvelles extensions suivantes:• Support pour les IHM des workflows• Nouveaux types de tâche• Support complet pour les layout• Interfaces 3D simples• Interaction haptique• Support renforcé pour l’interaction vocale• Synchronisation avec interaction graphique• Stabilisation d’attributs préalablement utilisés• Annotations de conception

• Articles publiés avec UsiXML?– 2003 (1 Similar)– 2004 (12 Similar)– 2005 (14 Similar)– 2006 (17 Similar, 4 en dehors)– 2007 (8 Similar, 2 en dehors)

Page 12: 1 Réunion CESAME, Grenoble, 12-13 mars 2007 Adaptation au contexte supportée par UsiXML Jean Vanderdonckt, Sophie Lepreux Belgian Lab. of Computer-Human

12 Réunion CESAME, Grenoble, 12-13 mars 2007

For more information and downloading,http://www.isys.ucl.ac.be/bchi

http://www.usixml.orgUser Interface eXtensible Markup Language

http://www.similar.ccEuropean network on Multimodal UIs

Merci pour votre attention!