summaryrefslogtreecommitdiff
path: root/muse2/muse/midieditor.cpp
diff options
context:
space:
mode:
authorRobert Jonsson <spamatica@gmail.com>2010-10-13 19:34:22 +0000
committerRobert Jonsson <spamatica@gmail.com>2010-10-13 19:34:22 +0000
commit8a2c2824a59d7644e13bc52c9a0ecbd641f21f95 (patch)
tree064ad3f2bf8daab0ad27b128abd86a9bbdb1e496 /muse2/muse/midieditor.cpp
parenta27706d9629e8b592cca4659f865b70adef24e6d (diff)
new branch muse2, first checkin
Diffstat (limited to 'muse2/muse/midieditor.cpp')
-rw-r--r--muse2/muse/midieditor.cpp237
1 files changed, 237 insertions, 0 deletions
diff --git a/muse2/muse/midieditor.cpp b/muse2/muse/midieditor.cpp
new file mode 100644
index 00000000..60a95643
--- /dev/null
+++ b/muse2/muse/midieditor.cpp
@@ -0,0 +1,237 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: midieditor.cpp,v 1.2.2.2 2009/02/02 21:38:00 terminator356 Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include "midieditor.h"
+#include "midiedit/ecanvas.h"
+#include "waveedit/waveview.h"
+#include "scrollscale.h"
+#include "mtscale.h"
+#include <qlayout.h>
+#include <qrect.h>
+#include <qcolor.h>
+//Added by qt3to4:
+#include <Q3GridLayout>
+#include "xml.h"
+#include "part.h"
+#include "track.h"
+#include "song.h"
+
+//---------------------------------------------------------
+// MidiEditor
+//---------------------------------------------------------
+
+MidiEditor::MidiEditor(int q, int r, PartList* pl,
+ QWidget* parent, const char* name) : TopWin(parent, name)
+ {
+ _pl = pl;
+ if (_pl)
+ for (iPart i = _pl->begin(); i != _pl->end(); ++i)
+ _parts.push_back(i->second->sn());
+ _quant = q;
+ _raster = r;
+ canvas = 0;
+ wview = 0;
+ _curDrumInstrument = -1;
+ mainw = new QWidget(this);
+ mainGrid = new Q3GridLayout(mainw);
+ setCentralWidget(mainw);
+ }
+
+//---------------------------------------------------------
+// genPartlist
+//---------------------------------------------------------
+
+void MidiEditor::genPartlist()
+ {
+ _pl->clear();
+ for (std::list<int>::iterator i = _parts.begin(); i != _parts.end(); ++i) {
+ TrackList* tl = song->tracks();
+ for (iTrack it = tl->begin(); it != tl->end(); ++it) {
+ PartList* pl = (*it)->parts();
+ iPart ip;
+ for (ip = pl->begin(); ip != pl->end(); ++ip) {
+ if (ip->second->sn() == *i) {
+ _pl->add(ip->second);
+ break;
+ }
+ }
+ if (ip != pl->end())
+ break;
+ }
+ }
+ }
+
+//---------------------------------------------------------
+// MidiEditor
+//---------------------------------------------------------
+
+MidiEditor::~MidiEditor()
+ {
+ if (_pl)
+ delete _pl;
+ }
+
+//---------------------------------------------------------
+// quantVal
+//---------------------------------------------------------
+
+int MidiEditor::quantVal(int v) const
+ {
+ int val = ((v+_quant/2)/_quant)*_quant;
+ if (val == 0)
+ val = _quant;
+ return val;
+ }
+
+//---------------------------------------------------------
+// readStatus
+//---------------------------------------------------------
+
+void MidiEditor::readStatus(Xml& xml)
+ {
+ if (_pl == 0)
+ _pl = new PartList;
+
+ for (;;) {
+ Xml::Token token = xml.parse();
+ QString tag = xml.s1();
+ switch (token) {
+ case Xml::Error:
+ case Xml::End:
+ return;
+ case Xml::TagStart:
+ if (tag == "quant")
+ _quant = xml.parseInt();
+ else if (tag == "raster")
+ _raster = xml.parseInt();
+ else if (tag == "topwin")
+ TopWin::readStatus(xml);
+ else
+ xml.unknown("MidiEditor");
+ break;
+ case Xml::TagEnd:
+ if (tag == "midieditor")
+ return;
+ default:
+ break;
+ }
+ }
+ }
+
+//---------------------------------------------------------
+// writePartList
+//---------------------------------------------------------
+
+void MidiEditor::writePartList(int level, Xml& xml) const
+ {
+ for (ciPart p = _pl->begin(); p != _pl->end(); ++p) {
+ Part* part = p->second;
+ Track* track = part->track();
+ int trkIdx = song->tracks()->index(track);
+ int partIdx = track->parts()->index(part);
+
+ if((trkIdx == -1) || (partIdx == -1))
+ printf("MidiEditor::writePartList error: trkIdx:%d partIdx:%d\n", trkIdx, partIdx);
+
+ xml.put(level, "<part>%d:%d</part>", trkIdx, partIdx);
+ }
+ }
+
+//---------------------------------------------------------
+// writeStatus
+//---------------------------------------------------------
+
+void MidiEditor::writeStatus(int level, Xml& xml) const
+ {
+ xml.tag(level++, "midieditor");
+ TopWin::writeStatus(level, xml);
+ xml.intTag(level, "quant", _quant);
+ xml.intTag(level, "raster", _raster);
+ xml.tag(level, "/midieditor");
+ }
+
+//---------------------------------------------------------
+// songChanged
+//---------------------------------------------------------
+
+void MidiEditor::songChanged(int type)
+ {
+
+ if (type) {
+ if (type & (SC_PART_REMOVED | SC_PART_MODIFIED
+ | SC_PART_INSERTED | SC_TRACK_REMOVED)) {
+ genPartlist();
+ // close window if editor has no parts anymore
+ if (parts()->empty()) {
+ close(false);
+ return;
+ }
+ }
+ if (canvas)
+ canvas->songChanged(type);
+ else if (wview)
+ wview->songChanged(type);
+
+ if (type & (SC_PART_REMOVED | SC_PART_MODIFIED
+ | SC_PART_INSERTED | SC_TRACK_REMOVED)) {
+
+ updateHScrollRange();
+ if (canvas)
+ setCaption(canvas->getCaption());
+ else if (wview)
+ setCaption(wview->getCaption());
+ if (type & SC_SIG)
+ time->update();
+
+ }
+ }
+ }
+
+//---------------------------------------------------------
+// setCurDrumInstrument
+//---------------------------------------------------------
+
+void MidiEditor::setCurDrumInstrument(int instr)
+ {
+ _curDrumInstrument = instr;
+ emit curDrumInstrumentChanged(_curDrumInstrument);
+ }
+
+//---------------------------------------------------------
+// curCanvasPart
+//---------------------------------------------------------
+
+Part* MidiEditor::curCanvasPart()
+{
+ if(canvas)
+ return canvas->part();
+ else
+ return 0;
+}
+
+//---------------------------------------------------------
+// curWavePart
+//---------------------------------------------------------
+
+WavePart* MidiEditor::curWavePart()
+{
+ if(wview)
+ return wview->part();
+ else
+ return 0;
+}
+
+//---------------------------------------------------------
+// setCurCanvasPart
+//---------------------------------------------------------
+
+void MidiEditor::setCurCanvasPart(Part* part)
+{
+ if(canvas)
+ canvas->setCurrentPart(part);
+}
+