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):