plottery_editor 0.7.1

Graphical Editor of Plottery, a creative coding framework for generative vector graphics and pen plotting.
use crate::util::format_svg;
use dioxus::prelude::*;
use std::path::PathBuf;

#[derive(PartialEq, Props, Clone)]
pub struct ExternalEditorButtonProps {
    pub editor_name: String,
    pub editor_command: String,
    pub icon_svg: &'static [u8],
    pub project_dir: ReadSignal<PathBuf>,
    #[props(default = vec![])]
    pub extra_args: Vec<String>,
}

#[component]
pub fn ExternalEditorButton(props: ExternalEditorButtonProps) -> Element {
    rsx! {
        button {
            class: "icon_button",
            title: "Open in {props.editor_name}",
            onclick: move |event| {
                let mut cmd = std::process::Command::new(&props.editor_command);
                for arg in &props.extra_args {
                    cmd.arg(arg);
                }
                cmd.arg(&*props.project_dir.read())
                    .spawn()
                    .unwrap()
                    .wait()
                    .unwrap();
                event.stop_propagation();
            },
            img { src: "{format_svg(props.icon_svg)}" }
        }
    }
}