diff options
author | David Robillard <d@drobilla.net> | 2007-02-25 04:11:07 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2007-02-25 04:11:07 +0000 |
commit | 9d657891ea68ab979bb8c1877bfea656db0bdb1e (patch) | |
tree | 7fb3f9b9c825adfca34b25c8068a71d2c8940ed2 /src/gui/MachinaCanvas.cpp | |
parent | 2f3580a8d7b743811e1bc78487e56210d564e4aa (diff) | |
download | machina-9d657891ea68ab979bb8c1877bfea656db0bdb1e.tar.gz machina-9d657891ea68ab979bb8c1877bfea656db0bdb1e.tar.bz2 machina-9d657891ea68ab979bb8c1877bfea656db0bdb1e.zip |
More serialization work (loading, saving works from GUI).
git-svn-id: http://svn.drobilla.net/lad/machina@338 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/gui/MachinaCanvas.cpp')
-rw-r--r-- | src/gui/MachinaCanvas.cpp | 63 |
1 files changed, 56 insertions, 7 deletions
diff --git a/src/gui/MachinaCanvas.cpp b/src/gui/MachinaCanvas.cpp index 03a05bc..878e790 100644 --- a/src/gui/MachinaCanvas.cpp +++ b/src/gui/MachinaCanvas.cpp @@ -46,11 +46,9 @@ MachinaCanvas::status_message(const string& msg) void -MachinaCanvas::node_clicked(SharedPtr<NodeView> item, GdkEventButton* event) +MachinaCanvas::node_clicked(WeakPtr<NodeView> item, GdkEventButton* event) { - cerr << "CLICKED: " << item->name() << endl; - - SharedPtr<NodeView> node = PtrCast<NodeView>(item); + SharedPtr<NodeView> node = PtrCast<NodeView>(item.lock()); if (!node) return; @@ -101,10 +99,8 @@ MachinaCanvas::canvas_event(GdkEvent* event) SharedPtr<NodeView> view(new NodeView(node, shared_from_this(), name, x, y)); - //view->signal_clicked.connect(sigc::bind(sigc::mem_fun(this, - // &MachinaCanvas::node_clicked), view)); view->signal_clicked.connect(sigc::bind<0>(sigc::mem_fun(this, - &MachinaCanvas::node_clicked), view)); + &MachinaCanvas::node_clicked), WeakPtr<NodeView>(view))); add_item(view); view->resize(); view->raise_to_top(); @@ -173,3 +169,56 @@ MachinaCanvas::disconnect_node(boost::shared_ptr<NodeView> src, } +void +MachinaCanvas::build(SharedPtr<Machina::Machine> machine) +{ + destroy(); + + for (Machina::Machine::Nodes::const_iterator i = machine->nodes().begin(); + i != machine->nodes().end(); ++i) { + + const double x = 1600 + rand() % 300; + const double y = 1200 + rand() % 300; + + SharedPtr<NodeView> view(new NodeView((*i), shared_from_this(), + "", x, y)); + + view->signal_clicked.connect(sigc::bind<0>(sigc::mem_fun(this, + &MachinaCanvas::node_clicked), WeakPtr<NodeView>(view))); + + add_item(view); + view->resize(); + } + + for (ItemMap::iterator n = _items.begin(); n != _items.end(); ++n) { + + SharedPtr<NodeView> src = PtrCast<NodeView>(n->second); + if (!src) + continue; + + for (Machina::Node::Edges::const_iterator e = src->node()->outgoing_edges().begin(); + e != src->node()->outgoing_edges().end(); ++e) { + + SharedPtr<NodeView> dst; + for (ItemMap::iterator m = _items.begin(); m != _items.end(); ++m) { + SharedPtr<NodeView> nv = PtrCast<NodeView>((*m).second); + if (nv && nv->node() == (*e)->dst()) { + dst = nv; + break; + } + } + + if (dst) { + boost::shared_ptr<Connection> c(new EdgeView(shared_from_this(), + src, dst, (*e))); + src->add_connection(c); + dst->add_connection(c); + add_connection(c); + } + + } + } + +} + + |