# gcompris - Tuxpaint Launcher # # Copyright (C) 2004, 2008 Yves Combe # # 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 3 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. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # import goocanvas import gcompris import gcompris.utils import gcompris.bonus import gcompris.skin import gcompris.sound import gcompris.admin import gtk import os import gobject import pango import platform #import gobject from gcompris import gcompris_gettext as _ pid = None fles = None class Gcompris_tuxpaint: """TuxPaint Launcher""" def __init__(self, gcomprisBoard): self.gcomprisBoard = gcomprisBoard self.rootitem = None # global parameter to access object structures from global fonctions global fles fles=self pass def configuration(self, value, init): if self.config_dict.has_key(value): return eval(self.config_dict[value]) else: return init def start(self): progname='tuxpaint' tuxpaint_dir = None flags = gobject.SPAWN_DO_NOT_REAP_CHILD | gobject.SPAWN_SEARCH_PATH print platform.platform(), platform.platform().split('-')[0] if (platform.platform().split('-')[0] == 'Windows'): progname = 'tuxpaint.exe' try: import _winreg tuxpaint_key = _winreg.OpenKey( _winreg.HKEY_LOCAL_MACHINE, "Software\\TuxPaint" ) tuxpaint_dir, type = _winreg.QueryValueEx(tuxpaint_key, "Install_Dir") flags = gobject.SPAWN_DO_NOT_REAP_CHILD # escape mandatory in Win pygtk2.6 tuxpaint_dir = '"' + tuxpaint_dir + '"' except: pass self.window = self.gcomprisBoard.canvas.get_toplevel() Prop = gcompris.get_properties() #get default values self.config_dict = self.init_config() #replace configured values self.config_dict.update(gcompris.get_board_conf()) self.rootitem = goocanvas.Group(parent = self.gcomprisBoard.canvas.get_root_item()) options = [progname] if (Prop.fullscreen and eval(self.config_dict['fullscreen'])): options.append('--fullscreen') if eval(self.config_dict['disable_shape_rotation']): options.append('--simpleshapes') if eval(self.config_dict['uppercase_text']): options.append('--uppercase') if eval(self.config_dict['disable_stamps']): options.append('--nostamps') if eval(self.config_dict['disable_stamps_control']): options.append('--nostampcontrols') gcompris.sound.close() global pid try: # bug in working_directory=None ? if (tuxpaint_dir): pid, stdin, stdout, stderr = gobject.spawn_async( argv=options, flags=flags, working_directory=tuxpaint_dir) else: pid, stdin, stdout, stderr = gobject.spawn_async( argv=options, flags=flags) except: gcompris.utils.dialog(_("Cannot find Tuxpaint.\nInstall it to use this activity !"),stop_board) return gobject.child_watch_add(pid, child_callback, data=self, priority=gobject.PRIORITY_HIGH) gcompris.bar_set(gcompris.BAR_CONFIG) gcompris.bar_hide(1) gcompris.set_default_background(self.gcomprisBoard.canvas.get_root_item()) textItem = goocanvas.Text( parent = self.rootitem, text = _("Waiting for Tuxpaint to finish"), x = gcompris.BOARD_WIDTH/2, y = 185, fill_color_rgba = 0x000000ffL, anchor = gtk.ANCHOR_CENTER, font = gcompris.skin.get_font("gcompris/board/title bold"), ) def end(self): gcompris.sound.reopen() global pid # force kill - data loss if pid != None: print "Tuxpaint not killed", pid #import os #os.kill(self.pid, signal.SIGKILL) if self.rootitem != None: self.rootitem.remove() self.rootitem = None def set_level(self,level): pass def ok(self): pass def key_press(self, keyval, commit_str, preedit_str): return False def repeat(self): pass def pause(self, pause): pass def config(self): pass def config_stop(self): pass def config_start(self, profile): self.configure_profile = profile #get default values self.config_dict = self.init_config() #set already configured values self.config_dict.update(gcompris.get_conf(profile, self.gcomprisBoard)) bconfig = gcompris.configuration_window(_('%s configuration\n for profile %s') % ('Tuxpaint', profile.name ), self.apply_callback) gcompris.boolean_box(bconfig, _('Inherit fullscreen setting from GCompris'), 'fullscreen', eval(self.config_dict['fullscreen'])) gcompris.separator(bconfig) gcompris.boolean_box(bconfig, _('Inherit size setting from GCompris (800x600, 640x480)'), 'size', eval(self.config_dict['size'])) gcompris.separator(bconfig) gcompris.boolean_box(bconfig, _('Disable shape rotation'), 'disable_shape_rotation', eval(self.config_dict['disable_shape_rotation'])) gcompris.separator(bconfig) gcompris.boolean_box(bconfig, _('Show Uppercase text only'), 'uppercase_text', eval(self.config_dict['uppercase_text'])) gcompris.separator(bconfig) stamps = gcompris.boolean_box(bconfig, _('Disable stamps'), 'disable_stamps', eval(self.config_dict['disable_stamps'])) stamps.connect("toggled", self.stamps_changed) self.stamps_control = gcompris.boolean_box(bconfig, 'Disable stamps control', 'disable_stamps_control', eval(self.config_dict['disable_stamps_control'])) self.stamps_control.set_sensitive(not eval(self.config_dict['disable_stamps'])) def stamps_changed(self, button): self.stamps_control.set_sensitive(not button.get_active()) def apply_callback(self,table): if table: for key,value in table.iteritems(): gcompris.set_board_conf(self.configure_profile, self.gcomprisBoard, key, value) return True def init_config(self): default_config_dict = { 'fullscreen' : 'True', 'disable_shape_rotation' : 'False', 'uppercase_text' : 'False', 'disable_stamps' : 'False', 'disable_stamps_control' : 'False', 'size' : 'True' } return default_config_dict def child_callback(fd, cond, data): global pid pid = None global fles fles.end() gcompris.end_board() def stop_board(): global fles fles.end() gcompris.end_board()