import * as MODULE from "../MaterialDeck.js"; import {macroControl,soundboard,playlistControl} from "../MaterialDeck.js"; export class playlistConfigForm extends FormApplication { constructor(data, options) { super(data, options); this.data = data; this.playlistNr; this.updatePlaylistNr = false; } /** * Default Options for this FormApplication */ static get defaultOptions() { return mergeObject(super.defaultOptions, { id: "playlist-config", title: "Material Deck: "+game.i18n.localize("MaterialDeck.Sett.PlaylistConfig"), template: "./modules/MaterialDeck/templates/playlistConfig.html", classes: ["sheet"], width: 500 }); } /** * Provide data to the template */ getData() { let settings = game.settings.get(MODULE.moduleName,'playlists'); let selectedPlaylists = settings.selectedPlaylist; if (selectedPlaylists == undefined) selectedPlaylists = []; let selectedPlaylistMode = settings.playlistMode; if (selectedPlaylistMode == undefined) selectedPlaylistMode = []; let numberOfPlaylists = settings.playlistNumber; if (this.updatePlaylistNr) numberOfPlaylists = this.playlistNr; if (numberOfPlaylists == undefined) numberOfPlaylists = 9; let playMode = settings.playMode; if (playMode == undefined) playMode = 0; let playlistData = []; this.updatePlaylistNr = false; for (let i=0; i { this.data.playMode=event.target.value; this.updateSettings(this.data); }); numberOfPlaylists.on("change", event => { this.playlistNr = event.target.value; this.updatePlaylistNr = true; this.data.playlistNumber=event.target.value; this.updateSettings(this.data); }); selectedPlaylist.on("change", event => { let id = event.target.id.replace('playlist',''); this.data.selectedPlaylist[id-1]=event.target.value; this.updateSettings(this.data); }); playlistMode.on("change", event => { let id = event.target.id.replace('playlistMode',''); this.data.playlistMode[id-1]=event.target.value; this.updateSettings(this.data); }); } async updateSettings(settings){ await game.settings.set(MODULE.moduleName,'playlists', settings); if (MODULE.enableModule) playlistControl.updateAll(); this.render(); } } ////////////////////////////////////////////////////////////////////////////////////////////////////////////// export class macroConfigForm extends FormApplication { constructor(data, options) { super(data, options); this.data = data; } /** * Default Options for this FormApplication */ static get defaultOptions() { /* let streamDeckModel = game.settings.get(MODULE.moduleName,'streamDeckModel'); let width; if (streamDeckModel == 0) width = 550; else if (streamDeckModel == 1) width= 1500; else width = 1400; */ return mergeObject(super.defaultOptions, { id: "macro-config", title: "Material Deck: "+game.i18n.localize("MaterialDeck.Sett.MacroConfig"), template: "./modules/MaterialDeck/templates/macroConfig.html", classes: ["sheet"] }); } /** * Provide data to the template */ getData() { var selectedMacros = game.settings.get(MODULE.moduleName,'macroSettings').macros; var color = game.settings.get(MODULE.moduleName,'macroSettings').color; var args = game.settings.get(MODULE.moduleName,'macroSettings').args; if (selectedMacros == undefined) selectedMacros = []; if (color == undefined) color = []; if (args == undefined) args = []; let macroData = []; let furnaceEnabled = false; let furnace = game.modules.get("furnace"); if (furnace != undefined && furnace.active) furnaceEnabled = true; let height = 95; if (furnaceEnabled) height += 50; let streamDeckModel = game.settings.get(MODULE.moduleName,'streamDeckModel'); let iMax,jMax; if (streamDeckModel == 0){ jMax = 6; iMax = 3; } else if (streamDeckModel == 1){ jMax = 6; iMax = 5; } else { jMax = 8; iMax = 8; } let iteration = 0; for (let j=0; j15) colorCorrect = false; } if (colorCorrect == false) colorThis = '#000000'; } else colorThis = '#000000'; let dataThis = { iteration: iteration+1, macro: selectedMacros[iteration], color: colorThis, macros:game.macros, args: args[iteration], furnace: furnaceEnabled } macroThis.push(dataThis); iteration++; } let data = { dataThis: macroThis, }; macroData.push(data); } return { height: height, macros: game.macros, selectedMacros: selectedMacros, macroData: macroData, } } /** * Update on form submit * @param {*} event * @param {*} formData */ async _updateObject(event, formData) { } activateListeners(html) { super.activateListeners(html); const macro = html.find("select[name='macros']"); const args = html.find("input[name='args']"); const color = html.find("input[name='colorPicker']"); macro.on("change", event => { let id = event.target.id.replace('macros',''); let settings = game.settings.get(MODULE.moduleName,'macroSettings'); settings.macros[id-1]=event.target.value; this.updateSettings(settings); }); args.on("change", event => { let id = event.target.id.replace('args',''); let settings = game.settings.get(MODULE.moduleName,'macroSettings'); settings.args[id-1]=event.target.value; this.updateSettings(settings); }); color.on("change", event => { let id = event.target.id.replace('colorpicker',''); let settings = game.settings.get(MODULE.moduleName,'macroSettings'); settings.color[id-1]=event.target.value; this.updateSettings(settings); }); } async updateSettings(settings){ await game.settings.set(MODULE.moduleName,'macroSettings',settings); if (MODULE.enableModule) macroControl.updateAll(); this.render(); } } ////////////////////////////////////////////////////////////////////////////////////////////////////////////// export class soundboardConfigForm extends FormApplication { constructor(data, options) { super(data, options); this.data = data; this.playlists = []; this.updatePlaylist = false; this.update = false; this.iMax; this.jMax; this.settings = {}; } /** * Default Options for this FormApplication */ static get defaultOptions() { /* let streamDeckModel = game.settings.get(MODULE.moduleName,'streamDeckModel'); let width; if (streamDeckModel == 0) width = 550; else if (streamDeckModel == 1) width= 885; else width = 1400; */ return mergeObject(super.defaultOptions, { id: "soundboard-config", title: "Material Deck: "+game.i18n.localize("MaterialDeck.Sett.SoundboardConfig"), template: "./modules/MaterialDeck/templates/soundboardConfig.html", classes: ["sheet"], height: 720 }); } getArray(data){ let array = [data.a,data.b,data.c,data.d,data.e,data.f,data.g,data.h]; return array; } /** * Provide data to the template */ getData() { if (this.update) { this.update=false; return {soundData: this.data}; } this.settings = game.settings.get(MODULE.moduleName,'soundboardSettings'); let playlists = []; playlists.push({id:"none",name:game.i18n.localize("MaterialDeck.None")}); playlists.push({id:"FP",name:game.i18n.localize("MaterialDeck.FilePicker")}) for (let i=0; i p._id == this.settings.selectedPlaylists[iteration]); selectedPlaylist = pl._id; sounds = pl.sounds; } let styleSS = ""; let styleFP ="display:none"; if (selectedPlaylist == 'FP') { styleSS = 'display:none'; styleFP = '' } let dataThis = { iteration: iteration+1, playlists: playlists, selectedPlaylist: selectedPlaylist, sound: this.settings.sounds[iteration], sounds: sounds, srcPath: this.settings.src[iteration], colorOn: this.settings.colorOn[iteration], colorOff: this.settings.colorOff[iteration], mode: this.settings.mode[iteration], volume: this.settings.volume[iteration], imgPath: this.settings.img[iteration], name: this.settings.name[iteration], styleSS: styleSS, styleFP: styleFP } soundsThis.push(dataThis); iteration++; } let data = { dataThis: soundsThis, }; soundData.push(data); } this.data = soundData; return { soundData: this.data } } /** * Update on form submit * @param {*} event * @param {*} formData */ async _updateObject(event, formData) { } async activateListeners(html) { super.activateListeners(html); const nameField = html.find("input[name='namebox']"); const playlistSelect = html.find("select[name='playlist']"); const soundSelect = html.find("select[name='sounds']"); const soundFP = html.find("input[name2='soundSrc']"); const imgFP = html.find("input[name2='imgSrc']"); const onCP = html.find("input[name='colorOn']"); const offCP = html.find("input[name='colorOff']"); const playMode = html.find("select[name='mode']"); const volume = html.find("input[name='volume']"); nameField.on("change",event => { let id = event.target.id.replace('name','')-1; let j = Math.floor(id/this.jMax); let i = id % this.jMax; this.data[j].dataThis[i].name=event.target.value; this.update = true; this.settings.name[id]=event.target.value; this.updateSettings(this.settings); }); if (playlistSelect.length > 0) { playlistSelect.on("change", event => { let id = event.target.id.replace('playlists','')-1; let j = Math.floor(id/this.jMax); let i = id % this.jMax; this.data[j].dataThis[i].selectedPlaylist=event.target.value; let selectedPlaylist; let sounds = []; if (event.target.value==undefined) selectedPlaylist = 'none'; else if (event.target.value == 'none') selectedPlaylist = 'none'; else if (event.target.value == 'FP') selectedPlaylist = 'FP'; else { const pl = game.playlists.entities.find(p => p._id == event.target.value); selectedPlaylist = pl._id; sounds = pl.sounds; } this.data[j].dataThis[i].sounds=sounds; let styleSS = ""; let styleFP ="display:none"; if (selectedPlaylist == 'FP') { styleSS = 'display:none'; styleFP = '' } this.data[j].dataThis[i].styleSS=styleSS; this.data[j].dataThis[i].styleFP=styleFP; this.update = true; this.settings.selectedPlaylists[id]=event.target.value; this.updateSettings(this.settings); }); } soundSelect.on("change", event => { let id = event.target.id.replace('soundSelect','')-1; let j = Math.floor(id/this.jMax); let i = id % this.jMax; this.data[j].dataThis[i].sound=event.target.value; this.update = true; this.settings.sounds[id]=event.target.value; this.updateSettings(this.settings); }); soundFP.on("change",event => { let id = event.target.id.replace('srcPath','')-1; let j = Math.floor(id/this.jMax); let i = id % this.jMax; this.data[j].dataThis[i].srcPath=event.target.value; this.update = true; this.settings.src[id]=event.target.value; this.updateSettings(this.settings); }); imgFP.on("change",event => { let id = event.target.id.replace('imgPath','')-1; let j = Math.floor(id/this.jMax); let i = id % this.jMax; this.data[j].dataThis[i].imgPath=event.target.value; this.update = true; this.settings.img[id]=event.target.value; this.updateSettings(this.settings); }); onCP.on("change",event => { let id = event.target.id.replace('colorOn','')-1; let j = Math.floor(id/this.jMax); let i = id % this.jMax; this.data[j].dataThis[i].colorOn=event.target.value; this.update = true; this.settings.colorOn[id]=event.target.value; this.updateSettings(this.settings); }); offCP.on("change",event => { let id = event.target.id.replace('colorOff','')-1; let j = Math.floor(id/this.jMax); let i = id % this.jMax; this.data[j].dataThis[i].colorOff=event.target.value; this.update = true; this.settings.colorOff[id]=event.target.value; this.updateSettings(this.settings); }); playMode.on("change",event => { let id = event.target.id.replace('playmode','')-1; let j = Math.floor(id/this.jMax); let i = id % this.jMax; this.data[j].dataThis[i].mode=event.target.value; this.update = true; this.settings.mode[id]=event.target.value; this.updateSettings(this.settings); }); volume.on("change",event => { let id = event.target.id.replace('volume','')-1; let j = Math.floor(id/this.jMax); let i = id % this.jMax; this.data[j].dataThis[i].volume=event.target.value; this.update = true; this.settings.volume[id]=event.target.value; this.updateSettings(this.settings); }); } async updateSettings(settings){ await game.settings.set(MODULE.moduleName,'soundboardSettings',settings); if (MODULE.enableModule) soundboard.updateAll(); this.render(); } }