summaryrefslogtreecommitdiff
path: root/muse2/muse/mplugins/mittranspose.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/mplugins/mittranspose.cpp
parenta27706d9629e8b592cca4659f865b70adef24e6d (diff)
new branch muse2, first checkin
Diffstat (limited to 'muse2/muse/mplugins/mittranspose.cpp')
-rw-r--r--muse2/muse/mplugins/mittranspose.cpp181
1 files changed, 181 insertions, 0 deletions
diff --git a/muse2/muse/mplugins/mittranspose.cpp b/muse2/muse/mplugins/mittranspose.cpp
new file mode 100644
index 00000000..b9a260c9
--- /dev/null
+++ b/muse2/muse/mplugins/mittranspose.cpp
@@ -0,0 +1,181 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: mittranspose.cpp,v 1.2.2.1 2009/05/03 04:14:00 terminator356 Exp $
+//
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <qcheckbox.h>
+#include <qspinbox.h>
+#include <qlabel.h>
+#include <qtimer.h>
+//Added by qt3to4:
+#include <QCloseEvent>
+
+#include "mittranspose.h"
+#include "song.h"
+#include "mpevent.h"
+#include "pitchedit.h"
+#include "xml.h"
+#include "globals.h"
+
+MITPluginTranspose* mitPluginTranspose;
+
+//---------------------------------------------------------
+// MITPluginTranspose
+//---------------------------------------------------------
+
+MITPluginTranspose::MITPluginTranspose(QWidget* parent, const char* name, Qt::WFlags fl)
+ : MITTransposeBase(parent, name, fl)
+ {
+ on = false;
+ transpose = 0;
+ trigger = 24;
+ transposeChangedFlag = false;
+ triggerKeySpinBox->setValue(trigger);
+
+ onToggled(false);
+ connect(onCheckBox, SIGNAL(toggled(bool)), SLOT(onToggled(bool)));
+ connect(triggerKeySpinBox, SIGNAL(valueChanged(int)),
+ SLOT(triggerKeyChanged(int)));
+ connect(heartBeatTimer, SIGNAL(timeout()), SLOT(noteReceived()));
+ }
+
+//---------------------------------------------------------
+// closeEvent
+//---------------------------------------------------------
+
+void MITPluginTranspose::closeEvent(QCloseEvent* ev)
+ {
+ emit hideWindow();
+ QWidget::closeEvent(ev);
+ }
+
+//---------------------------------------------------------
+// noteReceived
+//---------------------------------------------------------
+
+void MITPluginTranspose::noteReceived()
+ {
+ if (transposeChangedFlag)
+ {
+ // Added by Tim. p3.3.6
+ //printf("MITPluginTranspose::noteReceived\n");
+
+ transposeChanged();
+ }
+ }
+
+//---------------------------------------------------------
+// triggerKeyChanged
+//---------------------------------------------------------
+
+void MITPluginTranspose::triggerKeyChanged(int val)
+ {
+ trigger = val;
+ }
+
+//---------------------------------------------------------
+// transposeChanged
+//---------------------------------------------------------
+
+void MITPluginTranspose::transposeChanged()
+ {
+ QString s;
+ s.sprintf("%c%d", transpose >= 0 ? '-' : ' ', transpose);
+ transposeLabel->setText(s);
+ transposeChangedFlag = false;
+ }
+
+//---------------------------------------------------------
+// onToggled
+//---------------------------------------------------------
+
+void MITPluginTranspose::onToggled(bool f)
+ {
+ on = f;
+ if (!on) {
+ transpose = 0;
+ transposeChanged();
+ keyOnList.clear();
+ }
+ transposeLabel->setEnabled(on);
+ triggerKeySpinBox->setEnabled(on);
+ }
+
+//---------------------------------------------------------
+// process
+//---------------------------------------------------------
+
+void MITPluginTranspose::process(MEvent& ev)
+ {
+ if (!on || (ev.type() != 0x90))
+ return;
+ int pitch = ev.dataA();
+ if (pitch >= trigger && pitch < (trigger+12)) {
+ // process control keys
+ int diff = transpose - (pitch-trigger);
+ transpose -= diff;
+ transposeChangedFlag = true;
+ return;
+ }
+ if (ev.dataB() == 0) {
+ // Note Off
+ for (iKeyOn i = keyOnList.begin(); i != keyOnList.end(); ++i) {
+ if (i->pitch == pitch && i->channel == ev.channel()
+ && i->port == ev.port()) {
+ pitch += i->transpose;
+ keyOnList.erase(i);
+ break;
+ }
+ }
+ }
+ else {
+ // Note On
+ keyOnList.push_back(KeyOn(pitch, ev.channel(), ev.port(), transpose));
+ pitch += transpose;
+ }
+ ev.setA(pitch);
+ }
+
+//---------------------------------------------------------
+// readStatus
+//---------------------------------------------------------
+
+void MITPluginTranspose::readStatus(Xml& xml)
+ {
+ for (;;) {
+ Xml::Token token = xml.parse();
+ const QString& tag = xml.s1();
+ switch (token) {
+ case Xml::Error:
+ case Xml::End:
+ return;
+ case Xml::Text:
+ if (tag == "on")
+ on = xml.parseInt();
+ else if (tag == "trigger")
+ trigger = xml.parseInt();
+ else
+ xml.unknown("TransposePlugin");
+ break;
+ case Xml::TagEnd:
+ if (xml.s1() == "mplugin")
+ return;
+ default:
+ break;
+ }
+ }
+ }
+
+//---------------------------------------------------------
+// writeStatus
+//---------------------------------------------------------
+
+void MITPluginTranspose::writeStatus(int level, Xml& xml) const
+ {
+ xml.intTag(level, "on", on);
+ xml.intTag(level, "trigger", trigger);
+ }
+