2010-12-08 01:36:45 -08:00

97 lines
3.2 KiB
Python

#
# mprj/session.py
#
# Copyright (C) 2004-2010 by Yevgen Muntyan <emuntyan@sourceforge.net>
#
# This file is part of medit. medit is free software; you can
# redistribute it and/or modify it under the terms of the
# GNU Lesser General Public License as published by the
# Free Software Foundation; either version 2.1 of the License,
# or (at your option) any later version.
#
# You should have received a copy of the GNU Lesser General Public
# License along with medit. If not, see <http://www.gnu.org/licenses/>.
#
from mprj.config._xml import XML, XMLGroup, XMLItem
import moo
import os
import mprj.utils
class Session(object):
def __init__(self, data=None):
object.__init__(self)
self.__file_selector_dir = None
self.__docs = []
self.__active = None
if data:
if isinstance(data, moo.EditWindow):
self.__load_from_window(data)
else:
file = open(data)
contents = file.read()
file.close()
self.__parse(contents)
def attach(self, window):
editor = moo.editor_instance()
# saved_silent = editor.get_property("silent")
# editor.set_property("silent", True)
for doc in self.__docs:
if os.path.exists(doc):
editor.open_file(window, None, doc)
# editor.set_property("silent", saved_silent)
if self.__active is not None:
doc = window.get_nth_doc(self.__active)
if doc:
window.set_active_doc(doc)
def save(self, filename):
mprj.utils.save_file(filename, self.__format())
def get_file_selector_dir(self):
return self.__file_selector_dir
def set_file_selector_dir(self, path):
self.__file_selector_dir = path
def __format(self):
root = XMLGroup('medit-session')
for d in self.__docs:
root.add_child(XMLItem('doc', d))
if self.__active is not None:
root.add_child(XMLItem('active', str(self.__active)))
if self.__file_selector_dir is not None:
root.add_child(XMLItem('file-selector', self.__file_selector_dir))
return '<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n' + \
root.get_string()
def __parse(self, string):
xml = XML(string)
if xml.root.name != 'medit-session':
raise RuntimeError("Invalid root element name '%s'" % (xml.root.name,))
for node in xml.root.children():
if node.name == 'doc':
self.__parse_doc(node)
elif node.name == 'active':
self.__active = int(node.get())
elif node.name == 'file-selector':
self.__file_selector_dir = node.get()
else:
raise RuntimeError("Uknown element '%s'" % (node.name,))
def __parse_doc(self, node):
self.__docs.append(node.get())
def __load_from_window(self, window):
docs = window.list_docs()
active = window.get_active_doc()
for d in docs:
if d.get_filename():
self.__docs.append(d.get_filename())
if d is active:
self.__active = len(self.__docs) - 1