[pitivi] project: Add revert to saved option (Bug 586023)



commit 5a9361c023524ce24a5bade6be16b90e35f9e9f4
Author: Pier Carteri <pier carteri gmail com>
Date:   Sun Jun 6 10:56:20 2010 +0200

    project: Add revert to saved option (Bug 586023)

 pitivi/projectmanager.py |   16 ++++++++++++++++
 pitivi/ui/mainwindow.py  |   34 +++++++++++++++++++++++++++++++++-
 pitivi/ui/mainwindow.xml |    1 +
 3 files changed, 50 insertions(+), 1 deletions(-)
---
diff --git a/pitivi/projectmanager.py b/pitivi/projectmanager.py
index a9c1780..1fcca6e 100644
--- a/pitivi/projectmanager.py
+++ b/pitivi/projectmanager.py
@@ -77,6 +77,7 @@ class ProjectManager(Signallable, Loggable):
         "closing-project": ["project"],
         "project-closed": ["project"],
         "missing-uri": ["formatter", "uri", "factory"],
+        "reverting-to-saved":["project"],
     }
 
     def __init__(self):
@@ -183,6 +184,21 @@ class ProjectManager(Signallable, Loggable):
 
         return True
 
+    def revertToSavedProject(self):
+        """ discard all unsaved changes and reload current open project """
+        #no running project or
+        #project has not been modified
+        if self.current is None \
+           or not self.current.hasUnsavedModifications(): 
+            return True
+
+        if not self.emit("reverting-to-saved", self.current):
+            return False
+        uri = self.current.uri 
+        self.current.setModificationState(False)
+        self.closeRunningProject()
+        self.loadProject(uri)
+        
 
     def _getFormatterForUri(self, uri):
         return get_formatter_for_uri(uri)
diff --git a/pitivi/ui/mainwindow.py b/pitivi/ui/mainwindow.py
index 5823d2e..e526345 100644
--- a/pitivi/ui/mainwindow.py
+++ b/pitivi/ui/mainwindow.py
@@ -192,6 +192,8 @@ class PitiviMainWindow(gtk.Window, Loggable):
                 self._projectManagerProjectSavedCb)
         self.app.projectManager.connect("closing-project",
                 self._projectManagerClosingProjectCb)
+        self.app.projectManager.connect("reverting-to-saved",
+                self._projectManagerRevertingToSavedCb)
         self.app.projectManager.connect("project-closed",
                 self._projectManagerProjectClosedCb)
         self.app.projectManager.connect("missing-uri",
@@ -254,6 +256,8 @@ class PitiviMainWindow(gtk.Window, Loggable):
              None, _("Save the current project"), self._saveProjectCb),
             ("SaveProjectAs", gtk.STOCK_SAVE_AS, None,
              None, _("Save the current project"), self._saveProjectAsCb),
+            ("RevertToSavedProject", gtk.STOCK_REVERT_TO_SAVED, None,
+             None, _("Reload the current project"), self._revertToSavedProjectCb),             
             ("ProjectSettings", gtk.STOCK_PROPERTIES, _("Project Settings"),
              None, _("Edit the project settings"), self._projectSettingsCb),
             ("RenderProject", 'pitivi-render' , _("_Render project"),
@@ -342,13 +346,15 @@ class PitiviMainWindow(gtk.Window, Loggable):
                 "SecondForward", "SecondBackward", "EdgeForward",
                 "EdgeBackward", "Preferences"]:
                 action.set_sensitive(True)
-            elif action_name in ["NewProject", "SaveProjectAs", "OpenProject"]:
+            elif action_name in ["NewProject", "SaveProjectAs", "OpenProject",
+                                            "RevertToSavedProject"]:
                 if instance.settings.fileSupportEnabled:
                     action.set_sensitive(True)
             elif action_name == "SaveProject":
                 if instance.settings.fileSupportEnabled:
                     action.set_sensitive(True)
                 action.props.is_important = True
+                action.props.is_important = True
             elif action_name == "Undo":
                 action.set_sensitive(True)
                 action.props.is_important = True
@@ -578,6 +584,10 @@ class PitiviMainWindow(gtk.Window, Loggable):
 
         return False
 
+    def _revertToSavedProjectCb(self, unused_action):
+        return self.app.projectManager.revertToSavedProject()
+            
+
     def _projectSettingsCb(self, unused_action):
         from projectsettings import ProjectSettingsDialog
         ProjectSettingsDialog(self, self.app.current).show()
@@ -815,6 +825,28 @@ class PitiviMainWindow(gtk.Window, Loggable):
         project.seeker.disconnect_by_func(self._timelineSeekCb)
         return False
 
+    def _projectManagerRevertingToSavedCb(self, projectManager, project):
+        if project.hasUnsavedModifications():
+            dialog = gtk.MessageDialog(self,
+                                gtk.DIALOG_MODAL,
+                                gtk.MESSAGE_WARNING,
+                                gtk.BUTTONS_YES_NO,
+                                _("Do you want to reload current project?")
+                                )
+            dialog.set_icon_name("pitivi")
+            dialog.set_title(_("Revert to saved project"))
+            dialog.set_resizable(False)
+            dialog.set_property("secondary-text", 
+                                            _("All unsaved changes will be lost")
+                                        )
+            dialog.set_default_response(gtk.RESPONSE_NO)
+            response = dialog.run()
+            dialog.destroy()
+            if response <> gtk.RESPONSE_YES:
+                return False
+        return True
+        
+
     def _projectManagerNewProjectFailedCb(self, projectManager, uri, exception):
         # ungrey UI
         dialog = gtk.MessageDialog(self,
diff --git a/pitivi/ui/mainwindow.xml b/pitivi/ui/mainwindow.xml
index 9642553..1673fcf 100644
--- a/pitivi/ui/mainwindow.xml
+++ b/pitivi/ui/mainwindow.xml
@@ -5,6 +5,7 @@
       <menuitem action="OpenProject" />
       <menuitem action="SaveProject" />
       <menuitem action="SaveProjectAs" />
+      <menuitem action="RevertToSavedProject" />
       <separator />
       <menuitem action="Quit" />
     </menu>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]