summaryrefslogtreecommitdiffstats
path: root/src/gui/widgets/AudioFaderBox.cpp
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-03-01 18:37:05 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-03-01 18:37:05 +0000
commit145364a8af6a1fec06556221e66d4b724a62fc9a (patch)
tree53bd71a544008c518034f208d64c932dc2883f50 /src/gui/widgets/AudioFaderBox.cpp
downloadrosegarden-145364a8af6a1fec06556221e66d4b724a62fc9a.tar.gz
rosegarden-145364a8af6a1fec06556221e66d4b724a62fc9a.zip
Added old abandoned KDE3 version of the RoseGarden MIDI tool
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/rosegarden@1097595 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'src/gui/widgets/AudioFaderBox.cpp')
-rw-r--r--src/gui/widgets/AudioFaderBox.cpp294
1 files changed, 294 insertions, 0 deletions
diff --git a/src/gui/widgets/AudioFaderBox.cpp b/src/gui/widgets/AudioFaderBox.cpp
new file mode 100644
index 0000000..05789ff
--- /dev/null
+++ b/src/gui/widgets/AudioFaderBox.cpp
@@ -0,0 +1,294 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
+
+/*
+ Rosegarden
+ A MIDI and audio sequencer and musical notation editor.
+
+ This program is Copyright 2000-2008
+ Guillaume Laurent <[email protected]>,
+ Chris Cannam <[email protected]>,
+ Richard Bown <[email protected]>
+
+ The moral rights of Guillaume Laurent, Chris Cannam, and Richard
+ Bown to claim authorship of this work have been asserted.
+
+ Other copyrights also apply to some parts of this work. Please
+ see the AUTHORS file and individual file headers for details.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version. See the file
+ COPYING included with this distribution for more information.
+*/
+
+
+#include "AudioFaderBox.h"
+#include <qlayout.h>
+
+#include <klocale.h>
+#include <kstddirs.h>
+#include "misc/Debug.h"
+#include "AudioRouteMenu.h"
+#include "AudioVUMeter.h"
+#include "base/AudioLevel.h"
+#include "base/Instrument.h"
+#include "base/Studio.h"
+#include "Fader.h"
+#include "gui/general/GUIPalette.h"
+#include "gui/application/RosegardenGUIApp.h"
+#include "gui/studio/AudioPluginOSCGUIManager.h"
+#include "Rotary.h"
+#include <kglobal.h>
+#include <qframe.h>
+#include <qhbox.h>
+#include <qlabel.h>
+#include <qobject.h>
+#include <qpixmap.h>
+#include <qpushbutton.h>
+#include <qsignalmapper.h>
+#include <qstring.h>
+#include <qtooltip.h>
+#include <qvbox.h>
+#include <qwidget.h>
+#include "VUMeter.h"
+
+
+namespace Rosegarden
+{
+
+AudioFaderBox::AudioFaderBox(QWidget *parent,
+ QString id,
+ bool haveInOut,
+ const char *name):
+ QFrame(parent, name),
+ m_signalMapper(new QSignalMapper(this)),
+ m_id(id),
+ m_isStereo(false)
+{
+ // Plugin box
+ //
+ QPushButton *plugin;
+ QVBox *pluginVbox = 0;
+
+ pluginVbox = new QVBox(this);
+ pluginVbox->setSpacing(2);
+
+ for (int i = 0; i < 5; i++) {
+ plugin = new QPushButton(pluginVbox);
+ plugin->setText(i18n("<no plugin>"));
+
+ QToolTip::add
+ (plugin, i18n("Audio plugin button"));
+
+ m_plugins.push_back(plugin);
+ m_signalMapper->setMapping(plugin, i);
+ connect(plugin, SIGNAL(clicked()),
+ m_signalMapper, SLOT(map()));
+ }
+
+ m_synthButton = new QPushButton(this);
+ m_synthButton->setText(i18n("<no synth>"));
+ QToolTip::add
+ (m_synthButton, i18n("Synth plugin button"));
+
+ // VU meter and fader
+ //
+ QHBox *faderHbox = new QHBox(this);
+
+ m_vuMeter = new AudioVUMeter(faderHbox, VUMeter::AudioPeakHoldShort,
+ true, true);
+
+ m_recordFader = new Fader(AudioLevel::ShortFader,
+ 20, m_vuMeter->height(), faderHbox);
+
+ m_recordFader->setOutlineColour(GUIPalette::getColour(GUIPalette::RecordFaderOutline));
+
+ delete m_vuMeter; // only used the first one to establish height,
+ // actually want it after the record fader in
+ // hbox
+ m_vuMeter = new AudioVUMeter(faderHbox, VUMeter::AudioPeakHoldShort,
+ true, true);
+
+ m_fader = new Fader(AudioLevel::ShortFader,
+ 20, m_vuMeter->height(), faderHbox);
+
+ m_fader->setOutlineColour(GUIPalette::getColour(GUIPalette::PlaybackFaderOutline));
+
+ QString pixmapDir = KGlobal::dirs()->findResource("appdata", "pixmaps/");
+ m_monoPixmap.load(QString("%1/misc/mono.xpm").arg(pixmapDir));
+ m_stereoPixmap.load(QString("%1/misc/stereo.xpm").arg(pixmapDir));
+
+ m_pan = new Rotary(this, -100.0, 100.0, 1.0, 5.0, 0.0, 22,
+ Rotary::NoTicks, false, true);
+
+ // same as the knob colour on the MIDI pan
+ m_pan->setKnobColour(GUIPalette::getColour(GUIPalette::RotaryPastelGreen));
+
+ m_stereoButton = new QPushButton(this);
+ m_stereoButton->setPixmap(m_monoPixmap); // default is mono
+ m_stereoButton->setFixedSize(24, 24);
+
+ connect(m_stereoButton, SIGNAL(clicked()),
+ this, SLOT(slotChannelStateChanged()));
+
+ m_synthGUIButton = new QPushButton(this);
+ m_synthGUIButton->setText(i18n("Editor"));
+
+ if (haveInOut) {
+ m_audioInput = new AudioRouteMenu(this,
+ AudioRouteMenu::In,
+ AudioRouteMenu::Regular);
+ m_audioOutput = new AudioRouteMenu(this,
+ AudioRouteMenu::Out,
+ AudioRouteMenu::Regular);
+ } else {
+ m_pan->setKnobColour(GUIPalette::getColour(GUIPalette::RotaryPastelOrange));
+
+ m_audioInput = 0;
+ m_audioOutput = 0;
+ }
+
+ QToolTip::add
+ (m_pan, i18n("Set the audio pan position in the stereo field"));
+ QToolTip::add
+ (m_synthGUIButton, i18n("Open synth plugin's native editor"));
+ QToolTip::add
+ (m_stereoButton, i18n("Mono or Stereo Instrument"));
+ QToolTip::add
+ (m_recordFader, i18n("Record level"));
+ QToolTip::add
+ (m_fader, i18n("Playback level"));
+ QToolTip::add
+ (m_vuMeter, i18n("Audio level"));
+
+ QGridLayout *grid = new QGridLayout(this, 3, 6, 4, 4);
+
+ grid->addMultiCellWidget(m_synthButton, 0, 0, 0, 2);
+
+ if (haveInOut) {
+ m_inputLabel = new QLabel(i18n("In:"), this);
+ grid->addWidget(m_inputLabel, 0, 0, AlignRight);
+ grid->addMultiCellWidget(m_audioInput->getWidget(), 0, 0, 1, 2);
+ m_outputLabel = new QLabel(i18n("Out:"), this);
+ grid->addWidget(m_outputLabel, 0, 3, AlignRight);
+ grid->addMultiCellWidget(m_audioOutput->getWidget(), 0, 0, 4, 5);
+ }
+
+ grid->addMultiCellWidget(pluginVbox, 2, 2, 0, 2);
+ grid->addMultiCellWidget(faderHbox, 1, 2, 3, 5);
+
+ grid->addWidget(m_synthGUIButton, 1, 0);
+ grid->addWidget(m_pan, 1, 2);
+ grid->addWidget(m_stereoButton, 1, 1);
+
+ for (int i = 0; i < 5; ++i) {
+ // Force width
+ m_plugins[i]->setFixedWidth(m_plugins[i]->width());
+ }
+ m_synthButton->setFixedWidth(m_plugins[0]->width());
+
+ m_synthButton->hide();
+ m_synthGUIButton->hide();
+}
+
+void
+AudioFaderBox::setIsSynth(bool isSynth)
+{
+ if (isSynth) {
+ m_inputLabel->hide();
+ m_synthButton->show();
+ m_synthGUIButton->show();
+ m_audioInput->getWidget()->hide();
+ m_recordFader->hide();
+ } else {
+ m_synthButton->hide();
+ m_synthGUIButton->hide();
+ m_inputLabel->show();
+ m_audioInput->getWidget()->show();
+ m_recordFader->show();
+ }
+}
+
+void
+AudioFaderBox::slotSetInstrument(Studio *studio,
+ Instrument *instrument)
+{
+ if (m_audioInput)
+ m_audioInput->slotSetInstrument(studio, instrument);
+ if (m_audioOutput)
+ m_audioOutput->slotSetInstrument(studio, instrument);
+ if (instrument)
+ setAudioChannels(instrument->getAudioChannels());
+ if (instrument) {
+
+ RG_DEBUG << "AudioFaderBox::slotSetInstrument(" << instrument->getId() << ")" << endl;
+
+ setIsSynth(instrument->getType() == Instrument::SoftSynth);
+ if (instrument->getType() == Instrument::SoftSynth) {
+ bool gui = false;
+ RG_DEBUG << "AudioFaderBox::slotSetInstrument(" << instrument->getId() << "): is soft synth" << endl;
+#ifdef HAVE_LIBLO
+
+ gui = RosegardenGUIApp::self()->getPluginGUIManager()->hasGUI
+ (instrument->getId(), Instrument::SYNTH_PLUGIN_POSITION);
+ RG_DEBUG << "AudioFaderBox::slotSetInstrument(" << instrument->getId() << "): has gui = " << gui << endl;
+#endif
+
+ m_synthGUIButton->setEnabled(gui);
+ }
+ }
+}
+
+bool
+AudioFaderBox::owns(const QObject *object)
+{
+ return (object &&
+ ((object->parent() == this) ||
+ (object->parent() && (object->parent()->parent() == this))));
+}
+
+void
+AudioFaderBox::setAudioChannels(int channels)
+{
+ m_isStereo = (channels > 1);
+
+ switch (channels) {
+ case 1:
+ if (m_stereoButton)
+ m_stereoButton->setPixmap(m_monoPixmap);
+ m_isStereo = false;
+ break;
+
+ case 2:
+ if (m_stereoButton)
+ m_stereoButton->setPixmap(m_stereoPixmap);
+ m_isStereo = true;
+ break;
+ default:
+ RG_DEBUG << "AudioFaderBox::setAudioChannels - "
+ << "unsupported channel numbers (" << channels
+ << ")" << endl;
+ return ;
+ }
+
+ if (m_audioInput)
+ m_audioInput->slotRepopulate();
+ if (m_audioOutput)
+ m_audioOutput->slotRepopulate();
+}
+
+void
+AudioFaderBox::slotChannelStateChanged()
+{
+ if (m_isStereo) {
+ setAudioChannels(1);
+ emit audioChannelsChanged(1);
+ } else {
+ setAudioChannels(2);
+ emit audioChannelsChanged(2);
+ }
+}
+
+}
+#include "AudioFaderBox.moc"