buttons: Give the ImageToggle active and inactive tooltip texts
This is used to set the tooltip text to fixed strings based on the active status of the button. I also update the tooltip text on the Favorite button in the Now Playing widget at the same time. Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
afb0ba5d68
commit
a13e481754
|
@ -96,14 +96,23 @@ class ImageToggle(Button):
|
||||||
"""Inspired by a ToggleButton, but changes image based on state."""
|
"""Inspired by a ToggleButton, but changes image based on state."""
|
||||||
|
|
||||||
active_icon_name = GObject.Property(type=str)
|
active_icon_name = GObject.Property(type=str)
|
||||||
|
active_tooltip_text = GObject.Property(type=str)
|
||||||
|
|
||||||
inactive_icon_name = GObject.Property(type=str)
|
inactive_icon_name = GObject.Property(type=str)
|
||||||
|
inactive_tooltip_text = GObject.Property(type=str)
|
||||||
|
|
||||||
def __init__(self, active_icon_name: str, inactive_icon_name: str,
|
def __init__(self, active_icon_name: str, inactive_icon_name: str,
|
||||||
active: bool = False, **kwargs) -> None:
|
active_tooltip_text: str | None = None,
|
||||||
|
inactive_tooltip_text: str | None = None,
|
||||||
|
*, active: bool = False, **kwargs) -> None:
|
||||||
"""Initialize an ImageToggle button."""
|
"""Initialize an ImageToggle button."""
|
||||||
super().__init__(active_icon_name=active_icon_name,
|
super().__init__(active_icon_name=active_icon_name,
|
||||||
inactive_icon_name=inactive_icon_name,
|
inactive_icon_name=inactive_icon_name,
|
||||||
icon_name=inactive_icon_name, active=active, **kwargs)
|
icon_name=inactive_icon_name,
|
||||||
|
active_tooltip_text=active_tooltip_text,
|
||||||
|
inactive_tooltip_text=inactive_tooltip_text,
|
||||||
|
tooltip_text=inactive_tooltip_text,
|
||||||
|
active=active, **kwargs)
|
||||||
|
|
||||||
def do_clicked(self) -> None:
|
def do_clicked(self) -> None:
|
||||||
"""Handle a click event."""
|
"""Handle a click event."""
|
||||||
|
@ -117,8 +126,12 @@ class ImageToggle(Button):
|
||||||
@active.setter
|
@active.setter
|
||||||
def active(self, newval: bool) -> None:
|
def active(self, newval: bool) -> None:
|
||||||
if newval != self.active:
|
if newval != self.active:
|
||||||
icon = self.active_icon_name if newval else self.inactive_icon_name
|
if newval:
|
||||||
self.icon_name = icon
|
self.icon_name = self.active_icon_name
|
||||||
|
self.props.tooltip_text = self.active_tooltip_text
|
||||||
|
else:
|
||||||
|
self.icon_name = self.inactive_icon_name
|
||||||
|
self.props.tooltip_text = self.inactive_tooltip_text
|
||||||
self.emit("toggled")
|
self.emit("toggled")
|
||||||
|
|
||||||
@GObject.Signal
|
@GObject.Signal
|
||||||
|
|
|
@ -41,8 +41,8 @@ class Card(Gtk.Box):
|
||||||
self._bottom_box = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 0)
|
self._bottom_box = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 0)
|
||||||
self._favorite = buttons.ImageToggle("heart-filled",
|
self._favorite = buttons.ImageToggle("heart-filled",
|
||||||
"heart-outline-thick-symbolic",
|
"heart-outline-thick-symbolic",
|
||||||
tooltip_text="add to "
|
"remove from 'Favorite Tracks'",
|
||||||
"'Favorite Tracks'",
|
"add to 'Favorite Tracks'",
|
||||||
icon_size=Gtk.IconSize.LARGE,
|
icon_size=Gtk.IconSize.LARGE,
|
||||||
has_frame=False, sensitive=False,
|
has_frame=False, sensitive=False,
|
||||||
valign=Gtk.Align.CENTER)
|
valign=Gtk.Align.CENTER)
|
||||||
|
|
|
@ -89,9 +89,11 @@ class TestNowPlaying(unittest.TestCase):
|
||||||
self.card._favorite)
|
self.card._favorite)
|
||||||
|
|
||||||
self.assertEqual(self.card._favorite.active_icon_name, "heart-filled")
|
self.assertEqual(self.card._favorite.active_icon_name, "heart-filled")
|
||||||
|
self.assertEqual(self.card._favorite.active_tooltip_text,
|
||||||
|
"remove from 'Favorite Tracks'")
|
||||||
self.assertEqual(self.card._favorite.inactive_icon_name,
|
self.assertEqual(self.card._favorite.inactive_icon_name,
|
||||||
"heart-outline-thick-symbolic")
|
"heart-outline-thick-symbolic")
|
||||||
self.assertEqual(self.card._favorite.get_tooltip_text(),
|
self.assertEqual(self.card._favorite.inactive_tooltip_text,
|
||||||
"add to 'Favorite Tracks'")
|
"add to 'Favorite Tracks'")
|
||||||
self.assertEqual(self.card._favorite.icon_size, Gtk.IconSize.LARGE)
|
self.assertEqual(self.card._favorite.icon_size, Gtk.IconSize.LARGE)
|
||||||
self.assertEqual(self.card._favorite.get_valign(), Gtk.Align.CENTER)
|
self.assertEqual(self.card._favorite.get_valign(), Gtk.Align.CENTER)
|
||||||
|
|
|
@ -190,6 +190,24 @@ class TestImageToggle(unittest.TestCase):
|
||||||
active=True)
|
active=True)
|
||||||
self.assertTrue(button2.active)
|
self.assertTrue(button2.active)
|
||||||
|
|
||||||
|
def test_tooltip_text(self):
|
||||||
|
"""Test the active and inactive tooltip text."""
|
||||||
|
self.assertEqual(self.button.active_tooltip_text, None)
|
||||||
|
self.assertEqual(self.button.inactive_tooltip_text, None)
|
||||||
|
|
||||||
|
button2 = emmental.buttons.ImageToggle("active", "inactive",
|
||||||
|
"active tooltip text",
|
||||||
|
"inactive tooltip text")
|
||||||
|
self.assertEqual(button2.active_tooltip_text, "active tooltip text")
|
||||||
|
self.assertEqual(button2.inactive_tooltip_text,
|
||||||
|
"inactive tooltip text")
|
||||||
|
self.assertEqual(button2.get_tooltip_text(), "inactive tooltip text")
|
||||||
|
|
||||||
|
button2.active = True
|
||||||
|
self.assertEqual(button2.get_tooltip_text(), "active tooltip text")
|
||||||
|
button2.active = False
|
||||||
|
self.assertEqual(button2.get_tooltip_text(), "inactive tooltip text")
|
||||||
|
|
||||||
def test_toggle(self):
|
def test_toggle(self):
|
||||||
"""Test the toggle signal."""
|
"""Test the toggle signal."""
|
||||||
toggled = unittest.mock.Mock()
|
toggled = unittest.mock.Mock()
|
||||||
|
|
Loading…
Reference in New Issue