Fix CR line end problem
This commit is contained in:
parent
aeea57bd2f
commit
557dd86364
408
KlippyGtk.py
408
KlippyGtk.py
@ -1,204 +1,204 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import gi
|
||||
|
||||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, Gdk, GdkPixbuf, GLib
|
||||
import os
|
||||
klipperscreendir = os.getcwd()
|
||||
|
||||
class KlippyGtk:
|
||||
labels = {}
|
||||
|
||||
@staticmethod
|
||||
def Label(label, style):
|
||||
l = Gtk.Label(label)
|
||||
if style != False:
|
||||
l.get_style_context().add_class(style)
|
||||
return l
|
||||
|
||||
@staticmethod
|
||||
def ImageLabel(image_name, text, size=20, style=False):
|
||||
box1 = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=15)
|
||||
image = Gtk.Image()
|
||||
#TODO: update file reference
|
||||
image.set_from_file(klipperscreendir + "/styles/z-bolt/images/" + str(image_name) + ".svg")
|
||||
|
||||
pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(klipperscreendir + "/styles/z-bolt/images/" + str(image_name) + ".svg", 20, 20, True)
|
||||
image.set_from_pixbuf(pixbuf)
|
||||
|
||||
label = Gtk.Label()
|
||||
label.set_text(text)
|
||||
box1.add(image) #, size, size)
|
||||
box1.add(label)
|
||||
|
||||
if style != False:
|
||||
ctx = box1.get_style_context()
|
||||
ctx.add_class(style)
|
||||
|
||||
return {"l": label, "b": box1}
|
||||
|
||||
@staticmethod
|
||||
def Image(image_name, style=False, width=None, height=None):
|
||||
pixbuf = GdkPixbuf.Pixbuf.new_from_file(klipperscreendir + "/styles/z-bolt/images/" + str(image_name) + ".svg")
|
||||
|
||||
if height != None and width != None:
|
||||
pixbuf = pixbuf.scale_simple(width, height, GdkPixbuf.InterpType.BILINEAR)
|
||||
|
||||
return Gtk.Image.new_from_pixbuf(pixbuf)
|
||||
|
||||
@staticmethod
|
||||
def ImageFromFile(filename, style=False, width=None, height=None):
|
||||
if height != -1 or width != -1:
|
||||
pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(filename, width, height, True)
|
||||
else:
|
||||
pixbuf = GdkPixbuf.Pixbuf.new_from_file(filename)
|
||||
|
||||
return Gtk.Image.new_from_pixbuf(pixbuf)
|
||||
|
||||
@staticmethod
|
||||
def PixbufFromFile(filename, style=False, width=None, height=None):
|
||||
if height != -1 or width != -1:
|
||||
pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(filename, width, height, True)
|
||||
else:
|
||||
pixbuf = GdkPixbuf.Pixbuf.new_from_file(filename)
|
||||
|
||||
return pixbuf
|
||||
|
||||
@staticmethod
|
||||
def ProgressBar(style=False):
|
||||
bar = Gtk.ProgressBar()
|
||||
|
||||
if style != False:
|
||||
ctx = bar.get_style_context()
|
||||
ctx.add_class(style)
|
||||
|
||||
return bar
|
||||
|
||||
@staticmethod
|
||||
def Button(label=None, style=None):
|
||||
b = Gtk.Button(label=label)
|
||||
b.set_hexpand(True)
|
||||
b.set_vexpand(True)
|
||||
b.set_can_focus(False)
|
||||
b.props.relief = Gtk.ReliefStyle.NONE
|
||||
|
||||
if style != None:
|
||||
b.get_style_context().add_class(style)
|
||||
|
||||
return b
|
||||
|
||||
@staticmethod
|
||||
def ButtonImage(image_name, label=None, style=None, height=None, width=None):
|
||||
pixbuf = GdkPixbuf.Pixbuf.new_from_file(klipperscreendir + "/styles/z-bolt/images/" + str(image_name) + ".svg")
|
||||
|
||||
if height != None and width != None:
|
||||
pixbuf = pixbuf.scale_simple(width, height, GdkPixbuf.InterpType.BILINEAR)
|
||||
|
||||
|
||||
img = Gtk.Image.new_from_pixbuf(pixbuf)
|
||||
|
||||
b = Gtk.Button(label=label)
|
||||
b.set_image(img)
|
||||
b.set_hexpand(True)
|
||||
b.set_vexpand(True)
|
||||
b.set_can_focus(False)
|
||||
b.set_image_position(Gtk.PositionType.TOP)
|
||||
b.set_always_show_image(True)
|
||||
b.props.relief = Gtk.ReliefStyle.NONE
|
||||
|
||||
if style != None:
|
||||
b.get_style_context().add_class(style)
|
||||
|
||||
return b
|
||||
|
||||
@staticmethod
|
||||
def Dialog(screen, buttons, content, callback=None, *args):
|
||||
dialog = Gtk.Dialog()
|
||||
dialog.set_default_size(screen.width - 15, screen.height - 15)
|
||||
dialog.set_resizable(False)
|
||||
dialog.set_transient_for(screen)
|
||||
dialog.set_modal(True)
|
||||
|
||||
for button in buttons:
|
||||
dialog.add_button(button_text=button['name'], response_id=button['response'])
|
||||
|
||||
dialog.connect("response", callback, *args)
|
||||
dialog.get_style_context().add_class("dialog")
|
||||
|
||||
grid = Gtk.Grid()
|
||||
grid.set_size_request(screen.width - 60, -1)
|
||||
grid.set_vexpand(True)
|
||||
grid.set_halign(Gtk.Align.CENTER)
|
||||
grid.set_valign(Gtk.Align.CENTER)
|
||||
grid.add(content)
|
||||
|
||||
content_area = dialog.get_content_area()
|
||||
content_area.set_margin_start(15)
|
||||
content_area.set_margin_end(15)
|
||||
content_area.set_margin_top(15)
|
||||
content_area.set_margin_bottom(15)
|
||||
content_area.add(grid)
|
||||
|
||||
dialog.show_all()
|
||||
|
||||
return dialog, grid
|
||||
|
||||
|
||||
@staticmethod
|
||||
def ToggleButtonImage(image_name, label, style=False):
|
||||
img = Gtk.Image.new_from_file(klipperscreendir + "/styles/z-bolt/images/" + str(image_name) + ".svg")
|
||||
|
||||
b = Gtk.ToggleButton(label=label)
|
||||
#b.props.relief = Gtk.RELIEF_NONE
|
||||
b.set_image(img)
|
||||
b.set_hexpand(True)
|
||||
b.set_vexpand(True)
|
||||
b.set_can_focus(False)
|
||||
b.set_image_position(Gtk.PositionType.TOP)
|
||||
b.set_always_show_image(True)
|
||||
b.props.relief = Gtk.ReliefStyle.NONE
|
||||
|
||||
if style != False:
|
||||
ctx = b.get_style_context()
|
||||
ctx.add_class(style)
|
||||
|
||||
return b
|
||||
|
||||
@staticmethod
|
||||
def HomogeneousGrid():
|
||||
g = Gtk.Grid()
|
||||
g.set_row_homogeneous(True)
|
||||
g.set_column_homogeneous(True)
|
||||
return g
|
||||
|
||||
@staticmethod
|
||||
def ToggleButton(text):
|
||||
b = Gtk.ToggleButton(text)
|
||||
b.props.relief = Gtk.ReliefStyle.NONE
|
||||
b.set_hexpand(True)
|
||||
b.set_vexpand(True)
|
||||
return b
|
||||
|
||||
@staticmethod
|
||||
def formatFileName(name):
|
||||
name = name.split('/')[-1] if "/" in name else name
|
||||
name = name.split('.gcod')[0] if ".gcode" in name else name
|
||||
if len(name) > 25:
|
||||
return name[0:25] + "\n" + name[25:50]
|
||||
return name
|
||||
|
||||
|
||||
@staticmethod
|
||||
def formatTimeString(seconds):
|
||||
time = int(seconds)
|
||||
text = ""
|
||||
if int(time/3600) !=0:
|
||||
text += str(int(time/3600))+"h "
|
||||
text += str(int(time/60)%60)+"m "+str(time%60)+"s"
|
||||
return text
|
||||
|
||||
@staticmethod
|
||||
def formatTemperatureString(temp, target):
|
||||
if (target > temp-2 and target < temp+2) or round(target,0) == 0:
|
||||
return str(round(temp,2)) + "°C" #°C →"
|
||||
return str(round(temp)) + " → " + str(round(target)) + "°C"
|
||||
# -*- coding: utf-8 -*-
|
||||
import gi
|
||||
|
||||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, Gdk, GdkPixbuf, GLib
|
||||
import os
|
||||
klipperscreendir = os.getcwd()
|
||||
|
||||
class KlippyGtk:
|
||||
labels = {}
|
||||
|
||||
@staticmethod
|
||||
def Label(label, style):
|
||||
l = Gtk.Label(label)
|
||||
if style != False:
|
||||
l.get_style_context().add_class(style)
|
||||
return l
|
||||
|
||||
@staticmethod
|
||||
def ImageLabel(image_name, text, size=20, style=False):
|
||||
box1 = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=15)
|
||||
image = Gtk.Image()
|
||||
#TODO: update file reference
|
||||
image.set_from_file(klipperscreendir + "/styles/z-bolt/images/" + str(image_name) + ".svg")
|
||||
|
||||
pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(klipperscreendir + "/styles/z-bolt/images/" + str(image_name) + ".svg", 20, 20, True)
|
||||
image.set_from_pixbuf(pixbuf)
|
||||
|
||||
label = Gtk.Label()
|
||||
label.set_text(text)
|
||||
box1.add(image)
|
||||
box1.add(label)
|
||||
|
||||
if style != False:
|
||||
ctx = box1.get_style_context()
|
||||
ctx.add_class(style)
|
||||
|
||||
return {"l": label, "b": box1}
|
||||
|
||||
@staticmethod
|
||||
def Image(image_name, style=False, width=None, height=None):
|
||||
pixbuf = GdkPixbuf.Pixbuf.new_from_file(klipperscreendir + "/styles/z-bolt/images/" + str(image_name) + ".svg")
|
||||
|
||||
if height != None and width != None:
|
||||
pixbuf = pixbuf.scale_simple(width, height, GdkPixbuf.InterpType.BILINEAR)
|
||||
|
||||
return Gtk.Image.new_from_pixbuf(pixbuf)
|
||||
|
||||
@staticmethod
|
||||
def ImageFromFile(filename, style=False, width=None, height=None):
|
||||
if height != -1 or width != -1:
|
||||
pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(filename, width, height, True)
|
||||
else:
|
||||
pixbuf = GdkPixbuf.Pixbuf.new_from_file(filename)
|
||||
|
||||
return Gtk.Image.new_from_pixbuf(pixbuf)
|
||||
|
||||
@staticmethod
|
||||
def PixbufFromFile(filename, style=False, width=None, height=None):
|
||||
if height != -1 or width != -1:
|
||||
pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(filename, width, height, True)
|
||||
else:
|
||||
pixbuf = GdkPixbuf.Pixbuf.new_from_file(filename)
|
||||
|
||||
return pixbuf
|
||||
|
||||
@staticmethod
|
||||
def ProgressBar(style=False):
|
||||
bar = Gtk.ProgressBar()
|
||||
|
||||
if style != False:
|
||||
ctx = bar.get_style_context()
|
||||
ctx.add_class(style)
|
||||
|
||||
return bar
|
||||
|
||||
@staticmethod
|
||||
def Button(label=None, style=None):
|
||||
b = Gtk.Button(label=label)
|
||||
b.set_hexpand(True)
|
||||
b.set_vexpand(True)
|
||||
b.set_can_focus(False)
|
||||
b.props.relief = Gtk.ReliefStyle.NONE
|
||||
|
||||
if style != None:
|
||||
b.get_style_context().add_class(style)
|
||||
|
||||
return b
|
||||
|
||||
@staticmethod
|
||||
def ButtonImage(image_name, label=None, style=None, height=None, width=None):
|
||||
pixbuf = GdkPixbuf.Pixbuf.new_from_file(klipperscreendir + "/styles/z-bolt/images/" + str(image_name) + ".svg")
|
||||
|
||||
if height != None and width != None:
|
||||
pixbuf = pixbuf.scale_simple(width, height, GdkPixbuf.InterpType.BILINEAR)
|
||||
|
||||
|
||||
img = Gtk.Image.new_from_pixbuf(pixbuf)
|
||||
|
||||
b = Gtk.Button(label=label)
|
||||
b.set_image(img)
|
||||
b.set_hexpand(True)
|
||||
b.set_vexpand(True)
|
||||
b.set_can_focus(False)
|
||||
b.set_image_position(Gtk.PositionType.TOP)
|
||||
b.set_always_show_image(True)
|
||||
b.props.relief = Gtk.ReliefStyle.NONE
|
||||
|
||||
if style != None:
|
||||
b.get_style_context().add_class(style)
|
||||
|
||||
return b
|
||||
|
||||
@staticmethod
|
||||
def Dialog(screen, buttons, content, callback=None, *args):
|
||||
dialog = Gtk.Dialog()
|
||||
dialog.set_default_size(screen.width - 15, screen.height - 15)
|
||||
dialog.set_resizable(False)
|
||||
dialog.set_transient_for(screen)
|
||||
dialog.set_modal(True)
|
||||
|
||||
for button in buttons:
|
||||
dialog.add_button(button_text=button['name'], response_id=button['response'])
|
||||
|
||||
dialog.connect("response", callback, *args)
|
||||
dialog.get_style_context().add_class("dialog")
|
||||
|
||||
grid = Gtk.Grid()
|
||||
grid.set_size_request(screen.width - 60, -1)
|
||||
grid.set_vexpand(True)
|
||||
grid.set_halign(Gtk.Align.CENTER)
|
||||
grid.set_valign(Gtk.Align.CENTER)
|
||||
grid.add(content)
|
||||
|
||||
content_area = dialog.get_content_area()
|
||||
content_area.set_margin_start(15)
|
||||
content_area.set_margin_end(15)
|
||||
content_area.set_margin_top(15)
|
||||
content_area.set_margin_bottom(15)
|
||||
content_area.add(grid)
|
||||
|
||||
dialog.show_all()
|
||||
|
||||
return dialog, grid
|
||||
|
||||
|
||||
@staticmethod
|
||||
def ToggleButtonImage(image_name, label, style=False):
|
||||
img = Gtk.Image.new_from_file(klipperscreendir + "/styles/z-bolt/images/" + str(image_name) + ".svg")
|
||||
|
||||
b = Gtk.ToggleButton(label=label)
|
||||
#b.props.relief = Gtk.RELIEF_NONE
|
||||
b.set_image(img)
|
||||
b.set_hexpand(True)
|
||||
b.set_vexpand(True)
|
||||
b.set_can_focus(False)
|
||||
b.set_image_position(Gtk.PositionType.TOP)
|
||||
b.set_always_show_image(True)
|
||||
b.props.relief = Gtk.ReliefStyle.NONE
|
||||
|
||||
if style != False:
|
||||
ctx = b.get_style_context()
|
||||
ctx.add_class(style)
|
||||
|
||||
return b
|
||||
|
||||
@staticmethod
|
||||
def HomogeneousGrid():
|
||||
g = Gtk.Grid()
|
||||
g.set_row_homogeneous(True)
|
||||
g.set_column_homogeneous(True)
|
||||
return g
|
||||
|
||||
@staticmethod
|
||||
def ToggleButton(text):
|
||||
b = Gtk.ToggleButton(text)
|
||||
b.props.relief = Gtk.ReliefStyle.NONE
|
||||
b.set_hexpand(True)
|
||||
b.set_vexpand(True)
|
||||
return b
|
||||
|
||||
@staticmethod
|
||||
def formatFileName(name):
|
||||
name = name.split('/')[-1] if "/" in name else name
|
||||
name = name.split('.gcod')[0] if ".gcode" in name else name
|
||||
if len(name) > 25:
|
||||
return name[0:25] + "\n" + name[25:50]
|
||||
return name
|
||||
|
||||
|
||||
@staticmethod
|
||||
def formatTimeString(seconds):
|
||||
time = int(seconds)
|
||||
text = ""
|
||||
if int(time/3600) !=0:
|
||||
text += str(int(time/3600))+"h "
|
||||
text += str(int(time/60)%60)+"m "+str(time%60)+"s"
|
||||
return text
|
||||
|
||||
@staticmethod
|
||||
def formatTemperatureString(temp, target):
|
||||
if (target > temp-2 and target < temp+2) or round(target,0) == 0:
|
||||
return str(round(temp,2)) + "°C" #°C →"
|
||||
return str(round(temp)) + " → " + str(round(target)) + "°C"
|
||||
|
@ -1,14 +1,14 @@
|
||||
import gi
|
||||
|
||||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, Gdk, GLib
|
||||
|
||||
from KlippyGtk import KlippyGtk
|
||||
from KlippyGcodes import KlippyGcodes
|
||||
from panels.screen_panel import ScreenPanel
|
||||
|
||||
class ExamplePanel(ScreenPanel):
|
||||
def initialize(self, panel_name):
|
||||
_ = self.lang.gettext
|
||||
# Create gtk items here
|
||||
return
|
||||
import gi
|
||||
|
||||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, Gdk, GLib
|
||||
|
||||
from KlippyGtk import KlippyGtk
|
||||
from KlippyGcodes import KlippyGcodes
|
||||
from panels.screen_panel import ScreenPanel
|
||||
|
||||
class ExamplePanel(ScreenPanel):
|
||||
def initialize(self, panel_name):
|
||||
_ = self.lang.gettext
|
||||
# Create gtk items here
|
||||
return
|
||||
|
@ -1,204 +1,204 @@
|
||||
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
|
||||
|
||||
logger = logging.getLogger("KlipperScreen.JobStatusPanel")
|
||||
|
||||
class JobStatusPanel(ScreenPanel):
|
||||
is_paused = False
|
||||
filename = None
|
||||
|
||||
def initialize(self, panel_name):
|
||||
_ = self.lang.gettext
|
||||
grid = KlippyGtk.HomogeneousGrid()
|
||||
|
||||
self.labels['progress'] = KlippyGtk.ProgressBar("printing-progress-bar")
|
||||
#self.labels['progress'].set_vexpand(True)
|
||||
#self.labels['progress'].set_valign(Gtk.Align.CENTER)
|
||||
self.labels['progress'].set_show_text(False)
|
||||
#self.labels['progress'].set_margin_top(10)
|
||||
self.labels['progress'].set_margin_end(20)
|
||||
self.labels['progress_text'] = Gtk.Label()
|
||||
self.labels['progress_text'].get_style_context().add_class("printing-progress-text")
|
||||
overlay = Gtk.Overlay()
|
||||
overlay.add(self.labels['progress'])
|
||||
overlay.add_overlay(self.labels['progress_text'])
|
||||
|
||||
self.labels['file'] = KlippyGtk.ImageLabel("file","",20,"printing-status-label")
|
||||
self.labels['time_label'] = KlippyGtk.ImageLabel("speed-step",_("Time Elapsed"),20,"printing-status-label")
|
||||
self.labels['time'] = KlippyGtk.Label(_("Time Elapsed"),"printing-status-label")
|
||||
self.labels['time_left_label'] = KlippyGtk.ImageLabel("speed-step",_("Time Left"),20,"printing-status-label")
|
||||
self.labels['time_left'] = KlippyGtk.Label(_("Time Left"),"printing-status-label")
|
||||
timegrid = Gtk.Grid()
|
||||
timegrid.attach(self.labels['time_label']['b'], 0, 0, 1, 1)
|
||||
timegrid.attach(self.labels['time'], 0, 1, 1, 1)
|
||||
timegrid.attach(self.labels['time_left_label']['b'], 1, 0, 1, 1)
|
||||
timegrid.attach(self.labels['time_left'], 1, 1, 1, 1)
|
||||
info = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
||||
info.props.valign = Gtk.Align.CENTER
|
||||
info.set_hexpand(True)
|
||||
info.set_vexpand(True)
|
||||
#info.add(self.labels['file']['b'])
|
||||
#info.add(self.labels['time']['b'])
|
||||
#info.add(self.labels['time_left']['b'])
|
||||
|
||||
#grid.attach(info,2,0,2,1)
|
||||
|
||||
pbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
||||
pbox.pack_start(self.labels['file']['b'], False, True, 0)
|
||||
pbox.pack_end(timegrid, False, False, 0)
|
||||
#pbox.pack_end(self.labels['progress'], False, False, 0)
|
||||
pbox.pack_end(overlay, False, False, 0)
|
||||
|
||||
grid.attach(pbox, 1, 0, 3, 2)
|
||||
|
||||
self.labels['extruder'] = KlippyGtk.ButtonImage("extruder-1", KlippyGtk.formatTemperatureString(0, 0))
|
||||
self.labels['extruder'].set_sensitive(False)
|
||||
grid.attach(self.labels['extruder'], 0, 0, 1, 1)
|
||||
|
||||
self.labels['heater_bed'] = KlippyGtk.ButtonImage("bed", KlippyGtk.formatTemperatureString(0, 0))
|
||||
self.labels['heater_bed'].set_sensitive(False)
|
||||
grid.attach(self.labels['heater_bed'], 0, 1, 1, 1)
|
||||
|
||||
self.labels['resume'] = KlippyGtk.ButtonImage("resume",_("Resume"),"color1")
|
||||
self.labels['resume'].connect("clicked",self.resume)
|
||||
self.labels['pause'] = KlippyGtk.ButtonImage("pause",_("Pause"),"color1" )
|
||||
self.labels['pause'].connect("clicked",self.pause)
|
||||
|
||||
if self._printer.get_stat('pause_resume','is_paused') == True:
|
||||
self.is_paused = True
|
||||
grid.attach(self.labels['resume'], 0, 2, 1, 1)
|
||||
else:
|
||||
grid.attach(self.labels['pause'], 0, 2, 1, 1)
|
||||
|
||||
self.labels['cancel'] = KlippyGtk.ButtonImage("stop",_("Cancel"),"color2")
|
||||
self.labels['cancel'].connect("clicked", self.cancel)
|
||||
grid.attach(self.labels['cancel'], 1, 2, 1, 1)
|
||||
self.labels['estop'] = KlippyGtk.ButtonImage("decrease",_("Emergency Stop"),"color4")
|
||||
self.labels['estop'].connect("clicked", self.emergency_stop)
|
||||
grid.attach(self.labels['estop'], 2, 2, 1, 1)
|
||||
self.labels['control'] = KlippyGtk.ButtonImage("control",_("Control"),"color3")
|
||||
self.labels['control'].connect("clicked", self._screen._go_to_submenu, "")
|
||||
grid.attach(self.labels['control'], 3, 2, 1, 1)
|
||||
|
||||
self.panel = grid
|
||||
|
||||
self._screen.add_subscription(panel_name)
|
||||
|
||||
def resume(self, widget):
|
||||
self.disable_button("pause","cancel")
|
||||
self._screen._ws.klippy.print_resume(self._response_callback, "enable_button", "pause", "cancel")
|
||||
self._screen.show_all()
|
||||
|
||||
def pause(self, widget):
|
||||
self.disable_button("resume","cancel")
|
||||
self._screen._ws.klippy.print_pause(self._response_callback, "enable_button", "resume", "cancel")
|
||||
self._screen.show_all()
|
||||
|
||||
def cancel(self, widget):
|
||||
_ = self.lang.gettext
|
||||
|
||||
dialog = KlippyGtk.ConfirmDialog(
|
||||
self._screen,
|
||||
_("Are you sure you wish to cancel this print?"),
|
||||
[
|
||||
{
|
||||
"name": _("Cancel Print"),
|
||||
"response": Gtk.ResponseType.OK
|
||||
},
|
||||
{
|
||||
"name": _("Go Back"),
|
||||
"response": Gtk.ResponseType.CANCEL
|
||||
}
|
||||
],
|
||||
self.cancel_confirm
|
||||
)
|
||||
self.disable_button("pause","cancel")
|
||||
|
||||
def cancel_confirm(self, widget, response_id):
|
||||
widget.destroy()
|
||||
|
||||
if response_id == Gtk.ResponseType.CANCEL:
|
||||
self.enable_button("pause","cancel")
|
||||
return
|
||||
|
||||
self._screen._ws.klippy.print_cancel(self._response_callback, "enable_button", "pause", "cancel")
|
||||
|
||||
def _response_callback(self, response, method, params, func, *args):
|
||||
if func == "enable_button":
|
||||
self.enable_button(*args)
|
||||
|
||||
def enable_button(self, *args):
|
||||
for arg in args:
|
||||
self.labels[arg].set_sensitive(True)
|
||||
|
||||
def disable_button(self, *args):
|
||||
for arg in args:
|
||||
self.labels[arg].set_sensitive(False)
|
||||
|
||||
|
||||
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")
|
||||
)
|
||||
|
||||
vsd = self._printer.get_stat("print_stats")
|
||||
if "filename" in vsd and self.filename != vsd['filename']:
|
||||
if vsd['filename'] != "":
|
||||
self.filename = KlippyGtk.formatFileName(vsd['filename'])
|
||||
self.update_image_text("file", self.filename)
|
||||
else:
|
||||
file = "Unknown"
|
||||
self.update_image_text("file", "Unknown")
|
||||
|
||||
|
||||
progress = 0 if self._printer.get_stat('virtual_sdcard','progress') == 0 else (vsd['print_duration'] /
|
||||
self._printer.get_stat('virtual_sdcard','progress') - vsd['print_duration'])
|
||||
|
||||
self.update_text("time", str(KlippyGtk.formatTimeString(vsd['print_duration'])))
|
||||
self.update_text("time_left", str(KlippyGtk.formatTimeString(
|
||||
progress
|
||||
)))
|
||||
|
||||
self.update_progress(self._printer.get_stat('virtual_sdcard','progress'))
|
||||
|
||||
if "pause_resume" in data:
|
||||
if self.is_paused == True and data['pause_resume']['is_paused'] == False:
|
||||
self.is_paused = False
|
||||
self.panel.attach(self.labels['pause'], 0, 2, 1, 1)
|
||||
self.panel.remove(self.labels['resume'])
|
||||
self.panel.show_all()
|
||||
if self.is_paused == False and data['pause_resume']['is_paused'] == True:
|
||||
self.is_paused = True
|
||||
self.panel.attach(self.labels['resume'], 0, 2, 1, 1)
|
||||
self.panel.remove(self.labels['pause'])
|
||||
self.panel.show_all()
|
||||
|
||||
|
||||
|
||||
def update_image_text(self, label, text):
|
||||
if label in self.labels and 'l' in self.labels[label]:
|
||||
self.labels[label]['l'].set_text(text)
|
||||
|
||||
def update_text(self, label, text):
|
||||
if label in self.labels:
|
||||
self.labels[label].set_text(text)
|
||||
|
||||
def update_progress (self, progress):
|
||||
self.labels['progress'].set_fraction(progress)
|
||||
self.labels['progress_text'].set_text("%s%%" % (str(int(progress*100))))
|
||||
|
||||
def update_temp(self, dev, temp, target):
|
||||
if dev in self.labels:
|
||||
self.labels[dev].set_label(KlippyGtk.formatTemperatureString(temp, target))
|
||||
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
|
||||
|
||||
logger = logging.getLogger("KlipperScreen.JobStatusPanel")
|
||||
|
||||
class JobStatusPanel(ScreenPanel):
|
||||
is_paused = False
|
||||
filename = None
|
||||
|
||||
def initialize(self, panel_name):
|
||||
_ = self.lang.gettext
|
||||
grid = KlippyGtk.HomogeneousGrid()
|
||||
|
||||
self.labels['progress'] = KlippyGtk.ProgressBar("printing-progress-bar")
|
||||
#self.labels['progress'].set_vexpand(True)
|
||||
#self.labels['progress'].set_valign(Gtk.Align.CENTER)
|
||||
self.labels['progress'].set_show_text(False)
|
||||
#self.labels['progress'].set_margin_top(10)
|
||||
self.labels['progress'].set_margin_end(20)
|
||||
self.labels['progress_text'] = Gtk.Label()
|
||||
self.labels['progress_text'].get_style_context().add_class("printing-progress-text")
|
||||
overlay = Gtk.Overlay()
|
||||
overlay.add(self.labels['progress'])
|
||||
overlay.add_overlay(self.labels['progress_text'])
|
||||
|
||||
self.labels['file'] = KlippyGtk.ImageLabel("file","",20,"printing-status-label")
|
||||
self.labels['time_label'] = KlippyGtk.ImageLabel("speed-step",_("Time Elapsed"),20,"printing-status-label")
|
||||
self.labels['time'] = KlippyGtk.Label(_("Time Elapsed"),"printing-status-label")
|
||||
self.labels['time_left_label'] = KlippyGtk.ImageLabel("speed-step",_("Time Left"),20,"printing-status-label")
|
||||
self.labels['time_left'] = KlippyGtk.Label(_("Time Left"),"printing-status-label")
|
||||
timegrid = Gtk.Grid()
|
||||
timegrid.attach(self.labels['time_label']['b'], 0, 0, 1, 1)
|
||||
timegrid.attach(self.labels['time'], 0, 1, 1, 1)
|
||||
timegrid.attach(self.labels['time_left_label']['b'], 1, 0, 1, 1)
|
||||
timegrid.attach(self.labels['time_left'], 1, 1, 1, 1)
|
||||
info = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
||||
info.props.valign = Gtk.Align.CENTER
|
||||
info.set_hexpand(True)
|
||||
info.set_vexpand(True)
|
||||
#info.add(self.labels['file']['b'])
|
||||
#info.add(self.labels['time']['b'])
|
||||
#info.add(self.labels['time_left']['b'])
|
||||
|
||||
#grid.attach(info,2,0,2,1)
|
||||
|
||||
pbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
||||
pbox.pack_start(self.labels['file']['b'], False, True, 0)
|
||||
pbox.pack_end(timegrid, False, False, 0)
|
||||
#pbox.pack_end(self.labels['progress'], False, False, 0)
|
||||
pbox.pack_end(overlay, False, False, 0)
|
||||
|
||||
grid.attach(pbox, 1, 0, 3, 2)
|
||||
|
||||
self.labels['extruder'] = KlippyGtk.ButtonImage("extruder-1", KlippyGtk.formatTemperatureString(0, 0))
|
||||
self.labels['extruder'].set_sensitive(False)
|
||||
grid.attach(self.labels['extruder'], 0, 0, 1, 1)
|
||||
|
||||
self.labels['heater_bed'] = KlippyGtk.ButtonImage("bed", KlippyGtk.formatTemperatureString(0, 0))
|
||||
self.labels['heater_bed'].set_sensitive(False)
|
||||
grid.attach(self.labels['heater_bed'], 0, 1, 1, 1)
|
||||
|
||||
self.labels['resume'] = KlippyGtk.ButtonImage("resume",_("Resume"),"color1")
|
||||
self.labels['resume'].connect("clicked",self.resume)
|
||||
self.labels['pause'] = KlippyGtk.ButtonImage("pause",_("Pause"),"color1" )
|
||||
self.labels['pause'].connect("clicked",self.pause)
|
||||
|
||||
if self._printer.get_stat('pause_resume','is_paused') == True:
|
||||
self.is_paused = True
|
||||
grid.attach(self.labels['resume'], 0, 2, 1, 1)
|
||||
else:
|
||||
grid.attach(self.labels['pause'], 0, 2, 1, 1)
|
||||
|
||||
self.labels['cancel'] = KlippyGtk.ButtonImage("stop",_("Cancel"),"color2")
|
||||
self.labels['cancel'].connect("clicked", self.cancel)
|
||||
grid.attach(self.labels['cancel'], 1, 2, 1, 1)
|
||||
self.labels['estop'] = KlippyGtk.ButtonImage("decrease",_("Emergency Stop"),"color4")
|
||||
self.labels['estop'].connect("clicked", self.emergency_stop)
|
||||
grid.attach(self.labels['estop'], 2, 2, 1, 1)
|
||||
self.labels['control'] = KlippyGtk.ButtonImage("control",_("Control"),"color3")
|
||||
self.labels['control'].connect("clicked", self._screen._go_to_submenu, "")
|
||||
grid.attach(self.labels['control'], 3, 2, 1, 1)
|
||||
|
||||
self.panel = grid
|
||||
|
||||
self._screen.add_subscription(panel_name)
|
||||
|
||||
def resume(self, widget):
|
||||
self.disable_button("pause","cancel")
|
||||
self._screen._ws.klippy.print_resume(self._response_callback, "enable_button", "pause", "cancel")
|
||||
self._screen.show_all()
|
||||
|
||||
def pause(self, widget):
|
||||
self.disable_button("resume","cancel")
|
||||
self._screen._ws.klippy.print_pause(self._response_callback, "enable_button", "resume", "cancel")
|
||||
self._screen.show_all()
|
||||
|
||||
def cancel(self, widget):
|
||||
_ = self.lang.gettext
|
||||
|
||||
dialog = KlippyGtk.ConfirmDialog(
|
||||
self._screen,
|
||||
_("Are you sure you wish to cancel this print?"),
|
||||
[
|
||||
{
|
||||
"name": _("Cancel Print"),
|
||||
"response": Gtk.ResponseType.OK
|
||||
},
|
||||
{
|
||||
"name": _("Go Back"),
|
||||
"response": Gtk.ResponseType.CANCEL
|
||||
}
|
||||
],
|
||||
self.cancel_confirm
|
||||
)
|
||||
self.disable_button("pause","cancel")
|
||||
|
||||
def cancel_confirm(self, widget, response_id):
|
||||
widget.destroy()
|
||||
|
||||
if response_id == Gtk.ResponseType.CANCEL:
|
||||
self.enable_button("pause","cancel")
|
||||
return
|
||||
|
||||
self._screen._ws.klippy.print_cancel(self._response_callback, "enable_button", "pause", "cancel")
|
||||
|
||||
def _response_callback(self, response, method, params, func, *args):
|
||||
if func == "enable_button":
|
||||
self.enable_button(*args)
|
||||
|
||||
def enable_button(self, *args):
|
||||
for arg in args:
|
||||
self.labels[arg].set_sensitive(True)
|
||||
|
||||
def disable_button(self, *args):
|
||||
for arg in args:
|
||||
self.labels[arg].set_sensitive(False)
|
||||
|
||||
|
||||
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")
|
||||
)
|
||||
|
||||
vsd = self._printer.get_stat("print_stats")
|
||||
if "filename" in vsd and self.filename != vsd['filename']:
|
||||
if vsd['filename'] != "":
|
||||
self.filename = KlippyGtk.formatFileName(vsd['filename'])
|
||||
self.update_image_text("file", self.filename)
|
||||
else:
|
||||
file = "Unknown"
|
||||
self.update_image_text("file", "Unknown")
|
||||
|
||||
|
||||
progress = 0 if self._printer.get_stat('virtual_sdcard','progress') == 0 else (vsd['print_duration'] /
|
||||
self._printer.get_stat('virtual_sdcard','progress') - vsd['print_duration'])
|
||||
|
||||
self.update_text("time", str(KlippyGtk.formatTimeString(vsd['print_duration'])))
|
||||
self.update_text("time_left", str(KlippyGtk.formatTimeString(
|
||||
progress
|
||||
)))
|
||||
|
||||
self.update_progress(self._printer.get_stat('virtual_sdcard','progress'))
|
||||
|
||||
if "pause_resume" in data:
|
||||
if self.is_paused == True and data['pause_resume']['is_paused'] == False:
|
||||
self.is_paused = False
|
||||
self.panel.attach(self.labels['pause'], 0, 2, 1, 1)
|
||||
self.panel.remove(self.labels['resume'])
|
||||
self.panel.show_all()
|
||||
if self.is_paused == False and data['pause_resume']['is_paused'] == True:
|
||||
self.is_paused = True
|
||||
self.panel.attach(self.labels['resume'], 0, 2, 1, 1)
|
||||
self.panel.remove(self.labels['pause'])
|
||||
self.panel.show_all()
|
||||
|
||||
|
||||
|
||||
def update_image_text(self, label, text):
|
||||
if label in self.labels and 'l' in self.labels[label]:
|
||||
self.labels[label]['l'].set_text(text)
|
||||
|
||||
def update_text(self, label, text):
|
||||
if label in self.labels:
|
||||
self.labels[label].set_text(text)
|
||||
|
||||
def update_progress (self, progress):
|
||||
self.labels['progress'].set_fraction(progress)
|
||||
self.labels['progress_text'].set_text("%s%%" % (str(int(progress*100))))
|
||||
|
||||
def update_temp(self, dev, temp, target):
|
||||
if dev in self.labels:
|
||||
self.labels[dev].set_label(KlippyGtk.formatTemperatureString(temp, target))
|
||||
|
@ -1,63 +1,63 @@
|
||||
import gi
|
||||
import logging
|
||||
|
||||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, Gdk, GLib
|
||||
|
||||
from KlippyGtk import KlippyGtk
|
||||
from panels.menu import MenuPanel
|
||||
|
||||
logger = logging.getLogger("KlipperScreen.MainMenu")
|
||||
|
||||
class MainPanel(MenuPanel):
|
||||
|
||||
def initialize(self, panel_name, items, extrudercount):
|
||||
print("### Making MainMenu")
|
||||
grid = KlippyGtk.HomogeneousGrid()
|
||||
|
||||
# Create Extruders and bed icons
|
||||
eq_grid = KlippyGtk.HomogeneousGrid()
|
||||
|
||||
|
||||
i = 0
|
||||
for x in self._printer.get_tools():
|
||||
if i > 3:
|
||||
break
|
||||
self.labels[x] = KlippyGtk.ButtonImage("extruder-"+str(i+1), KlippyGtk.formatTemperatureString(0, 0))
|
||||
eq_grid.attach(self.labels[x], i%2, i/2, 1, 1)
|
||||
i += 1
|
||||
|
||||
self.labels['heater_bed'] = KlippyGtk.ButtonImage("bed", KlippyGtk.formatTemperatureString(0, 0))
|
||||
|
||||
width = 2 if i > 1 else 1
|
||||
eq_grid.attach(self.labels['heater_bed'], 0, i/2+1, width, 1)
|
||||
|
||||
grid.attach(eq_grid, 0, 0, 1, 1)
|
||||
grid.attach(self.arrangeMenuItems(items, 2, True), 1, 0, 1, 1)
|
||||
self.grid = grid
|
||||
|
||||
self.target_temps = {
|
||||
"heater_bed": 0,
|
||||
"extruder": 0
|
||||
}
|
||||
|
||||
self._screen.add_subscription(panel_name)
|
||||
|
||||
def get(self):
|
||||
return self.grid
|
||||
|
||||
def update_temp(self, dev, temp, target):
|
||||
if dev in self.labels:
|
||||
self.labels[dev].set_label(KlippyGtk.formatTemperatureString(temp, target))
|
||||
|
||||
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")
|
||||
)
|
||||
return
|
||||
import gi
|
||||
import logging
|
||||
|
||||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, Gdk, GLib
|
||||
|
||||
from KlippyGtk import KlippyGtk
|
||||
from panels.menu import MenuPanel
|
||||
|
||||
logger = logging.getLogger("KlipperScreen.MainMenu")
|
||||
|
||||
class MainPanel(MenuPanel):
|
||||
|
||||
def initialize(self, panel_name, items, extrudercount):
|
||||
print("### Making MainMenu")
|
||||
grid = KlippyGtk.HomogeneousGrid()
|
||||
|
||||
# Create Extruders and bed icons
|
||||
eq_grid = KlippyGtk.HomogeneousGrid()
|
||||
|
||||
|
||||
i = 0
|
||||
for x in self._printer.get_tools():
|
||||
if i > 3:
|
||||
break
|
||||
self.labels[x] = KlippyGtk.ButtonImage("extruder-"+str(i+1), KlippyGtk.formatTemperatureString(0, 0))
|
||||
eq_grid.attach(self.labels[x], i%2, i/2, 1, 1)
|
||||
i += 1
|
||||
|
||||
self.labels['heater_bed'] = KlippyGtk.ButtonImage("bed", KlippyGtk.formatTemperatureString(0, 0))
|
||||
|
||||
width = 2 if i > 1 else 1
|
||||
eq_grid.attach(self.labels['heater_bed'], 0, i/2+1, width, 1)
|
||||
|
||||
grid.attach(eq_grid, 0, 0, 1, 1)
|
||||
grid.attach(self.arrangeMenuItems(items, 2, True), 1, 0, 1, 1)
|
||||
self.grid = grid
|
||||
|
||||
self.target_temps = {
|
||||
"heater_bed": 0,
|
||||
"extruder": 0
|
||||
}
|
||||
|
||||
self._screen.add_subscription(panel_name)
|
||||
|
||||
def get(self):
|
||||
return self.grid
|
||||
|
||||
def update_temp(self, dev, temp, target):
|
||||
if dev in self.labels:
|
||||
self.labels[dev].set_label(KlippyGtk.formatTemperatureString(temp, target))
|
||||
|
||||
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")
|
||||
)
|
||||
return
|
||||
|
122
panels/menu.py
122
panels/menu.py
@ -1,61 +1,61 @@
|
||||
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
|
||||
|
||||
logger = logging.getLogger("KlipperScreen.MenuPanel")
|
||||
|
||||
class MenuPanel(ScreenPanel):
|
||||
def initialize(self, panel_name, items):
|
||||
_ = self.lang.gettext
|
||||
|
||||
grid = self.arrangeMenuItems(items, 4)
|
||||
|
||||
b = KlippyGtk.ButtonImage('back', _('Back'))
|
||||
b.connect("clicked", self._screen._menu_go_back)
|
||||
grid.attach(b, 3, 1, 1, 1)
|
||||
|
||||
self.panel = grid
|
||||
|
||||
def arrangeMenuItems (self, items, columns, expandLast=False):
|
||||
grid = Gtk.Grid()
|
||||
grid.set_row_homogeneous(True)
|
||||
grid.set_column_homogeneous(True)
|
||||
|
||||
l = len(items)
|
||||
i = 0
|
||||
for i in range(l):
|
||||
col = i % columns
|
||||
row = int(i/columns)
|
||||
width = 1
|
||||
|
||||
if expandLast == True and i+1 == l and l%2 == 1:
|
||||
width = 2
|
||||
|
||||
key = list(items[i])[0]
|
||||
logger.debug("Key: %s" % key)
|
||||
item = items[i][key]
|
||||
b = KlippyGtk.ButtonImage(
|
||||
item['icon'], item['name'], "color"+str((i%4)+1)
|
||||
)
|
||||
logger.debug("Item: %s" % item)
|
||||
if item['panel'] != False:
|
||||
b.connect("clicked", self.menu_item_clicked, item['panel'], item)
|
||||
elif item['method'] != False:
|
||||
params = item['params'] if item['params'] != False else {}
|
||||
if item['confirm'] != False:
|
||||
b.connect("clicked", self._screen._confirm_send_action, item['confirm'], item['method'], params)
|
||||
else:
|
||||
b.connect("clicked", self._screen._send_action, item['method'], params)
|
||||
else:
|
||||
b.connect("clicked", self._screen._go_to_submenu, key)
|
||||
|
||||
grid.attach(b, col, row, width, 1)
|
||||
|
||||
i += 1
|
||||
|
||||
return grid
|
||||
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
|
||||
|
||||
logger = logging.getLogger("KlipperScreen.MenuPanel")
|
||||
|
||||
class MenuPanel(ScreenPanel):
|
||||
def initialize(self, panel_name, items):
|
||||
_ = self.lang.gettext
|
||||
|
||||
grid = self.arrangeMenuItems(items, 4)
|
||||
|
||||
b = KlippyGtk.ButtonImage('back', _('Back'))
|
||||
b.connect("clicked", self._screen._menu_go_back)
|
||||
grid.attach(b, 3, 1, 1, 1)
|
||||
|
||||
self.panel = grid
|
||||
|
||||
def arrangeMenuItems (self, items, columns, expandLast=False):
|
||||
grid = Gtk.Grid()
|
||||
grid.set_row_homogeneous(True)
|
||||
grid.set_column_homogeneous(True)
|
||||
|
||||
l = len(items)
|
||||
i = 0
|
||||
for i in range(l):
|
||||
col = i % columns
|
||||
row = int(i/columns)
|
||||
width = 1
|
||||
|
||||
if expandLast == True and i+1 == l and l%2 == 1:
|
||||
width = 2
|
||||
|
||||
key = list(items[i])[0]
|
||||
logger.debug("Key: %s" % key)
|
||||
item = items[i][key]
|
||||
b = KlippyGtk.ButtonImage(
|
||||
item['icon'], item['name'], "color"+str((i%4)+1)
|
||||
)
|
||||
logger.debug("Item: %s" % item)
|
||||
if item['panel'] != False:
|
||||
b.connect("clicked", self.menu_item_clicked, item['panel'], item)
|
||||
elif item['method'] != False:
|
||||
params = item['params'] if item['params'] != False else {}
|
||||
if item['confirm'] != False:
|
||||
b.connect("clicked", self._screen._confirm_send_action, item['confirm'], item['method'], params)
|
||||
else:
|
||||
b.connect("clicked", self._screen._send_action, item['method'], params)
|
||||
else:
|
||||
b.connect("clicked", self._screen._go_to_submenu, key)
|
||||
|
||||
grid.attach(b, col, row, width, 1)
|
||||
|
||||
i += 1
|
||||
|
||||
return grid
|
||||
|
264
panels/move.py
264
panels/move.py
@ -1,132 +1,132 @@
|
||||
import gi
|
||||
import logging
|
||||
|
||||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, Gdk, GLib
|
||||
|
||||
from KlippyGtk import KlippyGtk
|
||||
from KlippyGcodes import KlippyGcodes
|
||||
from panels.screen_panel import ScreenPanel
|
||||
|
||||
logger = logging.getLogger("KlipperScreen.MovePanel")
|
||||
|
||||
class MovePanel(ScreenPanel):
|
||||
distance = 1
|
||||
distances = ['.1','.5','1','5','10','25']
|
||||
|
||||
|
||||
def initialize(self, panel_name):
|
||||
_ = self.lang.gettext
|
||||
|
||||
grid = KlippyGtk.HomogeneousGrid()
|
||||
|
||||
self.labels['x+'] = KlippyGtk.ButtonImage("move-x+", _("X+"), "color1")
|
||||
self.labels['x+'].connect("clicked", self.move, "X", "+")
|
||||
self.labels['x-'] = KlippyGtk.ButtonImage("move-x-", _("X-"), "color1")
|
||||
self.labels['x-'].connect("clicked", self.move, "X", "-")
|
||||
|
||||
self.labels['y+'] = KlippyGtk.ButtonImage("move-y+", _("Y+"), "color2")
|
||||
self.labels['y+'].connect("clicked", self.move, "Y", "+")
|
||||
self.labels['y-'] = KlippyGtk.ButtonImage("move-y-", _("Y-"), "color2")
|
||||
self.labels['y-'].connect("clicked", self.move, "Y", "-")
|
||||
|
||||
self.labels['z+'] = KlippyGtk.ButtonImage("move-z-", _("Z+"), "color3")
|
||||
self.labels['z+'].connect("clicked", self.move, "Z", "+")
|
||||
self.labels['z-'] = KlippyGtk.ButtonImage("move-z+", _("Z-"), "color3")
|
||||
self.labels['z-'].connect("clicked", self.move, "Z", "-")
|
||||
|
||||
self.labels['home'] = KlippyGtk.ButtonImage("home", _("Home All"))
|
||||
self.labels['home'].connect("clicked", self.home)
|
||||
|
||||
|
||||
grid.attach(self.labels['x+'], 2, 1, 1, 1)
|
||||
grid.attach(self.labels['x-'], 0, 1, 1, 1)
|
||||
grid.attach(self.labels['y+'], 1, 0, 1, 1)
|
||||
grid.attach(self.labels['y-'], 1, 1, 1, 1)
|
||||
grid.attach(self.labels['z+'], 3, 0, 1, 1)
|
||||
grid.attach(self.labels['z-'], 3, 1, 1, 1)
|
||||
|
||||
grid.attach(self.labels['home'], 0, 0, 1, 1)
|
||||
|
||||
distgrid = Gtk.Grid()
|
||||
j = 0;
|
||||
for i in self.distances:
|
||||
self.labels[i] = KlippyGtk.ToggleButton(i)
|
||||
self.labels[i].connect("clicked", self.change_distance, i)
|
||||
ctx = self.labels[i].get_style_context()
|
||||
if j == 0:
|
||||
ctx.add_class("distbutton_top")
|
||||
elif j == len(self.distances)-1:
|
||||
ctx.add_class("distbutton_bottom")
|
||||
else:
|
||||
ctx.add_class("distbutton")
|
||||
if i == "1":
|
||||
ctx.add_class("distbutton_active")
|
||||
distgrid.attach(self.labels[i], j, 0, 1, 1)
|
||||
j += 1
|
||||
|
||||
self.labels["1"].set_active(True)
|
||||
|
||||
#space_grid = KlippyGtk.HomogeneousGrid()
|
||||
#space_grid.attach(Gtk.Label("Distance (mm):"),0,0,1,1)
|
||||
#space_grid.attach(distgrid,0,1,1,1)
|
||||
#space_grid.attach(Gtk.Label(" "),0,2,1,1)
|
||||
box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
||||
|
||||
bottomgrid = KlippyGtk.HomogeneousGrid()
|
||||
self.labels['pos_x'] = Gtk.Label("X: 0")
|
||||
self.labels['pos_y'] = Gtk.Label("Y: 0")
|
||||
self.labels['pos_z'] = Gtk.Label("Z: 0")
|
||||
self.labels['pos_x'].get_style_context().add_class("text")
|
||||
self.labels['pos_y'].get_style_context().add_class("text")
|
||||
self.labels['pos_z'].get_style_context().add_class("text")
|
||||
bottomgrid.attach(self.labels['pos_x'], 0, 0, 1, 1)
|
||||
bottomgrid.attach(self.labels['pos_y'], 1, 0, 1, 1)
|
||||
bottomgrid.attach(self.labels['pos_z'], 2, 0, 1, 1)
|
||||
box.pack_start(bottomgrid, True, True, 0)
|
||||
self.labels['move_dist'] = Gtk.Label(_("Move Distance (mm)"))
|
||||
self.labels['move_dist'].get_style_context().add_class("text")
|
||||
box.pack_start(self.labels['move_dist'], True, True, 0)
|
||||
box.pack_start(distgrid, True, True, 0)
|
||||
|
||||
grid.attach(box, 0, 2, 3, 1)
|
||||
|
||||
|
||||
|
||||
b = KlippyGtk.ButtonImage('back', _('Back'))
|
||||
b.connect("clicked", self._screen._menu_go_back)
|
||||
grid.attach(b, 3, 2, 1, 1)
|
||||
|
||||
self.panel = grid
|
||||
self._screen.add_subscription(panel_name)
|
||||
|
||||
def process_update(self, data):
|
||||
if "toolhead" in data and "position" in data["toolhead"]:
|
||||
self.labels['pos_x'].set_text("X: %.2f" % (data["toolhead"]["position"][0]))
|
||||
self.labels['pos_y'].set_text("Y: %.2f" % (data["toolhead"]["position"][1]))
|
||||
self.labels['pos_z'].set_text("Z: %.2f" % (data["toolhead"]["position"][2]))
|
||||
|
||||
def change_distance(self, widget, distance):
|
||||
if self.distance == distance:
|
||||
return
|
||||
logging.info("### Distance " + str(distance))
|
||||
|
||||
ctx = self.labels[str(self.distance)].get_style_context()
|
||||
ctx.remove_class("distbutton_active")
|
||||
|
||||
self.distance = distance
|
||||
ctx = self.labels[self.distance].get_style_context()
|
||||
ctx.add_class("distbutton_active")
|
||||
for i in self.distances:
|
||||
if i == self.distance:
|
||||
continue
|
||||
self.labels[str(i)].set_active(False)
|
||||
|
||||
def move(self, widget, axis, dir):
|
||||
dist = str(self.distance) if dir == "+" else "-" + str(self.distance)
|
||||
logging.info("# Moving " + axis + " " + dist + "mm")
|
||||
|
||||
print("%s\n%s %s%s" % (KlippyGcodes.MOVE_RELATIVE, KlippyGcodes.MOVE, axis, dist))
|
||||
self._screen._ws.klippy.gcode_script(
|
||||
"%s\n%s %s%s" % (KlippyGcodes.MOVE_RELATIVE, KlippyGcodes.MOVE, axis, dist)
|
||||
)
|
||||
import gi
|
||||
import logging
|
||||
|
||||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, Gdk, GLib
|
||||
|
||||
from KlippyGtk import KlippyGtk
|
||||
from KlippyGcodes import KlippyGcodes
|
||||
from panels.screen_panel import ScreenPanel
|
||||
|
||||
logger = logging.getLogger("KlipperScreen.MovePanel")
|
||||
|
||||
class MovePanel(ScreenPanel):
|
||||
distance = 1
|
||||
distances = ['.1','.5','1','5','10','25']
|
||||
|
||||
|
||||
def initialize(self, panel_name):
|
||||
_ = self.lang.gettext
|
||||
|
||||
grid = KlippyGtk.HomogeneousGrid()
|
||||
|
||||
self.labels['x+'] = KlippyGtk.ButtonImage("move-x+", _("X+"), "color1")
|
||||
self.labels['x+'].connect("clicked", self.move, "X", "+")
|
||||
self.labels['x-'] = KlippyGtk.ButtonImage("move-x-", _("X-"), "color1")
|
||||
self.labels['x-'].connect("clicked", self.move, "X", "-")
|
||||
|
||||
self.labels['y+'] = KlippyGtk.ButtonImage("move-y+", _("Y+"), "color2")
|
||||
self.labels['y+'].connect("clicked", self.move, "Y", "+")
|
||||
self.labels['y-'] = KlippyGtk.ButtonImage("move-y-", _("Y-"), "color2")
|
||||
self.labels['y-'].connect("clicked", self.move, "Y", "-")
|
||||
|
||||
self.labels['z+'] = KlippyGtk.ButtonImage("move-z-", _("Z+"), "color3")
|
||||
self.labels['z+'].connect("clicked", self.move, "Z", "+")
|
||||
self.labels['z-'] = KlippyGtk.ButtonImage("move-z+", _("Z-"), "color3")
|
||||
self.labels['z-'].connect("clicked", self.move, "Z", "-")
|
||||
|
||||
self.labels['home'] = KlippyGtk.ButtonImage("home", _("Home All"))
|
||||
self.labels['home'].connect("clicked", self.home)
|
||||
|
||||
|
||||
grid.attach(self.labels['x+'], 2, 1, 1, 1)
|
||||
grid.attach(self.labels['x-'], 0, 1, 1, 1)
|
||||
grid.attach(self.labels['y+'], 1, 0, 1, 1)
|
||||
grid.attach(self.labels['y-'], 1, 1, 1, 1)
|
||||
grid.attach(self.labels['z+'], 3, 0, 1, 1)
|
||||
grid.attach(self.labels['z-'], 3, 1, 1, 1)
|
||||
|
||||
grid.attach(self.labels['home'], 0, 0, 1, 1)
|
||||
|
||||
distgrid = Gtk.Grid()
|
||||
j = 0;
|
||||
for i in self.distances:
|
||||
self.labels[i] = KlippyGtk.ToggleButton(i)
|
||||
self.labels[i].connect("clicked", self.change_distance, i)
|
||||
ctx = self.labels[i].get_style_context()
|
||||
if j == 0:
|
||||
ctx.add_class("distbutton_top")
|
||||
elif j == len(self.distances)-1:
|
||||
ctx.add_class("distbutton_bottom")
|
||||
else:
|
||||
ctx.add_class("distbutton")
|
||||
if i == "1":
|
||||
ctx.add_class("distbutton_active")
|
||||
distgrid.attach(self.labels[i], j, 0, 1, 1)
|
||||
j += 1
|
||||
|
||||
self.labels["1"].set_active(True)
|
||||
|
||||
#space_grid = KlippyGtk.HomogeneousGrid()
|
||||
#space_grid.attach(Gtk.Label("Distance (mm):"),0,0,1,1)
|
||||
#space_grid.attach(distgrid,0,1,1,1)
|
||||
#space_grid.attach(Gtk.Label(" "),0,2,1,1)
|
||||
box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
||||
|
||||
bottomgrid = KlippyGtk.HomogeneousGrid()
|
||||
self.labels['pos_x'] = Gtk.Label("X: 0")
|
||||
self.labels['pos_y'] = Gtk.Label("Y: 0")
|
||||
self.labels['pos_z'] = Gtk.Label("Z: 0")
|
||||
self.labels['pos_x'].get_style_context().add_class("text")
|
||||
self.labels['pos_y'].get_style_context().add_class("text")
|
||||
self.labels['pos_z'].get_style_context().add_class("text")
|
||||
bottomgrid.attach(self.labels['pos_x'], 0, 0, 1, 1)
|
||||
bottomgrid.attach(self.labels['pos_y'], 1, 0, 1, 1)
|
||||
bottomgrid.attach(self.labels['pos_z'], 2, 0, 1, 1)
|
||||
box.pack_start(bottomgrid, True, True, 0)
|
||||
self.labels['move_dist'] = Gtk.Label(_("Move Distance (mm)"))
|
||||
self.labels['move_dist'].get_style_context().add_class("text")
|
||||
box.pack_start(self.labels['move_dist'], True, True, 0)
|
||||
box.pack_start(distgrid, True, True, 0)
|
||||
|
||||
grid.attach(box, 0, 2, 3, 1)
|
||||
|
||||
|
||||
|
||||
b = KlippyGtk.ButtonImage('back', _('Back'))
|
||||
b.connect("clicked", self._screen._menu_go_back)
|
||||
grid.attach(b, 3, 2, 1, 1)
|
||||
|
||||
self.panel = grid
|
||||
self._screen.add_subscription(panel_name)
|
||||
|
||||
def process_update(self, data):
|
||||
if "toolhead" in data and "position" in data["toolhead"]:
|
||||
self.labels['pos_x'].set_text("X: %.2f" % (data["toolhead"]["position"][0]))
|
||||
self.labels['pos_y'].set_text("Y: %.2f" % (data["toolhead"]["position"][1]))
|
||||
self.labels['pos_z'].set_text("Z: %.2f" % (data["toolhead"]["position"][2]))
|
||||
|
||||
def change_distance(self, widget, distance):
|
||||
if self.distance == distance:
|
||||
return
|
||||
logging.info("### Distance " + str(distance))
|
||||
|
||||
ctx = self.labels[str(self.distance)].get_style_context()
|
||||
ctx.remove_class("distbutton_active")
|
||||
|
||||
self.distance = distance
|
||||
ctx = self.labels[self.distance].get_style_context()
|
||||
ctx.add_class("distbutton_active")
|
||||
for i in self.distances:
|
||||
if i == self.distance:
|
||||
continue
|
||||
self.labels[str(i)].set_active(False)
|
||||
|
||||
def move(self, widget, axis, dir):
|
||||
dist = str(self.distance) if dir == "+" else "-" + str(self.distance)
|
||||
logging.info("# Moving " + axis + " " + dist + "mm")
|
||||
|
||||
print("%s\n%s %s%s" % (KlippyGcodes.MOVE_RELATIVE, KlippyGcodes.MOVE, axis, dist))
|
||||
self._screen._ws.klippy.gcode_script(
|
||||
"%s\n%s %s%s" % (KlippyGcodes.MOVE_RELATIVE, KlippyGcodes.MOVE, axis, dist)
|
||||
)
|
||||
|
@ -1,71 +1,71 @@
|
||||
import gi
|
||||
import logging
|
||||
import os
|
||||
|
||||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, Gdk, GLib
|
||||
|
||||
from KlippyGtk import KlippyGtk
|
||||
from panels.screen_panel import ScreenPanel
|
||||
|
||||
logger = logging.getLogger("KlipperScreen.SplashScreenPanel")
|
||||
|
||||
class SplashScreenPanel(ScreenPanel):
|
||||
box = None
|
||||
|
||||
def initialize(self, panel_name):
|
||||
_ = self.lang.gettext
|
||||
|
||||
image = Gtk.Image()
|
||||
#TODO: update file reference
|
||||
image.set_from_file(os.getcwd() + "/styles/z-bolt/images/klipper.png")
|
||||
|
||||
self.labels['text'] = Gtk.Label(_("Initializing printer..."))
|
||||
self.labels['text'].get_style_context().add_class("text")
|
||||
|
||||
|
||||
self.labels['actions'] = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
|
||||
self.labels['actions'].set_hexpand(True)
|
||||
self.labels['actions'].set_vexpand(False)
|
||||
self.labels['actions'].set_halign(Gtk.Align.END)
|
||||
self.labels['actions'].set_margin_end(20)
|
||||
|
||||
|
||||
main = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=15)
|
||||
main.pack_start(image, True, True, 10)
|
||||
main.pack_end(self.labels['actions'], False, False, 10)
|
||||
main.pack_end(self.labels['text'], True, True, 10)
|
||||
|
||||
|
||||
box = Gtk.VBox()
|
||||
box.add(main)
|
||||
|
||||
self.panel = box
|
||||
|
||||
def update_text(self, text):
|
||||
self.labels['text'].set_text(text)
|
||||
self.clear_action_bar()
|
||||
|
||||
def clear_action_bar(self):
|
||||
for child in self.labels['actions'].get_children():
|
||||
self.labels['actions'].remove(child)
|
||||
|
||||
def show_restart_buttons(self):
|
||||
_ = self.lang.gettext
|
||||
|
||||
if "firmware_restart" not in self.labels:
|
||||
self.labels['restart'] = KlippyGtk.ButtonImage("reboot",_("Restart"),"color1")
|
||||
self.labels['restart'].connect("clicked", self.restart)
|
||||
self.labels['firmware_restart'] = KlippyGtk.ButtonImage("restart",_("Firmware Restart"),"color2")
|
||||
self.labels['firmware_restart'].connect("clicked", self.firmware_restart)
|
||||
|
||||
self.clear_action_bar()
|
||||
|
||||
self.labels['actions'].add(self.labels['restart'])
|
||||
self.labels['actions'].add(self.labels['firmware_restart'])
|
||||
|
||||
def firmware_restart(self, widget):
|
||||
self._screen._ws.klippy.restart_firmware()
|
||||
|
||||
def restart(self, widget):
|
||||
self._screen._ws.klippy.restart()
|
||||
import gi
|
||||
import logging
|
||||
import os
|
||||
|
||||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, Gdk, GLib
|
||||
|
||||
from KlippyGtk import KlippyGtk
|
||||
from panels.screen_panel import ScreenPanel
|
||||
|
||||
logger = logging.getLogger("KlipperScreen.SplashScreenPanel")
|
||||
|
||||
class SplashScreenPanel(ScreenPanel):
|
||||
box = None
|
||||
|
||||
def initialize(self, panel_name):
|
||||
_ = self.lang.gettext
|
||||
|
||||
image = Gtk.Image()
|
||||
#TODO: update file reference
|
||||
image.set_from_file(os.getcwd() + "/styles/z-bolt/images/klipper.png")
|
||||
|
||||
self.labels['text'] = Gtk.Label(_("Initializing printer..."))
|
||||
self.labels['text'].get_style_context().add_class("text")
|
||||
|
||||
|
||||
self.labels['actions'] = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
|
||||
self.labels['actions'].set_hexpand(True)
|
||||
self.labels['actions'].set_vexpand(False)
|
||||
self.labels['actions'].set_halign(Gtk.Align.END)
|
||||
self.labels['actions'].set_margin_end(20)
|
||||
|
||||
|
||||
main = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=15)
|
||||
main.pack_start(image, True, True, 10)
|
||||
main.pack_end(self.labels['actions'], False, False, 10)
|
||||
main.pack_end(self.labels['text'], True, True, 10)
|
||||
|
||||
|
||||
box = Gtk.VBox()
|
||||
box.add(main)
|
||||
|
||||
self.panel = box
|
||||
|
||||
def update_text(self, text):
|
||||
self.labels['text'].set_text(text)
|
||||
self.clear_action_bar()
|
||||
|
||||
def clear_action_bar(self):
|
||||
for child in self.labels['actions'].get_children():
|
||||
self.labels['actions'].remove(child)
|
||||
|
||||
def show_restart_buttons(self):
|
||||
_ = self.lang.gettext
|
||||
|
||||
if "firmware_restart" not in self.labels:
|
||||
self.labels['restart'] = KlippyGtk.ButtonImage("reboot",_("Restart"),"color1")
|
||||
self.labels['restart'].connect("clicked", self.restart)
|
||||
self.labels['firmware_restart'] = KlippyGtk.ButtonImage("restart",_("Firmware Restart"),"color2")
|
||||
self.labels['firmware_restart'].connect("clicked", self.firmware_restart)
|
||||
|
||||
self.clear_action_bar()
|
||||
|
||||
self.labels['actions'].add(self.labels['restart'])
|
||||
self.labels['actions'].add(self.labels['firmware_restart'])
|
||||
|
||||
def firmware_restart(self, widget):
|
||||
self._screen._ws.klippy.restart_firmware()
|
||||
|
||||
def restart(self, widget):
|
||||
self._screen._ws.klippy.restart()
|
||||
|
@ -1,240 +1,240 @@
|
||||
import gi
|
||||
import logging
|
||||
|
||||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, Gdk, GLib
|
||||
|
||||
from KlippyGtk import KlippyGtk
|
||||
from KlippyGcodes import KlippyGcodes
|
||||
from panels.screen_panel import ScreenPanel
|
||||
|
||||
logger = logging.getLogger("KlipperScreen.TemperaturePanel")
|
||||
|
||||
class TemperaturePanel(ScreenPanel):
|
||||
active_heater = "extruder"
|
||||
tempdeltas = ["1","5","10","25"]
|
||||
tempdelta = "10"
|
||||
|
||||
def initialize(self, panel_name):
|
||||
_ = self.lang.gettext
|
||||
|
||||
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)
|
||||
if i == 0:
|
||||
self.labels[x].set_active(True)
|
||||
eq_grid.attach(self.labels[x], i%2, i/2, 1, 1)
|
||||
i += 1
|
||||
|
||||
print ("Primary tool: " + primary_tool)
|
||||
self.labels[primary_tool].get_style_context().add_class('button_active')
|
||||
|
||||
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()
|
||||
|
||||
self.labels["increase"] = KlippyGtk.ButtonImage("increase", _("Increase"), "color1")
|
||||
self.labels["increase"].connect("clicked",self.change_target_temp, "+")
|
||||
self.labels["decrease"] = KlippyGtk.ButtonImage("decrease", _("Decrease"), "color3")
|
||||
self.labels["decrease"].connect("clicked",self.change_target_temp, "-")
|
||||
self.labels["npad"] = KlippyGtk.ButtonImage("settings", _("Number Pad"), "color2")
|
||||
self.labels["npad"].connect("clicked", self.show_numpad)
|
||||
|
||||
tempgrid = Gtk.Grid()
|
||||
j = 0;
|
||||
for i in self.tempdeltas:
|
||||
self.labels['deg'+ i] = KlippyGtk.ToggleButton(i)
|
||||
self.labels['deg'+ i].connect("clicked", self.change_temp_delta, i)
|
||||
ctx = self.labels['deg'+ i].get_style_context()
|
||||
if j == 0:
|
||||
ctx.add_class("tempbutton_top")
|
||||
elif j == len(self.tempdeltas)-1:
|
||||
ctx.add_class("tempbutton_bottom")
|
||||
else:
|
||||
ctx.add_class("tempbutton")
|
||||
if i == "10":
|
||||
ctx.add_class("distbutton_active")
|
||||
tempgrid.attach(self.labels['deg'+ i], 0, j, 1, 1)
|
||||
j += 1
|
||||
|
||||
self.labels["deg" + self.tempdelta].set_active(True)
|
||||
|
||||
self.labels["control_grid"].attach(tempgrid, 2, 0, 1, 2)
|
||||
self.labels["control_grid"].attach(self.labels["increase"], 3, 0, 1, 1)
|
||||
self.labels["control_grid"].attach(self.labels["decrease"], 3, 1, 1, 1)
|
||||
self.labels["control_grid"].attach(self.labels["npad"], 2, 2, 1, 1)
|
||||
|
||||
b = KlippyGtk.ButtonImage('back', _('Back'))
|
||||
b.connect("clicked", self._screen._menu_go_back)
|
||||
self.labels["control_grid"].attach(b, 3, 2, 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)
|
||||
|
||||
self.update_temp("heater_bed",35,40)
|
||||
|
||||
def change_temp_delta(self, widget, tempdelta):
|
||||
if self.tempdelta == tempdelta:
|
||||
return
|
||||
logging.info("### tempdelta " + str(tempdelta))
|
||||
|
||||
ctx = self.labels["deg" + str(self.tempdelta)].get_style_context()
|
||||
ctx.remove_class("distbutton_active")
|
||||
|
||||
self.tempdelta = tempdelta
|
||||
ctx = self.labels["deg" + self.tempdelta].get_style_context()
|
||||
ctx.add_class("distbutton_active")
|
||||
for i in self.tempdeltas:
|
||||
if i == self.tempdeltas:
|
||||
continue
|
||||
self.labels["deg" + str(i)].set_active(False)
|
||||
|
||||
def show_numpad(self, widget):
|
||||
_ = self.lang.gettext
|
||||
|
||||
numpad = KlippyGtk.HomogeneousGrid()
|
||||
|
||||
keys = [
|
||||
['1','numpad_tleft'],
|
||||
['2','numpad_top'],
|
||||
['3','numpad_tright'],
|
||||
['4','numpad_left'],
|
||||
['5','numpad_button'],
|
||||
['6','numpad_right'],
|
||||
['7','numpad_left'],
|
||||
['8','numpad_button'],
|
||||
['9','numpad_right'],
|
||||
['B','numpad_bleft'],
|
||||
['0','numpad_bottom'],
|
||||
['E','numpad_bright']
|
||||
]
|
||||
for i in range(len(keys)):
|
||||
id = 'button_' + str(keys[i][0])
|
||||
if keys[i][0] == "B":
|
||||
self.labels[id] = KlippyGtk.ButtonImage("backspace")
|
||||
elif keys[i][0] == "E":
|
||||
self.labels[id] = KlippyGtk.ButtonImage("complete", None, None, 40, 40)
|
||||
else:
|
||||
self.labels[id] = Gtk.Button(keys[i][0])
|
||||
self.labels[id].connect('clicked', self.update_entry, keys[i][0])
|
||||
ctx=self.labels[id].get_style_context()
|
||||
ctx.add_class(keys[i][1])
|
||||
numpad.attach(self.labels[id], i%3, i/3, 1, 1)
|
||||
|
||||
self.labels["keypad"] = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=3)
|
||||
self.labels['entry'] = Gtk.Entry()
|
||||
self.labels['entry'].props.xalign = 0.5
|
||||
ctx = self.labels['entry'].get_style_context()
|
||||
ctx.add_class('temperature_entry')
|
||||
|
||||
b = KlippyGtk.ButtonImage('back', _('Close'))
|
||||
b.connect("clicked", self.hide_numpad)
|
||||
|
||||
#numpad.attach(b, 0, 5, 3, 1)
|
||||
#numpad.attach(self.labels['entry'], 0, 0, 3, 1)
|
||||
box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
||||
box.add(self.labels['entry'])
|
||||
box.add(numpad)
|
||||
box.add(b)
|
||||
|
||||
self.labels["keypad"] = numpad
|
||||
|
||||
self.panel.remove_column(1)
|
||||
#self.panel.attach(self.labels["keypad"], 1, 0, 1, 1)
|
||||
self.panel.attach(box, 1, 0, 1, 1)
|
||||
self.panel.show_all()
|
||||
|
||||
def hide_numpad(self, widget):
|
||||
self.panel.remove_column(1)
|
||||
self.panel.attach(self.labels["control_grid"], 1, 0, 1, 1)
|
||||
self.panel.show_all()
|
||||
|
||||
|
||||
def select_heater (self, widget, heater):
|
||||
if self.active_heater == heater:
|
||||
return
|
||||
|
||||
|
||||
self.labels[self.active_heater].get_style_context().remove_class('button_active')
|
||||
self.active_heater = heater
|
||||
self.labels[heater].get_style_context().add_class("button_active")
|
||||
|
||||
if "entry" in self.labels:
|
||||
self.labels['entry'].set_text("")
|
||||
logging.info("### Active heater " + self.active_heater)
|
||||
|
||||
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")
|
||||
)
|
||||
return
|
||||
|
||||
def change_target_temp(self, widget, dir):
|
||||
target = self._printer.get_dev_stat(self.active_heater, "target")
|
||||
if dir == "+":
|
||||
target += int(self.tempdelta)
|
||||
if target > KlippyGcodes.MAX_EXT_TEMP:
|
||||
target = KlippyGcodes.MAX_EXT_TEMP
|
||||
else:
|
||||
target -= int(self.tempdelta)
|
||||
if target < 0:
|
||||
target = 0
|
||||
|
||||
self._printer.set_dev_stat(self.active_heater, "target", target)
|
||||
|
||||
if self.active_heater == "heater_bed":
|
||||
self._screen._ws.klippy.gcode_script( KlippyGcodes.set_bed_temp(
|
||||
target
|
||||
))
|
||||
else:
|
||||
self._screen._ws.klippy.gcode_script( KlippyGcodes.set_ext_temp(
|
||||
target,
|
||||
self._printer.get_tool_number(self.active_heater)
|
||||
))
|
||||
|
||||
def update_entry(self, widget, digit):
|
||||
text = self.labels['entry'].get_text()
|
||||
if digit == 'B':
|
||||
if len(text) < 1:
|
||||
return
|
||||
self.labels['entry'].set_text(text[0:-1])
|
||||
elif digit == 'E':
|
||||
if self.active_heater == "heater_bed":
|
||||
temp = int(text)
|
||||
temp = 0 if temp < 0 or temp > KlippyGcodes.MAX_BED_TEMP else temp
|
||||
self._screen._ws.klippy.gcode_script(KlippyGcodes.set_bed_temp(temp))
|
||||
else:
|
||||
temp = int(text)
|
||||
temp = 0 if temp < 0 or temp > KlippyGcodes.MAX_EXT_TEMP else temp
|
||||
self._screen._ws.klippy.gcode_script( KlippyGcodes.set_ext_temp(
|
||||
temp,
|
||||
self._printer.get_tool_number(self.active_heater)
|
||||
))
|
||||
self._printer.set_dev_stat(self.active_heater, "target", temp)
|
||||
self.labels['entry'].set_text("")
|
||||
else:
|
||||
if len(text) >= 3:
|
||||
return
|
||||
self.labels['entry'].set_text(text + digit)
|
||||
import gi
|
||||
import logging
|
||||
|
||||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, Gdk, GLib
|
||||
|
||||
from KlippyGtk import KlippyGtk
|
||||
from KlippyGcodes import KlippyGcodes
|
||||
from panels.screen_panel import ScreenPanel
|
||||
|
||||
logger = logging.getLogger("KlipperScreen.TemperaturePanel")
|
||||
|
||||
class TemperaturePanel(ScreenPanel):
|
||||
active_heater = "extruder"
|
||||
tempdeltas = ["1","5","10","25"]
|
||||
tempdelta = "10"
|
||||
|
||||
def initialize(self, panel_name):
|
||||
_ = self.lang.gettext
|
||||
|
||||
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)
|
||||
if i == 0:
|
||||
self.labels[x].set_active(True)
|
||||
eq_grid.attach(self.labels[x], i%2, i/2, 1, 1)
|
||||
i += 1
|
||||
|
||||
print ("Primary tool: " + primary_tool)
|
||||
self.labels[primary_tool].get_style_context().add_class('button_active')
|
||||
|
||||
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()
|
||||
|
||||
self.labels["increase"] = KlippyGtk.ButtonImage("increase", _("Increase"), "color1")
|
||||
self.labels["increase"].connect("clicked",self.change_target_temp, "+")
|
||||
self.labels["decrease"] = KlippyGtk.ButtonImage("decrease", _("Decrease"), "color3")
|
||||
self.labels["decrease"].connect("clicked",self.change_target_temp, "-")
|
||||
self.labels["npad"] = KlippyGtk.ButtonImage("settings", _("Number Pad"), "color2")
|
||||
self.labels["npad"].connect("clicked", self.show_numpad)
|
||||
|
||||
tempgrid = Gtk.Grid()
|
||||
j = 0;
|
||||
for i in self.tempdeltas:
|
||||
self.labels['deg'+ i] = KlippyGtk.ToggleButton(i)
|
||||
self.labels['deg'+ i].connect("clicked", self.change_temp_delta, i)
|
||||
ctx = self.labels['deg'+ i].get_style_context()
|
||||
if j == 0:
|
||||
ctx.add_class("tempbutton_top")
|
||||
elif j == len(self.tempdeltas)-1:
|
||||
ctx.add_class("tempbutton_bottom")
|
||||
else:
|
||||
ctx.add_class("tempbutton")
|
||||
if i == "10":
|
||||
ctx.add_class("distbutton_active")
|
||||
tempgrid.attach(self.labels['deg'+ i], 0, j, 1, 1)
|
||||
j += 1
|
||||
|
||||
self.labels["deg" + self.tempdelta].set_active(True)
|
||||
|
||||
self.labels["control_grid"].attach(tempgrid, 2, 0, 1, 2)
|
||||
self.labels["control_grid"].attach(self.labels["increase"], 3, 0, 1, 1)
|
||||
self.labels["control_grid"].attach(self.labels["decrease"], 3, 1, 1, 1)
|
||||
self.labels["control_grid"].attach(self.labels["npad"], 2, 2, 1, 1)
|
||||
|
||||
b = KlippyGtk.ButtonImage('back', _('Back'))
|
||||
b.connect("clicked", self._screen._menu_go_back)
|
||||
self.labels["control_grid"].attach(b, 3, 2, 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)
|
||||
|
||||
self.update_temp("heater_bed",35,40)
|
||||
|
||||
def change_temp_delta(self, widget, tempdelta):
|
||||
if self.tempdelta == tempdelta:
|
||||
return
|
||||
logging.info("### tempdelta " + str(tempdelta))
|
||||
|
||||
ctx = self.labels["deg" + str(self.tempdelta)].get_style_context()
|
||||
ctx.remove_class("distbutton_active")
|
||||
|
||||
self.tempdelta = tempdelta
|
||||
ctx = self.labels["deg" + self.tempdelta].get_style_context()
|
||||
ctx.add_class("distbutton_active")
|
||||
for i in self.tempdeltas:
|
||||
if i == self.tempdeltas:
|
||||
continue
|
||||
self.labels["deg" + str(i)].set_active(False)
|
||||
|
||||
def show_numpad(self, widget):
|
||||
_ = self.lang.gettext
|
||||
|
||||
numpad = KlippyGtk.HomogeneousGrid()
|
||||
|
||||
keys = [
|
||||
['1','numpad_tleft'],
|
||||
['2','numpad_top'],
|
||||
['3','numpad_tright'],
|
||||
['4','numpad_left'],
|
||||
['5','numpad_button'],
|
||||
['6','numpad_right'],
|
||||
['7','numpad_left'],
|
||||
['8','numpad_button'],
|
||||
['9','numpad_right'],
|
||||
['B','numpad_bleft'],
|
||||
['0','numpad_bottom'],
|
||||
['E','numpad_bright']
|
||||
]
|
||||
for i in range(len(keys)):
|
||||
id = 'button_' + str(keys[i][0])
|
||||
if keys[i][0] == "B":
|
||||
self.labels[id] = KlippyGtk.ButtonImage("backspace")
|
||||
elif keys[i][0] == "E":
|
||||
self.labels[id] = KlippyGtk.ButtonImage("complete", None, None, 40, 40)
|
||||
else:
|
||||
self.labels[id] = Gtk.Button(keys[i][0])
|
||||
self.labels[id].connect('clicked', self.update_entry, keys[i][0])
|
||||
ctx=self.labels[id].get_style_context()
|
||||
ctx.add_class(keys[i][1])
|
||||
numpad.attach(self.labels[id], i%3, i/3, 1, 1)
|
||||
|
||||
self.labels["keypad"] = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=3)
|
||||
self.labels['entry'] = Gtk.Entry()
|
||||
self.labels['entry'].props.xalign = 0.5
|
||||
ctx = self.labels['entry'].get_style_context()
|
||||
ctx.add_class('temperature_entry')
|
||||
|
||||
b = KlippyGtk.ButtonImage('back', _('Close'))
|
||||
b.connect("clicked", self.hide_numpad)
|
||||
|
||||
#numpad.attach(b, 0, 5, 3, 1)
|
||||
#numpad.attach(self.labels['entry'], 0, 0, 3, 1)
|
||||
box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
||||
box.add(self.labels['entry'])
|
||||
box.add(numpad)
|
||||
box.add(b)
|
||||
|
||||
self.labels["keypad"] = numpad
|
||||
|
||||
self.panel.remove_column(1)
|
||||
#self.panel.attach(self.labels["keypad"], 1, 0, 1, 1)
|
||||
self.panel.attach(box, 1, 0, 1, 1)
|
||||
self.panel.show_all()
|
||||
|
||||
def hide_numpad(self, widget):
|
||||
self.panel.remove_column(1)
|
||||
self.panel.attach(self.labels["control_grid"], 1, 0, 1, 1)
|
||||
self.panel.show_all()
|
||||
|
||||
|
||||
def select_heater (self, widget, heater):
|
||||
if self.active_heater == heater:
|
||||
return
|
||||
|
||||
|
||||
self.labels[self.active_heater].get_style_context().remove_class('button_active')
|
||||
self.active_heater = heater
|
||||
self.labels[heater].get_style_context().add_class("button_active")
|
||||
|
||||
if "entry" in self.labels:
|
||||
self.labels['entry'].set_text("")
|
||||
logging.info("### Active heater " + self.active_heater)
|
||||
|
||||
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")
|
||||
)
|
||||
return
|
||||
|
||||
def change_target_temp(self, widget, dir):
|
||||
target = self._printer.get_dev_stat(self.active_heater, "target")
|
||||
if dir == "+":
|
||||
target += int(self.tempdelta)
|
||||
if target > KlippyGcodes.MAX_EXT_TEMP:
|
||||
target = KlippyGcodes.MAX_EXT_TEMP
|
||||
else:
|
||||
target -= int(self.tempdelta)
|
||||
if target < 0:
|
||||
target = 0
|
||||
|
||||
self._printer.set_dev_stat(self.active_heater, "target", target)
|
||||
|
||||
if self.active_heater == "heater_bed":
|
||||
self._screen._ws.klippy.gcode_script( KlippyGcodes.set_bed_temp(
|
||||
target
|
||||
))
|
||||
else:
|
||||
self._screen._ws.klippy.gcode_script( KlippyGcodes.set_ext_temp(
|
||||
target,
|
||||
self._printer.get_tool_number(self.active_heater)
|
||||
))
|
||||
|
||||
def update_entry(self, widget, digit):
|
||||
text = self.labels['entry'].get_text()
|
||||
if digit == 'B':
|
||||
if len(text) < 1:
|
||||
return
|
||||
self.labels['entry'].set_text(text[0:-1])
|
||||
elif digit == 'E':
|
||||
if self.active_heater == "heater_bed":
|
||||
temp = int(text)
|
||||
temp = 0 if temp < 0 or temp > KlippyGcodes.MAX_BED_TEMP else temp
|
||||
self._screen._ws.klippy.gcode_script(KlippyGcodes.set_bed_temp(temp))
|
||||
else:
|
||||
temp = int(text)
|
||||
temp = 0 if temp < 0 or temp > KlippyGcodes.MAX_EXT_TEMP else temp
|
||||
self._screen._ws.klippy.gcode_script( KlippyGcodes.set_ext_temp(
|
||||
temp,
|
||||
self._printer.get_tool_number(self.active_heater)
|
||||
))
|
||||
self._printer.set_dev_stat(self.active_heater, "target", temp)
|
||||
self.labels['entry'].set_text("")
|
||||
else:
|
||||
if len(text) >= 3:
|
||||
return
|
||||
self.labels['entry'].set_text(text + digit)
|
||||
|
@ -1,47 +1,47 @@
|
||||
|
||||
#
|
||||
import re
|
||||
import base64
|
||||
|
||||
dir = "/home/pi/sdcard/"
|
||||
file = "square_tower_0.2mm_PLA_ENDER3_46m.gcode"
|
||||
#f = f.open(file, 'r')
|
||||
|
||||
thumbnails = []
|
||||
cur_thumbnail = {}
|
||||
state = 0
|
||||
with open(dir + file, 'r') as f:
|
||||
for line in f:
|
||||
if state == 0:
|
||||
match = re.match(r'^; thumbnail begin ([0-9]+)x([0-9]+) ([0-9]+)', line)
|
||||
if match:
|
||||
cur_thumbnail = {
|
||||
"width": match.group(1),
|
||||
"height": match.group(2),
|
||||
"size": match.group(3),
|
||||
"data": ""
|
||||
}
|
||||
state = 1
|
||||
continue
|
||||
elif state == 1:
|
||||
if re.match (r'^; thumbnail end', line):
|
||||
state = 0
|
||||
thumbnails.append(cur_thumbnail)
|
||||
continue
|
||||
match = re.match(r'^; (\S+)$', line)
|
||||
if match:
|
||||
cur_thumbnail['data'] += match.group(1)
|
||||
|
||||
if len(thumbnails) > 0:
|
||||
biggest = 0
|
||||
for i in range(len(thumbnails)):
|
||||
if i == 0:
|
||||
continue
|
||||
if thumbnails[i]['width'] > thumbnails[biggest]['width']:
|
||||
biggest = i
|
||||
|
||||
image = base64.decodestring(thumbnails[biggest]['data'])
|
||||
name = file.split('.gcod')[0] + ".png"
|
||||
f = open(dir + name, 'wb')
|
||||
f.write(image)
|
||||
f.close()
|
||||
|
||||
#
|
||||
import re
|
||||
import base64
|
||||
|
||||
dir = "/home/pi/sdcard/"
|
||||
file = "square_tower_0.2mm_PLA_ENDER3_46m.gcode"
|
||||
#f = f.open(file, 'r')
|
||||
|
||||
thumbnails = []
|
||||
cur_thumbnail = {}
|
||||
state = 0
|
||||
with open(dir + file, 'r') as f:
|
||||
for line in f:
|
||||
if state == 0:
|
||||
match = re.match(r'^; thumbnail begin ([0-9]+)x([0-9]+) ([0-9]+)', line)
|
||||
if match:
|
||||
cur_thumbnail = {
|
||||
"width": match.group(1),
|
||||
"height": match.group(2),
|
||||
"size": match.group(3),
|
||||
"data": ""
|
||||
}
|
||||
state = 1
|
||||
continue
|
||||
elif state == 1:
|
||||
if re.match (r'^; thumbnail end', line):
|
||||
state = 0
|
||||
thumbnails.append(cur_thumbnail)
|
||||
continue
|
||||
match = re.match(r'^; (\S+)$', line)
|
||||
if match:
|
||||
cur_thumbnail['data'] += match.group(1)
|
||||
|
||||
if len(thumbnails) > 0:
|
||||
biggest = 0
|
||||
for i in range(len(thumbnails)):
|
||||
if i == 0:
|
||||
continue
|
||||
if thumbnails[i]['width'] > thumbnails[biggest]['width']:
|
||||
biggest = i
|
||||
|
||||
image = base64.decodestring(thumbnails[biggest]['data'])
|
||||
name = file.split('.gcod')[0] + ".png"
|
||||
f = open(dir + name, 'wb')
|
||||
f.write(image)
|
||||
f.close()
|
||||
|
Loading…
x
Reference in New Issue
Block a user