From 14c2a3b6587b764987ee16a0a3c83e99ada0e2ea Mon Sep 17 00:00:00 2001 From: JotaChina Date: Sat, 27 Dec 2025 20:32:22 -0300 Subject: [PATCH] adicionando instrumentos no editor de patterns --- assets/js/creations/main.js | 18 +++++++--- assets/js/creations/pattern/pattern_state.js | 2 +- assets/js/creations/pattern/pattern_ui.js | 37 ++++++++++++-------- assets/js/creations/state.js | 4 +-- 4 files changed, 39 insertions(+), 22 deletions(-) diff --git a/assets/js/creations/main.js b/assets/js/creations/main.js index 05d0fa97..2d6080e2 100755 --- a/assets/js/creations/main.js +++ b/assets/js/creations/main.js @@ -698,7 +698,11 @@ document.addEventListener("DOMContentLoaded", () => { (appState.audio.audioEditorSeekTime ?? 0) || 0; - const patternIndex = appState.pattern.activePatternIndex || 0; + const patternIndex = appState.pattern.activePatternIndex; + if (!Number.isInteger(patternIndex)) { + showToast("Selecione uma pattern antes de enviar.", "error"); + return; + } let posTicks = secondsToSongTicks(sec, bpm); posTicks = snapSongTicks(posTicks, LMMS_TICKS_PER_BAR); // snap por compasso (fica LMMS-like) @@ -714,10 +718,14 @@ document.addEventListener("DOMContentLoaded", () => { window.exitPatternFocus = function() { - console.log("Saindo do foco da Bassline"); - appState.pattern.focusedBasslineId = null; - renderAll(); - } + console.log("Saindo do foco da Bassline"); + appState.pattern.focusedBasslineId = null; + + // ✅ sem pattern selecionada no Song Editor + appState.pattern.activePatternIndex = null; + + renderAll(); + } loadAndRenderSampleBrowser(); diff --git a/assets/js/creations/pattern/pattern_state.js b/assets/js/creations/pattern/pattern_state.js index c25c6c90..7d7c95c7 100755 --- a/assets/js/creations/pattern/pattern_state.js +++ b/assets/js/creations/pattern/pattern_state.js @@ -26,7 +26,7 @@ export function initializePatternState() { appState.pattern.tracks = []; appState.pattern.activeTrackId = null; - appState.pattern.activePatternIndex = 0; + appState.pattern.activePatternIndex = null; } export async function loadAudioForTrack(track) { diff --git a/assets/js/creations/pattern/pattern_ui.js b/assets/js/creations/pattern/pattern_ui.js index b1e47e54..5f2b767f 100755 --- a/assets/js/creations/pattern/pattern_ui.js +++ b/assets/js/creations/pattern/pattern_ui.js @@ -323,21 +323,30 @@ export function updateGlobalPatternSelector() { globalPatternSelector.innerHTML = ''; if (referenceTrack && referenceTrack.patterns && referenceTrack.patterns.length > 0) { - referenceTrack.patterns.forEach((pattern, index) => { - const option = document.createElement('option'); - option.value = index; - option.textContent = pattern.name; - globalPatternSelector.appendChild(option); - }); + const isFocused = !!appState.pattern.focusedBasslineId; + const hasSelection = Number.isInteger(appState.pattern.activePatternIndex); - if (isFocused) { - globalPatternSelector.value = appState.pattern.activePatternIndex || 0; - } else if (activeTrack) { - globalPatternSelector.value = activeTrack.activePatternIndex || 0; - } else { - globalPatternSelector.value = 0; - } - globalPatternSelector.disabled = false; + globalPatternSelector.innerHTML = ''; + + if (!isFocused && !hasSelection) { + const ph = document.createElement('option'); + ph.value = ''; + ph.textContent = 'Selecione uma pattern…'; + ph.disabled = true; + ph.selected = true; + globalPatternSelector.appendChild(ph); + } + + referenceTrack.patterns.forEach((pattern, index) => { + const option = document.createElement('option'); + option.value = index; + option.textContent = pattern.name; + globalPatternSelector.appendChild(option); + }); + + // ✅ em vez de forçar 0 + globalPatternSelector.value = hasSelection ? String(appState.pattern.activePatternIndex) : ''; + globalPatternSelector.disabled = false; } else { const option = document.createElement('option'); option.textContent = 'Sem patterns'; diff --git a/assets/js/creations/state.js b/assets/js/creations/state.js index 87ab7339..fcda4fce 100755 --- a/assets/js/creations/state.js +++ b/assets/js/creations/state.js @@ -12,7 +12,7 @@ import { DEFAULT_VOLUME, DEFAULT_PAN } from "./config.js"; const patternState = { tracks: [], activeTrackId: null, - activePatternIndex: 0, + activePatternIndex: null, }; const globalState = { @@ -164,7 +164,7 @@ export function resetProjectState() { Object.assign(appState.pattern, { tracks: [], activeTrackId: null, - activePatternIndex: 0, + activePatternIndex: null, focusedBasslineId: null, });