3 This file is part of R²C²
4 Copyright © 2010 Mikkosoft Productions, Mikko Rasa
5 Distributed under the GPL
8 #include <msp/strings/formatter.h>
9 #include "libr2c2/zone.h"
17 Zonebar::Zonebar(Designer &d):
21 pnl_content->add(*(drp_groups = new GLtk::Dropdown));
22 drp_groups->set_geometry(GLtk::Geometry(0, 10, 195, 20));
23 drp_groups->set_tooltip("Select zone group to edit");
24 drp_groups->signal_item_selected.connect(sigc::mem_fun(this, &Zonebar::group_selected));
26 pnl_content->add(*(drp_numbers = new GLtk::Dropdown));
27 drp_numbers->set_geometry(GLtk::Geometry(200, 10, 100, 20));
28 drp_groups->set_tooltip("Select zone to edit");
29 drp_numbers->signal_item_selected.connect(sigc::mem_fun(this, &Zonebar::number_selected));
33 pnl_content->add(*(btn = new GLtk::Button("Del")));
34 btn->set_geometry(GLtk::Geometry(300, 10, 40, 24));
35 btn->set_style("red");
36 btn->set_tooltip("Delete selected zone");
37 btn->signal_clicked.connect(sigc::mem_fun(this, &Zonebar::delete_zone_clicked));
39 pnl_content->add(*(btn = new GLtk::Button("Prop")));
40 btn->set_geometry(GLtk::Geometry(340, 10, 40, 24));
41 btn->set_tooltip("Change properties of the selected zone");
42 btn->signal_clicked.connect(sigc::mem_fun(&designer, &Designer::zone_properties));
44 pnl_content->add(*(btn = new GLtk::Button("AddT")));
45 btn->set_geometry(GLtk::Geometry(380, 10, 40, 24));
46 btn->set_tooltip("Add selected tracks to zone");
47 btn->signal_clicked.connect(sigc::mem_fun(&designer, &Designer::add_selection_to_zone));
49 Layout &layout = designer.get_layout();
50 layout.signal_zone_added.connect(sigc::mem_fun(this, &Zonebar::zone_added));
51 layout.signal_zone_removed.connect(sigc::hide(sigc::mem_fun(this, &Zonebar::update_groups)));
53 const Layout::ZoneSet &zones = layout.get_zones();
54 for(Layout::ZoneSet::const_iterator i=zones.begin(); i!=zones.end(); ++i)
55 (*i)->signal_name_changed.connect(sigc::mem_fun(this, &Zonebar::zone_renamed));
60 void Zonebar::zone_added(Zone &zone)
62 zone.signal_name_changed.connect(sigc::mem_fun(this, &Zonebar::zone_renamed));
66 void Zonebar::zone_renamed(const string &, const string &, unsigned)
71 void Zonebar::group_selected(unsigned index, const string &group)
73 if(index==drp_groups->get_n_items()-1)
75 Layout &layout = designer.get_layout();
76 Zone *zone = new Zone(layout);
77 zone->set_name("New zone", "track", 1);
78 designer.edit_zone(zone);
83 Zone *cur = designer.get_current_zone();
84 if(cur && group==cur->get_group())
87 designer.edit_zone(0);
88 update_numbers(group);
92 void Zonebar::number_selected(unsigned index, const string &)
94 if(drp_groups->get_selected_index()<0)
97 string group = drp_groups->get_selected();
98 Layout::ZoneArray zones = designer.get_layout().get_zones(group);
99 if(index==drp_numbers->get_n_items()-1)
101 Zone *cur = designer.get_current_zone();
102 string qualifier = (cur ? cur->get_qualifier() : "track");
104 Layout &layout = designer.get_layout();
105 Zone *zone = new Zone(layout);
106 zone->set_name(group, qualifier, zones.size()+1);
107 designer.edit_zone(zone);
109 update_numbers(group);
113 else if(index<zones.size())
114 designer.edit_zone(zones[index]);
117 void Zonebar::delete_zone_clicked()
119 Zone *cur = designer.get_current_zone();
120 designer.edit_zone(0);
124 void Zonebar::update_groups()
126 const Layout::ZoneSet &zones = designer.get_layout().get_zones();
128 for(Layout::ZoneSet::const_iterator i=zones.begin(); i!=zones.end(); ++i)
129 groups.insert((*i)->get_group());
131 Zone *cur = designer.get_current_zone();
136 for(set<string>::iterator i=groups.begin(); i!=groups.end(); ++i, ++n)
138 drp_groups->append(*i);
139 if(cur && *i==cur->get_group())
142 drp_groups->append("(new)");
143 drp_groups->set_selected_index(selected);
146 update_numbers(cur->get_group());
148 drp_numbers->clear();
151 void Zonebar::update_numbers(const string &group)
153 Layout::ZoneArray zones = designer.get_layout().get_zones(group);
154 Zone *cur = designer.get_current_zone();
156 drp_numbers->clear();
159 for(Layout::ZoneArray::iterator i=zones.begin(); i!=zones.end(); ++i, ++n)
161 drp_numbers->append(format("%s %d", (*i)->get_qualifier(), (*i)->get_number()));
165 drp_numbers->append("(new)");
166 drp_numbers->set_selected_index(selected);