Mercurial > MadButterfly
comparison pyink/FSM_window.py @ 1483:9df6ed043b87
Move code for add state mode to FSM_add_state_mode class
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Fri, 29 Apr 2011 16:19:10 +0800 |
parents | 3a671e79429a |
children | aa4137f3141e |
comparison
equal
deleted
inserted
replaced
1482:3a671e79429a | 1483:9df6ed043b87 |
---|---|
411 | 411 |
412 _window = None | 412 _window = None |
413 _selected_state = None | 413 _selected_state = None |
414 | 414 |
415 def __init__(self, window, domview_ui): | 415 def __init__(self, window, domview_ui): |
416 super(FSM_move_state_mode, self).__init__() | |
417 | |
416 self._window = window | 418 self._window = window |
417 self._domview = domview_ui | 419 self._domview = domview_ui |
418 self._locker = domview_ui | 420 self._locker = domview_ui |
419 pass | 421 pass |
420 | 422 |
484 pass | 486 pass |
485 pass | 487 pass |
486 pass | 488 pass |
487 | 489 |
488 | 490 |
491 class FSM_add_state_mode(object): | |
492 __metaclass__ = data_monitor.data_monitor | |
493 __data_monitor_prefix__ = 'on_' | |
494 | |
495 _saved_x = 0 | |
496 _saved_y = 0 | |
497 | |
498 def __init__(self, window, domview_ui): | |
499 super(FSM_add_state_mode, self).__init__() | |
500 | |
501 self._window = window | |
502 self._domview = domview_ui | |
503 self._locker = domview_ui | |
504 pass | |
505 | |
506 def handle_new_state(self): | |
507 import traceback | |
508 | |
509 domview = self._domview | |
510 window = self._window | |
511 x, y = window._translate_xy(self._saved_x, self._saved_y) | |
512 | |
513 state_name = window._state_name.get_text() | |
514 r_txt = window._state_radius.get_text() | |
515 try: | |
516 r = float(r_txt) | |
517 except ValueError: | |
518 traceback.print_exc() | |
519 window.show_error('Invalid value: "%s" is not a valid value ' | |
520 'for radius.' % (r_txt)) | |
521 return | |
522 | |
523 try: | |
524 domview.add_state(state_name) | |
525 except: | |
526 traceback.print_exc() | |
527 window.show_error('Invalid state name: "%s" is existing' % | |
528 (state_name)) | |
529 return | |
530 domview.set_state_xy(state_name, x, y) | |
531 domview.set_state_r(state_name, r) | |
532 | |
533 window._load_new_state(state_name) | |
534 | |
535 window.hide_state_editor() | |
536 pass | |
537 | |
538 def on_add_state_background(self, item, evtype, buttons, x, y): | |
539 import pybInkscape | |
540 | |
541 window = self._window | |
542 | |
543 if evtype == pybInkscape.PYSPItem.PYB_EVENT_BUTTON_RELEASE and \ | |
544 buttons == 1: | |
545 self._saved_x = x | |
546 self._saved_y = y | |
547 window.show_state_editor() | |
548 pass | |
549 pass | |
550 | |
551 def activate(self): | |
552 window = self._window | |
553 | |
554 window._emit_leave_mode() | |
555 window.ungrab_all() | |
556 | |
557 window.grab_bg(self.on_add_state_background) | |
558 pass | |
559 | |
560 def deactivate(self): | |
561 pass | |
562 pass | |
563 | |
489 class FSM_window(FSM_window_base): | 564 class FSM_window(FSM_window_base): |
490 __metaclass__ = data_monitor.data_monitor | 565 __metaclass__ = data_monitor.data_monitor |
491 __data_monitor_prefix__ = 'on_' | 566 __data_monitor_prefix__ = 'on_' |
492 | 567 |
493 _background = None | 568 _background = None |
497 height = 768 | 572 height = 768 |
498 | 573 |
499 _grab_hdl = None | 574 _grab_hdl = None |
500 _bg_hdl = None | 575 _bg_hdl = None |
501 | 576 |
502 _saved_x = 0 | |
503 _saved_y = 0 | |
504 | |
505 _leave_mode_cb = None | 577 _leave_mode_cb = None |
506 _move_state_mode = None | 578 _move_state_mode = None |
579 _add_state_mode = None | |
507 _state_mouse_event_handler = None | 580 _state_mouse_event_handler = None |
508 | 581 |
509 def __init__(self, domview_ui, close_cb, destroy_cb): | 582 def __init__(self, domview_ui, close_cb, destroy_cb): |
510 super(FSM_window, self).__init__() | 583 super(FSM_window, self).__init__() |
511 | 584 |
516 | 589 |
517 self._close_cb = close_cb # callback to close editor window (hide) | 590 self._close_cb = close_cb # callback to close editor window (hide) |
518 self._destroy_cb = destroy_cb # callback to destroy editor window | 591 self._destroy_cb = destroy_cb # callback to destroy editor window |
519 | 592 |
520 self._move_state_mode = FSM_move_state_mode(self, domview_ui) | 593 self._move_state_mode = FSM_move_state_mode(self, domview_ui) |
594 self._add_state_mode = FSM_add_state_mode(self, domview_ui) | |
521 pass | 595 pass |
522 | 596 |
523 def _init_layers(self): | 597 def _init_layers(self): |
524 doc = self._doc() | 598 doc = self._doc() |
525 root = self._root() | 599 root = self._root() |
543 control_layer = doc.createElement('svg:g') | 617 control_layer = doc.createElement('svg:g') |
544 control_layer.setAttribute('inkscape:groupmode', 'layer') | 618 control_layer.setAttribute('inkscape:groupmode', 'layer') |
545 root.appendChild(control_layer) | 619 root.appendChild(control_layer) |
546 self._control_layer = control_layer | 620 self._control_layer = control_layer |
547 | 621 |
548 self.grab_bg(self.on_add_state_background) | 622 self._add_state_mode.activate() |
549 pass | 623 pass |
550 | 624 |
551 def _doc(self): | 625 def _doc(self): |
552 view_widget = self._view_widget | 626 view_widget = self._view_widget |
553 view = view_widget.view | 627 view = view_widget.view |
629 | 703 |
630 def ungrab_state(self): | 704 def ungrab_state(self): |
631 self._state_mouse_event_handler = None | 705 self._state_mouse_event_handler = None |
632 pass | 706 pass |
633 | 707 |
708 def _load_new_state(self, state_name): | |
709 states = self._states | |
710 | |
711 self._draw_state_domview(state_name) | |
712 state = states[state_name] | |
713 self._install_state_event_handler(state) | |
714 pass | |
715 | |
634 def _update_view(self): | 716 def _update_view(self): |
635 self._clear_view() | 717 self._clear_view() |
636 states = self._states | 718 states = self._states |
637 | 719 |
638 domview = self._domview | 720 domview = self._domview |
639 | 721 |
640 state_names = domview.all_state_names() | 722 state_names = domview.all_state_names() |
641 for state_name in state_names: | 723 for state_name in state_names: |
642 self._draw_state_domview(state_name) | 724 self._load_new_state(state_name) |
643 state = states[state_name] | |
644 self._install_state_event_handler(state) | |
645 pass | 725 pass |
646 pass | 726 pass |
647 | 727 |
648 def set_svg_view(self, view): | 728 def set_svg_view(self, view): |
649 self._view_box.add(view) | 729 self._view_box.add(view) |
666 def on_FSM_main_win_delete_event(self, *args): | 746 def on_FSM_main_win_delete_event(self, *args): |
667 self._destroy_cb() | 747 self._destroy_cb() |
668 pass | 748 pass |
669 | 749 |
670 def on_add_state_toggled(self, *args): | 750 def on_add_state_toggled(self, *args): |
671 self._emit_leave_mode() | 751 mode = self._add_state_mode |
672 self.ungrab_all() | 752 mode.activate() |
673 | 753 self._set_leave_mode_cb(lambda: mode.deactivate()) |
674 self.grab_bg(self.on_add_state_background) | |
675 pass | 754 pass |
676 | 755 |
677 def on_move_state_toggled(self, *args): | 756 def on_move_state_toggled(self, *args): |
678 mode = self._move_state_mode | 757 mode = self._move_state_mode |
679 mode.activate() | 758 mode.activate() |
680 self._set_leave_mode_cb(lambda: mode.deactivate()) | 759 self._set_leave_mode_cb(lambda: mode.deactivate()) |
681 pass | 760 pass |
682 | 761 |
683 def on_add_state_background(self, item, evtype, buttons, x, y): | |
684 import pybInkscape | |
685 | |
686 if evtype == pybInkscape.PYSPItem.PYB_EVENT_BUTTON_RELEASE and \ | |
687 buttons == 1: | |
688 self._saved_x = x | |
689 self._saved_y = y | |
690 self.show_state_editor() | |
691 pass | |
692 pass | |
693 | |
694 def on_state_apply_clicked(self, *args): | 762 def on_state_apply_clicked(self, *args): |
695 import traceback | 763 self._add_state_mode.handle_new_state() |
696 | |
697 domview = self._domview | |
698 x, y = self._translate_xy(self._saved_x, self._saved_y) | |
699 | |
700 state_name = self._state_name.get_text() | |
701 r_txt = self._state_radius.get_text() | |
702 try: | |
703 r = float(r_txt) | |
704 except ValueError: | |
705 traceback.print_exc() | |
706 self.show_error('Invalid value: "%s" is not a valid value ' | |
707 'for radius.' % (r_txt)) | |
708 return | |
709 | |
710 try: | |
711 domview.add_state(state_name) | |
712 except: | |
713 traceback.print_exc() | |
714 self.show_error('Invalid state name: "%s" is existing' % | |
715 (state_name)) | |
716 return | |
717 domview.set_state_xy(state_name, x, y) | |
718 domview.set_state_r(state_name, r) | |
719 | |
720 self._draw_state_domview(state_name) | |
721 | |
722 self.hide_state_editor() | |
723 pass | 764 pass |
724 | 765 |
725 def _install_test_data(self): | 766 def _install_test_data(self): |
726 self._init_layers() | 767 self._init_layers() |
727 | 768 |