rind: Show a popover when configuring automatic pausing

This will eventually display the remaining time before the pause takes
effect, but for now just show the widget.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2019-04-12 17:14:00 -04:00
parent 25c55fdac4
commit 40a353681c
3 changed files with 73 additions and 6 deletions

View File

@ -842,6 +842,19 @@ audio-volume-medium-symbolic</property>
</object>
</child>
</object>
<object class="GtkPopover" id="pause_popover">
<property name="can_focus">False</property>
<property name="relative_to">pause_entry</property>
<property name="position">bottom</property>
<property name="modal">False</property>
<child>
<object class="GtkLabel" id="pause_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">label</property>
</object>
</child>
</object>
<object class="GtkPopover" id="playlist_regex_popover">
<property name="can_focus">False</property>
<property name="relative_to">playlist_search</property>

View File

@ -17,6 +17,8 @@ PauseButton = gtk.Builder.get_object("pause_button")
PauseDown = gtk.Builder.get_object("pause_down")
PauseEntry = gtk.Builder.get_object("pause_entry")
PauseIcon = Gtk.EntryIconPosition.PRIMARY
PauseLabel = gtk.Builder.get_object("pause_label")
PausePopup = gtk.Builder.get_object("pause_popover")
PauseUp = gtk.Builder.get_object("pause_up")
PlayButton = gtk.Builder.get_object("play_button")
Position = gtk.Builder.get_object("position")
@ -32,6 +34,7 @@ class EmmentalAudio:
self.bus = self.playbin.get_bus()
self.have_next = False
self.pause_count = -1
self.pause_pop = 0
self.bus.add_signal_watch()
@ -156,15 +159,32 @@ class EmmentalAudio:
self.pause_count = -1
self.pause_changed(self.playbin.get_state(Gst.Format.TIME)[1])
def pause_dec(self, *args):
def pause_dec(self, button=None):
should_pause = self.pause_count == 0
self.pause_count = max(-1, self.pause_count - 1)
self.pause_changed(self.playbin.get_state(Gst.Format.TIME)[1])
if button != None:
self.pause_popup()
return should_pause
def pause_inc(self, *args):
def pause_inc(self, button=None):
self.pause_count = min(99, self.pause_count + 1)
self.pause_changed(self.playbin.get_state(Gst.Format.TIME)[1])
if button != None:
self.pause_popup()
def pause_popup(self):
if self.pause_pop == 0:
PausePopup.popup()
GLib.timeout_add_seconds(1, self.pause_popdown)
self.pause_pop = 5
def pause_popdown(self):
self.pause_pop = max(0, self.pause_pop - 1)
if self.pause_pop > 0:
return GLib.SOURCE_CONTINUE
PausePopup.popdown()
return GLib.SOURCE_REMOVE
def pause_time(self):
tracks = curds.PlaylistManager.peek(self.pause_count)

View File

@ -40,7 +40,7 @@ class TestGst(unittest.TestCase):
self.stream = False
self.state = None
if eos == True or next == True:
self.audio.seek(value=90)
self.audio.seek(value=85)
while eos and self.eos == False:
gtk.main_loop()
while next and self.stream == False:
@ -68,6 +68,8 @@ class TestGst(unittest.TestCase):
self.assertIsInstance(gst.PauseButton, Gtk.Button)
self.assertIsInstance(gst.PauseDown, Gtk.Button)
self.assertIsInstance(gst.PauseEntry, Gtk.Entry)
self.assertIsInstance(gst.PauseLabel, Gtk.Label)
self.assertIsInstance(gst.PausePopup, Gtk.Popover)
self.assertIsInstance(gst.PauseUp, Gtk.Button)
self.assertIsInstance(gst.PlayButton, Gtk.Button)
self.assertIsInstance(gst.Position, Gtk.Label)
@ -84,6 +86,7 @@ class TestGst(unittest.TestCase):
self.assertEqual(gst.Artist.get_text(), "The Cheesy Music Player")
self.assertEqual(self.audio.pause_count, -1)
self.assertEqual(self.audio.pause_pop, 0)
self.assertFalse(gst.PauseDown.is_sensitive())
self.assertTrue( gst.PauseUp.is_sensitive())
@ -202,10 +205,14 @@ class TestGst(unittest.TestCase):
self.assertEqual(curds.PlaylistManager.lookup("Collection").current, 3)
self.assertNotEqual(curds.PlaylistManager.track, track2)
def sort_key(self, track):
return track.tracknumber
def test_gst_automatic_pause_up(self):
plist = curds.PlaylistManager.lookup("Collection")
curds.PlaylistManager.lookup("Library").lookup(test_album, allocate=True)
curds.playlist.library.join()
plist.list.sort(key=self.sort_key)
gst.PauseUp.clicked()
self.assertEqual(self.audio.pause_count, 0)
@ -214,11 +221,19 @@ class TestGst(unittest.TestCase):
self.assertEqual(gst.PauseEntry.get_text(), "This Track")
self.assertEqual(gst.PauseEntry.get_icon_name(gst.PauseIcon), "media-playback-pause")
self.assertEqual(self.audio.pause_time(), "About 0 seconds")
self.assertEqual(self.audio.pause_pop, 5)
self.assertTrue( gst.PausePopup.is_visible())
gtk.main_loop(delay=1.25)
gtk.main_loop()
self.assertEqual(self.audio.pause_pop, 4)
self.assertTrue( gst.PausePopup.is_visible())
gst.PauseUp.clicked()
self.assertEqual(self.audio.pause_count, 1)
self.assertEqual(gst.PauseEntry.get_text(), "Next Track")
self.assertEqual(self.audio.pause_time(), f"About 10 seconds")
self.assertEqual(self.audio.pause_time(), f"About 0 seconds")
self.assertTrue(gst.PausePopup.is_visible())
self.audio.pause_count = 11
self.assertEqual(self.audio.pause_time(), "About 1 minute")
@ -232,14 +247,22 @@ class TestGst(unittest.TestCase):
self.assertTrue( gst.PauseDown.is_sensitive())
self.assertFalse(gst.PauseUp.is_sensitive())
self.assertEqual(self.audio.pause_time(), "About 9 minutes")
self.assertTrue(gst.PausePopup.is_visible())
gst.PauseUp.clicked()
self.assertEqual(self.audio.pause_count, 99)
self.assertTrue(gst.PausePopup.is_visible())
self.audio.pause_pop = 0
self.audio.pause_popdown()
gtk.main_loop(iteration_delay=0.1)
self.assertFalse(gst.PausePopup.is_visible())
def test_gst_automatic_pause_down(self):
plist = curds.PlaylistManager.lookup("Collection")
curds.PlaylistManager.lookup("Library").lookup(test_album, allocate=True)
curds.playlist.library.join()
plist.list.sort(key=self.sort_key)
self.audio.pause_count = 99
self.audio.pause_changed(self.audio.playbin.get_state(Gst.Format.TIME))
@ -251,15 +274,19 @@ class TestGst(unittest.TestCase):
self.assertTrue( gst.PauseDown.is_sensitive())
self.assertTrue( gst.PauseUp.is_sensitive())
self.assertEqual(self.audio.pause_time(), "About 9 minutes")
self.assertEqual(self.audio.pause_pop, 5)
self.assertTrue( gst.PausePopup.is_visible())
self.audio.pause_count = 1
self.audio.pause_changed(self.audio.playbin.get_state(Gst.Format.TIME))
self.assertEqual(self.audio.pause_time(), "About 10 seconds")
self.assertEqual(self.audio.pause_time(), "About 0 seconds")
gst.PauseDown.clicked()
self.assertEqual(self.audio.pause_count, 0)
self.assertEqual(gst.PauseEntry.get_text(), "This Track")
self.assertEqual(self.audio.pause_time(), "About 0 seconds")
self.assertEqual(self.audio.pause_pop, 5)
self.assertTrue( gst.PausePopup.is_visible())
gst.PauseDown.clicked()
self.assertEqual(self.audio.pause_count, -1)
@ -267,9 +294,16 @@ class TestGst(unittest.TestCase):
self.assertFalse( gst.PauseDown.is_sensitive())
self.assertTrue( gst.PauseUp.is_sensitive())
self.assertEqual(self.audio.pause_time(), "About 0 seconds")
self.assertEqual(self.audio.pause_pop, 5)
self.assertTrue( gst.PausePopup.is_visible())
gst.PauseDown.clicked()
self.assertEqual(self.audio.pause_count, -1)
self.assertEqual(self.audio.pause_pop, 5)
self.assertTrue( gst.PausePopup.is_visible())
self.audio.pause_pop = 0
self.audio.pause_popdown()
def test_gst_automatic_pause_entry(self):
plist = curds.PlaylistManager.lookup("Collection")
@ -282,7 +316,7 @@ class TestGst(unittest.TestCase):
self.assertEqual(gst.PauseEntry.get_text(), "3 Tracks")
self.assertTrue( gst.PauseUp.is_sensitive())
self.assertTrue( gst.PauseDown.is_sensitive())
self.assertEqual(self.audio.pause_time(), "About 15 seconds")
self.assertEqual(self.audio.pause_time(), "About 5 seconds")
gst.PauseEntry.set_text("100")
gst.PauseEntry.activate()