/* * Olive Community Edition - Non-Linear Video Editor * Copyright (C) 2025 Olive CE Team * * 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::ShiftTime(const rational &diff) { for (auto it = this->begin(); it != this->end(); it++) { it.value().shift(diff); } } void TimelineWidgetSelections::ShiftTracks(Track::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++) { Track::Reference ref(it.key().type(), it.key().index() + diff); this->insert(ref, it.value()); } } void TimelineWidgetSelections::TrimIn(const rational &diff) { for (auto it = this->begin(); it != this->end(); it++) { it.value().trim_in(diff); } } void TimelineWidgetSelections::TrimOut(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 Track::Reference &track = it.key(); const TimeRangeList &their_list = it.value(); if (this->contains(track)) { TimeRangeList &our_list = (*this)[it.key()]; our_list.remove(their_list); } } } }