]> git.tdb.fi Git - r2c2.git/blobdiff - source/designer/toolbar.cpp
Do not require unique names for routes
[r2c2.git] / source / designer / toolbar.cpp
index ee990ddb6d56bdd8569c2c2fcc9970fe1bd8baaa..ec18adb259980ef19ff17805ac2bcadbf75cacf3 100644 (file)
@@ -20,7 +20,7 @@ Toolbar::Toolbar(Designer &d):
        GLtk::Panel(d.get_ui_resources()),
        designer(d)
 {
-       set_size(410, 40);
+       set_size(640, 40);
 
        GLtk::Button *btn;
        GLtk::Label *lbl;
@@ -40,7 +40,7 @@ Toolbar::Toolbar(Designer &d):
        btn->set_tooltip("Exit Designer");
        btn->signal_clicked.connect(sigc::mem_fun(&designer, &Designer::quit));
 
-       add(*(btn=new GLtk::Button(res, "NewT")));
+       add(*(btn=new GLtk::Button(res, "+Trk")));
        btn->set_geometry(GLtk::Geometry(135, 10, 40, 24));
        btn->set_tooltip("Add a track piece");
        btn->signal_clicked.connect(sigc::mem_fun(&designer, &Designer::new_track));
@@ -59,18 +59,33 @@ Toolbar::Toolbar(Designer &d):
        lbl->set_geometry(GLtk::Geometry(265, 22, 40, 13));
 
        add(*(drp_routes=new GLtk::Dropdown(res)));
-       drp_routes->set_geometry(GLtk::Geometry(265, 5, 100, 17));
+       drp_routes->set_geometry(GLtk::Geometry(265, 5, 250, 17));
        drp_routes->set_tooltip("Select route to edit");
        drp_routes->append("(new route)");
        drp_routes->signal_item_selected.connect(sigc::mem_fun(this, &Toolbar::route_selected));
 
-       add(*(btn=new GLtk::Button(res, "AddT")));
-       btn->set_geometry(GLtk::Geometry(365, 10, 40, 24));
+       add(*(btn=new GLtk::Button(res, "Del")));
+       btn->set_geometry(GLtk::Geometry(515, 10, 40, 24));
+       btn->set_tooltip("Delete the current route");
+       btn->signal_clicked.connect(sigc::mem_fun(this, &Toolbar::delete_route_clicked));
+
+       add(*(btn=new GLtk::Button(res, "Name")));
+       btn->set_geometry(GLtk::Geometry(555, 10, 40, 24));
+       btn->set_tooltip("Rename the current route");
+       btn->signal_clicked.connect(sigc::mem_fun(&designer, &Designer::rename_route));
+
+       add(*(btn=new GLtk::Button(res, "Add")));
+       btn->set_geometry(GLtk::Geometry(595, 10, 40, 24));
        btn->set_tooltip("Add selected tracks to current route");
        btn->signal_clicked.connect(sigc::mem_fun(&designer, &Designer::add_selection_to_route));
 
-       designer.get_layout()->signal_route_added.connect(sigc::hide(sigc::mem_fun(this, &Toolbar::update_routes)));
+       designer.get_layout()->signal_route_added.connect(sigc::mem_fun(this, &Toolbar::route_added));
        designer.get_layout()->signal_route_removed.connect(sigc::hide(sigc::mem_fun(this, &Toolbar::update_routes)));
+
+       const set<Route *> &routes = designer.get_layout()->get_routes();
+       for(set<Route *>::const_iterator i=routes.begin(); i!=routes.end(); ++i)
+               (*i)->signal_name_changed.connect(sigc::hide(sigc::mem_fun(this, &Toolbar::update_routes)));
+
        update_routes();
 }
 
@@ -79,36 +94,50 @@ void Toolbar::route_selected(unsigned index, const string &)
        if(index==drp_routes->get_n_items()-1)
        {
                Layout &layout = *designer.get_layout();
-               Route *route = new Route(layout, format("Route %d", layout.get_routes().size()+1));
-               designer.edit_route(*route);
+               const set<Route *> &routes = designer.get_layout()->get_routes();
+               Route *route = new Route(layout);
+               route->set_name(format("Route %d", routes.size()));
+               designer.edit_route(route);
 
-               const map<string, Route *> &routes = designer.get_layout()->get_routes();
                int selected = -1;
                unsigned n = 0;
-               for(map<string, Route *>::const_iterator i=routes.begin(); (selected<0 && i!=routes.end()); ++i, ++n)
-                       if(i->second==route)
+               for(set<Route *>::const_iterator i=routes.begin(); (selected<0 && i!=routes.end()); ++i, ++n)
+                       if(*i==route)
                                selected = n;
                drp_routes->set_selected_index(selected);
        }
        else
        {
-               const map<string, Route *> &routes = designer.get_layout()->get_routes();
-               map<string, Route *>::const_iterator i = routes.begin();
+               const set<Route *> &routes = designer.get_layout()->get_routes();
+               set<Route *>::const_iterator i = routes.begin();
                advance(i, index);
-               designer.edit_route(*i->second);
+               designer.edit_route(*i);
        }
 }
 
+void Toolbar::delete_route_clicked()
+{
+       Route *route = designer.get_current_route();
+       designer.edit_route(0);
+       delete route;
+}
+
+void Toolbar::route_added(Route &r)
+{
+       r.signal_name_changed.connect(sigc::hide(sigc::mem_fun(this, &Toolbar::update_routes)));
+       update_routes();
+}
+
 void Toolbar::update_routes()
 {
        drp_routes->clear();
-       const map<string, Route *> &routes = designer.get_layout()->get_routes();
+       const set<Route *> &routes = designer.get_layout()->get_routes();
        int selected = -1;
        unsigned n = 0;
-       for(map<string, Route *>::const_iterator i=routes.begin(); i!=routes.end(); ++i, ++n)
+       for(set<Route *>::const_iterator i=routes.begin(); i!=routes.end(); ++i, ++n)
        {
-               drp_routes->append(i->second->get_name());
-               if(i->second==designer.get_current_route())
+               drp_routes->append((*i)->get_name());
+               if(*i==designer.get_current_route())
                        selected = n;
        }
        drp_routes->append("(new route)");