summaryrefslogtreecommitdiff
path: root/plugins/python/welcome/tip.py
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/python/welcome/tip.py')
-rw-r--r--plugins/python/welcome/tip.py146
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 ]