diff options
Diffstat (limited to 'plugins/python/welcome/tip.py')
-rw-r--r-- | plugins/python/welcome/tip.py | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/plugins/python/welcome/tip.py b/plugins/python/welcome/tip.py new file mode 100644 index 0000000..1a57575 --- /dev/null +++ b/plugins/python/welcome/tip.py @@ -0,0 +1,146 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +from welcome.board import SmallBoard +from gi.repository import Gtk +import random + +try: + import cairo + has_cairo = True + import os +except: + has_cairo = False + + +_tip_messages = [ + "Message 1", + "Message 2", + "Message 3", + "Message 4", + "Message 5", + "Message 6" +] + +assert(len(_tip_messages) > 0) + + +class TipOfTheDay(SmallBoard): + """Présente une série d'astuces du jour.""" + + + def __init__(self): + """Construit le panneau avec son contenu.""" + + super(TipOfTheDay, self).__init__() + + box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10) + self.add(box) + + # Barre de contrôle + + toolbar = Gtk.Box(spacing=10) + toolbar.props.margin = 20 + box.pack_end(toolbar, False, True, 0) + + btn = Gtk.Button('Previous') + btn.connect('clicked', self.show_previous_message) + toolbar.pack_start(btn, False, True, 8) + + btn = Gtk.Button('Next') + btn.connect('clicked', self.show_next_message) + toolbar.pack_start(btn, False, True, 8) + + # Contenu de l'astuce courante + + desc = Gtk.Label('', use_markup=True, wrap=True, xalign=0) + self._message = desc + desc.set_justify(Gtk.Justification.LEFT) + box.pack_end(desc, False, True, 0) + + # Titre + + desc = Gtk.Label("<b>Did you know?</b>", use_markup=True, wrap=True, xalign=0) + desc.set_justify(Gtk.Justification.LEFT) + box.pack_end(desc, False, True, 0) + + # Image de fond, si possible + + if has_cairo: + + os.chdir(os.path.dirname(__file__)) + + self._img = cairo.ImageSurface.create_from_png('tipoftheday.png') + + self.connect_after('draw', self.draw_background) + + # Sélection du message courant + + self._indexes = [i for i in range(len(_tip_messages))] + random.shuffle(self._indexes) + + self._index = 0 + + self.show_message() + + + def draw_background(self, widget, cr): + """Dessine une image de fond pour les conseils.""" + + img_width = self._img.get_width() + img_height = self._img.get_height() + + alloc = self.get_allocation() + target_height = alloc.height * 0.7 + + if img_height > target_height: + + scale = float(target_height) / float(img_height) + + cr.translate(alloc.width - img_width * scale - 10, 10) + cr.scale(scale, scale) + + else: + + cr.translate(alloc.width - img_width - 10, 10) + + cr.set_source_surface(self._img) + cr.paint_with_alpha(0.6) + + + def show_message(self): + """Affiche un conseil du jour donné.""" + + selected = self._indexes[self._index] + + msg = _tip_messages[selected] + + self._message.set_markup(msg) + + + def show_previous_message(self, button): + """Affiche un conseil du jour précédent.""" + + if self._index == 0: + self._index = len(_tip_messages) - 1 + else: + self._index = self._index - 1 + + self.show_message() + + + def show_next_message(self, button): + """Affiche un conseil du jour suivant.""" + + self._index = self._index + 1 + + if self._index == len(_tip_messages): + self._index = 0 + + self.show_message() + + + def get_location(self): + """Fournit la localisation souhaitée pour la plache.""" + + return [ 2, 1, 2, 2 ] |