X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fzone.cpp;h=30b60e99aa65865a0960afc113e3d5f5fedfbd7f;hb=862d8bea6d31e6fe9a60747e0b9559f77e72bf44;hp=23b0ac9f093f3962507473f6258c082d3bb3245a;hpb=eb9c7f5200da4f3f31b41233be8cee397cb6abb9;p=r2c2.git diff --git a/source/libr2c2/zone.cpp b/source/libr2c2/zone.cpp index 23b0ac9..30b60e9 100644 --- a/source/libr2c2/zone.cpp +++ b/source/libr2c2/zone.cpp @@ -1,4 +1,5 @@ #include +#include #include "block.h" #include "layout.h" #include "track.h" @@ -21,26 +22,36 @@ Zone::~Zone() 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(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 &st) const @@ -59,6 +70,11 @@ void Zone::save(list &st) const st.push_back((DataFile::Statement("block"), *i)); } +DataFile::Statement Zone::save_reference() const +{ + return (DataFile::Statement("zone"), group, number); +} + Zone::Loader::Loader(Zone &z): DataFile::ObjectLoader(z) @@ -69,6 +85,11 @@ Zone::Loader::Loader(Zone &z): add("qualifier", &Zone::qualifier); } +void Zone::Loader::finish() +{ + obj.update_name(); +} + void Zone::Loader::block(unsigned b) { Block &blk = obj.layout.get_block(b);