Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/cartoonbuilder.py
diff options
context:
space:
mode:
authorAleksey 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)
commite59ebea703fcdbdba29d39bdd0e367fbd1753e5e (patch)
treecbc2d6f3c99504597703565e79b5cfa482b37c8c /cartoonbuilder.py
parent86ce7d4c14b458dce4edca81af8ae9fff0a770f7 (diff)
...
Diffstat (limited to 'cartoonbuilder.py')
-rwxr-xr-xcartoonbuilder.py1052
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()