Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Char.py28
-rw-r--r--Main.py114
-rw-r--r--TODO1
-rw-r--r--Theme.py8
-rw-r--r--Toolbar.py24
-rw-r--r--Utils.py68
-rw-r--r--images/icons/tempo1.svg8
-rw-r--r--images/icons/tempo2.svg9
-rw-r--r--images/icons/tempo3.svg8
-rw-r--r--images/icons/tempo4.svg9
-rw-r--r--images/icons/tempo5.svg9
-rw-r--r--images/icons/tempo6.svg11
-rw-r--r--images/icons/tempo7.svg9
-rw-r--r--images/icons/tempo8.svg10
-rw-r--r--images/pics/Elephant/bigelephant0.gif (renamed from pics/Elephant/bigelephant0.gif)bin3186 -> 3186 bytes
-rw-r--r--images/pics/Elephant/bigelephant1.gif (renamed from pics/Elephant/bigelephant1.gif)bin3160 -> 3160 bytes
-rw-r--r--images/pics/Elephant/bigelephant10.gif (renamed from pics/Elephant/bigelephant10.gif)bin2442 -> 2442 bytes
-rw-r--r--images/pics/Elephant/bigelephant11.gif (renamed from pics/Elephant/bigelephant11.gif)bin2852 -> 2852 bytes
-rw-r--r--images/pics/Elephant/bigelephant12.gif (renamed from pics/Elephant/bigelephant12.gif)bin2879 -> 2879 bytes
-rw-r--r--images/pics/Elephant/bigelephant13.gif (renamed from pics/Elephant/bigelephant13.gif)bin2595 -> 2595 bytes
-rw-r--r--images/pics/Elephant/bigelephant2.gif (renamed from pics/Elephant/bigelephant2.gif)bin2554 -> 2554 bytes
-rw-r--r--images/pics/Elephant/bigelephant3.gif (renamed from pics/Elephant/bigelephant3.gif)bin3029 -> 3029 bytes
-rw-r--r--images/pics/Elephant/bigelephant4.gif (renamed from pics/Elephant/bigelephant4.gif)bin2492 -> 2492 bytes
-rw-r--r--images/pics/Elephant/bigelephant5.gif (renamed from pics/Elephant/bigelephant5.gif)bin3138 -> 3138 bytes
-rw-r--r--images/pics/Elephant/bigelephant6.gif (renamed from pics/Elephant/bigelephant6.gif)bin2408 -> 2408 bytes
-rw-r--r--images/pics/Elephant/bigelephant7.gif (renamed from pics/Elephant/bigelephant7.gif)bin2311 -> 2311 bytes
-rw-r--r--images/pics/Elephant/bigelephant8.gif (renamed from pics/Elephant/bigelephant8.gif)bin2644 -> 2644 bytes
-rw-r--r--images/pics/Elephant/bigelephant9.gif (renamed from pics/Elephant/bigelephant9.gif)bin2681 -> 2681 bytes
-rw-r--r--images/pics/SpaceBlob/bigblob0.gif (renamed from pics/SpaceBlob/bigblob0.gif)bin2677 -> 2677 bytes
-rw-r--r--images/pics/SpaceBlob/bigblob1.gif (renamed from pics/SpaceBlob/bigblob1.gif)bin2834 -> 2834 bytes
-rw-r--r--images/pics/SpaceBlob/bigblob10.gif (renamed from pics/SpaceBlob/bigblob10.gif)bin2628 -> 2628 bytes
-rw-r--r--images/pics/SpaceBlob/bigblob11.gif (renamed from pics/SpaceBlob/bigblob11.gif)bin2112 -> 2112 bytes
-rw-r--r--images/pics/SpaceBlob/bigblob12.gif (renamed from pics/SpaceBlob/bigblob12.gif)bin2340 -> 2340 bytes
-rw-r--r--images/pics/SpaceBlob/bigblob13.gif (renamed from pics/SpaceBlob/bigblob13.gif)bin2397 -> 2397 bytes
-rw-r--r--images/pics/SpaceBlob/bigblob2.gif (renamed from pics/SpaceBlob/bigblob2.gif)bin2231 -> 2231 bytes
-rw-r--r--images/pics/SpaceBlob/bigblob3.gif (renamed from pics/SpaceBlob/bigblob3.gif)bin2362 -> 2362 bytes
-rw-r--r--images/pics/SpaceBlob/bigblob4.gif (renamed from pics/SpaceBlob/bigblob4.gif)bin2661 -> 2661 bytes
-rw-r--r--images/pics/SpaceBlob/bigblob5.gif (renamed from pics/SpaceBlob/bigblob5.gif)bin2248 -> 2248 bytes
-rw-r--r--images/pics/SpaceBlob/bigblob6.gif (renamed from pics/SpaceBlob/bigblob6.gif)bin2297 -> 2297 bytes
-rw-r--r--images/pics/SpaceBlob/bigblob7.gif (renamed from pics/SpaceBlob/bigblob7.gif)bin2217 -> 2217 bytes
-rw-r--r--images/pics/SpaceBlob/bigblob8.gif (renamed from pics/SpaceBlob/bigblob8.gif)bin2750 -> 2750 bytes
-rw-r--r--images/pics/SpaceBlob/bigblob9.gif (renamed from pics/SpaceBlob/bigblob9.gif)bin2482 -> 2482 bytes
-rw-r--r--images/pics/Turkey/bigturkey1.gif (renamed from pics/Turkey/bigturkey1.gif)bin1703 -> 1703 bytes
-rw-r--r--images/pics/Turkey/bigturkey10.gif (renamed from pics/Turkey/bigturkey10.gif)bin1600 -> 1600 bytes
-rw-r--r--images/pics/Turkey/bigturkey11.gif (renamed from pics/Turkey/bigturkey11.gif)bin1597 -> 1597 bytes
-rw-r--r--images/pics/Turkey/bigturkey12.gif (renamed from pics/Turkey/bigturkey12.gif)bin1589 -> 1589 bytes
-rw-r--r--images/pics/Turkey/bigturkey13.gif (renamed from pics/Turkey/bigturkey13.gif)bin1595 -> 1595 bytes
-rw-r--r--images/pics/Turkey/bigturkey14.gif (renamed from pics/Turkey/bigturkey14.gif)bin1550 -> 1550 bytes
-rw-r--r--images/pics/Turkey/bigturkey2.gif (renamed from pics/Turkey/bigturkey2.gif)bin1651 -> 1651 bytes
-rw-r--r--images/pics/Turkey/bigturkey3.gif (renamed from pics/Turkey/bigturkey3.gif)bin1527 -> 1527 bytes
-rw-r--r--images/pics/Turkey/bigturkey4.gif (renamed from pics/Turkey/bigturkey4.gif)bin1571 -> 1571 bytes
-rw-r--r--images/pics/Turkey/bigturkey5.gif (renamed from pics/Turkey/bigturkey5.gif)bin1610 -> 1610 bytes
-rw-r--r--images/pics/Turkey/bigturkey6.gif (renamed from pics/Turkey/bigturkey6.gif)bin1809 -> 1809 bytes
-rw-r--r--images/pics/Turkey/bigturkey7.gif (renamed from pics/Turkey/bigturkey7.gif)bin1570 -> 1570 bytes
-rw-r--r--images/pics/Turkey/bigturkey8.gif (renamed from pics/Turkey/bigturkey8.gif)bin1620 -> 1620 bytes
-rw-r--r--images/pics/Turkey/bigturkey9.gif (renamed from pics/Turkey/bigturkey9.gif)bin1581 -> 1581 bytes
-rw-r--r--images/pics/custom.pngbin0 -> 15518 bytes
57 files changed, 218 insertions, 98 deletions
diff --git a/Char.py b/Char.py
index c47b79e..9666543 100644
--- a/Char.py
+++ b/Char.py
@@ -13,13 +13,31 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
import gtk
+from gettext import gettext as _
+
+import Theme
+
+THEMES = (
+ { 'name' : _('Elephant'),
+ 'pixbuf': Theme.pixmap('images/pics/Elephant/bigelephant0.gif'),
+ 'dir' : 'images/pics/Elephant',
+ 'custom': None },
+ { 'name' : _('Space Blob'),
+ 'pixbuf': Theme.pixmap('images/pics/SpaceBlob/bigblob8.gif'),
+ 'dir' : 'images/pics/SpaceBlob',
+ 'custom': None },
+ { 'name' : _('Turkey'),
+ 'pixbuf': Theme.pixmap('images/pics/Turkey/bigturkey1.gif'),
+ 'dir' : 'images/pics/Turkey',
+ 'custom': None },
+ None,
+ { 'name' : _('Custom'),
+ 'pixbuf': Theme.pixmap('images/pics/custom.png'),
+ 'dir' : None,
+ 'custom': True } )
+
-class Char:
- id = 0
- pixbuf = None #gtk.gdk.Pixbuf()
-def themes():
- return [None]
"""
diff --git a/Main.py b/Main.py
index bb8af0b..c32e648 100644
--- a/Main.py
+++ b/Main.py
@@ -71,6 +71,11 @@ class CartoonBuilder:
def stop():
self.playing = False
+ def set_tempo(self, tempo):
+ self.waittime = int((6-tempo) * 150)
+ if self.playing:
+ gobject.source_remove(self.playing)
+ self.playing = gobject.timeout_add(self.waittime, self.playframe)
@@ -142,6 +147,8 @@ class CartoonBuilder:
self.drawmain()
def _char_cb(self, widget):
+ return
+
if self.imgdirindex == 0:
self.imgdirindex = (len(self.imgdirs)-1)
else:
@@ -155,17 +162,6 @@ class CartoonBuilder:
def _sound_cb(self, widget, combo):
Sound.change(widget.props.value)
- def oldplayframe(self):
- self.mfdraw.fgimgpath = self.frameimgpaths[self.playframenum]
- self.mfdraw.queue_draw()
- self.playframenum += 1
- if self.playframenum == TAPE_COUNT:
- self.playframenum = 0
- if self.playing:
- return True
- else:
- return False
-
def playframe(self):
self.fgpixbuf = self.fgpixbufs[self.playframenum]
self.drawmain()
@@ -208,17 +204,14 @@ class CartoonBuilder:
self.mfdraw.bgpixbuf = self.bgpixbuf
self.mfdraw.queue_draw()
- def setplayspeed(self,adj):
- self.waittime = int((6-adj.value)*150)
- if self.playing:
- gobject.source_remove(self.playing)
- self.playing = gobject.timeout_add(self.waittime, self.playframe)
def loadimages(self):
self.posepixbufs = []
self.poseimgpaths = []
+
pics = self.getpics(self.imgdir)
count = 0
+
for imgpath in pics[self.imgstartindex:self.imgstartindex+FRAME_COUNT]:
pixbuf = gtk.gdk.pixbuf_new_from_file(imgpath)
scaled_buf = pixbuf.scale_simple(IMGWIDTH,IMGHEIGHT,gtk.gdk.INTERP_BILINEAR)
@@ -226,6 +219,7 @@ class CartoonBuilder:
self.poseimgpaths.append(imgpath)
self.images[count].set_from_pixbuf(scaled_buf)
count += 1
+
for i in range(count,FRAME_COUNT):
transpixbuf = self.gettranspixbuf(IMGWIDTH,IMGHEIGHT)
imgpath = os.path.join(self.iconsdir,TRANSIMG)
@@ -248,14 +242,14 @@ class CartoonBuilder:
def imgup(self, widget, data=None):
- pics = self.getpics(self.imgdir)
+ #pics = self.getpics(self.imgdir)
if self.imgstartindex > 0:
self.imgstartindex -= 2
self.loadimages()
self.drawmain()
def imgdown(self, widget, data=None):
- pics = self.getpics(self.imgdir)
+ #pics = self.getpics(self.imgdir)
if len(pics[self.imgstartindex:]) > FRAME_COUNT:
self.imgstartindex += 2
self.loadimages()
@@ -269,54 +263,24 @@ class CartoonBuilder:
scaled_buf = pixbuf.scale_simple(width,height,gtk.gdk.INTERP_BILINEAR)
return scaled_buf
+
+
+
+
def __init__(self,insugar,toplevel_window,mdirpath):
self.mdirpath = mdirpath
self.iconsdir = os.path.join(self.mdirpath, 'images', 'icons')
self.playing = False
self.waittime = 3*150
- self.imgdirs = []
- imgdirfile = file(os.path.join(self.mdirpath,'config.imgdirs'))
- for line in imgdirfile:
- imgdirpath = line.strip()
- if imgdirpath[0] != '/':
- imgdirpath = os.path.join(self.mdirpath,line.strip())
- if os.path.isdir(imgdirpath):
- self.imgdirs.append(imgdirpath)
- imgdirfile.close()
- self.imgdirindex = 0
- self.imgstartindex = 0
-
- self.fgpixbuf = self.gettranspixbuf(BGWIDTH,BGHEIGHT)
-
-
-
-
-
-
+ self.imgstartindex = 0
+ self.fgpixbuf = self.gettranspixbuf(BGWIDTH,BGHEIGHT)
- self.langoframe = gtk.EventBox()
- self.langoframe.modify_bg(gtk.STATE_NORMAL,gtk.gdk.color_parse(YELLOW))
- self.langoframe.show()
- self.langframe = gtk.EventBox()
- self.langframe.modify_bg(gtk.STATE_NORMAL,gtk.gdk.color_parse(BACKGROUND))
- self.langframe.show()
- self.langalign = gtk.Alignment(1.0,1.0,1.0,1.0)
- self.langalign.add(self.langframe)
- self.langalign.set_padding(5,0,5,5)
- self.langalign.show()
- self.langoframe.add(self.langalign)
- self.langhbox = gtk.HBox()
- self.langhbox.show()
- #self.langhbox.pack_start(self.llvbox,True,False,0)
- #self.langhbox.pack_start(self.langvbox,True,False,0)
- #self.langhbox.pack_start(self.nlvbox,True,False,0)
- self.langframe.add(self.langhbox)
- #self.logobox.pack_start(self.langoframe,True,True,0)
+ #self.loadimages()
self.tvbox = gtk.VBox()
@@ -411,8 +375,12 @@ class CartoonBuilder:
self.idbhbox.pack_start(self.imgdownbutton,True,False,0)
self.tvbox.pack_start(self.idbhbox,False,False,5)
- self.imgdir = self.imgdirs[self.imgdirindex]
- self.loadimages()
+
+
+
+
+
+
# ANIMATION FRAMES / FILMSTRIP
self.tophbox = gtk.HBox()
@@ -510,8 +478,6 @@ class CartoonBuilder:
self.framebuttons[0].modify_bg(gtk.STATE_NORMAL,gtk.gdk.color_parse(YELLOW))
self.framebuttons[0].modify_bg(gtk.STATE_PRELIGHT,gtk.gdk.color_parse(YELLOW))
- self.centervbox = gtk.VBox()
- self.centervbox.show()
# MAIN IMAGE
self.mfdraw = FrameWidget(None,self.fgpixbuf)
self.mfdraw.set_size_request(BGWIDTH,BGHEIGHT)
@@ -524,30 +490,8 @@ class CartoonBuilder:
self.mfdrawbox.show()
self.mfdrawbox.add(self.mfdraw)
self.mfdrawborder.add(self.mfdrawbox)
- self.centervbox.pack_end(self.mfdrawborder,True,False,0)
-
- self.bcontrolbox = gtk.HBox()
- self.bcontrolbox.set_border_width(5)
- self.bcontrolbox.show()
-
- # SPEED CONTROLS
- self.sbox = gtk.VBox()
- self.sbox.show()
- adj = gtk.Adjustment(2.5,1,5,.5,1)
- adj.connect('value_changed',self.setplayspeed)
- self.playspeed = gtk.HScale(adj)
- self.playspeed.set_draw_value(False)
- for state, color in COLOR_BG_BUTTONS:
- self.playspeed.modify_bg(state, gtk.gdk.color_parse(color))
- self.playspeed.show()
- self.sbox.pack_start(self.playspeed,True,True,0)
- #self.pslabel = gtk.Label('Speed')
- #self.pslabel.show()
- #self.sbox.pack_start(self.pslabel,True,True,0)
- self.bcontrolbox.pack_start(self.sbox,True,True,5)
- self.centervbox.pack_start(self.bcontrolbox,False,False,0)
self.controlbox = gtk.VBox()
self.controlbox.show()
@@ -565,7 +509,7 @@ class CartoonBuilder:
combo.set_active(0)
return combo
- self.controlbox.pack_start(new_combo(Char.themes(), self._char_cb),
+ self.controlbox.pack_start(new_combo(Char.THEMES, self._char_cb),
False, False, 5)
self.controlbox.pack_start(new_combo(Ground.THEMES, self._ground_cb),
False, False, 5)
@@ -607,8 +551,9 @@ class CartoonBuilder:
cetralbox = gtk.HBox()
cetralbox.show()
- cetralbox.pack_start(self.centervbox,True,False,0)
- cetralbox.pack_start(self.tvbox,False,True,0)
+
+ cetralbox.pack_start(self.mfdrawborder, True, False)
+ cetralbox.pack_start(self.tvbox, False, False)
@@ -632,7 +577,6 @@ class CartoonBuilder:
desktop = gtk.VBox()
desktop.show()
- #desktop.pack_start(self.logobox,False,False,0)
desktop.pack_start(hdesktop,True,True,0)
desktop.pack_end(self.topvbox, False, False, 0)
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..e7cfc03
--- /dev/null
+++ b/TODO
@@ -0,0 +1 @@
+- add tooltips
diff --git a/Theme.py b/Theme.py
index 3f7f9b9..a970c79 100644
--- a/Theme.py
+++ b/Theme.py
@@ -20,8 +20,9 @@ from sugar.activity.activity import get_bundle_path
TRANSIMG = '50x50blank-trans.png'
BGHEIGHT = gtk.gdk.screen_height() - 450 # 425
BGWIDTH = BGHEIGHT # 425
-IMGHEIGHT = 100
-IMGWIDTH = 100
+
+IMGHEIGHT = min(100, gtk.gdk.screen_height() / 8)
+IMGWIDTH = IMGHEIGHT
IMGSIZE = (IMGWIDTH, IMGHEIGHT)
BORDER_LEFT = 1
@@ -78,8 +79,7 @@ def path(file):
return os.path.join(get_bundle_path(), file)
def pixmap(file, numberr_in_set = None):
- out = gtk.gdk.pixbuf_new_from_file(path(file))
- out = out.scale_simple(IMGWIDTH, IMGHEIGHT, gtk.gdk.INTERP_BILINEAR)
+ out = gtk.gdk.pixbuf_new_from_file_at_size(path(file), IMGWIDTH, IMGHEIGHT)
return out
# customize theme
diff --git a/Toolbar.py b/Toolbar.py
index d6d0f4b..9ed6323 100644
--- a/Toolbar.py
+++ b/Toolbar.py
@@ -12,13 +12,16 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+import os
import gtk
from gettext import gettext as _
from sugar.graphics.toolbutton import ToolButton
from sugar.graphics.toggletoolbutton import ToggleToolButton
+from sugar.activity.activity import get_bundle_path
import Sound
+from Utils import *
class Toolbar(gtk.Toolbar):
def __init__(self, activity, app):
@@ -27,22 +30,35 @@ class Toolbar(gtk.Toolbar):
self.app = app
self.playButton = ToggleToolButton('media-playback-start')
- self.playButton.connect('toggled', self._playButton_cb)
+ self.playButton.connect('toggled', self._play_cb)
self.insert(self.playButton, -1)
self.playButton.show()
self.playButton.set_tooltip(_('Play / Pause'))
- #Play button Image
+ # Play button Image
self.playButtonImg = gtk.Image()
self.playButtonImg.set_from_icon_name('media-playback-start', gtk.ICON_SIZE_LARGE_TOOLBAR)
self.playButtonImg.show()
- #Pause button Image
+ # Pause button Image
self.pauseButtonImg = gtk.Image()
self.pauseButtonImg.set_from_icon_name('media-playback-pause', gtk.ICON_SIZE_LARGE_TOOLBAR)
self.pauseButtonImg.show()
- def _playButton_cb(self, widget):
+ tempo = TempoSlider(0, 10)
+ tempo.adjustment.connect("value-changed", self._tempo_cb)
+ tempo.set_size_request(250, -1)
+ tempo.set_value(5)
+ tempo_item = gtk.ToolItem()
+ tempo_item.add(tempo)
+ self.insert(tempo_item, -1)
+
+ self.show_all()
+
+ def _tempo_cb(self, widget):
+ self.app.set_tempo(widget.value)
+
+ def _play_cb(self, widget):
if widget.get_active():
widget.set_icon_widget(self.pauseButtonImg)
Sound.play()
diff --git a/Utils.py b/Utils.py
index d16b605..83c38f4 100644
--- a/Utils.py
+++ b/Utils.py
@@ -16,6 +16,7 @@ import gtk
from Theme import *
import sugar.graphics
+from sugar.graphics import style
class FileInstanceVariable:
def __init__(self, value = None):
@@ -72,3 +73,70 @@ class ComboBox(sugar.graphics.combobox.ComboBox):
self._model.insert(position, [action_id, text, pixbuf, False])
else:
self._model.append([action_id, text, pixbuf, False])
+
+def map_range(value, ilower, iupper, olower, oupper):
+ if value == iupper:
+ return oupper
+ return olower + int((oupper-olower+1) * (value-ilower) /
+ float(iupper-ilower))
+
+class TempoSlider(gtk.HBox):
+ def __init__(self, min_value, max_value):
+ gtk.HBox.__init__(self)
+
+ self._pixbuf = [None] * 8
+ self._image = gtk.Image()
+ self._image.show()
+
+ # used to store tempo updates while the slider is active
+ self._delayed = 0
+ self._active = False
+
+ self.adjustment = gtk.Adjustment(min_value, min_value, max_value,
+ (max_value - min_value) / 8, (max_value - min_value) / 8, 0)
+ self._adjustment_h = self.adjustment.connect('value-changed',
+ self._changed_cb)
+
+ slider = gtk.HScale(adjustment = self.adjustment)
+ slider.show()
+ slider.set_draw_value(False)
+ slider.connect("button-press-event", self._press_cb)
+ slider.connect("button-release-event", self._release_cb)
+
+ self.pack_start(slider, True, True)
+ self.pack_end(self._image, False, False)
+
+ def set_value(self, tempo, quiet = False):
+ if self._active:
+ self._delayed = tempo
+ elif quiet:
+ self.adjustment.handler_block(self._adjustment_h)
+ self.adjustment.set_value(tempo)
+ self._update(tempo)
+ self.adjustment.handler_unblock(self._adjustment_h)
+ else:
+ self.adjustment.set_value(tempo)
+
+ def _changed_cb(self, widget):
+ self._update(widget.get_value())
+
+ def _update(self, tempo):
+ img = map_range(tempo, self.adjustment.lower,
+ self.adjustment.upper, 0, 7)
+
+ if not self._pixbuf[img]:
+ self._pixbuf[img] = gtk.gdk.pixbuf_new_from_file_at_size(
+ os.path.join(get_bundle_path(), 'images/icons/tempo' +
+ str(img+1) + '.svg'),
+ style.STANDARD_ICON_SIZE, style.STANDARD_ICON_SIZE)
+
+ self._image.set_from_pixbuf(self._pixbuf[img])
+
+ def _press_cb(self, widget, event):
+ self._active = True
+
+ def _release_cb(self, widget, event):
+ self._active = False
+ if self._delayed != 0:
+ self.set_value(self._delayed, True)
+ self._delayed = 0
diff --git a/images/icons/tempo1.svg b/images/icons/tempo1.svg
new file mode 100644
index 0000000..bb9aeec
--- /dev/null
+++ b/images/icons/tempo1.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="50px" height="50px" viewBox="0 0 50 50" enable-background="new 0 0 50 50" xml:space="preserve">
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M23.5,6.5c3,3,7,7,9,11c-7,5-4,6-3,26c-1,1-8,1-9,0c0,0,2,1,2-1
+ c0-3-2-7-2-11c0-2,1-4,1-6c0-3-2-1-2-3c0-3,3-8,3-11c0-2-1-1-2-2v-3H23.5z"/>
+</svg>
diff --git a/images/icons/tempo2.svg b/images/icons/tempo2.svg
new file mode 100644
index 0000000..4a98310
--- /dev/null
+++ b/images/icons/tempo2.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="50px" height="50px" viewBox="0 0 50 50" enable-background="new 0 0 50 50" xml:space="preserve">
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M27.5,44.5v-3C28.5,42.5,28.5,43.5,27.5,44.5z M26.5,10.5
+ c2,2,2,6,2,8c0,4-3,11-3,13s4,7,7,10c-2,2-4,3-5,5h-6c1-1,2-3,2-5c0-3-2-9-3-14c0,0,0-1-1,0v-6c0-3,3-8,3-11c0-1-2-2-2-6h3
+ C23.5,5.5,26.5,9.5,26.5,10.5z"/>
+</svg>
diff --git a/images/icons/tempo3.svg b/images/icons/tempo3.svg
new file mode 100644
index 0000000..bd893bd
--- /dev/null
+++ b/images/icons/tempo3.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="50px" height="50px" viewBox="0 0 50 50" enable-background="new 0 0 50 50" xml:space="preserve">
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M30.5,17.5c0,3-2,2-2,4c0,3,4,14,7,21c-1,0-3,1-5,1c1-1,2,0,2-3
+ c0-2-4-7-6-10c-3,3-5,8-7,13c-1,0-3-1-4-1c3-3,7-14,7-18s-1-3-4-4c3-2,4-8,4-14h3C23.5,9.5,30.5,14.5,30.5,17.5z"/>
+</svg>
diff --git a/images/icons/tempo4.svg b/images/icons/tempo4.svg
new file mode 100644
index 0000000..6fa5afa
--- /dev/null
+++ b/images/icons/tempo4.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="50px" height="50px" viewBox="0 0 50 50" enable-background="new 0 0 50 50" xml:space="preserve">
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M34.5,22.5c-1-1-2-4-5-6c-1,2,0,3,0,6c0,2-3,4-3,7c0,2,4,2,4,4
+ c0,3-1,4-2,5c0-1,0-3-1-4c-1,3-2,7-3,10c-4-3,0-6,0-9s-3-11-4-17l-4,4c1-5,8.25-11.12,7.25-16.12c0.68,0.68,3.029,0,2.87,2.12
+ C26.5,10.25,33.62,17.75,34.5,22.5z"/>
+</svg>
diff --git a/images/icons/tempo5.svg b/images/icons/tempo5.svg
new file mode 100644
index 0000000..9500e7e
--- /dev/null
+++ b/images/icons/tempo5.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="50px" height="50px" viewBox="0 0 50 50" enable-background="new 0 0 50 50" xml:space="preserve">
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M24.5,13.5c2,1,5,3,5,6c0,2-2,3-2,5c0,9,11,4,11,13c-1,0-3-2-4-3
+ c-3-1-9,1-10-3c-2,3-5,7-7,11c-3,0-3-1-4-1c0-2,3-3,4-6s4-8,4-10c0-3-1-3-2-5c-1,0-2,1-3,2c0-1,2-3,2-4c1-2,3-5,2-8c0,0,1-1,4-2
+ C25.5,9.5,25.5,11.5,24.5,13.5z"/>
+</svg>
diff --git a/images/icons/tempo6.svg b/images/icons/tempo6.svg
new file mode 100644
index 0000000..9844fd6
--- /dev/null
+++ b/images/icons/tempo6.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="50px" height="50px" viewBox="0 0 50 50" enable-background="new 0 0 50 50" xml:space="preserve">
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M22.5,10.5c3,2,7,5,7,7c0,3-4,8-4,10c0,3,1,3,1,5h5l2-2l2,2v4
+ c-1,0-3-2-5-2c-3,0-5,1-8,1c-1,3-2,7-2,10h-5c1-1,3-3,3-4c1-5,1-11,1-18l-1-1c-1,1-1.75,2.88-2.75,2.88c0,0-0.25-0.63-0.25-1.63
+ c4-4,2-8.25,2-13.25c0-1,0.25-2.5,0.38-5.38L22.5,5.5C23.12,6.5,22.5,8.5,22.5,10.5z"/>
+<polygon fill-rule="evenodd" clip-rule="evenodd" fill="#333333" stroke="#333333" stroke-linecap="round" stroke-linejoin="round" points="
+ 25,20 25.25,16.75 26.5,17.88 "/>
+</svg>
diff --git a/images/icons/tempo7.svg b/images/icons/tempo7.svg
new file mode 100644
index 0000000..54bed80
--- /dev/null
+++ b/images/icons/tempo7.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="50px" height="50px" viewBox="0 0 50 50" enable-background="new 0 0 50 50" xml:space="preserve">
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M20.5,7.5c1,1,1,3,1,4c10,4,8,6,8,14c0,2,6,9,10,13c-1,2-2,4-4,5
+ c1.62-8.88-8.75-13.88-12-15c-1,1-1,0-1,2c0,3,2,5,3,7c-1,1-3,2-6,2c0-1,2-1,2-4c0-2-4-4-4-6c0-3,3-4,5-6c-3-8-8-2-11-6h6
+ c0-1,1,0,1-3c0-2-1-1-2-2l1-5H20.5z"/>
+</svg>
diff --git a/images/icons/tempo8.svg b/images/icons/tempo8.svg
new file mode 100644
index 0000000..2c0154f
--- /dev/null
+++ b/images/icons/tempo8.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="50px" height="50px" viewBox="0 0 50 50" enable-background="new 0 0 50 50" xml:space="preserve">
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M20.5,12.5c0.67,0.4,0.4,1.9,1.75,2.25s1.05-0.38,1.5-0.37
+ c4.971,0,10.95-0.88,11.75,7.12c-1-2-3-4-5-5l-4,1c1,2,4,4,5,7c1,1,1,4,1,6c3,3,8-1,11,6c-2.88-0.82-4.25-2.62-12.75-2.75
+ c-1.561-0.02-2.34-1.561-3.75-1.87c-3.42-0.76-4.67-0.38-5.5-0.38c-3,0-8,7-11,7c-2,0-3-1-3-2c4,2,8-4,9-7c2-1,5-1,8-3c-2-4-6-5-8-3
+ l-6-6l2-2c1,1,1,2,1,4c1,0,4.12,0.38,6.12-0.62L16.5,17.5v-5H20.5z"/>
+</svg>
diff --git a/pics/Elephant/bigelephant0.gif b/images/pics/Elephant/bigelephant0.gif
index 32e2998..32e2998 100644
--- a/pics/Elephant/bigelephant0.gif
+++ b/images/pics/Elephant/bigelephant0.gif
Binary files differ
diff --git a/pics/Elephant/bigelephant1.gif b/images/pics/Elephant/bigelephant1.gif
index aa4b639..aa4b639 100644
--- a/pics/Elephant/bigelephant1.gif
+++ b/images/pics/Elephant/bigelephant1.gif
Binary files differ
diff --git a/pics/Elephant/bigelephant10.gif b/images/pics/Elephant/bigelephant10.gif
index 5719a27..5719a27 100644
--- a/pics/Elephant/bigelephant10.gif
+++ b/images/pics/Elephant/bigelephant10.gif
Binary files differ
diff --git a/pics/Elephant/bigelephant11.gif b/images/pics/Elephant/bigelephant11.gif
index 0832e05..0832e05 100644
--- a/pics/Elephant/bigelephant11.gif
+++ b/images/pics/Elephant/bigelephant11.gif
Binary files differ
diff --git a/pics/Elephant/bigelephant12.gif b/images/pics/Elephant/bigelephant12.gif
index cc2950d..cc2950d 100644
--- a/pics/Elephant/bigelephant12.gif
+++ b/images/pics/Elephant/bigelephant12.gif
Binary files differ
diff --git a/pics/Elephant/bigelephant13.gif b/images/pics/Elephant/bigelephant13.gif
index 3395865..3395865 100644
--- a/pics/Elephant/bigelephant13.gif
+++ b/images/pics/Elephant/bigelephant13.gif
Binary files differ
diff --git a/pics/Elephant/bigelephant2.gif b/images/pics/Elephant/bigelephant2.gif
index 5d03ccc..5d03ccc 100644
--- a/pics/Elephant/bigelephant2.gif
+++ b/images/pics/Elephant/bigelephant2.gif
Binary files differ
diff --git a/pics/Elephant/bigelephant3.gif b/images/pics/Elephant/bigelephant3.gif
index 7fd718a..7fd718a 100644
--- a/pics/Elephant/bigelephant3.gif
+++ b/images/pics/Elephant/bigelephant3.gif
Binary files differ
diff --git a/pics/Elephant/bigelephant4.gif b/images/pics/Elephant/bigelephant4.gif
index 0df7c12..0df7c12 100644
--- a/pics/Elephant/bigelephant4.gif
+++ b/images/pics/Elephant/bigelephant4.gif
Binary files differ
diff --git a/pics/Elephant/bigelephant5.gif b/images/pics/Elephant/bigelephant5.gif
index 35ce9a5..35ce9a5 100644
--- a/pics/Elephant/bigelephant5.gif
+++ b/images/pics/Elephant/bigelephant5.gif
Binary files differ
diff --git a/pics/Elephant/bigelephant6.gif b/images/pics/Elephant/bigelephant6.gif
index a91695b..a91695b 100644
--- a/pics/Elephant/bigelephant6.gif
+++ b/images/pics/Elephant/bigelephant6.gif
Binary files differ
diff --git a/pics/Elephant/bigelephant7.gif b/images/pics/Elephant/bigelephant7.gif
index bcf485a..bcf485a 100644
--- a/pics/Elephant/bigelephant7.gif
+++ b/images/pics/Elephant/bigelephant7.gif
Binary files differ
diff --git a/pics/Elephant/bigelephant8.gif b/images/pics/Elephant/bigelephant8.gif
index 429cc51..429cc51 100644
--- a/pics/Elephant/bigelephant8.gif
+++ b/images/pics/Elephant/bigelephant8.gif
Binary files differ
diff --git a/pics/Elephant/bigelephant9.gif b/images/pics/Elephant/bigelephant9.gif
index dc682da..dc682da 100644
--- a/pics/Elephant/bigelephant9.gif
+++ b/images/pics/Elephant/bigelephant9.gif
Binary files differ
diff --git a/pics/SpaceBlob/bigblob0.gif b/images/pics/SpaceBlob/bigblob0.gif
index 5af8edd..5af8edd 100644
--- a/pics/SpaceBlob/bigblob0.gif
+++ b/images/pics/SpaceBlob/bigblob0.gif
Binary files differ
diff --git a/pics/SpaceBlob/bigblob1.gif b/images/pics/SpaceBlob/bigblob1.gif
index 1e2e9ae..1e2e9ae 100644
--- a/pics/SpaceBlob/bigblob1.gif
+++ b/images/pics/SpaceBlob/bigblob1.gif
Binary files differ
diff --git a/pics/SpaceBlob/bigblob10.gif b/images/pics/SpaceBlob/bigblob10.gif
index 0f538f9..0f538f9 100644
--- a/pics/SpaceBlob/bigblob10.gif
+++ b/images/pics/SpaceBlob/bigblob10.gif
Binary files differ
diff --git a/pics/SpaceBlob/bigblob11.gif b/images/pics/SpaceBlob/bigblob11.gif
index 3f912e5..3f912e5 100644
--- a/pics/SpaceBlob/bigblob11.gif
+++ b/images/pics/SpaceBlob/bigblob11.gif
Binary files differ
diff --git a/pics/SpaceBlob/bigblob12.gif b/images/pics/SpaceBlob/bigblob12.gif
index e5308d9..e5308d9 100644
--- a/pics/SpaceBlob/bigblob12.gif
+++ b/images/pics/SpaceBlob/bigblob12.gif
Binary files differ
diff --git a/pics/SpaceBlob/bigblob13.gif b/images/pics/SpaceBlob/bigblob13.gif
index 7348e6b..7348e6b 100644
--- a/pics/SpaceBlob/bigblob13.gif
+++ b/images/pics/SpaceBlob/bigblob13.gif
Binary files differ
diff --git a/pics/SpaceBlob/bigblob2.gif b/images/pics/SpaceBlob/bigblob2.gif
index 9eee50a..9eee50a 100644
--- a/pics/SpaceBlob/bigblob2.gif
+++ b/images/pics/SpaceBlob/bigblob2.gif
Binary files differ
diff --git a/pics/SpaceBlob/bigblob3.gif b/images/pics/SpaceBlob/bigblob3.gif
index 30f6250..30f6250 100644
--- a/pics/SpaceBlob/bigblob3.gif
+++ b/images/pics/SpaceBlob/bigblob3.gif
Binary files differ
diff --git a/pics/SpaceBlob/bigblob4.gif b/images/pics/SpaceBlob/bigblob4.gif
index 1dd33f0..1dd33f0 100644
--- a/pics/SpaceBlob/bigblob4.gif
+++ b/images/pics/SpaceBlob/bigblob4.gif
Binary files differ
diff --git a/pics/SpaceBlob/bigblob5.gif b/images/pics/SpaceBlob/bigblob5.gif
index bd6f791..bd6f791 100644
--- a/pics/SpaceBlob/bigblob5.gif
+++ b/images/pics/SpaceBlob/bigblob5.gif
Binary files differ
diff --git a/pics/SpaceBlob/bigblob6.gif b/images/pics/SpaceBlob/bigblob6.gif
index e7d17e5..e7d17e5 100644
--- a/pics/SpaceBlob/bigblob6.gif
+++ b/images/pics/SpaceBlob/bigblob6.gif
Binary files differ
diff --git a/pics/SpaceBlob/bigblob7.gif b/images/pics/SpaceBlob/bigblob7.gif
index 9073b5d..9073b5d 100644
--- a/pics/SpaceBlob/bigblob7.gif
+++ b/images/pics/SpaceBlob/bigblob7.gif
Binary files differ
diff --git a/pics/SpaceBlob/bigblob8.gif b/images/pics/SpaceBlob/bigblob8.gif
index f8faf8d..f8faf8d 100644
--- a/pics/SpaceBlob/bigblob8.gif
+++ b/images/pics/SpaceBlob/bigblob8.gif
Binary files differ
diff --git a/pics/SpaceBlob/bigblob9.gif b/images/pics/SpaceBlob/bigblob9.gif
index a627d6f..a627d6f 100644
--- a/pics/SpaceBlob/bigblob9.gif
+++ b/images/pics/SpaceBlob/bigblob9.gif
Binary files differ
diff --git a/pics/Turkey/bigturkey1.gif b/images/pics/Turkey/bigturkey1.gif
index f49b34f..f49b34f 100644
--- a/pics/Turkey/bigturkey1.gif
+++ b/images/pics/Turkey/bigturkey1.gif
Binary files differ
diff --git a/pics/Turkey/bigturkey10.gif b/images/pics/Turkey/bigturkey10.gif
index 709d92e..709d92e 100644
--- a/pics/Turkey/bigturkey10.gif
+++ b/images/pics/Turkey/bigturkey10.gif
Binary files differ
diff --git a/pics/Turkey/bigturkey11.gif b/images/pics/Turkey/bigturkey11.gif
index b80765f..b80765f 100644
--- a/pics/Turkey/bigturkey11.gif
+++ b/images/pics/Turkey/bigturkey11.gif
Binary files differ
diff --git a/pics/Turkey/bigturkey12.gif b/images/pics/Turkey/bigturkey12.gif
index dd043f7..dd043f7 100644
--- a/pics/Turkey/bigturkey12.gif
+++ b/images/pics/Turkey/bigturkey12.gif
Binary files differ
diff --git a/pics/Turkey/bigturkey13.gif b/images/pics/Turkey/bigturkey13.gif
index 91a5bd7..91a5bd7 100644
--- a/pics/Turkey/bigturkey13.gif
+++ b/images/pics/Turkey/bigturkey13.gif
Binary files differ
diff --git a/pics/Turkey/bigturkey14.gif b/images/pics/Turkey/bigturkey14.gif
index c777887..c777887 100644
--- a/pics/Turkey/bigturkey14.gif
+++ b/images/pics/Turkey/bigturkey14.gif
Binary files differ
diff --git a/pics/Turkey/bigturkey2.gif b/images/pics/Turkey/bigturkey2.gif
index 195d1c6..195d1c6 100644
--- a/pics/Turkey/bigturkey2.gif
+++ b/images/pics/Turkey/bigturkey2.gif
Binary files differ
diff --git a/pics/Turkey/bigturkey3.gif b/images/pics/Turkey/bigturkey3.gif
index c0f219d..c0f219d 100644
--- a/pics/Turkey/bigturkey3.gif
+++ b/images/pics/Turkey/bigturkey3.gif
Binary files differ
diff --git a/pics/Turkey/bigturkey4.gif b/images/pics/Turkey/bigturkey4.gif
index 8b93529..8b93529 100644
--- a/pics/Turkey/bigturkey4.gif
+++ b/images/pics/Turkey/bigturkey4.gif
Binary files differ
diff --git a/pics/Turkey/bigturkey5.gif b/images/pics/Turkey/bigturkey5.gif
index 6ecedba..6ecedba 100644
--- a/pics/Turkey/bigturkey5.gif
+++ b/images/pics/Turkey/bigturkey5.gif
Binary files differ
diff --git a/pics/Turkey/bigturkey6.gif b/images/pics/Turkey/bigturkey6.gif
index ed56a65..ed56a65 100644
--- a/pics/Turkey/bigturkey6.gif
+++ b/images/pics/Turkey/bigturkey6.gif
Binary files differ
diff --git a/pics/Turkey/bigturkey7.gif b/images/pics/Turkey/bigturkey7.gif
index f6fc8f8..f6fc8f8 100644
--- a/pics/Turkey/bigturkey7.gif
+++ b/images/pics/Turkey/bigturkey7.gif
Binary files differ
diff --git a/pics/Turkey/bigturkey8.gif b/images/pics/Turkey/bigturkey8.gif
index 41115ed..41115ed 100644
--- a/pics/Turkey/bigturkey8.gif
+++ b/images/pics/Turkey/bigturkey8.gif
Binary files differ
diff --git a/pics/Turkey/bigturkey9.gif b/images/pics/Turkey/bigturkey9.gif
index 4f43698..4f43698 100644
--- a/pics/Turkey/bigturkey9.gif
+++ b/images/pics/Turkey/bigturkey9.gif
Binary files differ
diff --git a/images/pics/custom.png b/images/pics/custom.png
new file mode 100644
index 0000000..9d2c610
--- /dev/null
+++ b/images/pics/custom.png
Binary files differ