annotate pyink/FSM_window.py @ 1502:376a8cb7312e

Refactor popup menu and selection of states and transition
author Thinker K.F. Li <thinker@codemud.net>
date Sat, 07 May 2011 21:48:47 +0800
parents 4a57650bb926
children 4d582306df85
rev   line source
1456
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1 import gtk
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
2 import os
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
3 import math
1458
59b90d7fcf57 Lock UI event handlers for FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents: 1457
diff changeset
4 import data_monitor
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
5 import pybInkscape
1456
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
6
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
7
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
8 class _dragger(object):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
9 _node = None
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
10 _start_x = None
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
11 _start_y = None
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
12 _state = 0
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
13
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
14 def __init__(self):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
15 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
16
1495
75cfacaa106e Refactoring _dragger
Thinker K.F. Li <thinker@codemud.net>
parents: 1494
diff changeset
17 ## \brief Mouse event handler
75cfacaa106e Refactoring _dragger
Thinker K.F. Li <thinker@codemud.net>
parents: 1494
diff changeset
18 #
75cfacaa106e Refactoring _dragger
Thinker K.F. Li <thinker@codemud.net>
parents: 1494
diff changeset
19 # This is a placeholder for mouse vent handlers. This attribute
75cfacaa106e Refactoring _dragger
Thinker K.F. Li <thinker@codemud.net>
parents: 1494
diff changeset
20 # of instances is switched between _mouse_event_waiting and
75cfacaa106e Refactoring _dragger
Thinker K.F. Li <thinker@codemud.net>
parents: 1494
diff changeset
21 # _mouse_event_pressed.
75cfacaa106e Refactoring _dragger
Thinker K.F. Li <thinker@codemud.net>
parents: 1494
diff changeset
22 #
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
23 def mouse_event(self, evtype, button, x, y):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
24 raise RuntimeError, 'should not be here'
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
25
1495
75cfacaa106e Refactoring _dragger
Thinker K.F. Li <thinker@codemud.net>
parents: 1494
diff changeset
26 def _mouse_event_waiting(self, evtype, button, x, y):
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
27 if evtype == pybInkscape.PYSPItem.PYB_EVENT_BUTTON_PRESS and \
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
28 button == 1:
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
29 self._start_x = x
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
30 self._start_y = y
1495
75cfacaa106e Refactoring _dragger
Thinker K.F. Li <thinker@codemud.net>
parents: 1494
diff changeset
31 self.mouse_event = self._mouse_event_pressed
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
32 self.start_drag()
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
33 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
34 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
35
1495
75cfacaa106e Refactoring _dragger
Thinker K.F. Li <thinker@codemud.net>
parents: 1494
diff changeset
36 def _mouse_event_pressed(self, evtype, button, x, y):
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
37 rx = x - self._start_x
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
38 ry = y - self._start_y
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
39
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
40 if evtype == pybInkscape.PYSPItem.PYB_EVENT_BUTTON_RELEASE:
1495
75cfacaa106e Refactoring _dragger
Thinker K.F. Li <thinker@codemud.net>
parents: 1494
diff changeset
41 self.mouse_event = self._mouse_event_waiting
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
42 self.stop_drag(rx, ry)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
43 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
44
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
45 self.update(rx, ry)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
46 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
47
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
48 def start(self):
1495
75cfacaa106e Refactoring _dragger
Thinker K.F. Li <thinker@codemud.net>
parents: 1494
diff changeset
49 self.mouse_event = self._mouse_event_waiting
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
50 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
51
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
52 def stop(self):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
53 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
54
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
55 def connect(self, node):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
56 self.start()
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
57
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
58 def handler(item, evtype, button, x, y):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
59 self.mouse_event(evtype, button, x, y)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
60 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
61
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
62 self._node = node
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
63 hdl_id = node.spitem.connect('mouse-event', handler)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
64 self._hdl_id = hdl_id
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
65 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
66
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
67 def disconnect(self):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
68 self.stop()
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
69 node = self._node
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
70 hdl_id = self._hdl_id
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
71 node.disconnect(hdl_id)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
72 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
73
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
74 def start_drag(self):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
75 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
76
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
77 def stop_drag(self, rx, ry):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
78 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
79
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
80 def update(self, rx, ry):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
81 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
82 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
83
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
84
1456
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
85 class FSM_window_base(object):
1488
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
86 _add_state_button = None
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
87 _move_state_button = None
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
88
1478
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
89 _state_editor = None
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
90 _state_name = None
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
91 _state_radius = None
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
92
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
93 _error_dialog = None
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
94 _error_dialog_label = None
1488
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
95
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
96 _state_menu = None
1478
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
97
1456
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
98 def __init__(self):
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
99 super(FSM_window_base, self).__init__()
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
100
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
101 dirname = os.path.dirname(__file__)
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
102 fname = os.path.join(dirname, 'FSM_window.glade')
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
103
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
104 builder = gtk.Builder()
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
105 builder.add_from_file(fname)
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
106
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
107 main_win = builder.get_object("FSM_main_win")
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
108 view_box = builder.get_object("view_box")
1486
471805e582cc Leave current mode when closing a FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents: 1485
diff changeset
109 add_state_button = builder.get_object('add_state')
471805e582cc Leave current mode when closing a FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents: 1485
diff changeset
110 move_state_button = builder.get_object('move_state')
1478
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
111
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
112 state_editor = builder.get_object("state_editor")
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
113 state_name = builder.get_object('state_name')
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
114 state_radius = builder.get_object('state_radius')
1499
9a7332e28291 Get objects from builder for state and transition editors
Thinker K.F. Li <thinker@codemud.net>
parents: 1498
diff changeset
115 state_entry_action = builder.get_object('state_entry_action')
1478
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
116
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
117 error_dialog = builder.get_object('error_dialog')
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
118 error_dialog_label = builder.get_object('error_dialog_label')
1456
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
119
1499
9a7332e28291 Get objects from builder for state and transition editors
Thinker K.F. Li <thinker@codemud.net>
parents: 1498
diff changeset
120 transition_editor = builder.get_object('transition_editor')
9a7332e28291 Get objects from builder for state and transition editors
Thinker K.F. Li <thinker@codemud.net>
parents: 1498
diff changeset
121 transition_cond = builder.get_object('transition_cond')
9a7332e28291 Get objects from builder for state and transition editors
Thinker K.F. Li <thinker@codemud.net>
parents: 1498
diff changeset
122 transition_action = builder.get_object('transition_action')
9a7332e28291 Get objects from builder for state and transition editors
Thinker K.F. Li <thinker@codemud.net>
parents: 1498
diff changeset
123
1488
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
124 state_menu = builder.get_object('state_menu')
1498
fc4169113259 Show popup menu for right click on a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1497
diff changeset
125 transition_menu = builder.get_object('transition_menu')
1488
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
126
1456
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
127 builder.connect_signals(self)
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
128
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
129 self._builder = builder
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
130 self._main_win = main_win
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
131 self._view_box = view_box
1486
471805e582cc Leave current mode when closing a FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents: 1485
diff changeset
132 self._add_state_button = add_state_button
471805e582cc Leave current mode when closing a FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents: 1485
diff changeset
133 self._move_state_button = move_state_button
1478
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
134
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
135 self._state_editor = state_editor
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
136 self._state_name = state_name
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
137 self._state_radius = state_radius
1499
9a7332e28291 Get objects from builder for state and transition editors
Thinker K.F. Li <thinker@codemud.net>
parents: 1498
diff changeset
138 self._state_entry_action = state_entry_action
9a7332e28291 Get objects from builder for state and transition editors
Thinker K.F. Li <thinker@codemud.net>
parents: 1498
diff changeset
139
9a7332e28291 Get objects from builder for state and transition editors
Thinker K.F. Li <thinker@codemud.net>
parents: 1498
diff changeset
140 self._transition_editor = transition_editor
9a7332e28291 Get objects from builder for state and transition editors
Thinker K.F. Li <thinker@codemud.net>
parents: 1498
diff changeset
141 self._transition_cond = transition_cond
9a7332e28291 Get objects from builder for state and transition editors
Thinker K.F. Li <thinker@codemud.net>
parents: 1498
diff changeset
142 self._transition_action = transition_action
1478
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
143
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
144 self._error_dialog = error_dialog
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
145 self._error_dialog_label = error_dialog_label
1488
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
146
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
147 self._state_menu = state_menu
1498
fc4169113259 Show popup menu for right click on a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1497
diff changeset
148 self._transition_menu = transition_menu
1478
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
149 pass
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
150
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
151 def show_error(self, msg):
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
152 error_dialog = self._error_dialog
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
153 error_dialog_label = self._error_dialog_label
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
154
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
155 error_dialog_label.set_text(msg)
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
156 error_dialog.show()
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
157 pass
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
158
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
159 def hide_error(self):
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
160 error_dialog = self._error_dialog
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
161 error_dialog.hide()
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
162 pass
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
163
1500
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
164 def show_state_editor(self, state_name='', radius='30', entry_action=''):
1478
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
165 state_name_inp = self._state_name
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
166 state_radius_inp = self._state_radius
1500
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
167 state_entry_action = self._state_entry_action
1478
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
168 state_editor = self._state_editor
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
169
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
170 state_name_inp.set_text(state_name)
1500
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
171 state_radius_inp.set_text(radius)
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
172 state_entry_action.set_text(entry_action)
1478
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
173 state_editor.show()
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
174 pass
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
175
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
176 def hide_state_editor(self):
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
177 state_editor = self._state_editor
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
178 state_editor.hide()
1456
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
179 pass
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
180
1500
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
181 def show_transition_editor(self, cond='', action=''):
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
182 transition_cond = self._transition_cond
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
183 transition_action = self._transition_action
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
184 transition_editor = self._transition_editor
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
185
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
186 transition_cond.set_text(cond)
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
187 transition_action.set_text(action)
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
188 transition_editor.show()
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
189 pass
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
190
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
191 def hide_transition_editor(self):
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
192 transition_editor = self._transition_editor
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
193 transition_editor.hide()
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
194 pass
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
195
1488
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
196 def popup_state_menu(self):
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
197 menu = self._state_menu
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
198 menu.popup(None, None, None, 0, 0)
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
199 pass
1498
fc4169113259 Show popup menu for right click on a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1497
diff changeset
200
fc4169113259 Show popup menu for right click on a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1497
diff changeset
201 def popup_transition_menu(self):
fc4169113259 Show popup menu for right click on a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1497
diff changeset
202 menu = self._transition_menu
fc4169113259 Show popup menu for right click on a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1497
diff changeset
203 menu.popup(None, None, None, 0, 0)
fc4169113259 Show popup menu for right click on a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1497
diff changeset
204 pass
1488
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
205
1456
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
206 def show(self):
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
207 self._main_win.show()
1486
471805e582cc Leave current mode when closing a FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents: 1485
diff changeset
208 self._add_state_button.set_active(True)
1456
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
209 pass
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
210
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
211 def hide(self):
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
212 self._main_win.hide()
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
213 pass
1478
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
214
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
215 def gtk_widget_hide(self, widget, event, *data):
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
216 widget.hide()
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
217 return True
1456
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
218
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
219 def on_start_state_activate(self, *args):
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
220 pass
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
221
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
222 def on_rename_state_activate(self, *args):
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
223 pass
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
224
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
225 def on_remove_state_activate(self, *args):
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
226 pass
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
227
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
228 def on_zoom_out_clicked(self, *args):
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
229 pass
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
230
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
231 def on_zoom_in_clicked(self, *args):
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
232 pass
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
233
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
234 def on_move_state_toggled(self, *args):
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
235 pass
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
236
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
237 def on_add_state_toggled(self, *args):
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
238 pass
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
239
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
240 def on_close_window_activate(self, *args):
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
241 pass
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
242
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
243 def on_FSM_main_win_destroy_event(self, *args):
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
244 pass
1478
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
245
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
246 def on_state_apply_clicked(self, *args):
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
247 pass
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
248
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
249 def on_state_cancel_clicked(self, *args):
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
250 state_editor = self._state_editor
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
251 state_editor.hide()
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
252 pass
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
253
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
254 def on_error_dialog_ok_clicked(self, *args):
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
255 error_dialog = self._error_dialog
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
256 error_dialog.hide()
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
257 pass
1488
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
258
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
259 def on_add_transition_activate(self, *args):
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
260 pass
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
261
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
262 def on_del_state_activate(self, *args):
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
263 pass
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
264
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
265 def on_edit_state_activate(self, *args):
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
266 pass
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
267
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
268 def on_transition_apply_clicked(self, *args):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
269 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
270
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
271 def on_transition_cancel_clicked(self, *args):
1500
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
272 transition_editor = self._transition_editor
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
273 transition_editor.hide()
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
274 pass
1496
042587afed2e Add popup menu for transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1495
diff changeset
275
042587afed2e Add popup menu for transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1495
diff changeset
276 def on_del_transition_activate(self, *args):
042587afed2e Add popup menu for transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1495
diff changeset
277 pass
042587afed2e Add popup menu for transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1495
diff changeset
278
042587afed2e Add popup menu for transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1495
diff changeset
279 def on_edit_transition_activate(self, *args):
042587afed2e Add popup menu for transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1495
diff changeset
280 pass
1456
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
281 pass
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
282
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
283
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
284 class FSM_transition(object):
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
285 _doc = None
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
286 _domview = None
1476
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
287 _fsm_layer = None
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
288 _control_layer = None
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
289 _state = None
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
290 _states = None
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
291 trn_cond = None
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
292 trn_g = None
1473
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
293 _arrow_node = None
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
294 _path_node = None
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
295 _control_points = None
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
296
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
297 def __init__(self, trn_cond):
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
298 self.trn_cond = trn_cond
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
299 pass
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
300
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
301 def init(self, doc, domview, state, states, fsm_layer, control_layer):
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
302 self._doc = doc
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
303 self._domview = domview
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
304 self._state = state
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
305 self._states = states
1476
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
306 self._fsm_layer = fsm_layer
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
307 self._control_layer = control_layer
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
308 pass
1473
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
309
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
310 @staticmethod
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
311 def _update_graph(path, arrow_node, path_node):
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
312 path_txt = 'M %f,%f C %f,%f %f,%f %f,%f' % tuple(path)
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
313 path_node.setAttribute('d', path_txt)
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
314 path_node.setAttribute('style', 'stroke: #000000; stroke-width: 1; '
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
315 'fill: none')
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
316
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
317 # c0 c1 c2 c3 of cubic curve
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
318 c3 = (path[6], path[7])
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
319 c2 = (path[4], path[5])
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
320 c23_v = (c3[0] - c2[0], c3[1] - c2[1])
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
321 c23_len = math.sqrt(c23_v[0] * c23_v[0] + c23_v[1] * c23_v[1])
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
322 adir = (c23_v[0] / c23_len, c23_v[1] / c23_len) # arrow direction
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
323 odir = (-adir[1], adir[0]) # othogonal direction
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
324 arrow_pts = (c3[0], c3[1],
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
325 -adir[0] * 10 + odir[0] * 4, -adir[1] * 10 + odir[1] * 4,
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
326 -odir[0] * 8, -odir[1] * 8)
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
327 arrow_txt = 'M %f,%f l %f,%f l %f,%f z' % arrow_pts
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
328 arrow_node.setAttribute('d', arrow_txt)
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
329 arrow_node.setAttribute('style', 'stroke: #000000; stroke-width: 1; '
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
330 'fill: #000000')
1473
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
331 pass
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
332
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
333 def _draw_transition_real(self, parent, path):
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
334 doc = self._doc
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
335
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
336 trn_g = doc.createElement('svg:g')
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
337
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
338 path_node = doc.createElement('svg:path')
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
339 arrow_node = doc.createElement('svg:path')
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
340 self._update_graph(path, arrow_node, path_node)
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
341
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
342 trn_g.appendChild(path_node)
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
343 trn_g.appendChild(arrow_node)
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
344
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
345 parent.appendChild(trn_g)
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
346
1473
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
347 return trn_g, path_node, arrow_node
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
348
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
349 def _gen_path(self):
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
350 states = self._states
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
351 target_name = self.target
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
352 target_state = states[target_name]
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
353 src_state = self._state
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
354
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
355 src_x, src_y = src_state.xy
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
356 src_r = src_state.r
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
357 target_x, target_y = target_state.xy
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
358 target_r = target_state.r
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
359
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
360 src_target_v = (target_x - src_x, target_y - src_y)
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
361 src_target_len = \
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
362 math.sqrt(src_target_v[0] ** 2 + src_target_v[1] ** 2)
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
363 distance = src_target_len - src_r - target_r
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
364 distance3 = distance / 3
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
365 src_target_uv = (src_target_v[0] / src_target_len,
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
366 src_target_v[1] / src_target_len)
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
367
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
368 c0x = src_x + src_target_uv[0] * src_r
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
369 c0y = src_y + src_target_uv[1] * src_r
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
370 c1x = c0x + src_target_uv[0] * distance3
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
371 c1y = c0y + src_target_uv[1] * distance3
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
372 c3x = target_x - src_target_uv[0] * target_r
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
373 c3y = target_y - src_target_uv[1] * target_r
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
374 c2x = c3x - src_target_uv[0] * distance3
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
375 c2y = c3y - src_target_uv[1] * distance3
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
376
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
377 path = [c0x, c0y, c1x, c1y, c2x, c2y, c3x, c3y]
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
378 return path
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
379
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
380 @property
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
381 def path(self):
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
382 domview = self._domview
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
383 state_name = self._state.state_name
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
384 trn_cond = self.trn_cond
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
385 trn = domview.get_transition(state_name, trn_cond)
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
386 path = trn[3]
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
387
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
388 if not path:
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
389 path = self._gen_path()
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
390 pass
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
391
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
392 return path
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
393
1484
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
394 @property
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
395 def target(self):
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
396 domview = self._domview
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
397 state_name = self._state.state_name
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
398 trn_cond = self.trn_cond
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
399 trn = domview.get_transition(state_name, trn_cond)
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
400 return trn[1]
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
401
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
402 @property
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
403 def state(self):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
404 return self._state
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
405
1500
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
406 @property
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
407 def action(self):
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
408 domview = self._domview
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
409 state_name = self._state.state_name
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
410 trn_cond = self.trn_cond
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
411 trn = domview.get_transition(state_name, trn_cond)
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
412 return trn[2]
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
413
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
414 def draw(self, parent):
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
415 path = self.path
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
416 trn_g, path_node, arrow_node = self._draw_transition_real(parent, path)
1473
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
417 self.trn_g = trn_g
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
418 self._arrow_node = arrow_node
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
419 self._path_node = path_node
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
420 pass
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
421
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
422 def clear(self):
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
423 trn_g = self.trn_g
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
424 parent = trn_g.parent()
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
425 parent.removeChild(trn_g)
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
426 pass
1474
697ebfa9dc47 Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1473
diff changeset
427
697ebfa9dc47 Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1473
diff changeset
428 def update(self):
697ebfa9dc47 Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1473
diff changeset
429 path = self.path
697ebfa9dc47 Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1473
diff changeset
430 arrow_node = self._arrow_node
697ebfa9dc47 Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1473
diff changeset
431 path_node = self._path_node
697ebfa9dc47 Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1473
diff changeset
432 self._update_graph(path, arrow_node, path_node)
697ebfa9dc47 Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1473
diff changeset
433 pass
1484
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
434
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
435 def adjust_by_ends(self):
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
436 states = self._states
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
437
1484
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
438 state = self._state
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
439 state_name = state.state_name
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
440 trn_cond = self.trn_cond
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
441
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
442 path = self.path
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
443
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
444 start_state = self._state
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
445 start_x, start_y = start_state.xy
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
446 start_r = start_state.r
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
447
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
448 target_name = self.target
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
449 stop_state = states[target_name]
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
450 stop_x, stop_y = stop_state.xy
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
451 stop_r = stop_state.r
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
452
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
453 c0x, c0y, c1x, c1y, c2x, c2y, c3x, c3y = tuple(path)
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
454
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
455 c0c1 = (c1x - c0x, c1y - c0y)
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
456 c0c1_len = math.sqrt(c0c1[0] ** 2 + c0c1[1] ** 2)
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
457 start_v = (c0c1[0] / c0c1_len, c0c1[1] / c0c1_len)
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
458
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
459 c3c2 = (c2x - c3x, c2y - c3y)
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
460 c3c2_len = math.sqrt(c3c2[0] ** 2 + c3c2[1] ** 2)
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
461 stop_v = (c3c2[0] / c3c2_len, c3c2[1] / c3c2_len)
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
462
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
463 c0x = start_v[0] * start_r + start_x
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
464 c0y = start_v[1] * start_r + start_y
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
465 c1x = start_v[0] * c0c1_len + c0x
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
466 c1y = start_v[1] * c0c1_len + c0y
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
467 c3x = stop_v[0] * stop_r + stop_x
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
468 c3y = stop_v[1] * stop_r + stop_y
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
469 c2x = stop_v[0] * c3c2_len + c3x
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
470 c2y = stop_v[1] * c3c2_len + c3y
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
471 new_path = [c0x, c0y, c1x, c1y, c2x, c2y, c3x, c3y]
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
472
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
473 domview = self._domview
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
474 domview.set_transition_path(state_name, trn_cond, new_path)
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
475 pass
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
476
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
477 def show_control_points(self):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
478 if not self._control_points:
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
479 doc = self._doc
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
480
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
481 c1 = doc.createElement('svg:circle')
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
482 c1.setAttribute('r', '3')
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
483 c1.setAttribute('style', 'stroke: black; stroke-width: 1; '
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
484 'fill: white')
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
485 l01 = doc.createElement('svg:line')
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
486 l01.setAttribute('style', 'stroke: black; stroke-width: 1; '
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
487 'stroke-dasharray: 3 2')
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
488
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
489 c2 = doc.createElement('svg:circle')
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
490 c2.setAttribute('r', '3')
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
491 c2.setAttribute('style', 'stroke: black; stroke-width: 1; '
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
492 'fill: white')
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
493 l32 = doc.createElement('svg:line')
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
494 l32.setAttribute('style', 'stroke: black; stroke-width: 1; '
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
495 'stroke-dasharray: 3 2')
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
496
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
497 control_layer = self._control_layer
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
498
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
499 control_layer.appendChild(c1)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
500 control_layer.appendChild(l01)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
501 control_layer.appendChild(c2)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
502 control_layer.appendChild(l32)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
503 self._control_points = (c1, l01, c2, l32)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
504 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
505
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
506 c1, l01, c2, l32 = self._control_points
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
507 path = self.path
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
508 c0x, c0y, c1x, c1y, c2x, c2y, c3x, c3y = tuple(path)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
509
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
510 c1.setAttribute('cx', str(c1x))
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
511 c1.setAttribute('cy', str(c1y))
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
512 l01.setAttribute('x1', str(c0x))
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
513 l01.setAttribute('y1', str(c0y))
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
514 l01.setAttribute('x2', str(c1x))
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
515 l01.setAttribute('y2', str(c1y))
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
516
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
517 c2.setAttribute('cx', str(c2x))
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
518 c2.setAttribute('cy', str(c2y))
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
519 l32.setAttribute('x1', str(c3x))
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
520 l32.setAttribute('y1', str(c3y))
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
521 l32.setAttribute('x2', str(c2x))
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
522 l32.setAttribute('y2', str(c2y))
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
523 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
524
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
525 def hide_control_points(self):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
526 if not self._control_points:
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
527 return
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
528
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
529 control_layer = self._control_layer
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
530 for node in self._control_points:
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
531 control_layer.removeChild(node)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
532 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
533 self._control_points = None
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
534 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
535
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
536 def start_hint(self):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
537 path_node = self._path_node
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
538 arrow_node = self._arrow_node
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
539 if path_node:
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
540 path_node.setAttribute('style',
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
541 'stroke: #404040; stroke-width: 3; '
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
542 'fill: none')
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
543 arrow_node.setAttribute('style',
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
544 'stroke: #404040; stroke-width: 2; '
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
545 'fill: #404040')
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
546 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
547 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
548
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
549 def stop_hint(self):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
550 path_node = self._path_node
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
551 arrow_node = self._arrow_node
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
552 if path_node:
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
553 path_node.setAttribute('style',
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
554 'stroke: #000000; stroke-width: 1; ' \
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
555 'fill: none')
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
556 arrow_node.setAttribute('style',
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
557 'stroke: #000000; stroke-width: 1; ' \
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
558 'fill: #000000')
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
559 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
560 pass
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
561 pass
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
562
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
563 class FSM_state(object):
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
564 _doc = None
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
565 _domview = None
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
566 _states = None
1476
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
567 _fsm_layer = None
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
568 _control_layer = None
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
569 state_name = None
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
570 state_g = None
1473
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
571 _text_node = None
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
572 _circle_node = None
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
573 transitions = None
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
574 from_states = None # There is one or more transitions
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
575 # from these states (name).
1480
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
576
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
577 _state_g_hdl_id = None
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
578 _selected_rect = None
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
579
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
580 def __init__(self, state_name):
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
581 self.state_name = state_name
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
582 self.transitions = {}
1485
20cf6ea263c6 Rename from_srcs to from_states
Thinker K.F. Li <thinker@codemud.net>
parents: 1484
diff changeset
583 self.from_states = set()
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
584 pass
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
585
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
586 def init(self, doc, domview, states, fsm_layer, control_layer):
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
587 self._doc = doc
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
588 self._domview = domview
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
589 self._states = states
1476
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
590 self._fsm_layer = fsm_layer
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
591 self._control_layer = control_layer
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
592 pass
1473
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
593
1480
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
594 def _update_graph(self, text_node, text_content, circle_node,
1473
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
595 state_name, r, x, y):
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
596 circle_node.setAttribute('r', str(r))
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
597 circle_node.setAttribute('cx', str(x))
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
598 circle_node.setAttribute('cy', str(y))
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
599 circle_node.setAttribute('style', 'stroke: #000000; stroke-width: 1; '
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
600 'fill: #ffffff')
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
601
1497
08329d3bf452 break a long line
Thinker K.F. Li <thinker@codemud.net>
parents: 1496
diff changeset
602 text_node.setAttribute('style', 'stroke: #000000; fill: #000000; '
08329d3bf452 break a long line
Thinker K.F. Li <thinker@codemud.net>
parents: 1496
diff changeset
603 'font-size: 16px')
1473
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
604
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
605 text_content.setContent(state_name)
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
606
1480
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
607 doc = self._doc
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
608 spdoc = doc.spdoc
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
609 spdoc.ensureUpToDate()
1473
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
610 tx, ty, tw, th = text_node.getBBox()
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
611 text_node.setAttribute('x', str(x - tw / 2))
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
612 text_node.setAttribute('y', str(y + th / 2))
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
613 pass
1480
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
614
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
615 def grab(self, callback):
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
616 assert not self._state_g_hdl_id
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
617
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
618 state_g = self.state_g
1481
28ab64f8581e Moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1480
diff changeset
619 state_g_spitem = state_g.spitem
28ab64f8581e Moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1480
diff changeset
620 state_g_hdl_id = state_g_spitem.connect('mouse-event', callback)
1480
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
621 self._state_g_hdl_id = state_g_hdl_id
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
622 pass
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
623
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
624 def ungrab(self):
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
625 if not self._state_g_hdl:
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
626 return
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
627 state_g = self.state_g
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
628 state_g_hdl_id = self._state_g_hdl_id
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
629 state_g.disconnect(state_g_hdl_id)
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
630 pass
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
631
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
632 def _translate_page_xy(self, x, y):
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
633 doc = self._doc
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
634 root = doc.root()
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
635 page_h_txt = root.getAttribute('height')
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
636 page_h = float(page_h_txt)
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
637 svgx = x
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
638 svgy = page_h - y
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
639 return svgx, svgy
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
640
1480
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
641 def show_selected(self):
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
642 if not self._selected_rect:
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
643 doc = self._doc
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
644 rect = doc.createElement('svg:rect')
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
645 control_layer = self._control_layer
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
646 rect.setAttribute('style',
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
647 'stroke: #404040; stroke-width: 1; '
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
648 'stroke-dasharray: 6 4; fill: none')
1480
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
649 control_layer.appendChild(rect)
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
650 self._selected_rect = rect
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
651 pass
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
652
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
653 state_g = self.state_g
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
654 rect = self._selected_rect
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
655
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
656 px, py, pw, ph = state_g.getBBox()
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
657 x, y = self._translate_page_xy(px, py)
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
658 y = y - ph # px, py is left-bottom corner
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
659
1480
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
660 rect.setAttribute('x', str(x - 2))
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
661 rect.setAttribute('y', str(y - 2))
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
662 rect.setAttribute('width', str(pw + 4))
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
663 rect.setAttribute('height', str(ph + 4))
1480
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
664 pass
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
665
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
666 def hide_selected(self):
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
667 if not self._selected_rect:
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
668 return
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
669
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
670 control_layer = self._control_layer
1480
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
671 rect = self._selected_rect
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
672 control_layer.removeChild(rect)
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
673 self._selected_rect = None
1480
e11ffd5fd609 functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents: 1479
diff changeset
674 pass
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
675
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
676 def _draw_state_real(self, parent, state_name, r, x, y):
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
677 doc = self._doc
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
678
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
679 state_g = doc.createElement('svg:g')
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
680
1473
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
681 text = doc.createElement('svg:text')
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
682 circle = doc.createElement('svg:circle')
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
683 text_content = doc.createTextNode(state_name)
1473
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
684
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
685 text.appendChild(text_content)
1473
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
686 state_g.appendChild(circle)
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
687 state_g.appendChild(text)
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
688 parent.appendChild(state_g)
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
689
1473
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
690 self._update_graph(text, text_content, circle, state_name, r, x, y)
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
691
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
692 return state_g, text, text_content, circle
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
693
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
694 @property
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
695 def r(self):
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
696 domview = self._domview
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
697 state_name = self.state_name
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
698 r = domview.get_state_r(state_name)
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
699 return r
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
700
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
701 @property
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
702 def xy(self):
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
703 domview = self._domview
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
704 state_name = self.state_name
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
705 xy = domview.get_state_xy(state_name)
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
706 return xy
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
707
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
708 @property
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
709 def all_transitions(self):
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
710 domview = self._domview
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
711 state_name = self.state_name
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
712 conds = domview.all_transitions(state_name)
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
713 return conds
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
714
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
715 def _load_transition_domview(self, parent, condition):
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
716 domview = self._domview
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
717 states = self._states
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
718
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
719 trn = FSM_transition(condition)
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
720 trn.init(self._doc, domview, self, states,
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
721 self._fsm_layer, self._control_layer)
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
722 trn.draw(parent)
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
723 self.transitions[condition] = trn
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
724 pass
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
725
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
726 def draw(self, parent):
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
727 state_name = self.state_name
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
728
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
729 r = self.r
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
730 x, y = self.xy
1473
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
731 state_g, text_node, text_content, circle_node = \
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
732 self._draw_state_real(parent, state_name, r, x, y)
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
733 self.state_g = state_g
1473
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
734 self._text_node = text_node
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
735 self._text_content = text_content
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
736 self._circle_node = circle_node
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
737
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
738 for trn_cond in self.all_transitions:
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
739 self._load_transition_domview(parent, trn_cond)
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
740 pass
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
741 pass
1473
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
742
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
743 def clear(self):
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
744 state_g = self.state_g
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
745 parent = state_g.parent()
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
746 parent.removeChild(state_g)
e807ad5aeb91 Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1472
diff changeset
747 pass
1474
697ebfa9dc47 Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1473
diff changeset
748
697ebfa9dc47 Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1473
diff changeset
749 def update(self):
697ebfa9dc47 Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1473
diff changeset
750 text_node = self._text_node
697ebfa9dc47 Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1473
diff changeset
751 text_content = self._text_content
697ebfa9dc47 Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1473
diff changeset
752 circle_node = self._circle_node
697ebfa9dc47 Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1473
diff changeset
753 state_name = self.state_name
697ebfa9dc47 Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1473
diff changeset
754 r = self.r
697ebfa9dc47 Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1473
diff changeset
755 x, y = self.xy
1481
28ab64f8581e Moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1480
diff changeset
756 self._update_graph(text_node, text_content, circle_node, state_name,
1474
697ebfa9dc47 Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1473
diff changeset
757 r, x, y)
697ebfa9dc47 Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1473
diff changeset
758 pass
1484
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
759
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
760 ## \brief Tell states there are transitions to them.
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
761 #
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
762 # This function is only called when loading states of a FSM from
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
763 # domview. When loading, not all states was loaded that target
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
764 # state may not in the memory. So, we call this function after
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
765 # all states being loaded. Transitions added later does need to
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
766 # call this function to notify end state.
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
767 #
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
768 def tell_target_states(self):
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
769 states = self._states
1484
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
770 transitions = self.transitions
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
771 target_state_names = [trn.target for trn in transitions.values()]
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
772 target_states = [states[target_name]
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
773 for target_name in target_state_names]
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
774 state_name = self.state_name
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
775 for target_state in target_states:
1485
20cf6ea263c6 Rename from_srcs to from_states
Thinker K.F. Li <thinker@codemud.net>
parents: 1484
diff changeset
776 target_state.from_states.add(state_name)
1484
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
777 pass
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
778 pass
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
779
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
780 def adjust_transitions(self):
1484
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
781 import itertools
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
782
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
783 states = self._states
1484
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
784
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
785 for trn in self.transitions.values():
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
786 trn.adjust_by_ends()
1484
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
787 trn.update()
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
788 pass
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
789
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
790 state_name = self.state_name
1485
20cf6ea263c6 Rename from_srcs to from_states
Thinker K.F. Li <thinker@codemud.net>
parents: 1484
diff changeset
791 from_states = [states[from_state_name]
20cf6ea263c6 Rename from_srcs to from_states
Thinker K.F. Li <thinker@codemud.net>
parents: 1484
diff changeset
792 for from_state_name in self.from_states]
1484
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
793 states_transitions = [state.transitions.values()
1485
20cf6ea263c6 Rename from_srcs to from_states
Thinker K.F. Li <thinker@codemud.net>
parents: 1484
diff changeset
794 for state in from_states]
1484
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
795 in_state_transitions = [[trn for trn in state_transitions
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
796 if trn.target == state_name]
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
797 for state_transitions in states_transitions]
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
798 in_transitions = itertools.chain(*in_state_transitions)
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
799 for trn in in_transitions:
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
800 trn.adjust_by_ends()
1484
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
801 trn.update()
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
802 pass
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
803 pass
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
804
1501
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
805 def add_transition(self, parent, condition):
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
806 self._load_transition_domview(parent, condition)
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
807
1501
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
808 transitions = self.transitions
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
809 trn = transitions[condition]
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
810 target_name = trn.target
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
811
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
812 state_name = self.state_name
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
813 states = self._states
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
814 target_state = states[target_name]
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
815 target_state.from_states.add(state_name)
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
816 pass
1501
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
817
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
818 ## \brief Remove state from from_states of a given target.
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
819 #
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
820 # The state was removed only when there is no transition targeted
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
821 # on given target state.
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
822 #
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
823 def _rm_from_states_for_target(self, target_name):
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
824 transitions = self.transitions
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
825 same_targets = [trn.target for trn in transitions.values()
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
826 if trn.target == target_name]
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
827 same_target_cnt = len(same_targets)
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
828 if same_target_cnt == 0:
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
829 states = self._states
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
830 target_state = states[target_name]
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
831 state_name = self.state_name
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
832 target_state.from_states.remove(state_name)
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
833 pass
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
834 pass
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
835
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
836 def rm_transition(self, condition):
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
837 transitions = self.transitions
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
838 trn = transitions[condition]
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
839 target_name = trn.target
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
840 del transitions[condition]
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
841 trn.clear()
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
842
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
843 self._rm_from_states_for_target(target_name)
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
844 pass
1502
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
845
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
846 def start_hint(self):
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
847 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
848
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
849 def stop_hint(self):
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
850 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
851 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
852
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
853
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
854 class _select_manager(object):
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
855 selected_state = None
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
856 selected_transition = None
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
857
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
858 def deselect(self):
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
859 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
860
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
861 def select_state(self, state):
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
862 self.deselect()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
863 self.selected_state = state
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
864 state.show_selected()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
865 def hide():
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
866 state.hide_selected()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
867 self.selected_state = None
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
868 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
869 self.deselect = hide
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
870 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
871
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
872 def select_transition(self, transition):
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
873 self.deselect()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
874 self.selected_transition = transition
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
875 transition.show_control_points()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
876 def hide():
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
877 transition.hide_control_points()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
878 self.selected_transition = None
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
879 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
880 self.deselect = hide
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
881 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
882 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
883
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
884
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
885 class _FSM_popup(object):
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
886 _window = None
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
887 _domview = None
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
888
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
889 _menu_state = None
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
890 _menu_transition = None
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
891
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
892 _candidate_target = None
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
893
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
894 _select = None
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
895
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
896 def __init__(self, window, domview_ui, select_man):
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
897 super(_FSM_popup, self).__init__()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
898 self._window = window
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
899 self._domview = domview_ui
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
900 self._select = select_man
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
901 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
902
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
903 def _show_state_menu(self, state):
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
904 self._menu_state = state
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
905 window = self._window
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
906 window.popup_state_menu()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
907 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
908
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
909 def _show_transition_menu(self, trn):
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
910 self._menu_transition = trn
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
911 window = self._window
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
912 window.popup_transition_menu()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
913 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
914
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
915 ## \brief Handle mouse events for state objects.
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
916 #
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
917 # This method must be called by mode object to handle mouse events
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
918 # that is not handled by them.
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
919 #
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
920 def _handle_state_mouse_events(self, state, evtype, button, x, y):
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
921 if evtype == pybInkscape.PYSPItem.PYB_EVENT_BUTTON_PRESS and \
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
922 button == 3:
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
923 self._show_state_menu(state)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
924 elif evtype == pybInkscape.PYSPItem.PYB_EVENT_MOUSE_ENTER:
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
925 state.start_hint()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
926 elif evtype == pybInkscape.PYSPItem.PYB_EVENT_MOUSE_LEAVE:
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
927 state.stop_hint()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
928 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
929 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
930
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
931 ## \brief Handle mouse events for transition objects.
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
932 #
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
933 # This method must be called by mode object to handle mouse events
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
934 # that is not handled by them.
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
935 #
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
936 def _handle_transition_mouse_events(self, trn, evtype, button, x, y):
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
937 if evtype == pybInkscape.PYSPItem.PYB_EVENT_BUTTON_PRESS and \
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
938 button == 3:
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
939 self._show_transition_menu(trn)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
940 elif evtype == pybInkscape.PYSPItem.PYB_EVENT_MOUSE_ENTER:
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
941 trn.start_hint()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
942 elif evtype == pybInkscape.PYSPItem.PYB_EVENT_MOUSE_LEAVE:
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
943 trn.stop_hint()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
944 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
945 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
946
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
947 def _handle_select_transition_target(self, state, evtype, button, x, y):
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
948 if self._candidate_target != state and self._menu_state != state:
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
949 if self._candidate_target:
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
950 self._candidate_target.hide_selected()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
951 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
952 self._candidate_target = state
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
953 state.show_selected()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
954 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
955
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
956 if evtype != pybInkscape.PYSPItem.PYB_EVENT_BUTTON_RELEASE:
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
957 return
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
958 if button != 1:
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
959 return
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
960
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
961 window = self._window
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
962
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
963 if state == self._menu_state:
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
964 window.pop_grabs()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
965 return
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
966
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
967 fsm_layer = window._fsm_layer
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
968
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
969 target_state = state
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
970 target_name = target_state.state_name
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
971 src_state = self._menu_state
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
972 src_name = src_state.state_name
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
973 cond = ''
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
974
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
975 domview = self._domview
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
976 domview.add_transition(src_name, cond, target_name)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
977 src_state.add_transition(fsm_layer, cond)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
978
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
979 trn = src_state.transitions[cond]
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
980 window._install_transition_event_handler(trn)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
981
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
982 window.pop_grabs()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
983 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
984
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
985 def _handle_add_transition(self, *args):
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
986 def restore_bg(item, evtype, *args):
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
987 if evtype != pybInkscape.PYSPItem.PYB_EVENT_BUTTON_PRESS:
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
988 if self._candidate_target:
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
989 self._candidate_target.hide_selected()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
990 self._candidate_target = None
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
991 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
992 return
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
993 self._select.deselect()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
994 window.pop_grabs()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
995 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
996
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
997 window = self._window
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
998 window.push_grabs()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
999 window.ungrab_bg()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1000 window.grab_bg(restore_bg)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1001
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1002 window.ungrab_state()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1003 window.grab_state(self._handle_select_transition_target)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1004 self._select.select_state(self._menu_state)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1005 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1006
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1007 def _handle_edit_transition(self, *args):
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1008 trn = self._select.selected_transition
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1009
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1010 cond = trn.trn_cond
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1011 action = trn.action or ''
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1012
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1013 window = self._window
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1014 window.show_transition_editor(cond, action)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1015 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1016
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1017 def _handle_transition_apply(self, *args):
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1018 trn = self._select.selected_transition
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1019 window = self._window
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1020 domview = self._domview
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1021 transition_cond = window._transition_cond
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1022 transition_action = window._transition_action
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1023
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1024 trn_cond = trn.trn_cond
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1025 trn_action = trn.action
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1026 trn_state = trn.state
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1027 trn_state_name = trn_state.state_name
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1028
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1029 new_cond = transition_cond.get_text()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1030 new_action = transition_action.get_text()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1031
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1032 if new_action != trn_action:
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1033 domview.set_transition_action(trn_state_name, trn_cond, new_action)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1034 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1035
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1036 if new_cond != trn_cond:
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1037 trn_state.rm_transition(trn_cond)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1038
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1039 domview.chg_transition_cond(trn_state_name, trn_cond, new_cond)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1040
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1041 fsm_layer = window._fsm_layer
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1042 trn_state.add_transition(fsm_layer, new_cond)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1043
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1044 transitions = trn_state.transitions
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1045 new_trn = transitions[new_cond]
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1046 window._install_transition_event_handler(new_trn)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1047 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1048
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1049 window.hide_transition_editor()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1050 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1051
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1052 def _handle_edit_state(self, *args):
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1053 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1054
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1055 def popup_install_handler(self):
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1056 window = self._window
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1057
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1058 window.grab_add_transition(self._handle_add_transition)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1059 window.grab_edit_transition(self._handle_edit_transition)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1060 window.grab_edit_state(self._handle_edit_state)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1061 window.grab_transition_apply(self._handle_transition_apply)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1062 pass
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
1063 pass
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
1064
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1065
1487
3aba29609607 Rename state modes
Thinker K.F. Li <thinker@codemud.net>
parents: 1486
diff changeset
1066 class _FSM_move_state_mode(object):
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1067 __metaclass__ = data_monitor.data_monitor
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1068 __data_monitor_prefix__ = 'on_'
1502
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1069
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1070 _popup = None
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1071
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1072 _window = None
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1073 _domview = None
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1074
1502
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1075 _select = None
1498
fc4169113259 Show popup menu for right click on a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1497
diff changeset
1076
1502
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1077 def __init__(self, window, domview_ui, select_man):
1487
3aba29609607 Rename state modes
Thinker K.F. Li <thinker@codemud.net>
parents: 1486
diff changeset
1078 super(_FSM_move_state_mode, self).__init__()
1483
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1079
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1080 self._window = window
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1081 self._domview = domview_ui
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1082 self._locker = domview_ui
1502
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1083
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1084 self._popup = _FSM_popup(window, domview_ui, select_man)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1085 self._select = select_man
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1086 pass
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1087
1488
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
1088 def on_move_state_background(self, item, evtype, button, x, y):
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1089 if evtype == pybInkscape.PYSPItem.PYB_EVENT_BUTTON_RELEASE:
1502
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1090 self._select.deselect()
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1091 pass
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1092 pass
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1093
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1094 def _handle_move_state_state(self, state, evtype, button, x, y):
1484
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
1095 window = self._window
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
1096
1488
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
1097 def moving_state(item, evtype, button, x, y):
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1098 if evtype == pybInkscape.PYSPItem.PYB_EVENT_BUTTON_RELEASE:
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1099 window.ungrab_mouse()
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1100 pass
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1101 new_state_x = orign_state_x + start_x - x
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1102 new_state_y = orign_state_y + start_y - y
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1103
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1104 domview = self._domview
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1105 domview.set_state_xy(state.state_name, x, y)
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1106 state.update()
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1107 state.adjust_transitions()
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1108 state.show_selected()
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1109 pass
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1110
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1111 window = self._window
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1112
1488
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
1113 if evtype == pybInkscape.PYSPItem.PYB_EVENT_BUTTON_PRESS and \
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
1114 button == 1:
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1115 start_x = x
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1116 start_y = y
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1117 orign_state_x, orign_state_y = state.xy
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1118
1502
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1119 self._select.select_state(state)
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1120 window.grab_mouse(moving_state)
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1121 pass
1502
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1122 elif evtype == pybInkscape.PYSPItem.PYB_EVENT_BUTTON_RELEASE and \
1488
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
1123 button == 1:
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1124 window.ungrab_mouse()
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1125 pass
1502
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1126 else:
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1127 self._popup._handle_state_mouse_events(state, evtype, button, x, y)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1128 pass
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1129 pass
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1130
1494
ac390af12152 Add comment and rename methods
Thinker K.F. Li <thinker@codemud.net>
parents: 1493
diff changeset
1131 ## \brief Install event handler for control points of a transitions.
ac390af12152 Add comment and rename methods
Thinker K.F. Li <thinker@codemud.net>
parents: 1493
diff changeset
1132 #
ac390af12152 Add comment and rename methods
Thinker K.F. Li <thinker@codemud.net>
parents: 1493
diff changeset
1133 def _install_trn_cps_mouse(self, trn):
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1134 c1, l01, c2, l32 = trn._control_points
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1135 path = trn.path
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1136 c0x, c0y, c1x, c1y, c2x, c2y, c3x, c3y = tuple(path)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1137
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1138 state_src = trn.state
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1139 target_name = trn.target
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1140 states = trn._states
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1141 state_target = states[target_name]
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1142 domview = self._domview
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1143 window = self._window
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1144
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1145 def c1_update(rx, ry):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1146 nc1x = c1x + rx
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1147 nc1y = c1y + ry
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1148 cx, cy = state_src.xy
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1149 r = state_src.r
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1150
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1151 cv = nc1x - cx, nc1y - cy
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1152 cv_len = math.sqrt(cv[0] ** 2 + cv[1] ** 2)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1153 nc0x = cx + cv[0] * r / cv_len
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1154 nc0y = cy + cv[1] * r / cv_len
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1155
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1156 path = list(trn.path)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1157 path[:4] = [nc0x, nc0y, nc1x, nc1y]
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1158
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1159 state_name = state_src.state_name
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1160 cond = trn.trn_cond
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1161 domview.set_transition_path(state_name, cond, path)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1162
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1163 trn.show_control_points()
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1164 trn.update()
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1165 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1166
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1167 def c1_start():
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1168 def relay_event(item, evtype, button, x, y):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1169 c1_dragger.mouse_event(evtype, button, x, y)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1170 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1171
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1172 window.ungrab_bg()
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1173 window.grab_bg(relay_event)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1174 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1175
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1176 def c1_stop(rx, ry):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1177 window.ungrab_bg()
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1178 window.grab_bg(self.on_move_state_background)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1179 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1180
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1181 def c2_update(rx, ry):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1182 nc2x = c2x + rx
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1183 nc2y = c2y + ry
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1184 cx, cy = state_target.xy
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1185 r = state_target.r
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1186
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1187 cv = nc2x - cx, nc2y - cy
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1188 cv_len = math.sqrt(cv[0] ** 2 + cv[1] ** 2)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1189 nc3x = cx + cv[0] * r / cv_len
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1190 nc3y = cy + cv[1] * r / cv_len
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1191
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1192 path = list(trn.path)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1193 path[4:] = [nc2x, nc2y, nc3x, nc3y]
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1194
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1195 state_name = state_src.state_name
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1196 cond = trn.trn_cond
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1197 domview.set_transition_path(state_name, cond, path)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1198
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1199 trn.show_control_points()
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1200 trn.update()
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1201 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1202
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1203 def c2_start():
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1204 def relay_event(item, evtype, button, x, y):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1205 c2_dragger.mouse_event(evtype, button, x, y)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1206 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1207
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1208 window.ungrab_bg()
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1209 window.grab_bg(relay_event)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1210 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1211
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1212 def c2_stop(rx, ry):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1213 window.ungrab_bg()
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1214 window.grab_bg(self.on_move_state_background)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1215 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1216
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1217 c1_dragger = _dragger()
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1218 c1_dragger.update = c1_update
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1219 c1_dragger.start_drag = c1_start
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1220 c1_dragger.stop_drag = c1_stop
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1221 c1_dragger.connect(c1)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1222
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1223 c2_dragger = _dragger()
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1224 c2_dragger.update = c2_update
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1225 c2_dragger.start_drag = c2_start
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1226 c2_dragger.stop_drag = c2_stop
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1227 c2_dragger.connect(c2)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1228 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1229
1494
ac390af12152 Add comment and rename methods
Thinker K.F. Li <thinker@codemud.net>
parents: 1493
diff changeset
1230 ## \brief A transition was selected.
ac390af12152 Add comment and rename methods
Thinker K.F. Li <thinker@codemud.net>
parents: 1493
diff changeset
1231 #
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1232 def _select_transition(self, trn):
1502
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1233 self._select.select_transition(trn)
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1234
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1235 trn.stop_hint()
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1236 window = self._window
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1237 window.ungrab_bg()
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1238
1494
ac390af12152 Add comment and rename methods
Thinker K.F. Li <thinker@codemud.net>
parents: 1493
diff changeset
1239 self._install_trn_cps_mouse(trn)
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1240 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1241
1494
ac390af12152 Add comment and rename methods
Thinker K.F. Li <thinker@codemud.net>
parents: 1493
diff changeset
1242 ## \brief Hint for mouse over a transition.
ac390af12152 Add comment and rename methods
Thinker K.F. Li <thinker@codemud.net>
parents: 1493
diff changeset
1243 #
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1244 def _hint_transition(self, trn):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1245 def stop_hint(*args):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1246 trn.stop_hint()
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1247 window.ungrab_bg()
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1248 window.grab_bg(self.on_move_state_background)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1249 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1250
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1251 trn.start_hint()
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1252
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1253 window = self._window
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1254 window.ungrab_bg()
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1255 window.grab_bg(stop_hint)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1256 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1257
1500
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
1258 def _handle_del_transition(self, *args):
1498
fc4169113259 Show popup menu for right click on a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1497
diff changeset
1259 pass
fc4169113259 Show popup menu for right click on a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1497
diff changeset
1260
fc4169113259 Show popup menu for right click on a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1497
diff changeset
1261 ## \brief Handle mouse events when selecting no transition.
fc4169113259 Show popup menu for right click on a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1497
diff changeset
1262 #
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1263 def _handle_transitoin_mouse_events(self, trn, evtype, button, x, y):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1264 if evtype == pybInkscape.PYSPItem.PYB_EVENT_BUTTON_RELEASE and \
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1265 button == 1:
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1266 self._select_transition(trn)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1267 elif evtype == pybInkscape.PYSPItem.PYB_EVENT_MOUSE_ENTER:
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1268 self._hint_transition(trn)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1269 pass
1502
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1270 else:
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1271 self._popup._handle_transition_mouse_events(trn, evtype, button,
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1272 x, y)
1498
fc4169113259 Show popup menu for right click on a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1497
diff changeset
1273 pass
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1274 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1275
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1276 def activate(self):
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1277 window = self._window
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1278 window._emit_leave_mode()
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1279 window._clear_leave_mode_cb()
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1280 window.ungrab_all()
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1281
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1282 window.grab_bg(self.on_move_state_background)
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1283 window.grab_state(self._handle_move_state_state)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1284 window.grab_transition(self._handle_transitoin_mouse_events)
1502
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1285 #window.grab_edit_transition(self._handle_edit_transition)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1286 #window.grab_transition_apply(self._handle_transition_apply)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1287
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1288 self._popup.popup_install_handler()
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1289 pass
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1290
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1291 def deactivate(self):
1502
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1292 self._select.deselect()
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1293 pass
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1294 pass
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1295
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1296
1487
3aba29609607 Rename state modes
Thinker K.F. Li <thinker@codemud.net>
parents: 1486
diff changeset
1297 class _FSM_add_state_mode(object):
1483
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1298 __metaclass__ = data_monitor.data_monitor
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1299 __data_monitor_prefix__ = 'on_'
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1300
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1301 _window = None
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1302 _domview = None
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1303
1483
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1304 _saved_x = 0
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1305 _saved_y = 0
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1306
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1307 _select_state = None
1491
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1308 _candidate_state = None
1502
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1309
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1310 _select = None
1498
fc4169113259 Show popup menu for right click on a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1497
diff changeset
1311
1502
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1312 def __init__(self, window, domview_ui, select_man):
1487
3aba29609607 Rename state modes
Thinker K.F. Li <thinker@codemud.net>
parents: 1486
diff changeset
1313 super(_FSM_add_state_mode, self).__init__()
1483
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1314
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1315 self._window = window
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1316 self._domview = domview_ui
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1317 self._locker = domview_ui
1502
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1318
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1319 self._select = select_man
1483
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1320 pass
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1321
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1322 def handle_new_state(self):
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1323 import traceback
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1324
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1325 domview = self._domview
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1326 window = self._window
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1327 x, y = window._translate_xy(self._saved_x, self._saved_y)
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1328
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1329 state_name = window._state_name.get_text()
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1330 r_txt = window._state_radius.get_text()
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1331 try:
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1332 r = float(r_txt)
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1333 except ValueError:
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1334 traceback.print_exc()
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1335 window.show_error('Invalid value: "%s" is not a valid value '
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1336 'for radius.' % (r_txt))
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1337 return
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1338
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1339 try:
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1340 domview.add_state(state_name)
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1341 except:
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1342 traceback.print_exc()
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1343 window.show_error('Invalid state name: "%s" is existing' %
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1344 (state_name))
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1345 return
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1346 domview.set_state_xy(state_name, x, y)
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1347 domview.set_state_r(state_name, r)
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1348
1484
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
1349 window._load_new_state_incr(state_name)
1483
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1350
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1351 window.hide_state_editor()
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1352 pass
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1353
1488
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
1354 def on_add_state_background(self, item, evtype, button, x, y):
1483
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1355 window = self._window
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1356
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1357 if evtype == pybInkscape.PYSPItem.PYB_EVENT_BUTTON_RELEASE and \
1488
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
1358 button == 1:
1483
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1359 self._saved_x = x
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1360 self._saved_y = y
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1361 window.show_state_editor()
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1362 pass
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1363 pass
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1364
1491
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1365 def _stop_select_target(self):
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1366 self.deactivate()
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1367 self.activate()
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1368 pass
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1369
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1370 def _handle_select_transition_target(self, state, evtype, button, x, y):
1491
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1371 if self._candidate_state != state and self._select_state != state:
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1372 if self._candidate_state:
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1373 self._candidate_state.hide_selected()
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1374 pass
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1375 self._candidate_state = state
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1376 state.show_selected()
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1377 pass
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1378
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1379 if evtype != pybInkscape.PYSPItem.PYB_EVENT_BUTTON_RELEASE:
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1380 return
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1381 if button != 1:
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1382 return
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1383
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1384 if state == self._select_state:
1491
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1385 self._stop_select_target()
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1386 return
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1387
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1388 window = self._window
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1389 fsm_layer = window._fsm_layer
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1390
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1391 target_state = state
1501
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
1392 target_name = target_state.state_name
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1393 src_state = self._select_state
1501
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
1394 src_name = src_state.state_name
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1395 cond = ''
1501
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
1396
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
1397 domview = self._domview
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
1398 domview.add_transition(src_name, cond, target_name)
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
1399 src_state.add_transition(fsm_layer, cond)
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
1400
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
1401 trn = src_state.transitions[cond]
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
1402 window._install_transition_event_handler(trn)
1491
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1403
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1404 self._stop_select_target()
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1405 pass
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1406
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1407 def _handle_add_transition(self, *args):
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1408 def restore_bg(item, evtype, *args):
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1409 if evtype != pybInkscape.PYSPItem.PYB_EVENT_BUTTON_PRESS:
1491
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1410 if self._candidate_state:
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1411 self._candidate_state.hide_selected()
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1412 self._candidate_state = None
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1413 pass
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1414 return
1491
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1415 self._stop_select_target()
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1416 pass
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1417
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1418 window = self._window
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1419 window.ungrab_bg()
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1420 window.grab_bg(restore_bg)
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1421
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1422 window.ungrab_state()
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1423 window.grab_state(self._handle_select_transition_target)
1491
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1424 self._select_state.show_selected()
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1425 pass
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1426
1488
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
1427 def _handle_state_mouse_events(self, state, evtype, button, x, y):
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
1428 if evtype == pybInkscape.PYSPItem.PYB_EVENT_BUTTON_RELEASE and \
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
1429 button == 3:
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1430 self._select_state = state
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1431
1488
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
1432 window = self._window
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
1433 window.popup_state_menu()
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
1434 pass
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
1435 pass
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
1436
1483
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1437 def activate(self):
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1438 window = self._window
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1439
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1440 window._emit_leave_mode()
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1441 window.ungrab_all()
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1442
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1443 window.grab_bg(self.on_add_state_background)
1488
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
1444 window.grab_state(self._handle_state_mouse_events)
1483
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1445 pass
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1446
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1447 def deactivate(self):
1491
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1448 if self._select_state:
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1449 self._select_state.hide_selected()
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1450 pass
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1451 if self._candidate_state:
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1452 self._candidate_state.hide_selected()
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1453 self._candidate_state = None
06c101bba830 Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents: 1490
diff changeset
1454 pass
1483
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1455 pass
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1456 pass
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1457
1456
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1458 class FSM_window(FSM_window_base):
1458
59b90d7fcf57 Lock UI event handlers for FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents: 1457
diff changeset
1459 __metaclass__ = data_monitor.data_monitor
59b90d7fcf57 Lock UI event handlers for FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents: 1457
diff changeset
1460 __data_monitor_prefix__ = 'on_'
1476
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1461
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1462 _background = None
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1463 _fsm_layer = None
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1464 _control_layer = None
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1465 width = 1024
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1466 height = 768
1478
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1467
1489
1e607ce4bf7d Rename FSM_window._grab_hdl to _grab_mouse_hdl
Thinker K.F. Li <thinker@codemud.net>
parents: 1488
diff changeset
1468 _grab_mouse_hdl = None
1478
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1469 _bg_hdl = None
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1470
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1471 _leave_mode_cb = None
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1472 _move_state_mode = None
1483
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1473 _add_state_mode = None
1481
28ab64f8581e Moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1480
diff changeset
1474 _state_mouse_event_handler = None
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1475 _add_transition_cb = None
1500
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
1476 _edit_transition_cb = None
1501
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
1477 _transition_apply_cb = None
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1478 _transition_mouse_event_handler = None
1502
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1479 _edit_state_cb = None
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1480
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1481 _grab_stack = None
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1482
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1483 _select = None
1458
59b90d7fcf57 Lock UI event handlers for FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents: 1457
diff changeset
1484
59b90d7fcf57 Lock UI event handlers for FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents: 1457
diff changeset
1485 def __init__(self, domview_ui, close_cb, destroy_cb):
1456
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1486 super(FSM_window, self).__init__()
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1487
1458
59b90d7fcf57 Lock UI event handlers for FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents: 1457
diff changeset
1488 self._locker = domview_ui
1467
6927debad4ee Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents: 1458
diff changeset
1489
6927debad4ee Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents: 1458
diff changeset
1490 self._domview = domview_ui
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
1491 self._states = {}
1458
59b90d7fcf57 Lock UI event handlers for FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents: 1457
diff changeset
1492
1457
416a18409603 Show an empty document in SVG viewer widget
Thinker K.F. Li <thinker@codemud.net>
parents: 1456
diff changeset
1493 self._close_cb = close_cb # callback to close editor window (hide)
416a18409603 Show an empty document in SVG viewer widget
Thinker K.F. Li <thinker@codemud.net>
parents: 1456
diff changeset
1494 self._destroy_cb = destroy_cb # callback to destroy editor window
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1495
1502
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1496 _select = _select_manager()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1497 self._select = _select
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1498
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1499 self._move_state_mode = _FSM_move_state_mode(self, domview_ui, _select)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1500 self._add_state_mode = _FSM_add_state_mode(self, domview_ui, _select)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1501
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1502 self._grab_stack = []
1456
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1503 pass
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1504
1476
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1505 def _init_layers(self):
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1506 doc = self._doc()
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1507 root = self._root()
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1508
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1509 root.setAttribute('inkscape:groupmode', 'layer')
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1510
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1511 background = doc.createElement('svg:rect')
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1512 background.setAttribute('x', '0')
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1513 background.setAttribute('y', '0')
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1514 background.setAttribute('width', str(self.width))
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1515 background.setAttribute('height', str(self.height))
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1516 background.setAttribute('style', 'fill: #ffffff')
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1517 root.appendChild(background)
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1518 self._background = background
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1519
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1520 fsm_layer = doc.createElement('svg:g')
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1521 fsm_layer.setAttribute('inkscape:groupmode', 'layer')
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1522 root.appendChild(fsm_layer)
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1523 self._fsm_layer = fsm_layer
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1524
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1525 control_layer = doc.createElement('svg:g')
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1526 control_layer.setAttribute('inkscape:groupmode', 'layer')
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1527 root.appendChild(control_layer)
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1528 self._control_layer = control_layer
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1529 pass
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1530
1469
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1531 def _doc(self):
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1532 view_widget = self._view_widget
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1533 view = view_widget.view
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1534 doc = view.doc().rdoc
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1535 return doc
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1536
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1537 def _root(self):
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1538 doc = self._doc()
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1539 root = doc.root()
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1540 return root
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1541
1478
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1542 def _translate_xy(self, x, y):
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1543 return x, y
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1544
1469
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1545 def _clear_view(self):
1476
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1546 if not self._background:
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1547 self._init_layers()
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1548 return
1469
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1549
1476
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1550 children = [child for child in self._fsm_layer.childList()] + \
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1551 [child for child in self._control_layer.childList()]
1469
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1552 for child in children:
1476
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1553 parent = child.parent()
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1554 parent.removeChild(child)
1469
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1555 pass
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1556
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
1557 self._states = {}
1469
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1558 pass
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1559
1478
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1560 def _draw_state_domview(self, state_name):
1469
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1561 domview = self._domview
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
1562 doc = self._doc()
1476
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1563 fsm_layer = self._fsm_layer
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1564 states = self._states
1472
7cb7abb5063b Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1471
diff changeset
1565
1478
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1566 state = FSM_state(state_name)
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1567 state.init(doc, domview, states, self._fsm_layer, self._control_layer)
1478
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1568 self._states[state_name] = state
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1569
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1570 state.draw(fsm_layer)
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1571 pass
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1572
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1573 def _set_leave_mode_cb(self, callback):
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1574 self._leave_mode_cb = callback
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1575 pass
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1576
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1577 def _clear_leave_mode_cb(self):
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1578 self._leave_mode_cb = None
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1579 pass
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1580
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1581 def _emit_leave_mode(self):
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1582 if self._leave_mode_cb:
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1583 self._leave_mode_cb()
1486
471805e582cc Leave current mode when closing a FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents: 1485
diff changeset
1584 self._leave_mode_cb = None
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1585 pass
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1586 pass
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1587
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1588 def ungrab_all(self):
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1589 self.ungrab_bg()
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1590 self.ungrab_mouse()
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1591 self.ungrab_state()
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1592 self.ungrab_add_transition()
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1593 self.ungrab_transition()
1500
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
1594 self.ungrab_edit_transition()
1502
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1595 self.ungrab_edit_state()
1501
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
1596 self.ungrab_transition_apply()
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1597 pass
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1598
1502
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1599 def save_grabs(self):
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1600 save = (self._bg_hdl,
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1601 self._grab_mouse_hdl,
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1602 self._state_mouse_event_handler,
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1603 self._add_transition_cb,
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1604 self._edit_transition_cb,
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1605 self._transition_apply_cb,
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1606 self._edit_state_cb)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1607 return save
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1608
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1609 def restore_grabs(self, save):
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1610 self._bg_hdl, \
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1611 self._grab_mouse_hdl, \
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1612 self._state_mouse_event_handler, \
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1613 self._add_transition_cb, \
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1614 self._edit_transition_cb, \
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1615 self._transition_apply_cb, \
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1616 self._edit_state_cb \
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1617 = save
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1618 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1619
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1620 def push_grabs(self):
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1621 save = self.save_grabs()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1622 self._grab_stack.append(save)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1623 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1624
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1625 def pop_grabs(self):
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1626 save = self._grab_stack.pop()
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1627 self.restore_grabs(save)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1628 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1629
1488
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
1630 def on_state_mouse_event(self, state, evtype, button, x, y):
1481
28ab64f8581e Moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1480
diff changeset
1631 if self._state_mouse_event_handler:
1488
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
1632 self._state_mouse_event_handler(state, evtype, button, x, y)
1481
28ab64f8581e Moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1480
diff changeset
1633 pass
28ab64f8581e Moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1480
diff changeset
1634 pass
28ab64f8581e Moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1480
diff changeset
1635
28ab64f8581e Moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1480
diff changeset
1636 def _install_state_event_handler(self, state):
1488
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
1637 def mouse_event_handler(item, evtype, button, x, y):
757c5626d15d Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1487
diff changeset
1638 self.on_state_mouse_event(state, evtype, button, x, y)
1481
28ab64f8581e Moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1480
diff changeset
1639 pass
28ab64f8581e Moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1480
diff changeset
1640 state.grab(mouse_event_handler)
28ab64f8581e Moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1480
diff changeset
1641 pass
28ab64f8581e Moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1480
diff changeset
1642
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1643 def on_transition_mouse_event(self, trn, evtype, button, x, y):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1644 if self._transition_mouse_event_handler:
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1645 self._transition_mouse_event_handler(trn, evtype, button, x, y)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1646 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1647 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1648
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1649 def _install_transition_event_handler(self, trn):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1650 def mouse_event_handler(item, evtype, button, x, y):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1651 self.on_transition_mouse_event(trn, evtype, button, x, y)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1652 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1653 trn_g = trn.trn_g
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1654 trn_g.spitem.connect('mouse-event', mouse_event_handler)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1655 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1656
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1657 def grab_transition(self, callback):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1658 assert self._transition_mouse_event_handler is None
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1659 self._transition_mouse_event_handler = callback
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1660 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1661
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1662 def ungrab_transition(self):
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1663 self._transition_mouse_event_handler = None
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1664 pass
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1665
1481
28ab64f8581e Moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1480
diff changeset
1666 def grab_state(self, callback):
28ab64f8581e Moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1480
diff changeset
1667 assert self._state_mouse_event_handler is None
28ab64f8581e Moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1480
diff changeset
1668 self._state_mouse_event_handler = callback
28ab64f8581e Moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1480
diff changeset
1669 pass
28ab64f8581e Moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1480
diff changeset
1670
28ab64f8581e Moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1480
diff changeset
1671 def ungrab_state(self):
28ab64f8581e Moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1480
diff changeset
1672 self._state_mouse_event_handler = None
28ab64f8581e Moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1480
diff changeset
1673 pass
28ab64f8581e Moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1480
diff changeset
1674
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1675 def grab_add_transition(self, callback):
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1676 assert self._add_transition_cb is None
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1677 self._add_transition_cb = callback
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1678 pass
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1679
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1680 def ungrab_add_transition(self):
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1681 self._add_transition_cb = None
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1682 pass
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1683
1500
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
1684 def grab_edit_transition(self, callback):
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
1685 assert self._edit_transition_cb is None
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
1686 self._edit_transition_cb = callback
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
1687 pass
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
1688
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
1689 def ungrab_edit_transition(self):
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
1690 self._edit_transition_cb = None
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
1691 pass
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
1692
1501
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
1693 def grab_transition_apply(self, callback):
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
1694 assert self._transition_apply_cb is None
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
1695 self._transition_apply_cb = callback
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
1696 pass
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
1697
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
1698 def ungrab_transition_apply(self):
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
1699 self._transition_apply_cb = None
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
1700 pass
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
1701
1502
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1702 def grab_edit_state(self, callback):
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1703 assert self._edit_state_cb is None
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1704 self._edit_state_cb = callback
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1705 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1706
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1707 def ungrab_edit_state(self):
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1708 self._edit_state_cb = None
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1709 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1710
1483
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1711 def _load_new_state(self, state_name):
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1712 states = self._states
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1713
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1714 self._draw_state_domview(state_name)
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1715 state = states[state_name]
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1716 self._install_state_event_handler(state)
1492
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1717
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1718 for trn in state.transitions.values():
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1719 self._install_transition_event_handler(trn)
6616530c4180 Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1491
diff changeset
1720 pass
1483
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1721 pass
1484
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
1722
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
1723 ## \brief Load new state incrementally.
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
1724 #
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
1725 def _load_new_state_incr(self, state_name):
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
1726 self._load_new_state(state_name)
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
1727 states = self._states
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
1728 state = states[state_name]
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1729 state.tell_target_states()
1484
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
1730 pass
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
1731
1485
20cf6ea263c6 Rename from_srcs to from_states
Thinker K.F. Li <thinker@codemud.net>
parents: 1484
diff changeset
1732 def _rebuild_from_states(self):
1484
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
1733 states = self._states
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
1734 domview = self._domview
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
1735 state_names = domview.all_state_names()
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
1736 for state_name in state_names:
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
1737 state = states[state_name]
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1738 state.tell_target_states()
1484
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
1739 pass
aa4137f3141e Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1483
diff changeset
1740 pass
1483
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1741
1478
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1742 def _update_view(self):
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1743 self._clear_view()
1481
28ab64f8581e Moving state
Thinker K.F. Li <thinker@codemud.net>
parents: 1480
diff changeset
1744 states = self._states
1478
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1745
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1746 domview = self._domview
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1747
1469
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1748 state_names = domview.all_state_names()
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1749 for state_name in state_names:
1483
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1750 self._load_new_state(state_name)
1469
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1751 pass
1485
20cf6ea263c6 Rename from_srcs to from_states
Thinker K.F. Li <thinker@codemud.net>
parents: 1484
diff changeset
1752 self._rebuild_from_states()
1469
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1753 pass
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1754
1456
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1755 def set_svg_view(self, view):
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1756 self._view_box.add(view)
1469
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1757 self._view_widget = view
1479
92a8497d0361 Make FSM editor scrollable
Thinker K.F. Li <thinker@codemud.net>
parents: 1478
diff changeset
1758
92a8497d0361 Make FSM editor scrollable
Thinker K.F. Li <thinker@codemud.net>
parents: 1478
diff changeset
1759 root = self._root()
92a8497d0361 Make FSM editor scrollable
Thinker K.F. Li <thinker@codemud.net>
parents: 1478
diff changeset
1760 root.setAttribute('width', '1024')
92a8497d0361 Make FSM editor scrollable
Thinker K.F. Li <thinker@codemud.net>
parents: 1478
diff changeset
1761 root.setAttribute('height', '768')
92a8497d0361 Make FSM editor scrollable
Thinker K.F. Li <thinker@codemud.net>
parents: 1478
diff changeset
1762 view.setResize(True, 800, 600)
1456
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1763 pass
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1764
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1765 def on_close_window_activate(self, *args):
1486
471805e582cc Leave current mode when closing a FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents: 1485
diff changeset
1766 self._emit_leave_mode()
1456
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1767 self._close_cb()
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1768 pass
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1769
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1770 def on_FSM_main_win_destroy_event(self, *args):
1486
471805e582cc Leave current mode when closing a FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents: 1485
diff changeset
1771 self._emit_leave_mode()
1456
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1772 self._destroy_cb()
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1773 pass
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1774
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1775 def on_FSM_main_win_delete_event(self, *args):
1486
471805e582cc Leave current mode when closing a FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents: 1485
diff changeset
1776 self._emit_leave_mode()
1456
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1777 self._destroy_cb()
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1778 pass
1467
6927debad4ee Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents: 1458
diff changeset
1779
6927debad4ee Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents: 1458
diff changeset
1780 def on_add_state_toggled(self, *args):
1483
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1781 mode = self._add_state_mode
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1782 mode.activate()
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1783 self._set_leave_mode_cb(lambda: mode.deactivate())
1478
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1784 pass
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1785
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1786 def on_move_state_toggled(self, *args):
1482
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1787 mode = self._move_state_mode
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1788 mode.activate()
3a671e79429a Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents: 1481
diff changeset
1789 self._set_leave_mode_cb(lambda: mode.deactivate())
1478
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1790 pass
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1791
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1792 def on_state_apply_clicked(self, *args):
1483
9df6ed043b87 Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents: 1482
diff changeset
1793 self._add_state_mode.handle_new_state()
1475
8c6078c17f2d Install test data when show FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents: 1474
diff changeset
1794 pass
8c6078c17f2d Install test data when show FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents: 1474
diff changeset
1795
1490
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1796 def on_add_transition_activate(self, *args):
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1797 if self._add_transition_cb:
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1798 self._add_transition_cb(*args)
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1799 pass
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1800 pass
3f107ceee9c1 User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1489
diff changeset
1801
1500
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
1802 def on_edit_transition_activate(self, *args):
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
1803 if self._edit_transition_cb:
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
1804 self._edit_transition_cb(*args)
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
1805 pass
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
1806 pass
65249f15138e Show transition editor when user click on "Edit" menu item
Thinker K.F. Li <thinker@codemud.net>
parents: 1499
diff changeset
1807
1501
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
1808 def on_transition_apply_clicked(self, *args):
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
1809 if self._transition_apply_cb:
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
1810 self._transition_apply_cb(*args)
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
1811 pass
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
1812 pass
4a57650bb926 Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents: 1500
diff changeset
1813
1502
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1814 def on_edit_state_activate(self, *args):
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1815 if self._edit_state_cb:
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1816 self._edit_state_cb(*args)
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1817 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1818 pass
376a8cb7312e Refactor popup menu and selection of states and transition
Thinker K.F. Li <thinker@codemud.net>
parents: 1501
diff changeset
1819
1475
8c6078c17f2d Install test data when show FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents: 1474
diff changeset
1820 def _install_test_data(self):
1476
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1821 self._init_layers()
eddec4543761 Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents: 1475
diff changeset
1822
1467
6927debad4ee Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents: 1458
diff changeset
1823 domview = self._domview
1469
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1824
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1825 view = self._view_widget.view
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1826 doc = view.doc()
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1827 rdoc = doc.rdoc
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1828 root_node = doc.root().repr
1479
92a8497d0361 Make FSM editor scrollable
Thinker K.F. Li <thinker@codemud.net>
parents: 1478
diff changeset
1829
1469
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1830 line_node = rdoc.createElement('svg:line')
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1831 line_node.setAttribute('x1', '10')
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1832 line_node.setAttribute('y1', '10')
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1833 line_node.setAttribute('x2', '100')
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1834 line_node.setAttribute('y2', '100')
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1835 line_node.setAttribute('style', 'stroke: #000000; stroke-width:2')
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1836
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1837 root_node.appendChild(line_node)
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1838
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1839 def show_msg(*args, **kws):
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1840 print 'mouse_event'
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1841 print args
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1842 pass
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1843 print 'before connect'
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1844 hdl_id = line_node.spitem.connect('mouse-event', show_msg)
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1845 print hdl_id
c1e70540541c Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents: 1467
diff changeset
1846
1471
055845649807 Update FSM_window from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1469
diff changeset
1847 state1 = 'state 1'
055845649807 Update FSM_window from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1469
diff changeset
1848 domview.add_state(state1)
055845649807 Update FSM_window from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1469
diff changeset
1849 domview.set_state_r(state1, 50)
055845649807 Update FSM_window from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1469
diff changeset
1850 domview.set_state_xy(state1, 200, 100)
055845649807 Update FSM_window from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1469
diff changeset
1851 state2 = 'state 2'
055845649807 Update FSM_window from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1469
diff changeset
1852 domview.add_state(state2)
055845649807 Update FSM_window from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1469
diff changeset
1853 domview.set_state_r(state2, 30)
055845649807 Update FSM_window from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1469
diff changeset
1854 domview.set_state_xy(state2, 300, 100)
055845649807 Update FSM_window from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1469
diff changeset
1855 domview.add_transition(state1, 'event1', state2)
055845649807 Update FSM_window from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1469
diff changeset
1856 domview.set_transition_path(state1, 'event1', (200, 150,
055845649807 Update FSM_window from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1469
diff changeset
1857 240, 180,
055845649807 Update FSM_window from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1469
diff changeset
1858 260, 180,
055845649807 Update FSM_window from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1469
diff changeset
1859 300, 130))
1467
6927debad4ee Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents: 1458
diff changeset
1860 pass
1475
8c6078c17f2d Install test data when show FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents: 1474
diff changeset
1861
8c6078c17f2d Install test data when show FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents: 1474
diff changeset
1862 def show(self):
8c6078c17f2d Install test data when show FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents: 1474
diff changeset
1863 self._install_test_data()
8c6078c17f2d Install test data when show FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents: 1474
diff changeset
1864 self._install_test_data = lambda: None
8c6078c17f2d Install test data when show FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents: 1474
diff changeset
1865 self._update_view()
1486
471805e582cc Leave current mode when closing a FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents: 1485
diff changeset
1866 self._add_state_mode.activate()
1475
8c6078c17f2d Install test data when show FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents: 1474
diff changeset
1867 super(FSM_window, self).show()
8c6078c17f2d Install test data when show FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents: 1474
diff changeset
1868 pass
1478
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1869
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1870 def grab_mouse(self, callback):
1489
1e607ce4bf7d Rename FSM_window._grab_hdl to _grab_mouse_hdl
Thinker K.F. Li <thinker@codemud.net>
parents: 1488
diff changeset
1871 assert self._grab_mouse_hdl is None
1478
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1872
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1873 root = self._root()
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1874 root.setAttribute('inkscape:groupmode', '')
1489
1e607ce4bf7d Rename FSM_window._grab_hdl to _grab_mouse_hdl
Thinker K.F. Li <thinker@codemud.net>
parents: 1488
diff changeset
1875 self._grab_mouse_hdl = root.spitem.connect('mouse-event', callback)
1478
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1876 pass
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1877
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1878 def ungrab_mouse(self):
1489
1e607ce4bf7d Rename FSM_window._grab_hdl to _grab_mouse_hdl
Thinker K.F. Li <thinker@codemud.net>
parents: 1488
diff changeset
1879 if not self._grab_mouse_hdl:
1478
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1880 return
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1881
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1882 root = self._root()
1489
1e607ce4bf7d Rename FSM_window._grab_hdl to _grab_mouse_hdl
Thinker K.F. Li <thinker@codemud.net>
parents: 1488
diff changeset
1883 root.spitem.disconnect(self._grab_mouse_hdl)
1e607ce4bf7d Rename FSM_window._grab_hdl to _grab_mouse_hdl
Thinker K.F. Li <thinker@codemud.net>
parents: 1488
diff changeset
1884 self._grab_mouse_hdl = None
1478
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1885 root.setAttribute('inkscape:groupmode', 'layer')
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1886 pass
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1887
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1888 def grab_bg(self, callback):
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1889 assert self._bg_hdl is None
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1890 assert self._background
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1891
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1892 background = self._background
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1893 bg_hdl = background.spitem.connect('mouse-event', callback)
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1894 self._bg_hdl = bg_hdl
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1895 pass
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1896
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1897 def ungrab_bg(self):
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1898 if not self._bg_hdl:
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1899 return
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1900
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1901 background = self._background
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1902 bg_hdl = self._bg_hdl
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1903 background.spitem.disconnect(bg_hdl)
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1904 self._bg_hdl = None
6fe773e62b2a Add state to FSM.
Thinker K.F. Li <thinker@codemud.net>
parents: 1476
diff changeset
1905 pass
1456
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1906 pass
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1907
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1908 if __name__ == '__main__':
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1909 win = FSM_window()
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1910 win._main_win.connect('destroy', gtk.main_quit)
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1911 win.show()
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1912 gtk.main()
894a4bf35fe6 Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1913 pass