]> git.0d.be Git - jack_mixer.git/blobdiff - gui.py
Optionally ask for confirmation before quitting (#54)
[jack_mixer.git] / gui.py
diff --git a/gui.py b/gui.py
index 8b1ff06447245c16f1f58da4ed22165b1d9bac02..fd06fc7e71b19a5bee0aa029616771619dd055db 100644 (file)
--- a/gui.py
+++ b/gui.py
@@ -61,15 +61,19 @@ class Factory(GObject.GObject, SerializedObject):
                         "jack_mixer invocations")
 
     def set_default_preferences(self):
+        self.confirm_quit = False
         self.default_meter_scale = self.meter_scales[0]
         self.default_slider_scale = self.slider_scales[0]
+        self.midi_behavior_mode = 0
+        self.use_custom_widgets = False
         self.vumeter_color = '#ccb300'
         self.vumeter_color_scheme = 'default'
-        self.use_custom_widgets = False
-        self.midi_behavior_mode = 0
 
     def read_preferences(self):
         self.config.read(self.path)
+        self.confirm_quit = self.config.getboolean('Preferences', 'confirm_quit',
+                                                   fallback=self.confirm_quit)
+
         scale_id = self.config['Preferences']['default_meter_scale']
         self.default_meter_scale = lookup_scale(self.meter_scales, scale_id)
         if not self.default_meter_scale:
@@ -80,41 +84,46 @@ class Factory(GObject.GObject, SerializedObject):
         if not self.default_slider_scale:
             self.default_slider_scale = slider_scales[0]
 
-        self.vumeter_color_scheme = self.config['Preferences']['vumeter_color_scheme']
-        if not self.vumeter_color_scheme:
-            self.vumeter_color_scheme = 'default'
-
-        self.vumeter_color = self.config['Preferences']['vumeter_color']
-        if not self.vumeter_color:
-            self.vumeter_color = '#ccb300'
-
-        self.use_custom_widgets = self.config["Preferences"]["use_custom_widgets"] == 'True'
-
-        mode = 0
         try:
-            mode = int(self.config["Preferences"]["midi_behavior_mode"])
-        except:
+            self.midi_behavior_mode = self.config.getint('Preferences', 'midi_behavior_mode',
+                                                         fallback=self.midi_behavior_mode)
+        except (TypeError, ValueError):
+            # use default value
             pass
-        self.midi_behavior_mode = mode
+
+        self.use_custom_widgets = self.config.getboolean('Preferences', 'use_custom_widgets',
+                                                         fallback=self.use_custom_widgets)
+        self.vumeter_color = self.config.get('Preferences', 'vumeter_color',
+                                             fallback=self.vumeter_color)
+        self.vumeter_color_scheme = self.config.get('Preferences', 'vumeter_color_scheme',
+                                                    fallback=self.vumeter_color_scheme)
+
 
     def write_preferences(self):
         self.config['Preferences'] = {}
+        self.config['Preferences']['confirm_quit'] = str(self.confirm_quit)
         self.config['Preferences']['default_meter_scale'] = self.default_meter_scale.scale_id
         self.config['Preferences']['default_slider_scale'] = self.default_slider_scale.scale_id
-        self.config['Preferences']['vumeter_color_scheme'] = self.vumeter_color_scheme
-        self.config['Preferences']['vumeter_color'] = self.vumeter_color
-        self.config['Preferences']['use_custom_widgets'] = str(self.use_custom_widgets)
         self.config['Preferences']['midi_behavior_mode'] = str(self.midi_behavior_mode)
+        self.config['Preferences']['use_custom_widgets'] = str(self.use_custom_widgets)
+        self.config['Preferences']['vumeter_color'] = self.vumeter_color
+        self.config['Preferences']['vumeter_color_scheme'] = self.vumeter_color_scheme
         with open(self.path, 'w') as configfile:
             self.config.write(configfile)
             configfile.close()
 
+    def set_confirm_quit(self, confirm_quit):
+        self.confirm_quit = confirm_quit
+        if xdg:
+            self.write_preferences()
+        self.emit('confirm-quit-changed', self.confirm_quit)
+
     def set_default_meter_scale(self, scale):
         if scale:
             self.default_meter_scale = scale
             if xdg:
                 self.write_preferences()
-            self.emit("default-meter-scale-changed", self.default_meter_scale)
+            self.emit('default-meter-scale-changed', self.default_meter_scale)
         else:
             log.warning('Ignoring default_meter_scale setting, because "%s" scale is not known.',
                         scale)
@@ -124,11 +133,21 @@ class Factory(GObject.GObject, SerializedObject):
             self.default_slider_scale = scale
             if xdg:
                 self.write_preferences()
-            self.emit("default-slider-scale-changed", self.default_slider_scale)
+            self.emit('default-slider-scale-changed', self.default_slider_scale)
         else:
             log.warning('Ignoring default_slider_scale setting, because "%s" scale is not known.',
                         scale)
 
+    def set_midi_behavior_mode(self, mode):
+        self.midi_behavior_mode = int(mode)
+        self.emit_midi_behavior_mode()
+
+    def set_use_custom_widgets(self, use_custom):
+        self.use_custom_widgets = use_custom
+        if xdg:
+            self.write_preferences()
+        self.emit('use-custom-widgets-changed', self.use_custom_widgets)
+
     def set_vumeter_color(self, color):
         self.vumeter_color = color
         if xdg:
@@ -141,18 +160,8 @@ class Factory(GObject.GObject, SerializedObject):
             self.write_preferences()
         self.emit('vumeter-color-scheme-changed', self.vumeter_color_scheme)
 
-    def set_use_custom_widgets(self, use_custom):
-        self.use_custom_widgets = use_custom
-        if xdg:
-            self.write_preferences()
-        self.emit('use-custom-widgets-changed', self.use_custom_widgets)
-
-    def set_midi_behavior_mode(self, mode):
-        self.midi_behavior_mode = int(mode)
-        self.emit_midi_behavior_mode()
-
-    def emit_midi_behavior_mode(self):
-        self.emit("midi-behavior-mode-changed", self.midi_behavior_mode)
+    def get_confirm_quit(self):
+        return self.confirm_quit
 
     def get_default_meter_scale(self):
         return self.default_meter_scale
@@ -160,73 +169,79 @@ class Factory(GObject.GObject, SerializedObject):
     def get_default_slider_scale(self):
         return self.default_slider_scale
 
+    def get_midi_behavior_mode(self):
+        return self.midi_behavior_mode
+
+    def get_use_custom_widgets(self):
+        return self.use_custom_widgets
+
     def get_vumeter_color(self):
         return self.vumeter_color
 
     def get_vumeter_color_scheme(self):
         return self.vumeter_color_scheme
 
-    def get_use_custom_widgets(self):
-        return self.use_custom_widgets
-
-    def get_midi_behavior_mode(self):
-        return self.midi_behavior_mode
+    def emit_midi_behavior_mode(self):
+        self.emit('midi-behavior-mode-changed', self.midi_behavior_mode)
 
     @classmethod
     def serialization_name(cls):
         return 'gui_factory'
 
     def serialize(self, object_backend):
-        object_backend.add_property("default_meter_scale",
-                self.get_default_meter_scale().scale_id)
-        object_backend.add_property("default_slider_scale",
-                self.get_default_slider_scale().scale_id)
-        object_backend.add_property("vumeter_color_scheme",
-                self.get_vumeter_color_scheme())
-        object_backend.add_property("vumeter_color",
-                self.get_vumeter_color())
-        object_backend.add_property("use_custom_widgets",
-                str(self.get_use_custom_widgets()))
-        object_backend.add_property("midi_behavior_mode",
-                str(self.get_midi_behavior_mode()))
+        object_backend.add_property('confirm-quit', str(self.get_confirm_quit()))
+        object_backend.add_property('default_meter_scale',
+                                    self.get_default_meter_scale().scale_id)
+        object_backend.add_property('default_slider_scale',
+                                    self.get_default_slider_scale().scale_id)
+        object_backend.add_property('midi_behavior_mode', str(self.get_midi_behavior_mode()))
+        object_backend.add_property('use_custom_widgets', str(self.get_use_custom_widgets()))
+        object_backend.add_property('vumeter_color', self.get_vumeter_color())
+        object_backend.add_property('vumeter_color_scheme', self.get_vumeter_color_scheme())
 
     def unserialize_property(self, name, value):
-        if name == "default_meter_scale":
+        if name == 'confirm_quit':
+            self.set_confirm_quit(value == 'True')
+            return True
+        elif name == 'default_meter_scale':
             self.set_default_meter_scale(lookup_scale(self.meter_scales, value))
             return True
-        if name == "default_slider_scale":
+        elif name == 'default_slider_scale':
             self.set_default_slider_scale(lookup_scale(self.slider_scales, value))
             return True
-        if name == "vumeter_color_scheme":
-            self.set_vumeter_color_scheme(value)
-            return True
-        if name == "vumeter_color":
-            self.set_vumeter_color(value)
+        elif name == 'midi_behavior_mode':
+            self.set_midi_behavior_mode(int(value))
             return True
-        if name == "use_custom_widgets":
+        elif name == 'use_custom_widgets':
             self.set_use_custom_widgets(value == 'True')
             return True
-        if name == "midi_behavior_mode":
-            self.set_midi_behavior_mode(int(value))
+        elif name == 'vumeter_color':
+            self.set_vumeter_color(value)
+            return True
+        elif name == 'vumeter_color_scheme':
+            self.set_vumeter_color_scheme(value)
             return True
         return False
 
 
-GObject.signal_new("default-meter-scale-changed", Factory,
-                GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
-                None, [GObject.TYPE_PYOBJECT])
-GObject.signal_new("default-slider-scale-changed", Factory,
-                GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
-                None, [GObject.TYPE_PYOBJECT])
+GObject.signal_new('confirm-quit-changed', Factory,
+                   GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
+                   None, [bool])
+GObject.signal_new('default-meter-scale-changed', Factory,
+                   GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
+                   None, [GObject.TYPE_PYOBJECT])
+GObject.signal_new('default-slider-scale-changed', Factory,
+                   GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
+                   None, [GObject.TYPE_PYOBJECT])
+GObject.signal_new('midi-behavior-mode-changed', Factory,
+                   GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
+                   None, [int])
+GObject.signal_new('use-custom-widgets-changed', Factory,
+                   GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
+                   None, [bool])
 GObject.signal_new('vumeter-color-changed', Factory,
-                GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
-                None, [str])
+                   GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
+                   None, [str])
 GObject.signal_new('vumeter-color-scheme-changed', Factory,
-                GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
-                None, [str])
-GObject.signal_new('use-custom-widgets-changed', Factory,
-                GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
-                None, [bool])
-GObject.signal_new('midi-behavior-mode-changed', Factory,
-                GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
-                None, [int])
+                   GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
+                   None, [str])