#include <msp/strings/format.h>
+#include <msp/strings/regex.h>
#include "block.h"
#include "layout.h"
#include "track.h"
layout.remove(*this);
}
+void Zone::set_name(const string &n)
+{
+ Regex r_name("(.+) ([^ ]+) ([1-9][0-9]*)");
+ RegMatch m = r_name.match(n);
+ if(!m)
+ throw invalid_argument("Zone::set_name");
+
+ set_name(m[1].str, m[2].str, lexical_cast<unsigned>(m[3].str));
+}
+
void Zone::set_name(const string &g, const string &q, unsigned n)
{
group = g;
qualifier = q;
number = n;
- signal_name_changed.emit(group, qualifier, number);
+ update_name();
}
-string Zone::get_name() const
+void Zone::update_name()
{
- string result = group;
+ string full_name = group;
if(!qualifier.empty())
{
- result += ' ';
- result += qualifier;
+ full_name += ' ';
+ full_name += qualifier;
}
if(number)
- result += format(" %d", number);
- return result;
+ full_name += format(" %d", number);
+ TrackChain::set_name(full_name);
}
void Zone::save(list<DataFile::Statement> &st) const
if(number)
st.push_back((DataFile::Statement("number"), number));
- set<unsigned> block_ids;
- for(TrackSet::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
- block_ids.insert((*i)->get_block().get_id());
+ unsigned last_block = 0;
+ TrackIter iter = ends[0].reverse();
+ while(iter && tracks.count(iter.track()))
+ {
+ unsigned block_id = iter->get_block().get_id();
+ if(block_id!=last_block)
+ {
+ st.push_back((DataFile::Statement("block"), block_id));
+ last_block = block_id;
+ }
+
+ iter = next_iter(iter);
+ }
+}
- for(set<unsigned>::const_iterator i=block_ids.begin(); i!=block_ids.end(); ++i)
- st.push_back((DataFile::Statement("block"), *i));
+DataFile::Statement Zone::save_reference() const
+{
+ return (DataFile::Statement("zone"), group, number);
}
add("qualifier", &Zone::qualifier);
}
+void Zone::Loader::finish()
+{
+ obj.update_name();
+}
+
void Zone::Loader::block(unsigned b)
{
Block &blk = obj.layout.get_block(b);
- const set<Track *> &btracks = blk.get_tracks();
- obj.tracks.insert(btracks.begin(), btracks.end());
+ obj.add_tracks(blk.get_tracks());
}
} // namespace R2C2