예제 #1
0
        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
            }
        }
예제 #2
0
        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);
                }
            }
        }
예제 #3
0
        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 + "\"";
        }