--- qsampler/trunk/src/qsamplerChannelStrip.cpp 2007/12/06 09:35:33 1558 +++ qsampler/trunk/src/qsamplerChannelStrip.cpp 2010/03/29 17:00:30 2074 @@ -1,8 +1,8 @@ // qsamplerChannelStrip.cpp // /**************************************************************************** - Copyright (C) 2004-2007, rncbc aka Rui Nuno Capela. All rights reserved. - Copyright (C) 2007, Christian Schoenebeck + Copyright (C) 2004-2010, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2007, 2008 Christian Schoenebeck This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -25,9 +25,14 @@ #include "qsamplerMainForm.h" +#include "qsamplerChannelFxForm.h" + +#include #include +#include #include + // Channel status/usage usage limit control. #define QSAMPLER_ERROR_LIMIT 3 @@ -51,6 +56,11 @@ // QSampler::ChannelStrip -- Channel strip form implementation. // +// MIDI activity pixmap common resources. +int ChannelStrip::g_iMidiActivityRefCount = 0; +QPixmap *ChannelStrip::g_pMidiActivityLedOn = NULL; +QPixmap *ChannelStrip::g_pMidiActivityLedOff = NULL; + // Channel strip activation/selection. ChannelStrip *ChannelStrip::g_pSelectedStrip = NULL; @@ -64,6 +74,25 @@ m_iDirtyChange = 0; m_iErrorCount = 0; + if (++g_iMidiActivityRefCount == 1) { + g_pMidiActivityLedOn = new QPixmap(":/images/ledon1.png"); + g_pMidiActivityLedOff = new QPixmap(":/images/ledoff1.png"); + } + + m_ui.MidiActivityLabel->setPixmap(*g_pMidiActivityLedOff); + +#ifndef CONFIG_EVENT_CHANNEL_MIDI + m_ui.MidiActivityLabel->setToolTip("MIDI activity (disabled)"); +#endif + + m_pMidiActivityTimer = new QTimer(this); + m_pMidiActivityTimer->setSingleShot(true); + + QObject::connect(m_pMidiActivityTimer, + SIGNAL(timeout()), + SLOT(midiActivityLedOff()) + ); + // Try to restore normal window positioning. adjustSize(); @@ -85,6 +114,9 @@ QObject::connect(m_ui.ChannelEditPushButton, SIGNAL(clicked()), SLOT(channelEdit())); + QObject::connect(m_ui.FxPushButton, + SIGNAL(clicked()), + SLOT(channelFxEdit())); setSelected(false); } @@ -98,6 +130,15 @@ if (m_pChannel) delete m_pChannel; m_pChannel = NULL; + + if (--g_iMidiActivityRefCount == 0) { + if (g_pMidiActivityLedOn) + delete g_pMidiActivityLedOn; + g_pMidiActivityLedOn = NULL; + if (g_pMidiActivityLedOff) + delete g_pMidiActivityLedOff; + g_pMidiActivityLedOff = NULL; + } } @@ -207,12 +248,13 @@ m_ui.MidiPortChannelTextLabel->setPalette(pal); pal.setColor(QPalette::Foreground, Qt::green); if (bDisplayEffect) { - QPixmap pm(":/icons/displaybg1.png"); + QPixmap pm(":/images/displaybg1.png"); pal.setBrush(QPalette::Background, QBrush(pm)); } else { pal.setColor(QPalette::Background, Qt::black); } m_ui.ChannelInfoFrame->setPalette(pal); + m_ui.InstrumentNameTextLabel->setPalette(pal); m_ui.StreamVoiceCountTextLabel->setPalette(pal); } @@ -284,6 +326,33 @@ m_pChannel->editChannel(); } +bool ChannelStrip::channelFxEdit (void) +{ + MainForm *pMainForm = MainForm::getInstance(); + if (!pMainForm || !channel()) + return false; + + pMainForm->appendMessages(QObject::tr("channel fx sends...")); + + bool bResult = false; + +#if CONFIG_FXSEND + ChannelFxForm *pChannelFxForm = + new ChannelFxForm(channel(), parentWidget()); + if (pChannelFxForm) { + //pChannelForm->setup(this); + bResult = pChannelFxForm->exec(); + delete pChannelFxForm; + } +#else // CONFIG_FXSEND + QMessageBox::critical(this, + QSAMPLER_TITLE ": " + tr("Unavailable"), + tr("Sorry, QSampler was built without FX send support!\n\n" + "(Make sure you have a recent liblscp when recompiling QSampler)")); +#endif // CONFIG_FXSEND + + return bResult; +} // Channel reset slot. bool ChannelStrip::channelReset (void) @@ -420,12 +489,15 @@ // Mute/Solo button state coloring... bool bMute = m_pChannel->channelMute(); const QColor& rgbButton = pal.color(QPalette::Button); + const QColor& rgbButtonText = pal.color(QPalette::ButtonText); pal.setColor(QPalette::Foreground, rgbFore); pal.setColor(QPalette::Button, bMute ? Qt::yellow : rgbButton); + pal.setColor(QPalette::ButtonText, bMute ? Qt::darkYellow : rgbButtonText); m_ui.ChannelMutePushButton->setPalette(pal); m_ui.ChannelMutePushButton->setDown(bMute); bool bSolo = m_pChannel->channelSolo(); pal.setColor(QPalette::Button, bSolo ? Qt::cyan : rgbButton); + pal.setColor(QPalette::ButtonText, bSolo ? Qt::darkCyan : rgbButtonText); m_ui.ChannelSoloPushButton->setPalette(pal); m_ui.ChannelSoloPushButton->setDown(bSolo); #else @@ -509,6 +581,19 @@ } +void ChannelStrip::midiActivityLedOn (void) +{ + m_ui.MidiActivityLabel->setPixmap(*g_pMidiActivityLedOn); + m_pMidiActivityTimer->start(100); +} + + +void ChannelStrip::midiActivityLedOff (void) +{ + m_ui.MidiActivityLabel->setPixmap(*g_pMidiActivityLedOff); +} + + // Error count hackish accessors. void ChannelStrip::resetErrorCount (void) {