summaryrefslogtreecommitdiff
path: root/attic/muse_qt4_evolution/muse/mixer.cpp
diff options
context:
space:
mode:
authorRobert Jonsson <spamatica@gmail.com>2011-03-07 19:01:11 +0000
committerRobert Jonsson <spamatica@gmail.com>2011-03-07 19:01:11 +0000
commite40fc849149dd97c248866a4a1d026dda5e57b62 (patch)
treeb12b358f3b3a0608001d30403358f8443118ec5f /attic/muse_qt4_evolution/muse/mixer.cpp
parent1bd4f2e8d9745cabb667b043171cad22c8577768 (diff)
clean3
Diffstat (limited to 'attic/muse_qt4_evolution/muse/mixer.cpp')
-rw-r--r--attic/muse_qt4_evolution/muse/mixer.cpp397
1 files changed, 397 insertions, 0 deletions
diff --git a/attic/muse_qt4_evolution/muse/mixer.cpp b/attic/muse_qt4_evolution/muse/mixer.cpp
new file mode 100644
index 00000000..b3e5ce06
--- /dev/null
+++ b/attic/muse_qt4_evolution/muse/mixer.cpp
@@ -0,0 +1,397 @@
+//=============================================================================
+// MusE
+// Linux Music Editor
+// $Id:$
+//
+// Copyright (C) 2002-2006 by Werner Schweer and others
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License version 2.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+//=============================================================================
+
+#include "muse.h"
+#include "mixer.h"
+#include "song.h"
+#include "icons.h"
+#include "astrip.h"
+#include "mstrip.h"
+#include "routedialog.h"
+#include "synth.h"
+#include "midiinport.h"
+#include "midioutport.h"
+
+extern void populateAddTrack(QMenu* addTrack);
+
+//---------------------------------------------------------
+// Mixer
+//
+// inputs | synthis | tracks | groups | master
+//---------------------------------------------------------
+
+Mixer::Mixer(QWidget* parent, MixerConfig* c)
+ : QMainWindow(parent)
+ {
+ mustUpdateMixer = false;
+ cfg = c;
+ routingDialog = 0;
+ setWindowTitle(tr("MusE: Mixer"));
+ setWindowIcon(*museIcon);
+
+ QMenu* menuCreate = menuBar()->addMenu(tr("&Create"));
+ populateAddTrack(menuCreate);
+
+ menuView = menuBar()->addMenu(tr("&View"));
+ routingAction = menuView->addAction(tr("Routing"), this, SLOT(toggleRouteDialog()));
+ routingAction->setCheckable(true);
+
+ showMidiTracksId = menuView->addAction(tr("Show Midi Tracks"));
+ showMidiOutPortId = menuView->addAction(tr("Show Midi Out Ports"));
+ showMidiInPortId = menuView->addAction(tr("Show Midi In Ports"));
+
+ menuView->addSeparator();
+
+ showWaveTracksId = menuView->addAction(tr("Show Wave Tracks"));
+ showOutputTracksId = menuView->addAction(tr("Show Output Tracks"));
+ showGroupTracksId = menuView->addAction(tr("Show Group Tracks"));
+ showInputTracksId = menuView->addAction(tr("Show Input Tracks"));
+ showSyntiTracksId = menuView->addAction(tr("Show Synthesizer"));
+ connect(menuView, SIGNAL(triggered(QAction*)), SLOT(showTracksChanged(QAction*)));
+
+ showMidiTracksId->setCheckable(true);
+ showMidiInPortId->setCheckable(true);
+ showMidiOutPortId->setCheckable(true);
+ showWaveTracksId->setCheckable(true);
+ showOutputTracksId->setCheckable(true);
+ showGroupTracksId->setCheckable(true);
+ showInputTracksId->setCheckable(true);
+ showSyntiTracksId->setCheckable(true);
+
+ QScrollArea* view = new QScrollArea;
+ view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ setCentralWidget(view);
+
+ central = new QWidget;
+ layout = new QHBoxLayout;
+ central->setLayout(layout);
+ layout->setSpacing(0);
+ layout->setMargin(0);
+ view->setWidget(central);
+ view->setWidgetResizable(true);
+
+ connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int)));
+ connect(muse, SIGNAL(configChanged()), SLOT(configChanged()));
+ song->update(); // calls update mixer
+ }
+
+//---------------------------------------------------------
+// addStrip
+//---------------------------------------------------------
+
+void Mixer::addStrip(Track* t, int idx)
+ {
+ StripList::iterator si = stripList.begin();
+ for (int i = 0; i < idx; ++i) {
+ if (si != stripList.end())
+ ++si;
+ }
+ if (si != stripList.end() && (*si)->getTrack() == t)
+ return;
+
+ StripList::iterator nsi = si;
+ ++nsi;
+ if (si != stripList.end()
+ && nsi != stripList.end()
+ && (*nsi)->getTrack() == t) {
+ layout->removeWidget(*si);
+ delete *si;
+ stripList.erase(si);
+ }
+ else {
+ Strip* strip;
+ switch(t->type()) {
+ case Track::MIDI_IN:
+ strip = new MidiInPortStrip(this, (MidiInPort*)t, true);
+ break;
+ case Track::MIDI_OUT:
+ strip = new MidiOutPortStrip(this, (MidiOutPort*)t, true);
+ break;
+ case Track::MIDI:
+ strip = new MidiStrip(this, (MidiTrack*)t, true);
+ break;
+ case Track::MIDI_SYNTI:
+ strip = new MidiSyntiStrip(this, (MidiSynti*)t, true);
+ break;
+ default:
+ strip = new AudioStrip(this, (AudioTrack*)t, true);
+ break;
+ }
+ layout->insertWidget(idx, strip);
+ stripList.insert(si, strip);
+ strip->show();
+ }
+ }
+
+//---------------------------------------------------------
+// clear
+//---------------------------------------------------------
+
+void Mixer::clear()
+ {
+ QLayoutItem* i;
+ while ((i = layout->takeAt(0))) {
+ if (i->widget())
+ delete i->widget();
+ delete i;
+ }
+ stripList.clear();
+ }
+
+//---------------------------------------------------------
+// updateMixer
+//---------------------------------------------------------
+
+void Mixer::updateMixer(int action)
+ {
+ showMidiTracksId->setChecked(cfg->showMidiTracks);
+ showMidiInPortId->setChecked(cfg->showMidiInPorts);
+ showMidiOutPortId->setChecked(cfg->showMidiOutPorts);
+ showWaveTracksId->setChecked(cfg->showWaveTracks);
+ showOutputTracksId->setChecked(cfg->showOutputTracks);
+ showGroupTracksId->setChecked(cfg->showGroupTracks);
+ showInputTracksId->setChecked(cfg->showInputTracks);
+ showSyntiTracksId->setChecked(cfg->showSyntiTracks);
+
+ if (action == STRIP_REMOVED) {
+ foreach(Strip* strip, stripList) {
+ Track* track = strip->getTrack();
+ if (song->trackExists(track))
+ continue;
+ layout->removeWidget(strip);
+ delete strip;
+ stripList.removeAt(stripList.indexOf(strip));
+ }
+ int idx = stripList.size();
+ setMaximumWidth(STRIP_WIDTH * idx + 4);
+ central->setFixedWidth(STRIP_WIDTH * idx);
+ if (idx < 4)
+ setMinimumWidth(idx * STRIP_WIDTH + 4);
+ return;
+ }
+
+ clear();
+
+ int idx = 0;
+ //---------------------------------------------------
+ // generate Input Strips
+ //---------------------------------------------------
+
+ if (cfg->showInputTracks) {
+ InputList* itl = song->inputs();
+ for (iAudioInput i = itl->begin(); i != itl->end(); ++i)
+ addStrip(*i, idx++);
+ }
+
+ //---------------------------------------------------
+ // Synthesizer Strips
+ //---------------------------------------------------
+
+ if (cfg->showSyntiTracks) {
+ SynthIList* sl = song->syntis();
+ for (iSynthI i = sl->begin(); i != sl->end(); ++i)
+ addStrip(*i, idx++);
+ }
+
+ //---------------------------------------------------
+ // generate Wave Track Strips
+ //---------------------------------------------------
+
+ if (cfg->showWaveTracks) {
+ WaveTrackList* wtl = song->waves();
+ for (iWaveTrack i = wtl->begin(); i != wtl->end(); ++i)
+ addStrip(*i, idx++);
+ }
+
+ //---------------------------------------------------
+ // generate Midi strips
+ //---------------------------------------------------
+
+ if (cfg->showMidiInPorts) {
+ MidiInPortList* mpl = song->midiInPorts();
+ for (iMidiInPort i = mpl->begin(); i != mpl->end(); ++i)
+ addStrip(*i, idx++);
+ }
+
+ if (cfg->showMidiSyntiPorts) {
+ MidiSyntiList* mpl = song->midiSyntis();
+ for (iMidiSynti i = mpl->begin(); i != mpl->end(); ++i)
+ addStrip(*i, idx++);
+ }
+
+ if (cfg->showMidiTracks) {
+ MidiTrackList* mtl = song->midis();
+ for (iMidiTrack i = mtl->begin(); i != mtl->end(); ++i)
+ addStrip(*i, idx++);
+ }
+
+ if (cfg->showMidiOutPorts) {
+ MidiOutPortList* mpl = song->midiOutPorts();
+ for (iMidiOutPort i = mpl->begin(); i != mpl->end(); ++i)
+ addStrip(*i, idx++);
+ }
+
+ //---------------------------------------------------
+ // Groups
+ //---------------------------------------------------
+
+ if (cfg->showGroupTracks) {
+ GroupList* gtl = song->groups();
+ for (iAudioGroup i = gtl->begin(); i != gtl->end(); ++i)
+ addStrip(*i, idx++);
+ }
+
+ //---------------------------------------------------
+ // Master
+ //---------------------------------------------------
+
+ if (cfg->showOutputTracks) {
+ OutputList* otl = song->outputs();
+ for (iAudioOutput i = otl->begin(); i != otl->end(); ++i)
+ addStrip(*i, idx++);
+ }
+ setMaximumWidth(STRIP_WIDTH * idx + 4);
+ central->setFixedWidth(STRIP_WIDTH * idx);
+ if (idx < 4)
+ setMinimumWidth(idx * STRIP_WIDTH + 4);
+ layout->update();
+ }
+
+//---------------------------------------------------------
+// songChanged
+//---------------------------------------------------------
+
+void Mixer::songChanged(int flags)
+ {
+ int action = NO_UPDATE;
+ if (flags == -1)
+ action = UPDATE_ALL;
+ else {
+ if (flags & SC_TRACK_REMOVED)
+ action |= STRIP_REMOVED;
+ if (flags & SC_TRACK_INSERTED)
+ action |= STRIP_INSERTED;
+ }
+ if (action != NO_UPDATE)
+ updateMixer(action);
+ }
+
+//---------------------------------------------------------
+// closeEvent
+//---------------------------------------------------------
+
+void Mixer::closeEvent(QCloseEvent* e)
+ {
+ emit closed();
+ e->accept();
+ }
+
+//---------------------------------------------------------
+// toggleRouteDialog
+//---------------------------------------------------------
+
+void Mixer::toggleRouteDialog()
+ {
+ showRouteDialog(routingAction->isChecked());
+ }
+
+//---------------------------------------------------------
+// showRouteDialog
+//---------------------------------------------------------
+
+void Mixer::showRouteDialog(bool on)
+ {
+ if (on && routingDialog == 0) {
+ routingDialog = new RouteDialog(this);
+ connect(routingDialog, SIGNAL(closed()), SLOT(routingDialogClosed()));
+ }
+ if (routingDialog)
+ routingDialog->setShown(on);
+ routingAction->setChecked(on);
+ }
+
+//---------------------------------------------------------
+// routingDialogClosed
+//---------------------------------------------------------
+
+void Mixer::routingDialogClosed()
+ {
+ routingAction->setChecked(false);
+ }
+
+//---------------------------------------------------------
+// showTracksChanged
+//---------------------------------------------------------
+
+void Mixer::showTracksChanged(QAction* id)
+ {
+ bool val = id->isChecked();
+ if (id == showMidiTracksId)
+ cfg->showMidiTracks = val;
+ else if (id == showOutputTracksId)
+ cfg->showOutputTracks = val;
+ else if (id == showWaveTracksId)
+ cfg->showWaveTracks = val;
+ else if (id == showGroupTracksId)
+ cfg->showGroupTracks = val;
+ else if (id == showInputTracksId)
+ cfg->showInputTracks = val;
+ else if (id == showSyntiTracksId)
+ cfg->showSyntiTracks = val;
+ else if (id == showMidiInPortId)
+ cfg->showMidiInPorts = val;
+ else if (id == showMidiOutPortId)
+ cfg->showMidiOutPorts = val;
+ updateMixer(UPDATE_ALL);
+ }
+
+//---------------------------------------------------------
+// write
+//---------------------------------------------------------
+
+void Mixer::write(Xml& xml, const char* name)
+ {
+ xml.stag(QString(name));
+ xml.tag("geometry", geometry());
+ xml.tag("showMidiTracks", cfg->showMidiTracks);
+ xml.tag("showOutputTracks", cfg->showOutputTracks);
+ xml.tag("showWaveTracks", cfg->showWaveTracks);
+ xml.tag("showGroupTracks", cfg->showGroupTracks);
+ xml.tag("showInputTracks", cfg->showInputTracks);
+ xml.tag("showSyntiTracks", cfg->showSyntiTracks);
+ xml.tag("showMidiInPorts", cfg->showMidiInPorts);
+ xml.tag("showMidiOutPorts", cfg->showMidiOutPorts);
+ xml.etag(name);
+ }
+
+//---------------------------------------------------------
+// heartBeat
+//---------------------------------------------------------
+
+void Mixer::heartBeat()
+ {
+ if (mustUpdateMixer) {
+ updateMixer(STRIP_INSERTED | STRIP_REMOVED);
+ mustUpdateMixer = false;
+ }
+ foreach(Strip* s, stripList)
+ s->heartBeat();
+ }
+