[pitivi] layer: Add a toggle button to mute a layer
- From: Alexandru Băluț <alexbalut src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pitivi] layer: Add a toggle button to mute a layer
- Date: Sat, 18 Apr 2020 20:35:06 +0000 (UTC)
commit d5858c5256dedb024ac1350033fb3457f449b5e2
Author: Christopher G <christgx5 gmail com>
Date: Sat Apr 18 13:11:52 2020 -0500
layer: Add a toggle button to mute a layer
Fixes #1648
pitivi/timeline/layer.py | 25 ++++++++++++++++++++++++
tests/test_timeline_layer.py | 45 ++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 70 insertions(+)
---
diff --git a/pitivi/timeline/layer.py b/pitivi/timeline/layer.py
index 8e5a52f1..d8e2658e 100644
--- a/pitivi/timeline/layer.py
+++ b/pitivi/timeline/layer.py
@@ -58,6 +58,9 @@ class LayerControls(Gtk.EventBox, Loggable):
self.app = app
self.__icon = None
+ tracks = self.ges_timeline.get_tracks()
+ self.timeline_audio_tracks = [track for track in tracks if track.props.track_type ==
GES.TrackType.AUDIO]
+
hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
self.add(hbox)
@@ -83,6 +86,13 @@ class LayerControls(Gtk.EventBox, Loggable):
self.__update_name()
name_row.pack_start(self.name_entry, True, True, 0)
+ self.mute_toggle_button = Gtk.ToggleButton.new()
+ self.mute_toggle_button.props.valign = Gtk.Align.CENTER
+ self.mute_toggle_button.props.relief = Gtk.ReliefStyle.NONE
+ self.mute_toggle_button.connect("toggled", self.__mute_button_toggled_cb)
+ self.__update_mute_button()
+ name_row.pack_start(self.mute_toggle_button, False, False, 0)
+
self.menubutton = Gtk.MenuButton.new()
self.menubutton.props.valign = Gtk.Align.CENTER
self.menubutton.props.relief = Gtk.ReliefStyle.NONE
@@ -98,6 +108,7 @@ class LayerControls(Gtk.EventBox, Loggable):
vbox.pack_start(space, False, False, 0)
self.ges_layer.connect("notify::priority", self.__layer_priority_changed_cb)
+ self.ges_layer.connect("active-changed", self.__layer_active_changed_cb)
self.ges_timeline.connect("layer-added", self.__timeline_layer_added_cb)
self.ges_timeline.connect("layer-removed", self.__timeline_layer_removed_cb)
self.__update_actions()
@@ -213,6 +224,20 @@ class LayerControls(Gtk.EventBox, Loggable):
self.ges_timeline.ui.move_layer(self.ges_layer, index)
self.app.project_manager.current_project.pipeline.commit_timeline()
+ def __mute_button_toggled_cb(self, button):
+ self.ges_layer.set_active_for_tracks(not button.get_active(), self.timeline_audio_tracks)
+ self.app.project_manager.current_project.pipeline.commit_timeline()
+
+ def __update_mute_button(self):
+ muted = all([not self.ges_layer.get_active_for_track(t) for t in self.timeline_audio_tracks])
+ self.mute_toggle_button.set_active(muted)
+ icon_name = "audio-volume-muted-symbolic" if muted else "audio-volume-high-symbolic"
+ image = Gtk.Image.new_from_icon_name(icon_name, Gtk.IconSize.BUTTON)
+ self.mute_toggle_button.set_image(image)
+
+ def __layer_active_changed_cb(self, ges_layer, active, tracks):
+ self.__update_mute_button()
+
def update(self, media_types):
self.props.height_request = self.ges_layer.ui.props.height_request
diff --git a/tests/test_timeline_layer.py b/tests/test_timeline_layer.py
index ba3935e4..fa0bcf24 100644
--- a/tests/test_timeline_layer.py
+++ b/tests/test_timeline_layer.py
@@ -46,6 +46,51 @@ class TestLayerControl(common.TestCase):
layer.set_name("Layer 0x")
self.assertEqual(layer.get_name(), "Layer 0x")
+ def test_mute_and_unmute_layer(self):
+ timeline_container = common.create_timeline_container()
+ timeline = timeline_container.timeline
+ ges_layer = timeline.ges_timeline.append_layer()
+ layer_controls = ges_layer.control_ui
+ mute_toggle_button = layer_controls.mute_toggle_button
+
+ for audio_track in layer_controls.timeline_audio_tracks:
+ self.assertTrue(ges_layer.get_active_for_track(audio_track))
+ self.assertFalse(mute_toggle_button.get_active())
+
+ ges_layer.set_active_for_tracks(False, [audio_track])
+ common.create_main_loop().run(until_empty=True)
+ self.assertFalse(ges_layer.get_active_for_track(audio_track))
+ self.assertTrue(mute_toggle_button.get_active())
+
+ ges_layer.set_active_for_tracks(True, [audio_track])
+ common.create_main_loop().run(until_empty=True)
+ self.assertTrue(ges_layer.get_active_for_track(audio_track))
+ self.assertFalse(mute_toggle_button.get_active())
+
+ def test_mute_and_unmute_layer_button(self):
+ timeline_container = common.create_timeline_container()
+ timeline = timeline_container.timeline
+ ges_layer = timeline.ges_timeline.append_layer()
+ layer_controls = ges_layer.control_ui
+ mute_toggle_button = layer_controls.mute_toggle_button
+
+ for audio_track in layer_controls.timeline_audio_tracks:
+ self.assertTrue(ges_layer.get_active_for_track(audio_track))
+ common.create_main_loop().run(until_empty=True)
+ self.assertFalse(mute_toggle_button.get_active())
+
+ mute_toggle_button.clicked()
+ for audio_track in layer_controls.timeline_audio_tracks:
+ self.assertFalse(ges_layer.get_active_for_track(audio_track))
+ common.create_main_loop().run(until_empty=True)
+ self.assertTrue(mute_toggle_button.get_active())
+
+ mute_toggle_button.clicked()
+ for audio_track in layer_controls.timeline_audio_tracks:
+ self.assertTrue(ges_layer.get_active_for_track(audio_track))
+ common.create_main_loop().run(until_empty=True)
+ self.assertFalse(mute_toggle_button.get_active())
+
class TestLayer(common.TestCase):
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]