From 5e2225ccd3b6e3a62a2d66a59d3081ee4aca87c2 Mon Sep 17 00:00:00 2001 From: "jeremy.baker@northwestern.edu" Date: Tue, 12 Dec 2023 15:58:23 -0600 Subject: [PATCH] Bugfix: Edit world size after recompile --- .../javascripts/beak/session-lite.coffee | 3 +- .../beak/widgets/draw/view-controller.coffee | 42 +++++++++++++++++-- .../beak/widgets/initialize-ui.coffee | 40 ++---------------- 3 files changed, 43 insertions(+), 42 deletions(-) diff --git a/app/assets/javascripts/beak/session-lite.coffee b/app/assets/javascripts/beak/session-lite.coffee index 2118c2c16..22ace6f8d 100644 --- a/app/assets/javascripts/beak/session-lite.coffee +++ b/app/assets/javascripts/beak/session-lite.coffee @@ -221,9 +221,10 @@ class SessionLite @widgetController.ractive.set('isStale', false) @widgetController.ractive.set('lastCompiledCode', code) @widgetController.ractive.set('lastCompileFailed', false) - @widgetController.viewController.resetModel() @widgetController.redraw() @widgetController.freshenUpWidgets(oldWidgets, globalEval(res.widgets)) + viewWidget = @widgetController.widgets().find(({ type }) -> type is 'view') + @widgetController.viewController.resetModel(viewWidget) globalEval(res.model.result) workspace.i18nBundle.switch(@locale) diff --git a/app/assets/javascripts/beak/widgets/draw/view-controller.coffee b/app/assets/javascripts/beak/widgets/draw/view-controller.coffee index aa483b2f1..e11c37490 100644 --- a/app/assets/javascripts/beak/widgets/draw/view-controller.coffee +++ b/app/assets/javascripts/beak/widgets/draw/view-controller.coffee @@ -5,9 +5,41 @@ import { LinkDrawer } from "./link-drawer.js" AgentModel = tortoise_require('agentmodel') +# (Array[(Object[Any], String)], Any) => Unit +entwine = (objKeyPairs, value) -> + + backingValue = value + + for [obj, key, tag] in objKeyPairs + Object.defineProperty(obj, key, { + configurable: true + get: -> backingValue + set: (newValue) -> backingValue = newValue + }) + + return + +# (Widgets.View, ViewController.View) => Unit +entwineDimensions = (viewWidget, modelView) -> + + translations = { + maxPxcor: "maxpxcor" + , maxPycor: "maxpycor" + , minPxcor: "minpxcor" + , minPycor: "minpycor" + , patchSize: "patchsize" + , wrappingAllowedInX: "wrappingallowedinx" + , wrappingAllowedInY: "wrappingallowediny" + } + + for wName, mName of translations + entwine([[viewWidget.dimensions, wName], [modelView, mName]], viewWidget.dimensions[wName]) + + return + class ViewController - constructor: (@container, fontSize) -> - @view = new View(fontSize) + constructor: (@container, viewWidget) -> + @view = new View(viewWidget.fontSize) @turtleDrawer = new TurtleDrawer(@view) @drawingLayer = new DrawingLayer(@view, @turtleDrawer, () => @repaint()) @patchDrawer = new PatchDrawer(@view) @@ -20,7 +52,7 @@ class ViewController @mouseY = 0 @initMouseTracking() @initTouchTracking() - @resetModel() + @resetModel(viewWidget) @repaint() mouseXcor: => @view.xPixToPcor(@mouseX) @@ -78,9 +110,11 @@ class ViewController return - resetModel: -> + resetModel: (viewWidget) -> @model = new AgentModel() @model.world.turtleshapelist = defaultShapes + entwineDimensions(viewWidget, @model.world) + entwine([[viewWidget, "fontSize"], [@view, "fontSize"]], viewWidget.fontSize) repaint: -> @view.transformToWorld(@model.world) diff --git a/app/assets/javascripts/beak/widgets/initialize-ui.coffee b/app/assets/javascripts/beak/widgets/initialize-ui.coffee index b76495476..01f63e3ed 100644 --- a/app/assets/javascripts/beak/widgets/initialize-ui.coffee +++ b/app/assets/javascripts/beak/widgets/initialize-ui.coffee @@ -45,13 +45,10 @@ initializeUI = (containerArg, widgets, code, info, preventScroll: true }) - viewModel = widgets.find(({ type }) -> type is 'view') + viewWidget = widgets.find(({ type }) -> type is 'view') - ractive.set('primaryView', viewModel) - viewController = new ViewController(container.querySelector('.netlogo-view-container'), viewModel.fontSize) - - entwineDimensions(viewModel, viewController.model.world) - entwine([[viewModel, "fontSize"], [viewController.view, "fontSize"]], viewModel.fontSize) + ractive.set('primaryView', viewWidget) + viewController = new ViewController(container.querySelector('.netlogo-view-container'), viewWidget) configs = genConfigs(ractive, viewController, container, compiler) controller = new WidgetController(ractive, viewController, configs) @@ -64,35 +61,4 @@ initializeUI = (containerArg, widgets, code, info, controller -# (Array[(Object[Any], String)], Any) => Unit -entwine = (objKeyPairs, value) -> - - backingValue = value - - for [obj, key] in objKeyPairs - Object.defineProperty(obj, key, { - get: -> backingValue - set: (newValue) -> backingValue = newValue - }) - - return - -# (Widgets.View, ViewController.View) => Unit -entwineDimensions = (viewWidget, modelView) -> - - translations = { - maxPxcor: "maxpxcor" - , maxPycor: "maxpycor" - , minPxcor: "minpxcor" - , minPycor: "minpycor" - , patchSize: "patchsize" - , wrappingAllowedInX: "wrappingallowedinx" - , wrappingAllowedInY: "wrappingallowediny" - } - - for wName, mName of translations - entwine([[viewWidget.dimensions, wName], [modelView, mName]], viewWidget.dimensions[wName]) - - return - export default initializeUI