temp: show the popover if name is pressed for 1 second (longpress)

This commit is contained in:
alfrix 2022-08-26 08:58:03 -03:00 committed by Alfredo Monclus
parent 4cb17c18a9
commit 2902e95068

View File

@ -3,7 +3,7 @@ import logging
import contextlib
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GLib, Pango
from gi.repository import Gtk, GLib
from ks_includes.screen_panel import ScreenPanel
from ks_includes.widgets.graph import HeaterGraph
@ -20,6 +20,8 @@ class TemperaturePanel(ScreenPanel):
def __init__(self, screen, title, back=True):
super().__init__(screen, title, back)
self.popover_timeout = None
self.left_panel = None
self.popover_device = None
self.h = 1
self.tempdeltas = ["1", "5", "10", "25"]
@ -348,7 +350,8 @@ class TemperaturePanel(ScreenPanel):
self.labels['da'].add_object(device, "temperatures", rgb, False, True)
if can_target:
self.labels['da'].add_object(device, "targets", rgb, True, False)
name.connect('clicked', self.select_heater, device)
name.connect('button-press-event', self.name_pressed, device)
name.connect('button-release-event', self.name_released, device)
else:
name.connect("clicked", self.toggle_visibility, device)
self.labels['da'].set_showing(device, visible)
@ -378,6 +381,16 @@ class TemperaturePanel(ScreenPanel):
self.labels['devices'].show_all()
return True
def name_pressed(self, widget, event, device):
self.popover_timeout = GLib.timeout_add_seconds(1, self.popover_popup, widget, device)
def name_released(self, widget, event, device):
if self.popover_timeout is not None:
GLib.source_remove(self.popover_timeout)
self.popover_timeout = None
if not self.popover_device:
self.select_heater(None, device)
def toggle_visibility(self, widget, device=None):
if device is None:
device = self.popover_device
@ -451,6 +464,7 @@ class TemperaturePanel(ScreenPanel):
self.labels['popover_vbox'] = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
popover.add(self.labels['popover_vbox'])
popover.set_position(Gtk.PositionType.BOTTOM)
popover.connect('closed', self.popover_closed)
self.labels['popover'] = popover
for d in self._printer.get_temp_store_devices():
@ -473,7 +487,10 @@ class TemperaturePanel(ScreenPanel):
self.grid.attach(self.create_right_panel(), 1, 0, 1, 1)
self.grid.show_all()
def on_popover_clicked(self, widget, device):
def popover_closed(self, widget):
self.popover_device = None
def popover_popup(self, widget, device):
self.popover_device = device
po = self.labels['popover']
po.set_relative_to(widget)