Add F2 shortcut for renaming the selected layer (#3641)
* add keyboard shortcuts for renaming layers * apply reviewed suggestions * Add todo comment --------- Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
parent
b433ddd007
commit
9bf3605b85
|
|
@ -106,6 +106,7 @@
|
||||||
addEventListener("pointermove", draggingPointerMove);
|
addEventListener("pointermove", draggingPointerMove);
|
||||||
addEventListener("mousedown", draggingMouseDown);
|
addEventListener("mousedown", draggingMouseDown);
|
||||||
addEventListener("keydown", draggingKeyDown);
|
addEventListener("keydown", draggingKeyDown);
|
||||||
|
addEventListener("keydown", handleLayerPanelKeyDown);
|
||||||
|
|
||||||
addEventListener("pointermove", clippingHover);
|
addEventListener("pointermove", clippingHover);
|
||||||
addEventListener("keydown", clippingKeyPress);
|
addEventListener("keydown", clippingKeyPress);
|
||||||
|
|
@ -123,6 +124,7 @@
|
||||||
removeEventListener("pointermove", draggingPointerMove);
|
removeEventListener("pointermove", draggingPointerMove);
|
||||||
removeEventListener("mousedown", draggingMouseDown);
|
removeEventListener("mousedown", draggingMouseDown);
|
||||||
removeEventListener("keydown", draggingKeyDown);
|
removeEventListener("keydown", draggingKeyDown);
|
||||||
|
removeEventListener("keydown", handleLayerPanelKeyDown);
|
||||||
|
|
||||||
removeEventListener("pointermove", clippingHover);
|
removeEventListener("pointermove", clippingHover);
|
||||||
removeEventListener("keydown", clippingKeyPress);
|
removeEventListener("keydown", clippingKeyPress);
|
||||||
|
|
@ -431,6 +433,49 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function handleLayerPanelKeyDown(e: KeyboardEvent) {
|
||||||
|
// TODO: Handle this F2 shortcut detection in the backend, not frontend, so it uses the standard key binding system
|
||||||
|
|
||||||
|
// Only handle F2 if not currently editing a layer name
|
||||||
|
if (e.key === "F2" && !layers.some((layer) => layer.editingName)) {
|
||||||
|
// Find the first selected layer
|
||||||
|
const selectedLayer = layers.find((layer) => layer.entry.selected);
|
||||||
|
if (selectedLayer) {
|
||||||
|
e.preventDefault();
|
||||||
|
onEditLayerName(selectedLayer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function navigateToLayer(currentListing: LayerListingInfo, direction: "Up" | "Down") {
|
||||||
|
// Save the current layer name
|
||||||
|
const inputElement = document.activeElement;
|
||||||
|
if (inputElement instanceof HTMLInputElement) {
|
||||||
|
const name = inputElement.value || "";
|
||||||
|
editor.handle.setLayerName(currentListing.entry.id, name);
|
||||||
|
currentListing.entry.alias = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find current layer index
|
||||||
|
const currentIndex = layers.findIndex((layer) => layer.entry.id === currentListing.entry.id);
|
||||||
|
if (currentIndex === -1) return;
|
||||||
|
|
||||||
|
// Calculate target index based on direction
|
||||||
|
const targetIndex = direction === "Down" ? currentIndex + 1 : currentIndex - 1;
|
||||||
|
if (targetIndex >= layers.length || targetIndex < 0) return;
|
||||||
|
|
||||||
|
const targetListing = layers[targetIndex];
|
||||||
|
if (!targetListing) return;
|
||||||
|
|
||||||
|
// Exit edit mode on current layer
|
||||||
|
currentListing.editingName = false;
|
||||||
|
draggable = true;
|
||||||
|
layers = layers;
|
||||||
|
|
||||||
|
// Start edit mode on target layer
|
||||||
|
await onEditLayerName(targetListing);
|
||||||
|
}
|
||||||
|
|
||||||
function fileDragOver(e: DragEvent) {
|
function fileDragOver(e: DragEvent) {
|
||||||
if (!draggable || !e.dataTransfer || !e.dataTransfer.types.includes("Files")) return;
|
if (!draggable || !e.dataTransfer || !e.dataTransfer.types.includes("Files")) return;
|
||||||
|
|
||||||
|
|
@ -572,8 +617,22 @@
|
||||||
placeholder={listing.entry.implementationName}
|
placeholder={listing.entry.implementationName}
|
||||||
disabled={!listing.editingName}
|
disabled={!listing.editingName}
|
||||||
on:blur={() => onEditLayerNameDeselect(listing)}
|
on:blur={() => onEditLayerNameDeselect(listing)}
|
||||||
on:keydown={(e) => e.key === "Escape" && onEditLayerNameDeselect(listing)}
|
on:keydown={(e) => {
|
||||||
on:keydown={(e) => e.key === "Enter" && onEditLayerNameChange(listing, e)}
|
if (e.key === "Escape") {
|
||||||
|
onEditLayerNameDeselect(listing);
|
||||||
|
} else if (e.key === "Enter") {
|
||||||
|
onEditLayerNameChange(listing, e);
|
||||||
|
} else if (e.key === "Tab") {
|
||||||
|
e.preventDefault();
|
||||||
|
navigateToLayer(listing, e.shiftKey ? "Up" : "Down");
|
||||||
|
} else if (e.key === "ArrowUp") {
|
||||||
|
e.preventDefault();
|
||||||
|
navigateToLayer(listing, "Up");
|
||||||
|
} else if (e.key === "ArrowDown") {
|
||||||
|
e.preventDefault();
|
||||||
|
navigateToLayer(listing, "Down");
|
||||||
|
}
|
||||||
|
}}
|
||||||
on:change={(e) => onEditLayerNameChange(listing, e)}
|
on:change={(e) => onEditLayerNameChange(listing, e)}
|
||||||
/>
|
/>
|
||||||
</LayoutRow>
|
</LayoutRow>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue