'''
    HAL handlers for gvcp-panel.ui

	Stephen Smith 8/2025

'''

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from gi.repository import GObject
import sys
import linuxcnc
import hal
from hal_glib import GStat
GSTAT=GStat()

debug = 0


class HandlerClass:

		def on_destroy(self,obj,data=None):
			print("on_destroy, combobox active=%d" %(self.combo.get_active()))
			self.halcomp.exit() # avoid lingering HAL component
			Gtk.main_quit()

		def on_changed(self, combobox, data=None):
			model = combobox.get_model()
			index = combobox.get_active()
			self.execute(model[index][0])
			file = open("/home/scsmith1/gvcp_debug.log","a")
			file.write("Offset: ", model[index][0], "\nValue: ", model[index][1],"\nIndex: ",index)
			file.close();

		def get_factor():
			s = linuxcnc.stat()
			s.poll()

			factor = 1        #inches
			prog_units = getattr(s['program_units'])

			if (prog_units == 2):
				factor = 25.4 #metric

			file = open("/home/scsmith1/gvcp_debug.log","a")
			file.write("get_factor");
			file.write("\tprogram units: %d\n", prog_units)
			file.write("\tfactor: %f\n", factor)
			file.close()

			return (factor)

		def on_min_clicked(self, btn, data=None):
			factor = get_factor();
			value = 1 * factor;

			file = open("/home/scsmith1/gvcp_debug.log","a")
			file.write("on_min_clicked\n")
			file.write("\tfactor: %f\n", factor)
			file.write("\tvalue:  %f\n", values)
			file.close()

			GSTAT.set_jog_rate(value)

		def on_max_clicked(self, btn, data=None):
			factor = get_factor();
			value = 20 * factor;

			file = open("/home/scsmith1/gvcp_debug.log","a")
			file.write("on_max_clicked\n")
			file.write("\tfactor: %f\n", factor)
			file.write("\tvalue:  %f\n", values)
			file.close()
	
			GSTAT.set_jog_rate(value)
			print("max factor: %f\n", get_factor())

		def __init__(self, halcomp,builder,useropts):
			self.halcomp = halcomp
			self.builder = builder
			self.useropts = useropts

			self.combo = self.builder.get_object('select-program-offset')
			self.jog_min = self.builder.get_object('set-jog-rate-min')
			self.jog_max = self.builder.get_object('set-jog-rate-max')

		def get_handlers(halcomp,builder,useropts):

			global debug
			for cmd in useropts:
				exec(cmd, globals())

			return [HandlerClass(halcomp,builder,useropts)]

