/*** Olive - Non-Linear Video Editor Copyright (C) 2022 Olive Team Modifications Copyright (C) 2025 mikesolar This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . ***/ #include "timelinewidgetselections.h" namespace olive { void TimelineWidgetSelections::shift_time(const Rational &diff) { for (auto it = this->begin(); it != this->end(); it++) { it.value().shift(diff); } } void TimelineWidgetSelections::shift_tracks(TrackReference::Type type, int diff) { TimelineWidgetSelections cached_selections; { // Take all selections of this track type auto it = this->begin(); while (it != this->end()) { if (it.key().type() == type) { cached_selections.insert(it.key(), it.value()); it = this->erase(it); } else { it++; } } } // Then re-insert them with the diff applied for (auto it = cached_selections.cbegin(); it != cached_selections.cend(); it++) { TrackReference ref(it.key().type(), it.key().index() + diff); this->insert(ref, it.value()); } } void TimelineWidgetSelections::trim_in(const Rational &diff) { for (auto it = this->begin(); it != this->end(); it++) { it.value().trim_in(diff); } } void TimelineWidgetSelections::trim_out(const Rational &diff) { for (auto it = this->begin(); it != this->end(); it++) { it.value().trim_out(diff); } } void TimelineWidgetSelections::subtract( const TimelineWidgetSelections &selections) { for (auto it = selections.cbegin(); it != selections.cend(); it++) { const TrackReference &track = it.key(); const TimeRangeList &their_list = it.value(); if (this->contains(track)) { TimeRangeList &our_list = (*this)[it.key()]; our_list.remove(their_list); } } } }