// private void OnLostFocus() // { //#if UNITY_2017_1_OR_NEWER // // Trig an error before v2017... // if (Application.isPlaying) // { // window.Close(); // } //#endif // } /// <summary> /// Reload data /// </summary> private void OnFocus() { // Load description of available soundfont try { ToolsEditor.LoadMidiSet(); ToolsEditor.CheckMidiSet(); if (MidiPlayerGlobal.ImSFCurrent != null) { KeepAllPatchs = MidiPlayerGlobal.ImSFCurrent.KeepAllPatchs; KeepAllZones = MidiPlayerGlobal.ImSFCurrent.KeepAllZones; RemoveUnusedWaves = MidiPlayerGlobal.ImSFCurrent.RemoveUnusedWaves; } // cause catch if call when playing (setup open on run mode) if (!Application.isPlaying) { AssetDatabase.Refresh(); } // Exec after Refresh, either cause errror ToolsEditor.LoadImSF(); } catch (Exception ex) { MidiPlayerGlobal.ErrorDetail(ex); } }
/// <summary> /// Display, add, remove Soundfont /// </summary> /// <param name="localstartX"></param> /// <param name="localstartY"></param> private void ShowListSoundFonts(float localstartX, float localstartY, float width, float height) { try { Rect zone = new Rect(localstartX, localstartY, width, height); GUI.color = new Color(.8f, .8f, .8f, 1f); GUI.Box(zone, ""); GUI.color = Color.white; if (MidiPlayerGlobal.CurrentMidiSet != null && MidiPlayerGlobal.CurrentMidiSet.SoundFonts != null) { string caption = "SoundFont available"; if (MidiPlayerGlobal.CurrentMidiSet.SoundFonts.Count == 0) { caption = "No SoundFont available yet"; MidiPlayerGlobal.ImSFCurrent = null; } GUIContent content = new GUIContent() { text = caption, tooltip = "Each SoundFonts contains a set of bank of sound. \nOnly one SoundFont can be active at the same time for the midi player" }; EditorGUI.LabelField(new Rect(localstartX + xpostitlebox, localstartY + ypostitlebox, 300, itemHeight), content, styleBold); Rect rect = new Rect(width - buttonWidth, localstartY + ypostitlebox, buttonWidth, buttonHeight); #if MPTK_PRO if (GUI.Button(rect, "Add SoundFont")) { //if (EditorUtility.DisplayDialog("Import SoundFont", "This action could take time, do you confirm ?", "Ok", "Cancel")) { SoundFontOptim.AddSoundFont(); scrollPosSoundFont = Vector2.zero; KeepAllPatchs = false; KeepAllZones = false; //listPatchs = PatchOptim.PatchUsed(); } } #else if (GUI.Button(rect, "Add SoundFont [PRO]")) { try { PopupWindow.Show(rect, new GetVersionPro()); } catch (Exception) { // generate some weird exception ... } } #endif Rect listVisibleRect = new Rect(localstartX, localstartY + itemHeight, width - 5, height - itemHeight - 5); Rect listContentRect = new Rect(0, 0, width - 20, MidiPlayerGlobal.CurrentMidiSet.SoundFonts.Count * itemHeight + 5); scrollPosSoundFont = GUI.BeginScrollView(listVisibleRect, scrollPosSoundFont, listContentRect); float boxY = 0; for (int i = 0; i < MidiPlayerGlobal.CurrentMidiSet.SoundFonts.Count; i++) { SoundFontInfo sf = MidiPlayerGlobal.CurrentMidiSet.SoundFonts[i]; GUI.color = new Color(.7f, .7f, .7f, 1f); float boxX = 5; GUI.Box(new Rect(boxX, boxY + 5, width - 30, itemHeight), ""); GUI.color = Color.white; content = new GUIContent() { text = sf.Name, tooltip = "" }; EditorGUI.LabelField(new Rect(boxX, boxY + 9, 200, itemHeight), content); if (sf.Name == MidiPlayerGlobal.CurrentMidiSet.ActiveSounFontInfo.Name) { GUI.color = ToolsEditor.ButtonColor; } boxX += 200 + espace; if (GUI.Button(new Rect(boxX, boxY + 9, 80, buttonHeight), "Select")) { #if MPTK_PRO OptimInfo = new BuilderInfo(); #endif MidiPlayerGlobal.CurrentMidiSet.SetActiveSoundFont(i); string soundPath = Path.Combine(Application.dataPath + "/", MidiPlayerGlobal.PathToSoundfonts); soundPath = Path.Combine(soundPath + "/", sf.Name); ToolsEditor.LoadImSF(soundPath, sf.Name); MidiPlayerGlobal.CurrentMidiSet.Save(); if (MidiPlayerGlobal.ImSFCurrent != null) { KeepAllPatchs = MidiPlayerGlobal.ImSFCurrent.KeepAllPatchs; KeepAllZones = MidiPlayerGlobal.ImSFCurrent.KeepAllZones; RemoveUnusedWaves = MidiPlayerGlobal.ImSFCurrent.RemoveUnusedWaves; if (Application.isPlaying) { MidiPlayerGlobal.MPTK_SelectSoundFont(null); } } //listPatchs = PatchOptim.PatchUsed(); } boxX += 80 + espace; GUI.color = Color.white; rect = new Rect(boxX, boxY + 9, 80, buttonHeight); if (GUI.Button(rect, "Remove")) { #if MPTK_PRO OptimInfo = new BuilderInfo(); string soundFontPath = Path.Combine(Application.dataPath + "/", MidiPlayerGlobal.PathToSoundfonts); string path = Path.Combine(soundFontPath, sf.Name); if (!string.IsNullOrEmpty(path) && EditorUtility.DisplayDialog("Delete SoundFont", "Are you sure to delete all the content of this folder ? " + path, "ok", "cancel")) { try { Directory.Delete(path, true); File.Delete(path + ".meta"); } catch (Exception ex) { Debug.Log("Remove SF " + ex.Message); } AssetDatabase.Refresh(); ToolsEditor.CheckMidiSet(); } #else try { PopupWindow.Show(rect, new GetVersionPro()); } catch (Exception) { // generate some weird exception ... } #endif } GUI.color = Color.white; //boxX = 5; //boxY += itemHeight; //if (MidiPlayerGlobal.ImSFCurrent.WaveSize < 1000000) // strSize = Math.Round((double)MidiPlayerGlobal.ImSFCurrent.WaveSize / 1000d).ToString() + " Ko"; //else // strSize = Math.Round((double)MidiPlayerGlobal.ImSFCurrent.WaveSize / 1000000d).ToString() + " Mo"; //string.Format("Patch count: {0} Wave count:{1} Wave size:{2}", MidiPlayerGlobal.ImSFCurrent.PatchCount, MidiPlayerGlobal.ImSFCurrent.WaveCount, strSize); //content = new GUIContent() { text = sf.Name, tooltip = "" }; //EditorGUI.LabelField(new Rect(boxX, boxY + 9, 200, itemHeight), content); boxY += itemHeight; } GUI.EndScrollView(); } } catch (Exception ex) { MidiPlayerGlobal.ErrorDetail(ex); } }