Mercurial > MadButterfly
annotate pyink/FSM_window.py @ 1492:6616530c4180
Show hint when mouse over a transition
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Mon, 02 May 2011 23:23:06 +0800 |
parents | 06c101bba830 |
children | b0e113605382 |
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 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
17 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
|
18 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
|
19 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
20 def mouse_event_waiting(self, evtype, button, x, y): |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
21 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
|
22 button == 1: |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
23 self._start_x = x |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
24 self._start_y = y |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
25 self.mouse_event = self.mouse_event_pressed |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
26 self.start_drag() |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
27 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
28 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
29 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
30 def mouse_event_pressed(self, evtype, button, x, y): |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
31 rx = x - self._start_x |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
32 ry = y - self._start_y |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
33 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
34 if evtype == pybInkscape.PYSPItem.PYB_EVENT_BUTTON_RELEASE: |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
35 self.mouse_event = self.mouse_event_waiting |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
36 self.stop_drag(rx, ry) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
37 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
38 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
39 self.update(rx, ry) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
40 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
41 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
42 def start(self): |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
43 self.mouse_event = self.mouse_event_waiting |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
44 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
45 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
46 def stop(self): |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
47 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
48 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
49 def connect(self, node): |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
50 self.start() |
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 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
|
53 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
|
54 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
55 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
56 self._node = node |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
57 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
|
58 self._hdl_id = hdl_id |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
59 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
60 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
61 def disconnect(self): |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
62 self.stop() |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
63 node = self._node |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
64 hdl_id = self._hdl_id |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
65 node.disconnect(hdl_id) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
66 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
67 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
68 def start_drag(self): |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
69 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
70 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
71 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
|
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 update(self, rx, ry): |
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 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
77 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
78 |
1456
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
79 class FSM_window_base(object): |
1488
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
80 _add_state_button = None |
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
81 _move_state_button = None |
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
82 |
1478 | 83 _state_editor = None |
84 _state_name = None | |
85 _state_radius = None | |
86 | |
87 _error_dialog = None | |
88 _error_dialog_label = None | |
1488
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
89 |
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
90 _state_menu = None |
1478 | 91 |
1456
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
92 def __init__(self): |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
93 super(FSM_window_base, self).__init__() |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
94 |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
95 dirname = os.path.dirname(__file__) |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
96 fname = os.path.join(dirname, 'FSM_window.glade') |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
97 |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
98 builder = gtk.Builder() |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
99 builder.add_from_file(fname) |
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 main_win = builder.get_object("FSM_main_win") |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
102 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
|
103 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
|
104 move_state_button = builder.get_object('move_state') |
1478 | 105 |
106 state_editor = builder.get_object("state_editor") | |
107 state_name = builder.get_object('state_name') | |
108 state_radius = builder.get_object('state_radius') | |
109 | |
110 error_dialog = builder.get_object('error_dialog') | |
111 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
|
112 |
1488
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
113 state_menu = builder.get_object('state_menu') |
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
114 |
1456
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
115 builder.connect_signals(self) |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
116 |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
117 self._builder = builder |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
118 self._main_win = main_win |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
119 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
|
120 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
|
121 self._move_state_button = move_state_button |
1478 | 122 |
123 self._state_editor = state_editor | |
124 self._state_name = state_name | |
125 self._state_radius = state_radius | |
126 | |
127 self._error_dialog = error_dialog | |
128 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
|
129 |
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
130 self._state_menu = state_menu |
1478 | 131 pass |
132 | |
133 def show_error(self, msg): | |
134 error_dialog = self._error_dialog | |
135 error_dialog_label = self._error_dialog_label | |
136 | |
137 error_dialog_label.set_text(msg) | |
138 error_dialog.show() | |
139 pass | |
140 | |
141 def hide_error(self): | |
142 error_dialog = self._error_dialog | |
143 error_dialog.hide() | |
144 pass | |
145 | |
146 def show_state_editor(self, state_name=''): | |
147 state_name_inp = self._state_name | |
148 state_radius_inp = self._state_radius | |
149 state_editor = self._state_editor | |
150 | |
151 state_name_inp.set_text(state_name) | |
152 state_radius_inp.set_text('30') | |
153 state_editor.show() | |
154 pass | |
155 | |
156 def hide_state_editor(self): | |
157 state_editor = self._state_editor | |
158 state_editor.hide() | |
1456
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
159 pass |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
160 |
1488
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
161 def popup_state_menu(self): |
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
162 menu = self._state_menu |
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
163 menu.popup(None, None, None, 0, 0) |
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
164 pass |
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
165 |
1456
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
166 def show(self): |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
167 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
|
168 self._add_state_button.set_active(True) |
1456
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
169 pass |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
170 |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
171 def hide(self): |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
172 self._main_win.hide() |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
173 pass |
1478 | 174 |
175 def gtk_widget_hide(self, widget, event, *data): | |
176 widget.hide() | |
177 return True | |
1456
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
178 |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
179 def on_start_state_activate(self, *args): |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
180 pass |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
181 |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
182 def on_rename_state_activate(self, *args): |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
183 pass |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
184 |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
185 def on_remove_state_activate(self, *args): |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
186 pass |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
187 |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
188 def on_zoom_out_clicked(self, *args): |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
189 pass |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
190 |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
191 def on_zoom_in_clicked(self, *args): |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
192 pass |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
193 |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
194 def on_move_state_toggled(self, *args): |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
195 pass |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
196 |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
197 def on_add_state_toggled(self, *args): |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
198 pass |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
199 |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
200 def on_close_window_activate(self, *args): |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
201 pass |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
202 |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
203 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
|
204 pass |
1478 | 205 |
206 def on_state_apply_clicked(self, *args): | |
207 pass | |
208 | |
209 def on_state_cancel_clicked(self, *args): | |
210 state_editor = self._state_editor | |
211 state_editor.hide() | |
212 pass | |
213 | |
214 def on_error_dialog_ok_clicked(self, *args): | |
215 error_dialog = self._error_dialog | |
216 error_dialog.hide() | |
217 pass | |
1488
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
218 |
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
219 def on_add_transition_activate(self, *args): |
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
220 pass |
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
221 |
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
222 def on_del_state_activate(self, *args): |
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
223 pass |
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
224 |
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
225 def on_edit_state_activate(self, *args): |
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
226 pass |
1492
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
227 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
228 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
|
229 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
230 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
231 def on_transition_cancel_clicked(self, *args): |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
232 pass |
1456
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
233 pass |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
234 |
1492
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
235 |
1472
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
236 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
|
237 _doc = None |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
238 _domview = None |
1476
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
239 _fsm_layer = None |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
240 _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
|
241 _state = None |
1490
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
242 _states = None |
1472
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
243 trn_cond = None |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
244 trn_g = None |
1473
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
245 _arrow_node = None |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
246 _path_node = None |
1492
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
247 _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
|
248 |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
249 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
|
250 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
|
251 pass |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
252 |
1490
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
253 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
|
254 self._doc = doc |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
255 self._domview = domview |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
256 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
|
257 self._states = states |
1476
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
258 self._fsm_layer = fsm_layer |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
259 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
|
260 pass |
1473
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
261 |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
262 @staticmethod |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
263 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
|
264 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
|
265 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
|
266 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
|
267 'fill: none') |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
268 |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
269 # 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
|
270 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
|
271 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
|
272 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
|
273 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
|
274 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
|
275 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
|
276 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
|
277 -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
|
278 -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
|
279 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
|
280 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
|
281 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
|
282 'fill: #000000') |
1473
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
283 pass |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
284 |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
285 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
|
286 doc = self._doc |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
287 |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
288 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
|
289 |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
290 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
|
291 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
|
292 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
|
293 |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
294 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
|
295 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
|
296 |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
297 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
|
298 |
1473
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
299 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
|
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 _gen_path(self): |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
302 states = self._states |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
303 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
|
304 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
|
305 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
|
306 |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
307 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
|
308 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
|
309 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
|
310 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
|
311 |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
312 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
|
313 src_target_len = \ |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
314 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
|
315 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
|
316 distance3 = distance / 3 |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
317 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
|
318 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
|
319 |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
320 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
|
321 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
|
322 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
|
323 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
|
324 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
|
325 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
|
326 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
|
327 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
|
328 |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
329 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
|
330 return path |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
331 |
1472
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
332 @property |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
333 def path(self): |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
334 domview = self._domview |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
335 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
|
336 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
|
337 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
|
338 path = trn[3] |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
339 |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
340 if not path: |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
341 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
|
342 pass |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
343 |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
344 return path |
1472
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
345 |
1484
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
346 @property |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
347 def target(self): |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
348 domview = self._domview |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
349 state_name = self._state.state_name |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
350 trn_cond = self.trn_cond |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
351 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
|
352 return trn[1] |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
353 |
1492
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
354 @property |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
355 def state(self): |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
356 return self._state |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
357 |
1472
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
358 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
|
359 path = self.path |
1492
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
360 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
|
361 self.trn_g = trn_g |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
362 self._arrow_node = arrow_node |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
363 self._path_node = path_node |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
364 pass |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
365 |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
366 def clear(self): |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
367 trn_g = self.trn_g |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
368 parent = trn_g.parent() |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
369 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
|
370 pass |
1474
697ebfa9dc47
Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1473
diff
changeset
|
371 |
697ebfa9dc47
Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1473
diff
changeset
|
372 def update(self): |
697ebfa9dc47
Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1473
diff
changeset
|
373 path = self.path |
697ebfa9dc47
Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1473
diff
changeset
|
374 arrow_node = self._arrow_node |
697ebfa9dc47
Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1473
diff
changeset
|
375 path_node = self._path_node |
697ebfa9dc47
Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1473
diff
changeset
|
376 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
|
377 pass |
1484
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
378 |
1490
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
379 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
|
380 states = self._states |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
381 |
1484
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
382 state = self._state |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
383 state_name = state.state_name |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
384 trn_cond = self.trn_cond |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
385 |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
386 path = self.path |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
387 |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
388 start_state = self._state |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
389 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
|
390 start_r = start_state.r |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
391 |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
392 target_name = self.target |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
393 stop_state = states[target_name] |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
394 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
|
395 stop_r = stop_state.r |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
396 |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
397 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
|
398 |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
399 c0c1 = (c1x - c0x, c1y - c0y) |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
400 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
|
401 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
|
402 |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
403 c3c2 = (c2x - c3x, c2y - c3y) |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
404 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
|
405 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
|
406 |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
407 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
|
408 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
|
409 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
|
410 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
|
411 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
|
412 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
|
413 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
|
414 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
|
415 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
|
416 |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
417 domview = self._domview |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
418 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
|
419 pass |
1492
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
420 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
421 def show_control_points(self): |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
422 if not self._control_points: |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
423 doc = self._doc |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
424 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
425 c1 = doc.createElement('svg:circle') |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
426 c1.setAttribute('r', '3') |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
427 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
|
428 'fill: white') |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
429 l01 = doc.createElement('svg:line') |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
430 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
|
431 'stroke-dasharray: 3 2') |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
432 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
433 c2 = doc.createElement('svg:circle') |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
434 c2.setAttribute('r', '3') |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
435 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
|
436 'fill: white') |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
437 l32 = doc.createElement('svg:line') |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
438 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
|
439 'stroke-dasharray: 3 2') |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
440 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
441 control_layer = self._control_layer |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
442 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
443 control_layer.appendChild(c1) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
444 control_layer.appendChild(l01) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
445 control_layer.appendChild(c2) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
446 control_layer.appendChild(l32) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
447 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
|
448 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
449 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
450 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
|
451 path = self.path |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
452 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
|
453 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
454 c1.setAttribute('cx', str(c1x)) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
455 c1.setAttribute('cy', str(c1y)) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
456 l01.setAttribute('x1', str(c0x)) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
457 l01.setAttribute('y1', str(c0y)) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
458 l01.setAttribute('x2', str(c1x)) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
459 l01.setAttribute('y2', str(c1y)) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
460 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
461 c2.setAttribute('cx', str(c2x)) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
462 c2.setAttribute('cy', str(c2y)) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
463 l32.setAttribute('x1', str(c3x)) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
464 l32.setAttribute('y1', str(c3y)) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
465 l32.setAttribute('x2', str(c2x)) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
466 l32.setAttribute('y2', str(c2y)) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
467 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
468 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
469 def hide_control_points(self): |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
470 if not self._control_points: |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
471 return |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
472 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
473 control_layer = self._control_layer |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
474 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
|
475 control_layer.removeChild(node) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
476 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
477 self._control_points = None |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
478 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
479 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
480 def start_hint(self): |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
481 path_node = self._path_node |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
482 arrow_node = self._arrow_node |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
483 if path_node: |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
484 path_node.setAttribute('style', |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
485 'stroke: #404040; stroke-width: 3; ' |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
486 'fill: none') |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
487 arrow_node.setAttribute('style', |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
488 'stroke: #404040; stroke-width: 2; ' |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
489 'fill: #404040') |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
490 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
491 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
492 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
493 def stop_hint(self): |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
494 path_node = self._path_node |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
495 arrow_node = self._arrow_node |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
496 if path_node: |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
497 path_node.setAttribute('style', |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
498 'stroke: #000000; stroke-width: 1; ' \ |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
499 'fill: none') |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
500 arrow_node.setAttribute('style', |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
501 'stroke: #000000; stroke-width: 1; ' \ |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
502 'fill: #000000') |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
503 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
504 pass |
1472
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
505 pass |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
506 |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
507 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
|
508 _doc = None |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
509 _domview = None |
1490
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
510 _states = None |
1476
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
511 _fsm_layer = None |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
512 _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
|
513 state_name = None |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
514 state_g = None |
1473
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
515 _text_node = None |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
516 _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
|
517 transitions = None |
1490
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
518 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
|
519 # from these states (name). |
1480
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
520 |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
521 _state_g_hdl_id = None |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
522 _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
|
523 |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
524 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
|
525 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
|
526 self.transitions = {} |
1485
20cf6ea263c6
Rename from_srcs to from_states
Thinker K.F. Li <thinker@codemud.net>
parents:
1484
diff
changeset
|
527 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
|
528 pass |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
529 |
1490
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
530 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
|
531 self._doc = doc |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
532 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
|
533 self._states = states |
1476
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
534 self._fsm_layer = fsm_layer |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
535 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
|
536 pass |
1473
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
537 |
1480
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
538 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
|
539 state_name, r, x, y): |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
540 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
|
541 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
|
542 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
|
543 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
|
544 'fill: #ffffff') |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
545 |
1481 | 546 text_node.setAttribute('style', 'stroke: #000000; fill: #000000; font-size: 16px') |
1473
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
547 |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
548 text_content.setContent(state_name) |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
549 |
1480
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
550 doc = self._doc |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
551 spdoc = doc.spdoc |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
552 spdoc.ensureUpToDate() |
1473
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
553 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
|
554 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
|
555 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
|
556 pass |
1480
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
557 |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
558 def grab(self, callback): |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
559 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
|
560 |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
561 state_g = self.state_g |
1481 | 562 state_g_spitem = state_g.spitem |
563 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
|
564 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
|
565 pass |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
566 |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
567 def ungrab(self): |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
568 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
|
569 return |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
570 state_g = self.state_g |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
571 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
|
572 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
|
573 pass |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
574 |
1482
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
575 def _translate_page_xy(self, x, y): |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
576 doc = self._doc |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
577 root = doc.root() |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
578 page_h_txt = root.getAttribute('height') |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
579 page_h = float(page_h_txt) |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
580 svgx = x |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
581 svgy = page_h - y |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
582 return svgx, svgy |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
583 |
1480
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
584 def show_selected(self): |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
585 if not self._selected_rect: |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
586 doc = self._doc |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
587 rect = doc.createElement('svg:rect') |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
588 control_layer = self._control_layer |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
589 rect.setAttribute('style', |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
590 'stroke: #404040; stroke-width: 1; ' |
1482
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
591 '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
|
592 control_layer.appendChild(rect) |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
593 self._selected_rect = rect |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
594 pass |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
595 |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
596 state_g = self.state_g |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
597 rect = self._selected_rect |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
598 |
1482
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
599 px, py, pw, ph = state_g.getBBox() |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
600 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
|
601 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
|
602 |
1480
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
603 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
|
604 rect.setAttribute('y', str(y - 2)) |
1482
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
605 rect.setAttribute('width', str(pw + 4)) |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
606 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
|
607 pass |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
608 |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
609 def hide_selected(self): |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
610 if not self._selected_rect: |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
611 return |
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
612 |
1482
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
613 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
|
614 rect = self._selected_rect |
1482
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
615 control_layer.removeChild(rect) |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
616 self._selected_rect = None |
1480
e11ffd5fd609
functions for showing selected control for state
Thinker K.F. Li <thinker@codemud.net>
parents:
1479
diff
changeset
|
617 pass |
1472
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
618 |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
619 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
|
620 doc = self._doc |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
621 |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
622 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
|
623 |
1473
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
624 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
|
625 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
|
626 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
|
627 |
1472
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
628 text.appendChild(text_content) |
1473
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
629 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
|
630 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
|
631 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
|
632 |
1473
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
633 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
|
634 |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
635 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
|
636 |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
637 @property |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
638 def r(self): |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
639 domview = self._domview |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
640 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
|
641 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
|
642 return r |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
643 |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
644 @property |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
645 def xy(self): |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
646 domview = self._domview |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
647 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
|
648 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
|
649 return xy |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
650 |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
651 @property |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
652 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
|
653 domview = self._domview |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
654 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
|
655 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
|
656 return conds |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
657 |
1490
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
658 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
|
659 domview = self._domview |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
660 states = self._states |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
661 |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
662 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
|
663 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
|
664 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
|
665 trn.draw(parent) |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
666 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
|
667 pass |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
668 |
1472
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
669 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
|
670 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
|
671 |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
672 r = self.r |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
673 x, y = self.xy |
1473
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
674 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
|
675 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
|
676 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
|
677 self._text_node = text_node |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
678 self._text_content = text_content |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
679 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
|
680 |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
681 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
|
682 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
|
683 pass |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
684 pass |
1473
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
685 |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
686 def clear(self): |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
687 state_g = self.state_g |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
688 parent = state_g.parent() |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
689 parent.removeChild(state_g) |
e807ad5aeb91
Extract update_graph for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1472
diff
changeset
|
690 pass |
1474
697ebfa9dc47
Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1473
diff
changeset
|
691 |
697ebfa9dc47
Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1473
diff
changeset
|
692 def update(self): |
697ebfa9dc47
Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1473
diff
changeset
|
693 text_node = self._text_node |
697ebfa9dc47
Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1473
diff
changeset
|
694 text_content = self._text_content |
697ebfa9dc47
Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1473
diff
changeset
|
695 circle_node = self._circle_node |
697ebfa9dc47
Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1473
diff
changeset
|
696 state_name = self.state_name |
697ebfa9dc47
Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1473
diff
changeset
|
697 r = self.r |
697ebfa9dc47
Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1473
diff
changeset
|
698 x, y = self.xy |
1481 | 699 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
|
700 r, x, y) |
697ebfa9dc47
Update state and transition from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1473
diff
changeset
|
701 pass |
1484
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
702 |
1490
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
703 ## \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
|
704 # |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
705 # 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
|
706 # 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
|
707 # 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
|
708 # 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
|
709 # 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
|
710 # |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
711 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
|
712 states = self._states |
1484
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
713 transitions = self.transitions |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
714 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
|
715 target_states = [states[target_name] |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
716 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
|
717 state_name = self.state_name |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
718 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
|
719 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
|
720 pass |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
721 pass |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
722 |
1490
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
723 def adjust_transitions(self): |
1484
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
724 import itertools |
1490
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
725 |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
726 states = self._states |
1484
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
727 |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
728 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
|
729 trn.adjust_by_ends() |
1484
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
730 trn.update() |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
731 pass |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
732 |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
733 state_name = self.state_name |
1485
20cf6ea263c6
Rename from_srcs to from_states
Thinker K.F. Li <thinker@codemud.net>
parents:
1484
diff
changeset
|
734 from_states = [states[from_state_name] |
20cf6ea263c6
Rename from_srcs to from_states
Thinker K.F. Li <thinker@codemud.net>
parents:
1484
diff
changeset
|
735 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
|
736 states_transitions = [state.transitions.values() |
1485
20cf6ea263c6
Rename from_srcs to from_states
Thinker K.F. Li <thinker@codemud.net>
parents:
1484
diff
changeset
|
737 for state in from_states] |
1484
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
738 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
|
739 if trn.target == state_name] |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
740 for state_transitions in states_transitions] |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
741 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
|
742 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
|
743 trn.adjust_by_ends() |
1484
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
744 trn.update() |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
745 pass |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
746 pass |
1490
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
747 |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
748 def add_transition(self, parent, condition, target_state): |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
749 domview = self._domview |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
750 |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
751 state_name = self.state_name |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
752 target_name = target_state.state_name |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
753 domview.add_transition(state_name, condition, target_name) |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
754 |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
755 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
|
756 |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
757 states = self._states |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
758 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
|
759 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
|
760 pass |
1472
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
761 pass |
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
762 |
1482
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
763 |
1487 | 764 class _FSM_move_state_mode(object): |
1482
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
765 __metaclass__ = data_monitor.data_monitor |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
766 __data_monitor_prefix__ = 'on_' |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
767 |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
768 _window = None |
1492
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
769 _domview = None |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
770 _selected_cleaner = None |
1482
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
771 |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
772 def __init__(self, window, domview_ui): |
1487 | 773 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
|
774 |
1482
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
775 self._window = window |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
776 self._domview = domview_ui |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
777 self._locker = domview_ui |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
778 pass |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
779 |
1488
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
780 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
|
781 if self._selected_cleaner is None: |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
782 return |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
783 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
784 if evtype == pybInkscape.PYSPItem.PYB_EVENT_BUTTON_RELEASE: |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
785 self._clean_select() |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
786 pass |
1482
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
787 pass |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
788 |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
789 def _select_state(self, state): |
1492
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
790 self._clean_select() |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
791 self._selected_cleaner = state.hide_selected |
1482
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
792 state.show_selected() |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
793 pass |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
794 |
1492
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
795 def _clean_select(self): |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
796 if self._selected_cleaner: |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
797 self._selected_cleaner() |
1482
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
798 pass |
1492
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
799 self._selected_cleaner = None |
1482
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
800 pass |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
801 |
1492
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
802 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
|
803 window = self._window |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
804 |
1488
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
805 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
|
806 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
|
807 window.ungrab_mouse() |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
808 pass |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
809 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
|
810 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
|
811 |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
812 domview = self._domview |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
813 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
|
814 state.update() |
1490
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
815 state.adjust_transitions() |
1482
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
816 state.show_selected() |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
817 pass |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
818 |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
819 window = self._window |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
820 |
1488
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
821 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
|
822 button == 1: |
1482
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
823 start_x = x |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
824 start_y = y |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
825 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
|
826 |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
827 self._select_state(state) |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
828 window.grab_mouse(moving_state) |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
829 pass |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
830 |
1488
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
831 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
|
832 button == 1: |
1482
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
833 window.ungrab_mouse() |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
834 pass |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
835 pass |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
836 |
1492
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
837 def _install_transition_mouse_event_handler(self, trn): |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
838 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
|
839 path = trn.path |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
840 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
|
841 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
842 state_src = trn.state |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
843 target_name = trn.target |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
844 states = trn._states |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
845 state_target = states[target_name] |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
846 domview = self._domview |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
847 window = self._window |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
848 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
849 def c1_update(rx, ry): |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
850 nc1x = c1x + rx |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
851 nc1y = c1y + ry |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
852 cx, cy = state_src.xy |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
853 r = state_src.r |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
854 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
855 cv = nc1x - cx, nc1y - cy |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
856 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
|
857 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
|
858 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
|
859 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
860 path = list(trn.path) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
861 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
|
862 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
863 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
|
864 cond = trn.trn_cond |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
865 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
|
866 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
867 trn.show_control_points() |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
868 trn.update() |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
869 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
870 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
871 def c1_start(): |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
872 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
|
873 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
|
874 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
875 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
876 window.ungrab_bg() |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
877 window.grab_bg(relay_event) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
878 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
879 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
880 def c1_stop(rx, ry): |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
881 window.ungrab_bg() |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
882 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
|
883 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
884 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
885 def c2_update(rx, ry): |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
886 nc2x = c2x + rx |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
887 nc2y = c2y + ry |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
888 cx, cy = state_target.xy |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
889 r = state_target.r |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
890 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
891 cv = nc2x - cx, nc2y - cy |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
892 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
|
893 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
|
894 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
|
895 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
896 path = list(trn.path) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
897 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
|
898 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
899 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
|
900 cond = trn.trn_cond |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
901 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
|
902 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
903 trn.show_control_points() |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
904 trn.update() |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
905 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
906 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
907 def c2_start(): |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
908 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
|
909 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
|
910 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
911 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
912 window.ungrab_bg() |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
913 window.grab_bg(relay_event) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
914 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
915 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
916 def c2_stop(rx, ry): |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
917 window.ungrab_bg() |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
918 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
|
919 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
920 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
921 c1_dragger = _dragger() |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
922 c1_dragger.update = c1_update |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
923 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
|
924 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
|
925 c1_dragger.connect(c1) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
926 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
927 c2_dragger = _dragger() |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
928 c2_dragger.update = c2_update |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
929 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
|
930 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
|
931 c2_dragger.connect(c2) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
932 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
933 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
934 def _select_transition(self, trn): |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
935 def cleaner(): |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
936 trn.hide_control_points() |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
937 del self._hint_transition |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
938 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
939 self._clean_select() |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
940 self._selected_cleaner = cleaner |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
941 trn.show_control_points() |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
942 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
943 trn.stop_hint() |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
944 self._hint_transition = lambda *args: None |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
945 window = self._window |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
946 window.ungrab_bg() |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
947 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
948 self._install_transition_mouse_event_handler(trn) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
949 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
950 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
951 def _hint_transition(self, trn): |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
952 def stop_hint(*args): |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
953 trn.stop_hint() |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
954 window.ungrab_bg() |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
955 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
|
956 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
957 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
958 trn.start_hint() |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
959 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
960 window = self._window |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
961 window.ungrab_bg() |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
962 window.grab_bg(stop_hint) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
963 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
964 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
965 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
|
966 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
|
967 button == 1: |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
968 self._select_transition(trn) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
969 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
|
970 self._hint_transition(trn) |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
971 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
972 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
973 |
1482
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
974 def activate(self): |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
975 window = self._window |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
976 window._emit_leave_mode() |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
977 window._clear_leave_mode_cb() |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
978 window.ungrab_all() |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
979 |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
980 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
|
981 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
|
982 window.grab_transition(self._handle_transitoin_mouse_events) |
1482
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
983 pass |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
984 |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
985 def deactivate(self): |
1492
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
986 self._clean_select() |
1482
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
987 pass |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
988 pass |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
989 |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
990 |
1487 | 991 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
|
992 __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
|
993 __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
|
994 |
1490
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
995 _window = None |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
996 _domview = None |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
997 |
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
|
998 _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
|
999 _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
|
1000 |
1490
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1001 _select_state = None |
1491
06c101bba830
Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents:
1490
diff
changeset
|
1002 _candidate_state = None |
1490
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1003 |
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
|
1004 def __init__(self, window, domview_ui): |
1487 | 1005 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
|
1006 |
9df6ed043b87
Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents:
1482
diff
changeset
|
1007 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
|
1008 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
|
1009 self._locker = 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
|
1010 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
|
1011 |
9df6ed043b87
Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents:
1482
diff
changeset
|
1012 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
|
1013 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
|
1014 |
9df6ed043b87
Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents:
1482
diff
changeset
|
1015 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
|
1016 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
|
1017 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
|
1018 |
9df6ed043b87
Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents:
1482
diff
changeset
|
1019 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
|
1020 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
|
1021 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
|
1022 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
|
1023 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
|
1024 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
|
1025 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
|
1026 '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
|
1027 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
|
1028 |
9df6ed043b87
Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents:
1482
diff
changeset
|
1029 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
|
1030 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
|
1031 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
|
1032 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
|
1033 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
|
1034 (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
|
1035 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
|
1036 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
|
1037 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
|
1038 |
1484
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
1039 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
|
1040 |
9df6ed043b87
Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents:
1482
diff
changeset
|
1041 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
|
1042 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
|
1043 |
1488
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
1044 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
|
1045 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
|
1046 |
9df6ed043b87
Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents:
1482
diff
changeset
|
1047 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
|
1048 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
|
1049 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
|
1050 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
|
1051 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
|
1052 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
|
1053 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
|
1054 |
1491
06c101bba830
Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents:
1490
diff
changeset
|
1055 def _stop_select_target(self): |
06c101bba830
Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents:
1490
diff
changeset
|
1056 self.deactivate() |
06c101bba830
Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents:
1490
diff
changeset
|
1057 self.activate() |
06c101bba830
Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents:
1490
diff
changeset
|
1058 pass |
06c101bba830
Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents:
1490
diff
changeset
|
1059 |
1490
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1060 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
|
1061 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
|
1062 if self._candidate_state: |
06c101bba830
Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents:
1490
diff
changeset
|
1063 self._candidate_state.hide_selected() |
06c101bba830
Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents:
1490
diff
changeset
|
1064 pass |
06c101bba830
Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents:
1490
diff
changeset
|
1065 self._candidate_state = state |
06c101bba830
Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents:
1490
diff
changeset
|
1066 state.show_selected() |
06c101bba830
Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents:
1490
diff
changeset
|
1067 pass |
06c101bba830
Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents:
1490
diff
changeset
|
1068 |
1490
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1069 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
|
1070 return |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1071 if button != 1: |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1072 return |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1073 |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1074 if state == self._select_state: |
1491
06c101bba830
Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents:
1490
diff
changeset
|
1075 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
|
1076 return |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1077 |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1078 window = self._window |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1079 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
|
1080 |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1081 target_state = state |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1082 src_state = self._select_state |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1083 cond = '' |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1084 src_state.add_transition(fsm_layer, cond, target_state) |
1491
06c101bba830
Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents:
1490
diff
changeset
|
1085 |
06c101bba830
Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents:
1490
diff
changeset
|
1086 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
|
1087 pass |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1088 |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1089 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
|
1090 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
|
1091 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
|
1092 if self._candidate_state: |
06c101bba830
Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents:
1490
diff
changeset
|
1093 self._candidate_state.hide_selected() |
06c101bba830
Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents:
1490
diff
changeset
|
1094 self._candidate_state = None |
06c101bba830
Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents:
1490
diff
changeset
|
1095 pass |
1490
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1096 return |
1491
06c101bba830
Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents:
1490
diff
changeset
|
1097 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
|
1098 pass |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1099 |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1100 window = self._window |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1101 window.ungrab_bg() |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1102 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
|
1103 |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1104 window.ungrab_state() |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1105 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
|
1106 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
|
1107 pass |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1108 |
1488
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
1109 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
|
1110 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
|
1111 button == 3: |
1490
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1112 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
|
1113 |
1488
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
1114 window = self._window |
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
1115 window.popup_state_menu() |
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
1116 pass |
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
1117 pass |
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
1118 |
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
|
1119 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
|
1120 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
|
1121 |
9df6ed043b87
Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents:
1482
diff
changeset
|
1122 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
|
1123 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
|
1124 |
9df6ed043b87
Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents:
1482
diff
changeset
|
1125 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
|
1126 window.grab_state(self._handle_state_mouse_events) |
1490
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1127 window.grab_add_transition(self._handle_add_transition) |
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
|
1128 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
|
1129 |
9df6ed043b87
Move code for add state mode to FSM_add_state_mode class
Thinker K.F. Li <thinker@codemud.net>
parents:
1482
diff
changeset
|
1130 def deactivate(self): |
1491
06c101bba830
Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents:
1490
diff
changeset
|
1131 if self._select_state: |
06c101bba830
Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents:
1490
diff
changeset
|
1132 self._select_state.hide_selected() |
06c101bba830
Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents:
1490
diff
changeset
|
1133 pass |
06c101bba830
Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents:
1490
diff
changeset
|
1134 if self._candidate_state: |
06c101bba830
Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents:
1490
diff
changeset
|
1135 self._candidate_state.hide_selected() |
06c101bba830
Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents:
1490
diff
changeset
|
1136 self._candidate_state = None |
06c101bba830
Hint user to select transition target
Thinker K.F. Li <thinker@codemud.net>
parents:
1490
diff
changeset
|
1137 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
|
1138 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
|
1139 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
|
1140 |
1456
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1141 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
|
1142 __metaclass__ = data_monitor.data_monitor |
59b90d7fcf57
Lock UI event handlers for FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents:
1457
diff
changeset
|
1143 __data_monitor_prefix__ = 'on_' |
1476
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1144 |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1145 _background = None |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1146 _fsm_layer = None |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1147 _control_layer = None |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1148 width = 1024 |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1149 height = 768 |
1478 | 1150 |
1489
1e607ce4bf7d
Rename FSM_window._grab_hdl to _grab_mouse_hdl
Thinker K.F. Li <thinker@codemud.net>
parents:
1488
diff
changeset
|
1151 _grab_mouse_hdl = None |
1478 | 1152 _bg_hdl = None |
1153 | |
1482
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
1154 _leave_mode_cb = None |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
1155 _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
|
1156 _add_state_mode = None |
1481 | 1157 _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
|
1158 _add_transition_cb = None |
1492
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
1159 _transition_mouse_event_handler = None |
1458
59b90d7fcf57
Lock UI event handlers for FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents:
1457
diff
changeset
|
1160 |
59b90d7fcf57
Lock UI event handlers for FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents:
1457
diff
changeset
|
1161 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
|
1162 super(FSM_window, self).__init__() |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1163 |
1458
59b90d7fcf57
Lock UI event handlers for FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents:
1457
diff
changeset
|
1164 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
|
1165 |
6927debad4ee
Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents:
1458
diff
changeset
|
1166 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
|
1167 self._states = {} |
1458
59b90d7fcf57
Lock UI event handlers for FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents:
1457
diff
changeset
|
1168 |
1457
416a18409603
Show an empty document in SVG viewer widget
Thinker K.F. Li <thinker@codemud.net>
parents:
1456
diff
changeset
|
1169 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
|
1170 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
|
1171 |
1487 | 1172 self._move_state_mode = _FSM_move_state_mode(self, domview_ui) |
1173 self._add_state_mode = _FSM_add_state_mode(self, domview_ui) | |
1456
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1174 pass |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1175 |
1476
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1176 def _init_layers(self): |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1177 doc = self._doc() |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1178 root = self._root() |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1179 |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1180 root.setAttribute('inkscape:groupmode', 'layer') |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1181 |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1182 background = doc.createElement('svg:rect') |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1183 background.setAttribute('x', '0') |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1184 background.setAttribute('y', '0') |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1185 background.setAttribute('width', str(self.width)) |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1186 background.setAttribute('height', str(self.height)) |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1187 background.setAttribute('style', 'fill: #ffffff') |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1188 root.appendChild(background) |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1189 self._background = background |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1190 |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1191 fsm_layer = doc.createElement('svg:g') |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1192 fsm_layer.setAttribute('inkscape:groupmode', 'layer') |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1193 root.appendChild(fsm_layer) |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1194 self._fsm_layer = fsm_layer |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1195 |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1196 control_layer = doc.createElement('svg:g') |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1197 control_layer.setAttribute('inkscape:groupmode', 'layer') |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1198 root.appendChild(control_layer) |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1199 self._control_layer = control_layer |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1200 pass |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1201 |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1202 def _doc(self): |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1203 view_widget = self._view_widget |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1204 view = view_widget.view |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1205 doc = view.doc().rdoc |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1206 return doc |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1207 |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1208 def _root(self): |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1209 doc = self._doc() |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1210 root = doc.root() |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1211 return root |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1212 |
1478 | 1213 def _translate_xy(self, x, y): |
1214 return x, y | |
1215 | |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1216 def _clear_view(self): |
1476
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1217 if not self._background: |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1218 self._init_layers() |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1219 return |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1220 |
1476
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1221 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
|
1222 [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
|
1223 for child in children: |
1476
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1224 parent = child.parent() |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1225 parent.removeChild(child) |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1226 pass |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1227 |
1472
7cb7abb5063b
Refactory drawing functions into classes for state and transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1471
diff
changeset
|
1228 self._states = {} |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1229 pass |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1230 |
1478 | 1231 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
|
1232 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
|
1233 doc = self._doc() |
1476
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1234 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
|
1235 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
|
1236 |
1478 | 1237 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
|
1238 state.init(doc, domview, states, self._fsm_layer, self._control_layer) |
1478 | 1239 self._states[state_name] = state |
1240 | |
1241 state.draw(fsm_layer) | |
1242 pass | |
1243 | |
1482
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
1244 def _set_leave_mode_cb(self, callback): |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
1245 self._leave_mode_cb = callback |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
1246 pass |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
1247 |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
1248 def _clear_leave_mode_cb(self): |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
1249 self._leave_mode_cb = None |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
1250 pass |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
1251 |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
1252 def _emit_leave_mode(self): |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
1253 if self._leave_mode_cb: |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
1254 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
|
1255 self._leave_mode_cb = None |
1482
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
1256 pass |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
1257 pass |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
1258 |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
1259 def ungrab_all(self): |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
1260 self.ungrab_bg() |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
1261 self.ungrab_mouse() |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
1262 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
|
1263 self.ungrab_add_transition() |
1492
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
1264 self.ungrab_transition() |
1482
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
1265 pass |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
1266 |
1488
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
1267 def on_state_mouse_event(self, state, evtype, button, x, y): |
1481 | 1268 if self._state_mouse_event_handler: |
1488
757c5626d15d
Show context menu for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1487
diff
changeset
|
1269 self._state_mouse_event_handler(state, evtype, button, x, y) |
1481 | 1270 pass |
1271 pass | |
1272 | |
1273 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
|
1274 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
|
1275 self.on_state_mouse_event(state, evtype, button, x, y) |
1481 | 1276 pass |
1277 state.grab(mouse_event_handler) | |
1278 pass | |
1279 | |
1492
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
1280 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
|
1281 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
|
1282 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
|
1283 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
1284 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
1285 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
1286 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
|
1287 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
|
1288 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
|
1289 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
1290 trn_g = trn.trn_g |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
1291 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
|
1292 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
1293 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
1294 def grab_transition(self, callback): |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
1295 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
|
1296 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
|
1297 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
1298 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
1299 def ungrab_transition(self): |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
1300 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
|
1301 pass |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
1302 |
1481 | 1303 def grab_state(self, callback): |
1304 assert self._state_mouse_event_handler is None | |
1305 self._state_mouse_event_handler = callback | |
1306 pass | |
1307 | |
1308 def ungrab_state(self): | |
1309 self._state_mouse_event_handler = None | |
1310 pass | |
1311 | |
1490
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1312 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
|
1313 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
|
1314 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
|
1315 pass |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1316 |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1317 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
|
1318 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
|
1319 pass |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1320 |
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
|
1321 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
|
1322 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
|
1323 |
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 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
|
1325 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
|
1326 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
|
1327 |
6616530c4180
Show hint when mouse over a transition
Thinker K.F. Li <thinker@codemud.net>
parents:
1491
diff
changeset
|
1328 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
|
1329 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
|
1330 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
|
1331 pass |
1484
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
1332 |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
1333 ## \brief Load new state incrementally. |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
1334 # |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
1335 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
|
1336 self._load_new_state(state_name) |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
1337 states = self._states |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
1338 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
|
1339 state.tell_target_states() |
1484
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
1340 pass |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
1341 |
1485
20cf6ea263c6
Rename from_srcs to from_states
Thinker K.F. Li <thinker@codemud.net>
parents:
1484
diff
changeset
|
1342 def _rebuild_from_states(self): |
1484
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
1343 states = self._states |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
1344 domview = self._domview |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
1345 state_names = domview.all_state_names() |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
1346 for state_name in state_names: |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
1347 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
|
1348 state.tell_target_states() |
1484
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
1349 pass |
aa4137f3141e
Transition will follow the moving state
Thinker K.F. Li <thinker@codemud.net>
parents:
1483
diff
changeset
|
1350 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
|
1351 |
1478 | 1352 def _update_view(self): |
1353 self._clear_view() | |
1481 | 1354 states = self._states |
1478 | 1355 |
1356 domview = self._domview | |
1357 | |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1358 state_names = domview.all_state_names() |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1359 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
|
1360 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
|
1361 pass |
1485
20cf6ea263c6
Rename from_srcs to from_states
Thinker K.F. Li <thinker@codemud.net>
parents:
1484
diff
changeset
|
1362 self._rebuild_from_states() |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1363 pass |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1364 |
1456
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1365 def set_svg_view(self, view): |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1366 self._view_box.add(view) |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1367 self._view_widget = view |
1479
92a8497d0361
Make FSM editor scrollable
Thinker K.F. Li <thinker@codemud.net>
parents:
1478
diff
changeset
|
1368 |
92a8497d0361
Make FSM editor scrollable
Thinker K.F. Li <thinker@codemud.net>
parents:
1478
diff
changeset
|
1369 root = self._root() |
92a8497d0361
Make FSM editor scrollable
Thinker K.F. Li <thinker@codemud.net>
parents:
1478
diff
changeset
|
1370 root.setAttribute('width', '1024') |
92a8497d0361
Make FSM editor scrollable
Thinker K.F. Li <thinker@codemud.net>
parents:
1478
diff
changeset
|
1371 root.setAttribute('height', '768') |
92a8497d0361
Make FSM editor scrollable
Thinker K.F. Li <thinker@codemud.net>
parents:
1478
diff
changeset
|
1372 view.setResize(True, 800, 600) |
1456
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1373 pass |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1374 |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1375 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
|
1376 self._emit_leave_mode() |
1456
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1377 self._close_cb() |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1378 pass |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1379 |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1380 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
|
1381 self._emit_leave_mode() |
1456
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1382 self._destroy_cb() |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1383 pass |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1384 |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1385 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
|
1386 self._emit_leave_mode() |
1456
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1387 self._destroy_cb() |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1388 pass |
1467
6927debad4ee
Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents:
1458
diff
changeset
|
1389 |
6927debad4ee
Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents:
1458
diff
changeset
|
1390 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
|
1391 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
|
1392 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
|
1393 self._set_leave_mode_cb(lambda: mode.deactivate()) |
1478 | 1394 pass |
1395 | |
1396 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
|
1397 mode = self._move_state_mode |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
1398 mode.activate() |
3a671e79429a
Hide/show selection for states
Thinker K.F. Li <thinker@codemud.net>
parents:
1481
diff
changeset
|
1399 self._set_leave_mode_cb(lambda: mode.deactivate()) |
1478 | 1400 pass |
1401 | |
1402 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
|
1403 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
|
1404 pass |
8c6078c17f2d
Install test data when show FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents:
1474
diff
changeset
|
1405 |
1490
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1406 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
|
1407 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
|
1408 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
|
1409 pass |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1410 pass |
3f107ceee9c1
User can add transitions for states by popup menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1489
diff
changeset
|
1411 |
1475
8c6078c17f2d
Install test data when show FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents:
1474
diff
changeset
|
1412 def _install_test_data(self): |
1476
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1413 self._init_layers() |
eddec4543761
Install layers for FSM_window.
Thinker K.F. Li <thinker@codemud.net>
parents:
1475
diff
changeset
|
1414 |
1467
6927debad4ee
Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents:
1458
diff
changeset
|
1415 domview = self._domview |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1416 |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1417 view = self._view_widget.view |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1418 doc = view.doc() |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1419 rdoc = doc.rdoc |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1420 root_node = doc.root().repr |
1479
92a8497d0361
Make FSM editor scrollable
Thinker K.F. Li <thinker@codemud.net>
parents:
1478
diff
changeset
|
1421 |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1422 line_node = rdoc.createElement('svg:line') |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1423 line_node.setAttribute('x1', '10') |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1424 line_node.setAttribute('y1', '10') |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1425 line_node.setAttribute('x2', '100') |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1426 line_node.setAttribute('y2', '100') |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1427 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
|
1428 |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1429 root_node.appendChild(line_node) |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1430 |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1431 def show_msg(*args, **kws): |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1432 print 'mouse_event' |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1433 print args |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1434 pass |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1435 print 'before connect' |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1436 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
|
1437 print hdl_id |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
1438 |
1471
055845649807
Update FSM_window from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1469
diff
changeset
|
1439 state1 = 'state 1' |
055845649807
Update FSM_window from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1469
diff
changeset
|
1440 domview.add_state(state1) |
055845649807
Update FSM_window from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1469
diff
changeset
|
1441 domview.set_state_r(state1, 50) |
055845649807
Update FSM_window from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1469
diff
changeset
|
1442 domview.set_state_xy(state1, 200, 100) |
055845649807
Update FSM_window from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1469
diff
changeset
|
1443 state2 = 'state 2' |
055845649807
Update FSM_window from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1469
diff
changeset
|
1444 domview.add_state(state2) |
055845649807
Update FSM_window from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1469
diff
changeset
|
1445 domview.set_state_r(state2, 30) |
055845649807
Update FSM_window from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1469
diff
changeset
|
1446 domview.set_state_xy(state2, 300, 100) |
055845649807
Update FSM_window from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1469
diff
changeset
|
1447 domview.add_transition(state1, 'event1', state2) |
055845649807
Update FSM_window from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1469
diff
changeset
|
1448 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
|
1449 240, 180, |
055845649807
Update FSM_window from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1469
diff
changeset
|
1450 260, 180, |
055845649807
Update FSM_window from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1469
diff
changeset
|
1451 300, 130)) |
1467
6927debad4ee
Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents:
1458
diff
changeset
|
1452 pass |
1475
8c6078c17f2d
Install test data when show FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents:
1474
diff
changeset
|
1453 |
8c6078c17f2d
Install test data when show FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents:
1474
diff
changeset
|
1454 def show(self): |
8c6078c17f2d
Install test data when show FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents:
1474
diff
changeset
|
1455 self._install_test_data() |
8c6078c17f2d
Install test data when show FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents:
1474
diff
changeset
|
1456 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
|
1457 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
|
1458 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
|
1459 super(FSM_window, self).show() |
8c6078c17f2d
Install test data when show FSM_window
Thinker K.F. Li <thinker@codemud.net>
parents:
1474
diff
changeset
|
1460 pass |
1478 | 1461 |
1462 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
|
1463 assert self._grab_mouse_hdl is None |
1478 | 1464 |
1465 root = self._root() | |
1466 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
|
1467 self._grab_mouse_hdl = root.spitem.connect('mouse-event', callback) |
1478 | 1468 pass |
1469 | |
1470 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
|
1471 if not self._grab_mouse_hdl: |
1478 | 1472 return |
1473 | |
1474 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
|
1475 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
|
1476 self._grab_mouse_hdl = None |
1478 | 1477 root.setAttribute('inkscape:groupmode', 'layer') |
1478 pass | |
1479 | |
1480 def grab_bg(self, callback): | |
1481 assert self._bg_hdl is None | |
1482 assert self._background | |
1483 | |
1484 background = self._background | |
1485 bg_hdl = background.spitem.connect('mouse-event', callback) | |
1486 self._bg_hdl = bg_hdl | |
1487 pass | |
1488 | |
1489 def ungrab_bg(self): | |
1490 if not self._bg_hdl: | |
1491 return | |
1492 | |
1493 background = self._background | |
1494 bg_hdl = self._bg_hdl | |
1495 background.spitem.disconnect(bg_hdl) | |
1496 self._bg_hdl = None | |
1497 pass | |
1456
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1498 pass |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1499 |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1500 if __name__ == '__main__': |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1501 win = FSM_window() |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1502 win._main_win.connect('destroy', gtk.main_quit) |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1503 win.show() |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1504 gtk.main() |
894a4bf35fe6
Start implement FSM editor window
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1505 pass |