107 lines
4.2 KiB
Python
107 lines
4.2 KiB
Python
import gi
|
|
import logging
|
|
|
|
gi.require_version("Gtk", "3.0")
|
|
from gi.repository import Gtk, Gdk, GLib
|
|
|
|
from KlippyGtk import KlippyGtk
|
|
from panels.screen_panel import ScreenPanel
|
|
|
|
|
|
class PreheatPanel(ScreenPanel):
|
|
active_heaters = []
|
|
|
|
def initialize(self, panel_name):
|
|
self.preheat_options = self._screen._config['preheat_options']
|
|
|
|
grid = KlippyGtk.HomogeneousGrid()
|
|
|
|
eq_grid = KlippyGtk.HomogeneousGrid()
|
|
i = 0
|
|
for x in self._printer.get_tools():
|
|
if i > 3:
|
|
break
|
|
elif i == 0:
|
|
primary_tool = x
|
|
self.labels[x] = KlippyGtk.ToggleButtonImage("extruder-"+str(i+1), KlippyGtk.formatTemperatureString(0, 0))
|
|
self.labels[x].connect('clicked', self.select_heater, x)
|
|
eq_grid.attach(self.labels[x], i%2, i/2, 1, 1)
|
|
i += 1
|
|
|
|
self.labels["heater_bed"] = KlippyGtk.ToggleButtonImage("bed", KlippyGtk.formatTemperatureString(0, 0))
|
|
self.labels["heater_bed"].connect('clicked', self.select_heater, "heater_bed")
|
|
width = 2 if i > 1 else 1
|
|
eq_grid.attach(self.labels["heater_bed"], 0, i/2+1, width, 1)
|
|
|
|
self.labels["control_grid"] = KlippyGtk.HomogeneousGrid()
|
|
|
|
i = 0
|
|
for option in self.preheat_options:
|
|
self.labels[option] = KlippyGtk.Button(option, "color%d" % ((i%4)+1))
|
|
self.labels[option].connect("clicked", self.set_temperature, option)
|
|
self.labels['control_grid'].attach(
|
|
self.labels[option],
|
|
i%2, int(i/2), 1, 1)
|
|
i += 1
|
|
|
|
|
|
cooldown = KlippyGtk.ButtonImage('cool-down', 'Cooldown')
|
|
cooldown.connect("clicked", self.set_temperature, "cooldown")
|
|
|
|
b = KlippyGtk.ButtonImage('back', 'Back')
|
|
b.connect("clicked", self._screen._menu_go_back)
|
|
|
|
row = int(i/2) if i%2 == 0 else int(i/2)+1
|
|
self.labels["control_grid"].attach(cooldown, 0, row, 1, 1)
|
|
self.labels["control_grid"].attach(b, 1, row, 1, 1)
|
|
|
|
|
|
grid.attach(eq_grid, 0, 0, 1, 1)
|
|
grid.attach(self.labels["control_grid"], 1, 0, 1, 1)
|
|
|
|
self.panel = grid
|
|
|
|
self._screen.add_subscription(panel_name)
|
|
|
|
def select_heater(self, widget, heater):
|
|
if heater in self.active_heaters:
|
|
self.active_heaters.pop(self.active_heaters.index(heater))
|
|
self.labels[heater].get_style_context().remove_class('button_active')
|
|
return
|
|
|
|
self.active_heaters.append(heater)
|
|
self.labels[heater].get_style_context().add_class('button_active')
|
|
|
|
def set_temperature(self, widget, setting):
|
|
if setting == "cooldown":
|
|
for heater in self.active_heaters:
|
|
print ("Setting %s to %d" % (heater, 0))
|
|
if heater.startswith('heater_bed'):
|
|
self._screen._ws.klippy.set_bed_temp(0)
|
|
self._printer.set_dev_stat(heater,"target", 0)
|
|
else:
|
|
self._screen._ws.klippy.set_tool_temp(self._printer.get_tool_number(heater), 0)
|
|
self._printer.set_dev_stat(heater,"target", 0)
|
|
return
|
|
|
|
for heater in self.active_heaters:
|
|
if heater.startswith('heater_bed'):
|
|
print ("Setting %s to %d" % (heater, self.preheat_options[setting]['bed']))
|
|
self._screen._ws.klippy.set_bed_temp(self.preheat_options[setting]["bed"])
|
|
self._printer.set_dev_stat(heater,"target", int(self.preheat_options[setting]["bed"]))
|
|
else:
|
|
print ("Setting %s to %d" % (heater, self.preheat_options[setting]['tool']))
|
|
self._screen._ws.klippy.set_tool_temp(heater, self.preheat_options[setting]["tool"])
|
|
self._printer.set_dev_stat(heater,"target", int(self.preheat_options[setting]["tool"]))
|
|
|
|
def process_update(self, data):
|
|
self.update_temp("heater_bed",
|
|
self._printer.get_dev_stat("heater_bed","temperature"),
|
|
self._printer.get_dev_stat("heater_bed","target")
|
|
)
|
|
for x in self._printer.get_tools():
|
|
self.update_temp(x,
|
|
self._printer.get_dev_stat(x,"temperature"),
|
|
self._printer.get_dev_stat(x,"target")
|
|
)
|