//============================================================================= // MuseScore // Music Composition & Notation // // Copyright (C) 2011 Werner Schweer // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License version 2 // as published by the Free Software Foundation and appearing in // the file LICENCE.GPL //============================================================================= #include "cleflist.h" #include "clef.h" #include "score.h" #include "xml.h" namespace Ms { //--------------------------------------------------------- // ClefTypeList::operator== //--------------------------------------------------------- bool ClefTypeList::operator==(const ClefTypeList& t) const { return t._concertClef == _concertClef && t._transposingClef == _transposingClef; } //--------------------------------------------------------- // ClefTypeList::operator!= //--------------------------------------------------------- bool ClefTypeList::operator!=(const ClefTypeList& t) const { return t._concertClef != _concertClef || t._transposingClef != _transposingClef; } //--------------------------------------------------------- // clef //--------------------------------------------------------- ClefTypeList ClefList::clef(int tick) const { if (empty()) { return ClefTypeList(ClefType::INVALID, ClefType::INVALID); } auto i = upper_bound(tick); if (i == begin()) { return ClefTypeList(ClefType::INVALID, ClefType::INVALID); } return (--i)->second; } //--------------------------------------------------------- // setClef //--------------------------------------------------------- void ClefList::setClef(int tick, ClefTypeList ctl) { auto i = find(tick); if (i == end()) { insert(std::pair(tick, ctl)); } else { i->second = ctl; } } //--------------------------------------------------------- // nextClefTick // // return the tick at which the clef after tick is located // return -1, if no such clef //--------------------------------------------------------- int ClefList::nextClefTick(int tick) const { if (empty()) { return -1; } auto i = upper_bound(tick + 1); if (i == end()) { return -1; } return i->first; } //--------------------------------------------------------- // currentClefTick // // return the tick position of the clef currently // in effect at tick //--------------------------------------------------------- int ClefList::currentClefTick(int tick) const { if (empty()) { return 0; } auto i = upper_bound(tick); if (i == begin()) { return 0; } --i; return i->first; } }