From 051fd8dd0f733113b0a15661648983ee28c9c61c Mon Sep 17 00:00:00 2001 From: arjxn-py Date: Sat, 5 Oct 2024 15:50:18 +0530 Subject: [PATCH 1/6] Sync editor upon editor change --- packages/base/src/commands.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/base/src/commands.ts b/packages/base/src/commands.ts index 1d150eab..1284b6e1 100644 --- a/packages/base/src/commands.ts +++ b/packages/base/src/commands.ts @@ -668,6 +668,17 @@ function getSelectedObjectId(widget: JupyterCadWidget): string { return ''; } +function syncEditor(tracker: WidgetTracker) { + tracker.currentChanged.connect(() => { + const currentWidget = tracker.currentWidget; + + if (currentWidget) { + const resizeEvent = new Event('resize'); + window.dispatchEvent(resizeEvent); + } + }); +} + /** * Add the FreeCAD commands to the application's command registry. */ @@ -683,6 +694,7 @@ export function addCommands( const trans = translator.load('jupyterlab'); const { commands } = app; Private.updateFormSchema(formSchemaRegistry); + syncEditor(tracker); commands.addCommand(CommandIDs.toggleConsole, { label: trans.__('Toggle console'), From 95576c8b4e3f98abe3f175bd038b2af20fdf8fa9 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 5 Oct 2024 10:20:59 +0000 Subject: [PATCH 2/6] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- packages/base/src/commands.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/base/src/commands.ts b/packages/base/src/commands.ts index 1284b6e1..02742e0a 100644 --- a/packages/base/src/commands.ts +++ b/packages/base/src/commands.ts @@ -671,7 +671,7 @@ function getSelectedObjectId(widget: JupyterCadWidget): string { function syncEditor(tracker: WidgetTracker) { tracker.currentChanged.connect(() => { const currentWidget = tracker.currentWidget; - + if (currentWidget) { const resizeEvent = new Event('resize'); window.dispatchEvent(resizeEvent); From 801b4951ecf949efb284b9714710abe02711c266 Mon Sep 17 00:00:00 2001 From: arjxn-py Date: Wed, 9 Oct 2024 01:52:40 +0530 Subject: [PATCH 3/6] Define `syncEditor` not in commands --- packages/base/src/commands.ts | 12 +----------- packages/base/src/widget.ts | 12 ++++++++++++ 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/packages/base/src/commands.ts b/packages/base/src/commands.ts index 02742e0a..168083e9 100644 --- a/packages/base/src/commands.ts +++ b/packages/base/src/commands.ts @@ -43,6 +43,7 @@ import { DocumentRegistry } from '@jupyterlab/docregistry'; import { PathExt } from '@jupyterlab/coreutils'; import { MainViewModel } from './3dview/mainviewmodel'; import { handleRemoveObject } from './panelview'; +import { syncEditor } from './widget'; export function newName(type: string, model: IJupyterCadModel): string { const sharedModel = model.sharedModel; @@ -668,17 +669,6 @@ function getSelectedObjectId(widget: JupyterCadWidget): string { return ''; } -function syncEditor(tracker: WidgetTracker) { - tracker.currentChanged.connect(() => { - const currentWidget = tracker.currentWidget; - - if (currentWidget) { - const resizeEvent = new Event('resize'); - window.dispatchEvent(resizeEvent); - } - }); -} - /** * Add the FreeCAD commands to the application's command registry. */ diff --git a/packages/base/src/widget.ts b/packages/base/src/widget.ts index 0800ed2e..2124ab71 100644 --- a/packages/base/src/widget.ts +++ b/packages/base/src/widget.ts @@ -13,6 +13,7 @@ import { JupyterCadMainViewPanel } from './3dview'; import { MainViewModel } from './3dview/mainviewmodel'; import { ConsoleView } from './console'; import { AxeHelper, CameraSettings, ClipSettings, ExplodedView } from './types'; +import { WidgetTracker } from '@jupyterlab/apputils'; export class JupyterCadWidget extends DocumentWidget @@ -37,6 +38,17 @@ export class JupyterCadWidget }; } +export function syncEditor(tracker: WidgetTracker) { + tracker.currentChanged.connect(() => { + const currentWidget = tracker.currentWidget; + + if (currentWidget) { + const resizeEvent = new Event('resize'); + window.dispatchEvent(resizeEvent); + } + }); +} + export class JupyterCadPanel extends SplitPanel { constructor(options: JupyterCadPanel.IOptions) { super({ orientation: 'vertical', spacing: 0 }); From 021efa322e649bc8618398f5225d5c197c4835a0 Mon Sep 17 00:00:00 2001 From: arjxn-py Date: Wed, 9 Oct 2024 16:15:30 +0530 Subject: [PATCH 4/6] Implement `_syncEditor` in JupyterCadPanel --- packages/base/src/commands.ts | 2 -- packages/base/src/widget.ts | 24 ++++++++++--------- python/jupytercad_core/src/factory.ts | 9 +++---- python/jupytercad_lab/src/notebookrenderer.ts | 11 +++++++-- 4 files changed, 27 insertions(+), 19 deletions(-) diff --git a/packages/base/src/commands.ts b/packages/base/src/commands.ts index d593cdaa..9f1ed3c4 100644 --- a/packages/base/src/commands.ts +++ b/packages/base/src/commands.ts @@ -43,7 +43,6 @@ import { DocumentRegistry } from '@jupyterlab/docregistry'; import { PathExt } from '@jupyterlab/coreutils'; import { MainViewModel } from './3dview/mainviewmodel'; import { handleRemoveObject } from './panelview'; -import { syncEditor } from './widget'; export function newName(type: string, model: IJupyterCadModel): string { const sharedModel = model.sharedModel; @@ -684,7 +683,6 @@ export function addCommands( const trans = translator.load('jupyterlab'); const { commands } = app; Private.updateFormSchema(formSchemaRegistry); - syncEditor(tracker); commands.addCommand(CommandIDs.toggleConsole, { label: trans.__('Toggle console'), diff --git a/packages/base/src/widget.ts b/packages/base/src/widget.ts index 2124ab71..fe83830d 100644 --- a/packages/base/src/widget.ts +++ b/packages/base/src/widget.ts @@ -38,17 +38,6 @@ export class JupyterCadWidget }; } -export function syncEditor(tracker: WidgetTracker) { - tracker.currentChanged.connect(() => { - const currentWidget = tracker.currentWidget; - - if (currentWidget) { - const resizeEvent = new Event('resize'); - window.dispatchEvent(resizeEvent); - } - }); -} - export class JupyterCadPanel extends SplitPanel { constructor(options: JupyterCadPanel.IOptions) { super({ orientation: 'vertical', spacing: 0 }); @@ -57,6 +46,7 @@ export class JupyterCadPanel extends SplitPanel { this._initView(); this._consoleOption = consoleOption; this._consoleTracker = consoleTracker; + this._syncEditor(options.tracker); } _initModel(options: { @@ -79,6 +69,17 @@ export class JupyterCadPanel extends SplitPanel { SplitPanel.setStretch(this._jupyterCadMainViewPanel, 1); } + private _syncEditor(tracker: WidgetTracker) { + tracker.currentChanged.connect(() => { + const currentWidget = tracker.currentWidget; + + if (currentWidget) { + const resizeEvent = new Event('resize'); + window.dispatchEvent(resizeEvent); + } + }); + } + get jupyterCadMainViewPanel(): JupyterCadMainViewPanel { return this._jupyterCadMainViewPanel; } @@ -241,5 +242,6 @@ export namespace JupyterCadPanel { model: IJupyterCadModel; workerRegistry: IJCadWorkerRegistry; consoleTracker?: IConsoleTracker; + tracker: WidgetTracker; } } diff --git a/python/jupytercad_core/src/factory.ts b/python/jupytercad_core/src/factory.ts index 26e4f331..3075267b 100644 --- a/python/jupytercad_core/src/factory.ts +++ b/python/jupytercad_core/src/factory.ts @@ -1,7 +1,6 @@ import { ConsolePanel, IConsoleTracker } from '@jupyterlab/console'; import { JupyterCadModel, - IJupyterCadTracker, IJCadWorkerRegistry, IJCadExternalCommandRegistry } from '@jupytercad/schema'; @@ -15,9 +14,10 @@ import { ToolbarWidget } from '@jupytercad/base'; import { ServiceManager } from '@jupyterlab/services'; - +import { WidgetTracker } from '@jupyterlab/apputils'; +import { IJupyterCadWidget } from '@jupytercad/schema'; interface IOptions extends DocumentRegistry.IWidgetFactoryOptions { - tracker: IJupyterCadTracker; + tracker: WidgetTracker; commands: CommandRegistry; workerRegistry: IJCadWorkerRegistry; externalCommandRegistry: IJCadExternalCommandRegistry; @@ -66,7 +66,8 @@ export class JupyterCadWidgetFactory extends ABCWidgetFactory< mimeTypeService: this.options.mimeTypeService, rendermime: this.options.rendermime, consoleTracker: this.options.consoleTracker, - commandRegistry: this.options.commands + commandRegistry: this.options.commands, + tracker: this.options.tracker }); const toolbar = new ToolbarWidget({ commands: this._commands, diff --git a/python/jupytercad_lab/src/notebookrenderer.ts b/python/jupytercad_lab/src/notebookrenderer.ts index 8c9b50df..b9d90b84 100644 --- a/python/jupytercad_lab/src/notebookrenderer.ts +++ b/python/jupytercad_lab/src/notebookrenderer.ts @@ -4,6 +4,7 @@ import { IJCadWorkerRegistry, IJCadWorkerRegistryToken, IJupyterCadDoc, + IJupyterCadWidget, JupyterCadModel } from '@jupytercad/schema'; @@ -20,7 +21,7 @@ import { IJupyterYWidgetManager, JupyterYModel } from 'yjs-widgets'; - +import { WidgetTracker } from '@jupyterlab/apputils'; export interface ICommMetadata { create_ydoc: boolean; path: string; @@ -39,6 +40,7 @@ export class YJupyterCADLuminoWidget extends Panel { constructor(options: { model: JupyterCadModel; workerRegistry: IJCadWorkerRegistry; + tracker: WidgetTracker; }) { super(); @@ -78,6 +80,10 @@ export const notebookRenderePlugin: JupyterFrontEndPlugin = { console.error('Missing ICollaborativeDrive token!'); return; } + + const tracker = new WidgetTracker({ + namespace: 'jupytercad' + }); class YJupyterCADModelFactory extends YJupyterCADModel { ydocFactory(commMetadata: ICommMetadata): Y.Doc { const { path, format, contentType } = commMetadata; @@ -105,7 +111,8 @@ export const notebookRenderePlugin: JupyterFrontEndPlugin = { const widget = new YJupyterCADLuminoWidget({ model: yModel.jupyterCADModel, - workerRegistry + workerRegistry, + tracker }); // Widget.attach(widget, node); From 311e706488560be632eb934584d39e4b73223076 Mon Sep 17 00:00:00 2001 From: arjxn-py Date: Fri, 11 Oct 2024 14:52:20 +0530 Subject: [PATCH 5/6] Emit resize event in `trackerPlugin` --- packages/base/src/widget.ts | 14 -------------- python/jupytercad_core/src/factory.ts | 10 ++++------ python/jupytercad_core/src/plugin.ts | 8 ++++++++ python/jupytercad_lab/src/notebookrenderer.ts | 9 +-------- 4 files changed, 13 insertions(+), 28 deletions(-) diff --git a/packages/base/src/widget.ts b/packages/base/src/widget.ts index fe83830d..0800ed2e 100644 --- a/packages/base/src/widget.ts +++ b/packages/base/src/widget.ts @@ -13,7 +13,6 @@ import { JupyterCadMainViewPanel } from './3dview'; import { MainViewModel } from './3dview/mainviewmodel'; import { ConsoleView } from './console'; import { AxeHelper, CameraSettings, ClipSettings, ExplodedView } from './types'; -import { WidgetTracker } from '@jupyterlab/apputils'; export class JupyterCadWidget extends DocumentWidget @@ -46,7 +45,6 @@ export class JupyterCadPanel extends SplitPanel { this._initView(); this._consoleOption = consoleOption; this._consoleTracker = consoleTracker; - this._syncEditor(options.tracker); } _initModel(options: { @@ -69,17 +67,6 @@ export class JupyterCadPanel extends SplitPanel { SplitPanel.setStretch(this._jupyterCadMainViewPanel, 1); } - private _syncEditor(tracker: WidgetTracker) { - tracker.currentChanged.connect(() => { - const currentWidget = tracker.currentWidget; - - if (currentWidget) { - const resizeEvent = new Event('resize'); - window.dispatchEvent(resizeEvent); - } - }); - } - get jupyterCadMainViewPanel(): JupyterCadMainViewPanel { return this._jupyterCadMainViewPanel; } @@ -242,6 +229,5 @@ export namespace JupyterCadPanel { model: IJupyterCadModel; workerRegistry: IJCadWorkerRegistry; consoleTracker?: IConsoleTracker; - tracker: WidgetTracker; } } diff --git a/python/jupytercad_core/src/factory.ts b/python/jupytercad_core/src/factory.ts index 3075267b..db9137ba 100644 --- a/python/jupytercad_core/src/factory.ts +++ b/python/jupytercad_core/src/factory.ts @@ -2,7 +2,8 @@ import { ConsolePanel, IConsoleTracker } from '@jupyterlab/console'; import { JupyterCadModel, IJCadWorkerRegistry, - IJCadExternalCommandRegistry + IJCadExternalCommandRegistry, + IJupyterCadTracker } from '@jupytercad/schema'; import { ABCWidgetFactory, DocumentRegistry } from '@jupyterlab/docregistry'; import { CommandRegistry } from '@lumino/commands'; @@ -14,10 +15,8 @@ import { ToolbarWidget } from '@jupytercad/base'; import { ServiceManager } from '@jupyterlab/services'; -import { WidgetTracker } from '@jupyterlab/apputils'; -import { IJupyterCadWidget } from '@jupytercad/schema'; interface IOptions extends DocumentRegistry.IWidgetFactoryOptions { - tracker: WidgetTracker; + tracker: IJupyterCadTracker; commands: CommandRegistry; workerRegistry: IJCadWorkerRegistry; externalCommandRegistry: IJCadExternalCommandRegistry; @@ -66,8 +65,7 @@ export class JupyterCadWidgetFactory extends ABCWidgetFactory< mimeTypeService: this.options.mimeTypeService, rendermime: this.options.rendermime, consoleTracker: this.options.consoleTracker, - commandRegistry: this.options.commands, - tracker: this.options.tracker + commandRegistry: this.options.commands }); const toolbar = new ToolbarWidget({ commands: this._commands, diff --git a/python/jupytercad_core/src/plugin.ts b/python/jupytercad_core/src/plugin.ts index b3c2b2d7..dc5e89c7 100644 --- a/python/jupytercad_core/src/plugin.ts +++ b/python/jupytercad_core/src/plugin.ts @@ -39,6 +39,14 @@ export const trackerPlugin: JupyterFrontEndPlugin = { const tracker = new WidgetTracker({ namespace: NAME_SPACE }); + tracker.currentChanged.connect(() => { + const currentWidget = tracker.currentWidget; + + if (currentWidget) { + const resizeEvent = new Event('resize'); + window.dispatchEvent(resizeEvent); + } + }); console.log('jupytercad:core:tracker is activated!'); return tracker; } diff --git a/python/jupytercad_lab/src/notebookrenderer.ts b/python/jupytercad_lab/src/notebookrenderer.ts index b9d90b84..bf5c6d02 100644 --- a/python/jupytercad_lab/src/notebookrenderer.ts +++ b/python/jupytercad_lab/src/notebookrenderer.ts @@ -4,7 +4,6 @@ import { IJCadWorkerRegistry, IJCadWorkerRegistryToken, IJupyterCadDoc, - IJupyterCadWidget, JupyterCadModel } from '@jupytercad/schema'; @@ -21,7 +20,6 @@ import { IJupyterYWidgetManager, JupyterYModel } from 'yjs-widgets'; -import { WidgetTracker } from '@jupyterlab/apputils'; export interface ICommMetadata { create_ydoc: boolean; path: string; @@ -40,7 +38,6 @@ export class YJupyterCADLuminoWidget extends Panel { constructor(options: { model: JupyterCadModel; workerRegistry: IJCadWorkerRegistry; - tracker: WidgetTracker; }) { super(); @@ -81,9 +78,6 @@ export const notebookRenderePlugin: JupyterFrontEndPlugin = { return; } - const tracker = new WidgetTracker({ - namespace: 'jupytercad' - }); class YJupyterCADModelFactory extends YJupyterCADModel { ydocFactory(commMetadata: ICommMetadata): Y.Doc { const { path, format, contentType } = commMetadata; @@ -111,8 +105,7 @@ export const notebookRenderePlugin: JupyterFrontEndPlugin = { const widget = new YJupyterCADLuminoWidget({ model: yModel.jupyterCADModel, - workerRegistry, - tracker + workerRegistry }); // Widget.attach(widget, node); From da03c4147faa68ec84834a1ac8e0246f8bda9f1f Mon Sep 17 00:00:00 2001 From: arjxn-py Date: Fri, 11 Oct 2024 14:54:59 +0530 Subject: [PATCH 6/6] Little cleanup --- python/jupytercad_core/src/factory.ts | 1 + python/jupytercad_lab/src/notebookrenderer.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/python/jupytercad_core/src/factory.ts b/python/jupytercad_core/src/factory.ts index db9137ba..70f07ff5 100644 --- a/python/jupytercad_core/src/factory.ts +++ b/python/jupytercad_core/src/factory.ts @@ -15,6 +15,7 @@ import { ToolbarWidget } from '@jupytercad/base'; import { ServiceManager } from '@jupyterlab/services'; + interface IOptions extends DocumentRegistry.IWidgetFactoryOptions { tracker: IJupyterCadTracker; commands: CommandRegistry; diff --git a/python/jupytercad_lab/src/notebookrenderer.ts b/python/jupytercad_lab/src/notebookrenderer.ts index bf5c6d02..8c9b50df 100644 --- a/python/jupytercad_lab/src/notebookrenderer.ts +++ b/python/jupytercad_lab/src/notebookrenderer.ts @@ -20,6 +20,7 @@ import { IJupyterYWidgetManager, JupyterYModel } from 'yjs-widgets'; + export interface ICommMetadata { create_ydoc: boolean; path: string; @@ -77,7 +78,6 @@ export const notebookRenderePlugin: JupyterFrontEndPlugin = { console.error('Missing ICollaborativeDrive token!'); return; } - class YJupyterCADModelFactory extends YJupyterCADModel { ydocFactory(commMetadata: ICommMetadata): Y.Doc { const { path, format, contentType } = commMetadata;