/[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 467 by capela, Tue Mar 15 23:54:14 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 50  qsamplerChannel::qsamplerChannel ( qsamp Line 50  qsamplerChannel::qsamplerChannel ( qsamp
50  //  m_sInstrumentFile   = m_sInstrumentName;  //  m_sInstrumentFile   = m_sInstrumentName;
51          m_iInstrumentNr     = -1;          m_iInstrumentNr     = -1;
52          m_iInstrumentStatus = -1;          m_iInstrumentStatus = -1;
53          m_sMidiDriver       = "Alsa";   // DEPRECATED.          m_sMidiDriver       = "ALSA";
54          m_iMidiDevice       = -1;          m_iMidiDevice       = -1;
55          m_iMidiPort         = -1;          m_iMidiPort         = -1;
56          m_iMidiChannel      = -1;          m_iMidiChannel      = -1;
57          m_sAudioDriver      = "Alsa";   // DEPRECATED.          m_sAudioDriver      = "ALSA";
58          m_iAudioDevice      = -1;          m_iAudioDevice      = -1;
59          m_fVolume           = 0.0;          m_fVolume           = 0.0;
60            m_bMute             = false;
61            m_bSolo             = false;
62  }  }
63    
64  // Default destructor.  // Default destructor.
# Line 66  qsamplerChannel::~qsamplerChannel (void) Line 67  qsamplerChannel::~qsamplerChannel (void)
67  }  }
68    
69    
70    // Main application form accessor.
71    qsamplerMainForm *qsamplerChannel::mainForm(void) const
72    {
73            return m_pMainForm;
74    }
75    
76    
77  // The global options settings delegated property.  // The global options settings delegated property.
78  qsamplerOptions *qsamplerChannel::options (void)  qsamplerOptions *qsamplerChannel::options (void) const
79  {  {
80          if (m_pMainForm == NULL)          if (m_pMainForm == NULL)
81                  return NULL;                  return NULL;
# Line 77  qsamplerOptions *qsamplerChannel::option Line 85  qsamplerOptions *qsamplerChannel::option
85    
86    
87  // The client descriptor delegated property.  // The client descriptor delegated property.
88  lscp_client_t *qsamplerChannel::client (void)  lscp_client_t *qsamplerChannel::client (void) const
89  {  {
90          if (m_pMainForm == NULL)          if (m_pMainForm == NULL)
91                  return NULL;                  return NULL;
# Line 124  bool qsamplerChannel::removeChannel (voi Line 132  bool qsamplerChannel::removeChannel (voi
132                          m_iChannelID = -1;                          m_iChannelID = -1;
133                  }                  }
134          }          }
135            
136          // Return whether we've removed the channel...          // Return whether we've removed the channel...
137          return (m_iChannelID < 0);          return (m_iChannelID < 0);
138  }  }
139    
140    
141  // Channel-ID (aka Sammpler-Channel) accessors.  // Channel-ID (aka Sammpler-Channel) accessors.
142  int qsamplerChannel::channelID (void)  int qsamplerChannel::channelID (void) const
143  {  {
144          return m_iChannelID;          return m_iChannelID;
145  }  }
# Line 143  void qsamplerChannel::setChannelID ( int Line 151  void qsamplerChannel::setChannelID ( int
151    
152    
153  // Readable channel name.  // Readable channel name.
154  QString qsamplerChannel::channelName (void)  QString qsamplerChannel::channelName (void) const
155  {  {
156          return (m_iChannelID < 0 ? QObject::tr("New Channel") : QObject::tr("Channel %1").arg(m_iChannelID));          return (m_iChannelID < 0 ? QObject::tr("New Channel") : QObject::tr("Channel %1").arg(m_iChannelID));
157  }  }
158    
159    
160  // Engine name accessors.  // Engine name accessors.
161  QString& qsamplerChannel::engineName (void)  const QString& qsamplerChannel::engineName (void) const
162  {  {
163          return m_sEngineName;          return m_sEngineName;
164  }  }
# Line 161  bool qsamplerChannel::loadEngine ( const Line 169  bool qsamplerChannel::loadEngine ( const
169                  return false;                  return false;
170          if (m_iInstrumentStatus == 100 && m_sEngineName == sEngineName)          if (m_iInstrumentStatus == 100 && m_sEngineName == sEngineName)
171                  return true;                  return true;
172                    
173          if (::lscp_load_engine(client(), sEngineName.latin1(), m_iChannelID) != LSCP_OK) {          if (::lscp_load_engine(client(), sEngineName.latin1(), m_iChannelID) != LSCP_OK) {
174                  appendMessagesClient("lscp_load_engine");                  appendMessagesClient("lscp_load_engine");
175                  return false;                  return false;
# Line 174  bool qsamplerChannel::loadEngine ( const Line 182  bool qsamplerChannel::loadEngine ( const
182    
183    
184  // Instrument filename accessor.  // Instrument filename accessor.
185  QString& qsamplerChannel::instrumentFile (void)  const QString& qsamplerChannel::instrumentFile (void) const
186  {  {
187          return m_sInstrumentFile;          return m_sInstrumentFile;
188  }  }
189    
190  // Instrument index accessor.  // Instrument index accessor.
191  int qsamplerChannel::instrumentNr (void)  int qsamplerChannel::instrumentNr (void) const
192  {  {
193          return m_iInstrumentNr;          return m_iInstrumentNr;
194  }  }
195    
196  // Instrument name accessor.  // Instrument name accessor.
197  QString& qsamplerChannel::instrumentName (void)  const QString& qsamplerChannel::instrumentName (void) const
198  {  {
199          return m_sInstrumentName;          return m_sInstrumentName;
200  }  }
201    
202  // Instrument status accessor.  // Instrument status accessor.
203  int qsamplerChannel::instrumentStatus (void)  int qsamplerChannel::instrumentStatus (void) const
204  {  {
205          return m_iInstrumentStatus;          return m_iInstrumentStatus;
206  }  }
# Line 214  bool qsamplerChannel::loadInstrument ( c Line 222  bool qsamplerChannel::loadInstrument ( c
222    
223          appendMessages(QObject::tr("Instrument: \"%1\" (%2).")          appendMessages(QObject::tr("Instrument: \"%1\" (%2).")
224                  .arg(sInstrumentFile).arg(iInstrumentNr));                  .arg(sInstrumentFile).arg(iInstrumentNr));
225                    
226          return setInstrument(sInstrumentFile, iInstrumentNr);          return setInstrument(sInstrumentFile, iInstrumentNr);
227  }  }
228    
# Line 236  bool qsamplerChannel::setInstrument ( co Line 244  bool qsamplerChannel::setInstrument ( co
244    
245    
246  // MIDI driver type accessors (DEPRECATED).  // MIDI driver type accessors (DEPRECATED).
247  QString& qsamplerChannel::midiDriver (void)  const QString& qsamplerChannel::midiDriver (void) const
248  {  {
249          return m_sMidiDriver;          return m_sMidiDriver;
250  }  }
# Line 261  bool qsamplerChannel::setMidiDriver ( co Line 269  bool qsamplerChannel::setMidiDriver ( co
269    
270    
271  // MIDI device accessors.  // MIDI device accessors.
272  int qsamplerChannel::midiDevice (void)  int qsamplerChannel::midiDevice (void) const
273  {  {
274          return m_iMidiDevice;          return m_iMidiDevice;
275  }  }
# Line 286  bool qsamplerChannel::setMidiDevice ( in Line 294  bool qsamplerChannel::setMidiDevice ( in
294    
295    
296  // MIDI port number accessor.  // MIDI port number accessor.
297  int qsamplerChannel::midiPort (void)  int qsamplerChannel::midiPort (void) const
298  {  {
299          return m_iMidiPort;          return m_iMidiPort;
300  }  }
# Line 311  bool qsamplerChannel::setMidiPort ( int Line 319  bool qsamplerChannel::setMidiPort ( int
319    
320    
321  // MIDI channel accessor.  // MIDI channel accessor.
322  int qsamplerChannel::midiChannel (void)  int qsamplerChannel::midiChannel (void) const
323  {  {
324          return m_iMidiChannel;          return m_iMidiChannel;
325  }  }
# Line 336  bool qsamplerChannel::setMidiChannel ( i Line 344  bool qsamplerChannel::setMidiChannel ( i
344    
345    
346  // Audio device accessor.  // Audio device accessor.
347  int qsamplerChannel::audioDevice (void)  int qsamplerChannel::audioDevice (void) const
348  {  {
349          return m_iAudioDevice;          return m_iAudioDevice;
350  }  }
# Line 361  bool qsamplerChannel::setAudioDevice ( i Line 369  bool qsamplerChannel::setAudioDevice ( i
369    
370    
371  // Audio driver type accessors (DEPRECATED).  // Audio driver type accessors (DEPRECATED).
372  QString& qsamplerChannel::audioDriver (void)  const QString& qsamplerChannel::audioDriver (void) const
373  {  {
374          return m_sAudioDriver;          return m_sAudioDriver;
375  }  }
# Line 386  bool qsamplerChannel::setAudioDriver ( c Line 394  bool qsamplerChannel::setAudioDriver ( c
394    
395    
396  // Channel volume accessors.  // Channel volume accessors.
397  float qsamplerChannel::volume (void)  float qsamplerChannel::volume (void) const
398  {  {
399          return m_fVolume;          return m_fVolume;
400  }  }
# Line 410  bool qsamplerChannel::setVolume ( float Line 418  bool qsamplerChannel::setVolume ( float
418  }  }
419    
420    
421    // Sampler channel mute state.
422    bool qsamplerChannel::channelMute (void) const
423    {
424            return m_bMute;
425    }
426    
427    bool qsamplerChannel::setChannelMute ( bool bMute )
428    {
429            if (client() == NULL || m_iChannelID < 0)
430                    return false;
431            if (m_iInstrumentStatus == 100 && ((m_bMute && bMute) || (!m_bMute && !bMute)))
432                    return true;
433    
434    #ifdef CONFIG_MUTE_SOLO
435            if (::lscp_set_channel_mute(client(), m_iChannelID, bMute) != LSCP_OK) {
436                    appendMessagesClient("lscp_set_channel_mute");
437                    return false;
438            }
439            appendMessages(QObject::tr("Mute: %1.").arg((int) bMute));
440            m_bMute = bMute;
441            return true;
442    #else
443            return false;
444    #endif
445    }
446    
447    
448    // Sampler channel solo state.
449    bool qsamplerChannel::channelSolo (void) const
450    {
451            return m_bSolo;
452    }
453    
454    bool qsamplerChannel::setChannelSolo ( bool bSolo )
455    {
456            if (client() == NULL || m_iChannelID < 0)
457                    return false;
458            if (m_iInstrumentStatus == 100 && ((m_bSolo && bSolo) || (!m_bSolo && !bSolo)))
459                    return true;
460    
461    #ifdef CONFIG_MUTE_SOLO
462            if (::lscp_set_channel_solo(client(), m_iChannelID, bSolo) != LSCP_OK) {
463                    appendMessagesClient("lscp_set_channel_solo");
464                    return false;
465            }
466            appendMessages(QObject::tr("Solo: %1.").arg((int) bSolo));
467            m_bSolo = bSolo;
468            return true;
469    #else
470            return false;
471    #endif
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 458  bool qsamplerChannel::updateChannelInfo Line 554  bool qsamplerChannel::updateChannelInfo
554          m_iMidiChannel      = pChannelInfo->midi_channel;          m_iMidiChannel      = pChannelInfo->midi_channel;
555          m_iAudioDevice      = pChannelInfo->audio_device;          m_iAudioDevice      = pChannelInfo->audio_device;
556          m_fVolume           = pChannelInfo->volume;          m_fVolume           = pChannelInfo->volume;
557    #ifdef CONFIG_MUTE_SOLO
558            m_bMute             = pChannelInfo->mute;
559            m_bSolo             = pChannelInfo->solo;
560    #endif
561          // Some sanity checks.          // Some sanity checks.
562          if (m_sEngineName == "NONE" || m_sEngineName.isEmpty())          if (m_sEngineName == "NONE" || m_sEngineName.isEmpty())
563                  m_sEngineName = QString::null;                  m_sEngineName = QString::null;
# Line 465  bool qsamplerChannel::updateChannelInfo Line 565  bool qsamplerChannel::updateChannelInfo
565                  m_sInstrumentFile = QString::null;                  m_sInstrumentFile = QString::null;
566                  m_sInstrumentName = QString::null;                  m_sInstrumentName = QString::null;
567          }          }
568            
569          // FIXME: DEPRECATED...          // Time for device info grabbing...
570          lscp_device_info_t *pDeviceInfo;          lscp_device_info_t *pDeviceInfo;
571          const QString sNone = QObject::tr("(none)");          const QString sNone = QObject::tr("(none)");
572          // Audio device driver type.          // Audio device driver type.
# Line 486  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 513  bool qsamplerChannel::channelSetup ( QWi Line 620  bool qsamplerChannel::channelSetup ( QWi
620          bool bResult = false;          bool bResult = false;
621    
622          appendMessages(QObject::tr("setup..."));          appendMessages(QObject::tr("setup..."));
623            
624          qsamplerChannelForm *pChannelForm = new qsamplerChannelForm(pParent);          qsamplerChannelForm *pChannelForm = new qsamplerChannelForm(pParent);
625          if (pChannelForm) {          if (pChannelForm) {
626                  pChannelForm->setup(this);                  pChannelForm->setup(this);
# Line 526  bool qsamplerChannel::channelSetup ( QWi Line 633  bool qsamplerChannel::channelSetup ( QWi
633    
634    
635  // Redirected messages output methods.  // Redirected messages output methods.
636  void qsamplerChannel::appendMessages( const QString& s )  void qsamplerChannel::appendMessages( const QString& s ) const
637  {  {
638          if (m_pMainForm)          if (m_pMainForm)
639                  m_pMainForm->appendMessages(channelName() + ' ' + s);                  m_pMainForm->appendMessages(channelName() + ' ' + s);
640  }  }
641    
642  void qsamplerChannel::appendMessagesColor( const QString& s, const QString& c )  void qsamplerChannel::appendMessagesColor( const QString& s,
643            const QString& c ) const
644  {  {
645          if (m_pMainForm)          if (m_pMainForm)
646                  m_pMainForm->appendMessagesColor(channelName() + ' ' + s, c);                  m_pMainForm->appendMessagesColor(channelName() + ' ' + s, c);
647  }  }
648    
649  void qsamplerChannel::appendMessagesText( const QString& s )  void qsamplerChannel::appendMessagesText( const QString& s ) const
650  {  {
651          if (m_pMainForm)          if (m_pMainForm)
652                  m_pMainForm->appendMessagesText(channelName() + ' ' + s);                  m_pMainForm->appendMessagesText(channelName() + ' ' + s);
653  }  }
654    
655  void qsamplerChannel::appendMessagesError( const QString& s )  void qsamplerChannel::appendMessagesError( const QString& s ) const
656  {  {
657          if (m_pMainForm)          if (m_pMainForm)
658                  m_pMainForm->appendMessagesError(channelName() + "\n\n" + s);                  m_pMainForm->appendMessagesError(channelName() + "\n\n" + s);
659  }  }
660    
661  void qsamplerChannel::appendMessagesClient( const QString& s )  void qsamplerChannel::appendMessagesClient( const QString& s ) const
662  {  {
663          if (m_pMainForm)          if (m_pMainForm)
664                  m_pMainForm->appendMessagesClient(channelName() + ' ' + s);                  m_pMainForm->appendMessagesClient(channelName() + ' ' + s);
# Line 594  QStringList qsamplerChannel::getInstrume Line 702  QStringList qsamplerChannel::getInstrume
702          if (isInstrumentFile(sInstrumentFile)) {          if (isInstrumentFile(sInstrumentFile)) {
703  #ifdef CONFIG_LIBGIG  #ifdef CONFIG_LIBGIG
704                  if (bInstrumentNames) {                  if (bInstrumentNames) {
705                          RIFF::File *pRiff = new RIFF::File(sInstrumentFile);                          RIFF::File *pRiff = new RIFF::File(sInstrumentFile.latin1());
706                          gig::File  *pGig  = new gig::File(pRiff);                          gig::File  *pGig  = new gig::File(pRiff);
707                          gig::Instrument *pInstrument = pGig->GetFirstInstrument();                          gig::Instrument *pInstrument = pGig->GetFirstInstrument();
708                          while (pInstrument) {                          while (pInstrument) {
# Line 625  QString qsamplerChannel::getInstrumentNa Line 733  QString qsamplerChannel::getInstrumentNa
733                  sInstrumentName = QFileInfo(sInstrumentFile).fileName();                  sInstrumentName = QFileInfo(sInstrumentFile).fileName();
734  #ifdef CONFIG_LIBGIG  #ifdef CONFIG_LIBGIG
735                  if (bInstrumentNames) {                  if (bInstrumentNames) {
736                          RIFF::File *pRiff = new RIFF::File(sInstrumentFile);                          RIFF::File *pRiff = new RIFF::File(sInstrumentFile.latin1());
737                          gig::File  *pGig  = new gig::File(pRiff);                          gig::File  *pGig  = new gig::File(pRiff);
738                          int iIndex = 0;                          int iIndex = 0;
739                          gig::Instrument *pInstrument = pGig->GetFirstInstrument();                          gig::Instrument *pInstrument = pGig->GetFirstInstrument();
# Line 661  QString qsamplerChannel::noInstrumentNam Line 769  QString qsamplerChannel::noInstrumentNam
769          return QObject::tr("(No instrument)");          return QObject::tr("(No instrument)");
770  }  }
771    
772    QString qsamplerChannel::loadingInstrument (void) {
773            return QObject::tr("(Loading instrument...)");
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.467  
changed lines
  Added in v.824

  ViewVC Help
Powered by ViewVC