diff options
author | Aleksey Lim <alsroot@member.fsf.org> | 2009-01-19 00:20:37 (GMT) |
---|---|---|
committer | Aleksey Lim <alsroot@member.fsf.org> | 2009-01-21 11:51:11 (GMT) |
commit | e59ebea703fcdbdba29d39bdd0e367fbd1753e5e (patch) | |
tree | cbc2d6f3c99504597703565e79b5cfa482b37c8c /cartoonbuilder.py | |
parent | 86ce7d4c14b458dce4edca81af8ae9fff0a770f7 (diff) |
...
Diffstat (limited to 'cartoonbuilder.py')
-rwxr-xr-x | cartoonbuilder.py | 1052 |
1 files changed, 0 insertions, 1052 deletions
diff --git a/cartoonbuilder.py b/cartoonbuilder.py deleted file mode 100755 index 06903da..0000000 --- a/cartoonbuilder.py +++ /dev/null @@ -1,1052 +0,0 @@ -#!/usr/bin/env python -# -# 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. -# -# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - - -### cartoonbuilder -### -### author: Ed Stoner (ed@whsd.net) -### (c) 2007 World Wide Workshop Foundation - -import time -import StringIO -import pygtk -pygtk.require('2.0') -import gtk -import gobject -import gettext -import os -import zipfile -import textwrap -import pickle -# should really put a try in front of this -# in case there is no sound support -import gst -from sugar.activity.activity import get_activity_root - -from ComboBox import * -from Shared import * -import Char - -_ = gettext.lgettext - -TRANSIMG = '50x50blank-trans.png' -BGHEIGHT = gtk.gdk.screen_height() - 450 # 425 -BGWIDTH = BGHEIGHT # 425 -IMGHEIGHT = 100 -IMGWIDTH = 100 - -BORDER_LEFT = 1 -BORDER_RIGHT = 2 -BORDER_TOP = 4 -BORDER_BOTTOM = 8 -BORDER_VERTICAL = BORDER_TOP | BORDER_BOTTOM -BORDER_HORIZONTAL = BORDER_LEFT | BORDER_RIGHT -BORDER_ALL = BORDER_VERTICAL | BORDER_HORIZONTAL -BORDER_ALL_BUT_BOTTOM = BORDER_HORIZONTAL | BORDER_TOP -BORDER_ALL_BUT_LEFT = BORDER_VERTICAL | BORDER_RIGHT - -SLICE_BTN_WIDTH = 40 - -# Colors from the Rich's UI design - -GRAY = "#B7B7B7" # gray -PINK = "#FF0099" # pink -YELLOW = "#FFFF00" # yellow -WHITE = "#FFFFFF" -BLACK = "#000000" -BACKGROUND = "#66CC00" # light green -BUTTON_FOREGROUND = "#CCFB99" # very light green -BUTTON_BACKGROUND = "#027F01" # dark green -COLOR_FG_BUTTONS = ( - (gtk.STATE_NORMAL,"#CCFF99"), - (gtk.STATE_ACTIVE,"#CCFF99"), - (gtk.STATE_PRELIGHT,"#CCFF99"), - (gtk.STATE_SELECTED,"#CCFF99"), - (gtk.STATE_INSENSITIVE,"#CCFF99"), - ) # very light green -COLOR_BG_BUTTONS = ( - (gtk.STATE_NORMAL,"#027F01"), - (gtk.STATE_ACTIVE,"#CCFF99"), - (gtk.STATE_PRELIGHT,"#016D01"), - (gtk.STATE_SELECTED,"#CCFF99"), - (gtk.STATE_INSENSITIVE,"#027F01"), - ) -OLD_COLOR_BG_BUTTONS = ( - (gtk.STATE_NORMAL,"#027F01"), - (gtk.STATE_ACTIVE,"#014D01"), - (gtk.STATE_PRELIGHT,"#016D01"), - (gtk.STATE_SELECTED,"#027F01"), - (gtk.STATE_INSENSITIVE,"#027F01"), - ) - -SPANISH = u'Espa\xf1ol' -#SPANISH = 'Espanol' -LANGLIST = ['English',SPANISH] -LANG = {'English':{'character':'My Character', - 'sound':'My Sound', - 'background':'My Background', - 'lessonplan':'Lesson Plans', - 'lpdir':'lp-en'}, - SPANISH:{'character':u'Mi car\xe1cter', - 'sound':'Mi sonido', - 'background':'Mi fondo', - 'lessonplan':u'Planes de la lecci\xf3n', - 'lpdir':'lp-es'}} - -FRAME_COUNT = (gtk.gdk.screen_height() - 370) / IMGHEIGHT * 2 -TAPE_COUNT = (gtk.gdk.screen_width() - 430) / IMGWIDTH - -TMPDIR = os.path.join(get_activity_root(), 'tmp') - -def getwrappedfile(filepath,linelength): - text = [] - f = file(filepath) - for line in f: - if line == '\n': - text.append(line) - else: - for wline in textwrap.wrap(line.strip()): - text.append('%s\n' % wline) - return ''.join(text) - -def prepare_btn(btn, w=-1, h=-1): - for state, color in COLOR_BG_BUTTONS: - btn.modify_bg(state, gtk.gdk.color_parse(color)) - c = btn.get_child() - if c is not None: - for state, color in COLOR_FG_BUTTONS: - c.modify_fg(state, gtk.gdk.color_parse(color)) - else: - for state, color in COLOR_FG_BUTTONS: - btn.modify_fg(state, gtk.gdk.color_parse(color)) - if w>0 or h>0: - btn.set_size_request(w, h) - return btn - -class FrameWidget(gtk.DrawingArea): - def __init__(self,bgpixbuf,fgpixbuf): - gtk.DrawingArea.__init__(self) - self.gc = None # initialized in realize-event handler - self.width = 0 # updated in size-allocate handler - self.height = 0 # idem - self.bgpixbuf = bgpixbuf - self.fgpixbuf = fgpixbuf - self.connect('size-allocate', self.on_size_allocate) - self.connect('expose-event', self.on_expose_event) - self.connect('realize', self.on_realize) - - def on_realize(self, widget): - self.gc = widget.window.new_gc() - - def on_size_allocate(self, widget, allocation): - self.width = allocation.width - self.height = allocation.height - - def on_expose_event(self, widget, event): - # This is where the drawing takes place - if self.bgpixbuf: - #bgpixbuf = gtk.gdk.pixbuf_new_from_file(self.bgimgpath) - widget.window.draw_pixbuf(self.gc,self.bgpixbuf,0,0,0,0,-1,-1,0,0) - if self.fgpixbuf: - #fgpixbuf = gtk.gdk.pixbuf_new_from_file(self.fgimgpath) - #widget.window.draw_pixbuf(self.gc,fgpixbuf,0,0,75,75,-1,-1,0,0) - widget.window.draw_pixbuf(self.gc,self.fgpixbuf,0,0,0,0,-1,-1,0,0) - - -class cartoonbuilder: - def delete_event(self, widget, event, data=None): - return False - - def destroy(self, widget, data=None): - gtk.main_quit() - - def on_gstmessage(self, bus, message): - t = message.type - if t == gst.MESSAGE_EOS: - # END OF SOUND FILE - self.player.set_state(gst.STATE_NULL) - self.player.set_state(gst.STATE_PLAYING) - elif t == gst.MESSAGE_ERROR: - self.player.set_state(gst.STATE_NULL) - - def clearframe(self, widget, data=None): - transpixbuf = self.gettranspixbuf(IMGWIDTH,IMGHEIGHT) - self.frameimgs[self.frame_selected].set_from_pixbuf(transpixbuf) - self.fgpixbufs[self.frame_selected] = self.gettranspixbuf(BGWIDTH,BGHEIGHT) - self.fgpixbuf = self.gettranspixbuf(BGWIDTH,BGHEIGHT) - self.drawmain() - - def clearall(self, widget, data=None): - for i in range(TAPE_COUNT): - transpixbuf = self.gettranspixbuf(IMGWIDTH,IMGHEIGHT) - self.frameimgs[i].set_from_pixbuf(transpixbuf) - self.fgpixbufs[i] = self.gettranspixbuf(BGWIDTH,BGHEIGHT) - self.fgpixbuf = self.gettranspixbuf(BGWIDTH,BGHEIGHT) - - def selectframe(self, widget, event, data=None): - if data: - i = data-1 - self.framebuttons[i].modify_bg(gtk.STATE_NORMAL,gtk.gdk.color_parse(YELLOW)) - self.framebuttons[i].modify_bg(gtk.STATE_PRELIGHT,gtk.gdk.color_parse(YELLOW)) - if self.frame_selected != i: - self.framebuttons[self.frame_selected].modify_bg(gtk.STATE_NORMAL,gtk.gdk.color_parse(BLACK)) - self.framebuttons[self.frame_selected].modify_bg(gtk.STATE_PRELIGHT,gtk.gdk.color_parse(BLACK)) - #self.framebuttons[self.frame_selected].set_style(self.fbstyle) - self.frame_selected = i - self.fgpixbuf = self.fgpixbufs[self.frame_selected] - self.drawmain() - - def pickimage(self, widget, event, data=None): - if data: - pixbuf = self.posepixbufs[data-1] - scaled_buf = pixbuf.scale_simple(IMGWIDTH,IMGHEIGHT,gtk.gdk.INTERP_BILINEAR) - self.frameimgs[self.frame_selected].set_from_pixbuf(scaled_buf) - fgpixbuf = pixbuf.scale_simple(BGWIDTH,BGHEIGHT,gtk.gdk.INTERP_BILINEAR) - self.fgpixbufs[self.frame_selected] = fgpixbuf - self.fgpixbufpaths[self.frame_selected] = self.poseimgpaths[data-1] - self.fgpixbuf = fgpixbuf - self.drawmain() - - def lastback(self, widget, data=None): - if self.backnum == 0: - self.backnum = len(self.backpicpaths)-1 - else: - self.backnum -= 1 - bgimgpath = self.backpicpaths[self.backnum] - self.setback(bgimgpath) - - def nextback(self, widget, data=None): - if self.backnum == (len(self.backpicpaths)-1): - self.backnum = 0 - else: - self.backnum += 1 - bgimgpath = self.backpicpaths[self.backnum] - self.setback(bgimgpath) - - def setback(self,imgpath): - #self.mfdraw.queue_draw() - #pixbuf = gtk.gdk.pixbuf_new_from_file(self.bgimgpath) - pixbuf = gtk.gdk.pixbuf_new_from_file(imgpath) - self.bgpixbuf = pixbuf.scale_simple(BGWIDTH,BGHEIGHT,gtk.gdk.INTERP_BILINEAR) - scaled_buf = pixbuf.scale_simple(IMGWIDTH,IMGHEIGHT,gtk.gdk.INTERP_BILINEAR) - self.bgsmall.set_from_pixbuf(scaled_buf) - self.drawmain() - - def _char_cb(self, widget): - if self.imgdirindex == 0: - self.imgdirindex = (len(self.imgdirs)-1) - else: - self.imgdirindex -= 1 - - self.imgstartindex = 0 - self.imgdir = self.imgdirs[self.imgdirindex] - self.loadimages() - self.drawmain() - - def changesound(self): - if self.soundfile: - soundname = os.path.splitext(os.path.split(self.soundfile)[1])[0] - self.player.set_property('uri', 'file://' + self.soundfile) - if self.playing: - self.player.set_state(gst.STATE_NULL) - self.player.set_state(gst.STATE_PLAYING) - else: - soundname = 'No Sound' - if self.playing: - self.player.set_state(gst.STATE_NULL) - self.soundlabel.set_text(soundname.capitalize()) - - def lastsound(self, widget, data=None): - if self.soundindex == 0: - self.soundindex = (len(self.sounds)-1) - else: - self.soundindex -= 1 - self.soundfile = self.sounds[self.soundindex] - self.changesound() - - def nextsound(self, widget, data=None): - if self.soundindex == (len(self.sounds)-1): - self.soundindex = 0 - else: - self.soundindex += 1 - self.soundfile = self.sounds[self.soundindex] - self.changesound() - - def go(self, widget, data=None): - self.playframenum = 0 - if self.playing: - if self.soundfile: - self.player.set_state(gst.STATE_NULL) - #widget.set_label('GO!') - playimg = gtk.Image() - #playimg.set_from_stock(gtk.STOCK_MEDIA_PLAY,gtk.ICON_SIZE_BUTTON) - playimg.set_from_file(os.path.join(self.iconsdir,'big_right_arrow.png')) - playimg.show() - widget.set_image(playimg) - self.playing = False - else: - if self.soundfile: - #self.player.set_property('uri', 'file://' + self.soundfile) - self.player.set_state(gst.STATE_PLAYING) - #widget.set_label('STOP') - stopimg = gtk.Image() - #stopimg.set_from_stock(gtk.STOCK_MEDIA_STOP,gtk.ICON_SIZE_BUTTON) - stopimg.set_from_file(os.path.join(self.iconsdir,'big_pause.png')) - stopimg.show() - widget.set_image(stopimg) - self.playing = gobject.timeout_add(self.waittime, self.playframe) - - 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() - self.playframenum += 1 - if self.playframenum == TAPE_COUNT: - self.playframenum = 0 - # SOUND HANDLING - #if self.bus.have_pending: - # print 'PENDING ITEMS ON SOUND BUS' - # END OF SOUND HANDLING - if self.playing: - return True - else: - return False - - def drawmain(self): - #if not self.fgimgpath: - # pixbuf2 = gtk.gdk.pixbuf_new_from_file(self.bgimgpath) - # sbuf2 = pixbuf2.scale_simple(BGHEIGHT,BGWIDTH,gtk.gdk.INTERP_BILINEAR) - # self.mainimage.set_from_pixbuf(sbuf2) - # return - - # COMPOSITING FROM FILE PATHS - #pixbuf = gtk.gdk.pixbuf_new_from_file(self.fgimgpath) - #sbuf = pixbuf.scale_simple(BGHEIGHT,BGWIDTH,gtk.gdk.INTERP_BILINEAR) - #pixbuf2 = gtk.gdk.pixbuf_new_from_file(self.bgimgpath) - #sbuf2 = pixbuf2.scale_simple(BGHEIGHT,BGWIDTH,gtk.gdk.INTERP_BILINEAR) - #sbuf.composite(sbuf2,0,0,sbuf.props.width,sbuf.props.height, - # 0,0,1.0,1.0,gtk.gdk.INTERP_HYPER,255) - - # COMPOSITING FROM PIXBUFS - #sbuf = self.fgpixbuf.copy() - #sbuf2 = self.bgpixbuf.copy() - #sbuf.composite(sbuf2,0,0,sbuf.props.width,sbuf.props.height, - # 0,0,1.0,1.0,gtk.gdk.INTERP_HYPER,255) - #self.mainimage.set_from_pixbuf(sbuf2) - - # USING DRAWING AREA - self.mfdraw.fgpixbuf = self.fgpixbuf - 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) - self.posepixbufs.append(pixbuf) - 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) - img = gtk.Image() - img.set_from_pixbuf(transpixbuf) - img.show() - self.posepixbufs.append(pixbuf) - self.poseimgpaths.append(imgpath) - self.images[i].set_from_pixbuf(transpixbuf) - - def getpics(self, dirpath): - pics = [] - entries = os.listdir(dirpath) - entries.sort() - for entry in entries: - if entry[-4:].lower() in ['.png','.gif','.jpg']: - filepath = os.path.join(dirpath,entry) - pics.append(filepath) - return pics - - - def imgup(self, widget, data=None): - 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) - if len(pics[self.imgstartindex:]) > FRAME_COUNT: - self.imgstartindex += 2 - self.loadimages() - self.drawmain() - - def gettranspixbuf(self, width=50, height=50): - transimgpath = os.path.join(self.iconsdir,TRANSIMG) - pixbuf = gtk.gdk.pixbuf_new_from_file(transimgpath) - if width == 50 and height == 50: - return pixbuf - scaled_buf = pixbuf.scale_simple(width,height,gtk.gdk.INTERP_BILINEAR) - return scaled_buf - - """ - def showlessonplans(self, widget, data=None): - dia = gtk.Dialog(title='Lesson Plans', - parent=None, - flags=0, - buttons=None) - dia.set_default_size(500,500) - dia.show() - - #dia.vbox.pack_start(scrolled_window, True, True, 0) - notebook = gtk.Notebook() - # uncomment below to highlight tabs - notebook.modify_bg(gtk.STATE_NORMAL,gtk.gdk.color_parse(WHITE)) - notebook.set_tab_pos(gtk.POS_TOP) - #notebook.set_default_size(400,400) - notebook.show() - lessonplans = {} - lpdir = os.path.join(self.mdirpath,LANG[self.language]['lpdir']) - lpentries = os.listdir(lpdir) - for entry in lpentries: - fpath = os.path.join(lpdir,entry) - lessonplans[entry] = getwrappedfile(fpath,80) - lpkeys = lessonplans.keys() - lpkeys.sort() - for lpkey in lpkeys: - lpname = lpkey.replace('_',' ').replace('0','')[:-4] - label = gtk.Label(lessonplans[lpkey]) - #if self.insugar: - # label.modify_fg(gtk.STATE_NORMAL,gtk.gdk.color_parse(WHITE)) - eb = gtk.EventBox() - eb.modify_bg(gtk.STATE_NORMAL,gtk.gdk.color_parse(WHITE)) - #label.set_line_wrap(True) - label.show() - eb.add(label) - eb.show() - #tlabel = gtk.Label('Lesson Plan %s' % str(i+1)) - tlabel = gtk.Label(lpname) - tlabel.show() - scrolled_window = gtk.ScrolledWindow() - scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_ALWAYS) - scrolled_window.show() - scrolled_window.add_with_viewport(eb) - notebook.append_page(scrolled_window, tlabel) - #dia.action_area.pack_start(notebook, True, True, 0) - dia.vbox.pack_start(notebook, True, True, 0) - result = dia.run() - dia.destroy() - """ - - def __init__(self,insugar,toplevel_window,mdirpath): - self.mdirpath = mdirpath - if not os.path.isdir(TMPDIR): - os.mkdir(TMPDIR) - self.iconsdir = os.path.join(self.mdirpath,'icons') - self.playing = False - self.backnum = 0 - self.backpicpaths = [] - bpfile = file(os.path.join(self.mdirpath,'config.backpics')) - for line in bpfile: - bpfilepath = line.strip() - if bpfilepath[0] != '/': - bpfilepath = os.path.join(self.mdirpath,line.strip()) - if os.path.isfile(bpfilepath): - self.backpicpaths.append(bpfilepath) - bpfile.close() - 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.sounds = [''] - soundfile = file(os.path.join(self.mdirpath,'config.sounds')) - for line in soundfile: - soundfilepath = line.strip() - if soundfilepath[0] != '/': - soundfilepath = os.path.join(self.mdirpath,line.strip()) - if os.path.isfile(soundfilepath): - self.sounds.append(soundfilepath) - soundfile.close() - self.soundindex = 0 - self.soundfile = self.sounds[self.soundindex] - # START GSTREAMER STUFF - self.player = gst.element_factory_make("playbin", "player") - fakesink = gst.element_factory_make('fakesink', "my-fakesink") - self.player.set_property("video-sink", fakesink) - self.bus = self.player.get_bus() - self.bus.add_signal_watch() - self.bus.connect('message', self.on_gstmessage) - # END GSTREAMER STUFF - 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.tvbox = gtk.VBox() - self.tvbox.show() - # flow arrows - flowbox = gtk.HBox() - flowbox.show() - yellow_arrow = gtk.Image() - yellow_arrow.set_from_file(os.path.join(self.iconsdir, 'yellow_arrow.png')) - yellow_arrow.show() - flowbox.pack_end(yellow_arrow,True,False,0) - topspace = gtk.EventBox() - topspace.modify_bg(gtk.STATE_NORMAL,gtk.gdk.color_parse(BACKGROUND)) - topspace.show() - topspace.set_border_width(15) - self.tvbox.pack_start(topspace,False,False,0) - self.tvbox.pack_start(flowbox,False,False,0) - self.table = gtk.Table(rows=FRAME_COUNT/2, columns=2, homogeneous=False) - - self.imgbuttons = [] - self.images = [] - # POSE CHOOSER BUTTONS - for i in range(1,11): - ib = gtk.EventBox() - #ib = gtk.Button() - #ib.connect('clicked', self.pickimage, i) - ib.set_events(gtk.gdk.BUTTON_PRESS_MASK) - ib.connect('button_press_event', self.pickimage, i) - ib.set_border_width(1) - #ib.add(img) - ib.modify_bg(gtk.STATE_NORMAL,gtk.gdk.color_parse(BLACK)) - ib.modify_bg(gtk.STATE_PRELIGHT,gtk.gdk.color_parse(BLACK)) - ib.show() - img = gtk.Image() - img.show() - #ib.set_label('') - #ib.set_image(img) - ib.add(img) - self.imgbuttons.append(ib) - self.images.append(img) - - self.imgupbutton = gtk.Button() - self.imgupbutton.connect('clicked', self.imgup, None) - self.imgupbutton.show() - #upa = gtk.Arrow(gtk.ARROW_UP,gtk.SHADOW_OUT) - #upa.show() - upa = gtk.Image() - upa.set_from_file(os.path.join(self.iconsdir,'big_up_arrow.png')) - #upapixbuf = gtk.gdk.pixbuf_new_from_file(os.path.join(self.iconsdir,'up_arrow.png')) - #scaled_upapixbuf = upapixbuf.scale_simple(42,34,gtk.gdk.INTERP_BILINEAR) - #upa.set_from_pixbuf(scaled_upapixbuf) - upa.show() - - self.imgupbutton.add(upa) - prepare_btn(self.imgupbutton) - self.iubhbox = gtk.HBox() - self.iubhbox.show() - self.iubhbox.pack_start(self.imgupbutton,True,False,0) - self.tvbox.pack_start(self.iubhbox,False,False,5) - - for i in range(FRAME_COUNT/2): - self.table.attach(self.imgbuttons[i*2], 0, 1, i, i+1) - self.table.attach(self.imgbuttons[i*2+1], 1, 2, i, i+1) - - self.table.show() - - self.tableframeborder = gtk.EventBox() - self.tableframeborder.modify_bg(gtk.STATE_NORMAL,gtk.gdk.color_parse(YELLOW)) - self.tableframeborder.show() - self.tableframe = gtk.EventBox() - self.tableframe.modify_bg(gtk.STATE_NORMAL,gtk.gdk.color_parse(BACKGROUND)) - self.tableframe.show() - self.tableframe.set_border_width(5) - self.tableframeborder.add(self.tableframe) - self.tableframe.add(self.table) - - self.tfhbox = gtk.HBox() - self.tfhbox.show() - self.tfhbox.pack_start(self.tableframeborder,True,False,20) - self.tvbox.pack_start(self.tfhbox,False,False,0) - - self.imgdownbutton = gtk.Button() - self.imgdownbutton.connect('clicked', self.imgdown, None) - self.imgdownbutton.show() - #downa = gtk.Arrow(gtk.ARROW_DOWN,gtk.SHADOW_OUT) - #downa.show() - downa = gtk.Image() - downa.set_from_file(os.path.join(self.iconsdir,'big_down_arrow.png')) - downa.show() - self.imgdownbutton.add(downa) - prepare_btn(self.imgdownbutton) - self.idbhbox = gtk.HBox() - self.idbhbox.show() - 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() - self.tophbox.show() - # animation frames - self.animhbox = gtk.HBox() - self.animhbox.show() - self.framebuttons = [] - self.frameimgs = [] - self.fgpixbufs = [] - self.fgpixbufpaths = [] - transimgpath = os.path.join(self.iconsdir,TRANSIMG) - for i in range(TAPE_COUNT): - #fb = gtk.Button() - #fb.connect('clicked', self.selectframe, i+1) - fb = gtk.EventBox() - fb.set_events(gtk.gdk.BUTTON_PRESS_MASK) - fb.connect('button_press_event', self.selectframe, i+1) - fb.modify_bg(gtk.STATE_NORMAL,gtk.gdk.color_parse(BLACK)) - fb.modify_bg(gtk.STATE_PRELIGHT,gtk.gdk.color_parse(BLACK)) - fb.show() - self.framebuttons.append(fb) - tpixbuf = self.gettranspixbuf(BGWIDTH,BGHEIGHT) - self.fgpixbufs.append(tpixbuf) - self.fgpixbufpaths.append(transimgpath) - #fb.set_label('') - transimg = gtk.Image() - transimg.set_from_pixbuf(self.gettranspixbuf(IMGWIDTH,IMGHEIGHT)) - transimg.show() - self.frameimgs.append(transimg) - #fb.set_image(transimg) - fb.add(transimg) - self.animhbox.pack_start(fb,True,True,2) - #if i != 5: - # ra = gtk.Arrow(gtk.ARROW_RIGHT,gtk.SHADOW_OUT) - # ra.show() - # self.tophbox.pack_start(ra,True,True,0) - - - self.animborder = gtk.EventBox() - self.animborder.modify_bg(gtk.STATE_NORMAL,gtk.gdk.color_parse(PINK)) - self.animborder.show() - self.animframe = gtk.EventBox() - self.animframe.modify_bg(gtk.STATE_NORMAL,gtk.gdk.color_parse(BACKGROUND)) - self.animframe.set_border_width(5) - self.animframe.show() - self.animborder.add(self.animframe) - self.animfilmstrip = gtk.VBox() - self.animfilmstrip.show() - - filmstrip_pix = gtk.gdk.pixbuf_new_from_file(os.path.join( - self.iconsdir,'filmstrip.png')) - filmstrip_pix = filmstrip_pix.scale_simple( - (IMGWIDTH + 4) * TAPE_COUNT, filmstrip_pix.get_height(), - gtk.gdk.INTERP_BILINEAR) - - self.filmstriptopimg = gtk.Image() - self.filmstriptopimg.set_from_pixbuf(filmstrip_pix) - self.filmstriptopimg.show() - self.animfilmstrip.pack_start(self.filmstriptopimg,True,True,0) - self.animfilmstrip.pack_start(self.animhbox,False,False,0) - self.filmstripbottomimg = gtk.Image() - self.filmstripbottomimg.set_from_pixbuf(filmstrip_pix) - self.filmstripbottomimg.show() - self.animfilmstrip.pack_start(self.filmstripbottomimg,False,False,0) - self.animframe.add(self.animfilmstrip) - self.afvbox = gtk.VBox() - self.afvbox.show() - self.afvbox.pack_start(self.animborder,False,False,0) - self.tophbox.pack_start(self.afvbox,False,False,0) - #self.clrframe = gtk.Button('CLEAR FRAME') - cancelimg = gtk.Image() - #cancelimg.set_from_stock(gtk.STOCK_CANCEL,gtk.ICON_SIZE_BUTTON) - cancelimg.set_from_file(os.path.join(self.iconsdir,'clear.png')) - cancelimg.show() - self.clrframe = gtk.Button() - self.clrframe.set_label('') - self.clrframe.set_image(cancelimg) - self.clrframe.connect('clicked', self.clearall, None) - prepare_btn(self.clrframe) - self.clrframe.show() - - #self.cfbox.pack_start(self.clrframe,True,True,0) - #self.clrall = gtk.Button('CLEAR ALL') - #self.clrall.connect('clicked', self.clearall, None) - #self.clrall.show() - #self.cfbox.pack_start(self.clrall,True,True,0) - #self.controlbox.pack_start(self.cfbox,True,True,0) - self.cfvbox = gtk.VBox() - self.cfvbox.show() - self.cfvbox.pack_start(self.clrframe,True,False,0) - self.tophbox.pack_start(self.cfvbox,False,False,5) - - self.frame_selected = 0 - self.fbstyle = self.framebuttons[0].get_style() - 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) - self.mfdraw.show() - self.mfdrawborder = gtk.EventBox() - self.mfdrawborder.modify_bg(gtk.STATE_NORMAL,gtk.gdk.color_parse(PINK)) - self.mfdrawborder.show() - self.mfdrawbox = gtk.EventBox() - self.mfdrawbox.set_border_width(5) - 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() - # GO BUTTON - playimg = gtk.Image() - #playimg.set_from_stock(gtk.STOCK_MEDIA_PLAY,gtk.ICON_SIZE_BUTTON) - playimg.set_from_file(os.path.join(self.iconsdir,'big_right_arrow.png')) - playimg.show() - self.gobutton = gtk.Button() - self.gobutton.set_label('') - self.gobutton.set_image(playimg) - self.gobutton.connect('clicked', self.go, None) - prepare_btn(self.gobutton) - self.gobutton.show() - self.bcontrolbox.pack_start(self.gobutton,True,True,5) - - # 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() - - - # CHARACTER CONTROLS - char_box = BigComboBox() - char_box.show() - for i in Char.list(): - char_box.append_item(i.id, size = Char.Size, - pixbuf = i.pixbuf) - char_box.connect('changed', self._char_cb) - self.controlbox.pack_start(char_box, False, False, 5) - - # BACKGROUND CONTROLS - - - self.bgbox = gtk.VBox() - self.bgbox.show() - self.bghbox = gtk.HBox() - self.bghbox.show() - self.blbutton = gtk.Button() - self.blbutton.connect('clicked',self.lastback,None) - self.blbutton.show() - bla = gtk.Image() - bla.set_from_file(os.path.join(self.iconsdir,'big_left_arrow.png')) - bla.show() - self.blbutton.add(bla) - prepare_btn(self.blbutton) - self.blbvbox = gtk.VBox() - self.blbvbox.show() - self.blbvbox.pack_start(self.blbutton,True,False,0) - self.bghbox.pack_start(self.blbvbox,True,True,5) - self.bgsmall = gtk.Image() - bgimgpath = os.path.join(self.mdirpath,'backpics/bigbg01.gif') - self.setback(bgimgpath) - self.bgsmall.show() - self.bghbox.pack_start(self.bgsmall,False,False,0) - self.brbutton = gtk.Button() - self.brbutton.connect('clicked',self.nextback,None) - self.brbutton.show() - bra = gtk.Image() - bra.set_from_file(os.path.join(self.iconsdir,'big_right_arrow.png')) - bra.show() - self.brbutton.add(bra) - prepare_btn(self.brbutton) - self.brbvbox = gtk.VBox() - self.brbvbox.show() - self.brbvbox.pack_start(self.brbutton,True,False,0) - self.bghbox.pack_start(self.brbvbox,True,True,5) - self.bgbox.pack_start(self.bghbox,True,True,0) - self.controlbox.pack_start(self.bgbox,False,False,5) - - # SOUND CONTROLS - self.soundbox = gtk.VBox() - self.soundbox.show() - self.soundhbox = gtk.HBox() - self.soundhbox.show() - self.slbutton = gtk.Button() - self.slbutton.connect('clicked',self.lastsound,None) - self.slbutton.show() - sla = gtk.Image() - sla.set_from_file(os.path.join(self.iconsdir,'big_left_arrow.png')) - sla.show() - self.slbutton.add(sla) - prepare_btn(self.slbutton) - self.slbvbox = gtk.VBox() - self.slbvbox.show() - self.slbvbox.pack_start(self.slbutton,True,False,0) - self.soundhbox.pack_start(self.slbvbox,True,True,5) - self.soundimg = gtk.Image() - #self.soundimg.set_from_file(os.path.join(self.iconsdir,'sound_icon.png')) - soundimgpath = os.path.join(self.iconsdir,'sound_icon.png') - sipixbuf = gtk.gdk.pixbuf_new_from_file(soundimgpath) - si_scaled_buf = sipixbuf.scale_simple(IMGWIDTH,IMGHEIGHT,gtk.gdk.INTERP_BILINEAR) - self.soundimg.set_from_pixbuf(si_scaled_buf) - self.soundimg.show() - self.soundhbox.pack_start(self.soundimg,False,False,0) - self.srbutton = gtk.Button() - self.srbutton.connect('clicked',self.nextsound,None) - self.srbutton.show() - sra = gtk.Image() - sra.set_from_file(os.path.join(self.iconsdir,'big_right_arrow.png')) - sra.show() - self.srbutton.add(sra) - prepare_btn(self.srbutton) - self.srbvbox = gtk.VBox() - self.srbvbox.show() - self.srbvbox.pack_start(self.srbutton,True,False,0) - self.soundhbox.pack_start(self.srbvbox,True,True,5) - self.soundbox.pack_start(self.soundhbox,True,True,0) - self.soundlabel = gtk.Label('No Sound') - self.soundlabel.show() - self.soundlabelhbox = gtk.HBox() - self.soundlabelhbox.show() - self.soundlabelhbox.pack_start(self.soundlabel,True,False,0) - self.soundbox.pack_start(self.soundlabelhbox,False,False,0) - self.controlbox.pack_start(self.soundbox,False,False,5) - - - - - - - self.centerframe = gtk.EventBox() - self.centerframe.modify_bg(gtk.STATE_NORMAL,gtk.gdk.color_parse(BACKGROUND)) - self.centerframe.set_border_width(5) - self.centerframe.show() - #self.ocenterframe.add(self.centerframe) - - - - - - - leftbox = gtk.VBox() - leftbox.show() - - self.logo = gtk.Image() - self.logo.show() - self.logo.set_from_file(os.path.join(self.iconsdir,'logo.png')) - leftbox.pack_start(self.logo,False,False,0) - - self.bottomhbox = gtk.HBox() - self.bottomhbox.show() - leftbox.pack_start(self.bottomhbox,True,True,10) - self.bottomhbox.pack_start(self.controlbox,False,False,10) - - - - - cetralbox = gtk.HBox() - cetralbox.show() - cetralbox.pack_start(self.centervbox,True,False,0) - cetralbox.pack_start(self.tvbox,False,True,0) - - - - - hdesktop = gtk.HBox() - hdesktop.show() - hdesktop.pack_start(leftbox,False,True,0) - hdesktop.pack_start(cetralbox,True,True,0) - - pink_arrow = gtk.Image() - pink_arrow.set_from_file(os.path.join(self.iconsdir, 'pink_arrow.png')) - pink_arrow.show() - self.pahbox = gtk.HBox() - self.pahbox.show() - self.pahbox.pack_start(pink_arrow,False,False,150) - - self.topvbox = gtk.VBox() - self.topvbox.show() - self.topvbox.pack_start(self.tophbox,False,False,0) - self.topvbox.pack_start(self.pahbox,False,False,0) - - 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) - - greenbox = gtk.EventBox() - greenbox.modify_bg(gtk.STATE_NORMAL,gtk.gdk.color_parse(BACKGROUND)) - greenbox.set_border_width(5) - greenbox.show() - greenbox.add(desktop) - - yellowbox = gtk.EventBox() - yellowbox.modify_bg(gtk.STATE_NORMAL,gtk.gdk.color_parse(YELLOW)) - yellowbox.show() - yellowbox.add(greenbox) - - self.main = yellowbox - self.main.show_all() - - def main(self): - gtk.main() - -try: - from sugar.graphics.toolbutton import ToolButton - from sugar.graphics.objectchooser import ObjectChooser - - class BGToolbar(gtk.Toolbar): - def __init__(self,sactivity,app): - gtk.Toolbar.__init__(self) - self.sactivity = sactivity - self.app = app - self.image = ToolButton('insert-image') - self.image.set_tooltip('Insert Image') - self.imageid = self.image.connect('clicked',self.image_cb) - self.insert(self.image,-1) - self.image.show() - - def image_cb(self, button): - chooser = ObjectChooser('Choose Image',self.sactivity, - gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT) - try: - result = chooser.run() - if result == gtk.RESPONSE_ACCEPT: - jobject = chooser.get_selected_object() - if jobject and jobject.file_path: - self.app.setback(jobject.file_path) - finally: - chooser.destroy() - del chooser - - class cartoonbuilderActivity(Shared): - def __init__(self, handle): - Shared.__init__(self,handle) - self.connect("destroy",self.destroy_cb) - #app = cartoonbuilder(self,'/home/olpc/Activities/CartoonBuilder.activity') - bundle_path = activity.get_bundle_path() - os.chdir(bundle_path) - self.app = cartoonbuilder(True,self, bundle_path) - self.set_title('CartoonBuilder') - toolbox = activity.ActivityToolbox(self) - bgtoolbar = BGToolbar(self,self.app) - toolbox.add_toolbar(_('Background'),bgtoolbar) - bgtoolbar.show() - self.set_toolbox(toolbox) - toolbox.show() - if hasattr(self, '_jobject'): - self._jobject.metadata['title'] = 'CartoonBuilder' - title_widget = toolbox._activity_toolbar.title - title_widget.set_size_request(title_widget.get_layout().get_pixel_size()[0] + 20, -1) - self.set_canvas(self.app.main) - - def destroy_cb(self, data=None): - return True - - def read_file(self, filepath): - Bundle.load(filepath) - - def write_file(self, filepath): - Bundle.save(filepath) - - -except ImportError: - pass - -if __name__ == "__main__": - # have to do toplevel window stuff here because Sugar does it on the OLPC - toplevel_window = gtk.Window(gtk.WINDOW_TOPLEVEL) - #mdirpath = '.' - mdirpath = os.path.abspath(os.curdir) - app = cartoonbuilder(False,toplevel_window,mdirpath) - toplevel_window.add(app.main) - toplevel_window.set_title('Cartoon Builder') - # FULLSCREEN - - #toplevel_window.set_decorated(False) - #toplevel_window.fullscreen() - - toplevel_window.connect("delete_event", app.delete_event) - toplevel_window.connect("destroy", app.destroy) - #toplevel_window.set_border_width(10) - toplevel_window.show() - gtk.main() |