From 46023c2f7d6ba466a34602e99cdf9dca58f9c36c Mon Sep 17 00:00:00 2001 From: Thijmen <129296225+ThijmenKetelaar@users.noreply.github.com> Date: Thu, 27 Feb 2025 11:02:54 +0100 Subject: [PATCH] add terminal en nieuwe blokken --- package.json | 2 +- src/lib/components/core/header/Header.svelte | 49 ++++- .../core/popups/popups/PythonUploader.svelte | 85 +++++---- .../core/popups/popups/TerminalPopup.svelte | 178 ++++++++++++++++++ src/lib/components/workspace/Workspace.svelte | 137 ++++++++------ src/lib/domain/blockly/toolbox.ts | 28 --- src/lib/state/workspace.svelte.ts | 3 +- yarn.lock | 8 +- 8 files changed, 347 insertions(+), 143 deletions(-) create mode 100644 src/lib/components/core/popups/popups/TerminalPopup.svelte diff --git a/package.json b/package.json index 8c2577f..e2abf7f 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "@fortawesome/free-solid-svg-icons": "6.6.0", "@leaphy-robotics/avrdude-webassembly": "1.7.0", "@leaphy-robotics/dfu-util-wasm": "^1.0.2", - "@leaphy-robotics/leaphy-blocks": "^3.2.1-python", + "@leaphy-robotics/leaphy-blocks": "3.2.2-python", "@leaphy-robotics/picotool-wasm": "1.0.3", "@leaphy-robotics/webusb-ftdi": "1.0.1", "@sentry/svelte": "8.0.0-beta.5", diff --git a/src/lib/components/core/header/Header.svelte b/src/lib/components/core/header/Header.svelte index 6ae91af..e0ee116 100644 --- a/src/lib/components/core/header/Header.svelte +++ b/src/lib/components/core/header/Header.svelte @@ -94,8 +94,12 @@ async function newProject() { } function serialize() { - if ($mode === Mode.BLOCKS) + if ($mode === Mode.BLOCKS) { return JSON.stringify(serialization.workspaces.save($workspace)); + } else if ($mode === Mode.PYTHONBLOCKS) { + // Serialiseer de werkruimte voor de Python-blocks modus + return JSON.stringify(serialization.workspaces.save($workspace)); // Of een andere specifieke functie + } return $code; } @@ -116,6 +120,7 @@ async function saveProjectAs() { let extension = $robot.id; if ($mode === Mode.ADVANCED) extension = "ino"; if ($mode === Mode.PYTHON) extension = "py"; + if ($mode === Mode.PYTHONBLOCKS) extension = "py.json"; const url = URL.createObjectURL( new Blob([serialize()], { type: "text/plain" }), @@ -144,14 +149,13 @@ async function openProject() { mode.set(Mode.PYTHON); robot.set(robots.l_nano_rp2040); code.set(await content.text()); - } else { - if (get(mode) === Mode.BLOCKS) { - loadWorkspaceFromString(await content.text(), $workspace); - } else { - restore.set(JSON.parse(await content.text())); - mode.set(Mode.BLOCKS); - } - robot.set(robots[file.name.split(".").at(-1)]); + } else if (file.name.endsWith(".py.json")) { + mode.set(Mode.PYTHONBLOCKS); + robot.set(robots.l_nano_rp2040); + loadWorkspaceFromString(await content.text(), $workspace); + } else if (file.name.endsWith(".json")) { + mode.set(Mode.BLOCKS); + loadWorkspaceFromString(await content.text(), $workspace); } } @@ -290,6 +294,14 @@ function runPython() { const io = get(microPythonIO); microPythonRun.set(io.runCode(get(code))); } + +function switchToPythonCode() { + mode.set(Mode.PYTHON); +} + +function switchToPythonBlocks() { + mode.set(Mode.PYTHONBLOCKS); +} {#snippet projectContext(open: Writable)} @@ -417,7 +429,7 @@ function runPython() {
- {#if $screen === Screen.WORKSPACE && $mode === Mode.BLOCKS} + {#if $screen === Screen.WORKSPACE && ($mode === Mode.BLOCKS || $mode === Mode.PYTHONBLOCKS)} +
+
+ + + + \ No newline at end of file diff --git a/src/lib/components/workspace/Workspace.svelte b/src/lib/components/workspace/Workspace.svelte index 1056d93..6339ab7 100644 --- a/src/lib/components/workspace/Workspace.svelte +++ b/src/lib/components/workspace/Workspace.svelte @@ -1,72 +1,91 @@ - -{#snippet actions()} + import SerialMonitor from "$components/core/popups/popups/SerialMonitor.svelte"; + import TerminalPopup from "$components/core/popups/popups/TerminalPopup.svelte"; // Importeer het terminal component + import SidePanel from "$components/core/sidepanel/SidePanel.svelte"; + import SideBar from "$components/ui/SideBar.svelte"; + import SideButton from "$components/ui/SideButton.svelte"; + import { popups } from "$state/popup.svelte"; + import { Mode, mode, sidePanel } from "$state/workspace.svelte"; + import { + faBook, + faCode, + faSquarePollHorizontal, + faTerminal + } from "@fortawesome/free-solid-svg-icons"; + import Code from "./panels/Code.svelte"; + import LibraryManager from "./panels/LibraryManager.svelte"; + + // Reactive variabele voor de zichtbaarheid van de terminal-popup + let showTerminal: boolean = false; + + function toggleTerminal() { + showTerminal = !showTerminal; + } + + function openSerial() { + popups.open({ + component: SerialMonitor, + data: {}, + allowInteraction: true, + }); + } + + function openLibraryManager() { + if ($sidePanel === LibraryManager) sidePanel.set(undefined); + else sidePanel.set(LibraryManager); + } + + function openCode() { + if ($sidePanel === Code) sidePanel.set(undefined); + else sidePanel.set(Code); + } + + + + {#snippet actions()} {#if $mode === Mode.BLOCKS || $mode === Mode.PYTHONBLOCKS} - + {/if} - {#if $mode !== Mode.PYTHON} - + {#if $mode !== Mode.PYTHON && $mode !== Mode.PYTHONBLOCKS} + {/if} {#if $mode === Mode.ADVANCED} - + + {/if} + {#if $mode === Mode.PYTHONBLOCKS} + + {/if} -{/snippet} - -
+ {/snippet} + +
- - {#if $sidePanel} - - {/if} + + {#if $sidePanel} + + {/if}
-
- - + + \ No newline at end of file diff --git a/src/lib/domain/blockly/toolbox.ts b/src/lib/domain/blockly/toolbox.ts index ccdc0cc..8c61436 100644 --- a/src/lib/domain/blockly/toolbox.ts +++ b/src/lib/domain/blockly/toolbox.ts @@ -704,32 +704,4 @@ export default [ id: "l_functions", custom: "PROCEDURE", }, - { - name: "MicroPython", - style: "micropython_category", - id: "micropython", - groups: [ - [ - { - type: "time_delay", - inputs: { - DELAY_TIME_MILI: number(1000), - }, - - - }, - { - type: "leaphy_original_set_led", - inputs: { - LED_RED: number(0), - LED_GREEN: number(0), - LED_BLUE: number(0), - }, - }, - { - type: "controls_repeat_forever", - }, - ], - ], - }, ]; diff --git a/src/lib/state/workspace.svelte.ts b/src/lib/state/workspace.svelte.ts index 3f8dea1..68bd33d 100644 --- a/src/lib/state/workspace.svelte.ts +++ b/src/lib/state/workspace.svelte.ts @@ -1,6 +1,7 @@ import Advanced from "$components/workspace/advanced/Advanced.svelte"; import Blocks from "$components/workspace/blocks/Blocks.svelte"; import Python from "$components/workspace/python/Python.svelte"; +import PythonBlocks from "$components/workspace/pythonblocks/pythonBlocks.svelte"; import type { Handle } from "$domain/handles"; import { type RobotDevice, robots } from "$domain/robots"; import MockedFTDISerialPort from "@leaphy-robotics/webusb-ftdi"; @@ -12,7 +13,7 @@ import type MicroPythonIO from "../micropython"; import type { IOEventTarget } from "../micropython"; import { workspace } from "./blockly.svelte"; import { popups } from "./popup.svelte"; -import PythonBlocks from "$components/workspace/pythonblocks/pythonBlocks.svelte"; + export type LeaphyPort = | SerialPort diff --git a/yarn.lock b/yarn.lock index 6baf2bf..533b84f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -611,10 +611,10 @@ resolved "https://registry.yarnpkg.com/@leaphy-robotics/dfu-util-wasm/-/dfu-util-wasm-1.0.2.tgz#29afcc01266655e1c7b5da0eeceb0ead48c86fd7" integrity sha512-lvS+tJFO049b4ERYKX0HcoUtnQv76A1z9sZrAvbs7s3bvdMW0BObKmktZeJ7emcp3lU/+OJWsD2h0EY5rnkiNg== -"@leaphy-robotics/leaphy-blocks@^3.2.1-python": - version "3.2.1-python" - resolved "https://registry.yarnpkg.com/@leaphy-robotics/leaphy-blocks/-/leaphy-blocks-3.2.1-python.tgz#fd732ba63a3b2e1f5624d7f4e13594f74c973334" - integrity sha512-ihoaCgd09CaIlb0YcPvC12vYCxpLeU7BmTwnulsyWa3wghJwdy5qFG/8c1heNpjgB6KCv3xGj6S/G95kqlDo3w== +"@leaphy-robotics/leaphy-blocks@3.2.2-python": + version "3.2.2-python" + resolved "https://registry.yarnpkg.com/@leaphy-robotics/leaphy-blocks/-/leaphy-blocks-3.2.2-python.tgz#0f29912739469c3a4864d564053e4614a0b437aa" + integrity sha512-OlAjCHFj6zEIBSyujZCmBrNxq4lisBSPUQC3SIALLNRVDwT/TZQ30xllBs3gy7rrhfn/epAZNce8IFcXODLW7Q== dependencies: blockly "^10.4.3"