diff options
-rw-r--r-- | src/gui/EdgeView.cpp | 4 | ||||
-rw-r--r-- | src/gui/MachinaCanvas.cpp | 17 | ||||
-rw-r--r-- | src/gui/MachinaGUI.cpp | 11 |
3 files changed, 15 insertions, 17 deletions
diff --git a/src/gui/EdgeView.cpp b/src/gui/EdgeView.cpp index b422e5e..0767ace 100644 --- a/src/gui/EdgeView.cpp +++ b/src/gui/EdgeView.cpp @@ -66,7 +66,7 @@ EdgeView::EdgeView(Canvas& canvas, SharedPtr<NodeView> src, SharedPtr<NodeView> dst, SharedPtr<Machina::Client::ClientObject> edge) - : FlowCanvas::Connection(canvas, src, dst, 0x9FA0A0F4, true) + : FlowCanvas::Connection(canvas, src.get(), dst.get(), 0x9FA0A0F4, true) , _edge(edge) { set_color(edge_color(probability())); @@ -85,7 +85,7 @@ EdgeView::probability() const double EdgeView::length_hint() const { - SharedPtr<NodeView> tail = PtrCast<NodeView>(source().lock()); + NodeView* tail = dynamic_cast<NodeView*>(source()); return tail->node()->get(URIs::instance().machina_duration).get_float() * 10.0; } diff --git a/src/gui/MachinaCanvas.cpp b/src/gui/MachinaCanvas.cpp index efb677f..2869c22 100644 --- a/src/gui/MachinaCanvas.cpp +++ b/src/gui/MachinaCanvas.cpp @@ -62,7 +62,7 @@ MachinaCanvas::node_clicked(WeakPtr<NodeView> item, GdkEventButton* event) if (last) { if (node != last) { - if (get_connection(last, node)) + if (get_connection(last.get(), node.get())) action_disconnect(last, node); else action_connect(last, node); @@ -112,7 +112,7 @@ MachinaCanvas::on_new_object(SharedPtr<Client::ClientObject> object) WeakPtr<NodeView>(view))); object->set_view(view); - add_item(view); + add_item(view.get()); } else if (type == "machina:Edge") { SharedPtr<Machina::Client::ClientObject> tail = _app->client_model()->find( @@ -126,11 +126,11 @@ MachinaCanvas::on_new_object(SharedPtr<Client::ClientObject> object) SharedPtr<EdgeView> view( new EdgeView(*this, tail_view, head_view, object)); - tail_view->add_connection(view); - head_view->add_connection(view); + tail_view->add_connection(view.get()); + head_view->add_connection(view.get()); object->set_view(view); - add_connection(view); + add_connection(view.get()); } else { Raul::error << "Unknown object type " << type << std::endl; @@ -142,14 +142,11 @@ MachinaCanvas::on_erase_object(SharedPtr<Client::ClientObject> object) { const Raul::Atom& type = object->get(URIs::instance().rdf_type); if (type == "machina:Node") { - SharedPtr<NodeView> view = PtrCast<NodeView>(object->view()); - if (view) { - remove_item(view); - } + // Destruction of the view will remove from the canvas } else if (type == "machina:Edge") { SharedPtr<EdgeView> view = PtrCast<EdgeView>(object->view()); if (view) { - remove_connection(view->source().lock(), view->dest().lock()); + remove_connection(view->source(), view->dest()); } } else { Raul::error << "Unknown object type " << type << std::endl; diff --git a/src/gui/MachinaGUI.cpp b/src/gui/MachinaGUI.cpp index 3e9424a..6763ec0 100644 --- a/src/gui/MachinaGUI.cpp +++ b/src/gui/MachinaGUI.cpp @@ -235,7 +235,7 @@ MachinaGUI::scrolled_window_event(GdkEvent* event) _canvas->clear_selection(); for (Canvas::Items::iterator i = selection.begin(); i != selection.end(); ++i) { - SharedPtr<NodeView> view = PtrCast<NodeView>(*i); + NodeView* const view = dynamic_cast<NodeView*>(*i); if (view) { _controller->erase(view->node()->id()); //_engine->machine()->remove_node(view->node()); @@ -599,15 +599,16 @@ MachinaGUI::show_labels_toggled() { const bool show = _menu_view_labels->get_active(); - for (Canvas::Items::iterator i = _canvas->items().begin(); i != _canvas->items().end(); ++i) { - const SharedPtr<NodeView> nv = PtrCast<NodeView>(*i); + for (Canvas::Items::iterator i = _canvas->items().begin(); + i != _canvas->items().end(); ++i) { + NodeView* const nv = dynamic_cast<NodeView*>(*i); if (nv) nv->show_label(show); } - for (ConnectionList::iterator c = _canvas->connections().begin(); + for (Canvas::Connections::iterator c = _canvas->connections().begin(); c != _canvas->connections().end(); ++c) { - const SharedPtr<EdgeView> ev = PtrCast<EdgeView>(*c); + EdgeView* const ev = dynamic_cast<EdgeView*>(*c); if (ev) ev->show_label(show); } |