summaryrefslogtreecommitdiff
path: root/muse2/muse/marker/marker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'muse2/muse/marker/marker.cpp')
-rw-r--r--muse2/muse/marker/marker.cpp90
1 files changed, 90 insertions, 0 deletions
diff --git a/muse2/muse/marker/marker.cpp b/muse2/muse/marker/marker.cpp
new file mode 100644
index 00000000..eee0be02
--- /dev/null
+++ b/muse2/muse/marker/marker.cpp
@@ -0,0 +1,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().latin1());
+ m.tick(), m.type()==Pos::FRAMES, Xml::xmlString(m.name()).latin1());
+ }
+ }
+
+//---------------------------------------------------------
+// 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");
+ }
+