Skip to content

Commit

Permalink
Bugfix: Edit world size after recompile
Browse files Browse the repository at this point in the history
  • Loading branch information
LaCuneta committed Dec 12, 2023
1 parent 72f4a84 commit 5e2225c
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 42 deletions.
3 changes: 2 additions & 1 deletion app/assets/javascripts/beak/session-lite.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
42 changes: 38 additions & 4 deletions app/assets/javascripts/beak/widgets/draw/view-controller.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -20,7 +52,7 @@ class ViewController
@mouseY = 0
@initMouseTracking()
@initTouchTracking()
@resetModel()
@resetModel(viewWidget)
@repaint()

mouseXcor: => @view.xPixToPcor(@mouseX)
Expand Down Expand Up @@ -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)
Expand Down
40 changes: 3 additions & 37 deletions app/assets/javascripts/beak/widgets/initialize-ui.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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

0 comments on commit 5e2225c

Please sign in to comment.