1 module test1.modulerouter; 2 3 import pixelperfectengine.concrete.window; 4 import pixelperfectengine.audio.base.config; 5 6 import test1.app; 7 import test1.editorevents; 8 9 import std.conv : to; 10 11 public class ModuleRouter : Window { 12 ListView listView_modules; 13 ListView listView_routing; 14 Button button_addMod; 15 Button button_remMod; 16 Button button_preset; 17 Button button_setup; 18 Button button_audNode; 19 Button button_midiNode; 20 Button button_remNode; 21 AudioDevKit adk; 22 public this(AudioDevKit adk){ 23 super(Box(0, 16, 640, 480), "Modules and Routing"); 24 listView_modules = new ListView(new ListViewHeader(16, [256, 256], ["Type", "Name"]), null, "listView_modules", 25 Box(5, 20, 530, 175)); 26 listView_routing = new ListView(new ListViewHeader(16, [256, 256], ["From", "To"]), null, "listView_routing", 27 Box(5, 180, 530, 455)); 28 button_addMod = new Button("Add module..."d, "button_addMod", Box(535, 20, 635, 40)); 29 button_remMod = new Button("Remove module"d, "button_remMod", Box(535, 45, 635, 65)); 30 button_preset = new Button("Presets..."d, "button_preset", Box(535, 70, 635, 90)); 31 button_setup = new Button("Settings..."d, "button_setup", Box(535, 95, 635, 115)); 32 button_audNode = new Button("Add audio node"d, "button_audNode", Box(535, 180, 635, 200)); 33 //button_midiNode = new Button("Add MIDI node"d, "button1", Box(535, 205, 635, 225)); 34 button_remNode = new Button("Remove node"d, "button_remNode", Box(535, 205, 635, 225)); 35 button_addMod.onMouseLClick = &button_addMod_onClick; 36 button_audNode.onMouseLClick = &button_addNode_onClick; 37 button_preset.onMouseLClick = &button_preset_onClick; 38 listView_modules.editEnable = true; 39 listView_modules.onTextInput = &listView_modules_onTextEdit; 40 listView_modules.onItemSelect = &listView_modules_onItemSelect; 41 listView_routing.editEnable = true; 42 listView_routing.multicellEditEnable = true; 43 listView_routing.onTextInput = &listView_routing_onTextEdit; 44 addElement(listView_modules); 45 addElement(listView_routing); 46 addElement(button_addMod); 47 addElement(button_remMod); 48 addElement(button_setup); 49 addElement(button_preset); 50 addElement(button_audNode); 51 //addElement(button_midiNode); 52 addElement(button_remNode); 53 54 this.adk = adk; 55 refreshRoutingTable(); 56 refreshModuleList(); 57 } 58 public void refreshRoutingTable() { 59 ModuleConfig mcfg = adk.mcfg; 60 string[2][] routingTable = mcfg.getRoutingTable; 61 listView_routing.clear(); 62 foreach (string[2] key; routingTable) { 63 listView_routing ~= new ListViewItem(16, [key[0].to!dstring, key[1].to!dstring], 64 [TextInputFieldType.ASCIIText, TextInputFieldType.ASCIIText]); 65 } 66 listView_routing.refresh(); 67 } 68 public void refreshModuleList() { 69 ModuleConfig mcfg = adk.mcfg; 70 string[2][] moduleList = mcfg.getModuleList; 71 listView_modules.clear(); 72 foreach (string[2] key; moduleList) { 73 listView_modules ~= new ListViewItem(16, [key[0].to!dstring, key[1].to!dstring,], 74 [TextInputFieldType.None, TextInputFieldType.ASCIIText]); 75 } 76 } 77 private void listView_modules_onItemSelect(Event e) { 78 ListViewItem item = cast(ListViewItem)e.aux; 79 if (item[1].getText != "Rename me!") { 80 ModuleConfig mcfg = adk.mcfg; 81 adk.selectedModID = item[1].getText.to!string; 82 adk.selectedModule = mcfg.getModule(adk.selectedModID); 83 } 84 } 85 private void button_addMod_onClick(Event e) { 86 handler.addPopUpElement(new PopUpMenu([new PopUpMenuElement("qm816", "QM816"), new PopUpMenuElement("pcm8", "PCM8")], 87 "moduleSelector", &onModuleTypeSelect)); 88 } 89 private void button_preset_onClick(Event e) { 90 adk.openPresetEditor(); 91 } 92 private void onModuleTypeSelect(Event e) { 93 MenuEvent me = cast(MenuEvent)e; 94 listView_modules ~= new ListViewItem(16, [me.itemSource.to!dstring, "Rename me!"], 95 [TextInputFieldType.None, TextInputFieldType.ASCIIText]); 96 listView_modules.refresh(); 97 //adk.eventStack.addToTop(new AddModuleEvent(adk.mcfg, me.itemSource, me.itemSource)); 98 } 99 private void button_addNode_onClick(Event e) { 100 listView_routing ~= new ListViewItem(16, ["!NONE!", "!NONE!"], 101 [TextInputFieldType.ASCIIText, TextInputFieldType.ASCIIText]); 102 listView_routing.refresh(); 103 } 104 private void listView_modules_onTextEdit(Event e) { 105 //CellEditEvent ce = cast(CellEditEvent)e; 106 ListViewItem item = cast(ListViewItem)e.aux; 107 adk.eventStack.addToTop(new AddModuleEvent(adk.mcfg, item[0].getText().to!string, item[1].getText().to!string)); 108 } 109 private void listView_routing_onTextEdit(Event e) { 110 ListViewItem item = cast(ListViewItem)e.aux; 111 if (item[0].getText != "!NONE!" && item[1].getText != "!NONE!") { 112 adk.eventStack.addToTop(new AddRoutingNodeEvent(adk.mcfg, item[0].getText().to!string, item[1].getText().to!string)); 113 } 114 } 115 }