diff --git a/src/plugin/memory-webview-main.ts b/src/plugin/memory-webview-main.ts index fcdf185..2ba550d 100644 --- a/src/plugin/memory-webview-main.ts +++ b/src/plugin/memory-webview-main.ts @@ -174,14 +174,14 @@ export class MemoryWebview implements vscode.CustomReadonlyEditorProvider { } // Set HTML content - await this.getWebviewContent(panel); + await this.getWebviewContent(panel, initialMemory); // Sets up an event listener to listen for messages passed from the webview view context // and executes code based on the message that is received this.setWebviewMessageListener(panel, initialMemory); } - protected async getWebviewContent(panel: vscode.WebviewPanel): Promise { + protected async getWebviewContent(panel: vscode.WebviewPanel, initialMemory?: MemoryOptions): Promise { const mainUri = panel.webview.asWebviewUri(vscode.Uri.joinPath( this.extensionUri, 'dist', @@ -205,7 +205,7 @@ export class MemoryWebview implements vscode.CustomReadonlyEditorProvider { -
+
${initialMemory ? `
` : ''} `; @@ -214,7 +214,7 @@ export class MemoryWebview implements vscode.CustomReadonlyEditorProvider { protected setWebviewMessageListener(panel: vscode.WebviewPanel, options?: MemoryOptions): void { const participant = this.messenger.registerWebviewPanel(panel); const disposables = [ - this.messenger.onNotification(readyType, () => this.ready(participant, panel, options), { sender: participant }), + this.messenger.onNotification(readyType, () => this.ready(participant, panel), { sender: participant }), this.messenger.onRequest(setOptionsType, newOptions => { options = { ...options, ...newOptions }; }, { sender: participant }), this.messenger.onRequest(logMessageType, message => outputChannelLogger.info('[webview]:', message), { sender: participant }), this.messenger.onRequest(readMemoryType, request => this.readMemory(participant, request), { sender: participant }), @@ -330,11 +330,10 @@ export class MemoryWebview implements vscode.CustomReadonlyEditorProvider { } } - protected async ready(participant: WebviewIdMessageParticipant, panel: vscode.WebviewPanel, options?: MemoryOptions): Promise { + protected async ready(participant: WebviewIdMessageParticipant, panel: vscode.WebviewPanel): Promise { this.setSession(participant, vscode.debug.activeDebugSession?.id); this.setSessions(participant, this.sessionTracker.getSessions()); await this.setMemoryDisplaySettings(participant, panel.title); - this.refresh(participant, options); } protected async setSession(participant: WebviewIdMessageParticipant, sessionId: string | undefined): Promise { diff --git a/src/webview/memory-webview-view.tsx b/src/webview/memory-webview-view.tsx index 5be5c94..6eb6c1f 100644 --- a/src/webview/memory-webview-view.tsx +++ b/src/webview/memory-webview-view.tsx @@ -90,12 +90,18 @@ export const DEFAULT_MEMORY_DISPLAY_CONFIGURATION: MemoryDisplaySettings = { visibleColumns: manifest.DEFAULT_VISIBLE_COLUMNS }; +function getInitialValuesHolder(): HTMLElement | null { + return document.getElementById('initial-data'); +} + class App extends React.Component<{}, MemoryAppState> { protected memoryWidget = React.createRef(); protected refreshTimer?: NodeJS.Timeout | number; public constructor(props: {}) { super(props); + const initialValuesHolder = getInitialValuesHolder(); + const initialReadArguments = initialValuesHolder ? { ...DEFAULT_READ_ARGUMENTS, ...JSON.parse(initialValuesHolder.dataset['options']!) } : DEFAULT_READ_ARGUMENTS; columnContributionService.register(new AddressColumn(), false); columnContributionService.register(new DataColumn(), false); columnContributionService.register(variableDecorator); @@ -111,8 +117,8 @@ class App extends React.Component<{}, MemoryAppState> { sessionContext: DEFAULT_SESSION_CONTEXT, memory: undefined, effectiveAddressLength: 0, - configuredReadArguments: DEFAULT_READ_ARGUMENTS, - activeReadArguments: DEFAULT_READ_ARGUMENTS, + configuredReadArguments: initialReadArguments, + activeReadArguments: initialReadArguments, decorations: [], hoverService: hoverService, columns: columnContributionService.getColumns(), @@ -123,6 +129,9 @@ class App extends React.Component<{}, MemoryAppState> { } public componentDidMount(): void { + if (getInitialValuesHolder()) { + this.fetchMemory(this.state.activeReadArguments); + } messenger.onRequest(setOptionsType, options => this.setOptions(options)); messenger.onNotification(memoryWrittenType, writtenMemory => this.memoryWritten(writtenMemory)); messenger.onNotification(sessionsChangedType, sessions => this.sessionsChanged(sessions));