Skip to content

Commit

Permalink
Add a setting.
Browse files Browse the repository at this point in the history
  • Loading branch information
D8H committed May 17, 2024
1 parent b8a3815 commit ab3d480
Show file tree
Hide file tree
Showing 10 changed files with 180 additions and 74 deletions.
5 changes: 5 additions & 0 deletions newIDE/app/src/CommandPalette/CommandsList.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export type CommandName =
| 'LAUNCH_DEBUG_PREVIEW'
| 'LAUNCH_NETWORK_PREVIEW'
| 'HOT_RELOAD_PREVIEW'
| 'LAUNCH_PREVIEW_WITH_DIAGNOSTIC_REPORT'
| 'OPEN_HOME_PAGE'
| 'CREATE_NEW_PROJECT'
| 'OPEN_PROJECT'
Expand Down Expand Up @@ -113,6 +114,10 @@ const commandsList: { [CommandName]: CommandMetadata } = {
area: 'PROJECT',
displayText: t`Apply changes to the running preview`,
},
LAUNCH_PREVIEW_WITH_DIAGNOSTIC_REPORT: {
area: 'PROJECT',
displayText: t`Launch preview with diagnostic report`,
},
OPEN_HOME_PAGE: { area: 'IDE', displayText: t`Show Home` },
CREATE_NEW_PROJECT: {
area: 'GENERAL',
Expand Down
17 changes: 15 additions & 2 deletions newIDE/app/src/ExportAndShare/DiagnosticReportDialog.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import { Trans } from '@lingui/macro';
import * as React from 'react';
import Text from '../UI/Text';
import Toggle from '../UI/Toggle';
import { ColumnStackLayout } from '../UI/Layout';
import Dialog, { DialogPrimaryButton } from '../UI/Dialog';
import { mapFor } from '../Utils/MapFor';
Expand All @@ -14,6 +15,7 @@ import {
TableHeaderColumn,
} from '../UI/Table';
import GDevelopThemeContext from '../UI/Theme/GDevelopThemeContext';
import PreferencesContext from '../MainFrame/Preferences/PreferencesContext';

const gd: libGDevelop = global.gd;

Expand All @@ -36,6 +38,7 @@ export default function DiagnosticReportDialog({
onClose,
}: Props) {
const gdevelopTheme = React.useContext(GDevelopThemeContext);
const preferences = React.useContext(PreferencesContext);

const renderDiagnosticReport = React.useCallback(
(diagnosticReport: gdDiagnosticReport) => {
Expand Down Expand Up @@ -96,7 +99,7 @@ export default function DiagnosticReportDialog({
</Text>
</TableRowColumn>
<TableRowColumn>
<Text size="body">
<Text size="body" allowSelection>
{[...missingSceneVariables].join(', ')}
</Text>
</TableRowColumn>
Expand All @@ -118,7 +121,7 @@ export default function DiagnosticReportDialog({
</Text>
</TableRowColumn>
<TableRowColumn>
<Text size="body">
<Text size="body" allowSelection>
{[...missingVariables].join(', ')}
</Text>
</TableRowColumn>
Expand Down Expand Up @@ -174,6 +177,16 @@ export default function DiagnosticReportDialog({
onClick={onClose}
/>,
]}
secondaryActions={[
<Toggle
label={<Trans>Open automatically</Trans>}
toggled={preferences.values.openDiagnosticReportAutomatically}
onToggle={(e, check) =>
preferences.setOpenDiagnosticReportAutomatically(check)
}
labelPosition="right"
/>,
]}
onRequestClose={onClose}
onApply={onClose}
open
Expand Down
9 changes: 9 additions & 0 deletions newIDE/app/src/MainFrame/MainFrameCommands.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ type CommandHandlers = {|
onLaunchDebugPreview: () => void,
onLaunchNetworkPreview: () => void,
onHotReloadPreview: () => void,
onLaunchPreviewWithDiagnosticReport: () => void,
allowNetworkPreview: boolean,
onOpenHomePage: () => void,
onCreateBlank: () => void,
Expand Down Expand Up @@ -99,6 +100,14 @@ const useMainFrameCommands = (handlers: CommandHandlers) => {
}
);

useCommand(
'LAUNCH_PREVIEW_WITH_DIAGNOSTIC_REPORT',
handlers.previewEnabled && !handlers.hasPreviewsRunning,
{
handler: handlers.onLaunchPreviewWithDiagnosticReport,
}
);

useCommand('OPEN_HOME_PAGE', true, {
handler: handlers.onOpenHomePage,
});
Expand Down
6 changes: 6 additions & 0 deletions newIDE/app/src/MainFrame/Preferences/PreferencesContext.js
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,7 @@ export type PreferencesValues = {|
showGetStartedSectionByDefault: boolean,
showEventBasedObjectsEditor: boolean,
showDeprecatedInstructionWarning: boolean,
openDiagnosticReportAutomatically: boolean,
use3DEditor: boolean,
inAppTutorialsProgress: InAppTutorialProgressDatabase,
newProjectsDefaultFolder: string,
Expand Down Expand Up @@ -288,6 +289,8 @@ export type Preferences = {|
setShowGetStartedSectionByDefault: (enabled: boolean) => void,
setShowEventBasedObjectsEditor: (enabled: boolean) => void,
getShowEventBasedObjectsEditor: () => boolean,
setOpenDiagnosticReportAutomatically: (enabled: boolean) => void,
getOpenDiagnosticReportAutomatically: () => boolean,
setShowDeprecatedInstructionWarning: (enabled: boolean) => void,
getShowDeprecatedInstructionWarning: () => boolean,
setUse3DEditor: (enabled: boolean) => void,
Expand Down Expand Up @@ -355,6 +358,7 @@ export const initialPreferences = {
showCommunityExtensions: false,
showGetStartedSectionByDefault: true,
showEventBasedObjectsEditor: false,
openDiagnosticReportAutomatically: true,
showDeprecatedInstructionWarning: false,
use3DEditor: isWebGLSupported(),
inAppTutorialsProgress: {},
Expand Down Expand Up @@ -416,6 +420,8 @@ export const initialPreferences = {
setShowEventBasedObjectsEditor: (enabled: boolean) => {},
getShowEventBasedObjectsEditor: () => false,
setShowDeprecatedInstructionWarning: (enabled: boolean) => {},
getOpenDiagnosticReportAutomatically: () => true,
setOpenDiagnosticReportAutomatically: (enabled: boolean) => {},
getShowDeprecatedInstructionWarning: () => false,
setUse3DEditor: (enabled: boolean) => {},
getUse3DEditor: () => false,
Expand Down
9 changes: 9 additions & 0 deletions newIDE/app/src/MainFrame/Preferences/PreferencesDialog.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ const PreferencesDialog = ({ i18n, onClose }: Props) => {
setEventsSheetCancelInlineParameter,
setShowCommunityExtensions,
setShowEventBasedObjectsEditor,
setOpenDiagnosticReportAutomatically,
setShowDeprecatedInstructionWarning,
setUse3DEditor,
setNewProjectsDefaultFolder,
Expand Down Expand Up @@ -383,6 +384,14 @@ const PreferencesDialog = ({ i18n, onClose }: Props) => {
}
/>
)}
<Toggle
onToggle={(e, check) => setOpenDiagnosticReportAutomatically(check)}
toggled={values.openDiagnosticReportAutomatically}
labelPosition="right"
label={
<Trans>Automatically open the diagnostic report at preview</Trans>
}
/>
<Toggle
onToggle={(e, check) => setShowDeprecatedInstructionWarning(check)}
toggled={values.showDeprecatedInstructionWarning}
Expand Down
24 changes: 24 additions & 0 deletions newIDE/app/src/MainFrame/Preferences/PreferencesProvider.js
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,12 @@ export default class PreferencesProvider extends React.Component<Props, State> {
getShowEventBasedObjectsEditor: this._getShowEventBasedObjectsEditor.bind(
this
),
setOpenDiagnosticReportAutomatically: this._setOpenDiagnosticReportAutomatically.bind(
this
),
getOpenDiagnosticReportAutomatically: this._getOpenDiagnosticReportAutomatically.bind(
this
),
setShowDeprecatedInstructionWarning: this._setShowDeprecatedInstructionWarning.bind(
this
),
Expand Down Expand Up @@ -440,6 +446,24 @@ export default class PreferencesProvider extends React.Component<Props, State> {
return this.state.values.showEventBasedObjectsEditor;
}

_setOpenDiagnosticReportAutomatically(
openDiagnosticReportAutomatically: boolean
) {
this.setState(
state => ({
values: {
...state.values,
openDiagnosticReportAutomatically,
},
}),
() => this._persistValuesToLocalStorage(this.state)
);
}

_getOpenDiagnosticReportAutomatically() {
return this.state.values.openDiagnosticReportAutomatically;
}

_setShowDeprecatedInstructionWarning(
showDeprecatedInstructionWarning: boolean
) {
Expand Down
152 changes: 85 additions & 67 deletions newIDE/app/src/MainFrame/Toolbar/PreviewAndShareButtons.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,14 @@ import PublishIcon from '../../UI/CustomSvgIcons/Publish';
import FlatButtonWithSplitMenu from '../../UI/FlatButtonWithSplitMenu';
import { useResponsiveWindowSize } from '../../UI/Responsive/ResponsiveWindowMeasurer';
import ResponsiveRaisedButton from '../../UI/ResponsiveRaisedButton';
import PreferencesContext from '../../MainFrame/Preferences/PreferencesContext';

export type PreviewAndShareButtonsProps = {|
onPreviewWithoutHotReload: () => void,
onOpenDebugger: () => void,
onNetworkPreview: () => void,
onHotReloadPreview: () => void,
onLaunchPreviewWithDiagnosticReport: () => void,
setPreviewOverride: ({|
isPreviewOverriden: boolean,
overridenPreviewLayoutName: ?string,
Expand All @@ -35,6 +37,7 @@ const PreviewAndShareButtons = React.memo<PreviewAndShareButtonsProps>(
onNetworkPreview,
onOpenDebugger,
onHotReloadPreview,
onLaunchPreviewWithDiagnosticReport,
canDoNetworkPreview,
isPreviewEnabled,
hasPreviewsRunning,
Expand All @@ -43,82 +46,97 @@ const PreviewAndShareButtons = React.memo<PreviewAndShareButtonsProps>(
openShareDialog,
isSharingEnabled,
}: PreviewAndShareButtonsProps) {
const preferences = React.useContext(PreferencesContext);
const { isMobile } = useResponsiveWindowSize();

const previewBuildMenuTemplate = React.useCallback(
(i18n: I18nType) => [
{
label: i18n._(t`Start Network Preview (Preview over WiFi/LAN)`),
click: onNetworkPreview,
enabled: canDoNetworkPreview,
},
{
label: i18n._(t`Start Preview and Debugger`),
click: onOpenDebugger,
},
{
label: i18n._(t`Launch another preview in a new window`),
click: onPreviewWithoutHotReload,
enabled: isPreviewEnabled && hasPreviewsRunning,
},
{ type: 'separator' },
...(previewState.overridenPreviewLayoutName
? [
{
type: 'checkbox',
label: previewState.overridenPreviewExternalLayoutName
? i18n._(
t`Start all previews from external layout ${
previewState.overridenPreviewExternalLayoutName
}`
)
: i18n._(
t`Start all previews from scene ${
previewState.overridenPreviewLayoutName
}`
),
checked: previewState.isPreviewOverriden,
click: () =>
setPreviewOverride({
isPreviewOverriden: !previewState.isPreviewOverriden,
overridenPreviewLayoutName:
previewState.overridenPreviewLayoutName,
overridenPreviewExternalLayoutName:
previewState.overridenPreviewExternalLayoutName,
}),
(i18n: I18nType) =>
[
{
label: i18n._(t`Start Network Preview (Preview over WiFi/LAN)`),
click: onNetworkPreview,
enabled: canDoNetworkPreview,
},
{
label: i18n._(t`Start Preview and Debugger`),
click: onOpenDebugger,
},
{
label: i18n._(t`Launch another preview in a new window`),
click: onPreviewWithoutHotReload,
enabled: isPreviewEnabled && hasPreviewsRunning,
},
preferences.values.openDiagnosticReportAutomatically
? null
: {
label: i18n._(t`Start preview with diagnostic report`),
click: onLaunchPreviewWithDiagnosticReport,
enabled: !hasPreviewsRunning,
},
{ type: 'separator' },
]
: []),
{
label: previewState.previewExternalLayoutName
? i18n._(
t`Use this external layout inside this scene to start all previews`
)
: i18n._(t`Use this scene to start all previews`),
click: () =>
setPreviewOverride({
isPreviewOverriden: true,
overridenPreviewLayoutName: previewState.previewLayoutName,
overridenPreviewExternalLayoutName:
previewState.previewExternalLayoutName,
}),
enabled:
previewState.previewLayoutName !==
previewState.overridenPreviewLayoutName ||
previewState.previewExternalLayoutName !==
previewState.overridenPreviewExternalLayoutName,
},
],
{ type: 'separator' },
...(previewState.overridenPreviewLayoutName
? [
{
type: 'checkbox',
label: previewState.overridenPreviewExternalLayoutName
? i18n._(
t`Start all previews from external layout ${
previewState.overridenPreviewExternalLayoutName
}`
)
: i18n._(
t`Start all previews from scene ${
previewState.overridenPreviewLayoutName
}`
),
checked: previewState.isPreviewOverriden,
click: () =>
setPreviewOverride({
isPreviewOverriden: !previewState.isPreviewOverriden,
overridenPreviewLayoutName:
previewState.overridenPreviewLayoutName,
overridenPreviewExternalLayoutName:
previewState.overridenPreviewExternalLayoutName,
}),
},
{ type: 'separator' },
]
: []),
{
label: previewState.previewExternalLayoutName
? i18n._(
t`Use this external layout inside this scene to start all previews`
)
: i18n._(t`Use this scene to start all previews`),
click: () =>
setPreviewOverride({
isPreviewOverriden: true,
overridenPreviewLayoutName: previewState.previewLayoutName,
overridenPreviewExternalLayoutName:
previewState.previewExternalLayoutName,
}),
enabled:
previewState.previewLayoutName !==
previewState.overridenPreviewLayoutName ||
previewState.previewExternalLayoutName !==
previewState.overridenPreviewExternalLayoutName,
},
].filter(Boolean),
[
onNetworkPreview,
canDoNetworkPreview,
onOpenDebugger,
onPreviewWithoutHotReload,
isPreviewEnabled,
hasPreviewsRunning,
preferences.values.openDiagnosticReportAutomatically,
onLaunchPreviewWithDiagnosticReport,
previewState.overridenPreviewLayoutName,
previewState.overridenPreviewExternalLayoutName,
previewState.isPreviewOverriden,
previewState.previewExternalLayoutName,
previewState.previewLayoutName,
setPreviewOverride,
previewState,
onNetworkPreview,
onOpenDebugger,
canDoNetworkPreview,
]
);

Expand Down
3 changes: 3 additions & 0 deletions newIDE/app/src/MainFrame/Toolbar/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,9 @@ export default React.forwardRef<MainFrameToolbarProps, ToolbarInterface>(
onOpenDebugger={props.onOpenDebugger}
onNetworkPreview={props.onNetworkPreview}
onHotReloadPreview={props.onHotReloadPreview}
onLaunchPreviewWithDiagnosticReport={
props.onLaunchPreviewWithDiagnosticReport
}
setPreviewOverride={props.setPreviewOverride}
canDoNetworkPreview={props.canDoNetworkPreview}
isPreviewEnabled={props.isPreviewEnabled}
Expand Down

0 comments on commit ab3d480

Please sign in to comment.