[pitivi] preset: Allow user presets to override default presets



commit 8e06e6bdf9516bf7b6c0d3d65005b0ff84b465fd
Author: Alexandru Băluț <alexandru balut gmail com>
Date:   Thu May 21 00:14:17 2015 +0200

    preset: Allow user presets to override default presets
    
    Differential Revision: https://phabricator.freedesktop.org/D360
    Reviewed-by: Thibault Saunier <tsaunier gnome org>

 pitivi/preset.py              |   26 +++++++++++++++++++++-----
 pitivi/project.py             |   10 ++++++----
 pitivi/render.py              |   11 +++++++----
 tests/test_preset.py          |   38 +++++++++++++++++++-------------------
 tests/test_projectsettings.py |    6 +++---
 5 files changed, 56 insertions(+), 35 deletions(-)
---
diff --git a/pitivi/preset.py b/pitivi/preset.py
index 29d54bc..82b384a 100644
--- a/pitivi/preset.py
+++ b/pitivi/preset.py
@@ -131,8 +131,8 @@ class PresetManager(Loggable):
         else:
             return preset
 
-    def addPreset(self, name, values):
-        """Add a new preset.
+    def createPreset(self, name, values):
+        """Create a new preset.
 
         @param name: The name of the new preset.
         @type name: str
@@ -141,6 +141,22 @@ class PresetManager(Loggable):
         """
         if self.hasPreset(name):
             raise DuplicatePresetNameException(name)
+        self._addPreset(name, values)
+
+    def _addPreset(self, name, values):
+        """Add a new preset.
+
+        @param name: The name of the new preset.
+        @type name: str
+        @param values: The values of the new preset.
+        @type values: dict
+        """
+        if name in self.presets:
+            del self.presets[name]
+            for i, row in enumerate(self.ordered):
+                if row[0] == name:
+                    del self.ordered[i]
+                    break
         self.presets[name] = values
         # Note: This generates a "row-inserted" signal in the model.
         self.ordered.append((name, values))
@@ -346,7 +362,7 @@ class VideoPresetManager(PresetManager):
         par_denom = parser["par-denom"]
         par = Gst.Fraction(par_num, par_denom)
 
-        self.addPreset(name, {
+        self._addPreset(name, {
             "width": width,
             "height": height,
             "frame-rate": framerate,
@@ -390,7 +406,7 @@ class AudioPresetManager(PresetManager):
         channels = parser["channels"]
         sample_rate = parser["sample-rate"]
 
-        self.addPreset(name, {
+        self._addPreset(name, {
             "channels": channels,
             "sample-rate": sample_rate,
             "filepath": filepath,
@@ -448,7 +464,7 @@ class RenderPresetManager(PresetManager):
         channels = parser["channels"]
         sample_rate = parser["sample-rate"]
 
-        self.addPreset(name, {
+        self._addPreset(name, {
             "container": container,
             "acodec": acodec,
             "vcodec": vcodec,
diff --git a/pitivi/project.py b/pitivi/project.py
index 17801ad..ca80fcc 100644
--- a/pitivi/project.py
+++ b/pitivi/project.py
@@ -1717,21 +1717,23 @@ class ProjectSettingsDialog():
 
     def _addAudioPresetCb(self, unused_action, unused_param):
         preset_name = self._getUniquePresetName(self.audio_presets)
-        self.audio_presets.addPreset(preset_name, {
+        preset = {
             "channels": get_combo_value(self.channels_combo),
             "sample-rate": get_combo_value(self.sample_rate_combo),
-        })
+        }
+        self.audio_presets.createPreset(preset_name, preset)
         self.audio_presets_combo.set_active_id(preset_name)
         self._updateAudioPresetMenu()
 
     def _addVideoPresetCb(self, unused_action, unused_param):
         preset_name = self._getUniquePresetName(self.video_presets)
-        self.video_presets.addPreset(preset_name, {
+        preset = {
             "width": int(self.width_spinbutton.get_value()),
             "height": int(self.height_spinbutton.get_value()),
             "frame-rate": self.frame_rate_fraction_widget.getWidgetValue(),
             "par": self.par_fraction_widget.getWidgetValue(),
-        })
+        }
+        self.video_presets.createPreset(preset_name, preset)
         self.video_presets_combo.set_active_id(preset_name)
         self._updateVideoPresetMenu()
 
diff --git a/pitivi/render.py b/pitivi/render.py
index ecc808d..b824130 100644
--- a/pitivi/render.py
+++ b/pitivi/render.py
@@ -611,16 +611,19 @@ class RenderDialog(Loggable):
 
     def _addRenderPresetButtonClickedCb(self, unused_button):
         preset_name = self._getUniquePresetName(self.render_presets)
-        self.render_presets.addPreset(preset_name, {
+        framerate = Gst.Fraction(int(get_combo_value(self.frame_rate_combo).num),
+                                 int(get_combo_value(self.frame_rate_combo).denom))
+        preset = {
             "channels": int(get_combo_value(self.channels_combo)),
             "sample-rate": int(get_combo_value(self.sample_rate_combo)),
             "acodec": get_combo_value(self.audio_encoder_combo).get_name(),
             "vcodec": get_combo_value(self.video_encoder_combo).get_name(),
             "container": get_combo_value(self.muxercombobox).get_name(),
-            "frame-rate": Gst.Fraction(int(get_combo_value(self.frame_rate_combo).num),
-                                       int(get_combo_value(self.frame_rate_combo).denom)),
+            "frame-rate": framerate,
             "height": 0,
-            "width": 0})
+            "width": 0,
+        }
+        self.render_presets.createPreset(preset_name, preset)
 
         self.render_presets.restorePreset(preset_name)
         self._updateRenderPresetButtons()
diff --git a/tests/test_preset.py b/tests/test_preset.py
index 727b69b..1ae1ab7 100644
--- a/tests/test_preset.py
+++ b/tests/test_preset.py
@@ -92,23 +92,23 @@ class TestPresetBasics(TestCase):
         self.assertEqual("defaulT_", self.sectionToPreset('defaulT__'))
 
     def testAddPreset(self):
-        self.manager.addPreset('preseT onE', {'name1': '1A'})
+        self.manager.createPreset('preseT onE', {'name1': '1A'})
         self.assertRaises(DuplicatePresetNameException,
-                          self.manager.addPreset, 'Preset One', {'name1': '2A'})
+                          self.manager.createPreset, 'Preset One', {'name1': '2A'})
 
     def testAddDuplicatePreset(self):
-        self.manager.addPreset('x', {})
+        self.manager.createPreset('x', {})
         self.assertRaises(
-            DuplicatePresetNameException, self.manager.addPreset, 'x', {})
+            DuplicatePresetNameException, self.manager.createPreset, 'x', {})
 
     def testAddPresetWithNonAsciiName(self):
         unicode_name = "ソリッド・スネーク"
-        self.manager.addPreset(unicode_name, {})
+        self.manager.createPreset(unicode_name, {})
         self.assertTrue(unicode_name in self.manager.getPresetNames())
 
     def testRenamePreset(self):
-        self.manager.addPreset('preseT onE', {'name1': '1A'})
-        self.manager.addPreset('Preset Two', {'name1': '2A'})
+        self.manager.createPreset('preseT onE', {'name1': '1A'})
+        self.manager.createPreset('Preset Two', {'name1': '2A'})
 
         # Renaming 'preseT onE' to 'Preset One'.
         self.manager.renamePreset('0', 'Preset One')
@@ -141,15 +141,15 @@ class TestAudioPresetsIO(TestCase):
         return other_manager
 
     def testSaveAndLoad(self):
-        self.manager.addPreset("Vegeta",
-                               {"channels": 6000,
-                                "sample-rate": 44100})
+        self.manager.createPreset("Vegeta",
+                                  {"channels": 6000,
+                                   "sample-rate": 44100})
         self.manager.saveAll()
         self.assertEqual(1, countUserPresets(self.manager))
 
-        self.manager.addPreset("Nappa",
-                               {"channels": 4000,
-                                "sample-rate": 44100})
+        self.manager.createPreset("Nappa",
+                                  {"channels": 4000,
+                                   "sample-rate": 44100})
         self.manager.saveAll()
         self.assertEqual(2, countUserPresets(self.manager))
 
@@ -161,9 +161,9 @@ class TestAudioPresetsIO(TestCase):
 
     def testNonAsciiFilenamesSaveAndLoad(self):
         non_ascii_preset_name = "Solid Snake (ソリッド・スネーク) \\#!\"'$%?&*"
-        self.manager.addPreset(non_ascii_preset_name,
-                               {"channels": 2,
-                                "sample-rate": 44100})
+        self.manager.createPreset(non_ascii_preset_name,
+                                  {"channels": 2,
+                                   "sample-rate": 44100})
         snake = self.manager.presets[non_ascii_preset_name]
         self.assertEqual(2, len(snake))
         self.manager.saveAll()
@@ -178,9 +178,9 @@ class TestAudioPresetsIO(TestCase):
     def testInvalidFilenamesSaveAndLoad(self):
         # This would be an invalid file name as is.
         preset_name = " / % "
-        self.manager.addPreset(preset_name,
-                               {"channels": 2,
-                                "sample-rate": 44100})
+        self.manager.createPreset(preset_name,
+                                  {"channels": 2,
+                                   "sample-rate": 44100})
         values = self.manager.presets[preset_name]
         self.assertEqual(2, len(values))
         self.manager.saveAll()
diff --git a/tests/test_projectsettings.py b/tests/test_projectsettings.py
index 6ae6a6c..8a25cd4 100644
--- a/tests/test_projectsettings.py
+++ b/tests/test_projectsettings.py
@@ -33,14 +33,14 @@ class TestProjectSettingsDialog(TestCase):
         name = ProjectSettingsDialog._getUniquePresetName(preset_manager)
         self.assertEqual('New preset', name)
 
-        preset_manager.addPreset(name, {})
+        preset_manager.createPreset(name, {})
         new_preset1 = ProjectSettingsDialog._getUniquePresetName(
             preset_manager)
         self.assertEqual('New preset 1', new_preset1)
 
         # Intentionally add 'New preset 2' before 'New preset 1'.
-        preset_manager.addPreset('New preset 2', {})
-        preset_manager.addPreset('New preset 1', {})
+        preset_manager.createPreset('New preset 2', {})
+        preset_manager.createPreset('New preset 1', {})
         new_preset3 = ProjectSettingsDialog._getUniquePresetName(
             preset_manager)
         self.assertEqual('New preset 3', new_preset3)


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