diff --git a/python/mine/ri_cmd.py b/python/mine/ri_cmd.py
index 6302a65..532d466 100644
--- a/python/mine/ri_cmd.py
+++ b/python/mine/ri_cmd.py
@@ -12,10 +12,9 @@ def quit():
def previous():
''' correspond to previous button '''
wid_name = ri_seq.previous()
- print wid_name
if wid_name is not None:
- if 'current_window' in dir(display):
- display.kill_widget(display.current_window)
+ if ri_widget.Widget.current_widget:
+ ri_widget.Widget.current_widget.hide()
ri_widget.Widget.dict[wid_name].display()
else:
@@ -24,11 +23,18 @@ def previous():
def next():
''' correspond to next button '''
wid_name = ri_seq.next()
- print wid_name
if wid_name is not None:
- if 'current_window' in dir(display):
- display.kill_widget(display.current_window)
+ if ri_widget.Widget.current_widget:
+ ri_widget.Widget.current_widget.hide()
ri_widget.Widget.dict[wid_name].display()
else:
ri_widget.MessageBox.dict["next"].display()
+
+def serial_no_init():
+ print 'serial_no_init'
+ display.var_dict['serial_no.number'].set(value='123')
+
+def serial_no_quit():
+ v = display.var_dict['serial_no.number'].get()
+ print v
diff --git a/python/mine/ri_tk.py b/python/mine/ri_tk.py
index 5ee78ca..dc7a6ac 100644
--- a/python/mine/ri_tk.py
+++ b/python/mine/ri_tk.py
@@ -3,6 +3,12 @@
import Tkinter
import tkMessageBox
+import sys
+import ri_cmd
+
+var_dict={}
+widget_dict={}
+
def initialize(base_w):
''' base_w - base widget instance '''
global root_window
@@ -23,15 +29,52 @@ def quit():
def display_widget(w):
''' w - widget instance '''
global current_window
- current_window = display_widget_sub(w, base_widget)
+ setattr(w, 'tk_widget', display_widget_sub(w, base_widget))
+ # set step name
+ if 'name' in dir(w):
+ var_dict['main.step_name'].set(w.name)
+
+class MyImage:
+ ''' MyImage - a dummy class to hold Image variable '''
+ count = 0
+
+def modify_attributes(attr_dict):
+ ''' modify values in attr_dict to suit Tk usage '''
+ for a in attr_dict.keys():
+ if a == 'image':
+ # I think there is a bug in Tkinter on Image processing
+ # I have to bypass it in the following way:
+ image_var = 'a' + str(MyImage.count)
+ setattr(MyImage, image_var, Tkinter.PhotoImage(file=attr_dict[a]))
+ MyImage.count += 1
+ attr_dict[a] = getattr(MyImage, image_var)
+ elif a == 'command':
+ attr_dict[a] = getattr(sys.modules["ri_cmd"], attr_dict[a])
+ elif a == "textvariable" or a == "listvariable":
+ attr_dict[a] = var_dict[attr_dict[a]]
+
def display_widget_sub(w, p_win):
'''
w - widget instance
p_win - Tk parent window '''
+
+ # name type and value
+ if "variables" in dir(w):
+ for v_n, v_t, v_v in w.variables:
+ if not v_n in var_dict.keys():
+ var_dict[v_n] = getattr(Tkinter, v_t)(value=v_v)
+
+ # process action init
+ if 'action' in dir(w) and 'init' in w.action.dict:
+ getattr(sys.modules['ri_cmd'], w.action.dict['init'])()
+
+ tk_attr = dict(w.attr)
+ modify_attributes(tk_attr)
+
tk_func = getattr(Tkinter, w.tp)
- w_win = tk_func(p_win, w.attr)
-
+ w_win = tk_func(p_win, tk_attr)
+
# display sub widgets
if 'widgets' in dir(w):
for sub_w in w.widgets:
@@ -49,9 +92,21 @@ def display_widget_sub(w, p_win):
return w_win
-def kill_widget(win):
- ''' win - Tk window instance '''
- win.destroy()
+def process_action_quit(w):
+ ''' process action quit '''
+ if 'action' in dir(w) and 'quit' in w.action.dict:
+ getattr(sys.modules['ri_cmd'], w.action.dict['quit'])()
+
+ if 'widgets' in dir(w):
+ for sub_w in w.widgets:
+ process_action_quit(sub_w)
+
+def kill_widget(w):
+ ''' w - Widget instance '''
+ # process action quit
+ process_action_quit(w)
+
+ w.tk_widget.destroy()
#def display_entry(w):
diff --git a/python/mine/ri_widget.py b/python/mine/ri_widget.py
index 6e0cad7..9a76b36 100644
--- a/python/mine/ri_widget.py
+++ b/python/mine/ri_widget.py
@@ -1,7 +1,6 @@
#!/usr/bin/python
import Tkinter
-import sys
import ri_tk as display
class GridManagement:
@@ -28,12 +27,21 @@ class GridLocation:
for a in xml_node.attributes.values():
self.dict[a.name] = a.value
+class Action:
+ ''' implement action in interface xml '''
+ def __init__(self, xml_node):
+ self.dict={}
+ for a in xml_node.attributes.values():
+ self.dict[a.name] = a.value
+
class Widget:
''' implement widget in interface xml '''
current_widget=""
dict={}
def __init__(self, xml_node):
+ if 'name' in xml_node.attributes.keys():
+ self.name = xml_node.attributes["name"].value
self.tp = xml_node.attributes["type"].value
self.attr = self.widget_attribute(xml_node)
gm_list = [m for m in xml_node.childNodes
@@ -53,26 +61,36 @@ class Widget:
for w in w_list:
self.widgets.append(Widget(w))
+ v_list = [ v for v in xml_node.childNodes
+ if v.nodeType == v.ELEMENT_NODE and v.nodeName == "variable" ]
+ if v_list:
+ self.variables=[]
+ for v in v_list:
+ self.variables.append((v.attributes["name"].value, \
+ v.attributes["type"].value, \
+ "value" in v.attributes.keys() and v.attributes["value"].value or "" ))
+
+ act_list = [ a for a in xml_node.childNodes
+ if a.nodeType == a.ELEMENT_NODE and a.nodeName == "action" ]
+ if act_list:
+ self.action = Action(act_list[0])
+
def widget_attribute(self, xml_node):
attr_list = [ a for a in xml_node.childNodes
if a.nodeType == a.ELEMENT_NODE and a.nodeName == "widget_attribute"]
d = {}
- if attr_list:
+ if attr_list:
for a in attr_list[0].attributes.values():
- if a.name == 'image':
- #d[a.name] = Tkinter.PhotoImage(file=a.value)
- pass
- elif a.name == 'command':
- if not "ri_cmd" in sys.modules.keys():
- import ri_cmd
- d[a.name] = getattr(sys.modules["ri_cmd"], a.value)
- else:
- d[a.name] = a.value
+ d[a.name] = a.value
return d
def display(self):
+ Widget.current_widget = self
display.display_widget(self)
+ def hide(self):
+ display.kill_widget(self)
+
class Label(Widget):
''' Label '''
def __init__(self, xml_node):
diff --git a/xml/interface_ng.xml b/xml/interface_ng.xml
index 4199069..404f1bb 100644
--- a/xml/interface_ng.xml
+++ b/xml/interface_ng.xml
@@ -41,6 +41,9 @@
+
+
+
@@ -139,6 +142,17 @@ on special cases -->
+
+
+
+
+
+
+
+
+
+
+
diff --git a/xml/interface_t.xml b/xml/interface_t.xml
index 9a1aaca..0db25c4 100644
--- a/xml/interface_t.xml
+++ b/xml/interface_t.xml
@@ -4,7 +4,7 @@