620 break; |
614 break; |
621 } |
615 } |
622 return false; |
616 return false; |
623 } |
617 } |
624 |
618 |
625 bool GraphDisplayerCanvas::edgeMapEditEventHandler(GdkEvent* e) |
619 bool GraphDisplayerCanvas::mapEditEventHandler(GdkEvent* e) |
626 { |
620 { |
627 if(actual_tool==EDGE_MAP_EDIT) |
621 if(actual_tool==MAP_EDIT) |
628 { |
|
629 switch(e->type) |
|
630 { |
622 { |
631 case GDK_BUTTON_PRESS: |
623 switch(e->type) |
632 { |
624 { |
633 //for determine, whether it was an edge |
625 case GDK_BUTTON_PRESS: |
634 Edge clicked_edge=INVALID; |
626 { |
635 |
627 //for determine, whether it was an edge |
636 window_to_world (e->button.x, e->button.y, clicked_x, clicked_y); |
628 Edge clicked_edge=INVALID; |
637 active_item=(get_item_at(clicked_x, clicked_y)); |
629 //for determine, whether it was a node |
638 |
630 Node clicked_node=INVALID; |
639 //find the activated item between texts |
631 |
640 for (EdgeIt i((mytab.mapstorage).graph); i!=INVALID; ++i) |
632 window_to_world (e->button.x, e->button.y, clicked_x, clicked_y); |
641 { |
633 active_item=(get_item_at(clicked_x, clicked_y)); |
642 //at the same time only one can be active |
634 |
643 if(edgetextmap[i]==active_item) |
635 //find the activated item between text of nodes |
644 { |
636 for (NodeIt i((mytab.mapstorage).graph); i!=INVALID; ++i) |
645 clicked_edge=i; |
637 { |
646 } |
638 //at the same time only one can be active |
647 } |
639 if(nodetextmap[i]==active_item) |
648 |
640 { |
649 //if it was not between texts, search for it between edges |
641 clicked_node=i; |
650 if(clicked_edge==INVALID) |
642 } |
651 { |
643 } |
652 for (EdgeIt i((mytab.mapstorage).graph); i!=INVALID; ++i) |
644 |
653 { |
645 //if there was not, search for it between nodes |
654 //at the same time only one can be active |
646 if(clicked_node==INVALID) |
655 if((edgesmap[i]==active_item)||(edgetextmap[i]==active_item)) |
647 { |
656 { |
648 for (NodeIt i((mytab.mapstorage).graph); i!=INVALID; ++i) |
657 clicked_edge=i; |
649 { |
658 } |
650 //at the same time only one can be active |
659 } |
651 if(nodesmap[i]==active_item) |
660 } |
652 { |
661 |
653 clicked_node=i; |
662 //if it was really an edge... |
654 } |
663 if(clicked_edge!=INVALID) |
655 } |
664 { |
656 } |
665 // the id map is not editable |
657 |
666 if (edgemap_to_edit == "label") return 0; |
658 if(clicked_node==INVALID) |
667 |
659 { |
668 //and there is activated map |
660 //find the activated item between texts |
669 if(edgetextmap[clicked_edge]->property_text().get_value()!="") |
661 for (EdgeIt i((mytab.mapstorage).graph); i!=INVALID; ++i) |
670 { |
662 { |
671 //activate the general variable for it |
663 //at the same time only one can be active |
672 active_edge=clicked_edge; |
664 if(edgetextmap[i]==active_item) |
673 |
665 { |
674 //create a dialog |
666 clicked_edge=i; |
675 Gtk::Dialog dialog("Edit value", true); |
667 } |
676 dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); |
668 } |
677 dialog.add_button(Gtk::Stock::OK, Gtk::RESPONSE_ACCEPT); |
669 |
678 Gtk::VBox* vbox = dialog.get_vbox(); |
670 //if it was not between texts, search for it between edges |
679 Gtk::SpinButton spin(0.0, 4); |
671 if(clicked_edge==INVALID) |
680 spin.set_increments(1.0, 10.0); |
672 { |
681 spin.set_range(-1000000.0, 1000000.0); |
673 for (EdgeIt i((mytab.mapstorage).graph); i!=INVALID; ++i) |
682 spin.set_numeric(true); |
674 { |
683 vbox->add(spin); |
675 //at the same time only one can be active |
684 spin.show(); |
676 if((edgesmap[i]->getLine())==active_item) |
685 switch (dialog.run()) |
677 { |
686 { |
678 clicked_edge=i; |
687 case Gtk::RESPONSE_NONE: |
679 } |
688 case Gtk::RESPONSE_CANCEL: |
680 } |
689 break; |
681 } |
690 case Gtk::RESPONSE_ACCEPT: |
682 } |
691 double new_value = spin.get_value(); |
683 |
692 (*(mytab.mapstorage).edgemap_storage[edgemap_to_edit])[active_edge] = |
684 //if it was really a node... |
693 new_value; |
685 if(clicked_node!=INVALID) |
694 std::ostringstream ostr; |
686 { |
695 ostr << new_value; |
687 // the id map is not editable |
696 edgetextmap[active_edge]->property_text().set_value( |
688 if (nodemap_to_edit == "label") return 0; |
697 ostr.str()); |
689 |
698 //mapwin.updateEdge(active_edge); |
690 //and there is activated map |
699 // mapwin.updateEdge(Edge(INVALID)); |
691 if(nodetextmap[clicked_node]->property_text().get_value()!="") |
700 propertyUpdate(Edge(INVALID)); |
692 { |
701 } |
693 //activate the general variable for it |
702 } |
694 active_node=clicked_node; |
703 } |
695 |
704 break; |
696 //create a dialog |
705 } |
697 Gtk::Dialog dialog("Edit value", true); |
706 default: |
698 dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); |
707 break; |
699 dialog.add_button(Gtk::Stock::OK, Gtk::RESPONSE_ACCEPT); |
|
700 Gtk::VBox* vbox = dialog.get_vbox(); |
|
701 Gtk::SpinButton spin(0.0, 4); |
|
702 spin.set_increments(1.0, 10.0); |
|
703 spin.set_range(-1000000.0, 1000000.0); |
|
704 spin.set_numeric(true); |
|
705 spin.set_value(atof(nodetextmap[active_node]->property_text().get_value().c_str())); |
|
706 vbox->add(spin); |
|
707 spin.show(); |
|
708 switch (dialog.run()) |
|
709 { |
|
710 case Gtk::RESPONSE_NONE: |
|
711 case Gtk::RESPONSE_CANCEL: |
|
712 break; |
|
713 case Gtk::RESPONSE_ACCEPT: |
|
714 double new_value = spin.get_value(); |
|
715 (*(mytab.mapstorage).nodemap_storage[nodemap_to_edit])[active_node] = |
|
716 new_value; |
|
717 std::ostringstream ostr; |
|
718 ostr << new_value; |
|
719 nodetextmap[active_node]->property_text().set_value(ostr.str()); |
|
720 //mapwin.updateNode(active_node); |
|
721 //mapwin.updateNode(Node(INVALID)); |
|
722 propertyUpdate(Node(INVALID)); |
|
723 } |
|
724 } |
|
725 } |
|
726 else |
|
727 //if it was really an edge... |
|
728 if(clicked_edge!=INVALID) |
|
729 { |
|
730 // the id map is not editable |
|
731 if (edgemap_to_edit == "label") return 0; |
|
732 |
|
733 //and there is activated map |
|
734 if(edgetextmap[clicked_edge]->property_text().get_value()!="") |
|
735 { |
|
736 //activate the general variable for it |
|
737 active_edge=clicked_edge; |
|
738 |
|
739 //create a dialog |
|
740 Gtk::Dialog dialog("Edit value", true); |
|
741 dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); |
|
742 dialog.add_button(Gtk::Stock::OK, Gtk::RESPONSE_ACCEPT); |
|
743 Gtk::VBox* vbox = dialog.get_vbox(); |
|
744 Gtk::SpinButton spin(0.0, 4); |
|
745 spin.set_increments(1.0, 10.0); |
|
746 spin.set_range(-1000000.0, 1000000.0); |
|
747 spin.set_numeric(true); |
|
748 spin.set_value(atof(edgetextmap[active_edge]->property_text().get_value().c_str())); |
|
749 vbox->add(spin); |
|
750 spin.show(); |
|
751 switch (dialog.run()) |
|
752 { |
|
753 case Gtk::RESPONSE_NONE: |
|
754 case Gtk::RESPONSE_CANCEL: |
|
755 break; |
|
756 case Gtk::RESPONSE_ACCEPT: |
|
757 double new_value = spin.get_value(); |
|
758 (*(mytab.mapstorage).edgemap_storage[edgemap_to_edit])[active_edge] = |
|
759 new_value; |
|
760 std::ostringstream ostr; |
|
761 ostr << new_value; |
|
762 edgetextmap[active_edge]->property_text().set_value( |
|
763 ostr.str()); |
|
764 //mapwin.updateEdge(active_edge); |
|
765 // mapwin.updateEdge(Edge(INVALID)); |
|
766 propertyUpdate(Edge(INVALID)); |
|
767 } |
|
768 } |
|
769 } |
|
770 break; |
|
771 } |
|
772 default: |
|
773 break; |
|
774 } |
708 } |
775 } |
709 } |
|
710 return false; |
|
711 } |
|
712 |
|
713 bool GraphDisplayerCanvas::nodeMapEditEventHandler(GdkEvent* e) |
|
714 { |
|
715 if(actual_tool==NODE_MAP_EDIT) |
|
716 { |
|
717 switch(e->type) |
|
718 { |
|
719 case GDK_BUTTON_PRESS: |
|
720 { |
|
721 //for determine, whether it was a node |
|
722 Node clicked_node=INVALID; |
|
723 |
|
724 window_to_world (e->button.x, e->button.y, clicked_x, clicked_y); |
|
725 active_item=(get_item_at(clicked_x, clicked_y)); |
|
726 |
|
727 //find the activated item between texts |
|
728 for (NodeIt i((mytab.mapstorage).graph); i!=INVALID; ++i) |
|
729 { |
|
730 //at the same time only one can be active |
|
731 if(nodetextmap[i]==active_item) |
|
732 { |
|
733 clicked_node=i; |
|
734 } |
|
735 } |
|
736 |
|
737 //if there was not, search for it between nodes |
|
738 if(clicked_node==INVALID) |
|
739 { |
|
740 for (NodeIt i((mytab.mapstorage).graph); i!=INVALID; ++i) |
|
741 { |
|
742 //at the same time only one can be active |
|
743 if(nodesmap[i]==active_item) |
|
744 { |
|
745 clicked_node=i; |
|
746 } |
|
747 } |
|
748 } |
|
749 |
|
750 //if it was really a node... |
|
751 if(clicked_node!=INVALID) |
|
752 { |
|
753 // the id map is not editable |
|
754 if (nodemap_to_edit == "label") return 0; |
|
755 |
|
756 //and there is activated map |
|
757 if(nodetextmap[clicked_node]->property_text().get_value()!="") |
|
758 { |
|
759 //activate the general variable for it |
|
760 active_node=clicked_node; |
|
761 |
|
762 //create a dialog |
|
763 Gtk::Dialog dialog("Edit value", true); |
|
764 dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); |
|
765 dialog.add_button(Gtk::Stock::OK, Gtk::RESPONSE_ACCEPT); |
|
766 Gtk::VBox* vbox = dialog.get_vbox(); |
|
767 Gtk::SpinButton spin(0.0, 4); |
|
768 spin.set_increments(1.0, 10.0); |
|
769 spin.set_range(-1000000.0, 1000000.0); |
|
770 spin.set_numeric(true); |
|
771 vbox->add(spin); |
|
772 spin.show(); |
|
773 switch (dialog.run()) |
|
774 { |
|
775 case Gtk::RESPONSE_NONE: |
|
776 case Gtk::RESPONSE_CANCEL: |
|
777 break; |
|
778 case Gtk::RESPONSE_ACCEPT: |
|
779 double new_value = spin.get_value(); |
|
780 (*(mytab.mapstorage).nodemap_storage[nodemap_to_edit])[active_node] = |
|
781 new_value; |
|
782 std::ostringstream ostr; |
|
783 ostr << new_value; |
|
784 nodetextmap[active_node]->property_text().set_value( |
|
785 ostr.str()); |
|
786 //mapwin.updateNode(active_node); |
|
787 // mapwin.updateNode(Node(INVALID)); |
|
788 propertyUpdate(Node(INVALID)); |
|
789 } |
|
790 } |
|
791 } |
|
792 break; |
|
793 } |
|
794 default: |
|
795 break; |
|
796 } |
|
797 } |
|
798 return false; |
776 return false; |
799 } |
777 } |
800 |
778 |
801 void GraphDisplayerCanvas::deleteItem(Node node_to_delete) |
779 void GraphDisplayerCanvas::deleteItem(Node node_to_delete) |
802 { |
780 { |