Compare commits

..

2 Commits

Author SHA1 Message Date
Michael Ochmann c8e2f4636b window now maximizable by double click onto toolbar 1 year ago
Michael Ochmann b29a8ed78a finished first editor implementation 1 year ago
  1. 3
      contextAPI.js
  2. 1
      src/WindowManager.js
  3. 4
      src/ui/src/assets/css/_window.scss
  4. 12
      src/ui/src/components/Ation.js
  5. 15
      src/ui/src/components/KeyboardControl.js
  6. 2
      src/ui/src/components/Tips.js
  7. 10
      src/ui/src/components/Toolbar.js

@ -28,7 +28,8 @@ contextBridge.exposeInMainWorld("api", {
appVersion : async () => await ipcRenderer.invoke("Ation::appVersion"), appVersion : async () => await ipcRenderer.invoke("Ation::appVersion"),
fonts : async () => await ipcRenderer.invoke("FontManager::fonts"), fonts : async () => await ipcRenderer.invoke("FontManager::fonts"),
resize : size => ipcRenderer.invoke("WindowManager::resize", size), resize : size => ipcRenderer.invoke("WindowManager::resize", size),
fullscreen : fullscreen => ipcRenderer.invoke("WindowManager::presentFullscreen", fullscreen) fullscreen : fullscreen => ipcRenderer.invoke("WindowManager::presentFullscreen", fullscreen),
maximize : () => ipcRenderer.send("WindowManager::toggleMaximize")
}); });
contextBridge.exposeInMainWorld("appSettings", { contextBridge.exposeInMainWorld("appSettings", {

@ -18,6 +18,7 @@ class WindowManager {
ipcMain.on("WindowManager::openFileDialog", () => this.app.openFile()); ipcMain.on("WindowManager::openFileDialog", () => this.app.openFile());
ipcMain.on("WindowManager::openFile", (_, path) => this.app.openFile(path)); ipcMain.on("WindowManager::openFile", (_, path) => this.app.openFile(path));
ipcMain.on("WindowManager::toggleMaximize", () => this.mainWindow?.isMaximized() ? this.mainWindow?.unmaximize() : this.mainWindow?.maximize());
ipcMain.handle("WindowManager::resize", (_, height) => this.windows.settings.setSize(800, height + (process.platform === "win32" ? 50 : 0), true)); ipcMain.handle("WindowManager::resize", (_, height) => this.windows.settings.setSize(800, height + (process.platform === "win32" ? 50 : 0), true));
ipcMain.handle("WindowManager::presentFullscreen", (_, fullscreen) => this.windows.main.setFullScreen(fullscreen)); ipcMain.handle("WindowManager::presentFullscreen", (_, fullscreen) => this.windows.main.setFullScreen(fullscreen));
} }

@ -11,6 +11,10 @@
grid-column: 1 / span 2; grid-column: 1 / span 2;
} }
&.edit {
//grid-template-columns: 10% auto;
}
main { main {
background: color(mainBackground); background: color(mainBackground);
overflow-y: auto; overflow-y: auto;

@ -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 (
<> <>
@ -64,8 +64,8 @@ const Ation = () => {
<NoFile openFile={openFile} /> <NoFile openFile={openFile} />
: ( : (
<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" : (mode === Mode.EDIT ? " edit" : "")}`}>
<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,16 +14,20 @@ const Toolbar = ({openFile, setShowTips, version, toggleEdit}) => {
setMode(Mode.PRESENT); setMode(Mode.PRESENT);
setSlide(0); setSlide(0);
document.documentElement.requestFullscreen(); document.documentElement.requestFullscreen();
} };
const toggleMaximize = () => {
window.api.maximize();
};
return ( return (
<nav className="toolbar"> <nav className="toolbar" onDoubleClick={toggleMaximize}>
<button onClick={openFile} title="Open file [⌘+O]"><Folder2Open /></button> <button onClick={openFile} title="Open file [⌘+O]"><Folder2Open /></button>
<button onClick={present} title="Start presentation [F5]"><Cast /></button> <button onClick={present} title="Start presentation [F5]"><Cast /></button>
<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