diff pyink/FSM_window.py @ 1500:65249f15138e

Show transition editor when user click on "Edit" menu item
author Thinker K.F. Li <thinker@codemud.net>
date Wed, 04 May 2011 00:45:49 +0800
parents 9a7332e28291
children 4a57650bb926
line wrap: on
line diff
--- a/pyink/FSM_window.py	Tue May 03 13:09:43 2011 +0800
+++ b/pyink/FSM_window.py	Wed May 04 00:45:49 2011 +0800
@@ -161,13 +161,15 @@
         error_dialog.hide()
         pass
 
-    def show_state_editor(self, state_name=''):
+    def show_state_editor(self, state_name='', radius='30', entry_action=''):
         state_name_inp = self._state_name
         state_radius_inp = self._state_radius
+        state_entry_action = self._state_entry_action
         state_editor = self._state_editor
         
         state_name_inp.set_text(state_name)
-        state_radius_inp.set_text('30')
+        state_radius_inp.set_text(radius)
+        state_entry_action.set_text(entry_action)
         state_editor.show()
         pass
 
@@ -176,6 +178,21 @@
         state_editor.hide()
         pass
 
+    def show_transition_editor(self, cond='', action=''):
+        transition_cond = self._transition_cond
+        transition_action = self._transition_action
+        transition_editor = self._transition_editor
+
+        transition_cond.set_text(cond)
+        transition_action.set_text(action)
+        transition_editor.show()
+        pass
+
+    def hide_transition_editor(self):
+        transition_editor = self._transition_editor
+        transition_editor.hide()
+        pass
+
     def popup_state_menu(self):
         menu = self._state_menu
         menu.popup(None, None, None, 0, 0)
@@ -252,6 +269,8 @@
         pass
 
     def on_transition_cancel_clicked(self, *args):
+        transition_editor = self._transition_editor
+        transition_editor.hide()
         pass
 
     def on_del_transition_activate(self, *args):
@@ -384,6 +403,14 @@
     def state(self):
         return self._state
 
+    @property
+    def action(self):
+        domview = self._domview
+        state_name = self._state.state_name
+        trn_cond = self.trn_cond
+        trn = domview.get_transition(state_name, trn_cond)
+        return trn[2]
+
     def draw(self, parent):
         path = self.path
         trn_g, path_node, arrow_node = self._draw_transition_real(parent, path)
@@ -1002,10 +1029,17 @@
         window.grab_bg(stop_hint)
         pass
 
-    def on_del_transition_activate(self, *args):
+    def _handle_del_transition(self, *args):
         pass
 
-    def on_edit_transition_activate(self, *args):
+    def _handle_edit_transition(self, *args):
+        trn = self._select_transition
+
+        cond = trn.trn_cond
+        action = trn.action or ''
+
+        window = self._window
+        window.show_transition_editor(cond, action)
         pass
 
     def _show_transition_menu(self, trn):
@@ -1039,6 +1073,7 @@
         window.grab_bg(self.on_move_state_background)
         window.grab_state(self._handle_move_state_state)
         window.grab_transition(self._handle_transitoin_mouse_events)
+        window.grab_edit_transition(self._handle_edit_transition)
         pass
 
     def deactivate(self):
@@ -1215,6 +1250,7 @@
     _add_state_mode = None
     _state_mouse_event_handler = None
     _add_transition_cb = None
+    _edit_transition_cb = None
     _transition_mouse_event_handler = None
     
     def __init__(self, domview_ui, close_cb, destroy_cb):
@@ -1321,6 +1357,7 @@
         self.ungrab_state()
         self.ungrab_add_transition()
         self.ungrab_transition()
+        self.ungrab_edit_transition()
         pass
 
     def on_state_mouse_event(self, state, evtype, button, x, y):
@@ -1377,6 +1414,15 @@
         self._add_transition_cb = None
         pass
 
+    def grab_edit_transition(self, callback):
+        assert self._edit_transition_cb is None
+        self._edit_transition_cb = callback
+        pass
+
+    def ungrab_edit_transition(self):
+        self._edit_transition_cb = None
+        pass
+
     def _load_new_state(self, state_name):
         states = self._states
         
@@ -1468,6 +1514,12 @@
             pass
         pass
 
+    def on_edit_transition_activate(self, *args):
+        if self._edit_transition_cb:
+            self._edit_transition_cb(*args)
+            pass
+        pass
+
     def _install_test_data(self):
         self._init_layers()