| 3213 | } |
| 3214 | |
| 3215 | IDrawableModule* ModularSynth::SpawnModuleOnTheFly(ModuleFactory::Spawnable spawnable, float x, float y, bool addToContainer, std::string name) |
| 3216 | { |
| 3217 | if (mInitialized) |
| 3218 | TitleBar::sShowInitialHelpOverlay = false; //don't show initial help popup |
| 3219 | |
| 3220 | if (sShouldAutosave) |
| 3221 | DoAutosave(); |
| 3222 | |
| 3223 | std::string moduleType = spawnable.mLabel; |
| 3224 | |
| 3225 | moduleType = ModuleFactory::FixUpTypeName(moduleType); |
| 3226 | |
| 3227 | if (spawnable.mSpawnMethod == ModuleFactory::SpawnMethod::EffectChain) |
| 3228 | moduleType = "effectchain"; |
| 3229 | |
| 3230 | if (spawnable.mSpawnMethod == ModuleFactory::SpawnMethod::Prefab) |
| 3231 | moduleType = "prefab"; |
| 3232 | |
| 3233 | if (spawnable.mSpawnMethod == ModuleFactory::SpawnMethod::Plugin) |
| 3234 | moduleType = "vstplugin"; |
| 3235 | |
| 3236 | if (spawnable.mSpawnMethod == ModuleFactory::SpawnMethod::MidiController) |
| 3237 | moduleType = "midicontroller"; |
| 3238 | |
| 3239 | if (spawnable.mSpawnMethod == ModuleFactory::SpawnMethod::Preset) |
| 3240 | moduleType = spawnable.mPresetModuleType; |
| 3241 | |
| 3242 | if (name == "") |
| 3243 | name = moduleType; |
| 3244 | |
| 3245 | ofxJSONElement dummy; |
| 3246 | dummy["type"] = moduleType; |
| 3247 | std::vector<IDrawableModule*> modules = mModuleContainer.GetModules(); |
| 3248 | dummy["name"] = GetUniqueName(name, modules); |
| 3249 | dummy["onthefly"] = true; |
| 3250 | dummy["position"][0u] = x; |
| 3251 | dummy["position"][1u] = y; |
| 3252 | |
| 3253 | IDrawableModule* module = nullptr; |
| 3254 | |
| 3255 | try |
| 3256 | { |
| 3257 | ScopedMutex mutex(&mAudioThreadMutex, "CreateModule"); |
| 3258 | module = CreateModule(dummy); |
| 3259 | if (module != nullptr) |
| 3260 | { |
| 3261 | if (addToContainer) |
| 3262 | mModuleContainer.AddModule(module); |
| 3263 | SetUpModule(module, dummy); |
| 3264 | module->Init(); |
| 3265 | } |
| 3266 | } |
| 3267 | catch (LoadingJSONException& e) |
| 3268 | { |
| 3269 | LogEvent("Error spawning \"" + spawnable.mLabel + "\" on the fly", kLogEventType_Warning); |
| 3270 | } |
| 3271 | catch (UnknownModuleException& e) |
| 3272 | { |