File indexing completed on 2024-12-08 04:27:17
0001 /* 0002 SPDX-FileCopyrightText: 2007 Jean-Baptiste Mardelle <jb@kdenlive.org> 0003 0004 SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #include "definitions.h" 0008 #include <KLocalizedString> 0009 0010 #include <QColor> 0011 #include <utility> 0012 0013 #ifdef CRASH_AUTO_TEST 0014 #pragma GCC diagnostic push 0015 #pragma GCC diagnostic ignored "-Wunused-parameter" 0016 #pragma GCC diagnostic ignored "-Wsign-conversion" 0017 #pragma GCC diagnostic ignored "-Wfloat-equal" 0018 #pragma GCC diagnostic ignored "-Wshadow" 0019 #pragma GCC diagnostic ignored "-Wpedantic" 0020 #include <rttr/registration> 0021 #pragma GCC diagnostic pop 0022 0023 RTTR_REGISTRATION 0024 { 0025 using namespace rttr; 0026 // clang-format off 0027 registration::enumeration<GroupType>("GroupType")( 0028 value("Normal", GroupType::Normal), 0029 value("Selection", GroupType::Selection), 0030 value("AVSplit", GroupType::AVSplit), 0031 value("Leaf", GroupType::Leaf) 0032 ); 0033 registration::enumeration<PlaylistState::ClipState>("PlaylistState")( 0034 value("VideoOnly", PlaylistState::VideoOnly), 0035 value("AudioOnly", PlaylistState::AudioOnly), 0036 value("Disabled", PlaylistState::Disabled) 0037 ); 0038 // clang-format on 0039 } 0040 #endif 0041 0042 QDebug operator<<(QDebug qd, const ItemInfo &info) 0043 { 0044 qd << "ItemInfo " << &info; 0045 qd << "\tTrack" << info.track; 0046 qd << "\tStart pos: " << info.startPos.toString(); 0047 qd << "\tEnd pos: " << info.endPos.toString(); 0048 qd << "\tCrop start: " << info.cropStart.toString(); 0049 qd << "\tCrop duration: " << info.cropDuration.toString(); 0050 return qd.maybeSpace(); 0051 } 0052 0053 CommentedTime::CommentedTime() 0054 : m_time(GenTime(0)) 0055 0056 { 0057 } 0058 0059 CommentedTime::CommentedTime(const GenTime &time, QString comment, int markerType) 0060 : m_time(time) 0061 , m_comment(std::move(comment)) 0062 , m_type(markerType) 0063 { 0064 } 0065 0066 CommentedTime::CommentedTime(const QString &hash, const GenTime &time) 0067 : m_time(time) 0068 , m_comment(hash.section(QLatin1Char(':'), 1)) 0069 , m_type(hash.section(QLatin1Char(':'), 0, 0).toInt()) 0070 { 0071 } 0072 0073 QString CommentedTime::comment() const 0074 { 0075 return (m_comment.isEmpty() ? i18n("Marker") : m_comment); 0076 } 0077 0078 GenTime CommentedTime::time() const 0079 { 0080 return m_time; 0081 } 0082 0083 void CommentedTime::setComment(const QString &comm) 0084 { 0085 m_comment = comm; 0086 } 0087 0088 void CommentedTime::setTime(const GenTime &t) 0089 { 0090 m_time = t; 0091 } 0092 0093 void CommentedTime::setMarkerType(int newtype) 0094 { 0095 m_type = newtype; 0096 } 0097 0098 QString CommentedTime::hash() const 0099 { 0100 return QString::number(m_type) + QLatin1Char(':') + (m_comment.isEmpty() ? i18n("Marker") : m_comment); 0101 } 0102 0103 int CommentedTime::markerType() const 0104 { 0105 return m_type; 0106 } 0107 0108 bool CommentedTime::operator>(const CommentedTime &op) const 0109 { 0110 return m_time > op.time(); 0111 } 0112 0113 bool CommentedTime::operator<(const CommentedTime &op) const 0114 { 0115 return m_time < op.time(); 0116 } 0117 0118 bool CommentedTime::operator>=(const CommentedTime &op) const 0119 { 0120 return m_time >= op.time(); 0121 } 0122 0123 bool CommentedTime::operator<=(const CommentedTime &op) const 0124 { 0125 return m_time <= op.time(); 0126 } 0127 0128 bool CommentedTime::operator==(const CommentedTime &op) const 0129 { 0130 return m_time == op.time(); 0131 } 0132 0133 bool CommentedTime::operator!=(const CommentedTime &op) const 0134 { 0135 return m_time != op.time(); 0136 } 0137 0138 const QString groupTypeToStr(GroupType t) 0139 { 0140 switch (t) { 0141 case GroupType::Normal: 0142 return QStringLiteral("Normal"); 0143 case GroupType::Selection: 0144 return QStringLiteral("Selection"); 0145 case GroupType::AVSplit: 0146 return QStringLiteral("AVSplit"); 0147 case GroupType::Leaf: 0148 return QStringLiteral("Leaf"); 0149 } 0150 Q_ASSERT(false); 0151 return QString(); 0152 } 0153 GroupType groupTypeFromStr(const QString &s) 0154 { 0155 std::vector<GroupType> types{GroupType::Selection, GroupType::Normal, GroupType::AVSplit, GroupType::Leaf}; 0156 for (const auto &t : types) { 0157 if (s == groupTypeToStr(t)) { 0158 return t; 0159 } 0160 } 0161 Q_ASSERT(false); 0162 return GroupType::Normal; 0163 } 0164 0165 std::pair<bool, bool> stateToBool(PlaylistState::ClipState state) 0166 { 0167 return {state == PlaylistState::VideoOnly, state == PlaylistState::AudioOnly}; 0168 } 0169 PlaylistState::ClipState stateFromBool(std::pair<bool, bool> av) 0170 { 0171 Q_ASSERT(!av.first || !av.second); 0172 if (av.first) { 0173 return PlaylistState::VideoOnly; 0174 } else if (av.second) { 0175 return PlaylistState::AudioOnly; 0176 } else { 0177 return PlaylistState::Disabled; 0178 } 0179 } 0180 0181 SubtitledTime::SubtitledTime() 0182 : m_starttime(0) 0183 , m_endtime(0) 0184 { 0185 } 0186 0187 SubtitledTime::SubtitledTime(const GenTime &start, QString sub, const GenTime &end) 0188 : m_starttime(start) 0189 , m_subtitle(std::move(sub)) 0190 , m_endtime(end) 0191 { 0192 } 0193 0194 QString SubtitledTime::subtitle() const 0195 { 0196 return m_subtitle; 0197 } 0198 0199 GenTime SubtitledTime::start() const 0200 { 0201 return m_starttime; 0202 } 0203 0204 GenTime SubtitledTime::end() const 0205 { 0206 return m_endtime; 0207 } 0208 0209 void SubtitledTime::setSubtitle(const QString &sub) 0210 { 0211 m_subtitle = sub; 0212 } 0213 0214 void SubtitledTime::setEndTime(const GenTime &end) 0215 { 0216 m_endtime = end; 0217 } 0218 0219 bool SubtitledTime::operator>(const SubtitledTime &op) const 0220 { 0221 return (m_starttime > op.m_starttime && m_endtime > op.m_endtime && m_starttime > op.m_endtime); 0222 } 0223 0224 bool SubtitledTime::operator<(const SubtitledTime &op) const 0225 { 0226 return (m_starttime < op.m_starttime && m_endtime < op.m_endtime && m_endtime < op.m_starttime); 0227 } 0228 0229 bool SubtitledTime::operator==(const SubtitledTime &op) const 0230 { 0231 return (m_starttime == op.m_starttime && m_endtime == op.m_endtime); 0232 } 0233 0234 bool SubtitledTime::operator!=(const SubtitledTime &op) const 0235 { 0236 return (m_starttime != op.m_starttime && m_endtime != op.m_endtime); 0237 }