53 QList<Kwave::MetaData> list = this->values();
56 std::stable_sort(list.begin(), list.end(),
isLessThan);
74 while (it.hasNext()) {
77 if (m.
scope() == scope)
85 const QList<unsigned int> &tracks)
const 89 while (it.hasNext()) {
97 QList<QVariant> track_list =
99 foreach (
const QVariant &v, track_list) {
101 unsigned int t = v.toUInt(&ok);
103 if (ok && (tracks.contains(t))) {
124 while (it.hasNext()) {
132 bool start_ok =
false, end_ok =
false;
137 if (!start_ok || !end_ok)
continue;
139 if ((start <= last) && (end >= first))
149 if (pos_ok && (pos >= first) && (pos <= last))
164 while (it.hasNext()) {
173 if (pos_ok && (p == pos))
183 const QString &property)
const 188 while (it.hasNext()) {
199 const QString &property, QVariant value)
const 204 while (it.hasNext()) {
207 if (m.
hasProperty(property) && (m[property] == value))
216 QString
id = metadata.
id();
219 while (it.hasNext()) {
231 if (list.isEmpty())
return;
237 if (!types.contains(type)) {
243 while (it.hasNext()) {
263 (*
this)[metadata.
id()] = metadata;
279 QMap<QString, Kwave::MetaData>::remove(metadata.
id());
295 while (it.hasNext()) {
306 v_pos.toULongLong(&ok));
309 if ((pos < first) || (pos > last)) {
321 v_start.toULongLong(&ok));
327 v_start.toULongLong(&ok));
330 if ((end < start) || (start >= last)) {
336 if (start < first) start = first;
337 if (end > last) end = last;
353 while (it.hasNext()) {
360 QList<QVariant> v_track_list =
362 QList<unsigned int> bound_tracks;
363 foreach (
const QVariant &v, v_track_list) {
365 unsigned int t = v.toUInt(&ok);
366 if (ok) bound_tracks += t;
369 foreach (
unsigned int t, bound_tracks)
370 if (!tracks.contains(t)) bound_tracks.removeAll(t);
371 if (bound_tracks.isEmpty()) {
378 v_track_list.
clear();
379 for (
int i = 0; i < bound_tracks.count(); i++)
405 if (meta_data.isEmpty())
408 const QStringList position_bound_properties =
417 while (it.hasNext()) {
439 if ((meta_last < other_first) && (meta_last + 1 != other_first))
441 if ((meta_first > other_last) && (meta_first != other_last + 1))
445 QList<unsigned int> overlapping_tracks;
446 QList<unsigned int> non_overlapping_tracks;
450 QList<unsigned int> meta_tracks = meta.
boundTracks();
451 QList<unsigned int> other_tracks = other.
boundTracks();
453 foreach (
unsigned int t, meta_tracks) {
454 if (other_tracks.contains(t))
455 overlapping_tracks.append(t);
457 non_overlapping_tracks.append(t);
462 if (overlapping_tracks.isEmpty())
467 foreach (
const QString &p, meta.
keys()) {
476 if (position_bound_properties.contains(p))
479 if (meta[p] != other[p]) {
484 if (!match)
continue;
492 if (!non_overlapping_tracks.isEmpty()) {
496 foreach (
unsigned int t, non_overlapping_tracks)
497 list.append(QVariant(t));
501 foreach (
unsigned int t, overlapping_tracks)
502 list.append(QVariant(t));
512 qMin(meta_first, other_first));
517 qMax(meta_last, other_last));
532 const QList<unsigned int> &tracks)
540 while (it.hasNext()) {
548 if ((meta_first > del_last) || (meta_last < del_first))
552 if (!tracks.isEmpty() &&
556 QList<unsigned int> overlapping_tracks;
557 QList<unsigned int> non_overlapping_tracks;
558 QList<unsigned int> meta_tracks = meta.
boundTracks();
560 foreach (
unsigned int t, meta_tracks) {
561 if (tracks.contains(t))
562 overlapping_tracks.append(t);
564 non_overlapping_tracks.append(t);
568 if (overlapping_tracks.isEmpty())
573 if (!non_overlapping_tracks.isEmpty()) {
577 foreach (
unsigned int t, overlapping_tracks)
578 list.append(QVariant(t));
582 foreach (
unsigned int t, non_overlapping_tracks)
583 list.append(QVariant(t));
600 (meta_first >= del_first) && (meta_last <= del_last)) {
612 if ((del_first > meta_first) && (del_last < meta_last)) {
619 if (del_last < meta_last) {
625 if (del_first > meta_first) {
636 const QList<unsigned int> &tracks)
639 while (it.hasNext()) {
647 if (meta_first < offset)
651 if (!tracks.isEmpty() &&
655 QList<unsigned int> overlapping_tracks;
656 QList<unsigned int> non_overlapping_tracks;
657 QList<unsigned int> meta_tracks = meta.
boundTracks();
659 foreach (
unsigned int t, meta_tracks) {
660 if (tracks.contains(t))
661 overlapping_tracks.append(t);
663 non_overlapping_tracks.append(t);
667 if (overlapping_tracks.isEmpty())
672 if (!non_overlapping_tracks.isEmpty()) {
676 foreach (
unsigned int t, overlapping_tracks)
677 list.append(QVariant(t));
681 foreach (
unsigned int t, non_overlapping_tracks)
682 list.append(QVariant(t));
716 Q_ASSERT(meta_last >= shift);
717 if (meta_last < shift) {
723 Q_ASSERT(meta_first >= shift);
724 meta_first = (meta_first >= shift) ? (meta_first - shift) : 0;
736 const QList<unsigned int> &tracks)
740 while (it.hasPrevious()) {
748 if (meta_last < offset)
752 if (!tracks.isEmpty() &&
756 QList<unsigned int> overlapping_tracks;
757 QList<unsigned int> non_overlapping_tracks;
758 QList<unsigned int> meta_tracks = meta.
boundTracks();
760 foreach (
unsigned int t, meta_tracks) {
761 if (tracks.contains(t))
762 overlapping_tracks.append(t);
764 non_overlapping_tracks.append(t);
768 if (overlapping_tracks.isEmpty())
773 if (!non_overlapping_tracks.isEmpty()) {
777 foreach (
unsigned int t, overlapping_tracks)
778 list.append(QVariant(t));
782 foreach (
unsigned int t, non_overlapping_tracks)
783 list.append(QVariant(t));
799 Q_ASSERT(pos + shift >= pos);
800 if (pos + shift >= pos) {
818 Q_ASSERT(meta_first + shift >= meta_first);
819 if (meta_first + shift < meta_first) {
825 Q_ASSERT(meta_last + shift >= meta_last);
826 meta_last = (meta_last + shift >= meta_last) ?
828 if (meta_first >= offset)
840 const QList<unsigned int> &tracks)
843 while (it.hasNext()) {
851 if (!tracks.isEmpty() &&
855 QList<unsigned int> overlapping_tracks;
856 QList<unsigned int> non_overlapping_tracks;
857 QList<unsigned int> meta_tracks = meta.
boundTracks();
859 foreach (
unsigned int t, meta_tracks) {
860 if (tracks.contains(t))
861 overlapping_tracks.append(t);
863 non_overlapping_tracks.append(t);
867 if (overlapping_tracks.isEmpty())
872 if (!non_overlapping_tracks.isEmpty()) {
876 foreach (
unsigned int t, overlapping_tracks)
877 list.append(QVariant(t));
881 foreach (
unsigned int t, non_overlapping_tracks)
882 list.append(QVariant(t));
938 while (it.hasNext()) {
943 QList<QVariant> old_list = m[prop].toList();
944 QList<QVariant> new_list;
945 foreach (
const QVariant &v, old_list) {
947 unsigned int t = v.toUInt(&ok);
948 if (ok && (t >= track))
949 new_list.append(QVariant(t + 1));
963 while (it.hasNext()) {
968 QList<QVariant> old_list = m[prop].toList();
969 QList<QVariant> new_list;
970 foreach (
const QVariant &v, old_list) {
972 unsigned int t = v.toUInt(&ok);
978 new_list.append(QVariant(t - 1));
980 if (!new_list.isEmpty())
990 const QList<unsigned int> &tracks)
996 while (it.hasNext()) {
1004 if ((offset <= meta_first) || (offset > meta_last))
1014 if (!tracks.isEmpty() &&
1018 QList<unsigned int> overlapping_tracks;
1019 QList<unsigned int> non_overlapping_tracks;
1020 QList<unsigned int> meta_tracks = meta.
boundTracks();
1022 foreach (
unsigned int t, meta_tracks) {
1023 if (tracks.contains(t))
1024 overlapping_tracks.append(t);
1026 non_overlapping_tracks.append(t);
1030 if (overlapping_tracks.isEmpty())
1035 if (!non_overlapping_tracks.isEmpty()) {
1039 foreach (
unsigned int t, overlapping_tracks)
1040 list.append(QVariant(t));
1044 foreach (
unsigned int t, non_overlapping_tracks)
1045 list.append(QVariant(t));
1064 qDebug(
"--- meta data ---");
1067 while (it.hasNext()) {
1070 qDebug(
"* meta data #%s",
DBG(it.key()));
1073 qDebug(
"-----------------");