Dynamically load panels
This commit is contained in:
parent
3b62439939
commit
8204e3ab17
@ -124,7 +124,7 @@ panel: temperature
|
||||
[menu __print tuning]
|
||||
name: Fine Tuning
|
||||
icon: fan
|
||||
panel: finetune
|
||||
panel: fine_tune
|
||||
|
||||
[menu __print network]
|
||||
name: Network
|
||||
|
@ -111,3 +111,6 @@ class BedLevelPanel(ScreenPanel):
|
||||
self._screen._ws.klippy.gcode_script(
|
||||
"M18" # Disable motors
|
||||
)
|
||||
|
||||
def create_panel(*args):
|
||||
return BedLevelPanel(*args)
|
||||
|
@ -7,6 +7,9 @@ from ks_includes.KlippyGtk import KlippyGtk
|
||||
from ks_includes.KlippyGcodes import KlippyGcodes
|
||||
from ks_includes.screen_panel import ScreenPanel
|
||||
|
||||
def create_panel(*args):
|
||||
return ExamplePanel(*args)
|
||||
|
||||
class ExamplePanel(ScreenPanel):
|
||||
def initialize(self, panel_name):
|
||||
_ = self.lang.gettext
|
||||
|
@ -10,6 +10,9 @@ from ks_includes.screen_panel import ScreenPanel
|
||||
|
||||
logger = logging.getLogger("KlipperScreen.ExtrudePanel")
|
||||
|
||||
def create_panel(*args):
|
||||
return ExtrudePanel(*args)
|
||||
|
||||
class ExtrudePanel(ScreenPanel):
|
||||
distance = 1
|
||||
distances = ['1','5','10','25']
|
||||
|
@ -10,6 +10,9 @@ from ks_includes.screen_panel import ScreenPanel
|
||||
|
||||
logger = logging.getLogger("KlipperScreen.FanPanel")
|
||||
|
||||
def create_panel(*args):
|
||||
return FanPanel(*args)
|
||||
|
||||
class FanPanel(ScreenPanel):
|
||||
user_selecting = False
|
||||
|
||||
|
@ -10,7 +10,10 @@ from ks_includes.screen_panel import ScreenPanel
|
||||
|
||||
logger = logging.getLogger("KlipperScreen.FineTunePanel")
|
||||
|
||||
class FineTune(ScreenPanel):
|
||||
def create_panel(*args):
|
||||
return FineTunePanel(*args)
|
||||
|
||||
class FineTunePanel(ScreenPanel):
|
||||
user_selecting = False
|
||||
|
||||
bs = 0
|
||||
|
@ -9,6 +9,9 @@ from ks_includes.screen_panel import ScreenPanel
|
||||
|
||||
logger = logging.getLogger("KlipperScreen.JobStatusPanel")
|
||||
|
||||
def create_panel(*args):
|
||||
return JobStatusPanel(*args)
|
||||
|
||||
class JobStatusPanel(ScreenPanel):
|
||||
is_paused = False
|
||||
filename = None
|
||||
|
@ -9,6 +9,9 @@ from panels.menu import MenuPanel
|
||||
|
||||
logger = logging.getLogger("KlipperScreen.MainMenu")
|
||||
|
||||
def create_panel(*args):
|
||||
return MainPanel(*args)
|
||||
|
||||
class MainPanel(MenuPanel):
|
||||
|
||||
def initialize(self, panel_name, items, extrudercount):
|
||||
|
@ -9,6 +9,9 @@ from ks_includes.screen_panel import ScreenPanel
|
||||
|
||||
logger = logging.getLogger("KlipperScreen.MenuPanel")
|
||||
|
||||
def create_panel(*args):
|
||||
return MenuPanel(*args)
|
||||
|
||||
class MenuPanel(ScreenPanel):
|
||||
def initialize(self, panel_name, items):
|
||||
_ = self.lang.gettext
|
||||
|
@ -10,6 +10,9 @@ from ks_includes.screen_panel import ScreenPanel
|
||||
|
||||
logger = logging.getLogger("KlipperScreen.MovePanel")
|
||||
|
||||
def create_panel(*args):
|
||||
return MovePanel(*args)
|
||||
|
||||
class MovePanel(ScreenPanel):
|
||||
distance = 1
|
||||
distances = ['.1','.5','1','5','10','25']
|
||||
|
@ -10,6 +10,9 @@ from ks_includes.screen_panel import ScreenPanel
|
||||
|
||||
logger = logging.getLogger("KlipperScreen.NetworkPanel")
|
||||
|
||||
def create_panel(*args):
|
||||
return NetworkPanel(*args)
|
||||
|
||||
class NetworkPanel(ScreenPanel):
|
||||
def initialize(self, menu):
|
||||
_ = self.lang.gettext
|
||||
|
@ -9,6 +9,9 @@ from ks_includes.screen_panel import ScreenPanel
|
||||
|
||||
logger = logging.getLogger("KlipperScreen.PreheatPanel")
|
||||
|
||||
def create_panel(*args):
|
||||
return PreheatPanel(*args)
|
||||
|
||||
class PreheatPanel(ScreenPanel):
|
||||
active_heaters = []
|
||||
|
||||
|
@ -12,6 +12,9 @@ from ks_includes.screen_panel import ScreenPanel
|
||||
|
||||
logger = logging.getLogger("KlipperScreen.PrintPanel")
|
||||
|
||||
def create_panel(*args):
|
||||
return PrintPanel(*args)
|
||||
|
||||
class PrintPanel(ScreenPanel):
|
||||
def initialize(self, panel_name):
|
||||
self.labels['files'] = {}
|
||||
|
@ -10,6 +10,9 @@ from ks_includes.screen_panel import ScreenPanel
|
||||
|
||||
logger = logging.getLogger("KlipperScreen.SplashScreenPanel")
|
||||
|
||||
def create_panel(*args):
|
||||
return SplashScreenPanel(*args)
|
||||
|
||||
class SplashScreenPanel(ScreenPanel):
|
||||
box = None
|
||||
|
||||
|
@ -11,6 +11,9 @@ from ks_includes.screen_panel import ScreenPanel
|
||||
|
||||
logger = logging.getLogger("KlipperScreen.SystemPanel")
|
||||
|
||||
def create_panel(*args):
|
||||
return SystemPanel(*args)
|
||||
|
||||
class SystemPanel(ScreenPanel):
|
||||
def initialize(self, panel_name):
|
||||
_ = self.lang.gettext
|
||||
|
@ -10,6 +10,9 @@ from ks_includes.screen_panel import ScreenPanel
|
||||
|
||||
logger = logging.getLogger("KlipperScreen.TemperaturePanel")
|
||||
|
||||
def create_panel(*args):
|
||||
return TemperaturePanel(*args)
|
||||
|
||||
class TemperaturePanel(ScreenPanel):
|
||||
active_heater = "extruder"
|
||||
tempdeltas = ["1","5","10","25"]
|
||||
|
@ -10,6 +10,9 @@ from ks_includes.screen_panel import ScreenPanel
|
||||
import logging
|
||||
logger = logging.getLogger("KlipperScreen.ZCalibratePanel")
|
||||
|
||||
def create_panel(*args):
|
||||
return ZCalibratePanel(*args)
|
||||
|
||||
class ZCalibratePanel(ScreenPanel):
|
||||
_screen = None
|
||||
labels = {}
|
||||
|
77
screen.py
77
screen.py
@ -8,6 +8,7 @@ import threading
|
||||
import json
|
||||
import requests
|
||||
import websocket
|
||||
import importlib
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
@ -27,7 +28,6 @@ from ks_includes.config import KlipperScreenConfig
|
||||
|
||||
# Do this better in the future
|
||||
#from ks_includes.screen_panel import *
|
||||
from panels.bed_level import *
|
||||
from panels.extrude import *
|
||||
from panels.fan import *
|
||||
from panels.fine_tune import *
|
||||
@ -42,6 +42,7 @@ from panels.splash_screen import *
|
||||
from panels.system import *
|
||||
from panels.temperature import *
|
||||
from panels.zcalibrate import *
|
||||
CORE_PANELS = ["main_menu","menu","job_status"]
|
||||
|
||||
# Create logging
|
||||
logger = logging.getLogger('KlipperScreen')
|
||||
@ -70,6 +71,7 @@ class KlipperScreen(Gtk.Window):
|
||||
number_tools = 1
|
||||
|
||||
panels = {}
|
||||
load_panel = {}
|
||||
_cur_panels = []
|
||||
files = None
|
||||
filename = ""
|
||||
@ -106,6 +108,8 @@ class KlipperScreen(Gtk.Window):
|
||||
logger.info("KlipperScreen version: %s" % self.version)
|
||||
logger.info("Screen resolution: %sx%s" % (self.width, self.height))
|
||||
|
||||
#self._load_panels()
|
||||
|
||||
self.printer_initializing(_("Initializing"))
|
||||
|
||||
self._ws = KlippyWebsocket(self, {
|
||||
@ -139,45 +143,34 @@ class KlipperScreen(Gtk.Window):
|
||||
}
|
||||
self._ws.klippy.object_subscription(requested_updates)
|
||||
|
||||
def _load_panel(self, panel, *args):
|
||||
if not panel in self.load_panel:
|
||||
logger.debug("Loading panel: %s" % panel)
|
||||
panel_path = os.path.join(os.path.dirname(__file__), 'panels', "%s.py" % panel)
|
||||
logger.info("Panel path: %s" % panel_path)
|
||||
if not os.path.exists(panel_path):
|
||||
msg = f"Panel {panel} does not exist"
|
||||
logger.info(msg)
|
||||
raise Exception(msg)
|
||||
|
||||
module = importlib.import_module("panels.%s" % panel)
|
||||
if not hasattr(module, "create_panel"):
|
||||
msg = f"Cannot locate create_panel function for {panel}"
|
||||
logger.info(msg)
|
||||
raise Exception(msg)
|
||||
self.load_panel[panel] = getattr(module, "create_panel")
|
||||
|
||||
try:
|
||||
return self.load_panel[panel](*args)
|
||||
except Exception:
|
||||
msg = f"Unable to create panel {panel}"
|
||||
logger.exception(msg)
|
||||
raise Exception(msg)
|
||||
|
||||
|
||||
def show_panel(self, panel_name, type, remove=None, pop=True, **kwargs):
|
||||
if panel_name not in self.panels:
|
||||
try:
|
||||
if type == "SplashScreenPanel":
|
||||
self.panels[panel_name] = SplashScreenPanel(self)
|
||||
elif type == "MainPanel":
|
||||
self.panels[panel_name] = MainPanel(self)
|
||||
elif type == "menu":
|
||||
self.panels[panel_name] = MenuPanel(self)
|
||||
elif type == "bed_level":
|
||||
self.panels[panel_name] = BedLevelPanel(self)
|
||||
elif type == "extrude":
|
||||
self.panels[panel_name] = ExtrudePanel(self)
|
||||
elif type == "finetune":
|
||||
self.panels[panel_name] = FineTune(self)
|
||||
elif type == "JobStatusPanel":
|
||||
self.panels[panel_name] = JobStatusPanel(self)
|
||||
elif type == "move":
|
||||
self.panels[panel_name] = MovePanel(self)
|
||||
elif type == "network":
|
||||
self.panels[panel_name] = NetworkPanel(self)
|
||||
elif type == "preheat":
|
||||
self.panels[panel_name] = PreheatPanel(self)
|
||||
elif type == "print":
|
||||
self.panels[panel_name] = PrintPanel(self)
|
||||
elif type == "temperature":
|
||||
self.panels[panel_name] = TemperaturePanel(self)
|
||||
elif type == "fan":
|
||||
self.panels[panel_name] = FanPanel(self)
|
||||
elif type == "system":
|
||||
self.panels[panel_name] = SystemPanel(self)
|
||||
elif type == "zcalibrate":
|
||||
self.panels[panel_name] = ZCalibratePanel(self)
|
||||
#Temporary for development
|
||||
else:
|
||||
self.panels[panel_name] = MovePanel(self)
|
||||
except:
|
||||
self.show_error_modal("Unable to load panel %s" % panel_name)
|
||||
return
|
||||
self.panels[panel_name] = self._load_panel(type, self)
|
||||
|
||||
try:
|
||||
if kwargs != {}:
|
||||
@ -186,7 +179,7 @@ class KlipperScreen(Gtk.Window):
|
||||
self.panels[panel_name].initialize(panel_name)
|
||||
except:
|
||||
del self.panels[panel_name]
|
||||
self.show_error_modal("Unable to load panel %s" % panel_name)
|
||||
self.show_error_modal("Unable to load panel %s" % type)
|
||||
return
|
||||
|
||||
if hasattr(self.panels[panel_name],"process_update"):
|
||||
@ -386,7 +379,7 @@ class KlipperScreen(Gtk.Window):
|
||||
|
||||
def printer_initializing(self, text=None):
|
||||
self.shutdown = True
|
||||
self.show_panel('splash_screen',"SplashScreenPanel", 2)
|
||||
self.show_panel('splash_screen',"splash_screen", 2)
|
||||
if text != None:
|
||||
self.panels['splash_screen'].update_text(text)
|
||||
self.panels['splash_screen'].show_restart_buttons()
|
||||
@ -442,12 +435,12 @@ class KlipperScreen(Gtk.Window):
|
||||
return
|
||||
|
||||
self.files.add_timeout()
|
||||
self.show_panel('main_panel', "MainPanel", 2, items=self._config.get_menu_items("__main"), extrudercount=self.printer.get_extruder_count())
|
||||
self.show_panel('main_panel', "main_menu", 2, items=self._config.get_menu_items("__main"), extrudercount=self.printer.get_extruder_count())
|
||||
|
||||
def printer_printing(self):
|
||||
self.ws_subscribe()
|
||||
self.files.remove_timeout()
|
||||
self.show_panel('job_status',"JobStatusPanel", 2)
|
||||
self.show_panel('job_status',"job_status", 2)
|
||||
|
||||
def get_software_version():
|
||||
prog = ('git', '-C', os.path.dirname(__file__), 'describe', '--always',
|
||||
|
Loading…
x
Reference in New Issue
Block a user