diff --git a/vite/src/pipedal/AppThemed.tsx b/vite/src/pipedal/AppThemed.tsx index 89c98e4..4deab00 100644 --- a/vite/src/pipedal/AppThemed.tsx +++ b/vite/src/pipedal/AppThemed.tsx @@ -26,7 +26,7 @@ import Modal from '@mui/material/Modal'; import Toolbar from '@mui/material/Toolbar'; import Typography from '@mui/material/Typography'; import { withStyles } from "tss-react/mui"; -import WithStyles from './WithStyles'; +import WithStyles from './WithStyles'; import { css } from '@emotion/react'; import IconButtonEx from './IconButtonEx'; @@ -196,14 +196,14 @@ const appStyles = ((theme: Theme) => ( toolBarContent: - css({ - position: "absolute", top: 0, width: "100%" - }), + css({ + position: "absolute", top: 0, width: "100%" + }), toolBarSpacer: - css({ - position: "relative", flex: "0 0 auto", - }), + css({ + position: "relative", flex: "0 0 auto", + }), mainFrame: css({ @@ -259,11 +259,15 @@ function setFullScreen(value: boolean) { if (docEl.requestFullscreen) // the latest offical api. { if (value) { - window.document.documentElement.requestFullscreen({ navigationUI: "hide" }); - } else { - window.document.exitFullscreen(); + window.document.documentElement.requestFullscreen({ navigationUI: "hide" }) + .then(() => { }) + .catch((err) => { + alert( + `Unable to switch into fullscreen mode: ${err.message} (${err.name})`, + ); + }); + return; } - return; } var requestFullScreen = docEl.requestFullscreen || docEl.mozRequestFullScreen || docEl.webkitRequestFullscreen || docEl.msRequestFullScreen; @@ -331,837 +335,837 @@ class MenuStackHandler implements IDialogStackable { this.app.menuStackHandler = null; this.app.hideDrawer(); } - private app: AppThemedBase; + private app: AppThemedBase; }; -export +export class AppThemedBase extends ResizeResponsiveComponent { - // Before the component mounts, we initialise our state + // Before the component mounts, we initialise our state - model_: PiPedalModel; - errorChangeHandler_: OnChangedHandler; - stateChangeHandler_: OnChangedHandler; + model_: PiPedalModel; + errorChangeHandler_: OnChangedHandler; + stateChangeHandler_: OnChangedHandler; - constructor(props: AppProps) { - super(props); - this.model_ = PiPedalModelFactory.getInstance(); + constructor(props: AppProps) { + super(props); + this.model_ = PiPedalModelFactory.getInstance(); - this.state = { - performanceView: false, - zoomedControlInfo: this.model_.zoomedUiControl.get(), - isDrawerOpen: false, - errorMessage: this.model_.errorMessage.get(), - displayState: this.model_.state.get(), - canFullScreen: supportsFullScreen() && !this.model_.isAndroidHosted(), - isFullScreen: !!document.fullscreenElement, - tinyToolBar: false, - alertDialogOpen: false, - alertDialogMessage: "", - presetName: this.model_.presets.get().getSelectedText(), - isSettingsDialogOpen: false, - updateDialogOpen: false, - onboarding: false, - isDebug: true, - presetChanged: this.model_.presets.get().presetChanged, - banks: this.model_.banks.get(), - renameBankDialogOpen: false, - saveBankAsDialogOpen: false, - aboutDialogOpen: false, - bankDialogOpen: false, - editBankDialogOpen: false, - zoomedControlOpen: false, - bankDisplayItems: 5, - showStatusMonitor: this.model_.showStatusMonitor.get() + this.state = { + performanceView: false, + zoomedControlInfo: this.model_.zoomedUiControl.get(), + isDrawerOpen: false, + errorMessage: this.model_.errorMessage.get(), + displayState: this.model_.state.get(), + canFullScreen: supportsFullScreen() && !this.model_.isAndroidHosted(), + isFullScreen: !!document.fullscreenElement, + tinyToolBar: false, + alertDialogOpen: false, + alertDialogMessage: "", + presetName: this.model_.presets.get().getSelectedText(), + isSettingsDialogOpen: false, + updateDialogOpen: false, + onboarding: false, + isDebug: true, + presetChanged: this.model_.presets.get().presetChanged, + banks: this.model_.banks.get(), + renameBankDialogOpen: false, + saveBankAsDialogOpen: false, + aboutDialogOpen: false, + bankDialogOpen: false, + editBankDialogOpen: false, + zoomedControlOpen: false, + bankDisplayItems: 5, + showStatusMonitor: this.model_.showStatusMonitor.get() - }; + }; - this.promptForUpdateHandler = this.promptForUpdateHandler.bind(this); - this.errorChangeHandler_ = this.setErrorMessage.bind(this); - this.beforeUnloadListener = this.beforeUnloadListener.bind(this); - this.unloadListener = this.unloadListener.bind(this); - this.stateChangeHandler_ = this.setDisplayState.bind(this); - this.presetChangedHandler = this.presetChangedHandler.bind(this); - this.alertMessageChangedHandler = this.alertMessageChangedHandler.bind(this); - this.handleCloseAlert = this.handleCloseAlert.bind(this); - this.banksChangedHandler = this.banksChangedHandler.bind(this); - this.showStatusMonitorHandler = this.showStatusMonitorHandler.bind(this); - this.handleZoomedUiControlChanged = this.handleZoomedUiControlChanged.bind(this); + this.promptForUpdateHandler = this.promptForUpdateHandler.bind(this); + this.errorChangeHandler_ = this.setErrorMessage.bind(this); + this.beforeUnloadListener = this.beforeUnloadListener.bind(this); + this.unloadListener = this.unloadListener.bind(this); + this.stateChangeHandler_ = this.setDisplayState.bind(this); + this.presetChangedHandler = this.presetChangedHandler.bind(this); + this.alertMessageChangedHandler = this.alertMessageChangedHandler.bind(this); + this.handleCloseAlert = this.handleCloseAlert.bind(this); + this.banksChangedHandler = this.banksChangedHandler.bind(this); + this.showStatusMonitorHandler = this.showStatusMonitorHandler.bind(this); + this.handleZoomedUiControlChanged = this.handleZoomedUiControlChanged.bind(this); + } + + showDrawer() { + if (!this.state.isDrawerOpen) { + this.setState({ isDrawerOpen: true }) + this.pushOpenMenuState(); + } + } + hideDrawer(loadingDialog: boolean = false) { + window.setTimeout(() => { + this.popOpenMenuState(); + this.setState({ isDrawerOpen: false }) + }); + } + + + menuStackHandler: MenuStackHandler | null = null; + + popOpenMenuState() { + if (this.menuStackHandler) { + let t = this.menuStackHandler; + this.menuStackHandler = null; + popDialogStack(t); } - showDrawer() { - if (!this.state.isDrawerOpen) { - this.setState({ isDrawerOpen: true }) - this.pushOpenMenuState(); - } - } - hideDrawer(loadingDialog: boolean = false) { - window.setTimeout(() => { - this.popOpenMenuState(); - this.setState({ isDrawerOpen: false }) - }); - } + } + pushOpenMenuState() { + this.menuStackHandler = new MenuStackHandler(this); + pushDialogStack(this.menuStackHandler); + } + handleSpecificBank(bankId: number) { - menuStackHandler: MenuStackHandler | null = null; + this.model_.openBank(bankId) + .catch((error) => this.model_.showAlert(error.toString())); - popOpenMenuState() { - if (this.menuStackHandler) { - let t = this.menuStackHandler; - this.menuStackHandler = null; - popDialogStack(t); - } + } - } - pushOpenMenuState() { - this.menuStackHandler = new MenuStackHandler(this); - pushDialogStack(this.menuStackHandler); - } - - handleSpecificBank(bankId: number) { - - this.model_.openBank(bankId) - .catch((error) => this.model_.showAlert(error.toString())); - - } - - handleSaveBankAsOk(newName: string) { - let currentName = this.model_.banks.get().getSelectedEntryName(); - if (currentName === newName) { - this.setState({ - renameBankDialogOpen: false, - saveBankAsDialogOpen: false - }); - return; - - } - - if (this.model_.banks.get().nameExists(newName)) { - this.model_.showAlert("A bank by that name already exists."); - return; - } + handleSaveBankAsOk(newName: string) { + let currentName = this.model_.banks.get().getSelectedEntryName(); + if (currentName === newName) { this.setState({ renameBankDialogOpen: false, saveBankAsDialogOpen: false }); - this.model_.saveBankAs(this.model_.banks.get().selectedBank, newName) - .catch((error) => { - this.model_.showAlert(error.toString()); - }); + return; } - handleBankRenameOk(newName: string) { - let currentName = this.model_.banks.get().getSelectedEntryName(); - if (currentName === newName) { - this.setState({ - renameBankDialogOpen: false, - saveBankAsDialogOpen: false - }); - return; - - } - - if (this.model_.banks.get().nameExists(newName)) { - this.model_.showAlert("A bank by that name already exists."); - return; - } - this.setState({ - renameBankDialogOpen: false - }); - this.model_.renameBank(this.model_.banks.get().selectedBank, newName) - .catch((error) => { - this.model_.showAlert(error.toString()); - }); + if (this.model_.banks.get().nameExists(newName)) { + this.model_.showAlert("A bank by that name already exists."); + return; } - handleSettingsDialogClose() { - this.setState({ - isSettingsDialogOpen: false, - onboarding: false - }); - } - handleDrawerSettingsClick() { - this.setState({ - isDrawerOpen: false, - isSettingsDialogOpen: true, - onboarding: false + this.setState({ + renameBankDialogOpen: false, + saveBankAsDialogOpen: false + }); + this.model_.saveBankAs(this.model_.banks.get().selectedBank, newName) + .catch((error) => { + this.model_.showAlert(error.toString()); }); - } - - handleDisplayOnboarding() { - this.setState({ - isDrawerOpen: false, - isSettingsDialogOpen: true, - onboarding: true - }); - - } - - handleDrawerManageBanks() { - this.setState({ - isDrawerOpen: false, - bankDialogOpen: true, - editBankDialogOpen: true - }); - - } - handleDrawerSelectBank() { - - this.setState({ - bankDialogOpen: true, - editBankDialogOpen: false - }); - - } - handleDrawerDonationClick() { - this.hideDrawer(false); - if (this.model_.isAndroidHosted()) { - this.model_.showAndroidDonationActivity(); - } else { - if (window) { - window.open("https://github.com/sponsors/rerdavies", '_blank'); - } - } - - } - - handleDrawerAboutClick() { - this.setState({ - aboutDialogOpen: true - }); - - } - handleDrawerRenameBank() { - this.setState({ - renameBankDialogOpen: true, - saveBankAsDialogOpen: false - }); - - } - handleDrawerSaveBankAs() { + } + handleBankRenameOk(newName: string) { + let currentName = this.model_.banks.get().getSelectedEntryName(); + if (currentName === newName) { this.setState({ renameBankDialogOpen: false, - saveBankAsDialogOpen: true + saveBankAsDialogOpen: false }); + return; + } - - handleCloseAlert(e?: any, reason?: any) { - this.model_.alertMessage.set(""); + if (this.model_.banks.get().nameExists(newName)) { + this.model_.showAlert("A bank by that name already exists."); + return; } - showStatusMonitorHandler() { + this.setState({ + renameBankDialogOpen: false + }); + this.model_.renameBank(this.model_.banks.get().selectedBank, newName) + .catch((error) => { + this.model_.showAlert(error.toString()); + }); + + } + handleSettingsDialogClose() { + this.setState({ + isSettingsDialogOpen: false, + onboarding: false + }); + } + handleDrawerSettingsClick() { + this.setState({ + isDrawerOpen: false, + isSettingsDialogOpen: true, + onboarding: false + }); + + } + + handleDisplayOnboarding() { + this.setState({ + isDrawerOpen: false, + isSettingsDialogOpen: true, + onboarding: true + }); + + } + + handleDrawerManageBanks() { + this.setState({ + isDrawerOpen: false, + bankDialogOpen: true, + editBankDialogOpen: true + }); + + } + handleDrawerSelectBank() { + + this.setState({ + bankDialogOpen: true, + editBankDialogOpen: false + }); + + } + handleDrawerDonationClick() { + this.hideDrawer(false); + if (this.model_.isAndroidHosted()) { + this.model_.showAndroidDonationActivity(); + } else { + if (window) { + window.open("https://github.com/sponsors/rerdavies", '_blank'); + } + } + + } + + handleDrawerAboutClick() { + this.setState({ + aboutDialogOpen: true + }); + + } + handleDrawerRenameBank() { + this.setState({ + renameBankDialogOpen: true, + saveBankAsDialogOpen: false + }); + + } + handleDrawerSaveBankAs() { + this.setState({ + renameBankDialogOpen: false, + saveBankAsDialogOpen: true + }); + } + + + handleCloseAlert(e?: any, reason?: any) { + this.model_.alertMessage.set(""); + } + showStatusMonitorHandler() { + this.setState({ + showStatusMonitor: this.model_.showStatusMonitor.get() + }); + } + banksChangedHandler() { + this.setState({ + banks: this.model_.banks.get() + }); + } + presetChangedHandler() { + let presets = this.model_.presets.get(); + + this.setState({ + presetName: presets.getSelectedText(), + presetChanged: presets.presetChanged + }); + } + toggleFullScreen(): void { + setFullScreen(!this.state.isFullScreen); + this.setState({ isFullScreen: !this.state.isFullScreen }); + } + + private unloadListener(e: Event) { + this.model_.close(); + return undefined; + } + + private beforeUnloadListener(e: Event) { + this.model_.close(); + return undefined; + } + promptForUpdateHandler(newValue: boolean) { + if (this.model_.enableAutoUpdate) { + if (this.state.updateDialogOpen !== newValue) { + this.setState({ updateDialogOpen: newValue }); + } + } + } + componentDidMount() { + + super.componentDidMount(); + window.addEventListener("beforeunload", this.beforeUnloadListener); + window.addEventListener("unload", this.unloadListener); + + this.model_.errorMessage.addOnChangedHandler(this.errorChangeHandler_); + this.model_.state.addOnChangedHandler(this.stateChangeHandler_); + this.model_.pedalboard.addOnChangedHandler(this.presetChangedHandler); + this.model_.alertMessage.addOnChangedHandler(this.alertMessageChangedHandler); + this.model_.banks.addOnChangedHandler(this.banksChangedHandler); + this.model_.showStatusMonitor.addOnChangedHandler(this.showStatusMonitorHandler); + this.model_.promptForUpdate.addOnChangedHandler(this.promptForUpdateHandler); + this.alertMessageChangedHandler(); + + this.model_.zoomedUiControl.addOnChangedHandler( + this.handleZoomedUiControlChanged + ); + } + handleZoomedUiControlChanged() { + this.setState({ + zoomedControlOpen: this.model_.zoomedUiControl.get() !== undefined, + zoomedControlInfo: this.model_.zoomedUiControl.get() + }); + + } + + updateOverscroll(): void { + if (this.model_.serverVersion) { + // no pull-down refresh on android devices once we're ready (unless we're debug) + let preventOverscroll = + this.model_.state.get() === State.Ready + && !this.model_.debug; + + let overscrollBehavior = preventOverscroll ? "none" : "auto"; + document.body.style.overscrollBehavior = overscrollBehavior; + } + } + + componentDidUpdate() { + } + + componentWillUnmount() { + super.componentWillUnmount(); + + this.model_.zoomedUiControl.removeOnChangedHandler( + this.handleZoomedUiControlChanged + ); + + window.removeEventListener("beforeunload", this.beforeUnloadListener); + + this.model_.promptForUpdate.removeOnChangedHandler(this.promptForUpdateHandler); + this.model_.errorMessage.removeOnChangedHandler(this.errorChangeHandler_); + this.model_.state.removeOnChangedHandler(this.stateChangeHandler_); + this.model_.pedalboard.removeOnChangedHandler(this.presetChangedHandler); + this.model_.banks.removeOnChangedHandler(this.banksChangedHandler); + this.model_.banks.removeOnChangedHandler(this.showStatusMonitorHandler); + + this.model_.close(); + + } + + alertMessageChangedHandler() { + let message = this.model_.alertMessage.get(); + if (message === "") { + this.setState({ alertDialogOpen: false }); + // leave the message intact so the dialog can fade. + } else { this.setState({ - showStatusMonitor: this.model_.showStatusMonitor.get() + alertDialogOpen: true, + alertDialogMessage: message }); } - banksChangedHandler() { - this.setState({ - banks: this.model_.banks.get() - }); - } - presetChangedHandler() { - let presets = this.model_.presets.get(); - this.setState({ - presetName: presets.getSelectedText(), - presetChanged: presets.presetChanged - }); - } - toggleFullScreen(): void { - setFullScreen(!this.state.isFullScreen); - this.setState({ isFullScreen: !this.state.isFullScreen }); - } + } + updateResponsive() { + // functional, but disabled. + // let tinyToolBar_ = this.windowSize.height < 600; + // this.setState({ tinyToolBar: tinyToolBar_ }); - private unloadListener(e: Event) { - this.model_.close(); - return undefined; - } + let height = this.windowSize.height; - private beforeUnloadListener(e: Event) { - this.model_.close(); - return undefined; + const ENTRY_HEIGHT = 48; + // ENTRY_HEIGHT*6 +K = 727 from observation. + const K = 450; + + let bankEntries = Math.floor((height - K) / ENTRY_HEIGHT); + if (bankEntries < 1) bankEntries = 1; + if (bankEntries > 7) bankEntries = 7; + if (bankEntries === 2) bankEntries = 1; + + this.setState({ bankDisplayItems: bankEntries }); + + } + onWindowSizeChanged(width: number, height: number): void { + super.onWindowSizeChanged(width, height); + this.updateResponsive(); + } + + + setErrorMessage(message: string): void { + this.setState({ errorMessage: message }); + } + + + setDisplayState(newState: State): void { + this.updateOverscroll(); + + this.setState({ + displayState: newState, + canFullScreen: supportsFullScreen() && !this.model_.isAndroidHosted() + }); + if (newState === State.Ready) { + if (this.model_.isOnboarding()) { + this.handleDisplayOnboarding(); + } } - promptForUpdateHandler(newValue: boolean) { - if (this.model_.enableAutoUpdate) { - if (this.state.updateDialogOpen !== newValue) { - this.setState({ updateDialogOpen: newValue }); + } + + shortBankList(banks: BankIndex): BankIndexEntry[] { + let nDisplayEntries = this.state.bankDisplayItems; + let entries = banks.entries; + let nListEntries = entries.length; + + let result: BankIndexEntry[] = []; + + if (nListEntries <= nDisplayEntries) { + for (let i = 0; i < nListEntries; ++i) { + result.push(entries[i]); + } + } else { + // a subset of the list CENTERED on the currently selected entry. + let selectedIndex = 0; + for (let i = 0; i < nListEntries; ++i) { + if (entries[i].instanceId === banks.selectedBank) { + selectedIndex = i; + break; } } - } - componentDidMount() { - super.componentDidMount(); - window.addEventListener("beforeunload", this.beforeUnloadListener); - window.addEventListener("unload", this.unloadListener); - - this.model_.errorMessage.addOnChangedHandler(this.errorChangeHandler_); - this.model_.state.addOnChangedHandler(this.stateChangeHandler_); - this.model_.pedalboard.addOnChangedHandler(this.presetChangedHandler); - this.model_.alertMessage.addOnChangedHandler(this.alertMessageChangedHandler); - this.model_.banks.addOnChangedHandler(this.banksChangedHandler); - this.model_.showStatusMonitor.addOnChangedHandler(this.showStatusMonitorHandler); - this.model_.promptForUpdate.addOnChangedHandler(this.promptForUpdateHandler); - this.alertMessageChangedHandler(); - - this.model_.zoomedUiControl.addOnChangedHandler( - this.handleZoomedUiControlChanged - ); - } - handleZoomedUiControlChanged() { - this.setState({ - zoomedControlOpen: this.model_.zoomedUiControl.get() !== undefined, - zoomedControlInfo: this.model_.zoomedUiControl.get() - }); - - } - - updateOverscroll(): void { - if (this.model_.serverVersion) { - // no pull-down refresh on android devices once we're ready (unless we're debug) - let preventOverscroll = - this.model_.state.get() === State.Ready - && !this.model_.debug; - - let overscrollBehavior = preventOverscroll ? "none" : "auto"; - document.body.style.overscrollBehavior = overscrollBehavior; + let minN = selectedIndex - Math.floor(nDisplayEntries / 2); + if (minN < 0) minN = 0; + let maxN = minN + nDisplayEntries; + if (maxN > entries.length) { + maxN = entries.length; + } + for (let i = minN; i < maxN; ++i) { + result.push(entries[i]); } } - - componentDidUpdate() { + return result; + } + handleReload() { + if (this.model_.isAndroidHosted()) { + this.model_.chooseNewDevice(); + } else { + window.location.reload(); } - - componentWillUnmount() { - super.componentWillUnmount(); - - this.model_.zoomedUiControl.removeOnChangedHandler( - this.handleZoomedUiControlChanged - ); - - window.removeEventListener("beforeunload", this.beforeUnloadListener); - - this.model_.promptForUpdate.removeOnChangedHandler(this.promptForUpdateHandler); - this.model_.errorMessage.removeOnChangedHandler(this.errorChangeHandler_); - this.model_.state.removeOnChangedHandler(this.stateChangeHandler_); - this.model_.pedalboard.removeOnChangedHandler(this.presetChangedHandler); - this.model_.banks.removeOnChangedHandler(this.banksChangedHandler); - this.model_.banks.removeOnChangedHandler(this.showStatusMonitorHandler); - - this.model_.close(); - + } + getReloadingMessage(): string { + switch (this.state.displayState) { + case State.ApplyingChanges: + return "Applying\u00A0changes..."; + case State.ReloadingPlugins: + return "Reloading\u00A0plugins..."; + case State.DownloadingUpdate: + return "Downloading update..."; + case State.InstallingUpdate: + return "Installing update...."; + case State.HotspotChanging: + return "Network connection changing..." + default: + return "Reconnecting..."; } + } + render() { - alertMessageChangedHandler() { - let message = this.model_.alertMessage.get(); - if (message === "") { - this.setState({ alertDialogOpen: false }); - // leave the message intact so the dialog can fade. - } else { - this.setState({ - alertDialogOpen: true, - alertDialogMessage: message - }); - } + const classes = withStyles.getClasses(this.props); - } - updateResponsive() { - // functional, but disabled. - // let tinyToolBar_ = this.windowSize.height < 600; - // this.setState({ tinyToolBar: tinyToolBar_ }); - - let height = this.windowSize.height; - - const ENTRY_HEIGHT = 48; - // ENTRY_HEIGHT*6 +K = 727 from observation. - const K = 450; - - let bankEntries = Math.floor((height - K) / ENTRY_HEIGHT); - if (bankEntries < 1) bankEntries = 1; - if (bankEntries > 7) bankEntries = 7; - if (bankEntries === 2) bankEntries = 1; - - this.setState({ bankDisplayItems: bankEntries }); - - } - onWindowSizeChanged(width: number, height: number): void { - super.onWindowSizeChanged(width, height); - this.updateResponsive(); - } + let shortBankList = this.shortBankList(this.state.banks); + let showBankSelectDialog = shortBankList.length !== this.state.banks.entries.length; - setErrorMessage(message: string): void { - this.setState({ errorMessage: message }); - } - - - setDisplayState(newState: State): void { - this.updateOverscroll(); - - this.setState({ - displayState: newState, - canFullScreen: supportsFullScreen() && !this.model_.isAndroidHosted() - }); - if (newState === State.Ready) { - if (this.model_.isOnboarding()) { - this.handleDisplayOnboarding(); - } - } - } - - shortBankList(banks: BankIndex): BankIndexEntry[] { - let nDisplayEntries = this.state.bankDisplayItems; - let entries = banks.entries; - let nListEntries = entries.length; - - let result: BankIndexEntry[] = []; - - if (nListEntries <= nDisplayEntries) { - for (let i = 0; i < nListEntries; ++i) { - result.push(entries[i]); - } - } else { - // a subset of the list CENTERED on the currently selected entry. - let selectedIndex = 0; - for (let i = 0; i < nListEntries; ++i) { - if (entries[i].instanceId === banks.selectedBank) { - selectedIndex = i; - break; - } - } - - let minN = selectedIndex - Math.floor(nDisplayEntries / 2); - if (minN < 0) minN = 0; - let maxN = minN + nDisplayEntries; - if (maxN > entries.length) { - maxN = entries.length; - } - for (let i = minN; i < maxN; ++i) { - result.push(entries[i]); - } - } - return result; - } - handleReload() { - if (this.model_.isAndroidHosted()) { - this.model_.chooseNewDevice(); - } else { - window.location.reload(); - } - } - getReloadingMessage(): string { - switch (this.state.displayState) { - case State.ApplyingChanges: - return "Applying\u00A0changes..."; - case State.ReloadingPlugins: - return "Reloading\u00A0plugins..."; - case State.DownloadingUpdate: - return "Downloading update..."; - case State.InstallingUpdate: - return "Installing update...."; - case State.HotspotChanging: - return "Network connection changing..." - default: - return "Reconnecting..."; - } - } - render() { - - const classes = withStyles.getClasses(this.props); - - let shortBankList = this.shortBankList(this.state.banks); - let showBankSelectDialog = shortBankList.length !== this.state.banks.entries.length; - - - return ( -
{ - if (!this.model_.debug) { - e.preventDefault(); e.stopPropagation(); - } else { - if ((e.target as any).tagName === "IMG") { - e.preventDefault(); - e.stopPropagation(); - } + return ( +
{ + if (!this.model_.debug) { + e.preventDefault(); e.stopPropagation(); + } else { + if ((e.target as any).tagName === "IMG") { + e.preventDefault(); + e.stopPropagation(); } + } + }} + > + {this.state.performanceView ? ( + { this.setState({ performanceView: false }); }} + /> + ) : ( +
- {this.state.performanceView ? ( - { this.setState({ performanceView: false }); }} - /> - ) : ( -
+ > - {(!this.state.tinyToolBar) && !this.state.performanceView ? - ( - - - { this.showDrawer() }} - size="large"> - - -
- -
-
- {this.state.canFullScreen && - { this.toggleFullScreen(); }} - color="inherit" - size="large"> - {this.state.isFullScreen ? ( - - ) : ( - - - )} - - - } - - - ) : ( -
- + + { this.showDrawer() }} color="inherit" + onClick={() => { this.showDrawer() }} size="large"> - + - {this.state.canFullScreen && ( +
+ +
+
+ {this.state.canFullScreen && { this.toggleFullScreen(); }} + color="inherit" size="large"> {this.state.isFullScreen ? ( - + ) : ( - + )} - )} -
- )} - { this.hideDrawer(false); }} > + } +
+ + ) : ( +
+ { this.showDrawer() }} + color="inherit" + size="large"> + + + {this.state.canFullScreen && ( + { this.toggleFullScreen(); }} + size="large"> + {this.state.isFullScreen ? ( + + ) : ( + - - { - ev.stopPropagation(); - this.hideDrawer(true); - this.setState({ performanceView: true }); - }}> - - - - - - - - - Banks + )} - - { - shortBankList.map((bank) => { - return ( - { - ev.stopPropagation(); - this.hideDrawer(false); - this.handleSpecificBank(bank.instanceId); - }} - > + + )} +
+ )} + { this.hideDrawer(false); }} > - - + + { + ev.stopPropagation(); + this.hideDrawer(true); + this.setState({ performanceView: true }); + }}> + + + + + + + + + Banks - ); - }) - } - { - showBankSelectDialog && ( - + { + shortBankList.map((bank) => { + return ( + { ev.stopPropagation(); - this.hideDrawer(true); - this.handleDrawerSelectBank(); + this.hideDrawer(false); + this.handleSpecificBank(bank.instanceId); }} > - + + ); + }) + } + { + showBankSelectDialog && ( + { + ev.stopPropagation(); + this.hideDrawer(true); + this.handleDrawerSelectBank(); + }} + > + + + + + ) + } + + + + { + ev.stopPropagation(); + this.hideDrawer(true); + this.handleDrawerRenameBank() + }}> + + + + + + { + ev.stopPropagation(); + this.hideDrawer(true); + this.handleDrawerSaveBankAs(); + }} > + + + + + + { + ev.stopPropagation(); + this.hideDrawer(true); + this.handleDrawerManageBanks(); + }}> + + + + + + + + + { + ev.stopPropagation(); + this.hideDrawer(true); + this.handleDrawerSettingsClick() + }}> + + + + + + { + ev.stopPropagation(); + this.hideDrawer(true); + this.handleDrawerAboutClick(); + }}> + + + + + + { + ev.stopPropagation(); + this.handleDrawerDonationClick(); + }}> + + + + + + + + + {!this.state.tinyToolBar && ( + + )} +
+
+
+ {(this.state.displayState !== State.Loading) && + ( + ) } - - - - { - ev.stopPropagation(); - this.hideDrawer(true); - this.handleDrawerRenameBank() - }}> - - - - - - { - ev.stopPropagation(); - this.hideDrawer(true); - this.handleDrawerSaveBankAs(); - }} > - - - - - - { - ev.stopPropagation(); - this.hideDrawer(true); - this.handleDrawerManageBanks(); - }}> - - - - - - - - - { - ev.stopPropagation(); - this.hideDrawer(true); - this.handleDrawerSettingsClick() - }}> - - - - - - { - ev.stopPropagation(); - this.hideDrawer(true); - this.handleDrawerAboutClick(); - }}> - - - - - - { - ev.stopPropagation(); - this.handleDrawerDonationClick(); - }}> - - - - - - - - - {!this.state.tinyToolBar && ( - - )} -
-
-
- {(this.state.displayState !== State.Loading) && - ( - - ) - } -
-
-
- this.setState({ bankDialogOpen: false })} /> - {(this.state.aboutDialogOpen) && - ( - this.setState({ aboutDialogOpen: false })} /> - )} - this.handleSettingsDialogClose()} /> - { - this.setState({ - renameBankDialogOpen: false, - saveBankAsDialogOpen: false - }) - }} - onOk={(text: string) => { - if (this.state.renameBankDialogOpen) { - this.handleBankRenameOk(text); - } else if (this.state.saveBankAsDialogOpen) { - this.handleSaveBankAsOk(text); - } + +
+
+ this.setState({ bankDialogOpen: false })} /> + {(this.state.aboutDialogOpen) && + ( + this.setState({ aboutDialogOpen: false })} /> + )} + this.handleSettingsDialogClose()} /> + { + this.setState({ + renameBankDialogOpen: false, + saveBankAsDialogOpen: false + }) + }} + onOk={(text: string) => { + if (this.state.renameBankDialogOpen) { + this.handleBankRenameOk(text); + } else if (this.state.saveBankAsDialogOpen) { + this.handleSaveBankAsOk(text); } + } + } + /> + + { this.setState({ zoomedControlOpen: false }); }} + onDialogClosed={() => { this.model_.zoomedUiControl.set(undefined); } + } + /> + + {this.state.showStatusMonitor && ()} +
+ ) + } + + + + + + + + { + this.state.alertDialogMessage } - /> - - { this.setState({ zoomedControlOpen: false }); }} - onDialogClosed={() => { this.model_.zoomedUiControl.set(undefined); } - } - /> - - {this.state.showStatusMonitor && ()} -
- ) - } + + + + + + + - - - - - - { - this.state.alertDialogMessage - } - - - - - - - - - - +
-
-
 
-
-
- -
-
-

- Error: {this.state.errorMessage} -

-
-
- - -
+ position: "absolute", + minHeight: "10em", + left: "0px", + top: "0px", + right: "0px", + bottom: "0px", + opacity: 0.8, + background: + isDarkMode() ? "#222" : "#EEE", + }} /> +
 
+
+
+
-
 
-
+
+

+ Error: {this.state.errorMessage} +

+
+
+ - - {/* Reloading mask */} - < Modal - open={wantsReloadingScreen(this.state.displayState) || this.state.displayState === State.Loading} - aria-label="loading" - aria-describedby="reloading-modal-description" - > -
-
-
-
- -
- - { - this.state.displayState === State.Loading ? - "Loading..." - : this.getReloadingMessage() - } -
- -
+
 
+
- ); - } - }; + + {/* Reloading mask */} + < Modal + open={wantsReloadingScreen(this.state.displayState) || this.state.displayState === State.Loading} + aria-label="loading" + aria-describedby="reloading-modal-description" + > +
+
+
+
+ +
+ + { + this.state.displayState === State.Loading ? + "Loading..." + : this.getReloadingMessage() + } + +
+
+ +
+ + ); + } +}; const AppThemed = withStyles(AppThemedBase, appStyles);