aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/GlobalKeyHandler.ts
diff options
context:
space:
mode:
authorbobzel <zzzman@gmail.com>2023-11-16 14:57:29 -0500
committerbobzel <zzzman@gmail.com>2023-11-16 14:57:29 -0500
commitf00096cea4613c13672ba5dbc0bd60c461c92603 (patch)
tree1f2838b628e1a0847ce9793a5765de7b13224301 /src/client/views/GlobalKeyHandler.ts
parent570e96292219a7c7c9fe496ba0606cc6b9f72abf (diff)
fixed alt-drag to toggle scroll mode. fixed replaceTab to work properly with panelNames. made slides pointing to trails open the target trails in situ. cleaned up code when starting drag to call freeformview more nicel. fixed brush/highlight of tabs. made collectionFreeformView/FreeformDocs use a more robust and simpler approach to caching freeform values.
Diffstat (limited to 'src/client/views/GlobalKeyHandler.ts')
-rw-r--r--src/client/views/GlobalKeyHandler.ts111
1 files changed, 44 insertions, 67 deletions
diff --git a/src/client/views/GlobalKeyHandler.ts b/src/client/views/GlobalKeyHandler.ts
index aa0683964..13791b763 100644
--- a/src/client/views/GlobalKeyHandler.ts
+++ b/src/client/views/GlobalKeyHandler.ts
@@ -84,41 +84,39 @@ export class KeyManager {
}
});
+ nudge = (x: number, y: number, label: string) => {
+ const nudgeable = SelectionManager.Views().some(dv => dv.CollectionFreeFormDocumentView?.nudge);
+ nudgeable && UndoManager.RunInBatch(() => SelectionManager.Views().map(dv => dv.CollectionFreeFormDocumentView?.nudge(x, y)), label);
+ return { stopPropagation: nudgeable, preventDefault: nudgeable };
+ };
+
private unmodified = action((keyname: string, e: KeyboardEvent) => {
- const hasFffView = SelectionManager.Views().some(dv => dv.props.CollectionFreeFormDocumentView?.());
switch (keyname) {
case 'u':
- if (document.activeElement?.tagName === 'INPUT' || document.activeElement?.tagName === 'TEXTAREA') {
- return { stopPropagation: false, preventDefault: false };
+ if (document.activeElement?.tagName !== 'INPUT' && document.activeElement?.tagName !== 'TEXTAREA') {
+ const ungroupings = SelectionManager.Views().slice();
+ UndoManager.RunInBatch(() => ungroupings.map(dv => (dv.layoutDoc.group = undefined)), 'ungroup');
+ SelectionManager.DeselectAll();
}
-
- const ungroupings = SelectionManager.Views().slice();
- UndoManager.RunInBatch(() => ungroupings.map(dv => (dv.layoutDoc.group = undefined)), 'ungroup');
- SelectionManager.DeselectAll();
break;
case 'g':
- if (document.activeElement?.tagName === 'INPUT' || document.activeElement?.tagName === 'TEXTAREA') {
- return { stopPropagation: false, preventDefault: false };
- }
-
- const groupings = SelectionManager.Views().slice();
- const randomGroup = random(0, 1000);
- const collectionView = groupings.reduce(
- (col, g) => (col === null || g.props.CollectionFreeFormDocumentView?.().props.CollectionFreeFormView === col ? g.props.CollectionFreeFormDocumentView?.().props.CollectionFreeFormView : undefined),
- null as null | undefined | CollectionFreeFormView
- );
- if (collectionView) {
- UndoManager.RunInBatch(() => {
- collectionView._marqueeViewRef.current?.collection(
- e,
- true,
- groupings.map(g => g.rootDoc)
- );
- }, 'grouping');
- break;
+ if (document.activeElement?.tagName !== 'INPUT' && document.activeElement?.tagName !== 'TEXTAREA') {
+ const groupings = SelectionManager.Views().slice();
+ const randomGroup = random(0, 1000);
+ const collectionView = groupings.reduce((col, g) => (col === null || g.CollectionFreeFormView === col ? g.CollectionFreeFormView : undefined), null as null | undefined | CollectionFreeFormView);
+ if (collectionView) {
+ UndoManager.RunInBatch(() => {
+ collectionView._marqueeViewRef.current?.collection(
+ e,
+ true,
+ groupings.map(g => g.rootDoc)
+ );
+ }, 'grouping');
+ break;
+ }
+ UndoManager.RunInBatch(() => groupings.map(dv => (dv.layoutDoc.group = randomGroup)), 'group');
+ SelectionManager.DeselectAll();
}
- UndoManager.RunInBatch(() => groupings.map(dv => (dv.layoutDoc.group = randomGroup)), 'group');
- SelectionManager.DeselectAll();
break;
case ' ':
// MarqueeView.DragMarquee = !MarqueeView.DragMarquee; // bcz: this needs a better disclosure UI
@@ -167,19 +165,11 @@ export class KeyManager {
return { stopPropagation: true, preventDefault: true };
}
break;
- case 'arrowleft':
- UndoManager.RunInBatch(() => SelectionManager.Views().map(dv => dv.props.CollectionFreeFormDocumentView?.().nudge(-1, 0)), 'nudge left');
- return { stopPropagation: hasFffView, preventDefault: hasFffView };
- case 'arrowright':
- UndoManager.RunInBatch(() => SelectionManager.Views().map(dv => dv.props.CollectionFreeFormDocumentView?.().nudge?.(1, 0)), 'nudge right');
- return { stopPropagation: hasFffView, preventDefault: hasFffView };
- case 'arrowup':
- UndoManager.RunInBatch(() => SelectionManager.Views().map(dv => dv.props.CollectionFreeFormDocumentView?.().nudge?.(0, -1)), 'nudge up');
- return { stopPropagation: hasFffView, preventDefault: hasFffView };
- case 'arrowdown':
- UndoManager.RunInBatch(() => SelectionManager.Views().map(dv => dv.props.CollectionFreeFormDocumentView?.().nudge?.(0, 1)), 'nudge down');
- return { stopPropagation: hasFffView, preventDefault: hasFffView };
- }
+ case 'arrowleft': return this.nudge(-1,0, 'nudge left')
+ case 'arrowright': return this.nudge(1,0, 'nudge right');
+ case 'arrowup': return this.nudge(0, -1, 'nudge up');
+ case 'arrowdown': return this.nudge(0, 1, 'nudge down');
+ } // prettier-ignore
return {
stopPropagation: false,
@@ -188,37 +178,24 @@ export class KeyManager {
});
private shift = action((keyname: string) => {
- const stopPropagation = false;
- const preventDefault = false;
-
switch (keyname) {
- case 'arrowleft':
- UndoManager.RunInBatch(() => SelectionManager.Views().map(dv => dv.props.CollectionFreeFormDocumentView?.().nudge?.(-10, 0)), 'nudge left');
- break;
- case 'arrowright':
- UndoManager.RunInBatch(() => SelectionManager.Views().map(dv => dv.props.CollectionFreeFormDocumentView?.().nudge?.(10, 0)), 'nudge right');
- break;
- case 'arrowup':
- UndoManager.RunInBatch(() => SelectionManager.Views().map(dv => dv.props.CollectionFreeFormDocumentView?.().nudge?.(0, -10)), 'nudge up');
- break;
- case 'arrowdown':
- UndoManager.RunInBatch(() => SelectionManager.Views().map(dv => dv.props.CollectionFreeFormDocumentView?.().nudge?.(0, 10)), 'nudge down');
- break;
+ case 'arrowleft': return this.nudge(-10,0, 'nudge left');
+ case 'arrowright': return this.nudge(10, 0, 'nudge right');
+ case 'arrowup': return this.nudge(0, -10, 'nudge up');
+ case 'arrowdown': return this.nudge(0, 10, 'nudge down');
case 'g':
- if (document.activeElement?.tagName === 'INPUT' || document.activeElement?.tagName === 'TEXTAREA') {
- return { stopPropagation: false, preventDefault: false };
+ if (document.activeElement?.tagName !== 'INPUT' && document.activeElement?.tagName !== 'TEXTAREA') {
+ const groupings = SelectionManager.Views().slice();
+ const randomGroup = random(0, 1000);
+ UndoManager.RunInBatch(() => groupings.map(dv => (dv.layoutDoc.group = randomGroup)), 'group');
+ SelectionManager.DeselectAll();
}
-
- const groupings = SelectionManager.Views().slice();
- const randomGroup = random(0, 1000);
- UndoManager.RunInBatch(() => groupings.map(dv => (dv.layoutDoc.group = randomGroup)), 'group');
- SelectionManager.DeselectAll();
break;
- }
+ } // prettier-ignore
return {
- stopPropagation: stopPropagation,
- preventDefault: preventDefault,
+ stopPropagation: false,
+ preventDefault: false,
};
});
@@ -230,7 +207,7 @@ export class KeyManager {
case 'ƒ':
case 'f':
const dv = SelectionManager.Views()?.[0];
- UndoManager.RunInBatch(() => dv.props.CollectionFreeFormDocumentView?.().float(), 'float');
+ UndoManager.RunInBatch(() => dv.CollectionFreeFormDocumentView?.float(), 'float');
}
return {