aboutsummaryrefslogtreecommitdiffstats
path: root/src/gui/MachinaCanvas.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-02-25 04:11:07 +0000
committerDavid Robillard <d@drobilla.net>2007-02-25 04:11:07 +0000
commit9d657891ea68ab979bb8c1877bfea656db0bdb1e (patch)
tree7fb3f9b9c825adfca34b25c8068a71d2c8940ed2 /src/gui/MachinaCanvas.cpp
parent2f3580a8d7b743811e1bc78487e56210d564e4aa (diff)
downloadmachina-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.cpp63
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);
+ }
+
+ }
+ }
+
+}
+
+