Ceci est une ancienne révision du document !
Création d'une lentilles (lens) pour unity
Il est conseillé de déjà consulter ce tutoriel, pour acquérir les bases, cette pages expliquera comment utiliser plus en profondeur la librairie singlet
Aperçus des fonctionnalités disponibles
L'idée d'ici est de créer une lense et un scope qui montrent toutes les possibilités à disposition par les lens et scope unity. Il sera facilement compilable pour pouvoir réellement tester toutes les possibilités et afin d'avoir un affichage a jour. Ce tutoriel ne contiendra donc pas d'images qui risquerai de rapidement devenirs obsolètes.
Nous nous appuirons sur singlet, une librairie que permet de créer plus facilement des lens et scope unity.
Création d'un projet
quickly create unity-lens ubuntu-fr-tutorial
Maintenant utilisons cette nouvelle lens :
cd ubuntu-fr-tutorial sudo quickly install quickly run
Et aller voir dans le Tableau de Bord (Dash)
Les types de catégories
Nous avons actuellement un catégorie d'affichée :
- ListViewCategory
Ouvrir le fichier ubuntu_fr_tutorial/init.py
On observe dans ce fichier
example_category = ListViewCategory("Examples", 'help')
Cela correspond donc à cette catégorie.
Nous allons la renommer et ajouter tous les types connus.
La doc officielle des type de catégories 1) nous propose 4 types :
- VERTICAL_TILE
- HORIZONTAL_TILE
- LIST_TILE
- FLOW
Mais singlet que 2 :
- IconViewCategory (VERTICAL_TILE)
- ListViewCategory (HORIZONTAL_TILE)
remplacer cette ligne pas les suivantes, la méthode permet de peupler une catégorie :
list_view_category = ListViewCategory("ListViewCategory", 'help') icon_view_category = IconViewCategory("IconViewCategory", 'help') def populate_category(self, category, results): for i in xrange(15): results.append('https://wiki.ubuntu.com/Unity/Lenses/Singlet', 'ubuntu-logo', category, "text/html", 'Learn More', 'Find out how to write your Unity Lens', 'https://wiki.ubuntu.com/Unity/Lenses/Singlet') results.append('https://wiki.ubuntu.com/Unity/Lenses/Singlet', 'ubuntu-logo', category, "text/html", 'Test sur un très très très très grand texte hahahahahaha ! ', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec', 'https://wiki.ubuntu.com/Unity/Lenses/Singlet')
Remplaçons le contenu de la méthode search par :
self.populate_category(self.list_view_category, results) self.populate_category(self.icon_view_category, results)
Et comme on parle français et qu'on a envie de pouvoir mettre des accents utf-8, ajouter un première ligne du fichier :
# -*-coding:utf-8 -*
Alors ok, ça fonctionne et on observe 2 types de catégorie, essayons quand memes les autres (singlet nous le permet, et c'est tant mieux !) !
list_tile_category = Category("CategoryRenderer.LIST_TILE", 'help', Unity.CategoryRenderer.LIST_TILE) flow_category = Category("CategoryRenderer.FLOW", 'help', Unity.CategoryRenderer.FLOW)
self.populate_category(self.list_tile_category, results) self.populate_category(self.flow_category, results)
Nous ajouterons aussi les 2 imports suivants :
from singlet.lens.category import Category from gi.overrides.Unity import Unity
Testez !
Bon, ok on comprend pourquoi il n'étaient pas inclus par défaut, je ne vois pas de différence avec IconViewCategory, mais ca valais le coup de tester.
En effet, ce sont juste des membre de notre classe !
Il utilise pour cela l'introspection :
for aName, a in attrs.items(): if isinstance(a, Unity.Scope): new_class._meta.scope_dict[aName] = a if not hasattr(meta, 'scope_order'): new_class._meta.scope_order.append(aName) elif isinstance(a, Unity.Category): new_class._meta.category_dict[aName] = a if not hasattr(meta, 'category_order'): new_class._meta.category_order.append(aName) setattr(new_class, aName, new_class._meta.category_order.index(aName)) elif isinstance(a, Unity.Filter): new_class._meta.filter_dict[aName] = a if not hasattr(meta, 'filter_order'): new_class._meta.filter_order.append(aName) else: setattr(new_class, aName, a)
On vois ici que elif isinstance(a, Unity.Category): trouve toute les catégories de notre classe