From 87fcc1d2ee4273d4af14e97dd7f545ff22fc37d6 Mon Sep 17 00:00:00 2001 From: Muriel de Souza Godoi Date: Sat, 01 Sep 2007 18:48:48 +0000 Subject: Fix for internacionalization #3068, letters games merged and card some otmization in card code --- diff --git a/NEWS b/NEWS index 8b8eafc..b83558e 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,7 @@ +* Internacionalization for activity name, games tab, and standard game set names. Fix for #3068 (Muriel) +* Card code cleaned and with some otmizations (Muriel) +* Letters1 and Letters2 merged in Letters (Muriel) + 15 * Fix for high memory consumption #3106 diff --git a/activity.py b/activity.py index 325b238..e72a4fe 100755 --- a/activity.py +++ b/activity.py @@ -19,6 +19,7 @@ import logging from gettext import gettext as _ +import os import dbus import gtk @@ -50,7 +51,7 @@ class MemorizeActivity(Activity): def __init__(self, handle): Activity.__init__(self, handle) - self.set_title('Memorize Activity') + self.set_title(_('Memorize Activity')) self.table = cardtable.CardTable() self.scoreboard = scoreboard.Scoreboard() @@ -64,7 +65,7 @@ class MemorizeActivity(Activity): activity_toolbar = toolbox.get_activity_toolbar() self._memorizeToolbar = memorizetoolbar.MemorizeToolbar(self) - toolbox.add_toolbar('Games', self._memorizeToolbar) + toolbox.add_toolbar(_('Games'), self._memorizeToolbar) self._memorizeToolbar.show() self.set_toolbox(toolbox) @@ -81,6 +82,7 @@ class MemorizeActivity(Activity): self.game.connect('reset_table', self.table.reset) self.game.connect('load_game', self.table.load_game) self.game.connect('change_game', self.table.change_game) + self.game.connect('load_game', self._memorizeToolbar.update_toolbar) self.game.connect('change_game', self._memorizeToolbar.update_toolbar) self.game.connect('set-border', self.table.set_border) self.game.connect('flop-card', self.table.flop_card) @@ -126,7 +128,7 @@ class MemorizeActivity(Activity): self._joined_cb() else: _logger.debug("buddy joined - __init__: %s", self.owner.props.nick) - self.game.load_game('numbers', 4) + self.game.load_game('addition', 4) self.game.add_buddy(self.owner) def restart(self, widget): diff --git a/cardtable.py b/cardtable.py index e61b6f0..70f70b1 100755 --- a/cardtable.py +++ b/cardtable.py @@ -117,6 +117,7 @@ class CardTable(gtk.EventBox): self.table.remove(card) del card self.load_game(None, data, grid) + gc.collect() def get_card_size(self, size_table): x = (780 - (11*size_table))/size_table diff --git a/games/addition/addition.mem b/games/addition/addition.mem index 3c073f8..3ddac2f 100644 --- a/games/addition/addition.mem +++ b/games/addition/addition.mem @@ -1,5 +1,5 @@ - + diff --git a/games/letters1/letters1.mem b/games/letters/letters.mem index 87d626d..2e7ac99 100755 --- a/games/letters1/letters1.mem +++ b/games/letters/letters.mem @@ -1,5 +1,5 @@ - + @@ -19,5 +19,13 @@ + + + + + + + + diff --git a/games/letters1/sounds/a.ogg b/games/letters/sounds/a.ogg index e56a27c..e56a27c 100644 --- a/games/letters1/sounds/a.ogg +++ b/games/letters/sounds/a.ogg Binary files differ diff --git a/games/letters1/sounds/b.ogg b/games/letters/sounds/b.ogg index ebb0b0c..ebb0b0c 100644 --- a/games/letters1/sounds/b.ogg +++ b/games/letters/sounds/b.ogg Binary files differ diff --git a/games/letters1/sounds/c.ogg b/games/letters/sounds/c.ogg index 237a564..237a564 100644 --- a/games/letters1/sounds/c.ogg +++ b/games/letters/sounds/c.ogg Binary files differ diff --git a/games/letters1/sounds/d.ogg b/games/letters/sounds/d.ogg index 73eea5b..73eea5b 100644 --- a/games/letters1/sounds/d.ogg +++ b/games/letters/sounds/d.ogg Binary files differ diff --git a/games/letters1/sounds/e.ogg b/games/letters/sounds/e.ogg index d08f166..d08f166 100644 --- a/games/letters1/sounds/e.ogg +++ b/games/letters/sounds/e.ogg Binary files differ diff --git a/games/letters1/sounds/f.ogg b/games/letters/sounds/f.ogg index 3552848..3552848 100644 --- a/games/letters1/sounds/f.ogg +++ b/games/letters/sounds/f.ogg Binary files differ diff --git a/games/letters1/sounds/g.ogg b/games/letters/sounds/g.ogg index d3515e4..d3515e4 100644 --- a/games/letters1/sounds/g.ogg +++ b/games/letters/sounds/g.ogg Binary files differ diff --git a/games/letters1/sounds/h.ogg b/games/letters/sounds/h.ogg index d87d7e2..d87d7e2 100644 --- a/games/letters1/sounds/h.ogg +++ b/games/letters/sounds/h.ogg Binary files differ diff --git a/games/letters1/sounds/i.ogg b/games/letters/sounds/i.ogg index 1428e96..1428e96 100644 --- a/games/letters1/sounds/i.ogg +++ b/games/letters/sounds/i.ogg Binary files differ diff --git a/games/letters1/sounds/j.ogg b/games/letters/sounds/j.ogg index 02a285e..02a285e 100644 --- a/games/letters1/sounds/j.ogg +++ b/games/letters/sounds/j.ogg Binary files differ diff --git a/games/letters1/sounds/k.ogg b/games/letters/sounds/k.ogg index 2079f22..2079f22 100644 --- a/games/letters1/sounds/k.ogg +++ b/games/letters/sounds/k.ogg Binary files differ diff --git a/games/letters1/sounds/l.ogg b/games/letters/sounds/l.ogg index c8569ee..c8569ee 100644 --- a/games/letters1/sounds/l.ogg +++ b/games/letters/sounds/l.ogg Binary files differ diff --git a/games/letters1/sounds/m.ogg b/games/letters/sounds/m.ogg index 7b8a553..7b8a553 100644 --- a/games/letters1/sounds/m.ogg +++ b/games/letters/sounds/m.ogg Binary files differ diff --git a/games/letters1/sounds/n.ogg b/games/letters/sounds/n.ogg index bfd48a0..bfd48a0 100644 --- a/games/letters1/sounds/n.ogg +++ b/games/letters/sounds/n.ogg Binary files differ diff --git a/games/letters1/sounds/o.ogg b/games/letters/sounds/o.ogg index 74b48e4..74b48e4 100644 --- a/games/letters1/sounds/o.ogg +++ b/games/letters/sounds/o.ogg Binary files differ diff --git a/games/letters1/sounds/p.ogg b/games/letters/sounds/p.ogg index eccd963..eccd963 100644 --- a/games/letters1/sounds/p.ogg +++ b/games/letters/sounds/p.ogg Binary files differ diff --git a/games/letters1/sounds/q.ogg b/games/letters/sounds/q.ogg index e991c5f..e991c5f 100644 --- a/games/letters1/sounds/q.ogg +++ b/games/letters/sounds/q.ogg Binary files differ diff --git a/games/letters2/sounds/r.ogg b/games/letters/sounds/r.ogg index 66d805e..66d805e 100644..100755 --- a/games/letters2/sounds/r.ogg +++ b/games/letters/sounds/r.ogg Binary files differ diff --git a/games/letters2/sounds/s.ogg b/games/letters/sounds/s.ogg index 640c2c7..640c2c7 100644..100755 --- a/games/letters2/sounds/s.ogg +++ b/games/letters/sounds/s.ogg Binary files differ diff --git a/games/letters2/sounds/t.ogg b/games/letters/sounds/t.ogg index 6dc8fd5..6dc8fd5 100644..100755 --- a/games/letters2/sounds/t.ogg +++ b/games/letters/sounds/t.ogg Binary files differ diff --git a/games/letters1/sounds/u.ogg b/games/letters/sounds/u.ogg index 8f00984..8f00984 100644 --- a/games/letters1/sounds/u.ogg +++ b/games/letters/sounds/u.ogg Binary files differ diff --git a/games/letters2/sounds/v.ogg b/games/letters/sounds/v.ogg index ce5796e..ce5796e 100644..100755 --- a/games/letters2/sounds/v.ogg +++ b/games/letters/sounds/v.ogg Binary files differ diff --git a/games/letters2/sounds/w.ogg b/games/letters/sounds/w.ogg index 95254b9..95254b9 100644..100755 --- a/games/letters2/sounds/w.ogg +++ b/games/letters/sounds/w.ogg Binary files differ diff --git a/games/letters2/sounds/x.ogg b/games/letters/sounds/x.ogg index 09ed36a..09ed36a 100644..100755 --- a/games/letters2/sounds/x.ogg +++ b/games/letters/sounds/x.ogg Binary files differ diff --git a/games/letters2/sounds/y.ogg b/games/letters/sounds/y.ogg index c1647e7..c1647e7 100644..100755 --- a/games/letters2/sounds/y.ogg +++ b/games/letters/sounds/y.ogg Binary files differ diff --git a/games/letters2/sounds/z.ogg b/games/letters/sounds/z.ogg index c74771f..c74771f 100644..100755 --- a/games/letters2/sounds/z.ogg +++ b/games/letters/sounds/z.ogg Binary files differ diff --git a/games/letters2/letters2.mem b/games/letters2/letters2.mem deleted file mode 100755 index 1b30363..0000000 --- a/games/letters2/letters2.mem +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/games/letters2/sounds/a.ogg b/games/letters2/sounds/a.ogg deleted file mode 100644 index f4592c8..0000000 --- a/games/letters2/sounds/a.ogg +++ /dev/null Binary files differ diff --git a/games/letters2/sounds/e.ogg b/games/letters2/sounds/e.ogg deleted file mode 100644 index 7c9cb75..0000000 --- a/games/letters2/sounds/e.ogg +++ /dev/null Binary files differ diff --git a/games/letters2/sounds/i.ogg b/games/letters2/sounds/i.ogg deleted file mode 100644 index 8ad50c8..0000000 --- a/games/letters2/sounds/i.ogg +++ /dev/null Binary files differ diff --git a/games/letters2/sounds/l.ogg b/games/letters2/sounds/l.ogg deleted file mode 100644 index 058c276..0000000 --- a/games/letters2/sounds/l.ogg +++ /dev/null Binary files differ diff --git a/games/letters2/sounds/m.ogg b/games/letters2/sounds/m.ogg deleted file mode 100644 index e9a5abd..0000000 --- a/games/letters2/sounds/m.ogg +++ /dev/null Binary files differ diff --git a/games/letters2/sounds/n.ogg b/games/letters2/sounds/n.ogg deleted file mode 100644 index 7d4eba8..0000000 --- a/games/letters2/sounds/n.ogg +++ /dev/null Binary files differ diff --git a/games/letters2/sounds/o.ogg b/games/letters2/sounds/o.ogg deleted file mode 100644 index aab82f4..0000000 --- a/games/letters2/sounds/o.ogg +++ /dev/null Binary files differ diff --git a/games/letters2/sounds/p.ogg b/games/letters2/sounds/p.ogg deleted file mode 100644 index c5ee3ee..0000000 --- a/games/letters2/sounds/p.ogg +++ /dev/null Binary files differ diff --git a/games/letters2/sounds/q.ogg b/games/letters2/sounds/q.ogg deleted file mode 100644 index 7d4da8c..0000000 --- a/games/letters2/sounds/q.ogg +++ /dev/null Binary files differ diff --git a/games/letters2/sounds/u.ogg b/games/letters2/sounds/u.ogg deleted file mode 100644 index ee104de..0000000 --- a/games/letters2/sounds/u.ogg +++ /dev/null Binary files differ diff --git a/images/black.png b/images/black.png deleted file mode 100644 index 5fdc7f7..0000000 --- a/images/black.png +++ /dev/null Binary files differ diff --git a/images/card-text.svg b/images/card-text.svg deleted file mode 100755 index f095605..0000000 --- a/images/card-text.svg +++ /dev/null @@ -1,126 +0,0 @@ - - - - - -]> - - - - - - - image/svg+xml - - - - - - card_line1 - card_line3 - card_line2 - card_line4 - card_text - - diff --git a/locale/pt_BR/LC_MESSAGES/org.laptop.Memorize.mo b/locale/pt_BR/LC_MESSAGES/org.laptop.Memorize.mo new file mode 100644 index 0000000..b9cedfd --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/org.laptop.Memorize.mo Binary files differ diff --git a/locale/pt_BR/activity.linfo b/locale/pt_BR/activity.linfo new file mode 100755 index 0000000..51d5971 --- /dev/null +++ b/locale/pt_BR/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Jogo da Memória \ No newline at end of file diff --git a/memorizetoolbar.py b/memorizetoolbar.py index 0caf34c..bf9f84d 100755 --- a/memorizetoolbar.py +++ b/memorizetoolbar.py @@ -18,16 +18,20 @@ # import logging -from gettext import gettext as _ import gtk import os +from gettext import gettext as _ from sugar.graphics.toolbutton import ToolButton from sugar.graphics.combobox import ComboBox + class MemorizeToolbar(gtk.Toolbar): __gtype_name__ = 'MemoryToolbar' + + standard_game_names = ["addition", "capitals", "drumgit", "letters", "numbers", "phonemes"] + translated_game_names = [_("addition"), _("capitals"), _("drumgit"), _("letters"), _("numbers"), _("phonemes")] def __init__(self, activity): gtk.Toolbar.__init__(self) @@ -51,9 +55,9 @@ class MemorizeToolbar(gtk.Toolbar): self.games.sort() self._game_combo = ComboBox() for i, f in enumerate(self.games): + if f in self.standard_game_names: + f = _(f) self._game_combo.append_item(i, f) - if f == 'numbers': - self._game_combo.set_active(i) self._game_combo.connect('changed', self._game_changed_cb) self._add_widget(self._game_combo) @@ -67,8 +71,6 @@ class MemorizeToolbar(gtk.Toolbar): self._sizes = ['4 X 4', '5 X 5', '6 X 6'] for i, f in enumerate(self._sizes): self._size_combo.append_item(i, f) - if f == '4 X 4': - self._size_combo.set_active(i) self._size_combo.connect('changed', self._game_changed_cb) self._add_widget(self._size_combo) @@ -84,6 +86,9 @@ class MemorizeToolbar(gtk.Toolbar): if not self._lock: game_name = self.games[self._game_combo.get_active()] game_size = int(self._sizes[self._size_combo.get_active()][0]) + if game_name in self.translated_game_names: + index = self.translated_game_names.index(game_name) + game_name = self.standard_game_names[index] self.activity.change_game(game_name, game_size) def update_toolbar(self, widget, data, grid): diff --git a/po/memorize.pot b/po/memorize.pot new file mode 100755 index 0000000..c70cfb5 --- /dev/null +++ b/po/memorize.pot @@ -0,0 +1,41 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date:2007-08-31 16:33-0300 \n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +#: /home/msgodoi/olpc/workspace/Memorize.activity/activity.py:53 +msgid "Memorize Activity" +msgstr "" + +#: /home/msgodoi/olpc/workspace/Memorize.activity/activity.py:67 +msgid "Games" +msgstr "" + +#: /home/msgodoi/olpc/workspace/Memorize.activity/memorizetoolbar.py:33 +msgid "addition" +msgstr "" + +#: /home/msgodoi/olpc/workspace/Memorize.activity/memorizetoolbar.py:33 +msgid "capitals" +msgstr "" + +#: /home/msgodoi/olpc/workspace/Memorize.activity/memorizetoolbar.py:33 +msgid "drumgit" +msgstr "" + +#: /home/msgodoi/olpc/workspace/Memorize.activity/memorizetoolbar.py:33 +msgid "letters" +msgstr "" + +#: /home/msgodoi/olpc/workspace/Memorize.activity/memorizetoolbar.py:33 +msgid "numbers" +msgstr "" + +#: /home/msgodoi/olpc/workspace/Memorize.activity/memorizetoolbar.py:33 +msgid "phonemes" +msgstr "" diff --git a/po/pt_BR.po b/po/pt_BR.po new file mode 100755 index 0000000..1e47ccd --- /dev/null +++ b/po/pt_BR.po @@ -0,0 +1,49 @@ +msgid "" +msgstr "" +"Project-Id-Version: Memorize\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2007-08-31 16:28-0300\n" +"Last-Translator: Muriel de Souza Godoi \n" +"Language-Team: Muriel de Souza Godoi \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: English\n" +"X-Poedit-Country: UNITED STATES\n" +"X-Poedit-SourceCharset: utf-8\n" +"X-Poedit-KeywordsList: _\n" +"X-Poedit-Basepath: .\n" +"X-Poedit-SearchPath-0: /home/msgodoi/olpc/workspace/Memorize.activity\n" + +#: /home/msgodoi/olpc/workspace/Memorize.activity/activity.py:53 +msgid "Memorize Activity" +msgstr "Jogo da Memória" + +#: /home/msgodoi/olpc/workspace/Memorize.activity/activity.py:67 +msgid "Games" +msgstr "Jogos" + +#: /home/msgodoi/olpc/workspace/Memorize.activity/memorizetoolbar.py:33 +msgid "addition" +msgstr "adição" + +#: /home/msgodoi/olpc/workspace/Memorize.activity/memorizetoolbar.py:33 +msgid "capitals" +msgstr "capitais" + +#: /home/msgodoi/olpc/workspace/Memorize.activity/memorizetoolbar.py:33 +msgid "drumgit" +msgstr "drumgit" + +#: /home/msgodoi/olpc/workspace/Memorize.activity/memorizetoolbar.py:33 +msgid "letters" +msgstr "letras" + +#: /home/msgodoi/olpc/workspace/Memorize.activity/memorizetoolbar.py:33 +msgid "numbers" +msgstr "números" + +#: /home/msgodoi/olpc/workspace/Memorize.activity/memorizetoolbar.py:33 +msgid "phonemes" +msgstr "sílabas" + diff --git a/svgcard.py b/svgcard.py index 6ba56b4..2958559 100755 --- a/svgcard.py +++ b/svgcard.py @@ -1,263 +1,262 @@ #! /usr/bin/env python # -# Copyright (C) 2007, One Laptop Per Child +# Copyright (C) 2007, One Laptop Per Child # -# Muriel de Souza Godoi - muriel@laptop.org +# Muriel de Souza Godoi - muriel@laptop.org # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # import os import gc import rsvg import re -import svglabel import gtk -import gobject import pango import logging _logger = logging.getLogger('memorize-activity') class SvgCard(gtk.DrawingArea): - - border_svg = os.path.join(os.path.dirname(__file__), "images/card.svg") - text_svg = os.path.join(os.path.dirname(__file__), "images/card-text.svg") - - # Default properties - default_props = {} - default_props['back_border'] = {'filename':border_svg, 'fill_color':'#b2b3b7', 'stroke_color':'#b2b3b7', 'opacity':'1'} - default_props['back_h_border'] = {'filename':border_svg, 'fill_color':'#b2b3b7', 'stroke_color':'#ffffff', 'opacity':'1'} - default_props['back_text'] = {'filename':text_svg, 'text_color':'#c7c8cc'} - default_props['front_border'] = {'filename':border_svg, 'fill_color':'#4c4d4f', 'stroke_color':'#ffffff', 'opacity':'0'} - default_props['front_h_border'] = {'filename':border_svg, 'fill_color':'#555555', 'stroke_color':'#888888', 'opacity':'0.5'} - default_props['front_text'] = {'filename':text_svg, 'text_color':'#ffffff'} + + border_svg = os.path.join(os.path.dirname(__file__), "images/card.svg") - - def __init__(self, id, pprops, pcache, jpeg, size,align): - gtk.DrawingArea.__init__(self) - self.set_size_request(size, size) - self.bg_color = '#000000' - self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self.bg_color)) - self.connect('expose-event', self._expose_cb) - self.flipped = False - self.id = id - self.jpeg = jpeg - self.size = size - self.align = align - self.set_flags(gtk.CAN_FOCUS) - - # Views properties - views = ['back_border','back_h_border','back_text','front_border','front_h_border','front_text'] - self.pprops = pprops - self.props = {} - for view in views: - self.props[view] = {} - self.props[view].update(self.default_props[view]) - self.props[view].update(pprops.get(view, {})) + # Default properties + default_props = {} + default_props['back_border'] = {'filename':border_svg, 'fill_color':'#b2b3b7', 'stroke_color':'#b2b3b7', 'opacity':'1'} + default_props['back_h_border'] = {'filename':border_svg, 'fill_color':'#b2b3b7', 'stroke_color':'#ffffff', 'opacity':'1'} + default_props['back_text'] = {'text_color':'#c7c8cc'} + default_props['front_border'] = {'filename':border_svg, 'fill_color':'#4c4d4f', 'stroke_color':'#ffffff', 'opacity':'0'} + default_props['front_h_border'] = {'filename':border_svg, 'fill_color':'#555555', 'stroke_color':'#888888', 'opacity':'0.5'} + default_props['front_text'] = {'text_color':'#ffffff'} + + def __init__(self, id, pprops, pcache, jpeg, size, align, bg_color='#000000'): + gtk.DrawingArea.__init__(self) + self.set_size_request(size, size) + self.bg_color = bg_color + self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self.bg_color)) + self.connect('expose-event', self._expose_cb) + self.flipped = False + self.flipped_once = False + self.id = id + self.jpeg = jpeg + self.size = size + self.align = align + self.set_flags(gtk.CAN_FOCUS) + + # Views properties + views = ['back_border', 'back_h_border', 'back_text', 'front_border', 'front_h_border', 'front_text'] + self.pprops = pprops + self.props = {} + for view in views: + self.props[view] = {} + self.props[view].update(self.default_props[view]) + self.props[view].update(pprops.get(view, {})) - # Cache - self.cache = {} - self.cache.update(pcache) + # Cache + self.cache = {} + self.cache.update(pcache) - if len(self.cache) == 0: - build_all = True - else: - build_all = False - - self.build_all = build_all - - if build_all or pprops.has_key('back_border'): - self.cache['back_border']= self._read_icon_data(self.props['back_border']) - if build_all or pprops.has_key('back_h_border'): - self.cache['back_h_border']= self._read_icon_data(self.props['back_h_border']) - - self.back_layout = self.get_text_layout(self.props['back_text'].get('card_text',''), self.size-12) - self.back_layout_position = (self.size -(self.back_layout.get_size()[1]/1000))/2 - # print str(self.props['back_text']) - - if build_all or self.pprops.has_key('back_border') or self.pprops.has_key('back_text'): - self.cache['back'] = self.build_face('back') - if build_all or self.pprops.has_key('back_h_border') or self.pprops.has_key('back_text'): - self.cache['back_h'] = self.build_face('back_h') - - self.current_pixbuf = self.cache['back'] - self.current_layout = self.back_layout - self.current_layout_position = self.back_layout_position - self.current_text_color = self.props['back_text'].get('text_color','#c7c8cc') - - # Set events and listeners - self.set_events(gtk.gdk.ALL_EVENTS_MASK) - gc.collect() - self.show() + build_all = (len(self.cache) == 0) + + self.build_all = build_all + + if build_all or pprops.has_key('back_border'): + self.cache['back_border']= self._read_icon_data(self.props['back_border']) + if build_all or pprops.has_key('back_h_border'): + self.cache['back_h_border']= self._read_icon_data(self.props['back_h_border']) + + self.back_layout = self.get_text_layout(self.props['back_text'].get('card_text', ''), self.size-12) + self.back_layout_position = (self.size -(self.back_layout.get_size()[1]/1000))/2 + + if build_all or self.pprops.has_key('back_border') or self.pprops.has_key('back_text'): + self.cache['back'] = self.build_face('back') + if build_all or self.pprops.has_key('back_h_border') or self.pprops.has_key('back_text'): + self.cache['back_h'] = self.build_face('back_h') + + self.current_pixbuf = self.cache['back'] + self.current_layout = self.back_layout + self.current_layout_position = self.back_layout_position + self.current_text_color = self.props['back_text'].get('text_color', '#c7c8cc') + + # Set events and listeners + self.set_events(gtk.gdk.ALL_EVENTS_MASK) + gc.collect() + self.show() - def _expose_cb(self, widget, event): - self.window.draw_pixbuf(None, self.current_pixbuf, 0, 0, 0, 0) - gc = self.window.new_gc() - widget.window.draw_layout(gc, x=6, y=self.current_layout_position, layout=self.current_layout, foreground=gtk.gdk.color_parse(self.current_text_color)) - return False + def _expose_cb(self, widget, event): + self.window.draw_pixbuf(None, self.current_pixbuf, 0, 0, 0, 0) + gc = self.window.new_gc() + widget.window.draw_layout(gc, x=6, y=self.current_layout_position, layout=self.current_layout, foreground=gtk.gdk.color_parse(self.current_text_color)) + return False - def _read_icon_data(self, dict): - icon_file = open(dict.get('filename', 'card.svg'), 'r') - data = icon_file.read() - icon_file.close() + def _read_icon_data(self, dict): + icon_file = open(dict.get('filename', 'card.svg'), 'r') + data = icon_file.read() + icon_file.close() - # Replace borders parameters - entity = '' % dict.get('fill_color', '') - data = re.sub('', entity, data) + # Replace borders parameters + entity = '' % dict.get('fill_color', '') + data = re.sub('', entity, data) - entity = '' % dict.get('stroke_color', '') - data = re.sub('', entity, data) - - entity = '' % dict.get('opacity', '') - data = re.sub('', entity, data) - - data = re.sub('size_card1', str(self.size), data) - data = re.sub('size_card2', str(self.size-6), data) - data = re.sub('size_card3', str(self.size-17), data) + entity = '' % dict.get('stroke_color', '') + data = re.sub('', entity, data) + + entity = '' % dict.get('opacity', '') + data = re.sub('', entity, data) + + data = re.sub('size_card1', str(self.size), data) + data = re.sub('size_card2', str(self.size-6), data) + data = re.sub('size_card3', str(self.size-17), data) - # Replace text parameters - entity = '' % dict.get('text_color', '#ffffff') - data = re.sub('', entity, data) + self.data_size = len(data) + return rsvg.Handle(data=data).get_pixbuf() + + def build_face(self, face): + if face.endswith('_h'): + text = face[:-2] + else: + text = face + pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, True, 8, self.size, self.size) + pixbuf.fill(0x00000000) + self.cache[face + '_border'].composite(pixbuf, 0, 0, self.size, self.size, 0, 0, 1, 1, gtk.gdk.INTERP_NEAREST, 255) + if face.startswith('front') and self.jpeg <> None: + self.cache['jpeg'].composite(pixbuf, 11, 11, self.size-22, self.size-22, 11, 11, 1, 1, gtk.gdk.INTERP_NEAREST, 255) + return pixbuf + + def set_border(self, stroke_color, fill_color): + self.props['front_border'].update({'fill_color':fill_color, 'stroke_color':stroke_color}) + self.cache['front_border'] = self._read_icon_data(self.props['front_border']) + self.cache['front'] = self.build_face('front') + self.current_pixbuf = self.cache['front'] + self.queue_draw() - data = re.sub('card_text', dict.get('card_text', ''), data) - data = re.sub('card_line1', dict.get('card_line1', ''), data) - data = re.sub('card_line2', dict.get('card_line2', ''), data) - data = re.sub('card_line3', dict.get('card_line3', ''), data) - data = re.sub('card_line4', dict.get('card_line4', ''), data) + def set_highlight(self, status, mouse = False): + if self.flipped: + if mouse: + return + if status: + self.current_pixbuf = self.cache['front_h'] + else: + self.current_pixbuf = self.cache['front'] + else: + if status: + self.current_pixbuf = self.cache['back_h'] + else: + self.current_pixbuf = self.cache['back'] + self.queue_draw() + + def flip(self): + if not self.flipped: + if not self.flipped_once: + if self.build_all or self.pprops.has_key('front_border'): + self.cache['front_border']= self._read_icon_data(self.props['front_border']) + if self.build_all or self.pprops.has_key('front_h_border'): + self.cache['front_h_border']= self._read_icon_data(self.props['front_h_border']) + self.front_layout = self.get_text_layout(self.props['front_text'].get('card_text', ''), self.size-11) + if self.align == '2': # top + self.front_layout_position = 6 + elif self.align == '3': # bottom + self.front_layout_position = self.size -(self.front_layout.get_size()[1]/1000) + else: # center and none + self.front_layout_position = (self.size -(self.front_layout.get_size()[1]/1000))/2 + if self.jpeg <> None: + pixbuf_t = gtk.gdk.pixbuf_new_from_file(self.jpeg) + self.cache['jpeg']= pixbuf_t.scale_simple(self.size-22, self.size-22, gtk.gdk.INTERP_BILINEAR) + del pixbuf_t + + if self.cache.has_key('front_border') or self.cache.has_key('front_text'): + self.cache['front'] = self.build_face('front') + if self.cache.has_key('front_h_border') or self.cache.has_key('front_text'): + self.cache['front_h'] = self.build_face('front_h') + self.flipped_once = True + + self.current_layout = self.front_layout + self.current_layout_position = self.front_layout_position + self.current_text_color = self.props['front_text'].get('text_color', '#c7c8cc') + self.current_pixbuf = self.build_face('front') + self.flipped = True + self.queue_draw() + while gtk.events_pending(): + gtk.main_iteration() + gc.collect() + + def flop(self): + self.current_pixbuf = self.build_face('back') + self.current_layout = self.back_layout + self.current_layout_position = self.back_layout_position + self.current_text_color = self.props['back_text'].get('text_color', '#c7c8cc') + self.flipped = False + self.queue_draw() + + def is_flipped(self): + return self.flipped + + def get_id(self): + return self.id + + def get_cache(self): + return self.cache + + def reset(self): + if self.flipped: + fill_color = self.default_props.get('front_border').get('fill_color') + stroke_color = self.default_props.get('front_border').get('stroke_color') + self.set_border(fill_color, stroke_color) + self.flop() + + def get_text_layout(self, text, size): + if self.size == 184: + font_sizes = [50, 40, 26, 20, 17, 13, 11, 8] + elif self.size == 145: + font_sizes = [45, 28, 20, 16, 13, 11, 9, 8] + elif self.size == 119: + font_sizes = [30, 24, 16, 13, 10, 8, 8, 8] - self.data_size = len(data) - return rsvg.Handle(data=data).get_pixbuf() - - def build_face(self, face): - if face.endswith('_h'): - text = face[:-2] - else: - text = face - pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, True, 8, self.size, self.size) - pixbuf.fill(0x00000000) - self.cache[face + '_border'].composite(pixbuf, 0, 0, self.size, self.size, 0, 0, 1, 1, gtk.gdk.INTERP_NEAREST, 255) - if face.startswith('front') and self.jpeg <> None: - self.cache['jpeg'].composite(pixbuf, 11, 11, self.size-22, self.size-22, 11, 11, 1, 1, gtk.gdk.INTERP_NEAREST, 255) - #self.cache[face + '_border'].composite(pixbuf, 0, 0, self.size, self.size, 0, 0, 1, 1, gtk.gdk.INTERP_BILINEAR, 255) - #self.cache[text + '_text'].composite(pixbuf, 11, 11, self.size-22, self.size-22, 11, 11, 1, 1, gtk.gdk.INTERP_NEAREST, 255) - return pixbuf - - def set_border(self, stroke_color, fill_color): - self.props['front_border'].update({'fill_color':fill_color, 'stroke_color':stroke_color}) - self.cache['front_border'] = self._read_icon_data(self.props['front_border']) - self.cache['front'] = self.build_face('front') - self.current_pixbuf = self.cache['front'] - self.queue_draw() + # Set font size considering string length + if len(text) <= 8: + font_size = font_sizes[len(text)-1] + else: + font_size = 8 - def set_highlight(self, status, mouse = False): - if self.flipped: - if mouse: - return - if status: - self.current_pixbuf = self.cache['front_h'] - else: - self.current_pixbuf = self.cache['front'] - else: - if status: - self.current_pixbuf = self.cache['back_h'] - else: - self.current_pixbuf = self.cache['back'] - self.queue_draw() - - def flip(self): - if self.build_all or self.pprops.has_key('front_border'): - self.cache['front_border']= self._read_icon_data(self.props['front_border']) - if self.build_all or self.pprops.has_key('front_h_border'): - self.cache['front_h_border']= self._read_icon_data(self.props['front_h_border']) - if self.build_all or self.pprops.has_key('front_text'): - text = self._read_icon_data(self.props['front_text']) - self.cache['front_text'] = text.scale_simple(self.size-22, self.size-22, gtk.gdk.INTERP_BILINEAR) - del text - self.front_layout = self.get_text_layout(self.props['front_text'].get('card_text', ''), self.size-11) - if self.align == '1': # center - self.front_layout_position = (self.size -(self.front_layout.get_size()[1]/1000))/2 - elif self.align == '2': # top - self.front_layout_position = 6 - elif self.align == '3': # bottom - self.front_layout_position = self.size -(self.front_layout.get_size()[1]/1000) - self.current_layout = self.front_layout - self.current_layout_position = self.front_layout_position - self.current_text_color = self.props['front_text'].get('text_color','#c7c8cc') - if self.jpeg <> None: - pixbuf_t = gtk.gdk.pixbuf_new_from_file(self.jpeg) - self.cache['jpeg']= pixbuf_t.scale_simple(self.size-22, self.size-22, gtk.gdk.INTERP_BILINEAR) - del pixbuf_t - - if self.cache.has_key('front_border') or self.cache.has_key('front_text'): - self.cache['front'] = self.build_face('front') - if self.cache.has_key('front_h_border') or self.cache.has_key('front_text'): - self.cache['front_h'] = self.build_face('front_h') - - if not self.flipped: - self.current_pixbuf = self.build_face('front') - self.flipped = True - self.queue_draw() - while gtk.events_pending(): - gtk.main_iteration() - gc.collect() - - def flop(self): - self.current_pixbuf = self.build_face('back') - self.current_layout = self.back_layout - self.current_layout_position = self.back_layout_position - self.current_text_color = self.props['back_text'].get('text_color','#c7c8cc') - self.flipped = False - self.queue_draw() - - def is_flipped(self): - return self.flipped - - def get_id(self): - return self.id - - def get_cache(self): - return self.cache - - def reset(self): - if self.flipped: - fill_color = self.default_props.get('front_border').get('fill_color') - stroke_color = self.default_props.get('front_border').get('stroke_color') - self.set_border(fill_color, stroke_color) - self.flop() - - def get_text_layout(self, text, size): - #_logger.error('Text: '+text) - if self.size == 184: - font_sizes = [50,40,26,20,17,13,11,8] - elif self.size == 145: - font_sizes = [45,28,20,16,13,11,9,8] - elif self.size == 119: - font_sizes = [30,24,16,13,10,8,8,8] + # Set Pango context and Pango layout + context = self.create_pango_context() + layout = self.create_pango_layout(text) + desc = pango.FontDescription('Deja Vu Sans bold '+str(font_size)) + layout.set_font_description(desc) + layout.set_alignment(pango.ALIGN_CENTER) + layout.set_width(size*1000) + return layout - # Set font size considering string length - if len(text) <= 8: - font_size = font_sizes[len(text)-1] - else: - font_size = 8 - - # Set Pango context and Pango layout - context = self.create_pango_context() - layout = self.create_pango_layout(text) - desc = pango.FontDescription('Deja Vu Sans bold '+str(font_size)) - layout.set_font_description(desc) - layout.set_alignment(pango.ALIGN_CENTER) - layout.set_width(size*1000) - return layout + def set_background(self, color): + self.bg_color = color + self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self.bg_color)) + + def change_text(self, newtext): + self.props['front_text']['card_text'] = newtext + self.front_layout = self.get_text_layout(self.props['front_text'].get('card_text', ''), self.size-11) + if self.align == '2': # top + self.front_layout_position = 6 + elif self.align == '3': # bottom + self.front_layout_position = self.size -(self.front_layout.get_size()[1]/1000) + else: # center and none + self.front_layout_position = (self.size -(self.front_layout.get_size()[1]/1000))/2 + + self.current_layout = self.front_layout + self.current_layout_position = self.front_layout_position + self.queue_draw() + + def get_text(self): + return self.props['front_text']['card_text'] \ No newline at end of file -- cgit v0.9.1