diff --git a/repository/OpenPonk-Core/OPController.class.st b/repository/OpenPonk-Core/OPController.class.st index 43d3dc10..059c08a6 100644 --- a/repository/OpenPonk-Core/OPController.class.st +++ b/repository/OpenPonk-Core/OPController.class.st @@ -304,7 +304,8 @@ OPController >> removeFigure [ { #category : 'private' } OPController >> removeModel [ - ^ self subclassResponsibility + + self diagramController elementRemoved ] { #category : 'deprecated' } @@ -369,3 +370,9 @@ OPController >> showWithoutDependentInDiagram: aDiagramController [ self subclassResponsibility ] + +{ #category : 'event handling' } +OPController >> updateAfterDiagramFocused [ + + self subclassResponsibility +] diff --git a/repository/OpenPonk-Core/OPDiagram.class.st b/repository/OpenPonk-Core/OPDiagram.class.st index 40e26797..0884de1f 100644 --- a/repository/OpenPonk-Core/OPDiagram.class.st +++ b/repository/OpenPonk-Core/OPDiagram.class.st @@ -19,6 +19,19 @@ OPDiagram class >> stonAllInstVarNames [ ^ super stonAllInstVarNames , #( #name #documentation #resolution ) ] +{ #category : 'as yet unclassified' } +OPDiagram >> canvas: aCanvas [ + + self isRendered ifTrue: [ + self + assert: roassalShape canvas = aCanvas + description: + 'Reusing same diagram element for 2 canvases not allowed'. + ^ false ]. + roassalShape := aCanvas. + ^ true +] + { #category : 'accessing' } OPDiagram >> documentation [ @@ -78,14 +91,7 @@ OPDiagram >> name: anObject [ { #category : 'as yet unclassified' } OPDiagram >> ownedElement: aShape renderedIn: aCanvas [ - self isRendered ifTrue: [ - self - assert: roassalShape canvas = aCanvas - description: - 'Reusing same diagram element for 2 canvases not allowed'. - ^ self owningElement ifNotNil: [ :owner | - owner ownedElement: aShape renderedIn: aCanvas ] ]. - roassalShape := aCanvas. + (self canvas: aCanvas) ifFalse: [ ^ self ]. self updateRenderFromSelf ] diff --git a/repository/OpenPonk-Core/OPDiagramController.class.st b/repository/OpenPonk-Core/OPDiagramController.class.st index 28a3e6f0..26fed074 100644 --- a/repository/OpenPonk-Core/OPDiagramController.class.st +++ b/repository/OpenPonk-Core/OPDiagramController.class.st @@ -344,6 +344,17 @@ OPDiagramController >> diagramController: aController [ self error: 'Cannot assign diagramController to diagramController' ] +{ #category : 'rebuilding' } +OPDiagramController >> diagramFocused [ + + self isRendered ifTrue: [ ^ self updateAfterDiagramFocused ]. + + diagramElement canvas: self canvas. + diagramElement ownedElements do: [ :each | + self showDiagramElement: each ]. + diagramElement updateRenderFromSelf +] + { #category : 'userinterface' } OPDiagramController >> disableRefresh [ self flag: #todo @@ -360,6 +371,15 @@ OPDiagramController >> editor: anEditor [ editor := anEditor ] +{ #category : 'as yet unclassified' } +OPDiagramController >> elementRemoved [ + + self editor ifNotNil: [ :foundEditor | + foundEditor workbench ifNotNil: [ :workbench | + workbench projectTree ifNotNil: [ :projectTree | + projectTree refresh ] ] ] +] + { #category : 'userinterface' } OPDiagramController >> enableRefresh [ self flag: #todo @@ -758,14 +778,6 @@ OPDiagramController >> showDiagramElement: aDiagramElement [ self showDiagramElement: each ] ] -{ #category : 'rebuilding' } -OPDiagramController >> showElements [ - - diagramElement ownedElements do: [ :each | - self showDiagramElement: each ]. - diagramElement updateRenderFromSelf -] - { #category : 'figures' } OPDiagramController >> showInDiagramModel: aModel [ @@ -806,6 +818,17 @@ OPDiagramController >> undo [ self loadState: self autosaveManager loadPrevious ] +{ #category : 'event handling' } +OPDiagramController >> updateAfterDiagramFocused [ + + | showableElements | + showableElements := self allShowableElements asIdentitySet. + self controllers do: [ :each | + (showableElements includes: each model) + ifTrue: [ each updateAfterDiagramFocused ] + ifFalse: [ each removeController ] ] +] + { #category : 'userinterface' } OPDiagramController >> updateCanvas [ diff --git a/repository/OpenPonk-Core/OPElementController.class.st b/repository/OpenPonk-Core/OPElementController.class.st index b6bb3403..1a41a6d1 100644 --- a/repository/OpenPonk-Core/OPElementController.class.st +++ b/repository/OpenPonk-Core/OPElementController.class.st @@ -124,7 +124,7 @@ OPElementController >> figureLabel: aLabelName text: aString [ " (figure labels at: aLabelName) trachelShape text: aString" ] -{ #category : 'accessing' } +{ #category : 'construction' } OPElementController >> hookDiagramElement [ "do nothing by default" @@ -227,3 +227,10 @@ OPElementController >> target: aController [ ] + +{ #category : 'event handling' } +OPElementController >> updateAfterDiagramFocused [ + + self isRendered ifFalse: [ ^ self ]. + self diagramElement updateRenderFromModel +] diff --git a/repository/OpenPonk-Core/OPOpenPonkDiagram.class.st b/repository/OpenPonk-Core/OPOpenPonkDiagram.class.st index 8164c4b8..db3ccb14 100644 --- a/repository/OpenPonk-Core/OPOpenPonkDiagram.class.st +++ b/repository/OpenPonk-Core/OPOpenPonkDiagram.class.st @@ -53,7 +53,7 @@ OPOpenPonkDiagram >> isSelected: anObject [ OPOpenPonkDiagram >> newCopy [ | serializer | - self updateFromRender. + self isRendered ifTrue: [ self updateFromRender ]. serializer := OPStonDiagramSerializer new. ^ (String streamContents: [ :s | serializer serializeDiagram: self to: s ]) readStreamDo: [ :s | diff --git a/repository/OpenPonk-Core/OPTestEntityController.class.st b/repository/OpenPonk-Core/OPTestEntityController.class.st index 8f45a473..5fa444f7 100644 --- a/repository/OpenPonk-Core/OPTestEntityController.class.st +++ b/repository/OpenPonk-Core/OPTestEntityController.class.st @@ -38,7 +38,9 @@ OPTestEntityController >> parentContainerModel [ { #category : 'destruction' } OPTestEntityController >> removeModel [ + | ownerModel | ownerModel := self diagramController model. - ownerModel entities remove: self model + ownerModel entities remove: self model. + super removeModel ] diff --git a/repository/OpenPonk-Core/OPTestRelationController.class.st b/repository/OpenPonk-Core/OPTestRelationController.class.st index dfaeb9be..4d0f4448 100644 --- a/repository/OpenPonk-Core/OPTestRelationController.class.st +++ b/repository/OpenPonk-Core/OPTestRelationController.class.st @@ -23,5 +23,6 @@ OPTestRelationController >> modelClass [ { #category : 'destruction' } OPTestRelationController >> removeModel [ - self diagramController model entities remove: self model + self diagramController model entities remove: self model. + super removeModel ] diff --git a/repository/OpenPonk-Roassal/OPRSSelectionDraggableBorder.class.st b/repository/OpenPonk-Roassal/OPRSSelectionDraggableBorder.class.st index a82d6da5..36304290 100644 --- a/repository/OpenPonk-Roassal/OPRSSelectionDraggableBorder.class.st +++ b/repository/OpenPonk-Roassal/OPRSSelectionDraggableBorder.class.st @@ -163,7 +163,7 @@ OPRSSelectionDraggableBorder >> updateDragBoxBlock: anAssociation [ { #category : 'hooks' } OPRSSelectionDraggableBorder >> updateDragBoxes [ - self dragBoxUpdateBlocks associationsDo: [ :each | + self dragBoxUpdateBlocks associationsDo: [ :each | self updateDragBoxBlock: each ]. shape pushBack ] diff --git a/repository/OpenPonk-Spec/OPWorkbench.class.st b/repository/OpenPonk-Spec/OPWorkbench.class.st index 479dcea9..38adc4ff 100644 --- a/repository/OpenPonk-Spec/OPWorkbench.class.st +++ b/repository/OpenPonk-Spec/OPWorkbench.class.st @@ -182,7 +182,7 @@ OPWorkbench >> focusEditorOf: aDiagram [ self announce: (OPEditorFocused on: focusedEditor). topToolbar activeEditor: focusedEditor. focusedEditor diagramController diagramElement: aDiagram. - focusedEditor diagramController showElements + focusedEditor diagramController diagramFocused ] { #category : 'accessing' }