Example #1
0
    void timerEvent(QTimerEvent * e){
      printf("clicked: %p\n", parent->msgBox->clickedButton());

      if (parent->msgBox->clickedButton()!=NULL){
        SOUNDFILESAVER_request_stop();

        // Reset clickedButton().
        delete parent->msgBox;
        parent->msgBox = new MyQMessageBox;
      }
      
      const char *message = ATOMIC_GET(async_message);
      if(message != NULL){
        
        ATOMIC_SET(async_message, NULL);

        MIXER_request_stop_saving_soundfile(); // This is very messy. The code would be far simpler if jack_set_freewheel could be called from any thread.

        //usleep(1000*100); // Wait a bit for saving to stop;

        ScrollEditorToRealLine_CurrPos(root->song->tracker_windows, root->song->tracker_windows->wblock->bot_realline);
        root->song->tracker_windows->must_redraw = true;
#if 0        
        MyQMessageBox msgBox;
        
        msgBox->setText(QString(message));
        //msgBox->setInformativeText(message);
        msgBox->setStandardButtons(QMessageBox::Ok);

        safeExec(msgBox);
#endif

        bool was_cancelled = !strcmp(message, "Cancelled");
        
        V_free((void*)message);

        stop();

        parent->clean_prev();
        
        if (was_cancelled)
          PlayStop(); // Sometimes it continues playing after pressing "cancel".
        else
          parent->save_next();
      }
    }
Example #2
0
SoundPluginType *PR_get_plugin_type_by_name(const char *container_name, const char *type_name, const char *plugin_name){

  // Compatibility with older songs
  if (!strcmp(type_name, "Patchbay") && !strcmp(plugin_name, "Patchbay"))
    plugin_name = "Patchbay 8x8";
  
  for(SoundPluginType *plugin_type : g_plugin_types)
    if(!strcmp(plugin_type->type_name,type_name))
      if(!strcmp(plugin_type->name,plugin_name))
        return plugin_type;

  // check if the container needs to be populated.
  if (container_name != NULL)
    for(auto container : g_plugin_type_containers)
      if (!container->is_populated)
        if(!strcmp(container->type_name,type_name))
          if(!strcmp(container->name,container_name)){
            container->populate(container);
            return PR_get_plugin_type_by_name(container_name, type_name, plugin_name);
          }

  // Older songs didn't store vst container names (because there were no containers). Try to set container_name to plugin_name and try again.
  if(!strcmp(type_name,"VST") && container_name==NULL){
    return PR_get_plugin_type_by_name(plugin_name,type_name,plugin_name);
  }

  if(!strcmp(type_name,"VST") || !strcmp(type_name,"VST3") || !strcmp(type_name,"AudioUnit")){
    while(true){
      vector_t v = {}; // c++ way of zero-initialization without getting missing-field-initializers warning.

      int select_plugin_file = VECTOR_push_back(&v, "Select plugin file");
      int use_different_plugin = VECTOR_push_back(&v, "Use different plugin");
      int replace_with_pipe = VECTOR_push_back(&v, "Replace with pipe");
      (void)replace_with_pipe; // default
      
      int ret = GFX_Message(&v, ("VST Plugin " + QString(plugin_name) + " not found.").toUtf8().constData());

      if (ret==select_plugin_file) {

        QString filename;
        
        {
          R_ASSERT(g_radium_runs_custom_exec==false);

          radium::ScopedExec scopedExec;
          filename = QFileDialog::getOpenFileName(NULL,
                                                  plugin_name,
                                                  QString(),
                                                  QString(),
                                                  0,
                                                  QFileDialog::DontUseCustomDirectoryIcons | (useNativeFileRequesters() ? (QFileDialog::Option)0 : QFileDialog::DontUseNativeDialog)
                                                  );
        }

        QFileInfo info(filename);

        QString basename = info.fileName();
        basename.resize(basename.size()-strlen(VST_SUFFIX)-1);

        //        if(basename==QString(plugin_name) && info.exists()){
        VST_add_path(info.dir().path());
        PR_init_plugin_types();
        return PR_get_plugin_type_by_name(container_name, type_name, plugin_name);
        //}
      } else if (ret==use_different_plugin) {
        SoundPluginType *plugintype = MW_popup_plugin_type_selector();
        if (plugintype==NULL)
          break;
        else
          return plugintype;
      } else
        break;
    }

  }else if(!strcmp(type_name,"Pd") && strcmp(plugin_name, "")){ // type_name doesn't mean anything for already saved files. Without this excpetion, plugins would be replaced by pipes if a pd patch file was renamed.
    return PR_get_plugin_type_by_name("Pd", "");

  }else{

    MyQMessageBox msgBox;
    msgBox.setText("Plugin " + QString(type_name) + " / " + QString(plugin_name) + " not found. Replacing with a Pipe.");
    if(!strcmp(type_name,"Ladspa") && getenv("LADSPA_PATH")==NULL)
      msgBox.setInformativeText("(LADSPA_PATH is not set)");

    EVENTLOG_add_event(strdup(msgBox.text().toUtf8().constData()));
                       
    msgBox.setDefaultButton(QMessageBox::Ok);
    safeExec(msgBox);
  }

  return PR_get_plugin_type_by_name("Pipe","Pipe");
}
SoundPluginType *PR_get_plugin_type_by_name(const char *container_name, const char *type_name, const char *plugin_name){
  for(SoundPluginType *plugin_type : g_plugin_types)
    if(!strcmp(plugin_type->type_name,type_name))
      if(!strcmp(plugin_type->name,plugin_name))
        return plugin_type;

  // check if the container needs to be populated.
  if (container_name != NULL)
    for(auto container : g_plugin_type_containers)
      if (!container->is_populated)
        if(!strcmp(container->type_name,type_name))
          if(!strcmp(container->name,container_name)){
            container->populate(container);
            return PR_get_plugin_type_by_name(container_name, type_name, plugin_name);
          }

  // Older songs didn't store vst container names (because there were no containers). Try to set container_name to plugin_name and try again.
  if(!strcmp(type_name,"VST") && container_name==NULL){
    return PR_get_plugin_type_by_name(plugin_name,type_name,plugin_name);
  }

  if(!strcmp(type_name,"VST")){
    while(true){
      vector_t v = {0};

      VECTOR_push_back(&v, "Select plugin file");
      VECTOR_push_back(&v, "Use different plugin");
      VECTOR_push_back(&v, "Replace with pipe");

      int ret = GFX_Message(&v, ("VST Plugin " + QString(plugin_name) + " not found.").toUtf8().constData());

      if (ret==0) {
        QString filename = QFileDialog::getOpenFileName(NULL, plugin_name);
        QFileInfo info(filename);

        QString basename = info.fileName();
        basename.resize(basename.size()-strlen(VST_SUFFIX)-1);

        //        if(basename==QString(plugin_name) && info.exists()){
        VST_add_path(info.dir().path());
        PR_init_plugin_types();
        return PR_get_plugin_type_by_name(container_name, type_name, plugin_name);
        //}
      } else if (ret==1) {
        SoundPluginType *plugintype = MW_popup_plugin_selector(NULL, 0, 0, false);
        if (plugintype==NULL)
          break;
        else
          return plugintype;
      } else
        break;
    }

  }else if(!strcmp(type_name,"Pd") && strcmp(plugin_name, "")){ // type_name doesn't mean anything for already saved files. Without this excpetion, plugins would be replaced by pipes if a pd patch file was renamed.
    return PR_get_plugin_type_by_name("Pd", "");

  }else{

    QMessageBox msgBox;
    msgBox.setText("Plugin " + QString(type_name) + " / " + QString(plugin_name) + " not found. Replacing with a Pipe.");
    if(!strcmp(type_name,"Ladspa") && getenv("LADSPA_PATH")==NULL)
      msgBox.setInformativeText("(LADSPA_PATH is not set)");

    msgBox.setDefaultButton(QMessageBox::Ok);
    safeExec(msgBox);
  }

  return PR_get_plugin_type_by_name("Pipe","Pipe");
}