#! /usr/bin/python # -*- coding:utf-8 -*- # © 2012 Skyler Lehmkuhl # Released under the GPLv3. For more information, see gpl.txt. import os, shutil, tarfile, tempfile, StringIO #Uncomment to build on OS X #import objc, AppKit, cPickle #Uncomment to build on Windows #import ctypes, ctypes.wintypes, win32print #SVLGUI - my custom GUI wrapper to abstract the GUI import svlgui #swift_window - builds the application windows import lightningbeam_windows #pickle - used to save and open files import pickle #webbrowser - used to launch HTML5 import webbrowser #misc_funcs - miscelleneous functions in a separate file so as not to clutter things up too much import misc_funcs #If we can import this, we are in the install directory. Mangle media paths accordingly. try: from distpath import media_path except: media_path = "" #specify the current version and what version files it can still open LIGHTNINGBEAM_VERSION = "1.0-alpha1" LIGHTNINGBEAM_COMPAT = ["1.0-alpha1"] #Global variables. Used to keep stuff together. global root global layers def update_date(): return "Tue, January 10, 2012" def onLoadFrames(self): '''for i in range(2000): if i%5==0: j = box(i*16,0,16,32,svlgui.Color([0.5,0.5,0.5])) self.add(j) else: j = box(i*16,0,16,32,svlgui.Color([1,1,1])) self.add(j)''' def onClickFrame(self, x, y): root.descendItem().activelayer.frames[root.descendItem().activelayer.currentframe].actions = MainWindow.scriptwindow.text root.descendItem().activeframe = int(x/16) print ">>>>>> ", x, y MainWindow.stage.draw() MainWindow.scriptwindow.text = str(root.descendItem().activelayer.frames[root.descendItem().activelayer.currentframe].actions) def onKeyDownFrame(self, key): root.descendItem().activelayer.frames[root.descendItem().activelayer.currentframe].actions = MainWindow.scriptwindow.text if key in [" ", "s", "r", "e", "b"]: svlgui.MODE=key svlgui.set_cursor({" ":"arrow","s":"arrow","r":"crosshair","e":"crosshair", "b":"arrow"}[key], MainWindow.stage) misc_funcs.update_tooloptions() elif key=="F6": add_keyframe() elif key=="F8": convert_to_symbol() MainWindow.scriptwindow.text = root.descendItem().activelayer.frames[root.descendItem().activelayer.currentframe].actions def onMouseDownGroup(self, x, y): self.activelayer.frames[self.activelayer.currentframe].actions = MainWindow.scriptwindow.text if svlgui.MODE in [" ", "s"]: if self.hitTest(x, y): self.clicked = True elif svlgui.MODE in ["r", "e", "p"]: if svlgui.MODE=="r": #I can't remember what the 'c' stands for... self.cshape = box(x, y, 0, 0) elif svlgui.MODE=="e": self.cshape = ellipse(x, y, 0, 0) elif svlgui.MODE=="p": self.cshape = shape(x, y) #self.cshape.rotation = 5 self.cshape.initx,self.cshape.inity = x, y self.add(self.cshape) self.cshape.onMouseDown = onMouseDownObj self.cshape.onMouseMove = onMouseMoveObj self.cshape.onMouseDrag = onMouseDragObj self.cshape.onMouseUp = onMouseUpObj self.cshape.onKeyDown = onKeyDownObj self.clicked = True MainWindow.scriptwindow.text = self.activelayer.frames[self.activelayer.currentframe].actions elif svlgui.MODE in ["t"]: self.ctext = svlgui.Text("Mimimi",x,y) self.ctext.editing = True self.ctext.onMouseDown = onMouseDownText self.ctext.onMouseDrag = onMouseDragText self.ctext.onMouseUp = onMouseUpText self.add(self.ctext) self.ctext = None MainWindow.docbox.setvisible(True) MainWindow.textbox.setvisible(False) def onMouseDownObj(self, x, y): MainWindow.scriptwindow.text = root.descendItem().activelayer.frames[root.descendItem().activelayer.currentframe].actions self.clicked = True self.initx,self.inity = x-self.x, y-self.y if svlgui.MODE == "b": self.filled = True self.fillcolor = svlgui.FILLCOLOR def onMouseDownText(self,x,y): MainWindow.scriptwindow.text = root.descendItem().activelayer.frames[root.descendItem().activelayer.currentframe].actions self.clicked = True self.initx, self.inity = x-self.x, y-self.y MainWindow.docbox.setvisible(False) MainWindow.textbox.setvisible(True) svlgui.CURRENTTEXT = self.obj print "Height", MainWindow.textbox.height def onMouseDownFrame(self, x, y): pass def onMouseUpGroup(self, x, y): self.clicked = False if svlgui.MODE in ["r", "e"]: self.cshape = None elif svlgui.MODE=="p": print len(self.cshape.shapedata) self.cshape.shapedata = misc_funcs.simplify_shape(self.cshape.shapedata, svlgui.PMODE.split()[-1],1) print len(self.cshape.shapedata) self.cshape = None MainWindow.stage.draw() def onMouseUpObj(self, x, y): self.clicked = False def onMouseUpText(self, x, y): self.clicked = False def onMouseMoveGroup(self, x, y): pass #This is for testing rotation. Comment out before any commit! #root.rotation+=0.01 def onMouseMoveObj(self, x, y): pass def onMouseDragGroup(self, x, y): if svlgui.MODE in [" ", "s"]: self.x = x self.y = y elif svlgui.MODE == "r": sd = self.cshape.shapedata x=x-self.cshape.initx y=y-self.cshape.inity self.cshape.shapedata = [sd[0],["L",x,sd[0][2]],["L",x,y],["L",sd[0][1],y],sd[4]] elif svlgui.MODE == "e": sd = self.cshape.shapedata x=x-self.cshape.initx y=y-self.cshape.inity self.cshape.shapedata = [["M",x/2,0],["C",4*x/5,0,x,y/5,x,y/2],["C",x,4*y/5,4*x/5,y,x/2,y],["C",x/5,y,0,4*y/5,0,y/2],["C",0,y/5,x/5,0,x/2,0]] elif svlgui.MODE == "p": self.cshape.shapedata.append(["L",x-self.cshape.initx,y-self.cshape.inity]) def onMouseDragObj(self, x, y): self.x = x-self.initx self.y = y-self.inity def onMouseDragText(self, x, y): self.x = x-self.initx self.y = y-self.inity def onKeyDownGroup(self, key): if not svlgui.EDITING: if key in [" ", "s", "r", "e", "b", "p"]: svlgui.MODE=key svlgui.set_cursor({" ":"arrow","s":"arrow","r":"crosshair","e":"crosshair", "b":"arrow","p":"arrow"}[key], MainWindow.stage) misc_funcs.update_tooloptions() elif key=="F6": add_keyframe() elif key=="F8": convert_to_symbol() else: if not key=="escape": pass else: svlgui.EDITING=False def onKeyDownObj(self, key): if key in ("delete", "backspace"): del self.parent[self.parent.index(self)] # Need to clean up deletion elif key in [" ", "s", "r", "e", "b", "p"]: svlgui.MODE=key svlgui.set_cursor({" ":"arrow","s":"arrow","r":"crosshair","e":"crosshair", "b":"arrow","p":"arrow"}[key], MainWindow.stage) misc_funcs.update_tooloptions() elif key=="F6": add_keyframe() elif key=="F8": convert_to_symbol() def create_sc(root): #retval = ".flash bbox="+str(svlgui.WIDTH)+"x"+str(svlgui.HEIGHT)+" background=#ffffff \ #fps="+str(svlgui.FRAMERATE)+"\n"+root.print_sc()+".end" retval = ".flash bbox="+str(svlgui.WIDTH)+"x"+str(svlgui.HEIGHT)+" background=#ffffff \ fps="+str(svlgui.FRAMERATE)+"\n"+"".join([i.print_sc() for i in svlgui.Library])+root.print_sc()+".end" return retval def run_file(self=None): global root print "RUNNING" root.descendItem().activelayer.frames[root.descendItem().activelayer.currentframe].actions = MainWindow.scriptwindow.text open(os.getenv('HOME')+"/test.sc", "w").write(create_sc(root)) svlgui.execute("swfc/swfc_"+svlgui.PLATFORM+" "+os.getenv('HOME')+"/test.sc -o "+os.getenv('HOME')+"/test.swf") #TODO: Make this cross-platform compatible logloc = os.getenv('HOME')+"/Library/Preferences/Macromedia/Flash Player/Logs/flashlog.txt" try: logfile.close() except: pass logfile = open(logloc,"w") logfile.write("") logfile.close() outputwin = svlgui.Window("Output") outputwin.resize(200,500) outputtext = svlgui.TextView(False) outputwin.add(outputtext) logfile = open(logloc, "r") def updatetrace(outputtext): try: outputtext.text+=logfile.readline() outputtext.scroll_bottom() # this doesn't work except: pass r = misc_funcs.RepeatTimer(0.02, updatetrace, args=[outputtext]) print dir(outputwin.window) r.daemon = True r.start() if svlgui.PLATFORM=="osx": osx_flash_player_loc = "/Applications/Flash\ Player\ Debugger.app" success = svlgui.execute("open -a "+osx_flash_player_loc+" "+os.getenv('HOME')+"/test.swf") if not success: svlgui.alert("Oops! Didn't work. I probably couldn't find your Flash debugger!") elif svlgui.PLATFORM=='win32': win_flash_player_loc = "" svlgui.execute('start '+win_flash_player_loc+" test.swf") elif svlgui.PLATFORM.startswith('linux'): linux_flash_player_loc = "" svlgui.execute('xdg-open '+linux_flash_player_loc+" test.swf") def create_html5(root): retval = "
\n\ \n\ \n\ \n\