summaryrefslogtreecommitdiff
path: root/plugins/python/welcome/panel.py
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/python/welcome/panel.py')
-rw-r--r--plugins/python/welcome/panel.py147
1 files changed, 147 insertions, 0 deletions
diff --git a/plugins/python/welcome/panel.py b/plugins/python/welcome/panel.py
new file mode 100644
index 0000000..811f008
--- /dev/null
+++ b/plugins/python/welcome/panel.py
@@ -0,0 +1,147 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+from welcome.binary import NewBinary
+from welcome.version import VersionChecker
+from welcome.website import WebInvitation
+from welcome.board import SmallBoard
+from welcome.tip import TipOfTheDay
+from gi.repository import GObject, Gtk, Gdk
+from pychrysalide.gui.panels import PanelItem
+
+
+class WelcomePanel(PanelItem):
+ """Display a welcome panel if nothing is open in the main part of the editor."""
+
+
+ def __init__(self):
+ """Initialize the Python instance of the panel."""
+
+ content = self._build_panel_content()
+
+ super(WelcomePanel, self).__init__('Welcome', 'First commands', content, 'M')
+
+
+ def _build_panel_content(self):
+ """Build content for the welcome panel."""
+
+ self._area = None
+
+ # Constitution du support principal
+
+ support = Gtk.Grid()
+
+ support.props.halign = Gtk.Align.CENTER
+ support.props.valign = Gtk.Align.CENTER
+ support.props.margin = 20
+
+ support.set_column_homogeneous(True)
+ support.set_row_homogeneous(True)
+ support.set_column_spacing(20)
+ support.set_row_spacing(20)
+
+ # Mise en place des différentes tuiles
+
+ cells = { }
+
+ for x in range(4):
+ for y in range(3):
+ cells[(x, y)] = False
+
+ tiles = [
+
+ NewBinary(),
+ VersionChecker(),
+ WebInvitation(),
+ TipOfTheDay()
+
+ ]
+
+ for t in tiles:
+
+ x, y, w, h = t.get_location()
+
+ for i in range(x, x + w):
+ for j in range(y, y + h):
+ assert(cells[(i, j)] == False)
+ cells[(i, j)] = True
+
+ t.attach(self)
+ support.attach(t, x, y, w, h)
+
+ for x in range(4):
+ for y in range(3):
+ if not cells[(x, y)]:
+ tile = SmallBoard()
+ tile.attach(self)
+ support.attach(tile, x, y, 1, 1)
+
+ # Charge les styles propres aux panneaux
+
+ style_provider = Gtk.CssProvider()
+
+ style_provider.load_from_data(SmallBoard.css.encode())
+
+ Gtk.StyleContext.add_provider_for_screen(
+ Gdk.Screen.get_default(),
+ style_provider,
+ Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
+ )
+
+
+ support.show_all()
+ return support
+
+
+ def define_selected_area(self, area):
+
+ self._area = area
+
+ ####
+ #self.queue_draw()
+
+
+ def draw_selected_area(self, widget, cr):
+
+
+ alloc = widget.get_allocation()
+
+
+
+
+ def draw_rounded2(cr, area, radius):
+ """ draws rectangles with rounded (circular arc) corners """
+ from math import pi
+ a,b,c,d=area
+ cr.arc(a + radius, c + radius, radius, 2*(pi/2), 3*(pi/2))
+ cr.arc(b - radius, c + radius, radius, 3*(pi/2), 4*(pi/2))
+ cr.arc(b - radius, d - radius, radius, 0*(pi/2), 1*(pi/2)) # ;o)
+ cr.arc(a + radius, d - radius, radius, 1*(pi/2), 2*(pi/2))
+ cr.rectangle(self._area.x, self._area.y, self._area.width, self._area.height)
+ cr.close_path()
+ cr.fill()
+
+
+ if self._area != None:
+ cr.set_source_rgba(0, 0, 0, 0.15)
+
+ border = 4
+
+ pts = ( self._area.x - border, self._area.x + self._area.width + border,
+ self._area.y - border, self._area.y + self._area.height + border )
+
+ #cr.save()
+
+ draw_rounded2(cr, pts, 16)
+
+ ctx = self.get_style_context()
+
+
+ Gtk.render_background(ctx, cr, 0, 20, 100, 100)
+ Gtk.render_background(ctx, cr, self._area.x, self._area.y, self._area.width, self._area.height)
+
+
+ #cr.restore()
+
+
+ return False