Save reworked to use .tar.gz files - to pack resources

This commit is contained in:
Skyler Lehmkuhl 2012-01-17 16:24:05 -05:00
parent d2a1640a6b
commit 77a18d15c4
3 changed files with 107 additions and 54 deletions

7
Roadmap Normal file
View File

@ -0,0 +1,7 @@
Roadmap
✓ Images
- Drawing
- Line width
- Better paint bucket (separate object)

View File

@ -3,7 +3,7 @@
# © 2012 Skyler Lehmkuhl # © 2012 Skyler Lehmkuhl
# Released under the GPLv3. For more information, see gpl.txt. # Released under the GPLv3. For more information, see gpl.txt.
import os, shutil import os, shutil, tarfile, tempfile, StringIO
#Uncomment to build on OS X #Uncomment to build on OS X
#import objc, AppKit, cPickle #import objc, AppKit, cPickle
@ -312,18 +312,37 @@ def new_file(widget=None):
def open_file(widget=None): def open_file(widget=None):
global root global root
MainWindow.stage.delete(root) MainWindow.stage.delete(root)
thefile = svlgui.file_dialog("open").open("rb") thetarfile = tarfile.open(fileobj=svlgui.file_dialog("open").open("rb"),mode="r:gz")
root = pickle.load(thefile) basefile = thetarfile.extractfile("basefile")
root, svlgui.Library = pickle.load(basefile)
MainWindow.stage.add(root, 0, 0) MainWindow.stage.add(root, 0, 0)
MainWindow.stage.draw() MainWindow.stage.draw()
MainWindow.timelinebox.root = root MainWindow.timelinebox.root = root
MainWindow.timelinebox.draw() MainWindow.timelinebox.draw()
thetarfile.close()
def open_sc_file(widget=None): def open_sc_file(widget=None):
pass pass
def save_file(widget=None): def save_file(widget=None):
thefile = svlgui.file_dialog("save").open("w") data = pickle.dumps((root,svlgui.Library))
pickle.dump(root, thefile) tarinfo = tarfile.TarInfo('basefile')
print thefile tarinfo.size = len(data)
if svlgui.FILE.name.startswith(svlgui.TEMPDIR):
thetarfile = tarfile.open(fileobj=svlgui.file_dialog("save").open('wb'),mode="w:gz")
print thetarfile.name
else:
thetarfile = tarfile.open(svlgui.FILE.name,mode="w:gz")
thetarfile.addfile(tarinfo, StringIO.StringIO(data))
#Save the path so we can come back here
lastpath = os.path.abspath(".")
for i in svlgui.Library:
if i.type=="Image":
os.chdir(os.sep.join(i.path.split(os.sep)[:-1]))
i.path = i.path.split(os.sep)[-1]
thetarfile.add(i.path.split(os.sep)[-1])
os.chdir(lastpath)
thetarfile.close()
svlgui.FILE = thetarfile
#thetarfile.close()
def save_file_as(widget=None): def save_file_as(widget=None):
pass pass
def import_to_stage(widget=None): def import_to_stage(widget=None):
@ -430,7 +449,7 @@ svlgui.menufuncs([["File",
("Add Layer",add_layer,"<Shift><Control>N"), ("Add Layer",add_layer,"<Shift><Control>N"),
("Delete Layer",delete_layer,"<Shift><Control>Delete")], ("Delete Layer",delete_layer,"<Shift><Control>Delete")],
["Import", ["Import",
("Import to Stage",import_to_stage), ("Import to Stage",import_to_stage,"/I"),
("Import to Library",import_to_library)], ("Import to Library",import_to_library)],
["Export", ["Export",
"Export .swf", "Export .swf",

View File

@ -150,6 +150,7 @@ if sys.platform=="linux2":
### TESTING - gtk should be Linux platform, at least for now #### ### TESTING - gtk should be Linux platform, at least for now ####
#''' #'''
import pickle import pickle
import tarfile
import GUI # Using PyGUI. Experimental. import GUI # Using PyGUI. Experimental.
from GUI import Window as OSXWindow, Button as OSXButton, Image as OSXImage from GUI import Window as OSXWindow, Button as OSXButton, Image as OSXImage
from GUI import Frame as OSXFrame, Color as OSXColor, Grid as OSXGrid from GUI import Frame as OSXFrame, Color as OSXColor, Grid as OSXGrid
@ -162,6 +163,7 @@ if sys.platform=="linux2":
from GUI.Geometry import offset_rect, rect_sized from GUI.Geometry import offset_rect, rect_sized
#app = GUI.application() #app = GUI.application()
SYSTEM="osx" SYSTEM="osx"
TEMPDIR = "/tmp"
''' '''
SYSTEM="html" SYSTEM="html"
ids = {} ids = {}
@ -171,6 +173,7 @@ if sys.platform=="linux2":
elif sys.platform=="win32": elif sys.platform=="win32":
PLATFORM="win32" PLATFORM="win32"
import pickle import pickle
import tarfile
import misc_funcs import misc_funcs
import GUI # Using PyGUI. Experimental. import GUI # Using PyGUI. Experimental.
from GUI import Window as OSXWindow, Button as OSXButton, Image as OSXImage from GUI import Window as OSXWindow, Button as OSXButton, Image as OSXImage
@ -183,11 +186,14 @@ elif sys.platform=="win32":
from GUI.Files import FileType from GUI.Files import FileType
from GUI.Geometry import offset_rect, rect_sized from GUI.Geometry import offset_rect, rect_sized
SYSTEM="osx" SYSTEM="osx"
TEMPDIR="C:\\Windows\\Temp"
sep = "\\" sep = "\\"
elif sys.platform=="linux-armv6l": elif sys.platform=="linux-armv6l":
import android import android
import tarfile
droid = android.Android() droid = android.Android()
SYSTEM="android" SYSTEM="android"
TEMPDIR="/tmp" # TODO:FIXTHIS
tb = "" tb = ""
sep = "/" sep = "/"
print str(sys.platform) print str(sys.platform)
@ -195,6 +201,7 @@ elif sys.platform=="darwin":
PLATFORM="osx" PLATFORM="osx"
import pickle import pickle
import misc_funcs import misc_funcs
import tarfile
import GUI # Using PyGUI. Experimental. import GUI # Using PyGUI. Experimental.
from GUI import Window as OSXWindow, Button as OSXButton, Image as OSXImage from GUI import Window as OSXWindow, Button as OSXButton, Image as OSXImage
from GUI import Frame as OSXFrame, Color as OSXColor, Grid as OSXGrid from GUI import Frame as OSXFrame, Color as OSXColor, Grid as OSXGrid
@ -207,8 +214,12 @@ elif sys.platform=="darwin":
from GUI.Geometry import offset_rect, rect_sized from GUI.Geometry import offset_rect, rect_sized
#app = GUI.application() #app = GUI.application()
SYSTEM="osx" SYSTEM="osx"
TEMPDIR="/tmp"
sep = "/" sep = "/"
FILE = tarfile.open(name=TEMPDIR+"/Untitled",mode="w:gz")
FILE.close()
__windowlist__=[] __windowlist__=[]
if SYSTEM=="osx": if SYSTEM=="osx":
@ -874,6 +885,11 @@ class TextEntry(Widget):
text = property(get_text, set_text) text = property(get_text, set_text)
class Image(object): class Image(object):
def __getstate__(self):
dict = self.__dict__.copy()
print dict
dict['image'] = None
return dict
def __init__(self,image,x=0,y=0,animated=False,canvas=None,htiles=1,vtiles=1,skipl=False): def __init__(self,image,x=0,y=0,animated=False,canvas=None,htiles=1,vtiles=1,skipl=False):
if not skipl: if not skipl:
global Library global Library
@ -1226,6 +1242,10 @@ class Shape (object):
return retval return retval
class framewrapper (object): class framewrapper (object):
#def __getstate__(self):
# dict = self.__dict__.copy()
# dict['parent'] = None
# return dict
#Wraps object per-frame. Allows for changes in position, rotation, scale. #Wraps object per-frame. Allows for changes in position, rotation, scale.
def __init__(self, obj, x, y, rot, scalex, scaley, parent=None): def __init__(self, obj, x, y, rot, scalex, scaley, parent=None):
self.obj = obj self.obj = obj
@ -1290,6 +1310,12 @@ class framewrapper (object):
class frame: class frame:
def __reduce__(self):
badvars = (self.parent,self.group)
self.parent = None
ret = pickle.dumps(self)
self.parent, self.group = badvars
return ret
def __init__(self,parent,duplicate=None): def __init__(self,parent,duplicate=None):
self.objs = [] self.objs = []
self.currentselect=None self.currentselect=None
@ -2190,10 +2216,10 @@ class FramesCanvas(Canvas):
cr.newpath() cr.newpath()
cr.rect([i*16,k*32,i*16+16,k*32+32]) cr.rect([i*16,k*32,i*16+16,k*32+32])
if self.root.descendItem().activeframe==i: if self.root.descendItem().activeframe==i:
cr.fillcolor = Color([0.2,0.2,0.2]).pygui cr.fillcolor = Color([0.5,0.5,0.5]).pygui
cr.fill() cr.fill()
elif i%5==0: elif i%5==0:
cr.fillcolor = Color([0.5,0.5,0.5]).pygui cr.fillcolor = Color([0.8,0.8,0.8]).pygui
cr.fill() cr.fill()
print i print i
else: else:
@ -2226,6 +2252,7 @@ def main():
def quit(): def quit():
#Self-descriptive #Self-descriptive
FILE.close()
if SYSTEM=="gtk": if SYSTEM=="gtk":
gtk.main_quit() gtk.main_quit()
elif SYSTEM=="android": elif SYSTEM=="android":