1 #include <msp/strings/format.h>
2 #include "libr2c2/route.h"
10 string route_name(Route *const &route)
12 return route ? route->get_name() : "(new route)";
15 Routebar::Routebar(Designer &d):
20 pnl_content->add(*(drp_routes = new GLtk::Dropdown(routes)));
21 drp_routes->set_tooltip("Select route to edit");
22 drp_routes->signal_item_selected.connect(sigc::mem_fun(this, &Routebar::route_selected));
26 pnl_content->add(*(btn = new GLtk::Button("Del")));
27 btn->set_style("red");
28 btn->set_tooltip("Delete the current route");
29 btn->signal_clicked.connect(sigc::mem_fun(this, &Routebar::delete_route_clicked));
31 pnl_content->add(*(btn = new GLtk::Button("Name")));
32 btn->set_tooltip("Rename the current route");
33 btn->signal_clicked.connect(sigc::mem_fun(&designer, &Designer::rename_route));
35 pnl_content->add(*(btn = new GLtk::Button("Add")));
36 btn->set_tooltip("Add selected tracks to current route (A)");
37 btn->signal_clicked.connect(sigc::mem_fun(&designer, &Designer::add_selection_to_route));
39 designer.get_layout().signal_track_chain_added.connect(sigc::mem_fun(this, &Routebar::track_chain_added));
40 designer.get_layout().signal_track_chain_removed.connect(sigc::mem_fun(this, &Routebar::track_chain_removed));
42 const set<Route *> &lroutes = designer.get_layout().get_all<Route>();
43 for(set<Route *>::const_iterator i=lroutes.begin(); i!=lroutes.end(); ++i)
46 (*i)->signal_name_changed.connect(sigc::bind(sigc::mem_fun(this, &Routebar::route_name_changed), *i));
52 void Routebar::route_selected(unsigned index)
54 if(index==routes.size()-1)
56 Layout &rlayout = designer.get_layout();
57 Route *route = new Route(rlayout);
58 route->set_name(format("Route %d", index+1));
59 designer.edit_route(route);
61 for(unsigned i=0; i<routes.size(); ++i)
62 if(routes.get(i)==route)
63 drp_routes->set_selected_index(i);
66 designer.edit_route(routes.get(index));
69 void Routebar::delete_route_clicked()
71 Route *route = designer.get_current_route();
72 designer.edit_route(0);
76 void Routebar::track_chain_added(TrackChain &tc)
78 if(Route *r = dynamic_cast<Route *>(&tc))
80 r->signal_name_changed.connect(sigc::bind(sigc::mem_fun(this, &Routebar::route_name_changed), r));
81 routes.insert(routes.size()-1, r);
85 void Routebar::track_chain_removed(TrackChain &tc)
87 if(Route *r = dynamic_cast<Route *>(&tc))
89 for(unsigned i=0; i<routes.size(); ++i)
98 void Routebar::route_name_changed(const string &, Route *route)
100 routes.refresh(route);