def open_file(self, filename):
try:
self.doc.load(filename)
- except Exception, e:
+ except document.SaveLoadError, e:
d = gtk.MessageDialog(self, type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK)
d.set_markup(str(e))
d.run()
d.destroy()
- raise
else:
self.filename = os.path.abspath(filename)
print 'Loaded from', self.filename
def save_file(self, filename, **options):
try:
x, y, w, h = self.doc.get_bbox()
- assert w > 0 and h > 0, 'The canvas is empty.'
+ if w == 0 and h == 0:
+ raise document.SaveLoadError, 'Did not save, the canvas is empty.'
self.doc.save(filename, **options)
- except Exception, e:
- print 'Failed to save, traceback:'
- traceback.print_exc()
+ except document.SaveLoadError, e:
d = gtk.MessageDialog(self, type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK)
- d.set_markup('Failed to save:\n' + str(e))
+ d.set_markup(str(e))
d.run()
d.destroy()
else:
N = tiledsurface.N
+class SaveLoadError(Exception):
+ """Expected errors on loading or saving, like missing permissions or non-existing files."""
+ pass
+
class Document():
"""
This is the "model" in the Model-View-Controller design.
return count > 1
def save(self, filename, **kwargs):
+ #if the file doesnt allready exist, we need to check permissions on the directory
+ if not os.path.isfile(filename):
+ path = os.path.dirname(filename)
+ else:
+ path = filename
+ if not os.access(path,os.W_OK):
+ raise SaveLoadError, 'You do not have the necessary permissions to save file: ' + repr(filename)
trash, ext = os.path.splitext(filename)
ext = ext.lower().replace('.', '')
save = getattr(self, 'save_' + ext, self.unsupported)
self.unsaved_painting_time = 0.0
def load(self, filename):
+ if not os.path.isfile(filename):
+ raise SaveLoadError, 'File does not exist: ' + repr(filename)
+ if not os.access(filename,os.R_OK):
+ raise SaveLoadError, 'You do not have the necessary permissions to open file: ' + repr(filename)
trash, ext = os.path.splitext(filename)
- # consider catching and raising "nicer" (consistent) Errors for files that doesnt exist when trying to open them
ext = ext.lower().replace('.', '')
load = getattr(self, 'load_' + ext, self.unsupported)
load(filename)
self.unsaved_painting_time = 0.0
def unsupported(self, filename):
- raise ValueError, 'Unknown file format extension: ' + repr(filename)
+ raise SaveLoadError, 'Unknown file format extension: ' + repr(filename)
def render_as_pixbuf(self, *args):
return pixbufsurface.render_as_pixbuf(self, *args)