Making the "Save" feature works. Adding Gzv.save_project,
[cascardo/movie.git] / gzv.py
diff --git a/gzv.py b/gzv.py
index e112cd8..081e06a 100644 (file)
--- a/gzv.py
+++ b/gzv.py
@@ -15,6 +15,7 @@
 import os
 import gtk
 import gtk.glade
+import gobject
 import math
 import cairo
 from ConfigParser import ConfigParser
@@ -76,10 +77,14 @@ class Project(object):
         self.focus_points_file = ''
 
     def save_to_file(self, path):
-        bn = os.path.basename(path)
-        name = os.path.splitext(bn)[0]
+        if not self.focus_points_file:
+            bn = os.path.basename(path)
+            name = os.path.splitext(bn)[0]
+            self.focus_points_file = \
+                os.path.join(os.path.dirname(path), name + '_fpf')
 
         cp = ConfigParser()
+        cp.add_section('Project')
         cp.set('Project', 'image', self.image)
         cp.set('Project', 'width', self.width)
         cp.set('Project', 'height', self.height)
@@ -191,6 +196,19 @@ class Gzv(GladeLoader):
             self.load_project(Project.parse_file(proj_file))
         fc.destroy()
 
+    def save_project(self, *args):
+        fc = gtk.FileChooserDialog(_('Save project'), self.window,
+                                   action=gtk.FILE_CHOOSER_ACTION_SAVE,
+                                   buttons=(gtk.STOCK_CANCEL,
+                                            gtk.RESPONSE_CANCEL,
+                                            gtk.STOCK_SAVE,
+                                            gtk.RESPONSE_OK))
+        if fc.run() == gtk.RESPONSE_OK:
+            self.project.save_to_file(fc.get_filename())
+            self.balls.save_to_file(self.project.focus_points_file)
+        fc.destroy()
+
+
     def load_project(self, project):
         self.project = project
         self.balls = self.load_balls_from_file(project.focus_points_file)
@@ -198,6 +216,12 @@ class Gzv(GladeLoader):
         self.load_balls_to_treeview()
         self.draw.queue_draw()
 
+    def unload_project(self):
+        self.project = None
+        self.image = None
+        self.balls = BallManager()
+        self.draw.queue_draw()
+
     def load_balls_to_treeview(self):
         self.model.clear()
         for i in self.balls:
@@ -254,7 +278,21 @@ class Gzv(GladeLoader):
 
         # loading the picture image and getting some useful
         # information to draw it in the widget's background
-        img = gtk.gdk.pixbuf_new_from_file(self.image)
+        try:
+            img = gtk.gdk.pixbuf_new_from_file(self.image)
+        except gobject.GError:
+            msg = _("Couldn't recognize the image file format.")
+            dialog = gtk.MessageDialog(self.window,
+                                       gtk.DIALOG_MODAL,
+                                       gtk.MESSAGE_ERROR,
+                                       gtk.BUTTONS_CLOSE)
+            dialog.set_markup(msg)
+            dialog.run()
+            dialog.destroy()
+
+            self.draw.stop_emission('expose-event')
+            return self.unload_project()
+
         pixels = img.get_pixels()
         rowstride = img.get_rowstride()
         width = img.get_width()