Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/J2JToolbar.py
diff options
context:
space:
mode:
Diffstat (limited to 'J2JToolbar.py')
-rwxr-xr-xJ2JToolbar.py325
1 files changed, 0 insertions, 325 deletions
diff --git a/J2JToolbar.py b/J2JToolbar.py
deleted file mode 100755
index 54b9b22..0000000
--- a/J2JToolbar.py
+++ /dev/null
@@ -1,325 +0,0 @@
-#This python module is part of the Jam2Jam XO Activity, March, 2010
-#
-#Copyright (C) 2010 Thorin Kerr & Andrew Brown
-#
-#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 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.
-#
-#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 gtk, gst, thread, tempfile, time, os
-import pygame
-import olpcgames
-from gettext import gettext as _
-from sugar.graphics.toolbutton import ToolButton
-
-import logging
-
-log = logging.getLogger('City run')
-log.setLevel(logging.DEBUG)
-
-ImagePath = os.path.dirname(os.path.abspath(__file__)) + "/City/Images"
-
-GST_PIPE = ['v4l2src', 'ffmpegcolorspace', 'pngenc']
-
-
-
-from sugar.graphics.toolcombobox import ToolComboBox
-
-
-
-class readScenes(object):
- def __init__(self, scpath):
- self.scpath = scpath
- self.scene_names = [dir for dir in os.listdir(self.scpath) if os.path.isdir(self.scpath + '/' + dir)]
- self.scene_data = []
- for n in self.scene_names:
- fp = self.scpath + "/" + n
- mdfile = [open(fp + '/' + f) for f in os.listdir(fp) if os.path.isfile(fp + "/" + f) and f.startswith(n)]
- if mdfile:
- result = {"Name":n}
- defaults = {}
- for line in mdfile[0]:
- if line.startswith('#') or line.startswith('\n'):
- pass
- else:
- keyvals = line.split('=')
- if len(keyvals) == 2:
- key = keyvals[0].upper()
- val = (keyvals[1][:-1] if keyvals[1][-1] == '\n' else keyvals[1])
- if key.startswith('TEMPO'):
- result['Tempo'] = val.replace(' ','')
- elif key.startswith('KEY'):
- result['Key'] = val.replace(' ','')
- elif key.startswith('MODE'):
- result['Mode'] = val.replace(' ','')
- else:
- pass
- else:
- raise IOError, "Bad Scene Meta Data file: %s" %keyvals
- result['Defaults'] = {}
- self.scene_data.append(result)
- else:
- raise IOError, "Can't find Meta Data file in %s Scene" %n
- def scene_instruct(self, name):
- "returns a list of strings suitable to give to a ScenePlayer object for creating a scene"
- for scd in self.scene_data:
- if scd['Name'] == name:
- collected = [name]
- for k in ['Key', 'Mode', 'Tempo', 'Defaults']:
- try:
- collected.append(str(scd[k]))
- except KeyError:
- collected.append('None')
- return collected
- def get_scene_list(self):
- "returns a list of scene strings for the toolbar, with City as the default"
- ordered_names = self.scene_names[:]
- if 'City' in ordered_names:
- ordered_names.insert(0,ordered_names.pop(ordered_names.index('City')))
- return [self.scene_instruct(s) for s in ordered_names]
-
-class CameraSnap(object):
- """A class representing the OLPC camera."""
- def __init__(self):
- log.info("CameraSnap init")
- snap_file, self.snap_path = tempfile.mkstemp(suffix = '.png')
- pipe = GST_PIPE + ['filesink location=%s' % self.snap_path]
- self.pipe = gst.parse_launch('!'.join(pipe))
- self.bus = self.pipe.get_bus()
- log.info("tempfile is %s " %self.snap_path)
- def Snap(self):
- """Take a snapshot."""
- log.info("about to set pipe state to PLAY")
- self.pipe.set_state(gst.STATE_PLAYING)
- log.info("about to poll")
- thread.start_new_thread(self.bus.poll, (gst.MESSAGE_EOS, -1))
- for i in xrange(60):
- time.sleep(0.18)
- if os.path.getsize(self.snap_path) > 0: break
- else: raise IOError, "Error writing camera snap to file"
- return self.snap_path
- def Stop(self):
- self.pipe.set_state(gst.STATE_NULL)
-
-
-class Jam2JamToolBar(gtk.Toolbar):
- def __init__(self, activity):
- gtk.Toolbar.__init__(self)
- self.activity = activity
- self.parameters = ['Density', 'Pitch', 'Length', 'Timbre', 'Volume'] # no tempo here.
- scene_stuff = readScenes(self.activity._ScenePath)
- self.scenes = scene_stuff.get_scene_list()
- print "SCENE DATA IS ", self.scenes
- #self.scenes = [['City', 'A', 'minor pentatonic'], ['City', 'G#', 'major']] #this data needs to be obtained from directories
- self.play_pause_state = 'Playing'
- self.scene_init = True
-
- # Separator
- separator = gtk.SeparatorToolItem()
- separator.set_draw(True)
- self.insert(separator, -1)
-
- #Horizontal Parameter control combobox
- self._add_widget(gtk.Label(_('Horizontal:')))
- self._Hparameter_combo = ToolComboBox()
- for i, f in enumerate(self.parameters):
- self._Hparameter_combo.combo.append_item(i, f)
- self._Hparameter_combo.combo.connect('changed', self._Hparameter_change_cb)
- self._add_widget(self._Hparameter_combo)
- self._Hparameter_combo.combo.set_active(0)
-
- # Separator
- separator = gtk.SeparatorToolItem()
- separator.set_draw(True)
- separator.show()
- self.insert(separator, -1)
-
- #Vertical Parameter control combobox
- self._add_widget(gtk.Label(_('Vertical:')))
- self._Vparameter_combo = ToolComboBox()
- for j, k in enumerate(self.parameters):
- self._Vparameter_combo.combo.append_item(j, k)
- self._Vparameter_combo.combo.connect('changed', self._Vparameter_change_cb)
- self._add_widget(self._Vparameter_combo)
- self._Vparameter_combo.combo.set_active(1)
-
- # Separator
- separator = gtk.SeparatorToolItem()
- separator.set_draw(True)
- separator.show()
- self.insert(separator, -1)
-
-
- #Scene Selection control combobox
- self._add_widget(gtk.Label(_('Scene:')))
- self._Scene_combo = ToolComboBox()
- for l, m in enumerate(self.scenes):
- self._Scene_combo.combo.append_item(l, m[0])
- self._Scene_combo.combo.connect('changed', self._Scene_change_cb)
- self._add_widget(self._Scene_combo)
- #ought to do this safely somehow.
- self._Scene_combo.combo.set_active(0)
- self.scene_init = False
-
- # Separator
- separator = gtk.SeparatorToolItem()
- separator.set_draw(True)
- separator.show()
- self.insert(separator, -1)
-
-
- #Camera Button
- self.camera_ready = True
- camera_icon = ImagePath + "/camera-external.svg"
- camera_busy_icon = ImagePath + "/camera-busy.svg"
- self.camera_image, self.camera_busy_image = gtk.Image(), gtk.Image()
- self.camera_image.set_from_file(camera_icon)
- self.camera_busy_image.set_from_file(camera_busy_icon)
- self.camera_image.show()
- #camera_busy_image.show()
- self._cameraButton = ToolButton()
- self._cameraButton.set_icon_widget(self.camera_image)
- self._cameraButton.connect('clicked', self._cameraSnap_cb)
- self._cameraButton.set_tooltip(_('Snapshot'))
- self.insert(self._cameraButton, -1)
- self._cameraButton.show()
-
- # Separator
- separator = gtk.SeparatorToolItem()
- separator.set_draw(True)
- separator.show()
- self.insert(separator, -1)
-
- #Play/Pause Button
- pause_icon = ImagePath + "/media-playback-pause.svg"
- play_icon = ImagePath + "/media-playback-start.svg"
- self.pause_image = gtk.Image()
- self.pause_image.set_from_file(pause_icon)
-
- self.play_image = gtk.Image()
- self.play_image.set_from_file(play_icon)
-
- self._pauseButton = ToolButton()
- self._pauseButton.connect('clicked', self._pause_cb)
- self.pause_image.show()
- self._pauseButton.set_icon_widget(self.pause_image)
- self._pauseButton.set_tooltip(_('Pause'))
- #self._toggleplay_pause()
- self.insert(self._pauseButton, -1)
- self._pauseButton.show()
-
- # Separator
- separator = gtk.SeparatorToolItem()
- separator.set_draw(True)
- separator.show()
- self.insert(separator, -1)
-
-
- def _add_widget(self, widget, expand=False):
- tool_item = gtk.ToolItem()
- tool_item.set_expand(expand)
- tool_item.add(widget)
- widget.show()
- self.insert(tool_item, -1)
- tool_item.show()
-
- def _toggleplay_pause(self):
- if self.play_pause_state == "Playing":
- self.activity.jamScene.music_player.pause()
- self.play_image.show()
- self._pauseButton.set_icon_widget(self.play_image)
- self._pauseButton.set_tooltip(_('Play'))
- self.play_pause_state = "Paused"
- else:
- self.activity.jamScene.music_player.resume()
- self.pause_image.show()
- self._pauseButton.set_icon_widget(self.pause_image)
- self._pauseButton.set_tooltip(_('Pause'))
- self.play_pause_state = "Playing"
- try:
- self.activity._pgc.grab_focus()
- except AttributeError:
- pass
-
- def _show_busy_camera(self):
- self.camera_ready = False
- self.camera_busy_image.show()
- self._cameraButton.set_icon_widget(self.camera_busy_image)
- self._cameraButton.set_tooltip(_('Please wait...'))
-
- def _show_active_camera(self):
- self.camera_image.show()
- self._cameraButton.set_icon_widget(self.camera_image)
- self._cameraButton.set_tooltip(_('Snap'))
- self.camera_ready = True
-
- def _Hparameter_change_cb(self, widget):
- param = "Parameter|Horizontal|" + self.parameters[self._Hparameter_combo.combo.get_active()]
- olpcgames.eventwrap.post(olpcgames.eventwrap.Event(pygame.USEREVENT, action=param))
- try:
- self.activity._pgc.grab_focus()
- except AttributeError:
- pass
-
- def _Vparameter_change_cb(self, widget):
- param = "Parameter|Vertical|" + self.parameters[self._Vparameter_combo.combo.get_active()]
- olpcgames.eventwrap.post(olpcgames.eventwrap.Event(pygame.USEREVENT, action=param))
- try:
- self.activity._pgc.grab_focus()
- except AttributeError:
- pass
-
- def _Scene_change_cb(self, widget):
- if self.scene_init:
- pass
- else:
- selection = self.scenes[self._Scene_combo.combo.get_active()]
- scene = "Reload|" + '|'.join(map(lambda x: str(x), selection))
- olpcgames.eventwrap.post(olpcgames.eventwrap.Event(pygame.USEREVENT, action=scene))
- try:
- self.activity._pgc.grab_focus()
- except AttributeError:
- pass
-
- ### functions to assist calls from pygame
- def deactivate_scene_change(self):
- self._Scene_combo.set_sensitive(False)
- def reactivate_scene_change(self):
- self._Scene_combo.set_sensitive(True)
- def set_horizontal_parameter(self, param):
- ndx = self.parameters.index(param)
- self._Hparameter_combo.combo.set_active(ndx)
- def set_vertical_parameter(self, param):
- ndx = self.parameters.index(param)
- self._Vparameter_combo.combo.set_active(ndx)
-
- def _cameraSnap_cb(self, widget):
- "Here I could wrap a camera event..."
- def snaptime():
- snap = CameraSnap()
- self.activity.cameras_loaded.append(snap)
- picpath = snap.Snap()
- self.activity.load_image(picpath)
- snap.Stop()
- self._show_active_camera()
- self.activity._pgc.grab_focus()
- if self.camera_ready:
- self._show_busy_camera()
- thread.start_new_thread(snaptime, ())
- else:
- log.info('Ignoring request to use camera, as camera is currently busy')
-
- def _pause_cb(self, widget):
- self._toggleplay_pause()
- log.info("Play/Pause Button pressed")
-