11 return true; |
11 return true; |
12 } |
12 } |
13 |
13 |
14 void GraphDisplayerCanvas::changeEditorialTool(int newtool) |
14 void GraphDisplayerCanvas::changeEditorialTool(int newtool) |
15 { |
15 { |
16 actual_handler.disconnect(); |
16 if(actual_tool!=newtool) |
17 |
|
18 if(actual_tool==CREATE_EDGE) |
|
19 { |
17 { |
20 GdkEvent * generated=new GdkEvent(); |
18 |
21 generated->type=GDK_BUTTON_RELEASE; |
19 actual_handler.disconnect(); |
22 generated->button.button=3; |
20 |
23 createEdgeEventHandler(generated); |
21 switch(actual_tool) |
24 } |
22 { |
25 |
23 case CREATE_EDGE: |
26 actual_tool=newtool; |
24 { |
27 |
25 GdkEvent * generated=new GdkEvent(); |
28 active_item=NULL; |
26 generated->type=GDK_BUTTON_RELEASE; |
29 target_item=NULL; |
27 generated->button.button=3; |
30 active_edge=INVALID; |
28 createEdgeEventHandler(generated); |
31 active_node=INVALID; |
29 break; |
32 |
30 } |
33 switch(newtool) |
31 case EDGE_MAP_EDIT: |
34 { |
32 break; |
35 case MOVE: |
33 default: |
36 actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::moveEventHandler), false); |
34 break; |
37 break; |
35 } |
38 |
36 |
39 case CREATE_NODE: |
37 active_item=NULL; |
40 actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::createNodeEventHandler), false); |
38 target_item=NULL; |
41 break; |
39 active_edge=INVALID; |
42 |
40 active_node=INVALID; |
43 case CREATE_EDGE: |
41 |
44 actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::createEdgeEventHandler), false); |
42 |
45 break; |
43 actual_tool=newtool; |
46 |
44 |
47 case ERASER: |
45 switch(newtool) |
48 actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::eraserEventHandler), false); |
46 { |
49 break; |
47 case MOVE: |
50 |
48 actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::moveEventHandler), false); |
51 case EDGE_MAP_EDIT: |
49 break; |
52 actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::edgeMapEditEventHandler), false); |
50 |
53 break; |
51 case CREATE_NODE: |
54 |
52 actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::createNodeEventHandler), false); |
55 case NODE_MAP_EDIT: |
53 break; |
56 actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::nodeMapEditEventHandler), false); |
54 |
57 break; |
55 case CREATE_EDGE: |
58 |
56 actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::createEdgeEventHandler), false); |
59 default: |
57 break; |
60 break; |
58 |
|
59 case ERASER: |
|
60 actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::eraserEventHandler), false); |
|
61 break; |
|
62 |
|
63 case EDGE_MAP_EDIT: |
|
64 grab_focus(); |
|
65 actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::edgeMapEditEventHandler), false); |
|
66 break; |
|
67 |
|
68 case NODE_MAP_EDIT: |
|
69 actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::nodeMapEditEventHandler), false); |
|
70 break; |
|
71 |
|
72 default: |
|
73 break; |
|
74 } |
61 } |
75 } |
62 } |
76 } |
63 |
77 |
64 int GraphDisplayerCanvas::getActualTool() |
78 int GraphDisplayerCanvas::getActualTool() |
65 { |
79 { |
490 |
504 |
491 bool GraphDisplayerCanvas::edgeMapEditEventHandler(GdkEvent* e) |
505 bool GraphDisplayerCanvas::edgeMapEditEventHandler(GdkEvent* e) |
492 { |
506 { |
493 switch(e->type) |
507 switch(e->type) |
494 { |
508 { |
|
509 case GDK_KEY_PRESS: |
|
510 { |
|
511 std::cout << "Any button was pressed" << std::endl; |
|
512 switch(((GdkEventKey*)e)->keyval) |
|
513 { |
|
514 case GDK_A: |
|
515 std::cout << "A button was pressed" << std::endl; |
|
516 break; |
|
517 default: |
|
518 break; |
|
519 } |
|
520 |
|
521 break; |
|
522 } |
495 case GDK_BUTTON_PRESS: |
523 case GDK_BUTTON_PRESS: |
496 window_to_world (e->button.x, e->button.y, clicked_x, clicked_y); |
524 { |
497 active_item=(get_item_at(clicked_x, clicked_y)); |
525 window_to_world (e->button.x, e->button.y, clicked_x, clicked_y); |
498 active_edge=INVALID; |
526 active_item=(get_item_at(clicked_x, clicked_y)); |
499 for (EdgeIt i(g); i!=INVALID; ++i) |
527 Graph::EdgeIt clicked_edge=INVALID; |
500 { |
528 for (EdgeIt i(g); i!=INVALID; ++i) |
501 if(edgesmap[i]==active_item) |
529 { |
502 { |
530 if(edgesmap[i]==active_item) |
503 active_edge=i; |
531 { |
504 } |
532 clicked_edge=i; |
505 } |
533 } |
506 if((active_edge!=INVALID)&&(edgetextmap[active_edge]->property_text().get_value()!="")) |
534 } |
507 { |
535 if(clicked_edge!=INVALID) |
508 if(canvasentrywidget) |
536 { |
509 { |
537 if(edgetextmap[clicked_edge]->property_text().get_value()!="") |
510 delete(canvasentrywidget); |
538 { |
511 } |
539 active_edge=clicked_edge; |
512 entrywidget.show(); |
540 if(canvasentrywidget) |
513 entrywidget.set_text(edgetextmap[active_edge]->property_text().get_value()); |
541 { |
514 xy<double> entry_coos; |
542 delete(canvasentrywidget); |
515 entry_coos.x=(edgetextmap[active_edge])->property_x().get_value(); |
543 } |
516 entry_coos.x-=edgetextmap[active_edge]->property_text_width().get_value()/2; |
544 entrywidget.show(); |
517 entry_coos.y=(edgetextmap[active_edge])->property_y().get_value(); |
545 entrywidget.set_text(edgetextmap[active_edge]->property_text().get_value()); |
518 entry_coos.y-=edgetextmap[active_edge]->property_text_height().get_value()*1.5/2; |
546 xy<double> entry_coos; |
519 canvasentrywidget=new Gnome::Canvas::Widget(displayed_graph, entry_coos.x, entry_coos.y, entrywidget); |
547 entry_coos.x=(edgetextmap[active_edge])->property_x().get_value(); |
520 canvasentrywidget->property_width().set_value(edgetextmap[active_edge]->property_text_width().get_value()*1.5); |
548 entry_coos.x-=edgetextmap[active_edge]->property_text_width().get_value()/2; |
521 canvasentrywidget->property_height().set_value(edgetextmap[active_edge]->property_text_height().get_value()*1.5); |
549 entry_coos.y=(edgetextmap[active_edge])->property_y().get_value(); |
522 } |
550 entry_coos.y-=edgetextmap[active_edge]->property_text_height().get_value()*1.5/2; |
523 break; |
551 canvasentrywidget=new Gnome::Canvas::Widget(displayed_graph, entry_coos.x, entry_coos.y, entrywidget); |
|
552 canvasentrywidget->property_width().set_value(edgetextmap[active_edge]->property_text_width().get_value()*1.5); |
|
553 canvasentrywidget->property_height().set_value(edgetextmap[active_edge]->property_text_height().get_value()*1.5); |
|
554 } |
|
555 } |
|
556 else |
|
557 { |
|
558 //mentse el -> problema, hogy nem tudja melyik map-be |
|
559 entrywidget.hide(); |
|
560 } |
|
561 break; |
|
562 } |
524 default: |
563 default: |
525 break; |
564 break; |
526 } |
565 } |
527 return false; |
566 return false; |
528 } |
567 } |
529 |
568 |
530 bool GraphDisplayerCanvas::nodeMapEditEventHandler(GdkEvent* e) |
569 bool GraphDisplayerCanvas::nodeMapEditEventHandler(GdkEvent* e) |
531 { |
570 { |
|
571 e=e; |
|
572 return false; |
|
573 } |
|
574 |
|
575 bool GraphDisplayerCanvas::entryWidgetChangeHandler(GdkEvent* e) |
|
576 { |
|
577 Glib::ustring mapvalue = entrywidget.get_text(); |
|
578 std::cout << mapvalue << std::endl; |
532 e=e; |
579 e=e; |
533 return false; |
580 return false; |
534 } |
581 } |
535 |
582 |
536 void GraphDisplayerCanvas::deleteItem(NodeIt node_to_delete) |
583 void GraphDisplayerCanvas::deleteItem(NodeIt node_to_delete) |