public override void handleUpdate(List <PackageUpdate> updates) { List <PackageChange> changes = updates.Select(x => x.change).ToList(); bool importChanges = changes.Contains(PackageChange.Import) || changes.Contains(PackageChange.ImportAdd); bool exportNonDataChanges = changes.Contains(PackageChange.ExportHeader) || changes.Contains(PackageChange.ExportAdd); var loadedIndexes = BindedExportsList.Where(x => x.Export != null).Select(y => y.Export.Index).ToList(); List <SoundplorerExport> exportsRequiringReload = new List <SoundplorerExport>(); foreach (PackageUpdate pc in updates) { if (loadedIndexes.Contains(pc.index)) { SoundplorerExport sp = BindedExportsList.First(x => x.Export.Index == pc.index); exportsRequiringReload.Add(sp); } } if (exportsRequiringReload.Count() > 0) { SoundplorerExport spExport = (SoundplorerExport)SoundExports_ListBox.SelectedItem; if (spExport == null) { if (exportsRequiringReload.Contains(spExport)) { soundPanel.FreeAudioResources(); //unload the current export } } LoadObjects(exportsRequiringReload); soundPanel.LoadExport(spExport.Export); //reload } }
private void CloneAndReplace(bool fromWave) { string result = PromptDialog.Prompt("Enter a new object name for the cloned item.", "Cloned export name"); if (result != null) { SoundplorerExport spExport = (SoundplorerExport)SoundExports_ListBox.SelectedItem; if (spExport != null && spExport.Export.ClassName == "WwiseStream") { IExportEntry clone = spExport.Export.Clone(); clone.idxObjectName = clone.FileRef.FindNameOrAdd(result); spExport.Export.FileRef.addExport(clone); SoundplorerExport newExport = new SoundplorerExport(clone); BindedExportsList.Add(newExport); var reloadList = new List <SoundplorerExport>(); reloadList.Add(newExport); SoundExports_ListBox.ScrollIntoView(newExport); SoundExports_ListBox.UpdateLayout(); var item = SoundExports_ListBox.ItemContainerGenerator.ContainerFromItem(newExport) as ListBoxItem; if (item != null) { item.Focus(); } if (fromWave) { soundPanel.ReplaceAudioFromWwiseOgg(forcedExport: clone); } else { soundPanel.ReplaceAudioFromWave(forcedExport: clone); } LoadObjects(reloadList); } } }
private async void LoadObjects(List <SoundplorerExport> ExportsToReload = null) { if (ExportsToReload == null) { BindedExportsList = new BindingList <SoundplorerExport>(Pcc.Exports.Where(e => e.ClassName == "WwiseBank" || e.ClassName == "WwiseStream").Select(x => new SoundplorerExport(x)).ToList()); SoundExports_ListBox.ItemsSource = BindedExportsList; } else { foreach (SoundplorerExport se in ExportsToReload) { se.SubText = "Refreshing"; se.NeedsLoading = true; se.Icon = FontAwesomeIcon.Spinner; } } if (backgroundScanner != null && backgroundScanner.IsBusy) { backgroundScanner.CancelAsync(); //cancel current operation while (backgroundScanner.IsBusy) { //I am sorry for this. I truely am. //But it's the simplest code to get the job done while we wait for the thread to finish. await Task.Delay(200); } } backgroundScanner = new BackgroundWorker(); backgroundScanner.DoWork += GetStreamTimes; backgroundScanner.RunWorkerCompleted += GetStreamTimes_Completed; backgroundScanner.WorkerReportsProgress = true; backgroundScanner.ProgressChanged += GetStreamTimes_ReportProgress; backgroundScanner.WorkerSupportsCancellation = true; backgroundScanner.RunWorkerAsync(ExportsToReload != null ? ExportsToReload : BindedExportsList.ToList()); IsBusyTaskbar = true; //string s = i.ToString("d6") + " : " + e.ClassName + " : \"" + e.ObjectName + "\""; }