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