Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--NEWS4
-rwxr-xr-xactivity.py8
-rwxr-xr-xcardtable.py1
-rw-r--r--games/addition/addition.mem2
-rwxr-xr-xgames/letters/letters.mem (renamed from games/letters1/letters1.mem)10
-rw-r--r--games/letters/sounds/a.ogg (renamed from games/letters1/sounds/a.ogg)bin5956 -> 5956 bytes
-rw-r--r--games/letters/sounds/b.ogg (renamed from games/letters1/sounds/b.ogg)bin5241 -> 5241 bytes
-rw-r--r--games/letters/sounds/c.ogg (renamed from games/letters1/sounds/c.ogg)bin5533 -> 5533 bytes
-rw-r--r--games/letters/sounds/d.ogg (renamed from games/letters1/sounds/d.ogg)bin5099 -> 5099 bytes
-rw-r--r--games/letters/sounds/e.ogg (renamed from games/letters1/sounds/e.ogg)bin4906 -> 4906 bytes
-rw-r--r--games/letters/sounds/f.ogg (renamed from games/letters1/sounds/f.ogg)bin5660 -> 5660 bytes
-rw-r--r--games/letters/sounds/g.ogg (renamed from games/letters1/sounds/g.ogg)bin5229 -> 5229 bytes
-rw-r--r--games/letters/sounds/h.ogg (renamed from games/letters1/sounds/h.ogg)bin5628 -> 5628 bytes
-rw-r--r--games/letters/sounds/i.ogg (renamed from games/letters1/sounds/i.ogg)bin4722 -> 4722 bytes
-rw-r--r--games/letters/sounds/j.ogg (renamed from games/letters1/sounds/j.ogg)bin5874 -> 5874 bytes
-rw-r--r--games/letters/sounds/k.ogg (renamed from games/letters1/sounds/k.ogg)bin5352 -> 5352 bytes
-rw-r--r--games/letters/sounds/l.ogg (renamed from games/letters1/sounds/l.ogg)bin5183 -> 5183 bytes
-rw-r--r--games/letters/sounds/m.ogg (renamed from games/letters1/sounds/m.ogg)bin5679 -> 5679 bytes
-rw-r--r--games/letters/sounds/n.ogg (renamed from games/letters1/sounds/n.ogg)bin5460 -> 5460 bytes
-rw-r--r--games/letters/sounds/o.ogg (renamed from games/letters1/sounds/o.ogg)bin4873 -> 4873 bytes
-rw-r--r--games/letters/sounds/p.ogg (renamed from games/letters1/sounds/p.ogg)bin4832 -> 4832 bytes
-rw-r--r--games/letters/sounds/q.ogg (renamed from games/letters1/sounds/q.ogg)bin5281 -> 5281 bytes
-rwxr-xr-x[-rw-r--r--]games/letters/sounds/r.ogg (renamed from games/letters2/sounds/r.ogg)bin5695 -> 5695 bytes
-rwxr-xr-x[-rw-r--r--]games/letters/sounds/s.ogg (renamed from games/letters2/sounds/s.ogg)bin5377 -> 5377 bytes
-rwxr-xr-x[-rw-r--r--]games/letters/sounds/t.ogg (renamed from games/letters2/sounds/t.ogg)bin5024 -> 5024 bytes
-rw-r--r--games/letters/sounds/u.ogg (renamed from games/letters1/sounds/u.ogg)bin5069 -> 5069 bytes
-rwxr-xr-x[-rw-r--r--]games/letters/sounds/v.ogg (renamed from games/letters2/sounds/v.ogg)bin4979 -> 4979 bytes
-rwxr-xr-x[-rw-r--r--]games/letters/sounds/w.ogg (renamed from games/letters2/sounds/w.ogg)bin5976 -> 5976 bytes
-rwxr-xr-x[-rw-r--r--]games/letters/sounds/x.ogg (renamed from games/letters2/sounds/x.ogg)bin5542 -> 5542 bytes
-rwxr-xr-x[-rw-r--r--]games/letters/sounds/y.ogg (renamed from games/letters2/sounds/y.ogg)bin5624 -> 5624 bytes
-rwxr-xr-x[-rw-r--r--]games/letters/sounds/z.ogg (renamed from games/letters2/sounds/z.ogg)bin4995 -> 4995 bytes
-rwxr-xr-xgames/letters2/letters2.mem23
-rw-r--r--games/letters2/sounds/a.oggbin5956 -> 0 bytes
-rw-r--r--games/letters2/sounds/e.oggbin4906 -> 0 bytes
-rw-r--r--games/letters2/sounds/i.oggbin4722 -> 0 bytes
-rw-r--r--games/letters2/sounds/l.oggbin5183 -> 0 bytes
-rw-r--r--games/letters2/sounds/m.oggbin5679 -> 0 bytes
-rw-r--r--games/letters2/sounds/n.oggbin5460 -> 0 bytes
-rw-r--r--games/letters2/sounds/o.oggbin4873 -> 0 bytes
-rw-r--r--games/letters2/sounds/p.oggbin4832 -> 0 bytes
-rw-r--r--games/letters2/sounds/q.oggbin5286 -> 0 bytes
-rw-r--r--games/letters2/sounds/u.oggbin5069 -> 0 bytes
-rw-r--r--images/black.pngbin229 -> 0 bytes
-rwxr-xr-ximages/card-text.svg126
-rw-r--r--locale/pt_BR/LC_MESSAGES/org.laptop.Memorize.mobin0 -> 875 bytes
-rwxr-xr-xlocale/pt_BR/activity.linfo2
-rwxr-xr-xmemorizetoolbar.py15
-rwxr-xr-xpo/memorize.pot41
-rwxr-xr-xpo/pt_BR.po49
-rwxr-xr-xsvgcard.py463
50 files changed, 353 insertions, 391 deletions
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 @@
<?xml version="1.0"?>
-<memorize name="addition" scoresnd="score.wav" winsnd="win.wav" divided="0" align="1">
+<memorize name="addition" scoresnd="score.wav" winsnd="win.wav" divided="1" align="1">
<pair achar="1+1" bchar="2"/>
<pair achar="1+2" bchar="3" />
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 @@
<?xml version="1.0"?>
-<memorize name="letters1" scoresnd="score.wav" winsnd="win.wav" divided="1" face1="1" face2="2" >
+<memorize name="letters" scoresnd="score.wav" winsnd="win.wav" divided="1" face1="1" face2="2" >
<pair achar="A" asnd="a.ogg" bchar="a" bsnd="a.ogg"/>
<pair achar="E" asnd="e.ogg" bchar="e" bsnd="e.ogg"/>
@@ -19,5 +19,13 @@
<pair achar="N" asnd="n.ogg" bchar="n" bsnd="n.ogg"/>
<pair achar="P" asnd="p.ogg" bchar="p" bsnd="p.ogg"/>
<pair achar="Q" asnd="q.ogg" bchar="q" bsnd="q.ogg"/>
+ <pair achar="R" asnd="r.ogg" bchar="r" bsnd="r.ogg" />
+ <pair achar="S" asnd="s.ogg" bchar="s" bsnd="s.ogg" />
+ <pair achar="T" asnd="t.ogg" bchar="t" bsnd="t.ogg" />
+ <pair achar="V" asnd="v.ogg" bchar="v" bsnd="v.ogg" />
+ <pair achar="W" asnd="w.ogg" bchar="w" bsnd="w.ogg" />
+ <pair achar="X" asnd="x.ogg" bchar="x" bsnd="x.ogg" />
+ <pair achar="Y" asnd="y.ogg" bchar="y" bsnd="y.ogg" />
+ <pair achar="Z" asnd="z.ogg" bchar="z" bsnd="z.ogg" />
</memorize>
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 @@
-<?xml version="1.0"?>
-<memorize name="letters2" scoresnd="score.wav" winsnd="win.wav" divided="1" face1="1" face2="2" >
-
- <pair achar="A" asnd="a.ogg" bchar="a" bsnd="a.ogg" />
- <pair achar="E" asnd="e.ogg" bchar="e" bsnd="e.ogg" />
- <pair achar="I" asnd="i.ogg" bchar="i" bsnd="i.ogg" />
- <pair achar="O" asnd="o.ogg" bchar="o" bsnd="o.ogg" />
- <pair achar="U" asnd="u.ogg" bchar="u" bsnd="u.ogg" />
- <pair achar="L" asnd="l.ogg" bchar="l" bsnd="l.ogg" />
- <pair achar="M" asnd="m.ogg" bchar="m" bsnd="m.ogg" />
- <pair achar="N" asnd="n.ogg" bchar="n" bsnd="n.ogg" />
- <pair achar="P" asnd="p.ogg" bchar="p" bsnd="p.ogg" />
- <pair achar="Q" asnd="q.ogg" bchar="q" bsnd="q.ogg" />
- <pair achar="R" asnd="r.ogg" bchar="r" bsnd="r.ogg" />
- <pair achar="S" asnd="s.ogg" bchar="s" bsnd="s.ogg" />
- <pair achar="T" asnd="t.ogg" bchar="t" bsnd="t.ogg" />
- <pair achar="V" asnd="v.ogg" bchar="v" bsnd="v.ogg" />
- <pair achar="W" asnd="w.ogg" bchar="w" bsnd="w.ogg" />
- <pair achar="X" asnd="x.ogg" bchar="x" bsnd="x.ogg" />
- <pair achar="Y" asnd="y.ogg" bchar="y" bsnd="y.ogg" />
- <pair achar="Z" asnd="z.ogg" bchar="z" bsnd="z.ogg" />
-
-</memorize>
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 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
- <!ENTITY stroke_color "#ffffff">
- <!ENTITY text_color "#888888">
-]>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://web.resource.org/cc/"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="260"
- height="260"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.45"
- version="1.0"
- sodipodi:docname="card-text.svg"
- sodipodi:docbase="/home/msgodoi/olpc/sugar-jhbuild/build/share/activities/Memonew.activity/images"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- sodipodi:modified="true">
- <defs
- id="defs4" />
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- gridtolerance="10000"
- guidetolerance="10"
- objecttolerance="10"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="2.4769231"
- inkscape:cx="130"
- inkscape:cy="130"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- width="260px"
- height="260px"
- inkscape:window-width="1434"
- inkscape:window-height="848"
- inkscape:window-x="0"
- inkscape:window-y="0"
- borderlayer="true" />
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(126.73047,-9.5643997e-3)">
- <text
- xml:space="preserve"
- style="font-size:55px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:condensed;text-align:center;line-height:80.00000119%;writing-mode:lr-tb;text-anchor:middle;fill:&text_color;;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:DejaVu Sans"
- x="4.2810593"
- y="45.200275"
- id="text2212"
- sodipodi:linespacing="80.000001%"
- transform="scale(0.8898189,1.1238241)"><tspan
- sodipodi:role="line"
- id="tspan2214"
- x="4.2810593"
- y="45.200275">card_line1</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:55px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:condensed;text-align:center;line-height:80.00000119%;writing-mode:lr-tb;text-anchor:middle;fill:&text_color;;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:DejaVu Sans"
- x="4.5251999"
- y="158.3905"
- id="text7222"
- sodipodi:linespacing="80.000001%"
- transform="scale(0.8898189,1.1238241)"><tspan
- sodipodi:role="line"
- id="tspan7224"
- x="4.5251999"
- y="158.3905">card_line3</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:55px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:condensed;text-align:center;line-height:80.00000119%;writing-mode:lr-tb;text-anchor:middle;fill:&text_color;;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:DejaVu Sans"
- x="4.6960983"
- y="101.79538"
- id="text7226"
- sodipodi:linespacing="80.000001%"
- transform="scale(0.8898189,1.1238241)"><tspan
- sodipodi:role="line"
- id="tspan7228"
- x="4.6960983"
- y="101.79538">card_line2</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:55px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:condensed;text-align:center;line-height:80.00000119%;writing-mode:lr-tb;text-anchor:middle;fill:&text_color;;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:DejaVu Sans"
- x="3.7683642"
- y="214.98558"
- id="text7230"
- sodipodi:linespacing="80.000001%"
- transform="scale(0.8898189,1.1238241)"><tspan
- sodipodi:role="line"
- id="tspan7232"
- x="3.7683642"
- y="214.98558">card_line4</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:240px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:condensed;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:&text_color;;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:DejaVu Sans"
- x="-80.34375"
- y="217.49004"
- id="text2210"
- sodipodi:linespacing="125%"><tspan
- sodipodi:role="line"
- id="tspan2212"
- x="-80.34375"
- y="217.49004">card_text</tspan></text>
- </g>
-</svg>
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 <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\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 <muriel@laptop.org>\n"
+"Language-Team: Muriel de Souza Godoi <muriel@laptop.org>\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 = '<!ENTITY fill_color "%s">' % dict.get('fill_color', '')
- data = re.sub('<!ENTITY fill_color .*>', entity, data)
+ # Replace borders parameters
+ entity = '<!ENTITY fill_color "%s">' % dict.get('fill_color', '')
+ data = re.sub('<!ENTITY fill_color .*>', entity, data)
- entity = '<!ENTITY stroke_color "%s">' % dict.get('stroke_color', '')
- data = re.sub('<!ENTITY stroke_color .*>', entity, data)
-
- entity = '<!ENTITY opacity "%s">' % dict.get('opacity', '')
- data = re.sub('<!ENTITY opacity .*>', 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 = '<!ENTITY stroke_color "%s">' % dict.get('stroke_color', '')
+ data = re.sub('<!ENTITY stroke_color .*>', entity, data)
+
+ entity = '<!ENTITY opacity "%s">' % dict.get('opacity', '')
+ data = re.sub('<!ENTITY opacity .*>', 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 = '<!ENTITY text_color "%s">' % dict.get('text_color', '#ffffff')
- data = re.sub('<!ENTITY text_color .*>', 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