Mercurial > MadButterfly
comparison pyink/FSM_window.py @ 1488:757c5626d15d
Show context menu for states
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Sat, 30 Apr 2011 15:22:45 +0800 |
parents | 3aba29609607 |
children | 1e607ce4bf7d |
comparison
equal
deleted
inserted
replaced
1487:3aba29609607 | 1488:757c5626d15d |
---|---|
1 import gtk | 1 import gtk |
2 import os | 2 import os |
3 import data_monitor | 3 import data_monitor |
4 | 4 |
5 class FSM_window_base(object): | 5 class FSM_window_base(object): |
6 _add_state_button = None | |
7 _move_state_button = None | |
8 | |
6 _state_editor = None | 9 _state_editor = None |
7 _state_name = None | 10 _state_name = None |
8 _state_radius = None | 11 _state_radius = None |
9 | 12 |
10 _error_dialog = None | 13 _error_dialog = None |
11 _error_dialog_label = None | 14 _error_dialog_label = None |
15 | |
16 _state_menu = None | |
12 | 17 |
13 def __init__(self): | 18 def __init__(self): |
14 super(FSM_window_base, self).__init__() | 19 super(FSM_window_base, self).__init__() |
15 | 20 |
16 dirname = os.path.dirname(__file__) | 21 dirname = os.path.dirname(__file__) |
28 state_name = builder.get_object('state_name') | 33 state_name = builder.get_object('state_name') |
29 state_radius = builder.get_object('state_radius') | 34 state_radius = builder.get_object('state_radius') |
30 | 35 |
31 error_dialog = builder.get_object('error_dialog') | 36 error_dialog = builder.get_object('error_dialog') |
32 error_dialog_label = builder.get_object('error_dialog_label') | 37 error_dialog_label = builder.get_object('error_dialog_label') |
38 | |
39 state_menu = builder.get_object('state_menu') | |
33 | 40 |
34 builder.connect_signals(self) | 41 builder.connect_signals(self) |
35 | 42 |
36 self._builder = builder | 43 self._builder = builder |
37 self._main_win = main_win | 44 self._main_win = main_win |
43 self._state_name = state_name | 50 self._state_name = state_name |
44 self._state_radius = state_radius | 51 self._state_radius = state_radius |
45 | 52 |
46 self._error_dialog = error_dialog | 53 self._error_dialog = error_dialog |
47 self._error_dialog_label = error_dialog_label | 54 self._error_dialog_label = error_dialog_label |
55 | |
56 self._state_menu = state_menu | |
48 pass | 57 pass |
49 | 58 |
50 def show_error(self, msg): | 59 def show_error(self, msg): |
51 error_dialog = self._error_dialog | 60 error_dialog = self._error_dialog |
52 error_dialog_label = self._error_dialog_label | 61 error_dialog_label = self._error_dialog_label |
73 def hide_state_editor(self): | 82 def hide_state_editor(self): |
74 state_editor = self._state_editor | 83 state_editor = self._state_editor |
75 state_editor.hide() | 84 state_editor.hide() |
76 pass | 85 pass |
77 | 86 |
87 def popup_state_menu(self): | |
88 menu = self._state_menu | |
89 menu.popup(None, None, None, 0, 0) | |
90 pass | |
91 | |
78 def show(self): | 92 def show(self): |
79 self._main_win.show() | 93 self._main_win.show() |
80 self._add_state_button.set_active(True) | 94 self._add_state_button.set_active(True) |
81 pass | 95 pass |
82 | 96 |
124 pass | 138 pass |
125 | 139 |
126 def on_error_dialog_ok_clicked(self, *args): | 140 def on_error_dialog_ok_clicked(self, *args): |
127 error_dialog = self._error_dialog | 141 error_dialog = self._error_dialog |
128 error_dialog.hide() | 142 error_dialog.hide() |
143 pass | |
144 | |
145 def on_add_transition_activate(self, *args): | |
146 pass | |
147 | |
148 def on_del_state_activate(self, *args): | |
149 pass | |
150 | |
151 def on_edit_state_activate(self, *args): | |
129 pass | 152 pass |
130 pass | 153 pass |
131 | 154 |
132 class FSM_transition(object): | 155 class FSM_transition(object): |
133 _doc = None | 156 _doc = None |
509 self._window = window | 532 self._window = window |
510 self._domview = domview_ui | 533 self._domview = domview_ui |
511 self._locker = domview_ui | 534 self._locker = domview_ui |
512 pass | 535 pass |
513 | 536 |
514 def on_move_state_background(self, item, evtype, buttons, x, y): | 537 def on_move_state_background(self, item, evtype, button, x, y): |
515 pass | 538 pass |
516 | 539 |
517 def _select_state(self, state): | 540 def _select_state(self, state): |
518 if self._selected_state: | 541 if self._selected_state: |
519 self._selected_state.hide_selected() | 542 self._selected_state.hide_selected() |
527 self._selected_state.hide_selected() | 550 self._selected_state.hide_selected() |
528 pass | 551 pass |
529 self._selected_state = None | 552 self._selected_state = None |
530 pass | 553 pass |
531 | 554 |
532 def handle_move_state_state(self, state, evtype, buttons, x, y): | 555 def handle_move_state_state(self, state, evtype, button, x, y): |
533 import pybInkscape | 556 import pybInkscape |
534 | 557 |
535 window = self._window | 558 window = self._window |
536 states = window._states | 559 states = window._states |
537 | 560 |
538 def moving_state(item, evtype, buttons, x, y): | 561 def moving_state(item, evtype, button, x, y): |
539 if evtype == pybInkscape.PYSPItem.PYB_EVENT_BUTTON_RELEASE: | 562 if evtype == pybInkscape.PYSPItem.PYB_EVENT_BUTTON_RELEASE: |
540 window.ungrab_mouse() | 563 window.ungrab_mouse() |
541 pass | 564 pass |
542 new_state_x = orign_state_x + start_x - x | 565 new_state_x = orign_state_x + start_x - x |
543 new_state_y = orign_state_y + start_y - y | 566 new_state_y = orign_state_y + start_y - y |
549 state.show_selected() | 572 state.show_selected() |
550 pass | 573 pass |
551 | 574 |
552 window = self._window | 575 window = self._window |
553 | 576 |
554 if evtype == pybInkscape.PYSPItem.PYB_EVENT_BUTTON_PRESS: | 577 if evtype == pybInkscape.PYSPItem.PYB_EVENT_BUTTON_PRESS and \ |
578 button == 1: | |
555 start_x = x | 579 start_x = x |
556 start_y = y | 580 start_y = y |
557 orign_state_x, orign_state_y = state.xy | 581 orign_state_x, orign_state_y = state.xy |
558 | 582 |
559 self._select_state(state) | 583 self._select_state(state) |
560 window.grab_mouse(moving_state) | 584 window.grab_mouse(moving_state) |
561 pass | 585 pass |
562 | 586 |
563 if evtype == pybInkscape.PYSPItem.PYB_EVENT_BUTTON_RELEASE: | 587 if evtype == pybInkscape.PYSPItem.PYB_EVENT_BUTTON_RELEASE and \ |
588 button == 1: | |
564 window.ungrab_mouse() | 589 window.ungrab_mouse() |
565 pass | 590 pass |
566 pass | 591 pass |
567 | 592 |
568 def activate(self): | 593 def activate(self): |
628 window._load_new_state_incr(state_name) | 653 window._load_new_state_incr(state_name) |
629 | 654 |
630 window.hide_state_editor() | 655 window.hide_state_editor() |
631 pass | 656 pass |
632 | 657 |
633 def on_add_state_background(self, item, evtype, buttons, x, y): | 658 def on_add_state_background(self, item, evtype, button, x, y): |
634 import pybInkscape | 659 import pybInkscape |
635 | 660 |
636 window = self._window | 661 window = self._window |
637 | 662 |
638 if evtype == pybInkscape.PYSPItem.PYB_EVENT_BUTTON_RELEASE and \ | 663 if evtype == pybInkscape.PYSPItem.PYB_EVENT_BUTTON_RELEASE and \ |
639 buttons == 1: | 664 button == 1: |
640 self._saved_x = x | 665 self._saved_x = x |
641 self._saved_y = y | 666 self._saved_y = y |
642 window.show_state_editor() | 667 window.show_state_editor() |
643 pass | 668 pass |
644 pass | 669 pass |
645 | 670 |
671 def _handle_state_mouse_events(self, state, evtype, button, x, y): | |
672 import pybInkscape | |
673 | |
674 if evtype == pybInkscape.PYSPItem.PYB_EVENT_BUTTON_RELEASE and \ | |
675 button == 3: | |
676 window = self._window | |
677 window.popup_state_menu() | |
678 pass | |
679 pass | |
680 | |
646 def activate(self): | 681 def activate(self): |
647 window = self._window | 682 window = self._window |
648 | 683 |
649 window._emit_leave_mode() | 684 window._emit_leave_mode() |
650 window.ungrab_all() | 685 window.ungrab_all() |
651 | 686 |
652 window.grab_bg(self.on_add_state_background) | 687 window.grab_bg(self.on_add_state_background) |
688 window.grab_state(self._handle_state_mouse_events) | |
653 pass | 689 pass |
654 | 690 |
655 def deactivate(self): | 691 def deactivate(self): |
656 pass | 692 pass |
657 pass | 693 pass |
775 self.ungrab_bg() | 811 self.ungrab_bg() |
776 self.ungrab_mouse() | 812 self.ungrab_mouse() |
777 self.ungrab_state() | 813 self.ungrab_state() |
778 pass | 814 pass |
779 | 815 |
780 def on_state_mouse_event(self, state, evtype, buttons, x, y): | 816 def on_state_mouse_event(self, state, evtype, button, x, y): |
781 if self._state_mouse_event_handler: | 817 if self._state_mouse_event_handler: |
782 self._state_mouse_event_handler(state, evtype, buttons, x, y) | 818 self._state_mouse_event_handler(state, evtype, button, x, y) |
783 pass | 819 pass |
784 pass | 820 pass |
785 | 821 |
786 def _install_state_event_handler(self, state): | 822 def _install_state_event_handler(self, state): |
787 def mouse_event_handler(item, evtype, buttons, x, y): | 823 def mouse_event_handler(item, evtype, button, x, y): |
788 self.on_state_mouse_event(state, evtype, buttons, x, y) | 824 self.on_state_mouse_event(state, evtype, button, x, y) |
789 pass | 825 pass |
790 state.grab(mouse_event_handler) | 826 state.grab(mouse_event_handler) |
791 pass | 827 pass |
792 | 828 |
793 def grab_state(self, callback): | 829 def grab_state(self, callback): |