finished first editor implementation

master
Michael Ochmann 1 year ago
parent 6073710de5
commit b29a8ed78a
  1. 10
      src/ui/src/components/Ation.js
  2. 15
      src/ui/src/components/KeyboardControl.js
  3. 2
      src/ui/src/components/Tips.js
  4. 4
      src/ui/src/components/Toolbar.js

@ -1,4 +1,4 @@
import React, {useEffect, useState, useContext} from "react"; import React, {useEffect, useState, useContext, useCallback} from "react";
import SlidesList from "./SlidesList"; import SlidesList from "./SlidesList";
import Mode from "../models/Mode"; import Mode from "../models/Mode";
@ -49,14 +49,14 @@ const Ation = () => {
const openFile = () => { const openFile = () => {
window.api.openFileDialog(); window.api.openFileDialog();
} };
const toggleEdit = () => { const toggleEdit = useCallback(() => {
if (mode === Mode.NORMAL) if (mode === Mode.NORMAL)
setMode(Mode.EDIT); setMode(Mode.EDIT);
else if (mode === Mode.EDIT) else if (mode === Mode.EDIT)
setMode(Mode.NORMAL); setMode(Mode.NORMAL);
} }, [mode]);
return ( return (
<> <>
@ -65,7 +65,7 @@ const Ation = () => {
: ( : (
<SlideContext.Provider value={{slide, setSlide, mode, setMode, basePath, slideCount : deck.length}}> <SlideContext.Provider value={{slide, setSlide, mode, setMode, basePath, slideCount : deck.length}}>
<section className={`window${mode === Mode.PRESENT ? " fullscreen" : ""}`}> <section className={`window${mode === Mode.PRESENT ? " fullscreen" : ""}`}>
<Toolbar openFile={openFile} setShowTips={setShowTips} version={version} /> <Toolbar openFile={openFile} setShowTips={setShowTips} version={version} toggleEdit={toggleEdit} />
<SlidesList deck={deck} meta={meta} font={font} /> <SlidesList deck={deck} meta={meta} font={font} />
<main className={`main ${mode === Mode.EDIT ? "edit" : ""}`} style={{ <main className={`main ${mode === Mode.EDIT ? "edit" : ""}`} style={{
"--color-hightlight" : meta?.color_highlight || highlightColor, "--color-hightlight" : meta?.color_highlight || highlightColor,

@ -18,6 +18,8 @@ const KeyboardControl = ({openFile, mode, setMode, deck, setShowTips, toggleEdit
} }
const keyHandler = event => { const keyHandler = event => {
const commandOrControl = event.metaKey || event.ctrlKey;
switch(event.key) { switch(event.key) {
case "Escape": case "Escape":
setShowTips(false); setShowTips(false);
@ -25,7 +27,13 @@ const KeyboardControl = ({openFile, mode, setMode, deck, setShowTips, toggleEdit
default: default:
break; break;
} }
if (!mode || !setMode || !deck || !setShowTips) if (!mode || !setMode || !deck || !setShowTips)
return;
if (commandOrControl && event.key === "e")
toggleEdit();
if (mode === Mode.EDIT)
return; return;
switch (event.key) { switch (event.key) {
@ -65,9 +73,6 @@ const KeyboardControl = ({openFile, mode, setMode, deck, setShowTips, toggleEdit
event.preventDefault(); event.preventDefault();
setShowTips(true); setShowTips(true);
break; break;
case "e":
toggleEdit();
break;
default: default:
return; return;
} }
@ -88,7 +93,7 @@ const KeyboardControl = ({openFile, mode, setMode, deck, setShowTips, toggleEdit
window.removeEventListener("fullscreenchange", fullscreenHandler); window.removeEventListener("fullscreenchange", fullscreenHandler);
} }
}, [slide, setSlide, mode, setMode, deck, setShowTips, openFile]); }, [slide, setSlide, mode, setMode, deck, setShowTips, openFile, toggleEdit]);
}; };
export default KeyboardControl; export default KeyboardControl;

@ -6,7 +6,7 @@ const Cheatsheet = Object.freeze([
["Open file", "⌘+O"], ["Open file", "⌘+O"],
["Close file", "⌘+W"], ["Close file", "⌘+W"],
["Save file", "⌘+S"], ["Save file", "⌘+S"],
["Toggle editor", "e"], ["Toggle editor", "⌘+E"],
["Next slide", "→, Page up"], ["Next slide", "→, Page up"],
["Last slide", "←, Page down"], ["Last slide", "←, Page down"],
["Black screen out", "B"], ["Black screen out", "B"],

@ -14,7 +14,7 @@ const Toolbar = ({openFile, setShowTips, version, toggleEdit}) => {
setMode(Mode.PRESENT); setMode(Mode.PRESENT);
setSlide(0); setSlide(0);
document.documentElement.requestFullscreen(); document.documentElement.requestFullscreen();
} };
return ( return (
<nav className="toolbar"> <nav className="toolbar">
@ -23,7 +23,7 @@ const Toolbar = ({openFile, setShowTips, version, toggleEdit}) => {
<Logo /> <Logo />
<button onClick={() => window.api.closeFile()} title="Close file [⌘+W]" disabled={slideCount < 1}><XSquare /></button> <button onClick={() => window.api.closeFile()} title="Close file [⌘+W]" disabled={slideCount < 1}><XSquare /></button>
<button onClick={() => setShowTips(true)} title="Show tips [TAB]"><InfoCircle /></button> <button onClick={() => setShowTips(true)} title="Show tips [TAB]"><InfoCircle /></button>
<button onClick={toggleEdit} title="Toggle editor [e]"><LayoutSplit /></button> <button onClick={toggleEdit} title="Toggle editor [⌘+E]"><LayoutSplit /></button>
<small>v{version}</small> <small>v{version}</small>
</nav> </nav>
); );

Loading…
Cancel
Save