feat: double-click component gates to edit their blueprint
Opens the component editor with the internal circuit loaded for modification. On save, updates the component definition and all existing instances in the main circuit. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
21
js/events.js
21
js/events.js
@@ -8,7 +8,7 @@ import { resize, screenToWorld } from './renderer.js';
|
||||
import { puzzleMode, currentLevel, showLevelPanel } from './puzzleUI.js';
|
||||
import { getLevel } from './levels.js';
|
||||
import { saveState, loadState, exportAsFile, importFromFile } from './saveLoad.js';
|
||||
import { enterComponentEditor, exitComponentEditor, updateComponentButtons, setResizeCallback } from './components.js';
|
||||
import { enterComponentEditor, editComponentBlueprint, exitComponentEditor, updateComponentButtons, setResizeCallback } from './components.js';
|
||||
import { getExampleList, loadExample } from './examples.js';
|
||||
|
||||
const PAN_SPEED = 40;
|
||||
@@ -147,11 +147,20 @@ export function initEvents() {
|
||||
dragStartPos = null;
|
||||
});
|
||||
|
||||
// Double-click to rename INPUT/OUTPUT/CLOCK gates
|
||||
// Double-click to rename INPUT/OUTPUT/CLOCK gates, or edit component blueprint
|
||||
canvas.addEventListener('dblclick', e => {
|
||||
const world = screenToWorld(e.offsetX, e.offsetY);
|
||||
const gate = findGateAt(world.x, world.y);
|
||||
if (gate && (gate.type === 'INPUT' || gate.type === 'OUTPUT' || gate.type === 'CLOCK')) {
|
||||
if (!gate) return;
|
||||
|
||||
// Double-click on component gate → edit its blueprint
|
||||
if (gate.type.startsWith('COMPONENT:') && gate.component) {
|
||||
editComponentBlueprint(gate);
|
||||
return;
|
||||
}
|
||||
|
||||
// Double-click on I/O gates → rename
|
||||
if (gate.type === 'INPUT' || gate.type === 'OUTPUT' || gate.type === 'CLOCK') {
|
||||
const current = gate.label || '';
|
||||
const label = prompt(`Label for ${gate.type}#${gate.id}:`, current);
|
||||
if (label !== null) {
|
||||
@@ -415,7 +424,11 @@ export function initEvents() {
|
||||
});
|
||||
|
||||
document.getElementById('component-editor-save').addEventListener('click', () => {
|
||||
const name = prompt('Component name:', 'MyComponent');
|
||||
// If editing existing, pre-fill with current name
|
||||
const existingName = state.editingComponentId
|
||||
? (state.customComponents[state.editingComponentId]?.name || 'MyComponent')
|
||||
: 'MyComponent';
|
||||
const name = prompt('Component name:', existingName);
|
||||
if (name && name.trim()) {
|
||||
exitComponentEditor(name.trim(), true);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user