/[svn]/qsampler/trunk/src/qsamplerChannel.cpp
ViewVC logotype

Diff of /qsampler/trunk/src/qsamplerChannel.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 751 by capela, Fri Aug 19 17:10:16 2005 UTC revision 824 by capela, Fri Dec 23 01:40:56 2005 UTC
# Line 19  Line 19 
19    
20  *****************************************************************************/  *****************************************************************************/
21    
22    #include "qsamplerAbout.h"
23  #include "qsamplerChannel.h"  #include "qsamplerChannel.h"
24    
25  #include "qsamplerMainForm.h"  #include "qsamplerMainForm.h"
26  #include "qsamplerChannelForm.h"  #include "qsamplerChannelForm.h"
27    
 #include "config.h"  
   
28  #include <qfileinfo.h>  #include <qfileinfo.h>
29    #include <qcombobox.h>
30    
31  #ifdef CONFIG_LIBGIG  #ifdef CONFIG_LIBGIG
32  #include "gig.h"  #include "gig.h"
33  #endif  #endif
34    
35  #define QSAMPLER_INSTRUMENT_MAX 8  #define QSAMPLER_INSTRUMENT_MAX 100
36    
37    
38  //-------------------------------------------------------------------------  //-------------------------------------------------------------------------
# Line 472  bool qsamplerChannel::setChannelSolo ( b Line 472  bool qsamplerChannel::setChannelSolo ( b
472  }  }
473    
474    
475    // Audio routing accessors.
476    int qsamplerChannel::audioChannel ( int iAudioOut ) const
477    {
478            return m_audioRouting[iAudioOut];
479    }
480    
481    bool qsamplerChannel::setAudioChannel ( int iAudioOut, int iAudioIn )
482    {
483            if (client() == NULL || m_iChannelID < 0)
484                    return false;
485            if (m_iInstrumentStatus == 100 &&
486                            m_audioRouting[iAudioOut] == iAudioIn)
487                    return true;
488    
489            if (::lscp_set_channel_audio_channel(client(),
490                            m_iChannelID, iAudioOut, iAudioIn) != LSCP_OK) {
491                    appendMessagesClient("lscp_set_channel_audio_channel");
492                    return false;
493            }
494    
495            appendMessages(QObject::tr("Audio Channel: %1 -> %2.")
496                    .arg(iAudioOut).arg(iAudioIn));
497    
498            m_audioRouting[iAudioOut] = iAudioIn;
499            return true;
500    }
501    
502    // The audio routing map itself.
503    const qsamplerChannelRoutingMap& qsamplerChannel::audioRouting (void) const
504    {
505            return m_audioRouting;
506    }
507    
508    
509  // Istrument name remapper.  // Istrument name remapper.
510  void qsamplerChannel::updateInstrumentName (void)  void qsamplerChannel::updateInstrumentName (void)
511  {  {
# Line 552  bool qsamplerChannel::updateChannelInfo Line 586  bool qsamplerChannel::updateChannelInfo
586                  m_sMidiDriver = pDeviceInfo->driver;                  m_sMidiDriver = pDeviceInfo->driver;
587          }          }
588    
589            // Set the audio routing map.
590            m_audioRouting.clear();
591            char **ppszRouting = pChannelInfo->audio_routing;
592            for (int i = 0; ppszRouting && ppszRouting[i]; i++) {
593                    m_audioRouting[i] = ::atoi(ppszRouting[i]);
594            }
595    
596          return true;          return true;
597  }  }
598    
# Line 733  QString qsamplerChannel::loadingInstrume Line 774  QString qsamplerChannel::loadingInstrume
774  }  }
775    
776    
777    
778    //-------------------------------------------------------------------------
779    // qsamplerChannelRoutingTable - Channel routing table.
780    //
781    
782    // Constructor.
783    qsamplerChannelRoutingTable::qsamplerChannelRoutingTable (
784            QWidget *pParent, const char *pszName )
785            : QTable(pParent, pszName)
786    {
787            // Set fixed number of columns.
788            QTable::setNumCols(2);
789            QTable::setShowGrid(false);
790            QTable::setSorting(false);
791            QTable::setFocusStyle(QTable::FollowStyle);
792            QTable::setSelectionMode(QTable::NoSelection);
793            // No vertical header.
794            QTable::verticalHeader()->hide();
795            QTable::setLeftMargin(0);
796            // Initialize the fixed table column headings.
797            QHeader *pHeader = QTable::horizontalHeader();
798            pHeader->setLabel(0, tr("Sampler Channel"));
799            pHeader->setLabel(1, tr("Device Channel"));
800            // Set read-onlyness of each column
801            QTable::setColumnReadOnly(0, true);
802    //      QTable::setColumnReadOnly(1, false); -- of course not.
803            QTable::setColumnStretchable(1, true);
804    }
805    
806    // Default destructor.
807    qsamplerChannelRoutingTable::~qsamplerChannelRoutingTable (void)
808    {
809    }
810    
811    
812    // Routing map table renderer.
813    void qsamplerChannelRoutingTable::refresh ( qsamplerDevice *pDevice,
814            const qsamplerChannelRoutingMap& routing )
815    {
816            if (pDevice == NULL)
817                    return;
818    
819            // Always (re)start it empty.
820            QTable::setUpdatesEnabled(false);
821            QTable::setNumRows(0);
822    
823            // The common device port item list.
824            QStringList opts;
825            qsamplerDevicePortList& ports = pDevice->ports();
826            qsamplerDevicePort *pPort;
827            for (pPort = ports.first(); pPort; pPort = ports.next()) {
828                    opts.append(pDevice->deviceTypeName()
829                            + ' ' + pDevice->driverName()
830                            + ' ' + pPort->portName());
831            }
832    
833            // Those items shall have a proper pixmap...
834            QPixmap pmChannel = QPixmap::fromMimeSource("qsamplerChannel.png");
835            QPixmap pmDevice;
836            switch (pDevice->deviceType()) {
837            case qsamplerDevice::Audio:
838                    pmDevice = QPixmap::fromMimeSource("audio2.png");
839                    break;
840            case qsamplerDevice::Midi:
841                    pmDevice = QPixmap::fromMimeSource("midi2.png");
842                    break;
843            case qsamplerDevice::None:
844                    break;
845            }
846    
847            // Fill the routing table...
848            QTable::insertRows(0, routing.count());
849            int iRow = 0;
850            qsamplerChannelRoutingMap::ConstIterator iter;
851            for (iter = routing.begin(); iter != routing.end(); ++iter) {
852                    QTable::setPixmap(iRow, 0, pmChannel);
853                    QTable::setText(iRow, 0, pDevice->deviceTypeName()
854                            + ' ' + QString::number(iter.key()));
855                    qsamplerChannelRoutingComboBox *pComboItem =
856                            new qsamplerChannelRoutingComboBox(this, opts, pmDevice);
857                    pComboItem->setCurrentItem(iter.data());
858                    QTable::setItem(iRow, 1, pComboItem);
859                    ++iRow;
860            }
861    
862            // Adjust optimal column widths.
863            QTable::adjustColumn(0);
864            QTable::adjustColumn(1);
865    
866            QTable::setUpdatesEnabled(true);
867            QTable::updateContents();
868    }
869    
870    
871    // Commit any pending editing.
872    void qsamplerChannelRoutingTable::flush (void)
873    {
874            if (QTable::isEditing())
875                QTable::endEdit(QTable::currEditRow(), QTable::currEditCol(), true, true);
876    }
877    
878    
879    //-------------------------------------------------------------------------
880    // qsamplerChannelRoutingComboBox - Custom combo box for routing table.
881    //
882    
883    // Constructor.
884    qsamplerChannelRoutingComboBox::qsamplerChannelRoutingComboBox (
885            QTable *pTable, const QStringList& list, const QPixmap& pixmap )
886            : QTableItem(pTable, QTableItem::WhenCurrent, QString::null, pixmap),
887            m_list(list)
888    {
889            m_iCurrentItem = 0;
890    }
891    
892    // Public accessors.
893    void qsamplerChannelRoutingComboBox::setCurrentItem ( int iCurrentItem )
894    {
895            m_iCurrentItem = iCurrentItem;
896    
897            QTableItem::setText(m_list[iCurrentItem]);
898    }
899    
900    int qsamplerChannelRoutingComboBox::currentItem (void) const
901    {
902            return m_iCurrentItem;
903    }
904    
905    // Virtual implemetations.
906    QWidget *qsamplerChannelRoutingComboBox::createEditor (void) const
907    {
908            QComboBox *pComboBox = new QComboBox(QTableItem::table()->viewport());
909            QObject::connect(pComboBox, SIGNAL(activated(int)),
910                    QTableItem::table(), SLOT(doValueChanged()));
911            for (QStringList::ConstIterator iter = m_list.begin();
912                            iter != m_list.end(); iter++) {
913                    pComboBox->insertItem(QTableItem::pixmap(), *iter);
914            }
915            pComboBox->setCurrentItem(m_iCurrentItem);
916            return pComboBox;
917    }
918    
919    void qsamplerChannelRoutingComboBox::setContentFromEditor ( QWidget *pWidget )
920    {
921            if (pWidget->inherits("QComboBox")) {
922                    QComboBox *pComboBox = (QComboBox *) pWidget;
923                    m_iCurrentItem = pComboBox->currentItem();
924                    QTableItem::setText(pComboBox->currentText());
925            }
926            else QTableItem::setContentFromEditor(pWidget);
927    }
928    
929    
930  // end of qsamplerChannel.cpp  // end of qsamplerChannel.cpp

Legend:
Removed from v.751  
changed lines
  Added in v.824

  ViewVC Help
Powered by ViewVC