├── .smalltalk.ston ├── .travis.yml ├── LICENSE ├── README.md ├── figures ├── container-model.png ├── debugger-view.png └── model-diff-browser.png ├── instance_visualizations_Uhnak.pdf └── repository ├── BaselineOfLiveInstanceViewer.package ├── .filetree ├── BaselineOfLiveInstanceViewer.class │ ├── README.md │ ├── instance │ │ └── baseline..st │ └── properties.json ├── monticello.meta │ ├── categories.st │ ├── initializers.st │ └── package └── properties.json └── LiveInstanceVisualization.package ├── .filetree ├── ClassDescription.extension ├── instance │ ├── gtInspectorExpandableCallGraphIn..st │ └── gtInspectorInstanceViewIn..st └── properties.json ├── LIVClassBoxBuilder.class ├── README.md ├── instance │ ├── baseShape.st │ ├── build.st │ ├── initialize.st │ ├── model..st │ ├── model.st │ ├── nameShape.st │ ├── newBaseShape.st │ └── newNameShape.st └── properties.json ├── LIVDebugSession.class ├── README.md ├── class │ ├── modelHistory..st │ └── modelHistory.st ├── instance │ └── process.context..st └── properties.json ├── LIVDebugger.class ├── README.md ├── class │ ├── defaultTitle.st │ ├── register.st │ ├── registerToolsOn..st │ └── sessionClass.st ├── instance │ ├── debuggerStructureIn..st │ ├── debuggerTransmissionsIn..st │ ├── liveViewIn.forContext..st │ ├── modelHistoryIn.forContext..st │ └── transmitFromStackToCodeIn..st └── properties.json ├── LIVDiffBrowser.class ├── README.md ├── class │ └── openOn..st ├── instance │ ├── buildBrowser.st │ ├── initialize.st │ └── openOn..st └── properties.json ├── LIVExampleScenario.class ├── README.md ├── instance │ ├── history.st │ ├── installLinks.st │ ├── links.st │ └── runScenario.st └── properties.json ├── LIVExampleScenarioTest.class ├── README.md ├── instance │ ├── setUp.st │ ├── tearDown.st │ └── testScenario.st └── properties.json ├── LIVExpandableCallGraphVisualization.class ├── README.md ├── instance │ ├── addMenuFor..st │ ├── addSendersFor..st │ ├── initialize.st │ └── view.class..st └── properties.json ├── LIVInstanceCompositeSpecificationBuilder.class ├── README.md ├── class │ └── exampleSpec.st ├── instance │ ├── addSpec..st │ ├── defaultInstanceBuilder.st │ ├── initialize.st │ └── instanceOn..st └── properties.json ├── LIVInstanceDiffColorer.class ├── README.md ├── instance │ ├── colorAdditions.in..st │ ├── colorAll.in..st │ ├── colorModifications.in..st │ ├── colorRemovals.in..st │ └── diagramElementsIn..st └── properties.json ├── LIVInstanceHistory.class ├── README.md ├── instance │ ├── add..st │ ├── filterDuplicates..st │ ├── gtInspectorModelViewIn..st │ ├── inNewState..st │ ├── initialize.st │ ├── isEmptyDiffBetween.and..st │ ├── latest.st │ ├── models.st │ ├── newState.st │ ├── oldest.st │ ├── specificationBuilder..st │ └── specificationBuilder.st └── properties.json ├── LIVInstanceModel.class ├── README.md ├── instance │ ├── addLinkFrom.to.at..st │ ├── addMenuFor..st │ ├── applyFocusedLayoutIn.on.focus..st │ ├── elements.st │ ├── elementsLinkingTo..st │ ├── ensureInstanceFor..st │ ├── gtInspectorElementsIn..st │ ├── gtInspectorModelViewIn..st │ ├── history..st │ ├── history.st │ ├── initialize.st │ ├── removeInstance..st │ ├── removeLinkFrom.to.at..st │ ├── removeLinksFrom.at..st │ ├── renderIn..st │ ├── renderShape.fromShapes.in..st │ ├── setLinkFrom.to.at..st │ ├── setValueFrom.to.at..st │ ├── showDiffIn..st │ ├── specificationFor..st │ ├── specificationFor.ifAbsentPut..st │ ├── specificationFor.ifNone..st │ └── unsetLinkFrom.at..st └── properties.json ├── LIVInstanceModelDiff.class ├── README.md ├── instance │ ├── diffBetween.and..st │ └── propertyDiffBetween.and..st └── properties.json ├── LIVInstanceModelTest.class ├── README.md ├── instance │ ├── setUp.st │ ├── setupBuilder..st │ ├── testAddLinkFromToAt.st │ ├── testEnsureInstance.st │ ├── testRemoveInstance.st │ ├── testRemoveInstanceNot.st │ ├── testRemoveLinkFromToAt.st │ ├── testRemoveLinksFromAtCollection.st │ ├── testRemoveLinksFromAtDirect.st │ ├── testSetLinkFromToAt.st │ ├── testSetValueFromToAt.st │ └── testUnsetLinkFromAt.st └── properties.json ├── LIVInstanceSpecification.class ├── README.md ├── instance │ ├── ^equals.st │ ├── asShape.st │ ├── classifier..st │ ├── classifier.st │ ├── gtInspectorSlotsIn..st │ ├── gtInspectorViewIn..st │ ├── hash.st │ ├── initialize.st │ ├── instanceHash..st │ ├── instanceHash.st │ ├── name..st │ ├── name.st │ ├── printOn..st │ ├── slots.st │ ├── style..st │ └── style.st └── properties.json ├── LIVInstanceSpecificationBuilder.class ├── README.md ├── class │ ├── example1.st │ ├── exampleWithHistory.st │ └── exampleWithMetalinks.st ├── instance │ ├── addSlot..st │ ├── classifier..st │ ├── classifier.st │ ├── initialize.st │ ├── instanceOn..st │ ├── name..st │ ├── newModel.st │ ├── style..st │ └── style.st └── properties.json ├── LIVInstanceSpecificationTest.class ├── README.md ├── instance │ ├── setUp.st │ └── testPrintOn.st └── properties.json ├── LIVInternalCallGraphVisualization.class ├── README.md ├── class │ └── nautilusClassesMenu..st ├── instance │ ├── addMenuFor..st │ └── view.class..st └── properties.json ├── LIVLinkBuilder.class ├── README.md ├── instance │ └── build.st └── properties.json ├── LIVLiveInstanceVisualization.class ├── README.md ├── class │ └── wipExample.st ├── instance │ ├── baseShapeFor.named..st │ ├── isReferenceValue.of..st │ ├── labelFor.withText..st │ ├── limitedShapeFor..st │ ├── referenceShapeFrom.to..st │ ├── shapeFor..st │ ├── shapesFor..st │ ├── textFor.of..st │ └── valuesOf..st └── properties.json ├── LIVNSPClassVisualization.class ├── README.md ├── instance │ └── shapeFor..st └── properties.json ├── LIVRTAnchorConstraint.class ├── README.md ├── class │ ├── example.st │ ├── example2.st │ └── exampleSelfEdge.st ├── instance │ ├── addAnchor.st │ ├── anchorSegment.st │ ├── anchorShape.st │ ├── balance..st │ ├── balance.st │ ├── build.st │ ├── computeExtraDistance.st │ ├── connectionSegmentsFor..st │ ├── edge..st │ ├── edge.st │ ├── element..st │ ├── element.st │ ├── guideLine.st │ ├── initialize.st │ ├── lineSegmentFor..st │ ├── minDistance..st │ ├── minDistance.st │ ├── moveAnchor.st │ ├── moveAwayFrom.via..st │ ├── moveAwayFromSegment..st │ ├── moveElement.st │ ├── segments.st │ └── update.st └── properties.json ├── LIVRTInteractiveViewContext.class ├── README.md ├── instance │ └── interactionsToBeRegistered.st └── properties.json ├── LIVRTPolyLineSegment.class ├── README.md ├── class │ ├── with..st │ ├── with.with..st │ └── withAll..st ├── instance │ ├── absoluteBalanceFor..st │ ├── first.st │ ├── initialize.st │ ├── last.st │ ├── length.st │ ├── second.st │ ├── segmentWithPointFor..st │ ├── segments..st │ └── segments.st └── properties.json ├── LIVRTSelectableElementsContextInteraction.class ├── README.md ├── instance │ ├── initializeElement..st │ ├── initializeSetOfElements..st │ └── initializeSingleElement..st └── properties.json ├── LIVSlot.class ├── README.md ├── instance │ ├── definingFeature..st │ ├── definingFeature.st │ ├── owningInstance..st │ ├── owningInstance.st │ ├── value..st │ └── value.st └── properties.json ├── LIVTestContainer.class ├── README.md ├── instance │ ├── addItem..st │ ├── capacity..st │ ├── capacity.st │ ├── initialize.st │ └── removeItem..st └── properties.json ├── LIVTestItem.class ├── README.md ├── instance │ ├── container..st │ ├── container.st │ ├── containerDirect..st │ ├── initialize.st │ ├── name..st │ └── name.st └── properties.json ├── OPUmlAssociationEdge.extension ├── instance │ └── constraintLabel.at.side..st └── properties.json ├── monticello.meta ├── categories.st ├── initializers.st └── package └── properties.json /.smalltalk.ston: -------------------------------------------------------------------------------- 1 | SmalltalkCISpec { 2 | #loading : [ 3 | SCIMetacelloLoadSpec { 4 | #baseline : 'LiveInstanceViewer', 5 | #directory : 'repository', 6 | #platforms : [ #pharo ] 7 | } 8 | ], 9 | #testing : { 10 | #packages : [ 'LiveInstanceVisualization' ], 11 | #coverage : { 12 | #packages : [ 'LiveInstanceVisualization' ] 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: smalltalk 2 | sudo: false 3 | 4 | os: 5 | - linux 6 | 7 | smalltalk: 8 | - Pharo-6.0 -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Peter Uhnak 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Live Instance Viewer 2 | [![Build Status](https://travis-ci.org/peteruhnak/live-instance-viewer.svg?branch=master)](https://travis-ci.org/peteruhnak/live-instance-viewer) [![Coverage Status](https://coveralls.io/repos/github/peteruhnak/live-instance-viewer/badge.svg)](https://coveralls.io/github/peteruhnak/live-instance-viewer) 3 | 4 | Pharo utility for visualizing OO instance structure during runtime via UML instance models. 5 | 6 | The utility hooks directly into executed code via MetaLinks, and maintains a representation of the state of objects in a UML instance-like model. Additionally it is possible to further annotate the instance model and compute new information that otherwise wouldn't be easily retrievable by analyzing the code or the program state alone. 7 | 8 | Each change is logged in a separate model, therefore it is possible to look back through the history and see how the state evolved, or compare models at different points in time. 9 | 10 | ![](figures/model-diff-browser.png) 11 | 12 | A custom Debugger is provided capable of displaying a model representation alongside a debugged code. 13 | 14 | ![](figures/debugger-view.png) 15 | 16 | ## Installation 17 | 18 | ```smalltalk 19 | Metacello new 20 | baseline: 'LiveInstanceViewer'; 21 | repository: 'github://peteruhnak/live-instance-viewer/repository'; 22 | load. 23 | ``` 24 | 25 | ## Technical Paper 26 | 27 | For in-depth presentation, you can read a paper presented at IWST'17: [instance_visualizations_Uhnak.pdf](instance_visualizations_Uhnak.pdf) 28 | 29 | ## Example 30 | 31 | ![](figures/container-model.png) 32 | 33 | ### MetaLinks registration with added custom annotations and computations. 34 | 35 | ```smalltalk 36 | modelDefs := LIVInstanceCompositeSpecificationBuilder new. 37 | modelDefs addSpec: [ :spec | 38 | spec classifier: LIVTestContainer. 39 | spec name: #identityHash. 40 | spec 41 | addSlot: #items -> [ OrderedCollection new ]. 42 | ]. 43 | modelDefs addSpec: [ :spec | 44 | spec classifier: LIVTestItem. 45 | spec name: #identityHash. 46 | spec 47 | addSlot: #name -> nil; 48 | addSlot: #timeCreated -> [ Time now ]; 49 | addSlot: #timeAdded -> nil; 50 | addSlot: #container -> nil. 51 | ]. 52 | 53 | history := LIVInstanceHistory new. 54 | LIVDebugSession modelHistory: history. 55 | history specificationBuilder: modelDefs. 56 | 57 | links := MTMetaLinkRegistration new. 58 | 59 | links addLink: [ :link | 60 | link 61 | target: LIVTestItem>>#initialize; 62 | control: #before; 63 | action: [ :object | 64 | history inNewState: [ :model | model ensureInstanceFor: object ] 65 | ] 66 | ]. 67 | 68 | links addLink: [ :link | 69 | link 70 | target: LIVTestItem>>#name:; 71 | action: [ :object :arguments | 72 | history inNewState: [ :model | 73 | model setValueFrom: object to: arguments first at: #name 74 | ] 75 | ] 76 | ]. 77 | 78 | links addLink: [ :link | 79 | link 80 | target: LIVTestItem>>#container:; 81 | action: [ :object :arguments | 82 | history inNewState: [ :model | 83 | arguments first 84 | ifNil: [ model unsetLinkFrom: object at: #container ] 85 | ifNotNil: [ model setLinkFrom: object to: arguments first at: #container ] 86 | ] 87 | ] 88 | ]. 89 | 90 | links addLink: [ :link | 91 | link 92 | target: LIVTestContainer>>#initialize; 93 | control: #before; 94 | action: [ :object | 95 | history inNewState: [ :model | model ensureInstanceFor: object ] 96 | ] 97 | ]. 98 | 99 | links addLink: [ :link | 100 | link 101 | target: LIVTestContainer>>#addItem:; 102 | action: [ :object :arguments | 103 | history inNewState: [ :model | 104 | model addLinkFrom: object to: arguments first at: #items. 105 | model setValueFrom: arguments first to: Time now at: #timeAdded. 106 | " model addLinkFrom: object to: arguments first name -> Date new at: #allItems." 107 | ] 108 | ] 109 | ]. 110 | 111 | links addLink: [ :link | 112 | link 113 | target: LIVTestContainer>>#removeItem:; 114 | action: [ :object :arguments | 115 | history inNewState: [ :model | 116 | model removeLinkFrom: object to: arguments first at: #items. 117 | ] 118 | ] 119 | ]. 120 | 121 | links install. 122 | LIVDiffBrowser openOn: history. 123 | history inspect. 124 | 125 | " 126 | links uninstall 127 | " 128 | ``` 129 | 130 | ### Executing code that will trigger the metalinks 131 | 132 | ```smalltalk 133 | container := LIVTestContainer new. 134 | item1 := LIVTestItem new. 135 | item1 name: 'item1'. 136 | container addItem: item1. 137 | item1 container: container. 138 | 139 | item2 := LIVTestItem new name: 'item2'. 140 | container addItem: item2. 141 | item2 container: container. 142 | 143 | item1 container: nil. 144 | container removeItem: item1. 145 | ``` 146 | -------------------------------------------------------------------------------- /figures/container-model.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/figures/container-model.png -------------------------------------------------------------------------------- /figures/debugger-view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/figures/debugger-view.png -------------------------------------------------------------------------------- /figures/model-diff-browser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/figures/model-diff-browser.png -------------------------------------------------------------------------------- /instance_visualizations_Uhnak.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/instance_visualizations_Uhnak.pdf -------------------------------------------------------------------------------- /repository/BaselineOfLiveInstanceViewer.package/.filetree: -------------------------------------------------------------------------------- 1 | { 2 | "separateMethodMetaAndSource" : false, 3 | "noMethodMetaData" : true, 4 | "useCypressPropertiesFile" : true 5 | } -------------------------------------------------------------------------------- /repository/BaselineOfLiveInstanceViewer.package/BaselineOfLiveInstanceViewer.class/README.md: -------------------------------------------------------------------------------- 1 | I am a baseline for https://github.com/peteruhnak/live-instance-viewer -------------------------------------------------------------------------------- /repository/BaselineOfLiveInstanceViewer.package/BaselineOfLiveInstanceViewer.class/instance/baseline..st: -------------------------------------------------------------------------------- 1 | baselines 2 | baseline: spec 3 | 4 | spec 5 | for: #common 6 | do: [ spec 7 | project: 'DeepTraverser' 8 | with: [ spec 9 | className: #ConfigurationOfDeepTraverser; 10 | versionString: #development; 11 | repository: 'http://www.smalltalkhub.com/mc/Moose/DeepTraverser/main' ]. 12 | spec 13 | baseline: 'UMLShapes' 14 | with: [ spec repository: 'github://openponk/uml-shapes/repository' ]. 15 | spec 16 | baseline: 'MetaLinksToolkit' 17 | with: [ spec repository: 'github://peteruhnak/metalinks-toolkit/repository' ]. 18 | spec 19 | package: 'LiveInstanceVisualization' 20 | with: [ spec requires: #('UMLShapes' 'MetaLinksToolkit' 'DeepTraverser') ]. 21 | spec group: 'default' with: #('LiveInstanceVisualization') ] -------------------------------------------------------------------------------- /repository/BaselineOfLiveInstanceViewer.package/BaselineOfLiveInstanceViewer.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "PeterUhnak 11/2/2017 13:57", 3 | "super" : "BaselineOf", 4 | "category" : "BaselineOfLiveInstanceViewer", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ ], 9 | "name" : "BaselineOfLiveInstanceViewer", 10 | "type" : "normal" 11 | } -------------------------------------------------------------------------------- /repository/BaselineOfLiveInstanceViewer.package/monticello.meta/categories.st: -------------------------------------------------------------------------------- 1 | SystemOrganization addCategory: #BaselineOfLiveInstanceViewer! 2 | -------------------------------------------------------------------------------- /repository/BaselineOfLiveInstanceViewer.package/monticello.meta/initializers.st: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/repository/BaselineOfLiveInstanceViewer.package/monticello.meta/initializers.st -------------------------------------------------------------------------------- /repository/BaselineOfLiveInstanceViewer.package/monticello.meta/package: -------------------------------------------------------------------------------- 1 | (name 'BaselineOfLiveInstanceViewer') -------------------------------------------------------------------------------- /repository/BaselineOfLiveInstanceViewer.package/properties.json: -------------------------------------------------------------------------------- 1 | { } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/.filetree: -------------------------------------------------------------------------------- 1 | { 2 | "separateMethodMetaAndSource" : false, 3 | "noMethodMetaData" : true, 4 | "useCypressPropertiesFile" : true 5 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/ClassDescription.extension/instance/gtInspectorExpandableCallGraphIn..st: -------------------------------------------------------------------------------- 1 | *LiveInstanceVisualization-Inspector-Extensions 2 | gtInspectorExpandableCallGraphIn: composite 3 | 4 | | el | 5 | composite roassal2 6 | title: '[LIVE] Calls graph'; 7 | initializeView: [ | v | 8 | v := RTView new. 9 | el := LIVExpandableCallGraphVisualization new view: v class: self. 10 | v @ RTDraggableView. 11 | v ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/ClassDescription.extension/instance/gtInspectorInstanceViewIn..st: -------------------------------------------------------------------------------- 1 | *LiveInstanceVisualization-Inspector-Extensions 2 | gtInspectorInstanceViewIn: composite 3 | 4 | | el | 5 | composite roassal2 6 | title: '[LIV] Calls graph'; 7 | initializeView: [ | v | 8 | v := RTView new. 9 | el := LIVInternalCallGraphVisualization new view: v class: self. 10 | v @ RTDraggableView. 11 | v ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/ClassDescription.extension/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "ClassDescription" 3 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVClassBoxBuilder.class/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/repository/LiveInstanceVisualization.package/LIVClassBoxBuilder.class/README.md -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVClassBoxBuilder.class/instance/baseShape.st: -------------------------------------------------------------------------------- 1 | shapes 2 | baseShape 3 | ^ baseShape ifNil: [ baseShape := self newBaseShape ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVClassBoxBuilder.class/instance/build.st: -------------------------------------------------------------------------------- 1 | building 2 | build 3 | | el | 4 | el := baseShape. 5 | self nameShape owningElement: el. 6 | ^ el -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVClassBoxBuilder.class/instance/initialize.st: -------------------------------------------------------------------------------- 1 | initialization 2 | initialize 3 | super initialize. 4 | baseShape := self newBaseShape -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVClassBoxBuilder.class/instance/model..st: -------------------------------------------------------------------------------- 1 | accessing 2 | model: anObject 3 | model := anObject. 4 | self nameShape text: model name -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVClassBoxBuilder.class/instance/model.st: -------------------------------------------------------------------------------- 1 | accessing 2 | model 3 | ^ model -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVClassBoxBuilder.class/instance/nameShape.st: -------------------------------------------------------------------------------- 1 | shapes 2 | nameShape 3 | ^ nameShape ifNil: [ nameShape := self newNameShape ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVClassBoxBuilder.class/instance/newBaseShape.st: -------------------------------------------------------------------------------- 1 | instance creation 2 | newBaseShape 3 | ^ OPUmlClassifierShape new -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVClassBoxBuilder.class/instance/newNameShape.st: -------------------------------------------------------------------------------- 1 | instance creation 2 | newNameShape 3 | ^ OPUmlNameLabel new 4 | text: #Undefined; 5 | localStyle: (OPUmlStyle new fontSize: 11); 6 | yourself -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVClassBoxBuilder.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "", 3 | "super" : "Object", 4 | "category" : "LiveInstanceVisualization-Inspector-Extensions", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ 9 | "model", 10 | "baseShape", 11 | "nameShape" 12 | ], 13 | "name" : "LIVClassBoxBuilder", 14 | "type" : "normal" 15 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVDebugSession.class/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/repository/LiveInstanceVisualization.package/LIVDebugSession.class/README.md -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVDebugSession.class/class/modelHistory..st: -------------------------------------------------------------------------------- 1 | accessing 2 | modelHistory: aHistory 3 | modelHistory := aHistory -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVDebugSession.class/class/modelHistory.st: -------------------------------------------------------------------------------- 1 | accessing 2 | modelHistory 3 | ^ modelHistory -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVDebugSession.class/instance/process.context..st: -------------------------------------------------------------------------------- 1 | initialization 2 | process: aProcess context: aContext 3 | 4 | super process: aProcess context: aContext -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVDebugSession.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "", 3 | "super" : "DebugSession", 4 | "category" : "LiveInstanceVisualization-Debugger", 5 | "classinstvars" : [ 6 | "modelHistory" 7 | ], 8 | "pools" : [ ], 9 | "classvars" : [ ], 10 | "instvars" : [ ], 11 | "name" : "LIVDebugSession", 12 | "type" : "normal" 13 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVDebugger.class/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/repository/LiveInstanceVisualization.package/LIVDebugger.class/README.md -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVDebugger.class/class/defaultTitle.st: -------------------------------------------------------------------------------- 1 | accessing 2 | defaultTitle 3 | ^ 'LIV Debugger' -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVDebugger.class/class/register.st: -------------------------------------------------------------------------------- 1 | accessing 2 | register 3 | 4 | self registerToolsOn: Smalltalk tools. -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVDebugger.class/class/registerToolsOn..st: -------------------------------------------------------------------------------- 1 | accessing 2 | registerToolsOn: registry 3 | 4 | "Add ourselves to registry. See [Smalltalk tools]" 5 | registry registerDebugger: self withRank: 10. -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVDebugger.class/class/sessionClass.st: -------------------------------------------------------------------------------- 1 | accessing 2 | sessionClass 3 | ^ LIVDebugSession -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVDebugger.class/instance/debuggerStructureIn..st: -------------------------------------------------------------------------------- 1 | building 2 | debuggerStructureIn: browser 3 | 4 | browser 5 | row: #stack; 6 | row: [ :c | c 7 | column: #code; 8 | column: #view ] span: 2; 9 | row: #inspector. -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVDebugger.class/instance/debuggerTransmissionsIn..st: -------------------------------------------------------------------------------- 1 | building 2 | debuggerTransmissionsIn: browser 3 | super debuggerTransmissionsIn: browser. 4 | browser transmit 5 | from: #stack port: #selection; 6 | to: #view; 7 | andShow: [ :composite :aContext | 8 | self liveViewIn: composite forContext: aContext. 9 | self modelHistoryIn: composite forContext: aContext ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVDebugger.class/instance/liveViewIn.forContext..st: -------------------------------------------------------------------------------- 1 | building 2 | liveViewIn: composite forContext: aContext 3 | | history | 4 | history := self class sessionClass modelHistory. 5 | history ifNil: [ ^ self ]. 6 | history models ifEmpty: [ ^ self ]. 7 | (history models last gtInspectorModelViewIn: composite) 8 | onChangeOfPort: #selection act: [ :historyPresentation | 9 | self inspect: historyPresentation selection ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVDebugger.class/instance/modelHistoryIn.forContext..st: -------------------------------------------------------------------------------- 1 | building 2 | modelHistoryIn: composite forContext: aContext 3 | | history | 4 | history := self class sessionClass modelHistory. 5 | history ifNil: [ ^ self ]. 6 | history gtInspectorModelViewIn: composite -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVDebugger.class/instance/transmitFromStackToCodeIn..st: -------------------------------------------------------------------------------- 1 | building 2 | transmitFromStackToCodeIn: browser 3 | super transmitFromStackToCodeIn: browser 4 | " browser transmit 5 | from: #stack port: #selection; 6 | to: #code; 7 | andShow: [ :composite :aContext | 8 | self methodCodeIn: composite forContext: aContext. 9 | self liveViewIn: composite forContext: aContext]" -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVDebugger.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "", 3 | "super" : "GTGenericStackDebugger", 4 | "category" : "LiveInstanceVisualization-Debugger", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ ], 9 | "name" : "LIVDebugger", 10 | "type" : "normal" 11 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVDiffBrowser.class/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/repository/LiveInstanceVisualization.package/LIVDiffBrowser.class/README.md -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVDiffBrowser.class/class/openOn..st: -------------------------------------------------------------------------------- 1 | instance creation 2 | openOn: aHistory 3 | ^ self new openOn: aHistory -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVDiffBrowser.class/instance/buildBrowser.st: -------------------------------------------------------------------------------- 1 | building 2 | buildBrowser 3 | browser := GLMTabulator new. 4 | browser title: 'History Model Diff'. 5 | browser 6 | row: [ :r | 7 | r 8 | column: #left; 9 | column: #right ]; 10 | row: #diff. 11 | browser transmit 12 | to: #left; 13 | andShow: [ :a :history | (history gtInspectorModelViewIn: a) title: 'Left' ]. 14 | browser transmit 15 | to: #right; 16 | andShow: [ :a :history | (history gtInspectorModelViewIn: a) title: 'Right' ]. 17 | browser transmit 18 | from: #left; 19 | from: #right; 20 | to: #diff; 21 | andShow: [ :a :left :right | 22 | a roassal2 23 | title: 'Model Diff'; 24 | when: [ left isNotNil & right isNotNil ]; 25 | initializeView: [ | v diff colorer | 26 | v := RTView new. 27 | LIVRTInteractiveViewContext setOnView: v. 28 | right renderIn: v. 29 | diff := LIVInstanceModelDiff new diffBetween: left and: right. 30 | colorer := LIVInstanceDiffColorer new. 31 | colorer colorAll: diff in: v. 32 | v @ RTDraggableView @ RTZoomableView. 33 | v ] ]. 34 | ^ browser -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVDiffBrowser.class/instance/initialize.st: -------------------------------------------------------------------------------- 1 | initialization 2 | initialize 3 | super initialize. 4 | browser := self buildBrowser -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVDiffBrowser.class/instance/openOn..st: -------------------------------------------------------------------------------- 1 | instance creation 2 | openOn: aHistory 3 | browser openOn: aHistory -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVDiffBrowser.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "", 3 | "super" : "Object", 4 | "category" : "LiveInstanceVisualization-UI", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ 9 | "browser" 10 | ], 11 | "name" : "LIVDiffBrowser", 12 | "type" : "normal" 13 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVExampleScenario.class/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/repository/LiveInstanceVisualization.package/LIVExampleScenario.class/README.md -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVExampleScenario.class/instance/history.st: -------------------------------------------------------------------------------- 1 | accessing 2 | history 3 | ^ history -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVExampleScenario.class/instance/installLinks.st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | installLinks 3 | modelDefs := LIVInstanceCompositeSpecificationBuilder new. 4 | modelDefs addSpec: [ :spec | 5 | spec classifier: LIVTestContainer. 6 | spec name: #identityHash. 7 | spec 8 | addSlot: #items -> [ OrderedCollection new ]. 9 | ]. 10 | modelDefs addSpec: [ :spec | 11 | spec classifier: LIVTestItem. 12 | spec name: #identityHash. 13 | spec 14 | addSlot: #name -> nil; 15 | addSlot: #timeCreated -> [ Time now ]; 16 | addSlot: #timeAdded -> nil; 17 | addSlot: #container -> nil. 18 | ]. 19 | 20 | history := LIVInstanceHistory new. 21 | LIVDebugSession modelHistory: history. 22 | history specificationBuilder: modelDefs. 23 | 24 | links := MTMetaLinkRegistration new. 25 | 26 | links addLink: [ :link | 27 | link 28 | target: LIVTestItem>>#initialize; 29 | control: #before; 30 | action: [ :object | 31 | history inNewState: [ :model | model ensureInstanceFor: object ] 32 | ] 33 | ]. 34 | 35 | links addLink: [ :link | 36 | link 37 | target: LIVTestItem>>#name:; 38 | action: [ :object :arguments | 39 | history inNewState: [ :model | 40 | model setValueFrom: object to: arguments first at: #name 41 | ] 42 | ] 43 | ]. 44 | 45 | links addLink: [ :link | 46 | link 47 | target: LIVTestItem>>#container:; 48 | action: [ :object :arguments | 49 | history inNewState: [ :model | 50 | arguments first 51 | ifNil: [ model unsetLinkFrom: object at: #container ] 52 | ifNotNil: [ model setLinkFrom: object to: arguments first at: #container ] 53 | ] 54 | ] 55 | ]. 56 | 57 | links addLink: [ :link | 58 | link 59 | target: LIVTestContainer>>#initialize; 60 | control: #before; 61 | action: [ :object | 62 | history inNewState: [ :model | model ensureInstanceFor: object ] 63 | ] 64 | ]. 65 | 66 | links addLink: [ :link | 67 | link 68 | target: LIVTestContainer>>#addItem:; 69 | action: [ :object :arguments | 70 | history inNewState: [ :model | 71 | model addLinkFrom: object to: arguments first at: #items. 72 | model setValueFrom: arguments first to: Time now at: #timeAdded. 73 | " model addLinkFrom: object to: arguments first name -> Date new at: #allItems." 74 | ] 75 | ] 76 | ]. 77 | 78 | links addLink: [ :link | 79 | link 80 | target: LIVTestContainer>>#removeItem:; 81 | action: [ :object :arguments | 82 | history inNewState: [ :model | 83 | model removeLinkFrom: object to: arguments first at: #items. 84 | ] 85 | ] 86 | ]. 87 | 88 | links install. 89 | 90 | "Open tools if needed 91 | LIVDiffBrowser openOn: history. 92 | history inspect. 93 | " 94 | 95 | " 96 | links uninstall 97 | " -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVExampleScenario.class/instance/links.st: -------------------------------------------------------------------------------- 1 | accessing 2 | links 3 | ^ links -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVExampleScenario.class/instance/runScenario.st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | runScenario 3 | | container item1 item2 | 4 | container := LIVTestContainer new. 5 | item1 := LIVTestItem new. 6 | item1 name: 'item1'. 7 | container addItem: item1. 8 | item1 container: container. 9 | 10 | item2 := LIVTestItem new name: 'item2'. 11 | container addItem: item2. 12 | item2 container: container. 13 | 14 | item1 container: nil. 15 | container removeItem: item1. -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVExampleScenario.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "", 3 | "super" : "Object", 4 | "category" : "LiveInstanceVisualization-Examples", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ 9 | "history", 10 | "links", 11 | "modelDefs" 12 | ], 13 | "name" : "LIVExampleScenario", 14 | "type" : "normal" 15 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVExampleScenarioTest.class/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/repository/LiveInstanceVisualization.package/LIVExampleScenarioTest.class/README.md -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVExampleScenarioTest.class/instance/setUp.st: -------------------------------------------------------------------------------- 1 | initialization 2 | setUp 3 | scenario := LIVExampleScenario new -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVExampleScenarioTest.class/instance/tearDown.st: -------------------------------------------------------------------------------- 1 | initialization 2 | tearDown 3 | scenario links uninstall -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVExampleScenarioTest.class/instance/testScenario.st: -------------------------------------------------------------------------------- 1 | initialization 2 | testScenario 3 | | history | 4 | scenario installLinks. 5 | history := scenario history. 6 | self assert: history models asArray equals: #(). 7 | scenario runScenario. 8 | self assert: history models size > 0. 9 | self assert: history models last elements size > 0 -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVExampleScenarioTest.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "", 3 | "super" : "TestCase", 4 | "category" : "LiveInstanceVisualization-Tests", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ 9 | "scenario" 10 | ], 11 | "name" : "LIVExampleScenarioTest", 12 | "type" : "normal" 13 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVExpandableCallGraphVisualization.class/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/repository/LiveInstanceVisualization.package/LIVExpandableCallGraphVisualization.class/README.md -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVExpandableCallGraphVisualization.class/instance/addMenuFor..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | addMenuFor: aFigure 3 | | menu | 4 | menu := PluggableMenuSpec new model: aFigure. 5 | menu add: 'Browse' action: (MessageSend receiver: aFigure model selector: #browse). 6 | menu 7 | add: 'Senders' 8 | target: self 9 | selector: #addSendersFor: 10 | argumentList: {aFigure}. 11 | aFigure when: TRMouseRightClick do: [ :event | menu asMenuMorph popUpInWorld ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVExpandableCallGraphVisualization.class/instance/addSendersFor..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | addSendersFor: aFigure 3 | | senders b els | 4 | senders := aFigure model senders 5 | reject: [ :meth | mondrian view elements anySatisfy: [ :each | each model = meth ] ]. 6 | b := mondrian. 7 | b shape text 8 | color: Color black; 9 | text: [ :each | each method name ]. 10 | els := b nodes: senders. 11 | els do: [ :each | self addMenuFor: each ]. 12 | b shape horizontalBezierLine color: Color blue. 13 | b shape arrowedBezier 14 | head: RTEmptyArrowHead new; 15 | color: Color blue. 16 | b edges connectFromAll: [ :s | senders ] to: [ :s | aFigure model ]. 17 | b layout horizontalDominanceTree 18 | verticalGap: 40; 19 | horizontalGap: 70. 20 | b build -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVExpandableCallGraphVisualization.class/instance/initialize.st: -------------------------------------------------------------------------------- 1 | initialization 2 | initialize 3 | super initialize. 4 | mondrian := RTMondrian new -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVExpandableCallGraphVisualization.class/instance/view.class..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | view: aView class: aClassDescription 3 | | b els | 4 | b := mondrian. 5 | b view: aView. 6 | b shape text 7 | color: Color black; 8 | text: #selector"; 9 | if: [ :m | m senders isEmpty ] color: Color gray". 10 | els := b nodes: aClassDescription methods. 11 | els do: [ :each | self addMenuFor: each ]. 12 | b shape horizontalBezierLine color: Color blue. 13 | b shape arrowedBezier 14 | head: RTEmptyArrowHead new; 15 | color: Color blue. 16 | b edges 17 | connectFromAll: [ :s | 18 | (aClassDescription thoroughWhichSelectorsReferTo: s selector) 19 | collect: [ :each | aClassDescription >> each ] ]. 20 | b layout horizontalDominanceTree 21 | verticalGap: 40; 22 | horizontalGap: 70. 23 | b view @ RTZoomableView. 24 | b build -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVExpandableCallGraphVisualization.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "", 3 | "super" : "Object", 4 | "category" : "LiveInstanceVisualization-Inspector-Extensions", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ 9 | "mondrian" 10 | ], 11 | "name" : "LIVExpandableCallGraphVisualization", 12 | "type" : "normal" 13 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceCompositeSpecificationBuilder.class/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/repository/LiveInstanceVisualization.package/LIVInstanceCompositeSpecificationBuilder.class/README.md -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceCompositeSpecificationBuilder.class/class/exampleSpec.st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | exampleSpec 3 | | modelDefs history links | 4 | modelDefs := LIVInstanceCompositeSpecificationBuilder new. 5 | modelDefs addSpec: [ :spec | 6 | spec classifier: SpecWrapper. 7 | spec name: #hash. 8 | spec 9 | addSlot: #selector -> nil; 10 | addSlot: #instance -> nil. 11 | ]. 12 | modelDefs addSpec: [ :spec | 13 | spec classifier: ComposableModel. 14 | spec name: #hash. 15 | spec addSlot: #spec -> nil. 16 | ]. 17 | modelDefs addSpec: [ :spec | 18 | spec classifier: MorphicContainerAdapter. 19 | spec name: #hash. 20 | spec addSlot: #added -> [ OrderedCollection new ] 21 | ]. 22 | 23 | history := LIVInstanceHistory new. 24 | history specificationBuilder: modelDefs. 25 | 26 | links := MTMetaLinkRegistration new. 27 | 28 | links addLink: [ :link | 29 | link 30 | target: SpecWrapper>>#selector:; 31 | control: #after; 32 | action: [ :object | 33 | history inNewState: [ :model | 34 | model to: object at: #selector put: object selector 35 | ] 36 | ] 37 | ]. 38 | 39 | links addLink: [ :link | 40 | link 41 | target: SpecWrapper>>#instance:; 42 | control: #after; 43 | action: [ :object | 44 | history inNewState: [ :model | 45 | model setLinkFrom: object to: object instance at: #instance. 46 | ] 47 | ] 48 | ]. 49 | 50 | links addLink: [ :link | 51 | link 52 | target: ComposableModel>>#initialize; 53 | control: #before; 54 | action: [ :object | 55 | history inNewState: [ :model | model ensureInstanceFor: object ] 56 | ] 57 | ]. 58 | 59 | links addLink: [ :link | 60 | link 61 | target: ComposableModel>>#spec:; 62 | control: #before; 63 | action: [ :object :arguments | 64 | (object spec = arguments first) not & object spec isNotNil ifTrue: [ 65 | history inNewState: [ :model | 66 | model removeLinkFrom: object at: #spec. 67 | ] 68 | ] 69 | ] 70 | ]. 71 | 72 | links addLink: [ :link | 73 | link 74 | target: ComposableModel>>#spec:; 75 | control: #after; 76 | action: [ :object | 77 | history inNewState: [ :model | 78 | model setLinkFrom: object to: object spec at: #spec. 79 | ] 80 | ] 81 | ]. 82 | 83 | links addLink: [ :link | 84 | link 85 | target: AbstractMorphicAdapter>>#add:; 86 | control: #after; 87 | action: [ :object :arguments | 88 | history inNewState: [ :model | 89 | model addLinkFrom: object to: arguments first at: #added 90 | ] 91 | ] 92 | ]. 93 | 94 | links install. 95 | history inspect. 96 | 97 | " 98 | links uninstall 99 | " -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceCompositeSpecificationBuilder.class/instance/addSpec..st: -------------------------------------------------------------------------------- 1 | adding 2 | addSpec: aOneArgBlock 3 | | spec | 4 | spec := LIVInstanceSpecificationBuilder new. 5 | aOneArgBlock value: spec. 6 | specs add: spec -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceCompositeSpecificationBuilder.class/instance/defaultInstanceBuilder.st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | defaultInstanceBuilder 3 | ^ LIVInstanceSpecificationBuilder new name: #hash -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceCompositeSpecificationBuilder.class/instance/initialize.st: -------------------------------------------------------------------------------- 1 | initialization 2 | initialize 3 | super initialize. 4 | specs := OrderedCollection new. 5 | defaultBuilder := self defaultInstanceBuilder -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceCompositeSpecificationBuilder.class/instance/instanceOn..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | instanceOn: anObject 3 | ^ specs 4 | detect: [ :each | anObject isKindOf: each classifier ] 5 | ifFound: [ :each | each instanceOn: anObject ] 6 | ifNone: [ defaultBuilder instanceOn: anObject ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceCompositeSpecificationBuilder.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "", 3 | "super" : "Object", 4 | "category" : "LiveInstanceVisualization-Models", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ 9 | "specs", 10 | "defaultBuilder" 11 | ], 12 | "name" : "LIVInstanceCompositeSpecificationBuilder", 13 | "type" : "normal" 14 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceDiffColorer.class/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/repository/LiveInstanceVisualization.package/LIVInstanceDiffColorer.class/README.md -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceDiffColorer.class/instance/colorAdditions.in..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | colorAdditions: aCollection in: aView 3 | | els | 4 | els := (self diagramElementsIn: aView) 5 | select: [ :each | aCollection includes: each model modelElement ]. 6 | els 7 | do: [ :el | 8 | | fig | 9 | fig := el model. 10 | fig style fillColor: Color green muchLighter. 11 | fig update. 12 | fig sourceEdges , fig targetEdges 13 | do: [ :each | 14 | each ownedElements 15 | do: [ :lbl | 16 | lbl style fontColor: Color green muchDarker. 17 | lbl update ]. 18 | each localStyle strokeColor: Color green muchDarker. 19 | each update ] ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceDiffColorer.class/instance/colorAll.in..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | colorAll: aDictionary in: aView 3 | self colorAdditions: (aDictionary at: #added) in: aView. 4 | self colorModifications: (aDictionary at: #modified) in: aView. 5 | self colorRemovals: (aDictionary at: #removed) in: aView -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceDiffColorer.class/instance/colorModifications.in..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | colorModifications: aDictionary in: aView 3 | aDictionary 4 | keysAndValuesDo: [ :hash :dict | 5 | | el fig subFigs | 6 | el := aView elements 7 | detect: [ :each | 8 | (each model modelElement isKindOf: LIVInstanceSpecification) 9 | and: [ each model modelElement instanceHash = hash ] ]. 10 | fig := el model. 11 | subFigs := fig deepCollect: #ownedElements. 12 | (dict at: #added) 13 | keysAndValuesDo: [ :key :value | 14 | subFigs 15 | detect: [ :each | each modelElement = key ] 16 | ifFound: [ :each | 17 | each style fontColor: Color green muchDarker. 18 | each update ] ]. 19 | (dict at: #modified) 20 | keysAndValuesDo: [ :key :value | 21 | subFigs 22 | detect: [ :each | each modelElement = key ] 23 | ifFound: [ :each | 24 | each style fontColor: Color blue. 25 | each update ]. 26 | aView edges 27 | detect: [ :each | 28 | (each model isKindOf: OPUmlEdge) 29 | and: [ each model modelElement = (fig modelElement -> key) ] ] 30 | ifFound: [ :each | 31 | each model ownedElements 32 | detect: [ :lbl | lbl modelElement = key ] 33 | ifFound: [ :lbl | 34 | lbl style fontColor: Color blue. 35 | lbl update ]. 36 | each model localStyle strokeColor: Color blue. 37 | each model update ] ] ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceDiffColorer.class/instance/colorRemovals.in..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | colorRemovals: aCollection in: aView 3 | | els | 4 | els := (self diagramElementsIn: aView) 5 | select: [ :each | aCollection includes: each model modelElement ]. 6 | els 7 | do: [ :el | 8 | | fig | 9 | fig := el model. 10 | fig style fillColor: Color red muchLighter. 11 | fig update ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceDiffColorer.class/instance/diagramElementsIn..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | diagramElementsIn: aView 3 | ^ aView elements select: [ :each | each model isKindOf: OPUmlDiagramElement ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceDiffColorer.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "", 3 | "super" : "Object", 4 | "category" : "LiveInstanceVisualization-Diff", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ ], 9 | "name" : "LIVInstanceDiffColorer", 10 | "type" : "normal" 11 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceHistory.class/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/repository/LiveInstanceVisualization.package/LIVInstanceHistory.class/README.md -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceHistory.class/instance/add..st: -------------------------------------------------------------------------------- 1 | adding 2 | add: aModel 3 | models add: aModel. 4 | aModel history: self -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceHistory.class/instance/filterDuplicates..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | filterDuplicates: aCollection 3 | | filtered | 4 | aCollection ifEmpty: [ ^ aCollection ]. 5 | filtered := OrderedCollection new. 6 | filtered add: aCollection first. 7 | aCollection allButFirst 8 | do: [ :model | 9 | | diff | 10 | diff := LIVInstanceModelDiff new diffBetween: model and: filtered last. 11 | (self isEmptyDiffBetween: model and: filtered last) 12 | ifFalse: [ filtered add: model ] ]. 13 | ^ filtered -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceHistory.class/instance/gtInspectorModelViewIn..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | gtInspectorModelViewIn: composite 3 | 4 | ^composite fastTable 5 | title: 'Models'; 6 | display: [ self filterDuplicates: self models ]; 7 | enableElementIndex; 8 | column: 'Index' evaluated: [ :value :index | index asString ] width: 40; 9 | column: 'Model' evaluated: [ :value | value asString ]; 10 | column: 'Elements' evaluated: [ :value | value elements size ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceHistory.class/instance/inNewState..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | inNewState: aOneArgBlock 3 | ^ self newState in: aOneArgBlock -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceHistory.class/instance/initialize.st: -------------------------------------------------------------------------------- 1 | initialization 2 | initialize 3 | super initialize. 4 | models := OrderedCollection new -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceHistory.class/instance/isEmptyDiffBetween.and..st: -------------------------------------------------------------------------------- 1 | testing 2 | isEmptyDiffBetween: a and: b 3 | | diff | 4 | diff := LIVInstanceModelDiff new diffBetween: a and: b. 5 | (diff at: #added) ifNotEmpty: [ ^ false ]. 6 | (diff at: #removed) ifNotEmpty: [ ^ false ]. 7 | (diff at: #modified) values 8 | do: [ :each | 9 | (each at: #added) ifNotEmpty: [ ^ false ]. 10 | (each at: #removed) ifNotEmpty: [ ^ false ]. 11 | (each at: #modified) ifNotEmpty: [ ^ false ] ]. 12 | ^ true -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceHistory.class/instance/latest.st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | latest 3 | ^ models last -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceHistory.class/instance/models.st: -------------------------------------------------------------------------------- 1 | accessing 2 | models 3 | ^ models -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceHistory.class/instance/newState.st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | newState 3 | self models 4 | ifEmpty: [ self add: LIVInstanceModel new ] 5 | ifNotEmpty: [ | newModel | 6 | self latest history: nil. 7 | newModel := self latest deepCopy. 8 | self latest history: self. 9 | self add: newModel ]. 10 | ^ self latest -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceHistory.class/instance/oldest.st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | oldest 3 | ^ models first -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceHistory.class/instance/specificationBuilder..st: -------------------------------------------------------------------------------- 1 | accessing 2 | specificationBuilder: anObject 3 | specificationBuilder := anObject -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceHistory.class/instance/specificationBuilder.st: -------------------------------------------------------------------------------- 1 | accessing 2 | specificationBuilder 3 | ^ specificationBuilder -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceHistory.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "", 3 | "super" : "Object", 4 | "category" : "LiveInstanceVisualization-Models", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ 9 | "models", 10 | "specificationBuilder" 11 | ], 12 | "name" : "LIVInstanceHistory", 13 | "type" : "normal" 14 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModel.class/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/repository/LiveInstanceVisualization.package/LIVInstanceModel.class/README.md -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModel.class/instance/addLinkFrom.to.at..st: -------------------------------------------------------------------------------- 1 | adding 2 | addLinkFrom: sourceObject to: targetObject at: aSlot 3 | ((self ensureInstanceFor: sourceObject) slots at: aSlot) 4 | add: (self ensureInstanceFor: targetObject) -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModel.class/instance/addMenuFor..st: -------------------------------------------------------------------------------- 1 | roassal - drawing 2 | addMenuFor: aFigure 3 | | menu | 4 | menu := PluggableMenuSpec new model: aFigure. 5 | menu 6 | add: 'Remove' 7 | target: aFigure 8 | selector: #remove 9 | argumentList: #(). 10 | aFigure rtElement when: TRMouseRightClick do: [ :event | menu asMenuMorph popUpInWorld ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModel.class/instance/applyFocusedLayoutIn.on.focus..st: -------------------------------------------------------------------------------- 1 | roassal - drawing 2 | applyFocusedLayoutIn: aView on: shapes focus: aFocus 3 | " | distance circles els enableCircles | 4 | distance := 400. 5 | enableCircles := true. 6 | enableCircles 7 | ifTrue: [ (aView hasAttribute: #circles) 8 | ifTrue: [ circles := aView attributeAt: #circles ] 9 | ifFalse: [ circles := RTEllipse new 10 | color: Color transparent; 11 | borderWidth: 1; 12 | borderColor: Color red; 13 | size: [ :m | distance * m ]; 14 | elementsOn: (1 to: 4). 15 | aView addAll: circles. 16 | circles do: [ :each | each trachelShape pushBack ]. 17 | circles translateTo: aFocus position. 18 | aView attributeAt: #circles put: circles ] ]. 19 | els := shapes. 20 | enableCircles 21 | ifTrue: [ RTSmoothLayoutTranslator new 22 | nbCycles: 1; 23 | translate: circles to: aFocus position ]. 24 | LaFocusedRadialLayout new 25 | radius: distance / 2; 26 | setFocus: aFocus nodes: els edges: #(); 27 | apply" -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModel.class/instance/elements.st: -------------------------------------------------------------------------------- 1 | accessing 2 | elements 3 | ^ elements -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModel.class/instance/elementsLinkingTo..st: -------------------------------------------------------------------------------- 1 | accessing 2 | elementsLinkingTo: anInstance 3 | ^ elements 4 | select: [ :each | 5 | each slots associations 6 | anySatisfy: [ :assoc | 7 | assoc value isCollection 8 | ifTrue: [ assoc value includes: anInstance ] 9 | ifFalse: [ assoc value = anInstance ] ] ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModel.class/instance/ensureInstanceFor..st: -------------------------------------------------------------------------------- 1 | adding 2 | ensureInstanceFor: anObject 3 | ^ self 4 | specificationFor: anObject 5 | ifAbsentPut: [ history specificationBuilder instanceOn: anObject ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModel.class/instance/gtInspectorElementsIn..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | gtInspectorElementsIn: composite 3 | 4 | composite fastTable 5 | title: 'Elements'; 6 | display: [ self elements ]; 7 | enableElementIndex; 8 | column: 'Index' evaluated: [ :value :index | index asString ] width: 40; 9 | column: 'Element' evaluated: [ :value | value asString ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModel.class/instance/gtInspectorModelViewIn..st: -------------------------------------------------------------------------------- 1 | inspector - extensions 2 | gtInspectorModelViewIn: composite 3 | 4 | ^ composite roassal2 5 | title: '[LIV] Instance Model'; 6 | initializeView: [ | v | 7 | v := RTView new. 8 | LIVRTInteractiveViewContext setOnView: v. 9 | self renderIn: v. 10 | self showDiffIn: v. 11 | v @ RTDraggableView @ RTZoomableView. 12 | v ]; 13 | yourself -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModel.class/instance/history..st: -------------------------------------------------------------------------------- 1 | accessing 2 | history: anObject 3 | history := anObject -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModel.class/instance/history.st: -------------------------------------------------------------------------------- 1 | accessing 2 | history 3 | ^ history -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModel.class/instance/initialize.st: -------------------------------------------------------------------------------- 1 | initialization 2 | initialize 3 | super initialize. 4 | elements := OrderedCollection new -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModel.class/instance/removeInstance..st: -------------------------------------------------------------------------------- 1 | removing 2 | removeInstance: anInstance 3 | (self elementsLinkingTo: anInstance) ifNotEmpty: [ ^ self ]. 4 | elements remove: anInstance -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModel.class/instance/removeLinkFrom.to.at..st: -------------------------------------------------------------------------------- 1 | removing 2 | removeLinkFrom: sourceObject to: targetObject at: aSlot 3 | | source target | 4 | source := self specificationFor: sourceObject ifNone: [ ^ self ]. 5 | target := self specificationFor: targetObject ifNone: [ ^ self ]. 6 | (source slots at: aSlot) remove: target. 7 | self removeInstance: target -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModel.class/instance/removeLinksFrom.at..st: -------------------------------------------------------------------------------- 1 | removing 2 | removeLinksFrom: sourceObject at: aSlot 3 | | source removed | 4 | source := self specificationFor: sourceObject ifNone: [ ^ self ]. 5 | removed := source slots at: aSlot. 6 | removed isCollection 7 | ifTrue: [ removed := removed copy. 8 | (source slots at: aSlot) removeAll. 9 | removed do: [ :each | self removeInstance: each ] ] 10 | ifFalse: [ source slots at: aSlot put: nil. 11 | self removeInstance: removed ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModel.class/instance/renderIn..st: -------------------------------------------------------------------------------- 1 | roassal - drawing 2 | renderIn: aView 3 | | shapes | 4 | shapes := (elements collect: #asShape) asGroup. 5 | shapes 6 | do: [ :each | 7 | each renderIn: aView. 8 | each rtElement 9 | when: TRMouseRightClick 10 | do: [ :evt | "self applyFocusedLayoutIn: aView on: (shapes collect: #rtElement) focus: evt element" ]. 11 | each rtElement when: TRMouseLeftClick do: [ :evt | ]. 12 | " self addMenuFor: each." 13 | each rtElement @ RTResizable @ RTDraggable ]. 14 | shapes do: [ :each | self renderShape: each fromShapes: shapes in: aView ]. 15 | RTHorizontalFlowLayout new 16 | gapSize: 50; 17 | on: shapes -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModel.class/instance/renderShape.fromShapes.in..st: -------------------------------------------------------------------------------- 1 | roassal - drawing 2 | renderShape: aShape fromShapes: aCollection in: aView 3 | | pairs | 4 | pairs := OrderedCollection new. 5 | aShape modelElement slots 6 | associationsDo: [ :pair | 7 | (pair value isKindOf: LIVInstanceSpecification) 8 | ifTrue: [ pairs add: pair key -> pair value ]. 9 | (pair value isCollection and: [ pair value allSatisfy: [ :each | each isKindOf: LIVInstanceSpecification ] ]) 10 | ifTrue: [ pair value do: [ :each | pairs add: pair key -> each ] ] ]. 11 | pairs 12 | do: [ :pair | 13 | | key value | 14 | key := pair key. 15 | value := pair value. 16 | aCollection 17 | detect: [ :each | each modelElement instanceHash = value instanceHash ] 18 | ifFound: [ :target | 19 | | edge | 20 | edge := OPUmlAssociationEdge new 21 | source: aShape; 22 | target: target; 23 | targetLabel: 24 | (OPUmlNameLabel new 25 | text: key asString; 26 | modelElement: key); 27 | modelElement: aShape modelElement -> key; 28 | headDecorator: RTSimpleArrow; 29 | yourself. 30 | edge renderIn: aView ] 31 | ifNone: [ OPUmlTypedElementLabel new 32 | owningElement: aShape; 33 | modelElement: key; 34 | text: 35 | (String 36 | streamContents: [ :stream | 37 | stream << key. 38 | stream << ' = ' << value printString ]) ] ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModel.class/instance/setLinkFrom.to.at..st: -------------------------------------------------------------------------------- 1 | adding 2 | setLinkFrom: sourceObject to: targetObject at: aSlot 3 | (self ensureInstanceFor: sourceObject) slots 4 | at: aSlot 5 | put: (self ensureInstanceFor: targetObject) -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModel.class/instance/setValueFrom.to.at..st: -------------------------------------------------------------------------------- 1 | adding 2 | setValueFrom: aSourceObject to: aTargetObject at: aSlot 3 | (self ensureInstanceFor: aSourceObject) slots at: aSlot put: aTargetObject -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModel.class/instance/showDiffIn..st: -------------------------------------------------------------------------------- 1 | roassal - drawing 2 | showDiffIn: aView 3 | history ifNil: [ ^ self ]. 4 | (history models before: self ifAbsent: [ nil ]) 5 | ifNotNil: [ :old | 6 | | diff colorer | 7 | diff := LIVInstanceModelDiff new diffBetween: old and: self. 8 | colorer := LIVInstanceDiffColorer new. 9 | colorer colorAll: diff in: aView ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModel.class/instance/specificationFor..st: -------------------------------------------------------------------------------- 1 | accessing 2 | specificationFor: anObject 3 | ^ elements detect: [ :each | each instanceHash = anObject hash ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModel.class/instance/specificationFor.ifAbsentPut..st: -------------------------------------------------------------------------------- 1 | accessing 2 | specificationFor: anObject ifAbsentPut: aBlock 3 | ^ elements 4 | detect: [ :each | each instanceHash = anObject hash ] 5 | ifNone: [ | value | 6 | value := aBlock value. 7 | elements add: value. 8 | value ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModel.class/instance/specificationFor.ifNone..st: -------------------------------------------------------------------------------- 1 | accessing 2 | specificationFor: anObject ifNone: aBlock 3 | ^ elements detect: [ :each | each instanceHash = anObject hash ] ifNone: aBlock -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModel.class/instance/unsetLinkFrom.at..st: -------------------------------------------------------------------------------- 1 | removing 2 | unsetLinkFrom: sourceObject at: aSlot 3 | | source removed | 4 | source := self specificationFor: sourceObject ifNone: [ ^ self ]. 5 | removed := source slots at: aSlot. 6 | source slots at: aSlot put: nil. 7 | self removeInstance: removed -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModel.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "", 3 | "super" : "Object", 4 | "category" : "LiveInstanceVisualization-Models", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ 9 | "name", 10 | "elements", 11 | "history" 12 | ], 13 | "name" : "LIVInstanceModel", 14 | "type" : "normal" 15 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModelDiff.class/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/repository/LiveInstanceVisualization.package/LIVInstanceModelDiff.class/README.md -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModelDiff.class/instance/diffBetween.and..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | diffBetween: anOldModel and: aNewModel 3 | | oldHashes newHashes removed added modified propertyDiff | 4 | oldHashes := anOldModel elements collect: #instanceHash. 5 | newHashes := aNewModel elements collect: #instanceHash. 6 | removed := oldHashes \ newHashes. 7 | added := newHashes \ oldHashes. 8 | modified := oldHashes intersection: newHashes. 9 | propertyDiff := Dictionary new. 10 | modified 11 | do: [ :each | 12 | propertyDiff 13 | at: each 14 | put: 15 | (self 16 | propertyDiffBetween: (anOldModel elements detect: [ :e | e instanceHash = each ]) 17 | and: (aNewModel elements detect: [ :e | e instanceHash = each ])) ]. 18 | ^ Dictionary 19 | with: #added -> (aNewModel elements select: [ :each | added includes: each instanceHash ]) 20 | with: #modified -> propertyDiff 21 | with: #removed -> (anOldModel elements select: [ :each | removed includes: each instanceHash ]) -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModelDiff.class/instance/propertyDiffBetween.and..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | propertyDiffBetween: anOldInstance and: aNewInstance 3 | | added removed same modified | 4 | added := aNewInstance slots keys \ anOldInstance slots keys. 5 | removed := anOldInstance slots keys \ aNewInstance slots keys. 6 | modified := Set new. 7 | same := aNewInstance slots keys intersection: anOldInstance slots keys. 8 | same 9 | do: [ :key | 10 | | oldValue newValue | 11 | oldValue := anOldInstance slots at: key. 12 | newValue := aNewInstance slots at: key. 13 | (oldValue = newValue 14 | or: [ ((oldValue isKindOf: LIVInstanceSpecification) 15 | and: [ newValue isKindOf: LIVInstanceSpecification ]) 16 | and: [ oldValue instanceHash = newValue instanceHash ] ]) 17 | ifFalse: [ modified add: key ] ]. 18 | ^ Dictionary 19 | with: #added -> (aNewInstance slots associationsSelect: [ :pair | added includes: pair key ]) 20 | with: 21 | #removed 22 | -> (anOldInstance slots associationsSelect: [ :pair | removed includes: pair key ]) 23 | with: 24 | #modified 25 | -> (aNewInstance slots associationsSelect: [ :pair | modified includes: pair key ]) -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModelDiff.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "", 3 | "super" : "Object", 4 | "category" : "LiveInstanceVisualization-Diff", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ ], 9 | "name" : "LIVInstanceModelDiff", 10 | "type" : "normal" 11 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModelTest.class/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/repository/LiveInstanceVisualization.package/LIVInstanceModelTest.class/README.md -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModelTest.class/instance/setUp.st: -------------------------------------------------------------------------------- 1 | running 2 | setUp 3 | | specBuilder history | 4 | super setUp. 5 | specBuilder := LIVInstanceCompositeSpecificationBuilder new. 6 | self setupBuilder: specBuilder. 7 | history := LIVInstanceHistory new. 8 | history specificationBuilder: specBuilder. 9 | model := history newState -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModelTest.class/instance/setupBuilder..st: -------------------------------------------------------------------------------- 1 | running 2 | setupBuilder: aBuilder 3 | aBuilder 4 | addSpec: [ :spec | 5 | spec classifier: LIVTestContainer. 6 | spec name: #identityHash. 7 | spec addSlot: #items -> [ OrderedCollection new ] ]. 8 | aBuilder 9 | addSpec: [ :spec | 10 | spec classifier: LIVTestItem. 11 | spec name: #identityHash. 12 | spec addSlot: #container -> nil ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModelTest.class/instance/testAddLinkFromToAt.st: -------------------------------------------------------------------------------- 1 | tests - adding 2 | testAddLinkFromToAt 3 | | container item | 4 | container := LIVTestContainer new. 5 | item := LIVTestItem new. 6 | model addLinkFrom: container to: item at: #items. 7 | self 8 | assert: ((model specificationFor: container) slots at: #items) asArray 9 | equals: {model specificationFor: item} -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModelTest.class/instance/testEnsureInstance.st: -------------------------------------------------------------------------------- 1 | tests - adding 2 | testEnsureInstance 3 | | inst | 4 | inst := LIVTestItem new. 5 | self deny: (model specificationFor: inst ifNone: [ false ]). 6 | model ensureInstanceFor: inst. 7 | self assert: (model specificationFor: inst) instanceHash equals: inst identityHash -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModelTest.class/instance/testRemoveInstance.st: -------------------------------------------------------------------------------- 1 | tests - removing 2 | testRemoveInstance 3 | | container item | 4 | container := LIVTestContainer new. 5 | item := LIVTestItem new. 6 | model addLinkFrom: container to: item at: #items. 7 | model removeLinkFrom: container to: item at: #items. 8 | self assert: model elements asArray equals: {model specificationFor: container} -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModelTest.class/instance/testRemoveInstanceNot.st: -------------------------------------------------------------------------------- 1 | tests - removing 2 | testRemoveInstanceNot 3 | | container item | 4 | container := LIVTestContainer new. 5 | item := LIVTestItem new. 6 | model addLinkFrom: container to: item at: #items. 7 | model removeInstance: (model specificationFor: item). 8 | self 9 | assert: model elements asArray 10 | equals: 11 | {model specificationFor: container. 12 | model specificationFor: item} -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModelTest.class/instance/testRemoveLinkFromToAt.st: -------------------------------------------------------------------------------- 1 | tests - removing 2 | testRemoveLinkFromToAt 3 | | container item | 4 | container := LIVTestContainer new. 5 | item := LIVTestItem new. 6 | model addLinkFrom: container to: item at: #items. 7 | model removeLinkFrom: container to: item at: #items. 8 | self assert: ((model specificationFor: container) slots at: #items) asArray equals: #() -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModelTest.class/instance/testRemoveLinksFromAtCollection.st: -------------------------------------------------------------------------------- 1 | tests - removing 2 | testRemoveLinksFromAtCollection 3 | | container item | 4 | container := LIVTestContainer new. 5 | item := LIVTestItem new. 6 | model addLinkFrom: container to: item at: #items. 7 | model removeLinksFrom: container at: #items. 8 | self assert: ((model specificationFor: container) slots at: #items) asArray equals: #(). 9 | self assert: model elements asArray equals: {model specificationFor: container} -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModelTest.class/instance/testRemoveLinksFromAtDirect.st: -------------------------------------------------------------------------------- 1 | tests - removing 2 | testRemoveLinksFromAtDirect 3 | | container item | 4 | container := LIVTestContainer new. 5 | item := LIVTestItem new. 6 | model setLinkFrom: item to: container at: #container. 7 | model removeLinksFrom: item at: #container. 8 | self assert: ((model specificationFor: item) slots at: #container) equals: nil. 9 | self assert: model elements asArray equals: {model specificationFor: item} -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModelTest.class/instance/testSetLinkFromToAt.st: -------------------------------------------------------------------------------- 1 | tests - adding 2 | testSetLinkFromToAt 3 | | container item | 4 | container := LIVTestContainer new. 5 | item := LIVTestItem new. 6 | model setLinkFrom: item to: container at: #container. 7 | self 8 | assert: ((model specificationFor: item) slots at: #container) 9 | equals: (model specificationFor: container) -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModelTest.class/instance/testSetValueFromToAt.st: -------------------------------------------------------------------------------- 1 | tests - adding 2 | testSetValueFromToAt 3 | | container item | 4 | container := LIVTestContainer new. 5 | item := LIVTestItem new. 6 | model setValueFrom: item to: container at: #container. 7 | self assert: ((model specificationFor: item) slots at: #container) equals: container -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModelTest.class/instance/testUnsetLinkFromAt.st: -------------------------------------------------------------------------------- 1 | tests - removing 2 | testUnsetLinkFromAt 3 | | container item | 4 | container := LIVTestContainer new. 5 | item := LIVTestItem new. 6 | model setLinkFrom: item to: container at: #container. 7 | model unsetLinkFrom: item at: #container. 8 | self assert: ((model specificationFor: item) slots at: #container) equals: nil -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceModelTest.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "", 3 | "super" : "TestCase", 4 | "category" : "LiveInstanceVisualization-Tests", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ 9 | "model" 10 | ], 11 | "name" : "LIVInstanceModelTest", 12 | "type" : "normal" 13 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecification.class/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/repository/LiveInstanceVisualization.package/LIVInstanceSpecification.class/README.md -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecification.class/instance/^equals.st: -------------------------------------------------------------------------------- 1 | comparing 2 | = aSpec 3 | self species = aSpec species 4 | ifFalse: [ ^ false ]. 5 | ^ self instanceHash = aSpec instanceHash -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecification.class/instance/asShape.st: -------------------------------------------------------------------------------- 1 | converting 2 | asShape 3 | | el lbl comp compLbl | 4 | el := OPUmlCompartmentableShape new. 5 | " el localStyle: style." 6 | el modelElement: self. 7 | lbl := OPUmlTypedElementLabel new. 8 | lbl 9 | text: 10 | (String 11 | streamContents: [ :stream | 12 | name 13 | ifNotNil: [ stream 14 | << name; 15 | << ' ' ]. 16 | stream << ': '. 17 | stream << classifier name ]). 18 | lbl 19 | localStyle: 20 | (OPUmlStyle new 21 | fontSize: 11; 22 | fontUnderline: true). 23 | lbl owningElement: el. 24 | comp := OPUmlCompartment new. 25 | comp owningElement: el. 26 | slots 27 | keysAndValuesDo: [ :key :value | 28 | (compLbl := OPUmlTypedElementLabel new) 29 | owningElement: comp; 30 | modelElement: key; 31 | text: 32 | (String 33 | streamContents: [ :stream | 34 | stream << key. 35 | stream << ' = '. 36 | (value isCollection 37 | and: [ value allSatisfy: [ :each | each isKindOf: LIVInstanceSpecification ] ]) 38 | ifTrue: [ (stream 39 | << 40 | (value class printString first isVowel 41 | ifTrue: [ 'an' ] 42 | ifFalse: [ 'a' ])) 43 | << value class printString; 44 | << '(size='; 45 | << value size; 46 | << ')' ] 47 | ifFalse: [ stream << value printString ] ]) ]. 48 | ^ el -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecification.class/instance/classifier..st: -------------------------------------------------------------------------------- 1 | accessing 2 | classifier: anObject 3 | classifier := anObject -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecification.class/instance/classifier.st: -------------------------------------------------------------------------------- 1 | accessing 2 | classifier 3 | ^ classifier -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecification.class/instance/gtInspectorSlotsIn..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | gtInspectorSlotsIn: composite 3 | 4 | (self slots gtInspectorItemsIn: composite) title: 'Slots' -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecification.class/instance/gtInspectorViewIn..st: -------------------------------------------------------------------------------- 1 | ui 2 | gtInspectorViewIn: composite 3 | 4 | composite roassal2 5 | title: 'Instance'; 6 | initializeView: [ | v | 7 | v := RTView new. 8 | LIVRTInteractiveViewContext setOnView: v. 9 | self asShape renderIn: v. 10 | v @ RTDraggableView @ RTZoomableView. 11 | v ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecification.class/instance/hash.st: -------------------------------------------------------------------------------- 1 | comparing 2 | hash 3 | ^ self identityHash bitXor: self instanceHash -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecification.class/instance/initialize.st: -------------------------------------------------------------------------------- 1 | initialization 2 | initialize 3 | super initialize. 4 | slots := OrderedDictionary new. 5 | " style := OPUmlStyle new 6 | fillColor: Color veryVeryLightGray; 7 | strokeColor: Color black; 8 | strokeWidth: 1" -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecification.class/instance/instanceHash..st: -------------------------------------------------------------------------------- 1 | accessing 2 | instanceHash: aHash 3 | instanceHash := aHash -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecification.class/instance/instanceHash.st: -------------------------------------------------------------------------------- 1 | accessing 2 | instanceHash 3 | ^ instanceHash -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecification.class/instance/name..st: -------------------------------------------------------------------------------- 1 | accessing 2 | name: aString 3 | name := aString -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecification.class/instance/name.st: -------------------------------------------------------------------------------- 1 | accessing 2 | name 3 | ^ name -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecification.class/instance/printOn..st: -------------------------------------------------------------------------------- 1 | printing 2 | printOn: aStream 3 | aStream 4 | << 'InstSpec'; 5 | << '('; 6 | << self name; 7 | << ' : '; 8 | << self classifier name; 9 | << ')' -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecification.class/instance/slots.st: -------------------------------------------------------------------------------- 1 | accessing 2 | slots 3 | ^ slots -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecification.class/instance/style..st: -------------------------------------------------------------------------------- 1 | accessing 2 | style: aStyle 3 | " style := aStyle" -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecification.class/instance/style.st: -------------------------------------------------------------------------------- 1 | accessing 2 | style 3 | ^ style -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecification.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "", 3 | "super" : "Object", 4 | "category" : "LiveInstanceVisualization-Models", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ 9 | "name", 10 | "classifier", 11 | "slots", 12 | "instanceHash", 13 | "style" 14 | ], 15 | "name" : "LIVInstanceSpecification", 16 | "type" : "normal" 17 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecificationBuilder.class/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/repository/LiveInstanceVisualization.package/LIVInstanceSpecificationBuilder.class/README.md -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecificationBuilder.class/class/example1.st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | example1 3 | 4 | | inst builder model v el | 5 | inst := OPUmlStyle new fontSize: 11; fontUnderline: true. 6 | 7 | builder := LIVInstanceSpecificationBuilder new. 8 | builder name: nil. 9 | builder addFromAssociation: #fontSize -> #fontSize. 10 | builder addFromAssociation: #fontUnderline -> #fontUnderline. 11 | 12 | model := builder instanceOn: inst. 13 | 14 | v := RTView new. 15 | el := model asShape. 16 | el renderIn: v. 17 | el rtElement when: TRMouseLeftClick do: [ :evt | ]. 18 | el rtElement @ RTResizable @ RTDraggable. 19 | v -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecificationBuilder.class/class/exampleWithHistory.st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | exampleWithHistory 3 | 4 | | b1 b2 hist m1 ui m2 m3 m4 m5 uiM bM m6 v from to diff colorer | 5 | b1 := LIVInstanceSpecificationBuilder new. 6 | b1 name: 'source'. 7 | 8 | b2 := LIVInstanceSpecificationBuilder new. 9 | b2 name: 'button'. 10 | b2 addFromAssociation: #owner -> nil. 11 | 12 | hist := LIVInstanceHistory new. 13 | m1 := LIVInstanceModel new. 14 | hist add: m1. 15 | 16 | ui := DynamicComposableModel new. 17 | m2 := LIVInstanceModel new. 18 | m2 add: (b1 instanceOn: ui). 19 | hist add: m2. 20 | 21 | ui instantiateModels: #(button ButtonModel). 22 | b1 addFromAssociation: #button -> nil. 23 | m3 := LIVInstanceModel new. 24 | m3 add: (b1 instanceOn: ui). 25 | hist add: m3. 26 | 27 | m4 := LIVInstanceModel new. 28 | m4 add: (b1 instanceOn: ui). 29 | m4 add: (b2 instanceOn: ui button). 30 | hist add: m4. 31 | 32 | m5 := LIVInstanceModel new. 33 | uiM := b1 instanceOn: ui. 34 | bM := b2 instanceOn: ui button. 35 | uiM slots at: #button put: bM. 36 | m5 add: uiM; add: bM. 37 | hist add: m5. 38 | 39 | m6 := LIVInstanceModel new. 40 | uiM := b1 instanceOn: ui. 41 | bM := b2 instanceOn: ui button. 42 | uiM slots at: #button put: bM. 43 | bM slots at: #owner put: uiM. 44 | m6 add: uiM; add: bM. 45 | hist add: m6. 46 | 47 | v := RTView new. 48 | 49 | from := hist models second. 50 | to := hist models sixth. 51 | 52 | diff := LIVInstanceModelDiff new diffBetween: from and: to. 53 | 54 | to renderIn: v. 55 | 56 | colorer := LIVInstanceDiffColorer new. 57 | colorer colorAll: diff in: v. 58 | 59 | v -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecificationBuilder.class/class/exampleWithMetalinks.st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | exampleWithMetalinks 3 | 4 | | history wrapperSpec modelSpec wrapSelectorLink wrapInstanceLink cmInitLink cmSpecLink links | 5 | history := LIVInstanceHistory new. 6 | history add: (LIVInstanceModel new). 7 | 8 | "added to SpecWrapper>>instance:selector: #after" 9 | (wrapperSpec := LIVInstanceSpecificationBuilder new) 10 | name: [ :obj | obj hash asString ]; 11 | addFromAssociation: #selector -> nil; 12 | addFromAssociation: #instance -> nil. 13 | 14 | "added to ComposableModel>>#initialize #before" 15 | (modelSpec := LIVInstanceSpecificationBuilder new) 16 | name: [ :obj | obj hash asString ]; 17 | addFromAssociation: #spec -> nil. 18 | 19 | (wrapSelectorLink := MTMetaLinkUser new) 20 | target: SpecWrapper>>#selector:; 21 | control: #after; 22 | action: [ :object | 23 | history newState in: [ :model | 24 | (model specificationFor: object ifAbsentPut: [ wrapperSpec instanceOn: object ]) 25 | slots at: #selector put: object selector 26 | ] 27 | ]. 28 | 29 | (wrapInstanceLink := MTMetaLinkUser new) 30 | target: SpecWrapper>>#instance:; 31 | control: #after; 32 | action: [ :object | 33 | history newState in: [ :model | |objectModel| 34 | objectModel := model specificationFor: object ifAbsentPut: [ wrapperSpec instanceOn: object ]. 35 | (object instance isKindOf: ComposableModel) ifTrue: [ 36 | objectModel slots at: #instance put: (model specificationFor: object instance ifAbsentPut: [ modelSpec instanceOn: object instance]) ] 37 | ifFalse: [ objectModel slots at: #instance put: object instance printString ] 38 | ] 39 | ]. 40 | 41 | 42 | (cmInitLink := MTMetaLinkUser new) 43 | target: ComposableModel>>#initialize; 44 | control: #before; 45 | action: [ :object | 46 | history newState add: (modelSpec instanceOn: object) 47 | ]. 48 | 49 | (cmSpecLink := MTMetaLinkUser new) 50 | target: ComposableModel>>#spec:; 51 | control: #after; 52 | action: [ :object | 53 | history newState in: [ :model | 54 | (model specificationFor: object) in: [ :instSpec | 55 | instSpec slots at: #spec put: (model specificationFor: object spec ifAbsentPut: [ wrapperSpec instanceOn: object spec]) 56 | ]. 57 | ]. 58 | ]. 59 | 60 | links := { 61 | wrapSelectorLink. 62 | wrapInstanceLink. 63 | cmInitLink. 64 | cmSpecLink. 65 | }. 66 | 67 | links do: #install. 68 | 69 | history inspect. 70 | 71 | " 72 | links do: #uninstall. 73 | " -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecificationBuilder.class/instance/addSlot..st: -------------------------------------------------------------------------------- 1 | adding 2 | addSlot: anAssociation 3 | slots add: anAssociation -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecificationBuilder.class/instance/classifier..st: -------------------------------------------------------------------------------- 1 | accessing 2 | classifier: anObject 3 | classifier := anObject -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecificationBuilder.class/instance/classifier.st: -------------------------------------------------------------------------------- 1 | accessing 2 | classifier 3 | ^ classifier -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecificationBuilder.class/instance/initialize.st: -------------------------------------------------------------------------------- 1 | initialization 2 | initialize 3 | super initialize. 4 | name := nil. 5 | slots := OrderedDictionary new. 6 | style := OPUmlStyle new 7 | fillColor: Color veryVeryLightGray; 8 | strokeColor: Color black; 9 | strokeWidth: 1 -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecificationBuilder.class/instance/instanceOn..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | instanceOn: anObject 3 | | model | 4 | model := self newModel. 5 | model style: style. 6 | model classifier: anObject class. 7 | model instanceHash: anObject hash. 8 | name ifNotNil: [ model name: (name cull: anObject) ]. 9 | slots 10 | keysAndValuesDo: [ :key :value | model slots at: key put: (value ifNotNil: [ value cull: anObject ]) ]. 11 | ^ model -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecificationBuilder.class/instance/name..st: -------------------------------------------------------------------------------- 1 | accessing 2 | name: aStringOrBlock 3 | aStringOrBlock isString & aStringOrBlock isSymbol not 4 | ifTrue: [ name := [ :obj | aStringOrBlock ] ] 5 | ifFalse: [ name := aStringOrBlock ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecificationBuilder.class/instance/newModel.st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | newModel 3 | ^ LIVInstanceSpecification new -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecificationBuilder.class/instance/style..st: -------------------------------------------------------------------------------- 1 | accessing 2 | style: anObject 3 | style := anObject -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecificationBuilder.class/instance/style.st: -------------------------------------------------------------------------------- 1 | accessing 2 | style 3 | ^ style -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecificationBuilder.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "", 3 | "super" : "Object", 4 | "category" : "LiveInstanceVisualization-Models", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ 9 | "name", 10 | "slots", 11 | "classifier", 12 | "style" 13 | ], 14 | "name" : "LIVInstanceSpecificationBuilder", 15 | "type" : "normal" 16 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecificationTest.class/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/repository/LiveInstanceVisualization.package/LIVInstanceSpecificationTest.class/README.md -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecificationTest.class/instance/setUp.st: -------------------------------------------------------------------------------- 1 | running 2 | setUp 3 | super setUp. 4 | spec := LIVInstanceSpecification new -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecificationTest.class/instance/testPrintOn.st: -------------------------------------------------------------------------------- 1 | tests - printing 2 | testPrintOn 3 | spec name: 'item'. 4 | spec classifier: LIVTestItem. 5 | self assert: spec printString equals: 'InstSpec(item : LIVTestItem)' -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInstanceSpecificationTest.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "", 3 | "super" : "TestCase", 4 | "category" : "LiveInstanceVisualization-Tests", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ 9 | "model", 10 | "spec" 11 | ], 12 | "name" : "LIVInstanceSpecificationTest", 13 | "type" : "normal" 14 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInternalCallGraphVisualization.class/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/repository/LiveInstanceVisualization.package/LIVInternalCallGraphVisualization.class/README.md -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInternalCallGraphVisualization.class/class/nautilusClassesMenu..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | nautilusClassesMenu: aBuilder 3 | 4 | 5 | | target | 6 | target := aBuilder model. 7 | target selectedClass ifNil: [ ^ target ]. 8 | (aBuilder item: #'Inspect') 9 | action: [ target selectedClass inspect ]; 10 | order: -99; 11 | withSeparatorAfter. -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInternalCallGraphVisualization.class/instance/addMenuFor..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | addMenuFor: aFigure 3 | | menu | 4 | menu := PluggableMenuSpec new model: aFigure. 5 | menu 6 | add: 'Browse' 7 | action: (MessageSend receiver: aFigure model selector: #browse). 8 | aFigure when: TRMouseRightClick do: [ :event | menu asMenuMorph popUpInWorld ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInternalCallGraphVisualization.class/instance/view.class..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | view: aView class: aClassDescription 3 | | b els | 4 | b := RTMondrian new. 5 | b view: aView. 6 | b shape text 7 | color: Color black; 8 | text: #selector. 9 | els := b nodes: aClassDescription methods. 10 | els do: [ :each | self addMenuFor: each ]. 11 | b shape horizontalBezierLine color: Color blue. 12 | b shape arrowedBezier 13 | head: RTEmptyArrowHead new; 14 | color: Color blue. 15 | b edges 16 | connectFromAll: [ :s | (aClassDescription thoroughWhichSelectorsReferTo: s selector) collect: [ :each | aClassDescription>>each ] ]. 17 | b layout horizontalDominanceTree 18 | verticalGap: 40; 19 | horizontalGap: 70. 20 | b view @ RTZoomableView. 21 | b build -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVInternalCallGraphVisualization.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "", 3 | "super" : "Object", 4 | "category" : "LiveInstanceVisualization-Inspector-Extensions", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ ], 9 | "name" : "LIVInternalCallGraphVisualization", 10 | "type" : "normal" 11 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVLinkBuilder.class/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/repository/LiveInstanceVisualization.package/LIVLinkBuilder.class/README.md -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVLinkBuilder.class/instance/build.st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | build 3 | | edge | 4 | edge := OPUmlEdge new 5 | source: source; 6 | target: target; 7 | modelElement: source modelElement -> target modelElement; 8 | yourself. 9 | edge headDecorator: RTSimpleArrow. 10 | ^ edge -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVLinkBuilder.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "", 3 | "super" : "Object", 4 | "category" : "LiveInstanceVisualization-Models", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ 9 | "source", 10 | "target" 11 | ], 12 | "name" : "LIVLinkBuilder", 13 | "type" : "normal" 14 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVLiveInstanceVisualization.class/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/repository/LiveInstanceVisualization.package/LIVLiveInstanceVisualization.class/README.md -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVLiveInstanceVisualization.class/class/wipExample.st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | wipExample 3 | | m dir f doc els edges v | 4 | m 5 | ifNil: [ dir := FileLocator D / 'prog' / 'normalized-systems'. 6 | f := dir / 'branchBankingCompV2-1.0.xml'. 7 | doc := XMLDOMParser parse: f contents. 8 | m := NSPXMLInterchange new importFromDocument: doc ]. 9 | els := LIVLiveInstanceVisualization new shapesFor: m. 10 | edges := els value. 11 | els := els key. 12 | v := RTView new. 13 | els 14 | do: [ :each | 15 | each renderIn: v. 16 | each rtElement @ RTDraggable ]. 17 | edges do: [ :each | each renderIn: v ]. 18 | 19 | "RTHorizontalTreeLayout on: (els collect: #rtElement)." 20 | RTRadialTreeLayout new 21 | horizontalGap: 300; 22 | verticalGap: 400; 23 | on: (els collect: #rtElement). 24 | 25 | "el rtElement @ RTResizable @ RTDraggable." 26 | v @ RTDraggableView @ RTZoomableView -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVLiveInstanceVisualization.class/instance/baseShapeFor.named..st: -------------------------------------------------------------------------------- 1 | shapes 2 | baseShapeFor: anObject named: aString 3 | | el | 4 | el := OPUmlClassifierShape new. 5 | OPUmlNameLabel new 6 | text: aString; 7 | localStyle: (OPUmlStyle new fontSize: 11; fontUnderline: true); 8 | owningElement: el. 9 | el modelElement: anObject. 10 | ^ el -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVLiveInstanceVisualization.class/instance/isReferenceValue.of..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | isReferenceValue: aValue of: anObject 3 | aValue class package = anObject class package 4 | ifTrue: [ ^ true ]. 5 | (aValue isCollection 6 | and: [ aValue isNotEmpty and: [ aValue anyOne class package = anObject class package ] ]) 7 | ifTrue: [ ^ true ]. 8 | ^ false -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVLiveInstanceVisualization.class/instance/labelFor.withText..st: -------------------------------------------------------------------------------- 1 | shapes 2 | labelFor: aKey withText: text 3 | ^ OPUmlLabel new 4 | text: text; 5 | modelElement: aKey; 6 | yourself -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVLiveInstanceVisualization.class/instance/limitedShapeFor..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | limitedShapeFor: anObject 3 | | el comp | 4 | el := self baseShapeFor: anObject named: anObject name , ' : ' , anObject class name. 5 | comp := OPUmlCompartment new. 6 | comp owningElement: el. 7 | #(id , name) 8 | select: [ :each | anObject class hasInstVarNamed: each ] 9 | thenDo: [ :key | 10 | | text | 11 | text := key , (self textFor: (anObject instVarNamed: key) of: anObject). 12 | (self labelFor: key withText: text) owningElement: comp ]. 13 | ^ el -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVLiveInstanceVisualization.class/instance/referenceShapeFrom.to..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | referenceShapeFrom: aSourceShape to: aTargetShape 3 | ^ OPUmlEdge new 4 | source: aSourceShape; 5 | target: aTargetShape; 6 | modelElement: aSourceShape modelElement -> aTargetShape modelElement; 7 | yourself -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVLiveInstanceVisualization.class/instance/shapeFor..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | shapeFor: anObject 3 | | el comp values | 4 | el := self baseShapeFor: anObject named: anObject name , ' : ' , anObject class name. 5 | comp := OPUmlCompartment new. 6 | comp owningElement: el. 7 | values := self valuesOf: anObject. 8 | values keysAndValuesDo: [ :key :value | 9 | | text | 10 | text := key , (self textFor: value of: anObject). 11 | (self labelFor: value withText: text) owningElement: comp ]. 12 | values associations 13 | select: [ :pair | self isReferenceValue: pair value of: anObject ] 14 | thenDo: [ :pair | 15 | comp ownedElements 16 | detect: [ :each | each modelElement = pair value ] 17 | ifFound: [ :each | each localStyle: (OPUmlStyle new fontColor: Color blue) ] ]. 18 | ^ el -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVLiveInstanceVisualization.class/instance/shapesFor..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | shapesFor: anObject 3 | | primaryShape referencedObjects values secondaryShapes references ref refObjects refCollections | 4 | values := self valuesOf: anObject. 5 | ref := values associations 6 | select: [ :pair | self isReferenceValue: pair value of: anObject ]. 7 | refObjects := ref reject: [ :pair | pair value isCollection ] thenCollect: #value. 8 | refCollections := (ref select: [ :pair | pair value isCollection ]) flatCollect: #value. 9 | primaryShape := self shapeFor: anObject. 10 | references := RTGroup new. 11 | secondaryShapes := RTGroup new. 12 | refObjects 13 | collect: [ :each | 14 | | shape | 15 | shape := self shapeFor: each. 16 | secondaryShapes add: shape. 17 | references add: (self referenceShapeFrom: primaryShape to: shape) ]. 18 | refCollections 19 | collect: [ :each | 20 | | shape | 21 | shape := self limitedShapeFor: each. 22 | secondaryShapes add: shape. 23 | references add: (self referenceShapeFrom: primaryShape to: shape) ]. 24 | ^ (secondaryShapes , {primaryShape}) -> references -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVLiveInstanceVisualization.class/instance/textFor.of..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | textFor: aValue of: anObject 3 | aValue class package = anObject class package 4 | ifTrue: [ ^ ' = ' , aValue class name ]. 5 | (aValue isCollection 6 | and: [ aValue isNotEmpty and: [ aValue anyOne class package = anObject class package ] ]) 7 | ifTrue: [ ^ ' : ' , aValue anyOne class name , '[*]', ' = an ' , aValue class name, '()' ]. 8 | ^ ' = ' , aValue printString -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVLiveInstanceVisualization.class/instance/valuesOf..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | valuesOf: anObject 3 | ^ (anObject class instanceVariables sorted 4 | collect: [ :each | each -> (anObject instVarNamed: each) ]) asOrderedDictionary -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVLiveInstanceVisualization.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "", 3 | "super" : "Object", 4 | "category" : "LiveInstanceVisualization", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ ], 9 | "name" : "LIVLiveInstanceVisualization", 10 | "type" : "normal" 11 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVNSPClassVisualization.class/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/repository/LiveInstanceVisualization.package/LIVNSPClassVisualization.class/README.md -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVNSPClassVisualization.class/instance/shapeFor..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | shapeFor: aClass 3 | -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVNSPClassVisualization.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "", 3 | "super" : "Object", 4 | "category" : "LiveInstanceVisualization-Inspector-Extensions", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ ], 9 | "name" : "LIVNSPClassVisualization", 10 | "type" : "normal" 11 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/README.md: -------------------------------------------------------------------------------- 1 | I attach a RTElement to a RTEdge (works for both line and connection shapes). When the edge or it's extremities are moved, so is the anchor. 2 | 3 | Furthermore I will try to move the Element in such a way that it doesn't overlap neither the edge, nor it's extremities, nor their other lines. I will not however prevent overlapping of another elements (e.g. another element or edge nearby). 4 | 5 | !! API 6 | 7 | ==#balance: aNumber== 8 | Specify where the anchor should be positioned. x \in [0, 1] for relative positions (so 0.5 will be exactly middle, 1 at the end, etc.). 9 | x > 1 or x < 0 for absolute positioning. E.g.: 10 - position the anchor 10 pixels from the beginning; -20 - 20 pixels from the end 10 | 11 | ==#minDistance: aNumber== 12 | A minimum distance (in pixels) that should be maintained between the edge and the element 13 | 14 | 15 | -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/class/example.st: -------------------------------------------------------------------------------- 1 | example 2 | example 3 | | v es e rep anchor | 4 | v := RTView new. 5 | v @ RTDraggableView. 6 | v @ OPRTGridView. 7 | v @ RTZoomableView. 8 | 9 | es := RTBox new 10 | color: Color green; 11 | size: 20; 12 | elementsOn: #(1 2). 13 | e := OPRTStyledConnection new 14 | attachPoint: OPRTNewRectangleAttachPoint new; 15 | color: Color black; 16 | edgeFrom: es first to: es second. 17 | e @ OPRTConnectionHandles. 18 | 19 | rep := RTBox new 20 | color: Color purple; 21 | size: 20; 22 | element. 23 | v add: rep. 24 | rep translateBy: 30 @ 50. 25 | rep @ (RTDraggableSnapToGrid new gridSize: 20). 26 | 27 | v addAll: es. 28 | v add: e. 29 | 30 | anchor := LIVRTAnchorConstraint new. 31 | anchor anchorShape size: 10. 32 | anchor 33 | element: rep; 34 | edge: e; 35 | balance: 0.5; 36 | minDistance: 10; 37 | build. 38 | 39 | es @ (RTDraggableSnapToGrid new gridSize: 20). 40 | 41 | es first translateTo: 70 negated @ 90 negated. 42 | es second translateTo: 70 @ 110. 43 | 44 | v open -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/class/example2.st: -------------------------------------------------------------------------------- 1 | example 2 | example2 3 | | v es e rep anchor | 4 | v := RTView new. 5 | v @ RTDraggableView. 6 | v @ (RTGridView new gridSize: 20). 7 | v @ RTZoomableView. 8 | 9 | es := RTBox new 10 | color: Color green; 11 | size: 150; 12 | elementsOn: #(1 2). 13 | e := OPRTStyledConnection new 14 | attachPoint: OPRTNewRectangleAttachPoint new; 15 | color: Color black; 16 | edgeFrom: es first to: es second. 17 | e @ OPRTConnectionHandles. 18 | 19 | rep := RTBox new 20 | color: (Color purple alpha: 0.5); 21 | borderColor: Color purple; 22 | size: 50; 23 | width: 300; 24 | element. 25 | rep translateBy: 30 @ 50. 26 | rep @ RTDraggable. 27 | 28 | v addAll: es. 29 | v add: e. 30 | v add: rep. 31 | 32 | anchor := LIVRTAnchorConstraint new. 33 | anchor anchorShape size: 10. 34 | anchor 35 | element: rep; 36 | edge: e; 37 | balance: -10; 38 | minDistance: 10; 39 | build. 40 | 41 | es @ (RTDraggableSnapToGrid new gridSize: 20). 42 | 43 | es first translateTo: 70 negated @ 100 negated. 44 | es second translateTo: 70 @ 110. 45 | 46 | v open -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/class/exampleSelfEdge.st: -------------------------------------------------------------------------------- 1 | example 2 | exampleSelfEdge 3 | | v e box start end createAnchor| 4 | v := RTView new. 5 | v @ RTDraggableView. 6 | v @ OPRTGridView. 7 | v @ RTZoomableView. 8 | 9 | box := RTBox new 10 | color: Color green; 11 | width: 100; 12 | height: 50; 13 | element. 14 | e := OPRTStyledConnection new 15 | attachPoint: OPRTNewRectangleAttachPoint new; 16 | color: Color black; 17 | edgeFrom: box to: box. 18 | e shape decorations arrowHead. 19 | e @ OPRTConnectionHandles. 20 | 21 | start := RTLabel new 22 | color: Color black; 23 | elementsOn: #(sTop sBottom). 24 | 25 | end := RTLabel new 26 | color: Color black; 27 | elementsOn: #(eTop eBottom). 28 | 29 | 30 | v add: box. 31 | v add: e. 32 | v 33 | addAll: start; 34 | addAll: end. 35 | 36 | 37 | createAnchor := [ :el :bal :side | 38 | LIVRTAnchorConstraint new 39 | element: el; 40 | edge: e; 41 | balance: bal; 42 | minDistance: side * 5; 43 | build. 44 | ]. 45 | 46 | createAnchor value: start first value: 10 value: 1. 47 | createAnchor value: start second value: 10 value: -1. 48 | 49 | createAnchor value: end first value: -10 value: 1. 50 | createAnchor value: end second value: -10 value: -1. 51 | 52 | start @ OPRTRoundedDraggable. 53 | end @ OPRTRoundedDraggable. 54 | 55 | box @ (RTDraggableSnapToGrid new gridSize: 20). 56 | 57 | box translateBy: 0@0. 58 | 59 | v open -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/instance/addAnchor.st: -------------------------------------------------------------------------------- 1 | building 2 | addAnchor 3 | anchorElement := self anchorShape element. 4 | element view add: anchorElement. 5 | guideEdge := self guideLine edgeFrom: element to: anchorElement. 6 | element view add: guideEdge -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/instance/anchorSegment.st: -------------------------------------------------------------------------------- 1 | building 2 | anchorSegment 3 | ^ self segments segmentWithPointFor: self balance -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/instance/anchorShape.st: -------------------------------------------------------------------------------- 1 | accessing 2 | anchorShape 3 | ^ anchorShape -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/instance/balance..st: -------------------------------------------------------------------------------- 1 | accessing 2 | balance: aNumber 3 | balance := aNumber -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/instance/balance.st: -------------------------------------------------------------------------------- 1 | accessing 2 | balance 3 | ^ balance -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/instance/build.st: -------------------------------------------------------------------------------- 1 | building 2 | build 3 | self addAnchor. 4 | edge from addCallback: (TRTranslationCallback block: [ self update ]). 5 | edge to addCallback: (TRTranslationCallback block: [ self update ]). 6 | "Do a symbol-based check, because DCRTConnection is not (yet?) in Roassal" 7 | edge shape className asSymbol = #OPRTConnection 8 | | (edge shape className asSymbol = #OPRTStyledConnection) 9 | ifTrue: [ edge when: #OPRTHandleMoved asClass do: [ self update ] ]. 10 | element 11 | when: TRMouseDragStart 12 | do: [ 13 | guideLine color: Color gray. 14 | guideEdge update. 15 | guideEdge view signalUpdate ]. 16 | element 17 | when: TRMouseDragEnd 18 | do: 19 | [ 20 | guideLine color: Color transparent. 21 | guideEdge update. 22 | guideEdge view signalUpdate ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/instance/computeExtraDistance.st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | computeExtraDistance 3 | "Compute the extra distance required to move the element to not overlap the segment." 4 | 5 | | segment sideOfElement normals | 6 | segment := self anchorSegment first. 7 | sideOfElement := segment sideOfPoint: element position. 8 | normals := element encompassingRectangle corners 9 | select: [ :each | (segment sideOfPoint: each) ~= sideOfElement ] 10 | thenCollect: [ :each | each dist: (each nearestPointAlongLineFrom: segment from to: segment to) ]. 11 | normals ifEmpty: [ ^ 0 ]. 12 | ^ minDistance sign > 0 13 | ifTrue: [ normals max ] 14 | ifFalse: [ normals max negated ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/instance/connectionSegmentsFor..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | connectionSegmentsFor: anEdge 3 | ^ (anEdge shape pathFor: anEdge) 4 | overlappingPairsCollect: [ :from :to | RTLineSegment from: from to: to ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/instance/edge..st: -------------------------------------------------------------------------------- 1 | accessing 2 | edge: anEdge 3 | edge := anEdge -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/instance/edge.st: -------------------------------------------------------------------------------- 1 | accessing 2 | edge 3 | ^ edge -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/instance/element..st: -------------------------------------------------------------------------------- 1 | accessing 2 | element: anElement 3 | element := anElement -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/instance/element.st: -------------------------------------------------------------------------------- 1 | accessing 2 | element 3 | ^ element -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/instance/guideLine.st: -------------------------------------------------------------------------------- 1 | accessing 2 | guideLine 3 | ^ guideLine -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/instance/initialize.st: -------------------------------------------------------------------------------- 1 | initialization 2 | initialize 3 | (anchorShape := RTEllipse new) 4 | size: 0; 5 | color: Color red. 6 | (guideLine := RTLine new) color: Color transparent -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/instance/lineSegmentFor..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | lineSegmentFor: anEdge 3 | ^ anEdge lineSegments first -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/instance/minDistance..st: -------------------------------------------------------------------------------- 1 | accessing 2 | minDistance: anInteger 3 | minDistance := anInteger -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/instance/minDistance.st: -------------------------------------------------------------------------------- 1 | accessing 2 | minDistance 3 | ^ minDistance -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/instance/moveAnchor.st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | moveAnchor 3 | anchorElement translateTo: self anchorSegment last -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/instance/moveAwayFrom.via..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | moveAwayFrom: aRectangle via: aVector 3 | "There should be minDistance between the start and the element. Move it in the direction fo the current segment" 4 | 5 | | vector corners segment | 6 | "source and target of the edge on top of each other... ignore" 7 | aVector r = 0 8 | ifTrue: [ ^ self ]. 9 | vector := aVector normalized * (aRectangle origin dist: aRectangle corner). 10 | corners := element encompassingRectangle corners 11 | select: [ :each | aRectangle containsPoint: each ]. 12 | segment := (corners 13 | collect: 14 | [ :each | 15 | | sg | 16 | sg := RTLineSegment from: each to: each + vector. 17 | RTLineSegment from: each to: (sg intersectRectangle: aRectangle) anyOne ]) 18 | detectMax: #length. 19 | segment ifNotNil: [ element translateBy: segment vector ] 20 | " segment 21 | ifNotNil: 22 | [ element view 23 | add: 24 | (RTSVGPath new 25 | path: 26 | 'M' , segment from x asString , ',' , segment from y asString , 'L' , segment to x asString 27 | , ',' , segment to y asString; 28 | element) ]" -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/instance/moveAwayFromSegment..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | moveAwayFromSegment: aSegment 3 | (aSegment intersectRectangle: element encompassingRectangle) 4 | ifNotEmpty: 5 | [ :crossings | 6 | element 7 | translateBy: 8 | aSegment vector normal 9 | * (minDistance + self computeExtraDistance) negated ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/instance/moveElement.st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | moveElement 3 | | segment from to | 4 | segment := self anchorSegment first. 5 | element 6 | translateTo: anchorElement position + (segment vector normal * minDistance negated). 7 | self moveAwayFromSegment: segment. 8 | from := edge from encompassingRectangle expandBy: minDistance abs. 9 | to := edge to encompassingRectangle expandBy: minDistance abs. 10 | balance > 0 & (element encompassingRectangle intersects: from) 11 | ifTrue: [ self moveAwayFrom: from via: segment vector ]. 12 | balance < 0 & (element encompassingRectangle intersects: to) 13 | ifTrue: [ self moveAwayFrom: to via: segment vector negated ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/instance/segments.st: -------------------------------------------------------------------------------- 1 | accessing 2 | segments 3 | (edge shape isKindOf: OPRTConnection) 4 | ifTrue: [ ^ LIVRTPolyLineSegment withAll: (self connectionSegmentsFor: edge) ]. 5 | (edge shape isKindOf: RTBezierLine) 6 | ifTrue: [ ^ self notYetImplemented ]. 7 | ^ LIVRTPolyLineSegment with: (self lineSegmentFor: edge) -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/instance/update.st: -------------------------------------------------------------------------------- 1 | updating 2 | update 3 | self moveAnchor. 4 | self moveElement -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTAnchorConstraint.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "PeterUhnak 11/9/2015 10:49", 3 | "super" : "Object", 4 | "category" : "LiveInstanceVisualization-Roassal", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ 9 | "element", 10 | "edge", 11 | "minDistance", 12 | "balance", 13 | "anchorElement", 14 | "guideEdge", 15 | "anchorShape", 16 | "guideLine" 17 | ], 18 | "name" : "LIVRTAnchorConstraint", 19 | "type" : "normal" 20 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTInteractiveViewContext.class/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/repository/LiveInstanceVisualization.package/LIVRTInteractiveViewContext.class/README.md -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTInteractiveViewContext.class/instance/interactionsToBeRegistered.st: -------------------------------------------------------------------------------- 1 | hooks 2 | interactionsToBeRegistered 3 | ^ Array with: LIVRTSelectableElementsContextInteraction with: RTResizeableViewContextInteraction -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTInteractiveViewContext.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "", 3 | "super" : "RTAbstractViewContext", 4 | "category" : "LiveInstanceVisualization-Roassal", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ ], 9 | "name" : "LIVRTInteractiveViewContext", 10 | "type" : "normal" 11 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTPolyLineSegment.class/README.md: -------------------------------------------------------------------------------- 1 | I am an ordered collection of LineSegments. I provide some extra functions such as searching for specific segment given some position etc. -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTPolyLineSegment.class/class/with..st: -------------------------------------------------------------------------------- 1 | instance creation 2 | with: aSegment 3 | ^ self new 4 | segments: {aSegment}; 5 | yourself -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTPolyLineSegment.class/class/with.with..st: -------------------------------------------------------------------------------- 1 | instance creation 2 | with: first with: second 3 | ^ self new 4 | segments: (Array with: first with: second); 5 | yourself -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTPolyLineSegment.class/class/withAll..st: -------------------------------------------------------------------------------- 1 | instance creation 2 | withAll: aCollection 3 | ^ self new 4 | segments: aCollection; 5 | yourself -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTPolyLineSegment.class/instance/absoluteBalanceFor..st: -------------------------------------------------------------------------------- 1 | accessing 2 | absoluteBalanceFor: aNumber 3 | | balance | 4 | balance := aNumber. 5 | balance > 1 6 | ifTrue: [ ^ self length min: balance ]. 7 | balance < 0 8 | ifTrue: [ ^ 0 max: self length - balance negated ]. 9 | ^ self length * balance -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTPolyLineSegment.class/instance/first.st: -------------------------------------------------------------------------------- 1 | accessing 2 | first 3 | ^ self segments first -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTPolyLineSegment.class/instance/initialize.st: -------------------------------------------------------------------------------- 1 | initialization 2 | initialize 3 | segments := #() -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTPolyLineSegment.class/instance/last.st: -------------------------------------------------------------------------------- 1 | accessing 2 | last 3 | ^ self segments last -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTPolyLineSegment.class/instance/length.st: -------------------------------------------------------------------------------- 1 | accessing 2 | length 3 | ^ self segments inject: 0 into: [ :sum :next | sum + next length ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTPolyLineSegment.class/instance/second.st: -------------------------------------------------------------------------------- 1 | accessing 2 | second 3 | ^ self segments second -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTPolyLineSegment.class/instance/segmentWithPointFor..st: -------------------------------------------------------------------------------- 1 | accessing 2 | segmentWithPointFor: aNumber 3 | | sum newSum balance | 4 | sum := 0. 5 | balance := self absoluteBalanceFor: aNumber. 6 | self segments 7 | do: 8 | [ :each | 9 | newSum := sum + each length. 10 | (balance between: sum and: newSum) 11 | ifTrue: [ 12 | ^ {each. 13 | (each pointForBalance: balance - sum)} ]. 14 | sum := newSum ]. 15 | self error: 'failed to find a segment' -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTPolyLineSegment.class/instance/segments..st: -------------------------------------------------------------------------------- 1 | accessing 2 | segments: aCollection 3 | segments := aCollection -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTPolyLineSegment.class/instance/segments.st: -------------------------------------------------------------------------------- 1 | accessing 2 | segments 3 | ^ segments -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTPolyLineSegment.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "PeterUhnak 10/12/2015 12:48", 3 | "super" : "RTObject", 4 | "category" : "LiveInstanceVisualization-Roassal", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ 9 | "segments" 10 | ], 11 | "name" : "LIVRTPolyLineSegment", 12 | "type" : "normal" 13 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTSelectableElementsContextInteraction.class/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/repository/LiveInstanceVisualization.package/LIVRTSelectableElementsContextInteraction.class/README.md -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTSelectableElementsContextInteraction.class/instance/initializeElement..st: -------------------------------------------------------------------------------- 1 | initialization 2 | initializeElement: aView 3 | self 4 | assert: [ self presentation notNil ] 5 | description: 'The presentation has to be set'. 6 | self initializeSetOfElements: aView elements -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTSelectableElementsContextInteraction.class/instance/initializeSetOfElements..st: -------------------------------------------------------------------------------- 1 | initialization 2 | initializeSetOfElements: elements 3 | elements do: 4 | [ :each | self initializeSingleElement: each ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTSelectableElementsContextInteraction.class/instance/initializeSingleElement..st: -------------------------------------------------------------------------------- 1 | initialization 2 | initializeSingleElement: each 3 | ^ each 4 | when: TRMouseLeftClick 5 | do: [ :event | 6 | each model 7 | ifNotNil: [ :m | 8 | | selection | 9 | selection := (m respondsTo: #modelElement) 10 | ifTrue: [ m modelElement ] 11 | ifFalse: [ m model modelElement ]. 12 | selection isSymbol ifTrue: [ 13 | selection := each model owningElement owningElement modelElement slots at: selection 14 | ]. 15 | self presentation selection: selection ] ] -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVRTSelectableElementsContextInteraction.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "", 3 | "super" : "RTAbstractContextInteraction", 4 | "category" : "LiveInstanceVisualization-Roassal", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ ], 9 | "name" : "LIVRTSelectableElementsContextInteraction", 10 | "type" : "normal" 11 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVSlot.class/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/repository/LiveInstanceVisualization.package/LIVSlot.class/README.md -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVSlot.class/instance/definingFeature..st: -------------------------------------------------------------------------------- 1 | accessing 2 | definingFeature: anObject 3 | definingFeature := anObject -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVSlot.class/instance/definingFeature.st: -------------------------------------------------------------------------------- 1 | accessing 2 | definingFeature 3 | ^ definingFeature -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVSlot.class/instance/owningInstance..st: -------------------------------------------------------------------------------- 1 | accessing 2 | owningInstance: anObject 3 | owningInstance := anObject -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVSlot.class/instance/owningInstance.st: -------------------------------------------------------------------------------- 1 | accessing 2 | owningInstance 3 | ^ owningInstance -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVSlot.class/instance/value..st: -------------------------------------------------------------------------------- 1 | accessing 2 | value: anObject 3 | value := anObject -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVSlot.class/instance/value.st: -------------------------------------------------------------------------------- 1 | accessing 2 | value 3 | ^ value -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVSlot.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "", 3 | "super" : "Object", 4 | "category" : "LiveInstanceVisualization-Models", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ 9 | "owningInstance", 10 | "value", 11 | "definingFeature" 12 | ], 13 | "name" : "LIVSlot", 14 | "type" : "normal" 15 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVTestContainer.class/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/repository/LiveInstanceVisualization.package/LIVTestContainer.class/README.md -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVTestContainer.class/instance/addItem..st: -------------------------------------------------------------------------------- 1 | adding 2 | addItem: anItem 3 | items add: anItem -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVTestContainer.class/instance/capacity..st: -------------------------------------------------------------------------------- 1 | accessing 2 | capacity: anObject 3 | capacity := anObject -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVTestContainer.class/instance/capacity.st: -------------------------------------------------------------------------------- 1 | accessing 2 | capacity 3 | ^ items size -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVTestContainer.class/instance/initialize.st: -------------------------------------------------------------------------------- 1 | initialization 2 | initialize 3 | super initialize. 4 | items := OrderedCollection new -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVTestContainer.class/instance/removeItem..st: -------------------------------------------------------------------------------- 1 | removing 2 | removeItem: anItem 3 | items remove: anItem -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVTestContainer.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "", 3 | "super" : "Object", 4 | "category" : "LiveInstanceVisualization-Tests", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ 9 | "items", 10 | "capacity" 11 | ], 12 | "name" : "LIVTestContainer", 13 | "type" : "normal" 14 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVTestItem.class/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/repository/LiveInstanceVisualization.package/LIVTestItem.class/README.md -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVTestItem.class/instance/container..st: -------------------------------------------------------------------------------- 1 | accessing 2 | container: aContainer 3 | container := aContainer -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVTestItem.class/instance/container.st: -------------------------------------------------------------------------------- 1 | accessing 2 | container 3 | ^ container -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVTestItem.class/instance/containerDirect..st: -------------------------------------------------------------------------------- 1 | accessing 2 | containerDirect: aContainer 3 | container := aContainer -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVTestItem.class/instance/initialize.st: -------------------------------------------------------------------------------- 1 | accessing 2 | initialize 3 | super initialize -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVTestItem.class/instance/name..st: -------------------------------------------------------------------------------- 1 | accessing 2 | name: aString 3 | name := aString -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVTestItem.class/instance/name.st: -------------------------------------------------------------------------------- 1 | accessing 2 | name 3 | ^ name -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/LIVTestItem.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "", 3 | "super" : "Object", 4 | "category" : "LiveInstanceVisualization-Tests", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ 9 | "name", 10 | "container" 11 | ], 12 | "name" : "LIVTestItem", 13 | "type" : "normal" 14 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/OPUmlAssociationEdge.extension/instance/constraintLabel.at.side..st: -------------------------------------------------------------------------------- 1 | *LiveInstanceVisualization 2 | constraintLabel: aLabel at: aPosition side: aSide 3 | | config anchor | 4 | config := Dictionary 5 | with: #source -> (Array with: 10 with: aSide * 10) 6 | with: #target -> (Array with: -10 with: aSide * 10) 7 | with: #middle -> (Array with: 0.5 with: 10). 8 | anchor := LIVRTAnchorConstraint new. 9 | anchor 10 | element: aLabel rtElement; 11 | edge: self rtEdge; 12 | balance: (config at: aPosition) first; 13 | minDistance: (config at: aPosition) second; 14 | build -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/OPUmlAssociationEdge.extension/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "OPUmlAssociationEdge" 3 | } -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/monticello.meta/categories.st: -------------------------------------------------------------------------------- 1 | SystemOrganization addCategory: #LiveInstanceVisualization! 2 | SystemOrganization addCategory: 'LiveInstanceVisualization-Debugger'! 3 | SystemOrganization addCategory: 'LiveInstanceVisualization-Diff'! 4 | SystemOrganization addCategory: 'LiveInstanceVisualization-Examples'! 5 | SystemOrganization addCategory: 'LiveInstanceVisualization-Inspector-Extensions'! 6 | SystemOrganization addCategory: 'LiveInstanceVisualization-Models'! 7 | SystemOrganization addCategory: 'LiveInstanceVisualization-Roassal'! 8 | SystemOrganization addCategory: 'LiveInstanceVisualization-Tests'! 9 | SystemOrganization addCategory: 'LiveInstanceVisualization-UI'! 10 | -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/monticello.meta/initializers.st: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peteruhnak/live-instance-viewer/1233c885f36a7e9cbe94a2817f384a83261059c7/repository/LiveInstanceVisualization.package/monticello.meta/initializers.st -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/monticello.meta/package: -------------------------------------------------------------------------------- 1 | (name 'LiveInstanceVisualization') -------------------------------------------------------------------------------- /repository/LiveInstanceVisualization.package/properties.json: -------------------------------------------------------------------------------- 1 | { } --------------------------------------------------------------------------------