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

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.

Comment fait singlet pour connaître les catégories a afficher

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


  • utilisateurs/quent57/tutoriel/singlet_unity_lens.1359313795.txt.gz
  • Dernière modification: Le 27/01/2013, 20:09
  • par quent57