From b1535b9b9dd8c062340d20902ed0f9a8e51eed1d Mon Sep 17 00:00:00 2001 From: sawka Date: Fri, 17 Mar 2023 12:37:10 -0700 Subject: [PATCH] line settings modal checkpoint --- src/linecomps.tsx | 19 +++++++++++++--- src/main.tsx | 7 +++++- src/model.ts | 1 + src/settings.tsx | 58 ++++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 80 insertions(+), 5 deletions(-) diff --git a/src/linecomps.tsx b/src/linecomps.tsx index 7621dd50..fb013bd3 100644 --- a/src/linecomps.tsx +++ b/src/linecomps.tsx @@ -101,6 +101,18 @@ function getLineDateTimeStr(ts : number) : string { @mobxReact.observer class LineAvatar extends React.Component<{line : LineType, cmd : Cmd}, {}> { + @boundMethod + handleRightClick(e : any) { + e.preventDefault(); + e.stopPropagation(); + let {line} = this.props; + if (line != null) { + mobx.action(() => { + GlobalModel.lineSettingsModal.set(this.props.line); + })(); + } + } + render() { let {line, cmd} = this.props; let lineNumStr = (line.linenumtemp ? "~" : "") + String(line.linenum); @@ -108,7 +120,7 @@ class LineAvatar extends React.Component<{line : LineType, cmd : Cmd}, {}> { let rtnstate = (cmd != null ? cmd.getRtnState() : false); let isComment = (line.linetype == "text"); return ( -
+
this.handleRightClick(e)} className={cn("avatar", "num-"+lineNumStr.length, "status-" + status, {"ephemeral": line.ephemeral}, {"rtnstate": rtnstate})}> {lineNumStr} @@ -497,7 +509,8 @@ class LineCmd extends React.Component<{screen : LineContainerModel, line : LineT {"top-border": topBorder}, ); let rendererPlugin : RendererPluginType = null; - if (!isBlank(line.renderer) && line.renderer != "terminal") { + let isNoneRenderer = (line.renderer == "none"); + if (!isBlank(line.renderer) && line.renderer != "terminal" && !isNoneRenderer) { rendererPlugin = GlobalModel.getRendererPluginByName(line.renderer); } let rendererType = getRendererType(line); @@ -527,7 +540,7 @@ class LineCmd extends React.Component<{screen : LineContainerModel, line : LineT
- + diff --git a/src/main.tsx b/src/main.tsx index 65eb35e2..38d25e65 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -18,7 +18,7 @@ import remarkGfm from 'remark-gfm' import {BookmarksView} from "./bookmarks"; import {HistoryView} from "./history"; import {Line, Prompt} from "./linecomps"; -import {ScreenSettingsModal, SessionSettingsModal} from "./settings"; +import {ScreenSettingsModal, SessionSettingsModal, LineSettingsModal} from "./settings"; import {renderCmdText} from "./elements"; dayjs.extend(localizedFormat) @@ -2798,6 +2798,7 @@ class Main extends React.Component<{}, {}> { @boundMethod handleContextMenu(e : any) { + console.log("main contextmenu"); let isInNonTermInput = false; let activeElem = document.activeElement; if (activeElem != null && activeElem.nodeName == "TEXTAREA") { @@ -2826,6 +2827,7 @@ class Main extends React.Component<{}, {}> { render() { let screenSettingsModal = GlobalModel.screenSettingsModal.get(); let sessionSettingsModal = GlobalModel.sessionSettingsModal.get(); + let lineSettingsModal = GlobalModel.lineSettingsModal.get(); return (
@@ -2847,6 +2849,9 @@ class Main extends React.Component<{}, {}> { + + +
); } diff --git a/src/model.ts b/src/model.ts index 177538db..d23642fc 100644 --- a/src/model.ts +++ b/src/model.ts @@ -2356,6 +2356,7 @@ class Model { welcomeModalOpen : OV = mobx.observable.box(false, {name: "welcomeModalOpen"}); screenSettingsModal : OV<{sessionId : string, screenId : string}> = mobx.observable.box(null, {name: "screenSettingsModal"}); sessionSettingsModal : OV = mobx.observable.box(null, {name: "sessionSettingsModal"}); + lineSettingsModal : OV = mobx.observable.box(null, {name: "lineSettingsModal"}); rendererPlugins : RendererPluginType[] = []; inputModel : InputModel; diff --git a/src/settings.tsx b/src/settings.tsx index d392e0c8..b509c6a8 100644 --- a/src/settings.tsx +++ b/src/settings.tsx @@ -7,6 +7,7 @@ import {If, For, When, Otherwise, Choose} from "tsx-control-statements/component import cn from "classnames"; import {GlobalModel, GlobalCommandRunner, TabColors} from "./model"; import {Toggle} from "./elements"; +import {LineType} from "./types"; type OV = mobx.IObservableValue; type OArr = mobx.IObservableArray; @@ -229,4 +230,59 @@ class SessionSettingsModal extends React.Component<{sessionId : string}, {}> { } } -export {ScreenSettingsModal, SessionSettingsModal}; +@mobxReact.observer +class LineSettingsModal extends React.Component<{line : LineType}, {}> { + constructor(props : any) { + super(props); + } + + @boundMethod + closeModal() : void { + mobx.action(() => { + GlobalModel.lineSettingsModal.set(null); + })(); + } + + @boundMethod + handleOK() : void { + mobx.action(() => { + GlobalModel.lineSettingsModal.set(null); + })(); + } + + render() { + let {line} = this.props; + if (line == null) { + return null; + } + return ( +
+
+
+
+
line settings ({line.linenum})
+
+ +
+
+
+
+
+ Renderer +
+
+ xxx +
+
+
+
+
Cancel
+
OK
+
+
+
+ ); + } +} + +export {ScreenSettingsModal, SessionSettingsModal, LineSettingsModal};