/[svn]/qsampler/trunk/src/qsamplerMainForm.ui.h
ViewVC logotype

Diff of /qsampler/trunk/src/qsamplerMainForm.ui.h

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

revision 150 by capela, Sat Jun 26 17:40:38 2004 UTC revision 382 by capela, Mon Feb 14 15:42:38 2005 UTC
# Line 2  Line 2 
2  //  //
3  // ui.h extension file, included from the uic-generated form implementation.  // ui.h extension file, included from the uic-generated form implementation.
4  /****************************************************************************  /****************************************************************************
5     Copyright (C) 2004, rncbc aka Rui Nuno Capela. All rights reserved.     Copyright (C) 2004-2005, rncbc aka Rui Nuno Capela. All rights reserved.
6    
7     This program is free software; you can redistribute it and/or     This program is free software; you can redistribute it and/or
8     modify it under the terms of the GNU General Public License     modify it under the terms of the GNU General Public License
# Line 36  Line 36 
36    
37  #include "qsamplerAbout.h"  #include "qsamplerAbout.h"
38  #include "qsamplerOptions.h"  #include "qsamplerOptions.h"
39    #include "qsamplerChannel.h"
40  #include "qsamplerMessages.h"  #include "qsamplerMessages.h"
41    
42  #include "qsamplerChannelStrip.h"  #include "qsamplerChannelStrip.h"
# Line 43  Line 44 
44    
45  #include "config.h"  #include "config.h"
46    
47    #ifdef HAVE_SIGNAL_H
48    #include <signal.h>
49    #endif
50    
51  // Timer constant stuff.  // Timer constant stuff.
52  #define QSAMPLER_TIMER_MSECS    200  #define QSAMPLER_TIMER_MSECS    200
# Line 103  void qsamplerMainForm::init (void) Line 107  void qsamplerMainForm::init (void)
107      m_pMessages = NULL;      m_pMessages = NULL;
108    
109      // We'll start clean.      // We'll start clean.
110      m_iUntitled = 0;      m_iUntitled    = 0;
111      m_iDirtyCount = 0;      m_iDirtyCount  = 0;
112        m_iChangeCount = 0;
113    
114      m_pServer = NULL;      m_pServer = NULL;
115      m_pClient = NULL;      m_pClient = NULL;
# Line 114  void qsamplerMainForm::init (void) Line 119  void qsamplerMainForm::init (void)
119    
120      m_iTimerSlot = 0;      m_iTimerSlot = 0;
121    
122    #ifdef HAVE_SIGNAL_H
123            // Set to ignore any fatal "Broken pipe" signals.
124            ::signal(SIGPIPE, SIG_IGN);
125    #endif
126    
127      // Make it an MDI workspace.      // Make it an MDI workspace.
128      m_pWorkspace = new QWorkspace(this);      m_pWorkspace = new QWorkspace(this);
129      m_pWorkspace->setScrollBarsEnabled(true);      m_pWorkspace->setScrollBarsEnabled(true);
# Line 483  bool qsamplerMainForm::closeSession ( bo Line 493  bool qsamplerMainForm::closeSession ( bo
493          m_pWorkspace->setUpdatesEnabled(false);          m_pWorkspace->setUpdatesEnabled(false);
494          QWidgetList wlist = m_pWorkspace->windowList();          QWidgetList wlist = m_pWorkspace->windowList();
495          for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {          for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {
496              qsamplerChannelStrip *pChannel = (qsamplerChannelStrip *) wlist.at(iChannel);              qsamplerChannelStrip *pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel);
497              if (bForce && ::lscp_remove_channel(m_pClient, pChannel->channelID()) != LSCP_OK)              if (pChannelStrip) {
498                  appendMessagesClient("lscp_remove_channel");                  qsamplerChannel *pChannel = pChannelStrip->channel();
499              delete pChannel;                  if (bForce && pChannel)
500                        pChannel->removeChannel();
501                    delete pChannelStrip;
502                }
503          }          }
504          m_pWorkspace->setUpdatesEnabled(true);          m_pWorkspace->setUpdatesEnabled(true);
505          // We're now clean, for sure.          // We're now clean, for sure.
# Line 539  bool qsamplerMainForm::loadSessionFile ( Line 552  bool qsamplerMainForm::loadSessionFile (
552          appendMessagesError(tr("Some setttings could not be loaded\nfrom \"%1\" session file.\n\nSorry.").arg(sFilename));          appendMessagesError(tr("Some setttings could not be loaded\nfrom \"%1\" session file.\n\nSorry.").arg(sFilename));
553    
554      // Now we'll try to create the whole GUI session.      // Now we'll try to create the whole GUI session.
555      int iChannels = ::lscp_get_channels(m_pClient);      int *piChannelIDs = ::lscp_list_channels(m_pClient);
556      if (iChannels < 0) {      if (piChannelIDs == NULL) {
557          appendMessagesClient("lscp_get_channels");          appendMessagesClient("lscp_list_channels");
558          appendMessagesError(tr("Could not get current number of channels.\n\nSorry."));          appendMessagesError(tr("Could not get current list of channels.\n\nSorry."));
559      }      } else {
560                        // Try to (re)create each channel.
561      // Try to (re)create each channel.                  m_pWorkspace->setUpdatesEnabled(false);
562      m_pWorkspace->setUpdatesEnabled(false);                  for (int iChannel = 0; piChannelIDs[iChannel] >= 0; iChannel++) {
563      for (int iChannelID = 0; iChannelID < iChannels; iChannelID++) {                          createChannelStrip(new qsamplerChannel(this, piChannelIDs[iChannel]));
564          createChannel(iChannelID, false);                          QApplication::eventLoop()->processEvents(QEventLoop::ExcludeUserInput);
565          QApplication::eventLoop()->processEvents(QEventLoop::ExcludeUserInput);                  }
566      }                  m_pWorkspace->setUpdatesEnabled(true);
567      m_pWorkspace->setUpdatesEnabled(true);          }
568    
569      // Save as default session directory.      // Save as default session directory.
570      if (m_pOptions)      if (m_pOptions)
# Line 562  bool qsamplerMainForm::loadSessionFile ( Line 575  bool qsamplerMainForm::loadSessionFile (
575      m_sFilename = sFilename;      m_sFilename = sFilename;
576      updateRecentFiles(sFilename);      updateRecentFiles(sFilename);
577      appendMessages(tr("Open session: \"%1\".").arg(sessionName(m_sFilename)));      appendMessages(tr("Open session: \"%1\".").arg(sessionName(m_sFilename)));
578        
579        // Make that an overall update.
580        m_iChangeCount++;
581      stabilizeForm();      stabilizeForm();
582      return true;      return true;
583  }  }
# Line 595  bool qsamplerMainForm::saveSessionFile ( Line 611  bool qsamplerMainForm::saveSessionFile (
611      ts << endl;      ts << endl;
612      QWidgetList wlist = m_pWorkspace->windowList();      QWidgetList wlist = m_pWorkspace->windowList();
613      for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {      for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {
614          qsamplerChannelStrip *pChannel = (qsamplerChannelStrip *) wlist.at(iChannel);          qsamplerChannelStrip *pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel);
615          int iChannelID = pChannel->channelID();          if (pChannelStrip) {
616          ts << "# " << pChannel->caption() << endl;              qsamplerChannel *pChannel = pChannelStrip->channel();
617          ts << "ADD CHANNEL" << endl;              if (pChannel) {
618          ts << "SET CHANNEL AUDIO_OUTPUT_TYPE " << iChannelID << " " << pChannel->audioDriver() << endl;                  int iChannelID = pChannel->channelID();
619          ts << "SET CHANNEL MIDI_INPUT_TYPE " << iChannelID << " " << pChannel->midiDriver() << endl;                  ts << "# " << pChannelStrip->caption() << endl;
620      //  ts << "SET CHANNEL MIDI_INPUT_PORT " << iChannelID << " " << pChannel->midiPort() << endl;                  ts << "ADD CHANNEL" << endl;
621          ts << "SET CHANNEL MIDI_INPUT_CHANNEL " << iChannelID << " " << pChannel->midiChannel() << endl;                  ts << "SET CHANNEL AUDIO_OUTPUT_TYPE " << iChannelID << " " << pChannel->audioDriver() << endl;
622          ts << "LOAD ENGINE " << pChannel->engineName() << " " << iChannelID << endl;                  ts << "SET CHANNEL MIDI_INPUT_TYPE " << iChannelID << " " << pChannel->midiDriver() << endl;
623          ts << "LOAD INSTRUMENT NON_MODAL '" << pChannel->instrumentFile() << "' " << pChannel->instrumentNr() << " " << iChannelID << endl;                  ts << "SET CHANNEL MIDI_INPUT_PORT " << iChannelID << " " << pChannel->midiPort() << endl;
624          ts << "SET CHANNEL VOLUME " << iChannelID << " " << pChannel->volume() << endl;                  ts << "SET CHANNEL MIDI_INPUT_CHANNEL " << iChannelID << " ";
625          ts << endl;                  if (pChannel->midiChannel() == LSCP_MIDI_CHANNEL_ALL)
626                        ts << "ALL";
627                    else
628                        ts << pChannel->midiChannel();
629                    ts << endl;
630                    ts << "LOAD ENGINE " << pChannel->engineName() << " " << iChannelID << endl;
631                    ts << "LOAD INSTRUMENT NON_MODAL '" << pChannel->instrumentFile() << "' " << pChannel->instrumentNr() << " " << iChannelID << endl;
632                    ts << "SET CHANNEL VOLUME " << iChannelID << " " << pChannel->volume() << endl;
633                    ts << endl;
634                }
635            }
636          // Try to keep it snappy :)          // Try to keep it snappy :)
637          QApplication::eventLoop()->processEvents(QEventLoop::ExcludeUserInput);          QApplication::eventLoop()->processEvents(QEventLoop::ExcludeUserInput);
638      }      }
# Line 678  void qsamplerMainForm::fileSaveAs (void) Line 704  void qsamplerMainForm::fileSaveAs (void)
704  }  }
705    
706    
707    // Reset the sampler instance.
708    void qsamplerMainForm::fileReset (void)
709    {
710        if (m_pClient == NULL)
711            return;
712    
713        // Ask user whether he/she want's an internal sampler reset...
714        if (QMessageBox::warning(this, tr("Warning"),
715            tr("Resetting the sampler instance will close\n"
716               "all device and channel configurations.\n\n"
717               "Please note that this operation may cause\n"
718               "temporary MIDI and Audio disruption\n\n"
719               "Do you want to reset the sampler engine now?"),
720            tr("Reset"), tr("Cancel")) > 0)
721            return;
722    
723        // Just do the reset, after closing down current session...
724        if (closeSession(true) && ::lscp_reset_sampler(m_pClient) != LSCP_OK) {
725            appendMessagesClient("lscp_reset_sampler");
726            appendMessagesError(tr("Could not reset sampler instance.\n\nSorry."));
727            return;
728        }
729    
730        // Log this.
731        appendMessages(tr("Sampler reset."));
732    }
733    
734    
735  // Restart the client/server instance.  // Restart the client/server instance.
736  void qsamplerMainForm::fileRestart (void)  void qsamplerMainForm::fileRestart (void)
737  {  {
# Line 725  void qsamplerMainForm::editAddChannel (v Line 779  void qsamplerMainForm::editAddChannel (v
779      if (m_pClient == NULL)      if (m_pClient == NULL)
780          return;          return;
781    
782      // Create the new sampler channel.      // Just create the channel instance...
783      int iChannelID = ::lscp_add_channel(m_pClient);      qsamplerChannel *pChannel = new qsamplerChannel(this);
784      if (iChannelID < 0) {      if (pChannel == NULL)
         appendMessagesClient("lscp_add_channel");  
         appendMessagesError(tr("Could not create the new channel.\n\nSorry."));  
785          return;          return;
     }  
786    
787      // Log this happening.      // Before we show it up, may be we'll
788      appendMessages(tr("Channel %1 created.").arg(iChannelID));      // better ask for some initial values?
789        if (!pChannel->channelSetup(this)) {
790      // Just create the channel strip with given id.          delete pChannel;
791      createChannel(iChannelID, true);          return;
792        }
793        
794        // And give it to the strip (will own the channel instance, if successful).
795        if (!createChannelStrip(pChannel)) {
796            delete pChannel;
797            return;
798        }
799    
800      // We'll be dirty, for sure...      // Make that an overall update.
801      m_iDirtyCount++;      m_iDirtyCount++;
802      // Stabilize form anyway.      m_iChangeCount++;
803      stabilizeForm();      stabilizeForm();
804  }  }
805    
# Line 752  void qsamplerMainForm::editRemoveChannel Line 810  void qsamplerMainForm::editRemoveChannel
810      if (m_pClient == NULL)      if (m_pClient == NULL)
811          return;          return;
812    
813      qsamplerChannelStrip *pChannel = activeChannel();      qsamplerChannelStrip *pChannelStrip = activeChannelStrip();
814        if (pChannelStrip == NULL)
815            return;
816            
817        qsamplerChannel *pChannel = pChannelStrip->channel();
818      if (pChannel == NULL)      if (pChannel == NULL)
819          return;          return;
820    
# Line 762  void qsamplerMainForm::editRemoveChannel Line 824  void qsamplerMainForm::editRemoveChannel
824              tr("About to remove channel:\n\n"              tr("About to remove channel:\n\n"
825                 "%1\n\n"                 "%1\n\n"
826                 "Are you sure?")                 "Are you sure?")
827                 .arg(pChannel->caption()),                 .arg(pChannelStrip->caption()),
828              tr("OK"), tr("Cancel")) > 0)              tr("OK"), tr("Cancel")) > 0)
829              return;              return;
830      }      }
831    
832      // Remove the existing sampler channel.      // Remove the existing sampler channel.
833      if (::lscp_remove_channel(m_pClient, pChannel->channelID()) != LSCP_OK) {      if (!pChannel->removeChannel())
         appendMessagesClient("lscp_remove_channel");  
         appendMessagesError(tr("Could not remove channel.\n\nSorry."));  
834          return;          return;
     }  
835    
     // Log this happening.  
     appendMessages(tr("Channel %1 removed.").arg(pChannel->channelID()));  
       
836      // Just delete the channel strip.      // Just delete the channel strip.
837      delete pChannel;      delete pChannelStrip;
838        
839      // Do we auto-arrange?      // Do we auto-arrange?
840      if (m_pOptions && m_pOptions->bAutoArrange)      if (m_pOptions && m_pOptions->bAutoArrange)
841          channelsArrange();          channelsArrange();
# Line 795  void qsamplerMainForm::editSetupChannel Line 852  void qsamplerMainForm::editSetupChannel
852      if (m_pClient == NULL)      if (m_pClient == NULL)
853          return;          return;
854    
855      qsamplerChannelStrip *pChannel = activeChannel();      qsamplerChannelStrip *pChannelStrip = activeChannelStrip();
856      if (pChannel == NULL)      if (pChannelStrip == NULL)
857          return;          return;
858    
859      // Just invoque the channel strip procedure.      // Just invoque the channel strip procedure.
860      pChannel->channelSetup();      pChannelStrip->channelSetup();
861  }  }
862    
863    
# Line 810  void qsamplerMainForm::editResetChannel Line 867  void qsamplerMainForm::editResetChannel
867      if (m_pClient == NULL)      if (m_pClient == NULL)
868          return;          return;
869    
870      qsamplerChannelStrip *pChannel = activeChannel();      qsamplerChannelStrip *pChannelStrip = activeChannelStrip();
871      if (pChannel == NULL)      if (pChannelStrip == NULL)
872          return;          return;
873    
874      // Remove the existing sampler channel.      qsamplerChannel *pChannel = pChannelStrip->channel();
875      if (::lscp_reset_channel(m_pClient, pChannel->channelID()) != LSCP_OK) {      if (pChannel == NULL)
         appendMessagesClient("lscp_reset_channel");  
         appendMessagesError(tr("Could not reset channel.\n\nSorry."));  
876          return;          return;
     }  
877    
878      // Log this.      // Reset the existing sampler channel.
879      appendMessages(tr("Channel %1 reset.").arg(pChannel->channelID()));      pChannel->resetChannel();
880    
881      // Refresh channel strip info.      // And force a deferred update.
882      pChannel->updateChannelInfo();      m_iChangeCount++;
883  }  }
884    
885    
# Line 886  void qsamplerMainForm::viewOptions (void Line 940  void qsamplerMainForm::viewOptions (void
940      qsamplerOptionsForm *pOptionsForm = new qsamplerOptionsForm(this);      qsamplerOptionsForm *pOptionsForm = new qsamplerOptionsForm(this);
941      if (pOptionsForm) {      if (pOptionsForm) {
942          // Check out some initial nullities(tm)...          // Check out some initial nullities(tm)...
943          qsamplerChannelStrip *pChannel = activeChannel();          qsamplerChannelStrip *pChannelStrip = activeChannelStrip();
944          if (m_pOptions->sDisplayFont.isEmpty() && pChannel)          if (m_pOptions->sDisplayFont.isEmpty() && pChannelStrip)
945              m_pOptions->sDisplayFont = pChannel->displayFont().toString();              m_pOptions->sDisplayFont = pChannelStrip->displayFont().toString();
946          if (m_pOptions->sMessagesFont.isEmpty() && m_pMessages)          if (m_pOptions->sMessagesFont.isEmpty() && m_pMessages)
947              m_pOptions->sMessagesFont = m_pMessages->messagesFont().toString();              m_pOptions->sMessagesFont = m_pMessages->messagesFont().toString();
948          // To track down deferred or immediate changes.          // To track down deferred or immediate changes.
# Line 898  void qsamplerMainForm::viewOptions (void Line 952  void qsamplerMainForm::viewOptions (void
952          bool    bOldServerStart     = m_pOptions->bServerStart;          bool    bOldServerStart     = m_pOptions->bServerStart;
953          QString sOldServerCmdLine   = m_pOptions->sServerCmdLine;          QString sOldServerCmdLine   = m_pOptions->sServerCmdLine;
954          QString sOldDisplayFont     = m_pOptions->sDisplayFont;          QString sOldDisplayFont     = m_pOptions->sDisplayFont;
955            bool    bOldDisplayEffect   = m_pOptions->bDisplayEffect;
956          int     iOldMaxVolume       = m_pOptions->iMaxVolume;          int     iOldMaxVolume       = m_pOptions->iMaxVolume;
957          QString sOldMessagesFont    = m_pOptions->sMessagesFont;          QString sOldMessagesFont    = m_pOptions->sMessagesFont;
958          bool    bOldStdoutCapture   = m_pOptions->bStdoutCapture;          bool    bOldStdoutCapture   = m_pOptions->bStdoutCapture;
959          int     bOldMessagesLimit   = m_pOptions->bMessagesLimit;          int     bOldMessagesLimit   = m_pOptions->bMessagesLimit;
960          int     iOldMessagesLimitLines = m_pOptions->iMessagesLimitLines;          int     iOldMessagesLimitLines = m_pOptions->iMessagesLimitLines;
961          bool    bOldCompletePath    = m_pOptions->bCompletePath;          bool    bOldCompletePath    = m_pOptions->bCompletePath;
962            bool    bOldInstrumentNames = m_pOptions->bInstrumentNames;
963          int     iOldMaxRecentFiles  = m_pOptions->iMaxRecentFiles;          int     iOldMaxRecentFiles  = m_pOptions->iMaxRecentFiles;
964          // Load the current setup settings.          // Load the current setup settings.
965          pOptionsForm->setup(m_pOptions);          pOptionsForm->setup(m_pOptions);
# Line 922  void qsamplerMainForm::viewOptions (void Line 978  void qsamplerMainForm::viewOptions (void
978                  (!bOldCompletePath &&  m_pOptions->bCompletePath) ||                  (!bOldCompletePath &&  m_pOptions->bCompletePath) ||
979                  (iOldMaxRecentFiles != m_pOptions->iMaxRecentFiles))                  (iOldMaxRecentFiles != m_pOptions->iMaxRecentFiles))
980                  updateRecentFilesMenu();                  updateRecentFilesMenu();
981                if (( bOldInstrumentNames && !m_pOptions->bInstrumentNames) ||
982                    (!bOldInstrumentNames &&  m_pOptions->bInstrumentNames))
983                    updateInstrumentNames();
984                if (( bOldDisplayEffect && !m_pOptions->bDisplayEffect) ||
985                    (!bOldDisplayEffect &&  m_pOptions->bDisplayEffect))
986                    updateDisplayEffect();
987              if (sOldDisplayFont != m_pOptions->sDisplayFont)              if (sOldDisplayFont != m_pOptions->sDisplayFont)
988                  updateDisplayFont();                  updateDisplayFont();
989              if (iOldMaxVolume != m_pOptions->iMaxVolume)              if (iOldMaxVolume != m_pOptions->iMaxVolume)
# Line 964  void qsamplerMainForm::channelsArrange ( Line 1026  void qsamplerMainForm::channelsArrange (
1026      m_pWorkspace->setUpdatesEnabled(false);      m_pWorkspace->setUpdatesEnabled(false);
1027      int y = 0;      int y = 0;
1028      for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {      for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {
1029          qsamplerChannelStrip *pChannel = (qsamplerChannelStrip *) wlist.at(iChannel);          qsamplerChannelStrip *pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel);
1030      /*  if (pChannel->testWState(WState_Maximized | WState_Minimized)) {      /*  if (pChannelStrip->testWState(WState_Maximized | WState_Minimized)) {
1031              // Prevent flicker...              // Prevent flicker...
1032              pChannel->hide();              pChannelStrip->hide();
1033              pChannel->showNormal();              pChannelStrip->showNormal();
1034          }   */          }   */
1035          pChannel->adjustSize();          pChannelStrip->adjustSize();
1036          int iWidth  = m_pWorkspace->width();          int iWidth  = m_pWorkspace->width();
1037          if (iWidth < pChannel->width())          if (iWidth < pChannelStrip->width())
1038              iWidth = pChannel->width();              iWidth = pChannelStrip->width();
1039      //  int iHeight = pChannel->height() + pChannel->parentWidget()->baseSize().height();      //  int iHeight = pChannelStrip->height() + pChannelStrip->parentWidget()->baseSize().height();
1040          int iHeight = pChannel->parentWidget()->frameGeometry().height();          int iHeight = pChannelStrip->parentWidget()->frameGeometry().height();
1041          pChannel->parentWidget()->setGeometry(0, y, iWidth, iHeight);          pChannelStrip->parentWidget()->setGeometry(0, y, iWidth, iHeight);
1042          y += iHeight;          y += iHeight;
1043      }      }
1044      m_pWorkspace->setUpdatesEnabled(true);      m_pWorkspace->setUpdatesEnabled(true);
# Line 1024  void qsamplerMainForm::helpAbout (void) Line 1086  void qsamplerMainForm::helpAbout (void)
1086      sText += tr("Debugging option enabled.");      sText += tr("Debugging option enabled.");
1087      sText += "</font></small><br />";      sText += "</font></small><br />";
1088  #endif  #endif
1089    #ifndef CONFIG_LIBGIG
1090        sText += "<small><font color=\"red\">";
1091        sText += tr("GIG (libgig) file support disabled.");
1092        sText += "</font></small><br />";
1093    #endif
1094    #ifndef CONFIG_INSTRUMENT_NAME
1095        sText += "<small><font color=\"red\">";
1096        sText += tr("LSCP (liblscp) instrument_name support disabled.");
1097        sText += "</font></small><br />";
1098    #endif
1099      sText += "<br />\n";      sText += "<br />\n";
1100      sText += tr("Using") + ": ";      sText += tr("Using") + ": ";
1101      sText += ::lscp_client_package();      sText += ::lscp_client_package();
# Line 1057  void qsamplerMainForm::stabilizeForm (vo Line 1129  void qsamplerMainForm::stabilizeForm (vo
1129      setCaption(tr(QSAMPLER_TITLE " - [%1]").arg(sSessioName));      setCaption(tr(QSAMPLER_TITLE " - [%1]").arg(sSessioName));
1130    
1131      // Update the main menu state...      // Update the main menu state...
1132      qsamplerChannelStrip *pChannel = activeChannel();      qsamplerChannelStrip *pChannelStrip = activeChannelStrip();
1133      bool bHasClient  = (m_pOptions != NULL && m_pClient != NULL);      bool bHasClient  = (m_pOptions != NULL && m_pClient != NULL);
1134      bool bHasChannel = (bHasClient && pChannel != NULL);      bool bHasChannel = (bHasClient && pChannelStrip != NULL);
1135      fileNewAction->setEnabled(bHasClient);      fileNewAction->setEnabled(bHasClient);
1136      fileOpenAction->setEnabled(bHasClient);      fileOpenAction->setEnabled(bHasClient);
1137      fileSaveAction->setEnabled(bHasClient && m_iDirtyCount > 0);      fileSaveAction->setEnabled(bHasClient && m_iDirtyCount > 0);
1138      fileSaveAsAction->setEnabled(bHasClient);      fileSaveAsAction->setEnabled(bHasClient);
1139        fileResetAction->setEnabled(bHasClient);
1140      fileRestartAction->setEnabled(bHasClient || m_pServer == NULL);      fileRestartAction->setEnabled(bHasClient || m_pServer == NULL);
1141      editAddChannelAction->setEnabled(bHasClient);      editAddChannelAction->setEnabled(bHasClient);
1142      editRemoveChannelAction->setEnabled(bHasChannel);      editRemoveChannelAction->setEnabled(bHasChannel);
# Line 1082  void qsamplerMainForm::stabilizeForm (vo Line 1155  void qsamplerMainForm::stabilizeForm (vo
1155      }      }
1156      // Channel status...      // Channel status...
1157      if (bHasChannel)      if (bHasChannel)
1158          m_status[QSAMPLER_STATUS_CHANNEL]->setText(pChannel->caption());          m_status[QSAMPLER_STATUS_CHANNEL]->setText(pChannelStrip->caption());
1159      else      else
1160          m_status[QSAMPLER_STATUS_CHANNEL]->clear();          m_status[QSAMPLER_STATUS_CHANNEL]->clear();
1161      // Session status...      // Session status...
# Line 1101  void qsamplerMainForm::stabilizeForm (vo Line 1174  void qsamplerMainForm::stabilizeForm (vo
1174    
1175    
1176  // Channel change receiver slot.  // Channel change receiver slot.
1177  void qsamplerMainForm::channelChanged( qsamplerChannelStrip * )  void qsamplerMainForm::channelStripChanged( qsamplerChannelStrip * )
1178  {  {
1179        // Flag that we're update those channel strips.
1180        m_iChangeCount++;
1181      // Just mark the dirty form.      // Just mark the dirty form.
1182      m_iDirtyCount++;      m_iDirtyCount++;
1183      // and update the form status...      // and update the form status...
# Line 1154  void qsamplerMainForm::updateRecentFiles Line 1229  void qsamplerMainForm::updateRecentFiles
1229  }  }
1230    
1231    
1232    // Force update of the channels instrument names mode.
1233    void qsamplerMainForm::updateInstrumentNames (void)
1234    {
1235        // Full channel list update...
1236        QWidgetList wlist = m_pWorkspace->windowList();
1237        if (wlist.isEmpty())
1238            return;
1239    
1240        m_pWorkspace->setUpdatesEnabled(false);
1241        for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {
1242            qsamplerChannelStrip *pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel);
1243            if (pChannelStrip)
1244                pChannelStrip->updateInstrumentName(true);
1245        }
1246        m_pWorkspace->setUpdatesEnabled(true);
1247    }
1248    
1249    
1250  // Force update of the channels display font.  // Force update of the channels display font.
1251  void qsamplerMainForm::updateDisplayFont (void)  void qsamplerMainForm::updateDisplayFont (void)
1252  {  {
# Line 1175  void qsamplerMainForm::updateDisplayFont Line 1268  void qsamplerMainForm::updateDisplayFont
1268    
1269      m_pWorkspace->setUpdatesEnabled(false);      m_pWorkspace->setUpdatesEnabled(false);
1270      for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {      for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {
1271          qsamplerChannelStrip *pChannel = (qsamplerChannelStrip *) wlist.at(iChannel);          qsamplerChannelStrip *pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel);
1272          pChannel->setDisplayFont(font);          if (pChannelStrip)
1273                pChannelStrip->setDisplayFont(font);
1274        }
1275        m_pWorkspace->setUpdatesEnabled(true);
1276    }
1277    
1278    
1279    // Update channel strips background effect.
1280    void qsamplerMainForm::updateDisplayEffect (void)
1281    {
1282       QPixmap pm;
1283        if (m_pOptions->bDisplayEffect)
1284            pm = QPixmap::fromMimeSource("displaybg1.png");
1285    
1286        // Full channel list update...
1287        QWidgetList wlist = m_pWorkspace->windowList();
1288        if (wlist.isEmpty())
1289            return;
1290    
1291        m_pWorkspace->setUpdatesEnabled(false);
1292        for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {
1293            qsamplerChannelStrip *pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel);
1294            if (pChannelStrip)
1295                pChannelStrip->setDisplayBackground(pm);
1296      }      }
1297      m_pWorkspace->setUpdatesEnabled(true);      m_pWorkspace->setUpdatesEnabled(true);
1298  }  }
# Line 1195  void qsamplerMainForm::updateMaxVolume ( Line 1311  void qsamplerMainForm::updateMaxVolume (
1311    
1312      m_pWorkspace->setUpdatesEnabled(false);      m_pWorkspace->setUpdatesEnabled(false);
1313      for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {      for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {
1314          qsamplerChannelStrip *pChannel = (qsamplerChannelStrip *) wlist.at(iChannel);          qsamplerChannelStrip *pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel);
1315          pChannel->setMaxVolume(m_pOptions->iMaxVolume);          if (pChannelStrip)
1316                pChannelStrip->setMaxVolume(m_pOptions->iMaxVolume);
1317      }      }
1318      m_pWorkspace->setUpdatesEnabled(true);      m_pWorkspace->setUpdatesEnabled(true);
1319  }  }
# Line 1295  void qsamplerMainForm::updateMessagesCap Line 1412  void qsamplerMainForm::updateMessagesCap
1412  // qsamplerMainForm -- MDI channel strip management.  // qsamplerMainForm -- MDI channel strip management.
1413    
1414  // The channel strip creation executive.  // The channel strip creation executive.
1415  void qsamplerMainForm::createChannel ( int iChannelID, bool bPrompt )  qsamplerChannelStrip *qsamplerMainForm::createChannelStrip ( qsamplerChannel *pChannel )
1416  {  {
1417      if (m_pClient == NULL)      if (m_pClient == NULL || pChannel == NULL)
1418          return;          return NULL;
1419    
1420      // Prepare for auto-arrange?      // Prepare for auto-arrange?
1421      qsamplerChannelStrip *pChannel = NULL;      qsamplerChannelStrip *pChannelStrip = NULL;
1422      int y = 0;      int y = 0;
1423      if (m_pOptions && m_pOptions->bAutoArrange) {      if (m_pOptions && m_pOptions->bAutoArrange) {
1424          QWidgetList wlist = m_pWorkspace->windowList();          QWidgetList wlist = m_pWorkspace->windowList();
1425          for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {          for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {
1426              pChannel = (qsamplerChannelStrip *) wlist.at(iChannel);              pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel);
1427          //  y += pChannel->height() + pChannel->parentWidget()->baseSize().height();          //  y += pChannelStrip->height() + pChannelStrip->parentWidget()->baseSize().height();
1428              y += pChannel->parentWidget()->frameGeometry().height();              y += pChannelStrip->parentWidget()->frameGeometry().height();
1429          }          }
1430      }      }
1431    
1432      // Add a new channel itema...      // Add a new channel itema...
1433      WFlags wflags = Qt::WStyle_Customize | Qt::WStyle_Tool | Qt::WStyle_Title | Qt::WStyle_NoBorder;      WFlags wflags = Qt::WStyle_Customize | Qt::WStyle_Tool | Qt::WStyle_Title | Qt::WStyle_NoBorder;
1434      pChannel = new qsamplerChannelStrip(m_pWorkspace, 0, wflags);      pChannelStrip = new qsamplerChannelStrip(m_pWorkspace, 0, wflags);
1435      pChannel->setMaxVolume(m_pOptions->iMaxVolume);      if (pChannelStrip == NULL)
1436      pChannel->setup(this, iChannelID);          return NULL;
1437      // We'll need a display font.          
1438      QFont font;      // Actual channel strip setup...
1439      if (m_pOptions && font.fromString(m_pOptions->sDisplayFont))      pChannelStrip->setup(pChannel);
1440          pChannel->setDisplayFont(font);      QObject::connect(pChannelStrip, SIGNAL(channelChanged(qsamplerChannelStrip *)), this, SLOT(channelStripChanged(qsamplerChannelStrip *)));
1441      // Track channel setup changes.      // Set some initial aesthetic options...
1442      QObject::connect(pChannel, SIGNAL(channelChanged(qsamplerChannelStrip *)), this, SLOT(channelChanged(qsamplerChannelStrip *)));      if (m_pOptions) {
1443      // Before we show it up, may be we'll          // Background display effect...
1444      // better ask for some initial values?          pChannelStrip->setDisplayEffect(m_pOptions->bDisplayEffect);
1445      if (bPrompt)          // We'll need a display font.
1446          pChannel->channelSetup();                QFont font;
1447            if (font.fromString(m_pOptions->sDisplayFont))
1448                pChannelStrip->setDisplayFont(font);
1449            // Maximum allowed volume setting.
1450            pChannelStrip->setMaxVolume(m_pOptions->iMaxVolume);
1451        }
1452    
1453      // Now we show up us to the world.      // Now we show up us to the world.
1454      pChannel->show();      pChannelStrip->show();
1455      // Only then, we'll auto-arrange...      // Only then, we'll auto-arrange...
1456      if (m_pOptions && m_pOptions->bAutoArrange) {      if (m_pOptions && m_pOptions->bAutoArrange) {
1457          int iWidth  = m_pWorkspace->width();          int iWidth  = m_pWorkspace->width();
1458      //  int iHeight = pChannel->height() + pChannel->parentWidget()->baseSize().height();      //  int iHeight = pChannel->height() + pChannel->parentWidget()->baseSize().height();
1459          int iHeight = pChannel->parentWidget()->frameGeometry().height();          int iHeight = pChannelStrip->parentWidget()->frameGeometry().height();
1460          pChannel->parentWidget()->setGeometry(0, y, iWidth, iHeight);          pChannelStrip->parentWidget()->setGeometry(0, y, iWidth, iHeight);
1461      }      }
1462        
1463        // Return our successful reference...
1464        return pChannelStrip;
1465  }  }
1466    
1467    
1468  // Retrieve the active channel strip.  // Retrieve the active channel strip.
1469  qsamplerChannelStrip *qsamplerMainForm::activeChannel (void)  qsamplerChannelStrip *qsamplerMainForm::activeChannelStrip (void)
1470  {  {
1471      return (qsamplerChannelStrip *) m_pWorkspace->activeWindow();      return (qsamplerChannelStrip *) m_pWorkspace->activeWindow();
1472  }  }
1473    
1474    
1475  // Retrieve a channel strip by index.  // Retrieve a channel strip by index.
1476  qsamplerChannelStrip *qsamplerMainForm::channelAt ( int iChannel )  qsamplerChannelStrip *qsamplerMainForm::channelStripAt ( int iChannel )
1477  {  {
1478      QWidgetList wlist = m_pWorkspace->windowList();      QWidgetList wlist = m_pWorkspace->windowList();
1479      if (wlist.isEmpty())      if (wlist.isEmpty())
# Line 1368  void qsamplerMainForm::channelsMenuAbout Line 1494  void qsamplerMainForm::channelsMenuAbout
1494      if (!wlist.isEmpty()) {      if (!wlist.isEmpty()) {
1495          channelsMenu->insertSeparator();          channelsMenu->insertSeparator();
1496          for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {          for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {
1497              qsamplerChannelStrip *pChannel = (qsamplerChannelStrip *) wlist.at(iChannel);              qsamplerChannelStrip *pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel);
1498              int iItemID = channelsMenu->insertItem(pChannel->caption(), this, SLOT(channelsMenuActivated(int)));              if (pChannelStrip) {
1499              channelsMenu->setItemParameter(iItemID, iChannel);                  int iItemID = channelsMenu->insertItem(pChannelStrip->caption(), this, SLOT(channelsMenuActivated(int)));
1500              channelsMenu->setItemChecked(iItemID, activeChannel() == pChannel);                  channelsMenu->setItemParameter(iItemID, iChannel);
1501                    channelsMenu->setItemChecked(iItemID, activeChannelStrip() == pChannelStrip);
1502                }
1503          }          }
1504      }      }
1505  }  }
# Line 1380  void qsamplerMainForm::channelsMenuAbout Line 1508  void qsamplerMainForm::channelsMenuAbout
1508  // Windows menu activation slot  // Windows menu activation slot
1509  void qsamplerMainForm::channelsMenuActivated ( int iChannel )  void qsamplerMainForm::channelsMenuActivated ( int iChannel )
1510  {  {
1511      qsamplerChannelStrip *pChannel = channelAt(iChannel);      qsamplerChannelStrip *pChannelStrip = channelStripAt(iChannel);
1512      if (pChannel)      if (pChannelStrip)
1513          pChannel->showNormal();          pChannelStrip->showNormal();
1514      pChannel->setFocus();      pChannelStrip->setFocus();
1515  }  }
1516    
1517    
# Line 1423  void qsamplerMainForm::timerSlot (void) Line 1551  void qsamplerMainForm::timerSlot (void)
1551      }      }
1552            
1553          // Refresh each channel usage, on each period...          // Refresh each channel usage, on each period...
1554      if (m_pClient && m_pOptions->bAutoRefresh && m_pWorkspace->isUpdatesEnabled()) {      if (m_pClient && (m_iChangeCount > 0 || m_pOptions->bAutoRefresh)) {
1555          m_iTimerSlot += QSAMPLER_TIMER_MSECS;          m_iTimerSlot += QSAMPLER_TIMER_MSECS;
1556          if (m_iTimerSlot >= m_pOptions->iAutoRefreshTime)  {          if (m_iTimerSlot >= m_pOptions->iAutoRefreshTime && m_pWorkspace->isUpdatesEnabled())  {
1557              m_iTimerSlot = 0;              m_iTimerSlot = 0;
1558                m_iChangeCount = 0;
1559              QWidgetList wlist = m_pWorkspace->windowList();              QWidgetList wlist = m_pWorkspace->windowList();
1560              for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {              for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {
1561                  qsamplerChannelStrip *pChannel = (qsamplerChannelStrip *) wlist.at(iChannel);                  qsamplerChannelStrip *pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel);
1562                  if (pChannel->isVisible())                  if (pChannelStrip && pChannelStrip->isVisible()) {
1563                      pChannel->updateChannelUsage();                      // If we can't make it clean, try next time.
1564                        if (!pChannelStrip->updateChannelUsage())
1565                            m_iChangeCount++;
1566                    }
1567              }              }
1568          }          }
1569      }      }

Legend:
Removed from v.150  
changed lines
  Added in v.382

  ViewVC Help
Powered by ViewVC