Laureline's Wiki

Laureline's Wiki

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
heig:vcl:rapport:implementation:desktop:liseuse [2016/05/30 10:36] Laureline Davidheig:vcl:rapport:implementation:desktop:liseuse [2016/06/01 23:46] (current) kerroin
Line 1: Line 1:
 ====== Liseuse ====== ====== Liseuse ======
 +
 +{{ :heig:vcl:rapport:implementation:desktop:reader.png?nolink |Liseuse}}
  
 La liseuse permet de lire les différents volumes de la bibliothèque. Elle est à part de le bibliothèque et ne fait que prendre un volume en entrée. Elle offre à l'utilisateur plusieurs option de navigation telle que: La liseuse permet de lire les différents volumes de la bibliothèque. Elle est à part de le bibliothèque et ne fait que prendre un volume en entrée. Elle offre à l'utilisateur plusieurs option de navigation telle que:
-  * Changer le sens de lecture: Cela permet, pour certain manga asiatique, de lire de droite à gauche plutôt que de gauche à droite. Cela est surtout pratique quand on utilise les doubles pages. +  * Changer le sens de lecture: Cela permet, pour certains mangas, de lire de droite à gauche plutôt que de gauche à droite. Cela est surtout pratique quand on utilise les doubles pages. 
-  * Simple ou double pages: Cela gère l'affichage et définis si une seul page à la fois ou deux pages en même temps doit être afficher. L'affichage de deux pages simultané simule l'expérience qu'un utilisateur pourrait avoir si il lisait un livre physique. +  * Simple ou double pages: Cela gère l'affichage et définit si une seule page à la fois ou deux pages en même temps doivent être affichées. L'affichage de deux pages simultanées simule l'expérience qu'un utilisateur pourrait avoir si il lisait un livre physique. 
-Pour l'instant, la seul option de redimmensionnement de la page est automatique sur la hauteur. Une autre option de redimmensionnement sur la largeur devait pouvoir être implémenter mais nous avons malheureusement rencontrer des soucis et cela n'a pas pu se faire. Cela serait une fonctionnalité à ajouter à l'application par la suite.+  * Redimmensionnement de la page: Il est possible de définir le redimmensionnement automatique de la page sois sur la hauteur, sois sur la largeur de la fenêtre.
  
-L'implémentation de la logique de la liseuse est faites grâce à un ''Navigator'' implémenter dans le package ''navigation''. La classe ''Navigator'' étant abstraite, elle donne la possibilité de crée des ''Navigator'' pour un nombre de pages voulu. Nous avons décider de ne l'implémenter que pour les pages simple (''SimpleNavigator'') et pour les pages doubles, c-a-d 2 pages simples (''DoubleNavigator'') car cela n'a pas de sens dans notre contexte de l'utiliser pour plus de pages.+L'implémentation de la logique de la liseuse est faites grâce à un ''Navigator'' implémenté dans le package ''navigation''. La classe ''Navigator'' étant abstraite, elle donne la possibilité de créer des ''Navigator'' pour un nombre de pages voulu. Nous avons décidé de ne l'implémenter que pour les pages simple (''SimpleNavigator'') et pour les pages doubles, c'est à dire 2 pages simples (''DoubleNavigator'') car cela n'a pas de sens dans notre contexte de l'utiliser pour plus de pages.
  
-Chaque ''Navigator'' contient un volume et une page courante qui est afficher. Ces pages sont définit au tant que ''DisplayPage'', qui est aussi une classe abstraite permettant d'implémenter des classes définit sur un nombre de pages voulu. Nous avons implémenter les classes pour des pages simples (''SimplePage'') et des pages double, c-a-d 2 pages simples (''DoublePage''). Une fois encore, nous n'avons pas implémenter d'autre classe, cela n'ayant pas de sens pour nous mais cela serais tous à fait possible.+Chaque ''Navigator'' contient un volume et une page courante qui est affichée. Ces pages sont définie au tant que ''DisplayPage'', qui est aussi une classe abstraite permettant d'implémenter des classes définies sur un nombre de pages voulu. Nous avons implémenté les classes pour des pages simples (''SimplePage'') et des pages double, c'est à dire 2 pages simples (''DoublePage''). Une fois encore, nous n'avons pas implémenté d'autre classe, cela n'ayant pas de sens pour nous mais cela serait tout à fait possible.
  
-En résumé, le ''Navigator'' permet d'implémenter la logique par laquelle les pages doivent être parcourus alors que les ''DisplayPage'' permette simplement de contenir une page de manière controler et définis dans le programme.+En résumé, le ''Navigator'' permet d'implémenter la logique par laquelle les pages doivent être parcourues alors que les ''DisplayPage'' permettent simplement de contenir une page de manière contrôlée et définie dans le programme.
  
 Voici un diagramme de classe pour le Navigator: Voici un diagramme de classe pour le Navigator:
  
-<uml title="Modèle de Domaine">+<uml> 
 +hide empty fields 
 +hide empty methods
  
 abstract class Navigator{ abstract class Navigator{
Line 32: Line 36:
   +nextPages(): DisplayPage   +nextPages(): DisplayPage
   +previousPages(): DisplayPage   +previousPages(): DisplayPage
 +  +goTo(index: int): DisplayPage
 } }
 class DoubleNavigator { class DoubleNavigator {
Line 39: Line 44:
   +nextPages(): DisplayPage   +nextPages(): DisplayPage
   +previousPages(): DisplayPage   +previousPages(): DisplayPage
 +  +goTo(index: int): DisplayPage
 } }
 interface INavigator { interface INavigator {
   +nextPages() : DisplayPage   +nextPages() : DisplayPage
   +previousPages() : DisplayPage   +previousPages() : DisplayPage
 +  +goTo(index: int): DisplayPage
   +setDirection(sens: Direction) : void   +setDirection(sens: Direction) : void
   +setCurrentPage(page: DisplayPage) : void   +setCurrentPage(page: DisplayPage) : void
Line 60: Line 67:
 </uml> </uml>
  
-On peut voir que on utilise une interface ''INavigator'' qui oblige les implémentations de faire les méthodes essentiel à la logique d'un navigateur. Le ''Navigator'' implémente partiellement certaine méthodes qui sont communes à n'importe quel navigateur.+On peut voir que l'on utilise une interface ''INavigator'' qui oblige les implémentations de définir les méthodes essentielles à la logique d'un navigateur. Le ''Navigator'' implémente partiellement certaines méthodes qui sont communes à n'importe quel navigateur.
  
 Voici un diagramme de classe pour le DisplayPage: Voici un diagramme de classe pour le DisplayPage:
-<uml title="Modèle de Domaine">+<uml> 
 +hide empty fields 
 +hide empty methods
  
 abstract class DisplayPage{ abstract class DisplayPage{
Line 98: Line 107:
 </uml> </uml>
  
-Ici, la logique est la même que pour le navigateur. Une interface définissant les méthodes obligatoire et une classe DisplayPage qui permet de faire une implémentation partielle des pages.+Ici, la logique est la même que pour le navigateur. Une interface définissant les méthodes obligatoires et une classe DisplayPage qui permet de faire une implémentation partielle des pages.
  
-Une subtilité réside dans le ''DoubleNavigator''. En effet, il est possible que des page doubles, c-a-d des pages qui, dans un livre physique sont en paysage, se trouve dans le volume. Ces pages ont été mise par les gens qui ont scanner le livre comme une grande pages qui est plus large que haute. Cela a été fait pour conserver le travail de l'auteur et ne pas dénaturé ces images en les séparant sur deux pages différentes. Dans ce cas, si jamais le ''DoubleNavigator'' voit que il y'a une double page, il va uniquement afficher la prochaine pages et non les 2 prochaines pages. Cela à pour effet que la page courante dans le navigateur sera une ''SimplePage'' et non une ''DoublePage'' comme on pourrait s'y attendre. Avec ce système, la vue n'a pas à ce soucier du type de navigateur qu'elle utilise, étant donné qu'elle reçoit une ''DisplayPage'' et de ce fait, il lui suffit de faire un contrôle du type de page qu'elle a pour donner le bon affichage.+Une subtilité réside dans le ''DoubleNavigator''. En effet, il est possible que des page doubles, c'est à dire des pages qui, dans un livre physique sont en paysage, se trouvent dans le volume. Ces pages ont été mises par les gens qui ont numérisé le livre comme une grande page qui est plus large que haute. Cela a été fait pour conserver le travail de l'auteur et ne pas dénaturer ces images en les séparant sur deux pages différentes. Dans ce cas, si jamais le ''DoubleNavigator'' voit qu'il y'a une double page, il va uniquement afficher la prochaine page et non les 2 prochaines pages. Cela à pour effet que la page courante dans le navigateur sera une ''SimplePage'' et non une ''DoublePage'' comme on pourrait s'y attendre. Avec ce système, la vue n'a pas à ce soucier du type de navigateur qu'elle utilise, étant donné qu'elle reçoit une ''DisplayPage'' et de ce fait, il lui suffit de faire un contrôle du type de page qu'elle a pour donner le bon affichage.
  
 **__Exemple d'image simple__** **__Exemple d'image simple__**
  
-{{  :heig:vcl:rapport:implementation:desktop:wonderland_v1_story1_06.jpg?200  |}}+{{  :heig:vcl:rapport:implementation:desktop:wonderland_v1_story1_06.jpg?200&nolink  |}}
  
 **__Exemple d'image double__** **__Exemple d'image double__**
  
-{{  :heig:vcl:rapport:implementation:desktop:v002.jpg?400  |}}+{{  :heig:vcl:rapport:implementation:desktop:ch016-p009.jpg?400&nolink  |}} 
 + 
 +===== Redimensionnement ===== 
 + 
 +La liseuse offre trois options de redimensionnement: Complet, Horizontal, Vertical. Le mode complet affiche la/les page(s) courante(s) au complet sur la fenêtre. Le redimensionnement Horizontal agrandi l'image jusqu'à ce que sa largeur soit celle de la fenêtre, l'utilisateur peut alors faire défiler l'image verticalement. De même, le mode vertical effectue un redimensionnement par rapport à la hauteur de l'image. 
 + 
 +La logique est implémentée dans la fonction ''ReaderController#refreshScaling()'' qui prend en charge tout les modes ainsi que le mode simple et double page. Cette fonction est appellée quand l'utilisateur change les dimensions de la fenêtre et lors d'un changement de page.