From f5d3ebdc108980580569f32352cdb9c6de3a401c Mon Sep 17 00:00:00 2001 From: Aleksey Lim Date: Mon, 02 Feb 2009 10:39:23 +0000 Subject: Rename files --- (limited to 'document.py') diff --git a/document.py b/document.py new file mode 100644 index 0000000..e7c3ba8 --- /dev/null +++ b/document.py @@ -0,0 +1,125 @@ +# 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 + +import os +import gtk +from xml.etree.ElementTree import Element, SubElement, tostring, fromstring + +import theme +from utils import * + +class Document: + tape = [] + + ground_name = None + ground_orig = None + ground_filename = None + + sound_name = None + sound_filename = None + + class Tape: + def __init__(self): + self.clean() + + def clean(self): + self.orig = theme.EMPTY_ORIG + self.filename = theme.EMPTY_FILENAME + + for i in range(theme.TAPE_COUNT): + tape.append(Tape()) + +def save(filepath): + zip = Zip(filepath, 'w') + manifest = Element('memorize') + + ground = SubElement(manifest, 'ground') + if Document.ground_filename: + ground.attrib['preinstalled'] = '1' + ground.attrib['filename'] = Document.ground_filename + else: + ground.attrib['preinstalled'] = '0' + ground.attrib['filename'] = 'ground.png' + zip.write_pixbuf('ground.png', Document.ground_orig) + ground.text = Document.ground_name + + sound = SubElement(manifest, 'sound') + if not os.path.isabs(Document.sound_filename): + sound.attrib['preinstalled'] = '1' + sound.attrib['filename'] = Document.sound_filename + else: + sound.attrib['preinstalled'] = '0' + sound.attrib['filename'] = 'sound' + zip.write(Document.sound_filename, 'sound') + sound.text = Document.sound_name + + saved = {} + tape = SubElement(manifest, 'tape') + for i in range(theme.TAPE_COUNT): + frame = SubElement(tape, 'frame') + if Document.tape[i].filename: + frame.attrib['preinstalled'] = '1' + frame.attrib['filename'] = Document.tape[i].filename + else: + frame.attrib['preinstalled'] = '0' + arcname = saved.get(Document.tape[i].orig) + if not arcname: + arcname = saved[Document.tape[i].orig] = 'frame%03d.png' % i + zip.write_pixbuf(arcname, Document.tape[i].orig) + frame.attrib['filename'] = arcname + + zip.writestr('MANIFEST.xml', tostring(manifest, encoding='utf-8')) + zip.close() + +def load(filepath): + zip = Zip(filepath, 'r') + manifest = fromstring(zip.read('MANIFEST.xml')) + + ground = manifest.find('ground') + if int(ground.attrib['preinstalled']): + Document.ground_orig = theme.pixbuf(ground.attrib['filename']) + Document.ground_filename = ground.attrib['filename'] + else: + Document.ground_orig = zip.read_pixbuf(ground.attrib['filename']) + Document.ground_name = ground.text + + sound = manifest.find('sound') + if int(sound.attrib['preinstalled']): + Document.sound_filename = sound.attrib['filename'] + else: + arcfile = sound.attrib['filename'] + sndfile = os.path.join(theme.SESSION_PATH, 'sound.001') + file(sndfile, 'w').write(zip.read(arcfile)) + Document.sound_filename = sndfile + Document.sound_name = sound.text + + loaded = {} + for i, frame in enumerate(manifest.findall('tape/frame')): + if i >= theme.TAPE_COUNT: + continue + if int(frame.attrib['preinstalled']): + if frame.attrib['filename'] == theme.EMPTY_FILENAME: + Document.tape[i].orig = theme.EMPTY_ORIG + else: + Document.tape[i].orig = theme.pixbuf(frame.attrib['filename']) + Document.tape[i].filename = frame.attrib['filename'] + else: + pixbuf = loaded.get(frame.attrib['filename']) + if not pixbuf: + pixbuf = zip.read_pixbuf(frame.attrib['filename']) + loaded[frame.attrib['filename']] = pixbuf + Document.tape[i].orig = pixbuf + Document.tape[i].filename = None + + zip.close() -- cgit v0.9.1