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
+
+
+
+
+
+
+
+
+
+ );
+ }
+}
+
+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;