#!/usr/bin/python
# -*- coding: utf-8 -*-

import pygtk
pygtk.require("2.0")
import gtk
import time
import gladevcp.makepins
from gladevcp.gladebuilder import GladeBuilder
import hal
import linuxcnc
import hal_glib
import sys
import gladevcp
import os
BASE = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), ".."))
datadir = os.path.join(BASE, "share", "linuxcnc")
xmlname = os.path.join(datadir,"mygui.glade")
CONFIGPATH = os.environ['CONFIG_DIR']
inifile = linuxcnc.ini(sys.argv[2])
 
print  sys.argv[1]
print  sys.argv[2]
print  os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), " "))
class Setpoint:
    def __init__(self):
        self.d=("P","X","Y","Z")

class Widgets:
	def __init__(self, xml):
		self._xml = xml
	def __getattr__(self, attr):
		r = self._xml.get_object(attr)
		if r is None: raise AttributeError, "No widget %r" % attr
		return r
	def __getitem__(self, attr):
		r = self._xml.get_object(attr)
		if r is None: raise IndexError, "No widget %r" % attr
		return r

class Mygui(object):

	def open_m(self,widget):
		f=open('/home/nkp/emc2/nc_files/axis.ngc', "r")
	        lines = f.readlines()
	        sys.stdout.write(str(lines))
	def home_all(self,widget):
		self.c.home(0)
		self.c.home(1)
		self.c.home(2)
	def WriteToAxis(self,widget):
		sys.stdout.write()
	
	def on_window1_destroy(self, widget, data=None):
		print "quit++"	
		gtk.main_quit()
	def page_select(self,widget):
		maxpage = self.widgets.notebook.get_n_pages()
		page = self.widgets.notebook.get_current_page()
		nextpage = page + 1
		if nextpage == maxpage:
			nextpage = 0
		self.widgets.notebook.set_current_page(nextpage)

	
	def on_halmeter(self,*args):
		p = os.popen("halmeter &")
	def fullscreen(self,*args):
		self.window.unfullscreen()
		
	def enable_dro(self,*args):
		self.widgets.gremlin.set_property('enable_dro',(1))
		self.widgets.gremlin.set_mouse_start(0,0)
		self.rotate(20,0)
 
	def change_viev(self,*args):	 
		def whirligig():
			self.setpoint.d = self.setpoint.d[-1:]+self.setpoint.d[:-1]
		whirligig()
		self.widgets.gremlin.set_property('view',self.setpoint.d[0])
	def pan(self,x,y):
		self.widgets.gremlin.pan(x,y)
	def rotate(self,x,y):
		self.widgets.gremlin.rotate_view(x,y)
        def on_halshow(self,*args):
                p = os.popen("/home/nkp/emc2-dev-80db2a2/tcl/bin/halshow.tcl &" )
	def change_mode(self, pin) :
		for i in self.modes :
			if self.halcomp[i] == True :
				self.mode = self.modes[i]
				self.widgets.notebook1.set_current_page(self.mode)
				return
	def click_button(self, pin, notebook, num) :
		print '1'
		if pin.value == True :
			box = self.widgets.notebook1.get_nth_page(self.widgets.notebook1.get_current_page())
			button_list = box.get_children()
			button = button_list[num]
			button.emit("clicked")	
	def __init__(self):
		global xmlname
		localglade = os.path.join(CONFIGPATH,"mygui.glade")
		if os.path.exists(localglade):
			print " MyGUI INFO:  Загружаем файл glade %s "% localglade
			xmlname = localglade
		else:
			print " MyGUI INFO:  Загружаем файл glade %s " % xmlname
		self.builder = gtk.Builder()
		self.builder.add_from_file(xmlname)
		self.window = self.builder.get_object("window1")
		self.widgets = Widgets(self.builder)
		self.halcomp = hal.component("mygui")
		self.vtriggers = []
		self.htriggers = []
		for i in range(7) :
			self.vtriggers.append(hal_glib.GPin(self.halcomp.newpin('vbutton.%s'%i, hal.HAL_BIT, hal.HAL_IN)))
#			self.vtriggers[-1].connect("value-changed",self.click_button, self.vbuttons, i)
		for i in range(7) :
			self.htriggers.append(hal_glib.GPin(self.halcomp.newpin('hbutton.%s'%i, hal.HAL_BIT, hal.HAL_IN)))
			self.htriggers[-1].connect("value-changed",self.click_button, self.widgets.notebook1, i)

		self.modes = {"mode_a":0, "mode_m":1, "mode_mdi":2, "mode_j":3, "mode_j1":4, "mode_j2":5,}
		self.modetriggers = []
		for mode in self.modes :
			self.modetriggers.append(hal_glib.GPin(self.halcomp.newpin(mode, hal.HAL_BIT, hal.HAL_IN)))			
			self.modetriggers[-1].connect("value-changed", self.change_mode)
		panel = gladevcp.makepins.GladePanel( self.halcomp, xmlname, self.builder, None)
		self.builder.connect_signals(self)
		self.halcomp.ready()
		self.setpoint = Setpoint()
		self.widgets.notebook1.set_current_page(3)
		self.window.fullscreen()
		self.widgets.gremlin.set_property('enable_dro',(0))
		self.widgets.button53.modify_bg(gtk.STATE_NORMAL , gtk.gdk.Color('#FF0095'))
		self.c = linuxcnc.command()
		self.widgets.button2.connect("clicked", self.home_all)
		self.widgets.button11.connect("clicked", self.page_select)
		self.window.show()


 
if __name__ == "__main__":
	app = Mygui()
        res = os.spawnvp(os.P_WAIT, "halcmd", ["halcmd", "-f", "/home/nkp/emc2-dev-80db2a2/configs/MyGUI/mode.hal"])
        if res: raise SystemExit, res
	gtk.main()
	
