diff --git a/src/main.tsx b/src/main.tsx index f8169407..ff00d78a 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, LineSettingsModal} from "./settings"; +import {ScreenSettingsModal, SessionSettingsModal, LineSettingsModal, ClientSettingsModal} from "./settings"; import {renderCmdText} from "./elements"; dayjs.extend(localizedFormat) @@ -2237,7 +2237,7 @@ class ScreenView extends React.Component<{screen : Screen}, {}> { let fontSize = GlobalModel.termFontSize.get(); return (
- +
); } @@ -2516,6 +2516,13 @@ class MainSideBar extends React.Component<{}, {}> { })(); } + @boundMethod + handleSettingsClick() : void { + mobx.action(() => { + GlobalModel.clientSettingsModal.set(true); + })(); + } + @boundMethod openSessionSettings(e : any, session : Session) : void { e.preventDefault(); @@ -2623,6 +2630,9 @@ class MainSideBar extends React.Component<{}, {}> { +

this.clickRemotes()}>Links

@@ -3003,6 +3013,7 @@ class Main extends React.Component<{}, {}> { let screenSettingsModal = GlobalModel.screenSettingsModal.get(); let sessionSettingsModal = GlobalModel.sessionSettingsModal.get(); let lineSettingsModal = GlobalModel.lineSettingsModal.get(); + let clientSettingsModal = GlobalModel.clientSettingsModal.get(); let disconnected = !GlobalModel.ws.open.get() || !GlobalModel.localServerRunning.get(); let hasClientStop = GlobalModel.getHasClientStop(); let dcWait = this.dcWait.get(); @@ -3051,6 +3062,9 @@ class Main extends React.Component<{}, {}> { + + + ); } diff --git a/src/model.ts b/src/model.ts index ba5aa608..05c193e9 100644 --- a/src/model.ts +++ b/src/model.ts @@ -2358,6 +2358,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"}); + clientSettingsModal : OV = mobx.observable.box(false, {name: "clientSettingsModal"}); lineSettingsModal : OV = mobx.observable.box(null, {name: "lineSettingsModal"}); rendererPlugins : RendererPluginType[] = []; @@ -3394,6 +3395,22 @@ class CommandRunner { GlobalModel.submitCommand("history", "viewall", null, kwargs, true); } + telemetryOff() { + GlobalModel.submitCommand("telemetry", "off", null, {"nohist": "1"}, true); + } + + telemetryOn() { + GlobalModel.submitCommand("telemetry", "on", null, {"nohist": "1"}, true); + } + + setTermFontSize(fsize : number) { + let kwargs = { + "nohist": "1", + "termfontsize": String(fsize), + }; + GlobalModel.submitCommand("client", "set", null, kwargs, true); + } + editBookmark(bookmarkId : string, desc : string, cmdstr : string) { let kwargs = { "nohist": "1", diff --git a/src/settings.tsx b/src/settings.tsx index 6e22ec8f..0f018e4b 100644 --- a/src/settings.tsx +++ b/src/settings.tsx @@ -14,6 +14,11 @@ type OArr = mobx.IObservableArray; type OMap = mobx.ObservableMap; type CV = mobx.IComputedValue; +// @ts-ignore +const VERSION = __PROMPT_VERSION__; +// @ts-ignore +const BUILD = __PROMPT_BUILD__; + @mobxReact.observer class ScreenSettingsModal extends React.Component<{sessionId : string, screenId : string}, {}> { tempName : OV; @@ -367,4 +372,154 @@ class LineSettingsModal extends React.Component<{line : LineType}, {}> { } } -export {ScreenSettingsModal, SessionSettingsModal, LineSettingsModal}; +@mobxReact.observer +class ClientSettingsModal extends React.Component<{}, {}> { + tempFontSize : OV; + tempTelemetry : OV; + fontSizeDropdownActive : OV = mobx.observable.box(false, {name: "clientSettings-fontSizeDropdownActive"}); + + constructor(props : any) { + super(props); + let cdata = GlobalModel.clientData.get(); + this.tempFontSize = mobx.observable.box(GlobalModel.termFontSize.get(), {name: "clientSettings-tempFontSize"}); + this.tempTelemetry = mobx.observable.box(!cdata.clientopts.notelemetry, {name: "clientSettings-telemetry"}); + } + + @boundMethod + closeModal() : void { + mobx.action(() => { + GlobalModel.clientSettingsModal.set(false); + })(); + } + + @boundMethod + handleOK() : void { + mobx.action(() => { + GlobalModel.clientSettingsModal.set(false); + })(); + let cdata = GlobalModel.clientData.get(); + let curTel = !cdata.clientopts.notelemetry; + if (this.tempTelemetry.get() != curTel) { + if (this.tempTelemetry.get()) { + GlobalCommandRunner.telemetryOn(); + } + else { + GlobalCommandRunner.telemetryOff(); + } + } + if (GlobalModel.termFontSize.get() != this.tempFontSize.get()) { + GlobalCommandRunner.setTermFontSize(this.tempFontSize.get()); + } + } + + @boundMethod + handleChangeFontSize(newFontSize : number) : void { + mobx.action(() => { + this.fontSizeDropdownActive.set(false); + this.tempFontSize.set(newFontSize); + })(); + } + + @boundMethod + togglefontSizeDropdown() : void { + mobx.action(() => { + this.fontSizeDropdownActive.set(!this.fontSizeDropdownActive.get()); + })(); + } + + @boundMethod + handleChangeTelemetry(val : boolean) : void { + mobx.action(() => { + this.tempTelemetry.set(val); + })(); + } + + renderFontSizeDropdown() : any { + let availableFontSizes = [8, 9, 10, 11, 12, 13, 14, 15]; + let fsize : number = 0; + return ( +
+
+ +
+
+
+ +
this.handleChangeFontSize(fsize) } key={fsize + "px"} className="dropdown-item">{fsize}px
+
+
+
+
+ ); + } + + render() { + let cdata : ClientDataType = GlobalModel.clientData.get(); + return ( +
+
+
+
+
client settings
+
+ +
+
+
+
+
+ Term Font Size +
+
+ {this.renderFontSizeDropdown()} +
+
+
+
+ Client ID +
+
+ {cdata.clientid} +
+
+
+
+ Client Version +
+
+ {VERSION} {BUILD} +
+
+
+
+ DB Version +
+
+ {cdata.dbversion} +
+
+
+
+ Basic Telemetry +
+
+ +
+
+
+
+
Cancel
+
OK
+
+
+
+ ); + } +} + +export {ScreenSettingsModal, SessionSettingsModal, LineSettingsModal, ClientSettingsModal}; diff --git a/src/sh2.less b/src/sh2.less index 91fd39fd..3cf9dbf6 100644 --- a/src/sh2.less +++ b/src/sh2.less @@ -2814,6 +2814,14 @@ input[type=checkbox] { } } +.client-settings-modal { + .settings-field { + .settings-label { + width: 150px; + } + } +} + .settings-field { display: flex; flex-direction: row;