1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
//=========================================================
// MusE
// Linux Music Editor
// $Id: marker.cpp,v 1.2 2003/12/10 18:34:22 wschweer Exp $
// (C) Copyright 2000 Werner Schweer (ws@seh.de)
//=========================================================
#include "marker.h"
#include "xml.h"
Marker* MarkerList::add(const Marker& marker)
{
iMarker i = insert(std::pair<const int, Marker> (marker.tick(), Marker(marker)));
return &i->second;
}
Marker* MarkerList::add(const QString& s, int t, bool lck)
{
Marker marker(s);
marker.setType(lck ? Pos::FRAMES : Pos::TICKS);
marker.setTick(t);
iMarker i = insert(std::pair<const int, Marker> (t, marker));
return &i->second;
}
//---------------------------------------------------------
// read
//---------------------------------------------------------
void Marker::read(Xml& xml)
{
for (;;) {
Xml::Token token = xml.parse();
const QString& tag = xml.s1();
switch (token) {
case Xml::Error:
case Xml::End:
return;
case Xml::TagStart:
xml.unknown("Marker");
break;
case Xml::Attribut:
if (tag == "tick")
setTick(xml.s2().toInt());
else if (tag == "lock")
setType(xml.s2().toInt() ? FRAMES:TICKS);
else if (tag == "name")
{
_name = xml.s2();
}
break;
case Xml::TagEnd:
if (xml.s1() == "marker")
return;
default:
break;
}
}
}
//---------------------------------------------------------
// write
//---------------------------------------------------------
void MarkerList::write(int level, Xml& xml) const
{
for (ciMarker i = begin(); i != end(); ++i) {
const Marker& m = i->second;
xml.put(level, "<marker tick=\"%d\" lock=\"%d\" name=\"%s\" />",
//m.tick(), m.type()==Pos::FRAMES, m.name().toLatin1().constData());
m.tick(), m.type()==Pos::FRAMES, Xml::xmlString(m.name()).toLatin1().constData());
}
}
//---------------------------------------------------------
// remove
//---------------------------------------------------------
void MarkerList::remove(Marker* m)
{
for (iMarker i = begin(); i != end(); ++i) {
Marker* mm = &i->second;
if (mm == m) {
erase(i);
return;
}
}
printf("MarkerList::remove(): marker not found\n");
}
|