You are here: Links of Interest » HEIG-VD » [PRO] Virtual Comics Library » Rapport » Implémentation » Application Desktop » Bibliothèque
Bibliothèque
This is an old revision of the document!
Table of Contents
Bibliothèque
La bibliothèque est implémentés à l'aide de plusieurs controlleurs. Un controlleur principal qui gère la TreeView qui affiche les catalogues et un controlleur secondaire qui se charge de l'affichage des volumes. Chaque volume possède aussi son propre controlleur afin de pouvoir gérer l'affichage et les actions d'un volume de manière isolée.
Affichage des Catalogues
L'affichage des catalogues utilise une TreeView pour afficher les catalogues. Pour pouvoir appliquer des filtres au contenu de la TreeView, les classes RootCatalogItem
et CatalogItem
on été crées. La classe RootCatalogItem
se place comme élémet racine (La TreeView est configurée pour ne pas afficher son élément racine mais uniquement ses enfants) et expose comme enfants les catégories racines des catalogues enregistrés dans le système sous la forme de CatalogItem
s qui lui même possède plusieurs CatalogItem
s pour leur enfants. Ceci forme un arbe parallèle à la structure des catalogues sous-jacents. Ces objets peuvent être considérés comme des “proxy” vers la vértiable structure.
Ces objets proxy permettent d'implémenter un système de filtre sur l'arborecence sans qu'il soit nécéssaire de recréer toute la structure. La classe CatalogItem
expose une méthode refresh()
qui synchronise ses enfants avec l'objet sous-jacent et conserve l'ordre des enfants.
Filtrer un Catalogue
Une méthode applyFilter(filter)
est aussi disponnible sur les CatalogItems
. Cette méthode permet de restreindre quels noeuds sont affichés.
public boolean applyFilter(CatalogFilter filter) { boolean hasMatch = false; if (filter.matches(getValue())) { setExpanded(true); hasMatch = true; }
for (CatalogItem item : items.values()) { boolean childMatches = item.applyFilter(filter); if (childMatches && !getChildren().contains(item)) { getChildren().add(item); } else if (!childMatches && getChildren().contains(item)) { getChildren().remove(item); } hasMatch = hasMatch || childMatches; } sortChildren(); return hasMatch; }
public void clearFilter() { for (CatalogItem item : items.values()){ item.clearFilter();
if (!getChildren().contains(item)) { getChildren().add(item); } } sortChildren(); }