├── .github └── workflows │ ├── runOnPharo8.yml │ ├── runTestPharo10.yml │ └── runTestPharo9.yml ├── .project ├── .smalltalk.ston ├── .smalltalk_stable.ston ├── .travis.yml ├── LICENSE ├── README.md ├── info.txt ├── scripts ├── runTests.st ├── runTestsOnPharo10.sh ├── runTestsOnPharo8.sh └── runTestsOnPharo9.sh ├── src ├── .properties ├── BaselineOfRoassal2 │ ├── BaselineOfRoassal2.class.st │ └── package.st ├── DataStudio-CProjectVisualizer │ ├── CPPAbstractFile.class.st │ ├── CPPFile.class.st │ ├── CPPFileTest.class.st │ ├── CPPFolder.class.st │ ├── CPPFolderTest.class.st │ ├── CPPHeader.class.st │ ├── CPPModule.class.st │ ├── CPPProcessor.class.st │ ├── CPPProcessor2Test.class.st │ ├── CPPProcessor3Test.class.st │ ├── CPPProcessor4Test.class.st │ ├── CPPProcessorTest.class.st │ ├── RTVisualizeCPPApplicationHeaderScript.class.st │ ├── RTVisualizeCPPApplicationModuleAndHeaderScript.class.st │ ├── RTVisualizeCPPApplicationScript.class.st │ └── package.st ├── GT-Spotter-EventRecorder-Analysis │ ├── GTAAbstractIconBuilderTest.class.st │ ├── GTAActivityBuilder.class.st │ ├── GTAActivityBuilderTest.class.st │ ├── GTAActivityBuilders.class.st │ ├── GTAActivityMenuBuilder.class.st │ ├── GTAActivitySymbolBuilder.class.st │ ├── GTAAnnouncements.class.st │ ├── GTABookmark.class.st │ ├── GTABookmarks.class.st │ ├── GTACategoryBuilder.class.st │ ├── GTACollection.class.st │ ├── GTACollectionAnnouncement.class.st │ ├── GTACommand.class.st │ ├── GTAComputer.class.st │ ├── GTAComputerBookmark.class.st │ ├── GTAComputers.class.st │ ├── GTAConfiguration.class.st │ ├── GTADateAndTimeStringBuilder.class.st │ ├── GTADefaultTimelineConfiguration.class.st │ ├── GTADelayedExitCommand.class.st │ ├── GTADetachedBookmark.class.st │ ├── GTADirectSessionCommand.class.st │ ├── GTADiveInLevelCommand.class.st │ ├── GTAElementWithCategoryCommand.class.st │ ├── GTAEmptyBookmark.class.st │ ├── GTAEmptySessionCommand.class.st │ ├── GTAEventCollection.class.st │ ├── GTAEventIcons.class.st │ ├── GTAFirstLevelDiveInSessionCommand.class.st │ ├── GTAFlexibleResultIconBuilderTest.class.st │ ├── GTAFlexibleResultSymbolBuilder.class.st │ ├── GTAGroup.class.st │ ├── GTAGroups.class.st │ ├── GTAHighlightable.class.st │ ├── GTAHorizontalDivingLineLayout.class.st │ ├── GTAHorizontalRealTimelineLayout.class.st │ ├── GTAIconBuilderTest.class.st │ ├── GTAItemAdded.class.st │ ├── GTAItemRemoved.class.st │ ├── GTALinkCloseWithSelectionCommand.class.st │ ├── GTALinkDiveInWithSelectionCommand.class.st │ ├── GTALinkSearchFinishedWithQueryCommand.class.st │ ├── GTALinkToSessionCommand.class.st │ ├── GTAMenuCategoryBuilder.class.st │ ├── GTAMenuTimelineBuilder.class.st │ ├── GTAMissStepsCommand.class.st │ ├── GTAMultipleSelectionSendCommand.class.st │ ├── GTAObsoleteActivityBuilder.class.st │ ├── GTAOrthogonalIconBuilderTest.class.st │ ├── GTAOrthogonalSymbolBuilder.class.st │ ├── GTAPreviousEventCommand.class.st │ ├── GTAPreviousSelectionCommand.class.st │ ├── GTAPrintDateAndTime.class.st │ ├── GTARoughDataSetBuilder.class.st │ ├── GTARoughDataSetBuilderTest.class.st │ ├── GTASameTimestampCommand.class.st │ ├── GTASaved.class.st │ ├── GTASession.class.st │ ├── GTASessionAnalysis.class.st │ ├── GTASessionBookmark.class.st │ ├── GTASessionBuilder.class.st │ ├── GTASessionExamples.class.st │ ├── GTASessions.class.st │ ├── GTAShapeBuilders.class.st │ ├── GTASomeComputers.class.st │ ├── GTASomeSessions.class.st │ ├── GTASomeSessionsBookmark.class.st │ ├── GTATimelineBuilder.class.st │ ├── GTATool.class.st │ ├── GTSpotterPrintDateAndTimeTest.class.st │ ├── GTSpotterRecorderActOnEvent.extension.st │ ├── GTSpotterRecorderCategorySelectedEvent.extension.st │ ├── GTSpotterRecorderContextChangedEvent.extension.st │ ├── GTSpotterRecorderDiveInCategoryEvent.extension.st │ ├── GTSpotterRecorderDiveInElementEvent.extension.st │ ├── GTSpotterRecorderDiveOutEvent.extension.st │ ├── GTSpotterRecorderEvent.extension.st │ ├── GTSpotterRecorderExitAnnouncementEvent.extension.st │ ├── GTSpotterRecorderHidePreviewEvent.extension.st │ ├── GTSpotterRecorderOpenEvent.extension.st │ ├── GTSpotterRecorderSearchFinishedEvent.extension.st │ ├── GTSpotterRecorderSelectedCandidateChangedEvent.extension.st │ ├── GTSpotterRecorderShowPreviewEvent.extension.st │ ├── GTSpotterSessionAnalysisTest.class.st │ ├── Object.extension.st │ ├── RTGrapher.extension.st │ ├── RTShapeBuilder.extension.st │ ├── TGTABookmarkIt.trait.st │ ├── TGTSpotterCategoryView.trait.st │ ├── TGTSpotterDurationView.trait.st │ ├── TGTSpotterSessionsTable.trait.st │ ├── TGTSpotterUpdateEvents.trait.st │ ├── TRCompositeShape.extension.st │ ├── TRShape.extension.st │ └── package.st ├── Glamour-Roassal2-Presentations │ ├── GLMCompositePresentation.extension.st │ ├── GLMMorphicRenderer.extension.st │ ├── GLMMorphicRoassal2Renderer.class.st │ ├── GLMRoassal2Easel.class.st │ ├── GLMRoassal2Examples.class.st │ ├── GLMRoassal2MorphicTest.class.st │ ├── GLMRoassal2Presentation.class.st │ ├── RTBuilder.extension.st │ ├── RTView.extension.st │ └── package.st ├── IntelPowerGadget │ ├── Benchmark.class.st │ ├── EnergyProfiler.class.st │ ├── FileReference.extension.st │ ├── ForceBasedLayout.class.st │ ├── GarbageCollector1.class.st │ ├── GarbageCollector2.class.st │ ├── GarbageCollector3.class.st │ ├── GarbageCollector4.class.st │ ├── GraphConstruction.class.st │ ├── Integer.extension.st │ ├── IntelPowerGadgetTest.class.st │ ├── LogEntry.class.st │ ├── MacroBenchmark.class.st │ ├── MicroBenchmark.class.st │ ├── Plot.class.st │ ├── Recompilation.class.st │ ├── RecursiveFactorial.class.st │ ├── RecursiveFibonacci.class.st │ └── package.st ├── ProfilerCPP │ ├── MooseModel.extension.st │ ├── PCPPAccess.class.st │ ├── PCPPCall.class.st │ ├── PCPPCallGroup.class.st │ ├── PCPPFunction.class.st │ ├── PCPPFunctionGroup.class.st │ ├── PCPPImportCommand.class.st │ ├── PCPPImporter.class.st │ ├── PCPPInstruction.class.st │ ├── PCPPObject.class.st │ ├── PCPPReference.class.st │ ├── PCPPSegment.class.st │ └── package.st ├── Roassal2-AnimatedScatterPlot │ ├── RTAnimatedScatterPlot.class.st │ ├── RTAnimatedScatterPlotExample.class.st │ └── package.st ├── Roassal2-AxisAdapted │ ├── RTAxisAdaptedBuilder.class.st │ ├── RTAxisAdaptedBuilderExample.class.st │ └── package.st ├── Roassal2-Benchmarks │ ├── RTBenchmarks.class.st │ └── package.st ├── Roassal2-BoxPlot │ ├── RTBoxPlotDataSet.class.st │ ├── RTBoxPlotExample.class.st │ ├── RTBoxPlotItem.class.st │ └── package.st ├── Roassal2-Builder-MondrianOLD │ ├── RTMondrianShapeBuilder.class.st │ ├── RTMondrianViewBuilderTest.class.st │ └── package.st ├── Roassal2-Calendar │ ├── RTCalendarBuilder.class.st │ ├── RTCalendarExample.class.st │ ├── RTDateLayout.class.st │ ├── RTLayoutBuilder.extension.st │ ├── RTMonthLayout.class.st │ └── package.st ├── Roassal2-Core │ ├── Behavior.extension.st │ ├── BlockClosure.extension.st │ ├── ClassDescription.extension.st │ ├── Magnitude.extension.st │ ├── RTAbstractArrow.class.st │ ├── RTAbstractArrowedLine.class.st │ ├── RTAbstractCircle.class.st │ ├── RTAbstractCircleLayout.class.st │ ├── RTAbstractCompactTree.class.st │ ├── RTAbstractDiamond.class.st │ ├── RTAbstractElementHandling.class.st │ ├── RTAbstractElementShape.class.st │ ├── RTAbstractFlowLayout.class.st │ ├── RTAbstractGraphLayout.class.st │ ├── RTAbstractGridLayout.class.st │ ├── RTAbstractHorizontalTreeLayout.class.st │ ├── RTAbstractLine.class.st │ ├── RTAbstractLineLayout.class.st │ ├── RTAbstractMultiElement.class.st │ ├── RTAbstractNarrowArrow.class.st │ ├── RTAbstractRegularTreeLayout.class.st │ ├── RTAbstractShorterDistanceAttachPoint.class.st │ ├── RTAbstractVerticalTreeLayout.class.st │ ├── RTAbstractWeightedCircleLayout.class.st │ ├── RTAlignment.class.st │ ├── RTAnchorConstraint.class.st │ ├── RTAnnounceableObject.class.st │ ├── RTArc.class.st │ ├── RTArcLine.class.st │ ├── RTArrowedLine.class.st │ ├── RTAttachPoint.class.st │ ├── RTBezier3Line.class.st │ ├── RTBezier4Line.class.st │ ├── RTBezierLine.class.st │ ├── RTBitmap.class.st │ ├── RTBorderAttachPoint.class.st │ ├── RTBorderStyle.class.st │ ├── RTBox.class.st │ ├── RTCell.class.st │ ├── RTCellLayout.class.st │ ├── RTCellMatrix.class.st │ ├── RTCenteredAttachPoint.class.st │ ├── RTCircleAttachPoint.class.st │ ├── RTCircleGeometry.class.st │ ├── RTCircleLayout.class.st │ ├── RTClusterLayout.class.st │ ├── RTCompositeElementAttachPoint.class.st │ ├── RTCompositeShape.class.st │ ├── RTCompoundElement.class.st │ ├── RTConditionalLayout.class.st │ ├── RTConditionalShape.class.st │ ├── RTConstraint.class.st │ ├── RTContinuousAttachPoint.class.st │ ├── RTDecoratedLine.class.st │ ├── RTDecorationItem.class.st │ ├── RTDiamond.class.st │ ├── RTDirectLayoutTranslator.class.st │ ├── RTDirectedLine.class.st │ ├── RTDominanceTreeLayout.class.st │ ├── RTDoubleArrowedLine.class.st │ ├── RTDualAttachPoint.class.st │ ├── RTDummyNode.class.st │ ├── RTEdge.class.st │ ├── RTEdgeDrivenLayout.class.st │ ├── RTElement.class.st │ ├── RTEllipse.class.st │ ├── RTEmptyArrow.class.st │ ├── RTEmptyArrowHead.class.st │ ├── RTEmptyCircle.class.st │ ├── RTEmptyDiamond.class.st │ ├── RTEmptyNarrowArrow.class.st │ ├── RTEquidistantCircleLayout.class.st │ ├── RTExtensibleLabel.class.st │ ├── RTExtremityLineDecoration.class.st │ ├── RTFilledArrow.class.st │ ├── RTFilledCircle.class.st │ ├── RTFilledDiamond.class.st │ ├── RTFilledNarrowArrow.class.st │ ├── RTFlowLayout.class.st │ ├── RTForceBasedLayout.class.st │ ├── RTGradientColoredLine.class.st │ ├── RTGridLayout.class.st │ ├── RTGroup.class.st │ ├── RTGroupLayout.class.st │ ├── RTHorizontalAttachPoint.class.st │ ├── RTHorizontalDominanceTreeLayout.class.st │ ├── RTHorizontalFlowLayout.class.st │ ├── RTHorizontalLineLayout.class.st │ ├── RTHorizontalTreeLayout.class.st │ ├── RTIdentityGroup.class.st │ ├── RTIdentityMatrix.class.st │ ├── RTLabel.class.st │ ├── RTLayout.class.st │ ├── RTLayoutBuilder.class.st │ ├── RTLayoutTranslator.class.st │ ├── RTLine.class.st │ ├── RTLineDecoration.class.st │ ├── RTLineDecorationShape.class.st │ ├── RTLineHead.class.st │ ├── RTLineSegment.class.st │ ├── RTLineTail.class.st │ ├── RTMockEdge.class.st │ ├── RTMockElement.class.st │ ├── RTMultiColoredLine.class.st │ ├── RTMultiLine.class.st │ ├── RTNest.class.st │ ├── RTNestingBehavior.class.st │ ├── RTNoBehavior.class.st │ ├── RTNoDecorationShape.class.st │ ├── RTNoLayout.class.st │ ├── RTNoShape.class.st │ ├── RTNullLayout.class.st │ ├── RTObject.class.st │ ├── RTOptimizedForceBasedLayout.class.st │ ├── RTPolyLineSegment.class.st │ ├── RTPolygon.class.st │ ├── RTQuadTree.class.st │ ├── RTRadialTreeLayout.class.st │ ├── RTRectangleAttachPoint.class.st │ ├── RTRectanglePackLayout.class.st │ ├── RTResize.class.st │ ├── RTRotatedLabel.class.st │ ├── RTRoundedBox.class.st │ ├── RTSVGPath.class.st │ ├── RTSVGPathBezierLine.class.st │ ├── RTSVGPathLine.class.st │ ├── RTShape.class.st │ ├── RTShapedObject.class.st │ ├── RTShorterDistanceAttachPoint.class.st │ ├── RTShorterDistanceAttachPointAndCompositeShape.class.st │ ├── RTShorterDistanceWithOffsetAttachPoint.class.st │ ├── RTShorterHorizontalDistanceAttachPoint.class.st │ ├── RTShorterVerticalDistanceAttachPoint.class.st │ ├── RTSimpleArrow.class.st │ ├── RTSimpleArrowHead.class.st │ ├── RTSortBlock.class.st │ ├── RTStretchBehavior.class.st │ ├── RTStyledLabel.class.st │ ├── RTStyledMultiLine.class.st │ ├── RTSugiyamaLayout.class.st │ ├── RTTheme.class.st │ ├── RTTopLeftBehavior.class.st │ ├── RTTreeLayout.class.st │ ├── RTVerticalAttachPoint.class.st │ ├── RTVerticalLineLayout.class.st │ ├── RTView.class.st │ ├── RTVisitor.class.st │ ├── RTWeightedCircleLayout.class.st │ ├── SequenceableCollection.extension.st │ ├── Symbol.extension.st │ └── package.st ├── Roassal2-DependencyStructuralMatrices │ ├── RTAbstractDSM.class.st │ ├── RTDSM.class.st │ ├── RTDSMExample.class.st │ ├── RTEvolutionDSM.class.st │ ├── RTEvolutionLine.class.st │ ├── RTGradualDSM.class.st │ ├── RTSmallMultipleManyScript.class.st │ ├── RTSmallMultipleSingleScript.class.st │ ├── RTSmallMultipleStatisticScript.class.st │ └── package.st ├── Roassal2-Exporter-Tests │ ├── RTHTML5ExporterTest.class.st │ ├── RTHTMLStringConverterTest.class.st │ ├── RTIntrospectionTest.class.st │ ├── RTPNGExporterTest.class.st │ ├── RTSVGExporterTest.class.st │ ├── RTSVGStringConverterTest.class.st │ └── package.st ├── Roassal2-Exporter │ ├── RTCanvasExporter.class.st │ ├── RTHTML5Exporter.class.st │ ├── RTHTML5ExporterExample.class.st │ ├── RTHTMLStringConverter.class.st │ ├── RTInteractiveSVGExporter.class.st │ ├── RTJavascriptVisitor.class.st │ ├── RTLineDecorationInfo.class.st │ ├── RTLinkView.class.st │ ├── RTPNGExporter.class.st │ ├── RTSVGAbstractLine.class.st │ ├── RTSVGAbstractMarker.class.st │ ├── RTSVGArc.class.st │ ├── RTSVGArrowHeadMarker.class.st │ ├── RTSVGArrowMarker.class.st │ ├── RTSVGBezierLine.class.st │ ├── RTSVGBitmap.class.st │ ├── RTSVGBoxedTextPopup.class.st │ ├── RTSVGButton.class.st │ ├── RTSVGCircleMarker.class.st │ ├── RTSVGDiamondMarker.class.st │ ├── RTSVGDragAndDrop.class.st │ ├── RTSVGElementPopup.class.st │ ├── RTSVGEntity.class.st │ ├── RTSVGExporter.class.st │ ├── RTSVGExporterExample.class.st │ ├── RTSVGGroupPopup.class.st │ ├── RTSVGHightlight.class.st │ ├── RTSVGInteraction.class.st │ ├── RTSVGLine.class.st │ ├── RTSVGLink.class.st │ ├── RTSVGOval.class.st │ ├── RTSVGPathEntity.class.st │ ├── RTSVGPolygon.class.st │ ├── RTSVGPopup.class.st │ ├── RTSVGRectangle.class.st │ ├── RTSVGStringConverter.class.st │ ├── RTSVGText.class.st │ ├── RTSVGTextPopup.class.st │ ├── RTSVGViewPopup.class.st │ ├── RTSVGVisitor.class.st │ └── package.st ├── Roassal2-ExporterVW │ ├── Roassal2VW.class.st │ ├── Roassal2VWTest.class.st │ └── package.st ├── Roassal2-Heatmap │ ├── RTHeatmap.class.st │ └── package.st ├── Roassal2-Kiviat │ ├── RTKiviatBuilder.class.st │ ├── RTKiviatBuilderExample.class.st │ ├── RTKiviatElement.class.st │ ├── RTKiviatFruitExample.class.st │ ├── RTKiviatMetric.class.st │ ├── RTKiviatNode.class.st │ └── package.st ├── Roassal2-OpenStreetMap │ ├── RTOSM.class.st │ ├── RTOSMTest.class.st │ ├── RTOpenStreetMapExample.class.st │ ├── TROSMShape.class.st │ └── package.st ├── Roassal2-Plugins-CProjectVisualizer │ ├── CPPAbstractFile.class.st │ ├── CPPFile.class.st │ ├── CPPFileTest.class.st │ ├── CPPFolder.class.st │ ├── CPPFolderTest.class.st │ ├── CPPHeader.class.st │ ├── CPPModule.class.st │ ├── CPPProcessor.class.st │ ├── CPPProcessor2Test.class.st │ ├── CPPProcessor3Test.class.st │ ├── CPPProcessorTest.class.st │ ├── RTVisualizeCPPApplicationHeaderScript.class.st │ ├── RTVisualizeCPPApplicationModuleAndHeaderScript.class.st │ ├── RTVisualizeCPPApplicationScript.class.st │ └── package.st ├── Roassal2-Plugins-ExamplesVisualizer │ ├── RTExamplesEventVizualizer.class.st │ ├── RTVisualizeExamplesFolderScript.class.st │ └── package.st ├── Roassal2-Plugins-JavaVisualizer │ ├── JVAbstractFile.class.st │ ├── JVClass.class.st │ ├── JVFile.class.st │ ├── JVFileTest.class.st │ ├── JVObject.class.st │ ├── JVPackage.class.st │ ├── JVProcessor.class.st │ ├── JVProcessorTest.class.st │ └── package.st ├── Roassal2-Plugins-PythonAnalyzer │ ├── PyAbstractBehavior.class.st │ ├── PyAbstractFile.class.st │ ├── PyClass.class.st │ ├── PyFile.class.st │ ├── PyFileTest.class.st │ ├── PyFolder.class.st │ ├── PyFolderTest.class.st │ ├── PyFunction.class.st │ ├── PyMethod.class.st │ ├── PyObject.class.st │ ├── PyProcessor.class.st │ ├── PyProcessorTest.class.st │ ├── PyStructuralElement.class.st │ ├── RTVisualizePyApplicationDependenciesScript.class.st │ ├── RTVisualizePyApplicationFolderScript.class.st │ ├── RTVisualizePyApplicationScript.class.st │ ├── RTVisualizePyScriptingUseScript.class.st │ ├── RTVisualizePySystemComplexityScript.class.st │ └── package.st ├── Roassal2-Rules │ ├── RTInvocationSequenceRule.class.st │ └── package.st ├── Roassal2-Tests │ ├── RTAMItemTest.class.st │ ├── RTAbstractElasticBoxInteractionTest.class.st │ ├── RTAbstractGrapherDecoratorTest.class.st │ ├── RTAbstractLineDecorationTest.class.st │ ├── RTAbstractPluginTest.class.st │ ├── RTAlignmentTest.class.st │ ├── RTAnimatedScatterPlotTest.class.st │ ├── RTAnimationTest.class.st │ ├── RTApplicationMatrixTest.class.st │ ├── RTArrowedLineTest.class.st │ ├── RTAttachPointTest.class.st │ ├── RTAxisConfigurationTest.class.st │ ├── RTBezier3LineTest.class.st │ ├── RTBezierLineTest.class.st │ ├── RTBlinkTest.class.st │ ├── RTBorderAttachPointTest.class.st │ ├── RTBucketColorTest.class.st │ ├── RTCacheTest.class.st │ ├── RTCellLayoutTest.class.st │ ├── RTCircleGeometryTest.class.st │ ├── RTCircleLayoutTest.class.st │ ├── RTCircularTreeMapTest.class.st │ ├── RTCollectionExtensionTest.class.st │ ├── RTColorPaletteTest.class.st │ ├── RTComposerTest.class.st │ ├── RTCompositeShapeTest.class.st │ ├── RTCompoundElementTest.class.st │ ├── RTConditionalLayoutTest.class.st │ ├── RTConstrainedDraggableTest.class.st │ ├── RTConstraintTest.class.st │ ├── RTContinuousDecoratorTest.class.st │ ├── RTCubeHelixTest.class.st │ ├── RTCursorFollowerTest.class.st │ ├── RTDSMTest.class.st │ ├── RTDataTest.class.st │ ├── RTDecoratedTest.class.st │ ├── RTDistributionTest.class.st │ ├── RTDominanceTreeLayoutTest.class.st │ ├── RTDoubleGrapherBuilderTest.class.st │ ├── RTDoubleScrollBarTest.class.st │ ├── RTDoubleSliderTest.class.st │ ├── RTDragAndDroppableTest.class.st │ ├── RTDraggableTest.class.st │ ├── RTDraggableViewTest.class.st │ ├── RTDynamicEqualizerGrapherTest.class.st │ ├── RTDynamicGrapherTest.class.st │ ├── RTDynamicStackedGrapherTest.class.st │ ├── RTEdgeBuilderTest.class.st │ ├── RTEdgeTest.class.st │ ├── RTEditableLabelTest.class.st │ ├── RTElementTest.class.st │ ├── RTEllipseTest.class.st │ ├── RTEventForwarderTest.class.st │ ├── RTExpandableTest.class.st │ ├── RTExperimentalExampleTest.class.st │ ├── RTExploraBuilderTest.class.st │ ├── RTExtensibleLabelTest.class.st │ ├── RTExtensionTest.class.st │ ├── RTFilterInViewTest.class.st │ ├── RTFocusElementTest.class.st │ ├── RTForceBasedLayoutTest.class.st │ ├── RTGradientColoredLineTest.class.st │ ├── RTGrapherBuilderTest.class.st │ ├── RTGrapherTest.class.st │ ├── RTGridLayoutTest.class.st │ ├── RTGridViewTest.class.st │ ├── RTGroupTest.class.st │ ├── RTHighlightElementsInViewTest.class.st │ ├── RTHighlightableTest.class.st │ ├── RTHighlighterBuilderTest.class.st │ ├── RTHorizontalTickLinePluginTest.class.st │ ├── RTHorizontalTimelineDecoratorTest.class.st │ ├── RTHorizontalTreeLayoutTest.class.st │ ├── RTInteractionBuilderTest.class.st │ ├── RTInteractionTest.class.st │ ├── RTInteractiveTreeBuilderTest.class.st │ ├── RTJavascriptVisitorTest.class.st │ ├── RTKiviatBuilderTest.class.st │ ├── RTLabelGeneratorTest.class.st │ ├── RTLabelTest.class.st │ ├── RTLabeledTest.class.st │ ├── RTLayoutBuilderTest.class.st │ ├── RTLayoutTest.class.st │ ├── RTLayoutTranslatorTest.class.st │ ├── RTLazyMetricNormalizerTest.class.st │ ├── RTLegendBuilderTest.class.st │ ├── RTLineDualWidthTest.class.st │ ├── RTLineSegmentTest.class.st │ ├── RTLineTest.class.st │ ├── RTMapBuilderTest.class.st │ ├── RTMenuActivableTest.class.st │ ├── RTMethodAgeTest.class.st │ ├── RTMetricMapTest.class.st │ ├── RTMetricNormalizerTest.class.st │ ├── RTMondrianExample.extension.st │ ├── RTMondrianFrameTest.class.st │ ├── RTMondrianTest.class.st │ ├── RTMultiColoredLineTest.class.st │ ├── RTMultiCompositeShapeTest.class.st │ ├── RTMultiLineTest.class.st │ ├── RTMultiLinearColorForIdentityTest.class.st │ ├── RTMultiLinearColorTest.class.st │ ├── RTMultipleDataTest.class.st │ ├── RTNNormalizerTest.class.st │ ├── RTNameCloudTest.class.st │ ├── RTNestTest.class.st │ ├── RTNormalizerTest.class.st │ ├── RTOptimizedForceBasedLayoutTest.class.st │ ├── RTOrderedCollectionTest.class.st │ ├── RTPieBuilderTest.class.st │ ├── RTPolyLineSegmentsTest.class.st │ ├── RTPolygonTest.class.st │ ├── RTPopupTest.class.st │ ├── RTQuadTreeTest.class.st │ ├── RTRTShorterDistanceAttachPointTest.class.st │ ├── RTRadialTreeLayoutTest.class.st │ ├── RTRangeBelowXAxisTest.class.st │ ├── RTRectangleAttachPointTest.class.st │ ├── RTRectanglePackaLayouTest.class.st │ ├── RTResizableTest.class.st │ ├── RTResizeTest.class.st │ ├── RTRoassal2ArchitectureTest.class.st │ ├── RTRotableViewTest.class.st │ ├── RTRotatedLabelTest.class.st │ ├── RTSVGPathTest.class.st │ ├── RTSankeyBuilderTest.class.st │ ├── RTScaleTest.class.st │ ├── RTSelectableTest.class.st │ ├── RTShapeBuilderTest.class.st │ ├── RTShapeTest.class.st │ ├── RTShapedObjectTest.class.st │ ├── RTShorterDistanceAttachPointAndCompositeShapeTest.class.st │ ├── RTShorterDistanceWithOffsetAttachPointTest.class.st │ ├── RTShowEdgeTest.class.st │ ├── RTShowLabelTest.class.st │ ├── RTShowLabelWhenZoomingTest.class.st │ ├── RTSimonTest.class.st │ ├── RTSimpleArrowHeadTest.class.st │ ├── RTSliderTest.class.st │ ├── RTSparklineTest.class.st │ ├── RTSpectrographTest.class.st │ ├── RTSpringLayoutSteppingTest.class.st │ ├── RTStackBarPlotTest.class.st │ ├── RTStyledMultiLineTest.class.st │ ├── RTSugiyamaLayoutTest.class.st │ ├── RTSunburstBuilderTest.class.st │ ├── RTTabTableTest.class.st │ ├── RTTest.class.st │ ├── RTTextBuilderTest.class.st │ ├── RTTextTest.class.st │ ├── RTTimelineSetTest.class.st │ ├── RTTimelineTest.class.st │ ├── RTTransitivelyTHighlightableTest.class.st │ ├── RTTreeLayoutTest.class.st │ ├── RTTreeMapTest.class.st │ ├── RTUMLClassBuilderTest.class.st │ ├── RTUnoptimizedComposerTest.class.st │ ├── RTVerticalMultipleDataTest.class.st │ ├── RTVerticalTickLineDecoratorTest.class.st │ ├── RTVerticalValuesDecoratorTest.class.st │ ├── RTViewTest.class.st │ ├── RTVisibleTest.class.st │ └── package.st ├── Roassal2-UML │ ├── RTExperimentalExample.extension.st │ ├── RTUMLClassBuilder.class.st │ ├── RTUMLExample.class.st │ └── package.st ├── Roassal2 │ ├── AthensCairoCanvas.extension.st │ ├── Behavior.extension.st │ ├── BlockClosure.extension.st │ ├── Collection.extension.st │ ├── Color.extension.st │ ├── CompiledMethod.extension.st │ ├── FileReference.extension.st │ ├── Object.extension.st │ ├── Point.extension.st │ ├── RPackage.extension.st │ ├── RTAIPackageslugin.class.st │ ├── RTAMItem.class.st │ ├── RTAbout.class.st │ ├── RTAbstractAverageDecorator.class.st │ ├── RTAbstractBuilder.class.st │ ├── RTAbstractData.class.st │ ├── RTAbstractDataSet.class.st │ ├── RTAbstractDraggable.class.st │ ├── RTAbstractDraggableView.class.st │ ├── RTAbstractElasticBoxInteraction.class.st │ ├── RTAbstractExample.class.st │ ├── RTAbstractGrapher.class.st │ ├── RTAbstractGrapherDecorator.class.st │ ├── RTAbstractHighlightElementsInView.class.st │ ├── RTAbstractHighlightable.class.st │ ├── RTAbstractHorizontalValuesDecorator.class.st │ ├── RTAbstractInteractionView.class.st │ ├── RTAbstractLabeled.class.st │ ├── RTAbstractLineDecorator.class.st │ ├── RTAbstractMenuEntry.class.st │ ├── RTAbstractMorphingView.class.st │ ├── RTAbstractMultipleData.class.st │ ├── RTAbstractNormalizer.class.st │ ├── RTAbstractPlugin.class.st │ ├── RTAbstractPopup.class.st │ ├── RTAbstractScrollBuilder.class.st │ ├── RTAbstractStackedDataSet.class.st │ ├── RTAbstractSunburstLayout.class.st │ ├── RTAbstractTickLineDecorator.class.st │ ├── RTAbstractTreeBuilder.class.st │ ├── RTAbstractValuesDecorator.class.st │ ├── RTAbstractVerticalValuesDecorator.class.st │ ├── RTAbstractWorldMenu.class.st │ ├── RTAbstractZoomMove.class.st │ ├── RTAccelerationMove.class.st │ ├── RTActiveAnimation.class.st │ ├── RTAddElementAnimation.class.st │ ├── RTAnimation.class.st │ ├── RTAnimationExample.class.st │ ├── RTApplicationMatrix.class.st │ ├── RTAreaBuilder.class.st │ ├── RTAreaDecorator.class.st │ ├── RTAutomaticFlowLayout.class.st │ ├── RTAverageDecorator.class.st │ ├── RTAvispaPlugin.class.st │ ├── RTAxisConfiguration.class.st │ ├── RTAxisRenderer.class.st │ ├── RTBarLabelFactory.class.st │ ├── RTBitmapExamples.class.st │ ├── RTBlink.class.st │ ├── RTBoundedShapeBuilder.class.st │ ├── RTBounds.class.st │ ├── RTBrushInteraction.class.st │ ├── RTBucketColor.class.st │ ├── RTBuilder.class.st │ ├── RTBundleBuilder.class.st │ ├── RTBundleExample.class.st │ ├── RTCPDiverging.class.st │ ├── RTCPPAnalysisPlugin.class.st │ ├── RTCPQualitative.class.st │ ├── RTCPSequential.class.st │ ├── RTCache.class.st │ ├── RTChatWithUs.class.st │ ├── RTCircleTree.class.st │ ├── RTCircularTreeMapBuilder.class.st │ ├── RTCircularTreeMapExample.class.st │ ├── RTCityBuilder.class.st │ ├── RTClickStateInteraction.class.st │ ├── RTClipBox.class.st │ ├── RTCollision.class.st │ ├── RTColorFadingLegendItem.class.st │ ├── RTColorInterpolator.class.st │ ├── RTColorLegendItem.class.st │ ├── RTColorPalette.class.st │ ├── RTColorPaletteExample.class.st │ ├── RTColorTransitionAnimation.class.st │ ├── RTColoredTextLegendItem.class.st │ ├── RTComparison.class.st │ ├── RTComposedShapeExample.class.st │ ├── RTComposer.class.st │ ├── RTComposerExample.class.st │ ├── RTConstrainedDraggable.class.st │ ├── RTConstrainedDraggableView.class.st │ ├── RTConstraintExample.class.st │ ├── RTContinuousDecorator.class.st │ ├── RTContinuousPopup.class.st │ ├── RTCubeHelix.class.st │ ├── RTCursorFollower.class.st │ ├── RTData.class.st │ ├── RTDataEvolver.class.st │ ├── RTDataFramePlugin.class.st │ ├── RTDataHighlightInteraction.class.st │ ├── RTDataInteractionBuilder.class.st │ ├── RTDataStudioPlugin.class.st │ ├── RTDataToggleInteraction.class.st │ ├── RTDatasets.class.st │ ├── RTDecoratedLine.extension.st │ ├── RTDecoration.class.st │ ├── RTDepMatrix.class.st │ ├── RTDepMatrixExample.class.st │ ├── RTDependenciesBetweenPackagesScript.class.st │ ├── RTDevVarDecorator.class.st │ ├── RTDistribution.class.st │ ├── RTDoubleBarBuilder.class.st │ ├── RTDoubleGrapher.class.st │ ├── RTDoubleScrollBar.class.st │ ├── RTDoubleSlider.class.st │ ├── RTDragAndDroppable.class.st │ ├── RTDraggable.class.st │ ├── RTDraggableChildren.class.st │ ├── RTDraggableSnapToGrid.class.st │ ├── RTDraggableView.class.st │ ├── RTDuplicationBetweenPackages.class.st │ ├── RTDynamicEqualizerGrapher.class.st │ ├── RTDynamicGrapher.class.st │ ├── RTDynamicStackedGrapher.class.st │ ├── RTDynamicStackerGrapherExample.class.st │ ├── RTEdgeBuilder.class.st │ ├── RTEditableLabel.class.st │ ├── RTEditableLabelExample.class.st │ ├── RTEnglishDictionary.class.st │ ├── RTEventForwarder.class.st │ ├── RTExampleBrowser.class.st │ ├── RTExampleEventCollectorPlugin.class.st │ ├── RTExampleOpeningEvent.class.st │ ├── RTExpandable.class.st │ ├── RTExperimentalExample.class.st │ ├── RTExperimentalStack.class.st │ ├── RTExploraBuilder.class.st │ ├── RTExploraBuilderExample.class.st │ ├── RTExploraBuilderLazy.class.st │ ├── RTExploraNode.class.st │ ├── RTExploraNodeLazy.class.st │ ├── RTExploraTestTree.class.st │ ├── RTFilterInView.class.st │ ├── RTFisheye.class.st │ ├── RTFixFontProblemPlugin.class.st │ ├── RTFixedPopup.class.st │ ├── RTFlowerBuilder.class.st │ ├── RTFocusAnimation.class.st │ ├── RTFocusElement.class.st │ ├── RTForceLayoutStepping.class.st │ ├── RTFreeMemory4DebugScript.class.st │ ├── RTGapTree.class.st │ ├── RTGeneralExample.class.st │ ├── RTGhostDraggable.class.st │ ├── RTGitHub.class.st │ ├── RTGradientColoredLineExample.class.st │ ├── RTGraphVizLayoutPlugin.class.st │ ├── RTGrapher.class.st │ ├── RTGrapherBarChartExample.class.st │ ├── RTGrapherDecorationExample.class.st │ ├── RTGrapherExample.class.st │ ├── RTGrapherInteraction.class.st │ ├── RTGrapherLabel.class.st │ ├── RTGrapherScatterplotExample.class.st │ ├── RTGrayLinearColor.class.st │ ├── RTGridView.class.st │ ├── RTHighlightElementsInView.class.st │ ├── RTHighlightable.class.st │ ├── RTHighlightableWithCursor.class.st │ ├── RTHighlighterBuilder.class.st │ ├── RTHistogramSet.class.st │ ├── RTHorizontalAllValuesDecorator.class.st │ ├── RTHorizontalAverageDecorator.class.st │ ├── RTHorizontalData.class.st │ ├── RTHorizontalDraggableView.class.st │ ├── RTHorizontalLineDecorator.class.st │ ├── RTHorizontalMultipleData.class.st │ ├── RTHorizontalTickLineDecorator.class.st │ ├── RTHorizontalTimelineDecorator.class.st │ ├── RTHorizontalValuesDecorator.class.st │ ├── RTHowToContribute.class.st │ ├── RTHowToReportABug.class.st │ ├── RTIcon.class.st │ ├── RTIdentityLineDecorator.class.st │ ├── RTInspectorScript.class.st │ ├── RTInteraction.class.st │ ├── RTInteractionBuilder.class.st │ ├── RTInteractionExample.class.st │ ├── RTInteractiveComposer.class.st │ ├── RTInteractiveComposerExample.class.st │ ├── RTInteractiveComposerTest.class.st │ ├── RTInteractiveTreeBuilder.class.st │ ├── RTInterpolator.class.st │ ├── RTKendrickPlugin.class.st │ ├── RTLabelGenerator.class.st │ ├── RTLabelLegendItem.class.st │ ├── RTLabeled.class.st │ ├── RTLabelled.class.st │ ├── RTLayoutAnimation.class.st │ ├── RTLayoutBuilder.extension.st │ ├── RTLayoutExample.class.st │ ├── RTLazyInteraction.class.st │ ├── RTLazyMetricNormalizer.class.st │ ├── RTLegendBuilder.class.st │ ├── RTLegendBuilderExample.class.st │ ├── RTLegendItem.class.st │ ├── RTLineDecorationExample.class.st │ ├── RTLineDualWidth.class.st │ ├── RTLineLegendItem.class.st │ ├── RTLinePathBuilder.class.st │ ├── RTLinePathBuilder.extension.st │ ├── RTLinearClosedPathBuilder.class.st │ ├── RTLinearMove.class.st │ ├── RTLinearPathBuilder.class.st │ ├── RTLinearTransformation.class.st │ ├── RTLogTransformation.class.st │ ├── RTMakeEdgeNotUpdatable.class.st │ ├── RTMapBuilder.class.st │ ├── RTMapBuilderExample.class.st │ ├── RTMapExample.class.st │ ├── RTMapLocationBuilder.class.st │ ├── RTMapLocationExample.class.st │ ├── RTMarkerOnX.class.st │ ├── RTMatrixRing.class.st │ ├── RTMeanDevVarDecorator.class.st │ ├── RTMenu.class.st │ ├── RTMenuActivable.class.st │ ├── RTMenuBuilder.class.st │ ├── RTMenuBuilderExamples.class.st │ ├── RTMenuGroup.class.st │ ├── RTMenuItem.class.st │ ├── RTMetricMap.class.st │ ├── RTMetricNormalizer.class.st │ ├── RTMicroprint.class.st │ ├── RTMondrian.class.st │ ├── RTMondrianExample.class.st │ ├── RTMondrianFrame.class.st │ ├── RTMoreColorPlugin.class.st │ ├── RTMorphDropInteraction.class.st │ ├── RTMorphingView.class.st │ ├── RTMouseHoverZoom.class.st │ ├── RTMultiGrapher.class.st │ ├── RTMultiLinearColor.class.st │ ├── RTMultiLinearColorCached.class.st │ ├── RTMultiLinearColorForIdentity.class.st │ ├── RTMultiPilesPlugin.class.st │ ├── RTMultipleColorLinearNormalizer.class.st │ ├── RTMultipleData.class.st │ ├── RTNAbstractNormalizer.class.st │ ├── RTNColorLinearNormalizer.class.st │ ├── RTNExplicitIdentityNormalizer.class.st │ ├── RTNFontLinearNormalizer.class.st │ ├── RTNIdentityNormalizer.class.st │ ├── RTNLinearNormalizer.class.st │ ├── RTNameCloud.class.st │ ├── RTNameCloudDictionary.class.st │ ├── RTNameCloudExample.class.st │ ├── RTNeoPlugin.class.st │ ├── RTNetworkLatencyPlugin.class.st │ ├── RTNiceStep.class.st │ ├── RTNiceStepSizeGenerator.class.st │ ├── RTNoDictionary.class.st │ ├── RTNopAnimation.class.st │ ├── RTNumberAnimation.class.st │ ├── RTNumberInterpolator.class.st │ ├── RTNumberLinearNormalizer.class.st │ ├── RTObjectBrowser.class.st │ ├── RTOnlineDocumentation.class.st │ ├── RTOrderedCollection.class.st │ ├── RTPDFExporterPlugin.class.st │ ├── RTPackageLife.class.st │ ├── RTPalette.class.st │ ├── RTPathAnimation.class.st │ ├── RTPieBuilder.class.st │ ├── RTPieExample.class.st │ ├── RTPlatformPopup.class.st │ ├── RTPolymorphicBoxLegendItem.class.st │ ├── RTPopup.class.st │ ├── RTPythonAnalysisPlugin.class.st │ ├── RTRadar.class.st │ ├── RTRangeBelowXAxis.class.st │ ├── RTRangeSelector.class.st │ ├── RTRectangleTreeMap.class.st │ ├── RTResetAllShape.class.st │ ├── RTResizable.class.st │ ├── RTResizableRectangle.class.st │ ├── RTResizeCanceled.class.st │ ├── RTResizeMove.class.st │ ├── RTRoassal3DBasic.class.st │ ├── RTRoassalExample.class.st │ ├── RTRotableView.class.st │ ├── RTRotationMove.class.st │ ├── RTRoute.class.st │ ├── RTRouteBuilder.class.st │ ├── RTSBFadeInteraction.class.st │ ├── RTSBFadeInteractionExamples.class.st │ ├── RTSVGExample.class.st │ ├── RTSamplingGrapher.class.st │ ├── RTSankeyAttachPoint.class.st │ ├── RTSankeyBuilder.class.st │ ├── RTScale.class.st │ ├── RTScaleBilinear.class.st │ ├── RTScaleLinear.class.st │ ├── RTScaleLog.class.st │ ├── RTScaleOrdinal.class.st │ ├── RTScalePolylinear.class.st │ ├── RTScalePow.class.st │ ├── RTScalePowPow.class.st │ ├── RTScaleTransformation.class.st │ ├── RTScatterplotMap.class.st │ ├── RTScatterplotMatrix.class.st │ ├── RTScriptOfTheDayPlugin.class.st │ ├── RTScrollBar.class.st │ ├── RTScrollBarBuilder.class.st │ ├── RTScrollBarBuilderExamples.class.st │ ├── RTScrollPadBuilder.class.st │ ├── RTScrollPadBuilderExamples.class.st │ ├── RTScrollShapesBuilder.class.st │ ├── RTScrollpad.class.st │ ├── RTSelectable.class.st │ ├── RTSelectableView.class.st │ ├── RTSelectionBox.class.st │ ├── RTSelectionChange.class.st │ ├── RTSelectionEnd.class.st │ ├── RTSelectionEvent.class.st │ ├── RTSelectionExample.class.st │ ├── RTSelectionStart.class.st │ ├── RTSelectiveShape.class.st │ ├── RTSetEdgeAlpha.class.st │ ├── RTShapeBuilder.class.st │ ├── RTShapeBuilderExample.class.st │ ├── RTShowEdge.class.st │ ├── RTShowLabel.class.st │ ├── RTShowLabelWhenZooming.class.st │ ├── RTSimilarityMatrix.class.st │ ├── RTSimon.class.st │ ├── RTSimonExample.class.st │ ├── RTSimpleResizable.class.st │ ├── RTSlider.class.st │ ├── RTSmoothLayoutTranslator.class.st │ ├── RTSmoothResizeLayoutTranslator.class.st │ ├── RTSoftwareHeritagePlugin.class.st │ ├── RTSourceCodeDictionary.class.st │ ├── RTSparkline.class.st │ ├── RTSparklineExample.class.st │ ├── RTSpectrograph.class.st │ ├── RTSpectrographExample.class.st │ ├── RTSpringLayoutStepping.class.st │ ├── RTSqrtTransformation.class.st │ ├── RTStackBarPlot.class.st │ ├── RTStackBarPlotExample.class.st │ ├── RTStackBarRow.class.st │ ├── RTStandardDeviationDecorator.class.st │ ├── RTSubTimelineSet.class.st │ ├── RTSunburstBuilder.class.st │ ├── RTSunburstBuilderExamples.class.st │ ├── RTSunburstConstantWidthLayout.class.st │ ├── RTSunburstExtentLayout.class.st │ ├── RTTabTable.class.st │ ├── RTTable.class.st │ ├── RTText.class.st │ ├── RTTextBuilder.class.st │ ├── RTTextBuilderExamples.class.st │ ├── RTTextLine.class.st │ ├── RTTextLines.class.st │ ├── RTTextPath.class.st │ ├── RTTextTokenizer.class.st │ ├── RTTextWord.class.st │ ├── RTThresholdFilter.class.st │ ├── RTTimeline.class.st │ ├── RTTimelineExample.class.st │ ├── RTTimelineSet.class.st │ ├── RTTransitivelyHighlightable.class.st │ ├── RTTreeMapBuilder.class.st │ ├── RTTreeMapExample.class.st │ ├── RTTreeMapExampleTODELETE.class.st │ ├── RTUninterpolate.class.st │ ├── RTUninterpolateClamp.class.st │ ├── RTUninterpolateNumber.class.st │ ├── RTUnoptimizedComposer.class.st │ ├── RTUpdateRoassalPlugin.class.st │ ├── RTUsefulScript.class.st │ ├── RTValueLinearNormalizer.class.st │ ├── RTVarianceRangeDecorator.class.st │ ├── RTVector.class.st │ ├── RTVerticalAllValuesDecorator.class.st │ ├── RTVerticalDraggableView.class.st │ ├── RTVerticalLineDecorator.class.st │ ├── RTVerticalMaxValueDecorator.class.st │ ├── RTVerticalMinValueDecorator.class.st │ ├── RTVerticalMultipleData.class.st │ ├── RTVerticalTickLineDecorator.class.st │ ├── RTVerticalValuesDecorator.class.st │ ├── RTView.extension.st │ ├── RTViewFolder2Script.class.st │ ├── RTViewFolderScript.class.st │ ├── RTVisible.class.st │ ├── RTVisualIDPlugin.class.st │ ├── RTVisualizeCSVFileScript.class.st │ ├── RTVoronojPlugin.class.st │ ├── RTXMLViewerScript.class.st │ ├── RTXPPoint.class.st │ ├── RTXPSVGAnimation.class.st │ ├── RTZoomInMove.class.st │ ├── RTZoomOutMove.class.st │ ├── RTZoomableBoxView.class.st │ ├── RTZoomableView.class.st │ ├── Rectangle.extension.st │ ├── SequenceableCollection.extension.st │ ├── String.extension.st │ ├── TRClipBoxShape.class.st │ ├── TRTextPath.class.st │ ├── TraitBehavior.extension.st │ ├── TraitDescription.extension.st │ └── package.st ├── Roassal2DataStudioObsolete │ ├── RTAbstractSmartBrowser.class.st │ ├── RTPharoCodeAnalyzer.class.st │ ├── RTPharoCodeAnalyzerTest.class.st │ ├── RTSmartBrowser.class.st │ ├── RTSmartBrowserTest.class.st │ └── package.st ├── Roassal2DowserObsolete │ ├── RTDowserBuilder.class.st │ ├── RTDowserBuilderTest.class.st │ ├── RTDowserExample.class.st │ ├── RTDuoDowserBuilder.class.st │ └── package.st ├── Roassal2EventCollector │ └── package.st ├── Roassal2GT-Tests │ ├── GLMCameraCenterActionTest.class.st │ ├── GLMRoassal2ActionTest.class.st │ ├── GLMRoassal2MorphicTest.class.st │ ├── RTExampleTestCase.class.st │ ├── RTFindInAViewTest.class.st │ ├── RTGTContextInteractionTest.class.st │ ├── RTGTContextTest.class.st │ └── package.st ├── Roassal2GT │ ├── GLMAbstractExportingAction.class.st │ ├── GLMAbstractSetContextAction.class.st │ ├── GLMAddLabelAction.class.st │ ├── GLMAddScrollbarAction.class.st │ ├── GLMBoxZoomAction.class.st │ ├── GLMCameraCenterAction.class.st │ ├── GLMCompositePresentation.extension.st │ ├── GLMEmptyContextAction.class.st │ ├── GLMFindInViewAction.class.st │ ├── GLMHTMLExporting2Action.class.st │ ├── GLMHTMLExportingAction.class.st │ ├── GLMHTMLExportingWithoutFixedShapesAction.class.st │ ├── GLMInspectViewAction.class.st │ ├── GLMInteractiveContextAction.class.st │ ├── GLMMorphicRenderer.extension.st │ ├── GLMMorphicRoassal2Renderer.class.st │ ├── GLMPNGExporting2Action.class.st │ ├── GLMPNGExportingAction.class.st │ ├── GLMRoassal2Action.class.st │ ├── GLMRoassal2Presentation.class.st │ ├── GLMSVGExportingAction.class.st │ ├── GLMSelectionBox.class.st │ ├── GLMZoomInAction.class.st │ ├── GLMZoomOutAction.class.st │ ├── GtExampleMethodIcon.extension.st │ ├── Object.extension.st │ ├── RTAbstractContextInteraction.class.st │ ├── RTAbstractExample.extension.st │ ├── RTAbstractViewContext.class.st │ ├── RTBuilder.extension.st │ ├── RTElement.extension.st │ ├── RTEmptyViewContext.class.st │ ├── RTEmptyViewContextInteraction.class.st │ ├── RTExampleFactory.class.st │ ├── RTExampleMethodIcon.class.st │ ├── RTExampleSelection.class.st │ ├── RTFindInAView.class.st │ ├── RTGTContextExample.class.st │ ├── RTGrapherSelectRangeContextInteraction.class.st │ ├── RTGrapherSelectRangeViewContext.class.st │ ├── RTInteractiveViewContext.class.st │ ├── RTObject.extension.st │ ├── RTResizeableViewContextInteraction.class.st │ ├── RTSelectableElementContextInteraction.class.st │ ├── RTSelectableElementsContextInteraction.class.st │ ├── RTView.extension.st │ ├── TRCanvas.extension.st │ └── package.st ├── Roassal2HTMLExporterObsolete │ ├── RTHTMLBuilder.class.st │ ├── RTHTMLBuilderExample.class.st │ ├── RTHTMLExploraBuilder.class.st │ ├── RTHTMLExporter.class.st │ ├── RTHTMLExporterExample.class.st │ ├── RTHTMLExporterShowroom.class.st │ ├── RTHTMLInteractionBuilder.class.st │ ├── RTHTMLMetricMap.class.st │ └── package.st ├── Roassal2OldGraphBuilder │ ├── RTGDEdgeB.class.st │ ├── RTGDElement.class.st │ ├── RTGDLayoutB.class.st │ ├── RTGDNodeB.class.st │ ├── RTGDShapedElementB.class.st │ ├── RTGlobalBuilder.class.st │ ├── RTGlobalBuilderTest.class.st │ ├── RTGraphBuilder.class.st │ ├── RTGraphBuilderExample.class.st │ ├── RTGraphBuilderExamples.class.st │ ├── RTGraphBuilderTest.class.st │ ├── RTObsoleteExample.class.st │ ├── RTPushAwayLayout.class.st │ ├── RTTranslationLayout.class.st │ └── package.st ├── Roassal2Pillar │ ├── R2PBasicTest.class.st │ ├── R2PExample.class.st │ └── package.st ├── Roassal2ScriptOfTheDay │ ├── RTExampleSelection.extension.st │ └── package.st ├── Roassal2Spec │ ├── DynamicStackedModelExample.class.st │ ├── MorphicRoassalAdapter.class.st │ ├── RTViewForSpec.class.st │ ├── RoassalAndSpecExample.class.st │ ├── RoassalModel.class.st │ ├── SpecEasel.class.st │ ├── SubscriptionRegistry.extension.st │ ├── TREvent.extension.st │ ├── TRMouseClick.extension.st │ └── package.st ├── Roassal2Spec2 │ ├── SpAbstractMorphicAdapter.extension.st │ ├── SpMorphicRoassal2Adapter.class.st │ ├── SpRoassal2Presenter.class.st │ ├── TREvent.extension.st │ ├── TRMouseClick.extension.st │ └── package.st ├── RoassalObsolete │ ├── InstanceSpy.class.st │ ├── InstanceSpyTest.class.st │ ├── RTCharterBuilder.class.st │ ├── RTCharterBuilderTest.class.st │ ├── RTMatrixBuilder.class.st │ ├── RTMatrixBuilderTest.class.st │ ├── RTReadEvalLoop.class.st │ ├── RTRefreshShapes.class.st │ └── package.st ├── RoassalSpotterIntegration │ ├── RTElement.extension.st │ ├── RTView.extension.st │ ├── RoassalSpotterIntegrationExample.class.st │ └── package.st ├── Trachel │ ├── Announcer.extension.st │ ├── AthensAffineTransform.extension.st │ ├── AthensCairoSurface.extension.st │ ├── FormCanvas.extension.st │ ├── GrafPort.extension.st │ ├── Point.extension.st │ ├── SubscriptionRegistry.extension.st │ ├── TRAbstractArrowHeadShape.class.st │ ├── TRAbstractBoxShape.class.st │ ├── TRAbstractLineDecoratorShape.class.st │ ├── TRAbstractLineShape.class.st │ ├── TRAbstractMouseClick.class.st │ ├── TRAbstractMouseEvent.class.st │ ├── TRAddedCallback.class.st │ ├── TRAnnouncingOverseer.class.st │ ├── TRArcLineShape.class.st │ ├── TRArcShape.class.st │ ├── TRArcShapeTest.class.st │ ├── TRBezier3Shape.class.st │ ├── TRBezier4Shape.class.st │ ├── TRBezierShape.class.st │ ├── TRBitmapShape.class.st │ ├── TRBoxShape.class.st │ ├── TRBoxShapeTest.class.st │ ├── TRCallableObject.class.st │ ├── TRCallback.class.st │ ├── TRCallbackTest.class.st │ ├── TRCamera.class.st │ ├── TRCameraInitializer.class.st │ ├── TRCameraScaleCallback.class.st │ ├── TRCameraTest.class.st │ ├── TRCanvas.class.st │ ├── TRCanvasExample.class.st │ ├── TRCanvasGridShape.class.st │ ├── TRCanvasTest.class.st │ ├── TRCircleHeadShape.class.st │ ├── TRCompositeShape.class.st │ ├── TRCompositeShapeTest.class.st │ ├── TRConstraint.class.st │ ├── TRConstraintTest.class.st │ ├── TRDarkSolarizedTheme.class.st │ ├── TRDarkTheme.class.st │ ├── TRDiamondShape.class.st │ ├── TREllipseShape.class.st │ ├── TREllipseShapeTest.class.st │ ├── TREmptyArrowHeadShape.class.st │ ├── TREmptyNarrowArrowHeadShape.class.st │ ├── TREvent.class.st │ ├── TREventOverseer.class.st │ ├── TRExtensibleLabelShape.class.st │ ├── TRExtentCallback.class.st │ ├── TRFilledArrowHeadShape.class.st │ ├── TRFilledCircleHeadShape.class.st │ ├── TRFilledDiamondShape.class.st │ ├── TRFilledNarrowArrowHeadShape.class.st │ ├── TRFocusCenter.class.st │ ├── TRFocusRightMost.class.st │ ├── TRFocusTopLeft.class.st │ ├── TRFocusTopRight.class.st │ ├── TRFocusing.class.st │ ├── TRKeyDown.class.st │ ├── TRKeyUp.class.st │ ├── TRKeyboardEvent.class.st │ ├── TRLabelShape.class.st │ ├── TRLineShape.class.st │ ├── TRMorph.class.st │ ├── TRMorphDrop.class.st │ ├── TRMorphDropEvent.class.st │ ├── TRMorphTest.class.st │ ├── TRMorphWantsDrop.class.st │ ├── TRMorphWidgetFactory.class.st │ ├── TRMouseAbstractDrop.class.st │ ├── TRMouseClick.class.st │ ├── TRMouseDoubleClick.class.st │ ├── TRMouseDoubleLeftClick.class.st │ ├── TRMouseDoubleRightClick.class.st │ ├── TRMouseDragDrop.class.st │ ├── TRMouseDragEnd.class.st │ ├── TRMouseDragEnter.class.st │ ├── TRMouseDragLeave.class.st │ ├── TRMouseDragOver.class.st │ ├── TRMouseDragStart.class.st │ ├── TRMouseDragging.class.st │ ├── TRMouseDraggingTest.class.st │ ├── TRMouseEnter.class.st │ ├── TRMouseLeave.class.st │ ├── TRMouseLeftClick.class.st │ ├── TRMouseLeftDragStart.class.st │ ├── TRMouseMiddleDragStart.class.st │ ├── TRMouseMove.class.st │ ├── TRMouseRightClick.class.st │ ├── TRMouseRightDragStart.class.st │ ├── TRMouseWheelEvent.class.st │ ├── TRNoDecoratorShape.class.st │ ├── TRNoShape.class.st │ ├── TRObject.class.st │ ├── TRPharoPlatform.class.st │ ├── TRPlainColorTheme.class.st │ ├── TRPlatform.class.st │ ├── TRPolygonShape.class.st │ ├── TRPolygonShapeTest.class.st │ ├── TRRemoveCallback.class.st │ ├── TRResizeCanceled.class.st │ ├── TRResizeCanvasEvent.class.st │ ├── TRRotatedLabelShape.class.st │ ├── TRRoundedBoxShape.class.st │ ├── TRSVGPath.class.st │ ├── TRSVGPathLineShape.class.st │ ├── TRSVGPathTest.class.st │ ├── TRShape.class.st │ ├── TRShapeEvent.class.st │ ├── TRShapeTest.class.st │ ├── TRSimpleArrowShape.class.st │ ├── TRSolarizedTheme.class.st │ ├── TRStyledLabelShape.class.st │ ├── TRStyledLineShape.class.st │ ├── TRTest.class.st │ ├── TRTextShape.class.st │ ├── TRTheme.class.st │ ├── TRTranslationCallback.class.st │ ├── TRUserInputEvent.class.st │ ├── TRUtil.class.st │ ├── TRVIAnimatedPoint.class.st │ ├── TRVIAnimatedPointTest.class.st │ ├── TRVIAnimatedValue.class.st │ ├── TRVIAnimatedValueTest.class.st │ ├── TRVIBasicTimer.class.st │ ├── TRVIManagedTimeExample.class.st │ ├── TRVIManualTimer.class.st │ ├── TRVITimer.class.st │ ├── TRWhiteSolarizedTheme.class.st │ ├── TRWhiteTheme.class.st │ └── package.st └── VersionOfRoassal2 │ ├── VersionOfRoassal2.class.st │ └── package.st └── update.sh /.project: -------------------------------------------------------------------------------- 1 | { 2 | 'srcDirectory' : 'src' 3 | } -------------------------------------------------------------------------------- /.smalltalk.ston: -------------------------------------------------------------------------------- 1 | SmalltalkCISpec { 2 | #loading : [ 3 | SCIMetacelloLoadSpec { 4 | #baseline : 'Roassal2', 5 | #directory : 'src', 6 | #platforms : [ #pharo ] 7 | } 8 | ], 9 | 10 | #testing : { 11 | #categories : [ 'Roassal2*', 'Trachel*' ], 12 | #defaultTimeout : 120 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /.smalltalk_stable.ston: -------------------------------------------------------------------------------- 1 | SmalltalkCISpec { 2 | #loading : [ 3 | SCIMetacelloLoadSpec { 4 | #configuration : 'Roassal2', 5 | #repository : 'http://smalltalkhub.com/mc/ObjectProfile/Roassal2/main/', 6 | #load : [ 'default' ], 7 | #platforms : [ #pharo ], 8 | #version: #stable 9 | } 10 | ], 11 | 12 | #testing : { 13 | #categories : [ 'Roassal2*', 'Trachel*' ] 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: smalltalk 2 | 3 | os: 4 | - osx 5 | - linux 6 | 7 | smalltalk: 8 | - Pharo-7.0 9 | - Pharo64-7.0 -------------------------------------------------------------------------------- /info.txt: -------------------------------------------------------------------------------- 1 | "Extracting the unit tests" 2 | 3 | cs := ((((TestCase withAllSubclasses select: [ :c | (c category beginsWith: 'Roassal2') or: [ c category beginsWith: 'Trachel' ] ]) collectAsSet: #category) collect: #asString) collect: #printString )sorted. 4 | 5 | ', ' join: cs 6 | 7 | 8 | 9 | We exclude GT and 'Roassal2-ExporterVW', 10 | -------------------------------------------------------------------------------- /scripts/runTestsOnPharo10.sh: -------------------------------------------------------------------------------- 1 | curl -L https://get.pharo.org/64/100+vm | bash 2 | ./pharo --headless Pharo.image ./scripts/runTests.st 3 | 4 | FILE=/tmp/result.txt 5 | if [ ! -f "$FILE" ]; then 6 | echo "ERROR: $FILE does not exists!" 7 | exit 1 8 | fi 9 | 10 | 11 | cat $FILE 12 | 13 | if grep -q ERROR "$FILE"; then 14 | echo "SOME ERRORS!" 15 | exit 1 16 | else 17 | echo "ALL TEST PASSED" 18 | exit 0 19 | fi 20 | -------------------------------------------------------------------------------- /scripts/runTestsOnPharo8.sh: -------------------------------------------------------------------------------- 1 | curl -L https://get.pharo.org/64/80+vm | bash 2 | ./pharo --headless Pharo.image ./scripts/runTests.st 3 | 4 | FILE=/tmp/result.txt 5 | if [ ! -f "$FILE" ]; then 6 | echo "ERROR: $FILE does not exists!" 7 | exit 1 8 | fi 9 | 10 | 11 | cat $FILE 12 | 13 | if grep -q ERROR "$FILE"; then 14 | echo "SOME ERRORS!" 15 | exit 1 16 | else 17 | echo "ALL TEST PASSED" 18 | exit 0 19 | fi 20 | -------------------------------------------------------------------------------- /scripts/runTestsOnPharo9.sh: -------------------------------------------------------------------------------- 1 | curl -L https://get.pharo.org/64/90+vm | bash 2 | ./pharo --headless Pharo.image ./scripts/runTests.st 3 | 4 | FILE=/tmp/result.txt 5 | if [ ! -f "$FILE" ]; then 6 | echo "ERROR: $FILE does not exists!" 7 | exit 1 8 | fi 9 | 10 | 11 | cat $FILE 12 | 13 | if grep -q ERROR "$FILE"; then 14 | echo "SOME ERRORS!" 15 | exit 1 16 | else 17 | echo "ALL TEST PASSED" 18 | exit 0 19 | fi 20 | -------------------------------------------------------------------------------- /src/.properties: -------------------------------------------------------------------------------- 1 | { 2 | #format : #tonel 3 | } -------------------------------------------------------------------------------- /src/BaselineOfRoassal2/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #BaselineOfRoassal2 } 2 | -------------------------------------------------------------------------------- /src/DataStudio-CProjectVisualizer/CPPFolder.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I represent a file directory in a C project 3 | " 4 | Class { 5 | #name : #CPPFolder, 6 | #superclass : #CPPAbstractFile, 7 | #instVars : [ 8 | 'files' 9 | ], 10 | #category : #'DataStudio-CProjectVisualizer-Core' 11 | } 12 | 13 | { #category : #adding } 14 | CPPFolder >> addFile: aFile [ 15 | files add: aFile 16 | ] 17 | 18 | { #category : #accessing } 19 | CPPFolder >> files [ 20 | ^ files copy 21 | ] 22 | 23 | { #category : #initialization } 24 | CPPFolder >> initialize [ 25 | super initialize. 26 | files := OrderedCollection new 27 | ] 28 | 29 | { #category : #metrics } 30 | CPPFolder >> numberOfFiles [ 31 | ^ files size 32 | ] 33 | -------------------------------------------------------------------------------- /src/DataStudio-CProjectVisualizer/CPPFolderTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #CPPFolderTest, 3 | #superclass : #RTTest, 4 | #category : #'DataStudio-CProjectVisualizer-Tests' 5 | } 6 | 7 | { #category : #tests } 8 | CPPFolderTest >> testBasic [ 9 | self assert: CPPFolder new numberOfFiles equals: 0 10 | ] 11 | -------------------------------------------------------------------------------- /src/DataStudio-CProjectVisualizer/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #'DataStudio-CProjectVisualizer' } 2 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/GTACollectionAnnouncement.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GTACollectionAnnouncement, 3 | #superclass : #Announcement, 4 | #category : #'GT-Spotter-EventRecorder-Analysis-Bookmarks' 5 | } 6 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/GTADelayedExitCommand.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GTADelayedExitCommand, 3 | #superclass : #GTACommand, 4 | #category : #'GT-Spotter-EventRecorder-Analysis-Builders' 5 | } 6 | 7 | { #category : #'as yet unclassified' } 8 | GTADelayedExitCommand >> clean [ 9 | self session removeHasDelayedExit 10 | ] 11 | 12 | { #category : #'as yet unclassified' } 13 | GTADelayedExitCommand >> execute [ 14 | | close nextToLast | 15 | self session last isCloseSpotter ifFalse: [ ^ self ]. 16 | close := self session last dateAndTimeWithFixedTimeZone. 17 | nextToLast := self session nextToLast dateAndTimeWithFixedTimeZone. 18 | close - nextToLast < 1 minute ifTrue: [ ^ self ]. 19 | self session setHasDelayedExit 20 | ] 21 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/GTADirectSessionCommand.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GTADirectSessionCommand, 3 | #superclass : #GTACommand, 4 | #category : #'GT-Spotter-EventRecorder-Analysis-Builders' 5 | } 6 | 7 | { #category : #accessing } 8 | GTADirectSessionCommand class >> analysisOrder [ 9 | ^ GTAEmptySessionCommand analysisOrder + 1 10 | ] 11 | 12 | { #category : #execute } 13 | GTADirectSessionCommand >> clean [ 14 | self session removeIsDirectSession. 15 | ] 16 | 17 | { #category : #execute } 18 | GTADirectSessionCommand >> execute [ 19 | self session hasDelayedExit ifTrue: [ ^ self ]. 20 | self session isEmptySession ifTrue: [ ^ self ]. 21 | self session numberOfDivesIn = 0 ifFalse: [ ^ self ]. 22 | self session setDirectSession. 23 | ] 24 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/GTAEmptyBookmark.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GTAEmptyBookmark, 3 | #superclass : #Object, 4 | #category : #'GT-Spotter-EventRecorder-Analysis-Bookmarks' 5 | } 6 | 7 | { #category : #initialization } 8 | GTAEmptyBookmark >> from: aCollection computers: aGTAComputers [ 9 | self subclassResponsibility 10 | ] 11 | 12 | { #category : #testing } 13 | GTAEmptyBookmark >> isRelatedTo: anObject [ 14 | ^ self subclassResponsibility 15 | ] 16 | 17 | { #category : #accessing } 18 | GTAEmptyBookmark >> path [ 19 | ^ self subclassResponsibility. 20 | ] 21 | 22 | { #category : #api } 23 | GTAEmptyBookmark >> toggleGarbage [ 24 | self subclassResponsibility 25 | ] 26 | 27 | { #category : #accessing } 28 | GTAEmptyBookmark >> typeName [ 29 | ^ self subclassResponsibility 30 | ] 31 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/GTAFlexibleResultIconBuilderTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GTAFlexibleResultIconBuilderTest, 3 | #superclass : #GTAAbstractIconBuilderTest, 4 | #category : #'GT-Spotter-EventRecorder-Analysis-Tests' 5 | } 6 | 7 | { #category : #initialization } 8 | GTAFlexibleResultIconBuilderTest >> initializeBuilder [ 9 | builder := GTAFlexibleResultSymbolBuilder new 10 | ] 11 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/GTAFlexibleResultSymbolBuilder.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GTAFlexibleResultSymbolBuilder, 3 | #superclass : #GTAOrthogonalSymbolBuilder, 4 | #category : #'GT-Spotter-EventRecorder-Analysis-Roassal-Activity-Symbols' 5 | } 6 | 7 | { #category : #visitor } 8 | GTAFlexibleResultSymbolBuilder >> visitSearchFinishedEvent: aGTSpotterEvent [ 9 | ^ aGTSpotterEvent notEmptyCategories size < 2 10 | ifTrue: [ self newSearchFinishedForOneCategoryEvent: aGTSpotterEvent ] 11 | ifFalse: [ self newSearchFinishedForSeveralCategoriesEvent: aGTSpotterEvent ] 12 | ] 13 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/GTAGroups.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GTAGroups, 3 | #superclass : #OrderedCollection, 4 | #category : #'GT-Spotter-EventRecorder-Analysis-Roassal-Timeline' 5 | } 6 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/GTAHighlightable.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GTAHighlightable, 3 | #superclass : #RTHighlightable, 4 | #instVars : [ 5 | 'initializeOnElement' 6 | ], 7 | #category : #'GT-Spotter-EventRecorder-Analysis-Roassal-Activity' 8 | } 9 | 10 | { #category : #'as yet unclassified' } 11 | GTAHighlightable >> initializeElement: element [ 12 | (initializeOnElement rtValue: element) ifFalse: [ ^ self ]. 13 | super initializeElement: element 14 | ] 15 | 16 | { #category : #initialization } 17 | GTAHighlightable >> initializeOn: aSymbolOrBlockOrObject [ 18 | self initializeOnElement: [ :anElement | aSymbolOrBlockOrObject rtValue: anElement model ] 19 | ] 20 | 21 | { #category : #accessing } 22 | GTAHighlightable >> initializeOnElement: aSymbolOrBlockOrObject [ 23 | initializeOnElement := aSymbolOrBlockOrObject 24 | ] 25 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/GTAIconBuilderTest.class.st: -------------------------------------------------------------------------------- 1 | " 2 | A GTATimelineIconBuilderTest is a test class for testing the behavior of GTATimelineIconBuilder 3 | " 4 | Class { 5 | #name : #GTAIconBuilderTest, 6 | #superclass : #GTAAbstractIconBuilderTest, 7 | #category : #'GT-Spotter-EventRecorder-Analysis-Tests' 8 | } 9 | 10 | { #category : #initialization } 11 | GTAIconBuilderTest >> initializeBuilder [ 12 | builder := GTAActivitySymbolBuilder new. 13 | ] 14 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/GTAItemAdded.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GTAItemAdded, 3 | #superclass : #GTACollectionAnnouncement, 4 | #category : #'GT-Spotter-EventRecorder-Analysis-Bookmarks' 5 | } 6 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/GTAItemRemoved.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GTAItemRemoved, 3 | #superclass : #GTACollectionAnnouncement, 4 | #category : #'GT-Spotter-EventRecorder-Analysis-Bookmarks' 5 | } 6 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/GTALinkCloseWithSelectionCommand.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GTALinkCloseWithSelectionCommand, 3 | #superclass : #GTACommand, 4 | #category : #'GT-Spotter-EventRecorder-Analysis-Builders' 5 | } 6 | 7 | { #category : #execute } 8 | GTALinkCloseWithSelectionCommand >> clean [ 9 | | close | 10 | close := self session last. 11 | close isCloseSpotter ifFalse: [ ^ self ]. 12 | close removeSelectedElementEvent. 13 | ] 14 | 15 | { #category : #execute } 16 | GTALinkCloseWithSelectionCommand >> execute [ 17 | | close | 18 | close := self session last. 19 | close isCloseSpotter ifFalse: [ ^ self session bookmarkIt: 'The last event should be ActOn or Exit.' ]. 20 | self session reverseDo: [ :eachEvent | 21 | eachEvent isUserSelectionClass ifTrue: [ 22 | close selectedElementEvent: eachEvent. 23 | ^ self ] ]. 24 | ] 25 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/GTALinkDiveInWithSelectionCommand.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GTALinkDiveInWithSelectionCommand, 3 | #superclass : #GTACommand, 4 | #category : #'GT-Spotter-EventRecorder-Analysis-Builders' 5 | } 6 | 7 | { #category : #execute } 8 | GTALinkDiveInWithSelectionCommand >> clean [ 9 | self session do: [ :eachEvent | 10 | eachEvent isDiveIn ifTrue: [ eachEvent removeSelectedElementEvent ] ] 11 | ] 12 | 13 | { #category : #execute } 14 | GTALinkDiveInWithSelectionCommand >> execute [ 15 | | lastSelection | 16 | self session do: [ :eachEvent | 17 | eachEvent isUserSelectionClass ifTrue: [ lastSelection := eachEvent ]. 18 | eachEvent isDiveIn ifTrue: [ 19 | self assert: [ lastSelection notNil ]. 20 | eachEvent selectedElementEvent: lastSelection ] ] 21 | ] 22 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/GTALinkToSessionCommand.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GTALinkToSessionCommand, 3 | #superclass : #GTACommand, 4 | #category : #'GT-Spotter-EventRecorder-Analysis-Builders' 5 | } 6 | 7 | { #category : #accessing } 8 | GTALinkToSessionCommand class >> analysisOrder [ 9 | ^ 1 10 | ] 11 | 12 | { #category : #execute } 13 | GTALinkToSessionCommand >> clean [ 14 | self session do: [ :eachEvent | 15 | eachEvent removeSession ] 16 | ] 17 | 18 | { #category : #execute } 19 | GTALinkToSessionCommand >> execute [ 20 | self session do: [ :eachEvent | 21 | eachEvent session: self session ] 22 | ] 23 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/GTAPreviousEventCommand.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GTAPreviousEventCommand, 3 | #superclass : #GTACommand, 4 | #category : #'GT-Spotter-EventRecorder-Analysis-Builders' 5 | } 6 | 7 | { #category : #execute } 8 | GTAPreviousEventCommand >> clean [ 9 | self session do: [ :eachEvent | eachEvent removePreviousEvent ] 10 | ] 11 | 12 | { #category : #execute } 13 | GTAPreviousEventCommand >> execute [ 14 | | previousEvent | 15 | self session size < 2 ifTrue: [ ^ self ]. 16 | previousEvent := self session first. 17 | self session allButFirstDo: [ :eachEvent | 18 | eachEvent previousEvent: previousEvent. 19 | previousEvent := eachEvent ] 20 | ] 21 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/GTAPrintDateAndTime.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GTAPrintDateAndTime, 3 | #superclass : #Object, 4 | #category : #'GT-Spotter-EventRecorder-Analysis-Utilities' 5 | } 6 | 7 | { #category : #api } 8 | GTAPrintDateAndTime class >> yyyyMmDdAndHhMmSs: aDateAndTimeOrZero [ 9 | "Returns YYYY-MM-DD, HH:MM:SS in UTC time." 10 | aDateAndTimeOrZero = 0 ifTrue: [ ^ 'unknown' ]. 11 | ^ String streamContents: [ :aStream | 12 | aDateAndTimeOrZero asUTC printYMDOn: aStream. 13 | aStream nextPutAll: ', '. 14 | aDateAndTimeOrZero asUTC printHMSOn: aStream ] 15 | ] 16 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/GTASaved.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GTASaved, 3 | #superclass : #GTACollectionAnnouncement, 4 | #category : #'GT-Spotter-EventRecorder-Analysis-Bookmarks' 5 | } 6 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/GTAShapeBuilders.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GTAShapeBuilders, 3 | #superclass : #OrderedCollection, 4 | #category : #'GT-Spotter-EventRecorder-Analysis-Roassal-Activity' 5 | } 6 | 7 | { #category : #shapes } 8 | GTAShapeBuilders >> flexibleResultShapes [ 9 | self do: #flexibleResultShapes 10 | ] 11 | 12 | { #category : #shapes } 13 | GTAShapeBuilders >> oblique [ 14 | self do: #oblique 15 | ] 16 | 17 | { #category : #shapes } 18 | GTAShapeBuilders >> orthogonal [ 19 | self do: #orthogonal 20 | ] 21 | 22 | { #category : #accessing } 23 | GTAShapeBuilders >> shape [ 24 | self ifEmpty: [ ^ nil ]. 25 | ^ self anyOne shape 26 | ] 27 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/GTSpotterPrintDateAndTimeTest.class.st: -------------------------------------------------------------------------------- 1 | " 2 | A GTSpotterPrintDateAndTimeTest is a test class for testing the behavior of GTSpotterPrintDateAndTime 3 | " 4 | Class { 5 | #name : #GTSpotterPrintDateAndTimeTest, 6 | #superclass : #TestCase, 7 | #category : #'GT-Spotter-EventRecorder-Analysis-Tests' 8 | } 9 | 10 | { #category : #tests } 11 | GTSpotterPrintDateAndTimeTest >> testUCTPlus1 [ 12 | | dateAndTime string | 13 | dateAndTime := '2015-03-27T14:59:05.524852+01:00' asDateAndTime. 14 | string := GTAPrintDateAndTime yyyyMmDdAndHhMmSs: dateAndTime. 15 | self assert: string equals: '2015-03-27, 13:59:05'. 16 | ] 17 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/GTSpotterRecorderHidePreviewEvent.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #GTSpotterRecorderHidePreviewEvent } 2 | 3 | { #category : #'*GT-Spotter-EventRecorder-Analysis' } 4 | GTSpotterRecorderHidePreviewEvent >> analysisIcon [ 5 | ^ GTAEventIcons hidePreviewIcon 6 | ] 7 | 8 | { #category : #'*GT-Spotter-EventRecorder-Analysis' } 9 | GTSpotterRecorderHidePreviewEvent >> eventAnalysisPrintOn: aStream [ 10 | aStream 11 | nextPutAll: 'Hide Preview'. 12 | self printDelayFromPreviousEventOn: aStream. 13 | ] 14 | 15 | { #category : #'*GT-Spotter-EventRecorder-Analysis' } 16 | GTSpotterRecorderHidePreviewEvent >> isForTimelineView [ 17 | ^ true 18 | ] 19 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/GTSpotterRecorderOpenEvent.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #GTSpotterRecorderOpenEvent } 2 | 3 | { #category : #'*GT-Spotter-EventRecorder-Analysis' } 4 | GTSpotterRecorderOpenEvent >> eventAnalysisPrintOn: aStream [ 5 | aStream 6 | nextPutAll: 'Open Spotter'. 7 | ] 8 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/GTSpotterRecorderShowPreviewEvent.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #GTSpotterRecorderShowPreviewEvent } 2 | 3 | { #category : #'*GT-Spotter-EventRecorder-Analysis' } 4 | GTSpotterRecorderShowPreviewEvent >> analysisIcon [ 5 | ^ GTAEventIcons showPreviewIcon 6 | ] 7 | 8 | { #category : #'*GT-Spotter-EventRecorder-Analysis' } 9 | GTSpotterRecorderShowPreviewEvent >> eventAnalysisPrintOn: aStream [ 10 | aStream 11 | nextPutAll: 'Show Preview'. 12 | self printDelayFromPreviousEventOn: aStream. 13 | ] 14 | 15 | { #category : #'*GT-Spotter-EventRecorder-Analysis' } 16 | GTSpotterRecorderShowPreviewEvent >> isForTimelineView [ 17 | ^ true 18 | ] 19 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/Object.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #Object } 2 | 3 | { #category : #'*GT-Spotter-EventRecorder-Analysis' } 4 | Object >> isSpotterEvent [ 5 | ^ false 6 | ] 7 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/RTGrapher.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #RTGrapher } 2 | 3 | { #category : #'*GT-Spotter-EventRecorder-Analysis' } 4 | RTGrapher >> removeDataSets [ 5 | datasets removeAll 6 | ] 7 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/RTShapeBuilder.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #RTShapeBuilder } 2 | 3 | { #category : #'*GT-Spotter-EventRecorder-Analysis' } 4 | RTShapeBuilder >> event [ 5 | self shape: GTAActivitySymbolBuilder new 6 | ] 7 | 8 | { #category : #'*GT-Spotter-EventRecorder-Analysis' } 9 | RTShapeBuilder >> flexibleResultShapes [ 10 | self shape: GTAFlexibleResultSymbolBuilder new 11 | ] 12 | 13 | { #category : #'*GT-Spotter-EventRecorder-Analysis' } 14 | RTShapeBuilder >> oblique [ 15 | self shape: GTAActivitySymbolBuilder new 16 | ] 17 | 18 | { #category : #'*GT-Spotter-EventRecorder-Analysis' } 19 | RTShapeBuilder >> orthogonal [ 20 | self shape: GTAOrthogonalSymbolBuilder new 21 | ] 22 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/TGTSpotterUpdateEvents.trait.st: -------------------------------------------------------------------------------- 1 | Trait { 2 | #name : #TGTSpotterUpdateEvents, 3 | #category : #'GT-Spotter-EventRecorder-Analysis-Traits' 4 | } 5 | 6 | { #category : #'gt-inspector-extension' } 7 | TGTSpotterUpdateEvents >> gtInspectorActionRefreshEvents [ 8 | 9 | ^ GLMGenericAction new 10 | action: [ self updateEvents ]; 11 | icon: Smalltalk ui icons glamorousRefresh; 12 | title: 'Update events' 13 | ] 14 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/TRCompositeShape.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #TRCompositeShape } 2 | 3 | { #category : #'*GT-Spotter-EventRecorder-Analysis' } 4 | TRCompositeShape >> allVisibleColor: aColor [ 5 | self shapes do: [ :aShape | aShape allVisibleColor: aColor ] 6 | ] 7 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/TRShape.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #TRShape } 2 | 3 | { #category : #'*GT-Spotter-EventRecorder-Analysis' } 4 | TRShape >> allVisibleColor: aColor [ 5 | self color = Color transparent 6 | ifFalse: [ self color: aColor ] 7 | ] 8 | -------------------------------------------------------------------------------- /src/GT-Spotter-EventRecorder-Analysis/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #'GT-Spotter-EventRecorder-Analysis' } 2 | -------------------------------------------------------------------------------- /src/Glamour-Roassal2-Presentations/GLMCompositePresentation.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #GLMCompositePresentation } 2 | 3 | { #category : #'*Glamour-Roassal2-Presentations' } 4 | GLMCompositePresentation >> roassal2 [ 5 | ^ self custom: GLMRoassal2Presentation new 6 | ] 7 | -------------------------------------------------------------------------------- /src/Glamour-Roassal2-Presentations/GLMMorphicRenderer.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #GLMMorphicRenderer } 2 | 3 | { #category : #'*Glamour-Roassal2-Presentations' } 4 | GLMMorphicRenderer >> renderRoassal2Presentation: aPresentation [ 5 | ^ GLMMorphicRoassal2Renderer render: aPresentation from: self 6 | ] 7 | -------------------------------------------------------------------------------- /src/Glamour-Roassal2-Presentations/RTBuilder.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #RTBuilder } 2 | 3 | { #category : #'*Glamour-Roassal2-Presentations' } 4 | RTBuilder >> openWithToolbar [ 5 | ^ GLMCompositePresentation new 6 | title: 'Roassal painting'; 7 | with: [:composite | 8 | composite roassal2 initializeView: [ self ] ]; 9 | openOn: self 10 | ] 11 | 12 | { #category : #'*Glamour-Roassal2-Presentations' } 13 | RTBuilder >> openWithToolbarEntitled: aTitle [ 14 | ^ self openWithToolbar title: aTitle 15 | ] 16 | -------------------------------------------------------------------------------- /src/Glamour-Roassal2-Presentations/RTView.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #RTView } 2 | 3 | { #category : #'*Glamour-Roassal2-Presentations' } 4 | RTView >> openWithToolbar [ 5 | ^ GLMCompositePresentation new 6 | title: 'Roassal painting'; 7 | with: [:composite | composite roassal2 initializeView: [self ] ]; 8 | openOn: self 9 | ] 10 | 11 | { #category : #'*Glamour-Roassal2-Presentations' } 12 | RTView >> openWithToolbarEntitled: aTitle [ 13 | ^ self openWithToolbar title: aTitle 14 | ] 15 | -------------------------------------------------------------------------------- /src/Glamour-Roassal2-Presentations/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #'Glamour-Roassal2-Presentations' } 2 | -------------------------------------------------------------------------------- /src/IntelPowerGadget/ForceBasedLayout.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #ForceBasedLayout, 3 | #superclass : #MacroBenchmark, 4 | #category : #'IntelPowerGadget-Benchmarks' 5 | } 6 | 7 | { #category : #hooks } 8 | ForceBasedLayout >> execute [ 9 | "This method contains a piece of code to execute" 10 | | b | 11 | b := RTMondrian new. 12 | b nodes: (1 to: 5000). 13 | b edges connectFrom: [ :v | v // 2 ]. 14 | b layout force. 15 | b build 16 | ] 17 | -------------------------------------------------------------------------------- /src/IntelPowerGadget/GarbageCollector1.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GarbageCollector1, 3 | #superclass : #MicroBenchmark, 4 | #category : #'IntelPowerGadget-Benchmarks' 5 | } 6 | 7 | { #category : #hooks } 8 | GarbageCollector1 >> execute [ 9 | "This method contains a piece of code to execute" 10 | 500 timesRepeat: [ Array new: 3000000 ] 11 | ] 12 | -------------------------------------------------------------------------------- /src/IntelPowerGadget/GarbageCollector2.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GarbageCollector2, 3 | #superclass : #MicroBenchmark, 4 | #category : #'IntelPowerGadget-Benchmarks' 5 | } 6 | 7 | { #category : #hooks } 8 | GarbageCollector2 >> execute [ 9 | "This method contains a piece of code to execute" 10 | 500 timesRepeat: [ 11 | | arr | 12 | arr := Array new: 3000000. 13 | 1 to: arr size do: [ :i | arr at: i put: 42 ] ] 14 | ] 15 | -------------------------------------------------------------------------------- /src/IntelPowerGadget/GarbageCollector3.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GarbageCollector3, 3 | #superclass : #MicroBenchmark, 4 | #category : #'IntelPowerGadget-Benchmarks' 5 | } 6 | 7 | { #category : #hooks } 8 | GarbageCollector3 >> execute [ 9 | "This method contains a piece of code to execute" 10 | 800000 timesRepeat: [ Array new: 10000 ] 11 | ] 12 | -------------------------------------------------------------------------------- /src/IntelPowerGadget/GarbageCollector4.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GarbageCollector4, 3 | #superclass : #MicroBenchmark, 4 | #category : #'IntelPowerGadget-Benchmarks' 5 | } 6 | 7 | { #category : #hooks } 8 | GarbageCollector4 >> execute [ 9 | "This method contains a piece of code to execute" 10 | 800000 timesRepeat: [ 11 | | arr | 12 | arr := Array new: 10000. 13 | 1 to: arr size do: [ :i | arr at: i put: 42 ] ] 14 | ] 15 | -------------------------------------------------------------------------------- /src/IntelPowerGadget/GraphConstruction.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GraphConstruction, 3 | #superclass : #MacroBenchmark, 4 | #category : #'IntelPowerGadget-Benchmarks' 5 | } 6 | 7 | { #category : #hooks } 8 | GraphConstruction >> execute [ 9 | 10 | | b | 11 | b := RTMondrian new. 12 | b nodes: (1 to: 70000). 13 | b edges connectFrom: [ :v | v // 2 ]. 14 | b layout grid. 15 | b build 16 | ] 17 | -------------------------------------------------------------------------------- /src/IntelPowerGadget/Integer.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #Integer } 2 | 3 | { #category : #'*IntelPowerGadget' } 4 | Integer >> fibonacci [ 5 | " 6 | 44 fibonacci 7 | " 8 | self < 2 ifTrue: [^ self]. 9 | ^ (self - 1) fibonacci + (self - 2) fibonacci 10 | ] 11 | -------------------------------------------------------------------------------- /src/IntelPowerGadget/MacroBenchmark.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #MacroBenchmark, 3 | #superclass : #Benchmark, 4 | #category : #'IntelPowerGadget-Benchmarks' 5 | } 6 | -------------------------------------------------------------------------------- /src/IntelPowerGadget/MicroBenchmark.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #MicroBenchmark, 3 | #superclass : #Benchmark, 4 | #category : #'IntelPowerGadget-Benchmarks' 5 | } 6 | -------------------------------------------------------------------------------- /src/IntelPowerGadget/Plot.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #Plot, 3 | #superclass : #MacroBenchmark, 4 | #category : #'IntelPowerGadget-Benchmarks' 5 | } 6 | 7 | { #category : #hooks } 8 | Plot >> execute [ 9 | 10 | | b ds | 11 | b := RTGrapher new. 12 | ds := RTData new. 13 | ds points: (1 to: 10000 by: 0.3). 14 | b add: ds. 15 | b build 16 | ] 17 | -------------------------------------------------------------------------------- /src/IntelPowerGadget/Recompilation.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #Recompilation, 3 | #superclass : #MacroBenchmark, 4 | #category : #'IntelPowerGadget-Benchmarks' 5 | } 6 | 7 | { #category : #hooks } 8 | Recompilation >> execute [ 9 | 10 timesRepeat: [ 10 | ((RPackageOrganizer default packages select: [ :p | p packageName beginsWith: 'Versionner' ]) flatCollect: #definedClasses) do: #recompile. 11 | ((RPackageOrganizer default packages select: [ :p | p packageName beginsWith: 'Metacello' ]) flatCollect: #definedClasses) do: #recompile 12 | ] 13 | ] 14 | -------------------------------------------------------------------------------- /src/IntelPowerGadget/RecursiveFactorial.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RecursiveFactorial, 3 | #superclass : #MicroBenchmark, 4 | #category : #'IntelPowerGadget-Benchmarks' 5 | } 6 | 7 | { #category : #hooks } 8 | RecursiveFactorial >> execute [ 9 | "This method contains a piece of code to execute" 10 | 3 timesRepeat: [ 70000 factorial ] 11 | ] 12 | -------------------------------------------------------------------------------- /src/IntelPowerGadget/RecursiveFibonacci.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RecursiveFibonacci, 3 | #superclass : #MicroBenchmark, 4 | #category : #'IntelPowerGadget-Benchmarks' 5 | } 6 | 7 | { #category : #'as yet unclassified' } 8 | RecursiveFibonacci >> execute [ 9 | "This method contains a piece of code to execute" 10 | 3 timesRepeat: [ 44 fibonacci ] 11 | ] 12 | -------------------------------------------------------------------------------- /src/IntelPowerGadget/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #IntelPowerGadget } 2 | -------------------------------------------------------------------------------- /src/ProfilerCPP/MooseModel.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #MooseModel } 2 | 3 | { #category : #'*ProfilerCPP' } 4 | MooseModel >> allExecutedPCPPFunction [ 5 | 6 | ^ (self allWithType: PCPPFunction) select: #hasBeenExecuted 7 | ] 8 | 9 | { #category : #'*ProfilerCPP' } 10 | MooseModel >> allPCPPFunction [ 11 | 12 | ^ self allWithType: PCPPFunction 13 | ] 14 | 15 | { #category : #'*ProfilerCPP' } 16 | MooseModel >> allPCPPInstruction [ 17 | 18 | ^ self allWithType: PCPPCall 19 | ] 20 | 21 | { #category : #'*ProfilerCPP' } 22 | MooseModel >> allPCPPSegment [ 23 | 24 | ^ self allWithType: PCPPSegment 25 | ] 26 | -------------------------------------------------------------------------------- /src/ProfilerCPP/PCPPCallGroup.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #PCPPCallGroup, 3 | #superclass : #MooseGroup, 4 | #category : #ProfilerCPP 5 | } 6 | -------------------------------------------------------------------------------- /src/ProfilerCPP/PCPPImportCommand.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #PCPPImportCommand, 3 | #superclass : #MPImportCommand, 4 | #category : #ProfilerCPP 5 | } 6 | 7 | { #category : #'as yet unclassified' } 8 | PCPPImportCommand >> execute [ 9 | 10 | | filePathAsString importer stream | 11 | 12 | stream := UITheme builder fileOpen: 'Import SQL DB file' extensions: #('db'). 13 | filePathAsString := stream fullName. 14 | (filePathAsString isNil or: [ filePathAsString isEmpty ]) ifTrue: [ ^ self ]. 15 | 16 | importer := PCPPImporter new. 17 | importer import: filePathAsString. 18 | importer model name: stream localName. 19 | importer model install. 20 | self addModel: importer model. 21 | 22 | stream close 23 | ] 24 | 25 | { #category : #'as yet unclassified' } 26 | PCPPImportCommand >> label [ 27 | 28 | ^ 'Import SQL-based C++ profiler' 29 | ] 30 | -------------------------------------------------------------------------------- /src/ProfilerCPP/PCPPInstruction.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #PCPPInstruction, 3 | #superclass : #PCPPObject, 4 | #instVars : [ 5 | 'id', 6 | 'segmentId' 7 | ], 8 | #category : #ProfilerCPP 9 | } 10 | 11 | { #category : #'as yet unclassified' } 12 | PCPPInstruction class >> annotation [ 13 | 14 | 15 | ^ self 16 | 17 | ] 18 | 19 | { #category : #accessing } 20 | PCPPInstruction >> id [ 21 | ^ id 22 | ] 23 | 24 | { #category : #accessing } 25 | PCPPInstruction >> id: anObject [ 26 | id := anObject 27 | ] 28 | 29 | { #category : #accessing } 30 | PCPPInstruction >> segmentId [ 31 | ^ segmentId 32 | ] 33 | 34 | { #category : #accessing } 35 | PCPPInstruction >> segmentId: anObject [ 36 | segmentId := anObject 37 | ] 38 | -------------------------------------------------------------------------------- /src/ProfilerCPP/PCPPObject.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #PCPPObject, 3 | #superclass : #MooseEntity, 4 | #category : #ProfilerCPP 5 | } 6 | 7 | { #category : #'as yet unclassified' } 8 | PCPPObject class >> annotation [ 9 | 10 | 11 | ^ self 12 | 13 | ] 14 | 15 | { #category : #'as yet unclassified' } 16 | PCPPObject >> isFunction [ 17 | ^ false 18 | ] 19 | -------------------------------------------------------------------------------- /src/ProfilerCPP/PCPPSegment.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #PCPPSegment, 3 | #superclass : #PCPPObject, 4 | #instVars : [ 5 | 'callId', 6 | 'id' 7 | ], 8 | #category : #ProfilerCPP 9 | } 10 | 11 | { #category : #'as yet unclassified' } 12 | PCPPSegment class >> annotation [ 13 | 14 | 15 | ^ self 16 | 17 | ] 18 | 19 | { #category : #accessing } 20 | PCPPSegment >> callId [ 21 | ^ callId 22 | ] 23 | 24 | { #category : #accessing } 25 | PCPPSegment >> callId: anObject [ 26 | callId := anObject 27 | ] 28 | 29 | { #category : #accessing } 30 | PCPPSegment >> id [ 31 | ^ id 32 | ] 33 | 34 | { #category : #accessing } 35 | PCPPSegment >> id: anObject [ 36 | id := anObject 37 | ] 38 | -------------------------------------------------------------------------------- /src/ProfilerCPP/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #ProfilerCPP } 2 | -------------------------------------------------------------------------------- /src/Roassal2-AnimatedScatterPlot/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #'Roassal2-AnimatedScatterPlot' } 2 | -------------------------------------------------------------------------------- /src/Roassal2-AxisAdapted/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #'Roassal2-AxisAdapted' } 2 | -------------------------------------------------------------------------------- /src/Roassal2-Benchmarks/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #'Roassal2-Benchmarks' } 2 | -------------------------------------------------------------------------------- /src/Roassal2-BoxPlot/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #'Roassal2-BoxPlot' } 2 | -------------------------------------------------------------------------------- /src/Roassal2-Builder-MondrianOLD/RTMondrianShapeBuilder.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTMondrianShapeBuilder, 3 | #superclass : #RTBoundedShapeBuilder, 4 | #category : #'Roassal2-Builder-MondrianOLD' 5 | } 6 | 7 | { #category : #shapes } 8 | RTMondrianShapeBuilder >> circle [ 9 | super circle 10 | withBorder 11 | ] 12 | 13 | { #category : #shapes } 14 | RTMondrianShapeBuilder >> defaultColor [ 15 | ^ Color white 16 | ] 17 | 18 | { #category : #shapes } 19 | RTMondrianShapeBuilder >> rectangle [ 20 | ^ super rectangle withBorder 21 | ] 22 | -------------------------------------------------------------------------------- /src/Roassal2-Builder-MondrianOLD/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #'Roassal2-Builder-MondrianOLD' } 2 | -------------------------------------------------------------------------------- /src/Roassal2-Calendar/RTLayoutBuilder.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #RTLayoutBuilder } 2 | 3 | { #category : #'*Roassal2-Calendar' } 4 | RTLayoutBuilder >> date [ 5 | "Used by RTCalendarBuilder" 6 | layout := RTDateLayout new. 7 | ^ layout 8 | ] 9 | 10 | { #category : #'*Roassal2-Calendar' } 11 | RTLayoutBuilder >> month [ 12 | "Used by RTCalendarBuilder" 13 | layout := RTMonthLayout new. 14 | ^ layout 15 | ] 16 | -------------------------------------------------------------------------------- /src/Roassal2-Calendar/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #'Roassal2-Calendar' } 2 | -------------------------------------------------------------------------------- /src/Roassal2-Core/Behavior.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #Behavior } 2 | 3 | { #category : #'*Roassal2-Core' } 4 | Behavior >> numberOfLinesOfCode [ 5 | "Return the amount of lines of code" 6 | 7 | ^ 5 + ((self rtmethods, self class rtmethods) inject: 0 into: [:sum :el | sum + el numberOfLinesOfCode ]) 8 | ] 9 | 10 | { #category : #'*Roassal2-Core' } 11 | Behavior >> numberOfVariables [ 12 | "Return the number of variables" 13 | 14 | ^ self instVarNames size 15 | ] 16 | -------------------------------------------------------------------------------- /src/Roassal2-Core/BlockClosure.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #BlockClosure } 2 | 3 | { #category : #'*Roassal2-Core' } 4 | BlockClosure >> rtValue: valueOrArray [ 5 | self numArgs = 0 ifTrue: [ ^ self value ]. 6 | self numArgs = 1 ifTrue: [ ^ self value: valueOrArray ]. 7 | 8 | "if I have more than 1 argument, then the valueOrArray is a collection" 9 | valueOrArray isCollection ifFalse: [ self error: 'A block with more than one argument can only be evaluated with a collection ' ]. 10 | 11 | self numArgs = valueOrArray size ifTrue: [ ^ self valueWithArguments: valueOrArray ]. 12 | 13 | self error: 'Incorrect number of arguments' 14 | 15 | ] 16 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTAbstractArrow.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTAbstractArrow, 3 | #superclass : #RTLineDecorationShape, 4 | #category : #'Roassal2-Core-LineDecorations' 5 | } 6 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTAbstractCircle.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTAbstractCircle, 3 | #superclass : #RTLineDecorationShape, 4 | #category : #'Roassal2-Core-LineDecorations' 5 | } 6 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTAbstractDiamond.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTAbstractDiamond, 3 | #superclass : #RTLineDecorationShape, 4 | #category : #'Roassal2-Core-LineDecorations' 5 | } 6 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTAbstractNarrowArrow.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTAbstractNarrowArrow, 3 | #superclass : #RTLineDecorationShape, 4 | #category : #'Roassal2-Core-LineDecorations' 5 | } 6 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTAbstractWeightedCircleLayout.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I am the abstract root class of weighted circle layout. Look at the class comments of my subclasses for more details. 3 | " 4 | Class { 5 | #name : #RTAbstractWeightedCircleLayout, 6 | #superclass : #RTCircleLayout, 7 | #category : #'Roassal2-Core-Layouts' 8 | } 9 | 10 | { #category : #hook } 11 | RTAbstractWeightedCircleLayout >> doExecute: elements [ 12 | "This method is used polymorphically" 13 | ] 14 | 15 | { #category : #hook } 16 | RTAbstractWeightedCircleLayout >> weightSum: elements [ 17 | "Computes the sum of all elements 'weight' or size" 18 | | sum | 19 | sum := 0. 20 | elements 21 | do: [ :each | 22 | sum := sum + (each height) 23 | ]. 24 | ^sum 25 | ] 26 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTCompositeElementAttachPoint.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTCompositeElementAttachPoint, 3 | #superclass : #RTAttachPoint, 4 | #category : #'Roassal2-Core-AttachPoint' 5 | } 6 | 7 | { #category : #'public - hooks' } 8 | RTCompositeElementAttachPoint >> basicEndingPointOf: aRTEdge [ 9 | ^ aRTEdge to encompassingRectangle topCenter 10 | ] 11 | 12 | { #category : #'public - hooks' } 13 | RTCompositeElementAttachPoint >> basicStartingPointOf: aRTEdge [ 14 | ^ aRTEdge from encompassingRectangle bottomCenter 15 | ] 16 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTDecorationItem.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTDecorationItem, 3 | #superclass : #RTObject, 4 | #instVars : [ 5 | 'shape', 6 | 'tooltip', 7 | 'action' 8 | ], 9 | #category : #'Roassal2-Core-Base' 10 | } 11 | 12 | { #category : #accessing } 13 | RTDecorationItem >> action [ 14 | ^ action 15 | ] 16 | 17 | { #category : #accessing } 18 | RTDecorationItem >> action: aOneArgBlock [ 19 | action := aOneArgBlock 20 | ] 21 | 22 | { #category : #accessing } 23 | RTDecorationItem >> element [ 24 | ^ shape element 25 | ] 26 | 27 | { #category : #accessing } 28 | RTDecorationItem >> shape: aRTShape [ 29 | shape := aRTShape 30 | ] 31 | 32 | { #category : #accessing } 33 | RTDecorationItem >> tooltip [ 34 | ^ tooltip 35 | ] 36 | 37 | { #category : #accessing } 38 | RTDecorationItem >> tooltip: aString [ 39 | tooltip := aString 40 | ] 41 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTDiamond.class.st: -------------------------------------------------------------------------------- 1 | " 2 | A RTDiamond is a line decoration. 3 | 4 | -=-=-=-=-=-=-=-=-=-=-=-= 5 | | v e1 e2 l | 6 | v := RTView new. 7 | e1 := (RTEllipse new size: 20) element. 8 | e2 := (RTEllipse new size: 20) element. 9 | e1 @ RTDraggable. 10 | e2 @ RTDraggable. 11 | e2 translateBy: 50 @ 50. 12 | l := (RTLine new + RTDiamond new) edgeFrom: e1 to: e2. 13 | v add: e1; add: e2; add: l. 14 | v open 15 | -=-=-=-=-=-=-=-=-=-=-=-= 16 | " 17 | Class { 18 | #name : #RTDiamond, 19 | #superclass : #RTLineDecoration, 20 | #category : #'Roassal2-Core-LineDecorations' 21 | } 22 | 23 | { #category : #hooks } 24 | RTDiamond >> trachelShapeClass [ 25 | ^ TRDiamondShape 26 | ] 27 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTDirectLayoutTranslator.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTDirectLayoutTranslator, 3 | #superclass : #RTLayoutTranslator, 4 | #category : #'Roassal2-Core-Layouts' 5 | } 6 | 7 | { #category : #testing } 8 | RTDirectLayoutTranslator class >> isDefault [ 9 | ^ true 10 | ] 11 | 12 | { #category : #hook } 13 | RTDirectLayoutTranslator >> translate: element to: newPosition [ 14 | element translateTo: newPosition 15 | ] 16 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTDominanceTreeLayout.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTDominanceTreeLayout, 3 | #superclass : #RTAbstractVerticalTreeLayout, 4 | #category : #'Roassal2-Core-Layouts' 5 | } 6 | 7 | { #category : #'hook-private' } 8 | RTDominanceTreeLayout >> computeChildrenFor: aNode [ 9 | ^ self childrenWithHighestNestingLevelFor: aNode 10 | ] 11 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTEmptyArrow.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTEmptyArrow, 3 | #superclass : #RTAbstractArrow, 4 | #category : #'Roassal2-Core-LineDecorations' 5 | } 6 | 7 | { #category : #hooks } 8 | RTEmptyArrow class >> trachelShapeClass [ 9 | ^ TREmptyArrowHeadShape 10 | ] 11 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTEmptyArrowHead.class.st: -------------------------------------------------------------------------------- 1 | " 2 | A RTEmptyArrowHead is a line decorartion. 3 | 4 | -=-=-=-=-=-=-=-=-=-=-=-= 5 | | v e1 e2 l | 6 | v := RTView new. 7 | e1 := (RTEllipse new size: 20) element. 8 | e2 := (RTEllipse new size: 20) element. 9 | e1 @ RTDraggable. 10 | e2 @ RTDraggable. 11 | e2 translateBy: 50 @ 50. 12 | l := (RTLine new + RTEmptyArrowHead new) edgeFrom: e1 to: e2. 13 | v add: e1; add: e2; add: l. 14 | v open 15 | -=-=-=-=-=-=-=-=-=-=-=-= 16 | 17 | " 18 | Class { 19 | #name : #RTEmptyArrowHead, 20 | #superclass : #RTLineDecoration, 21 | #category : #'Roassal2-Core-LineDecorations' 22 | } 23 | 24 | { #category : #hooks } 25 | RTEmptyArrowHead >> trachelShapeClass [ 26 | ^ TREmptyArrowHeadShape 27 | ] 28 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTEmptyCircle.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTEmptyCircle, 3 | #superclass : #RTAbstractCircle, 4 | #category : #'Roassal2-Core-LineDecorations' 5 | } 6 | 7 | { #category : #hooks } 8 | RTEmptyCircle class >> trachelShapeClass [ 9 | ^ TRCircleHeadShape 10 | ] 11 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTEmptyDiamond.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTEmptyDiamond, 3 | #superclass : #RTAbstractDiamond, 4 | #category : #'Roassal2-Core-LineDecorations' 5 | } 6 | 7 | { #category : #hooks } 8 | RTEmptyDiamond class >> trachelShapeClass [ 9 | ^ TRDiamondShape 10 | ] 11 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTEmptyNarrowArrow.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTEmptyNarrowArrow, 3 | #superclass : #RTAbstractNarrowArrow, 4 | #category : #'Roassal2-Core-LineDecorations' 5 | } 6 | 7 | { #category : #hooks } 8 | RTEmptyNarrowArrow class >> trachelShapeClass [ 9 | ^ TREmptyNarrowArrowHeadShape 10 | ] 11 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTExtensibleLabel.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTExtensibleLabel, 3 | #superclass : #RTLabel, 4 | #category : #'Roassal2-Core-Shapes' 5 | } 6 | 7 | { #category : #hooks } 8 | RTExtensibleLabel >> trachelShapeFor: anElement [ 9 | | shape | 10 | shape := TRExtensibleLabelShape new. 11 | shape text: (self textFor: anElement); 12 | color: (self colorFor: anElement); 13 | position: anElement position; 14 | fontSize: (self heightFor: anElement). 15 | ^ shape 16 | ] 17 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTFilledArrow.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTFilledArrow, 3 | #superclass : #RTAbstractArrow, 4 | #category : #'Roassal2-Core-LineDecorations' 5 | } 6 | 7 | { #category : #hooks } 8 | RTFilledArrow class >> trachelShapeClass [ 9 | ^ TRFilledArrowHeadShape 10 | ] 11 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTFilledCircle.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTFilledCircle, 3 | #superclass : #RTAbstractCircle, 4 | #category : #'Roassal2-Core-LineDecorations' 5 | } 6 | 7 | { #category : #hooks } 8 | RTFilledCircle class >> trachelShapeClass [ 9 | ^ TRFilledCircleHeadShape 10 | ] 11 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTFilledDiamond.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTFilledDiamond, 3 | #superclass : #RTAbstractDiamond, 4 | #category : #'Roassal2-Core-LineDecorations' 5 | } 6 | 7 | { #category : #hooks } 8 | RTFilledDiamond class >> trachelShapeClass [ 9 | ^ TRFilledDiamondShape 10 | ] 11 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTFilledNarrowArrow.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTFilledNarrowArrow, 3 | #superclass : #RTAbstractNarrowArrow, 4 | #category : #'Roassal2-Core-LineDecorations' 5 | } 6 | 7 | { #category : #hooks } 8 | RTFilledNarrowArrow class >> trachelShapeClass [ 9 | ^ TRFilledNarrowArrowHeadShape 10 | ] 11 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTHorizontalDominanceTreeLayout.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTHorizontalDominanceTreeLayout, 3 | #superclass : #RTAbstractHorizontalTreeLayout, 4 | #category : #'Roassal2-Core-Layouts' 5 | } 6 | 7 | { #category : #'hook-private' } 8 | RTHorizontalDominanceTreeLayout >> computeChildrenFor: aNode [ 9 | ^ self childrenWithHighestNestingLevelFor: aNode 10 | ] 11 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTHorizontalTreeLayout.class.st: -------------------------------------------------------------------------------- 1 | " 2 | A ROHorizontalTreeLayout is xxxxxxxxx. 3 | 4 | " 5 | Class { 6 | #name : #RTHorizontalTreeLayout, 7 | #superclass : #RTAbstractHorizontalTreeLayout, 8 | #category : #'Roassal2-Core-Layouts' 9 | } 10 | 11 | { #category : #'hook-private' } 12 | RTHorizontalTreeLayout >> computeChildrenFor: aNode [ 13 | ^ self childrenFor: aNode except: alreadyLayoutedNodes 14 | ] 15 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTIdentityGroup.class.st: -------------------------------------------------------------------------------- 1 | " 2 | This class is useful to contains objects for which their class have overriden #= (e.g., AST Nodes) 3 | " 4 | Class { 5 | #name : #RTIdentityGroup, 6 | #superclass : #RTGroup, 7 | #category : #'Roassal2-Core-Base' 8 | } 9 | 10 | { #category : #public } 11 | RTIdentityGroup >> elementFromModel: anObject [ 12 | "Return an element that corresponds to the object provided as parameter. If none is found, then return nil" 13 | ^ self detect: [ :el | el model == anObject ] ifNone: [ nil ] 14 | ] 15 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTLineDecorationShape.class.st: -------------------------------------------------------------------------------- 1 | " 2 | A DCRTLineDecorationShape contains information about trachel shape used as line heads or tails with DCRTAbstractLineDecoration 3 | 4 | Usage: 5 | DCRTLineHead shape: DCRTEmptyArrow 6 | or 7 | DCRTEmptyArrow asHead 8 | " 9 | Class { 10 | #name : #RTLineDecorationShape, 11 | #superclass : #RTObject, 12 | #category : #'Roassal2-Core-LineDecorations' 13 | } 14 | 15 | { #category : #converting } 16 | RTLineDecorationShape class >> asHead [ 17 | ^ RTLineHead shape: self 18 | ] 19 | 20 | { #category : #converting } 21 | RTLineDecorationShape class >> asTail [ 22 | ^ RTLineTail shape: self 23 | ] 24 | 25 | { #category : #hooks } 26 | RTLineDecorationShape class >> trachelShapeClass [ 27 | ^ TRAbstractLineDecoratorShape 28 | ] 29 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTMockEdge.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTMockEdge, 3 | #superclass : #RTObject, 4 | #instVars : [ 5 | 'from', 6 | 'to' 7 | ], 8 | #category : #'Roassal2-Core-Layouts' 9 | } 10 | 11 | { #category : #accessing } 12 | RTMockEdge >> from [ 13 | ^ from 14 | ] 15 | 16 | { #category : #accessing } 17 | RTMockEdge >> from: aMockElement [ 18 | from := aMockElement 19 | ] 20 | 21 | { #category : #accessing } 22 | RTMockEdge >> to [ 23 | ^ to 24 | ] 25 | 26 | { #category : #accessing } 27 | RTMockEdge >> to: aMockElement [ 28 | to := aMockElement 29 | ] 30 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTNoBehavior.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTNoBehavior, 3 | #superclass : #RTNestingBehavior, 4 | #classVars : [ 5 | 'Instance' 6 | ], 7 | #category : #'Roassal2-Core-Base' 8 | } 9 | 10 | { #category : #accessing } 11 | RTNoBehavior class >> instance [ 12 | Instance ifNil: [ Instance := self new ]. 13 | ^ Instance 14 | ] 15 | 16 | { #category : #hooks } 17 | RTNoBehavior >> on: backElement setNested: elements [ 18 | "Do nothing" 19 | super on: backElement setNested: elements. 20 | ] 21 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTNoDecorationShape.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTNoDecorationShape, 3 | #superclass : #RTLineDecorationShape, 4 | #category : #'Roassal2-Core-LineDecorations' 5 | } 6 | 7 | { #category : #hooks } 8 | RTNoDecorationShape class >> trachelShapeClass [ 9 | ^ TRNoDecoratorShape 10 | ] 11 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTNullLayout.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTNullLayout, 3 | #superclass : #RTLayout, 4 | #category : #'Roassal2-Core-Layouts' 5 | } 6 | 7 | { #category : #hook } 8 | RTNullLayout >> doExecute: elements [ 9 | elements do: [ :e | e translateTo: 0 @ 0 ] 10 | ] 11 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTObject.class.st: -------------------------------------------------------------------------------- 1 | " 2 | Root of most of the Roassal classes. 3 | " 4 | Class { 5 | #name : #RTObject, 6 | #superclass : #Object, 7 | #category : #'Roassal2-Core-Base' 8 | } 9 | 10 | { #category : #'as yet unclassified' } 11 | RTObject class >> basicNew [ 12 | ^ super basicNew 13 | ] 14 | 15 | { #category : #converting } 16 | RTObject >> asGroup [ 17 | 18 | self 19 | deprecated: 'Use #asRTGroup for Roassal3/Pharo9+ compatibility' 20 | on: '2022-03-18' 21 | in: #Pharo9 22 | transformWith: '`@receiver asGroup' -> '`@receiver asRTGroup'. 23 | ^ self asRTGroup 24 | ] 25 | 26 | { #category : #converting } 27 | RTObject >> asRTGroup [ 28 | ^ RTGroup with: self 29 | 30 | ] 31 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTSimpleArrow.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTSimpleArrow, 3 | #superclass : #RTLineDecorationShape, 4 | #category : #'Roassal2-Core-LineDecorations' 5 | } 6 | 7 | { #category : #hooks } 8 | RTSimpleArrow class >> trachelShapeClass [ 9 | ^ TRSimpleArrowShape 10 | ] 11 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTSimpleArrowHead.class.st: -------------------------------------------------------------------------------- 1 | " 2 | A RTSimpleArrowHead is a line decorartion. 3 | 4 | -=-=-=-=-=-=-=-=-=-=-=-= 5 | | v e1 e2 l | 6 | v := RTView new. 7 | e1 := (RTEllipse new size: 20) element. 8 | e2 := (RTEllipse new size: 20) element. 9 | e1 @ RTDraggable. 10 | e2 @ RTDraggable. 11 | e2 translateBy: 50 @ 50. 12 | l := ((RTLine new color: Color red) + (RTSimpleArrowHead new color: Color red)) edgeFrom: e1 to: e2. 13 | v add: e1; add: e2; add: l. 14 | v open 15 | -=-=-=-=-=-=-=-=-=-=-=-= 16 | 17 | " 18 | Class { 19 | #name : #RTSimpleArrowHead, 20 | #superclass : #RTLineDecoration, 21 | #category : #'Roassal2-Core-LineDecorations' 22 | } 23 | 24 | { #category : #hooks } 25 | RTSimpleArrowHead >> trachelShapeClass [ 26 | ^ TRSimpleArrowShape 27 | ] 28 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTTheme.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I hold various default configurations for Roassal such as default colors etc, so each shape doesn't have to set it by itself. 3 | " 4 | Class { 5 | #name : #RTTheme, 6 | #superclass : #RTObject, 7 | #classInstVars : [ 8 | 'current' 9 | ], 10 | #category : #'Roassal2-Core-Base' 11 | } 12 | 13 | { #category : #accessing } 14 | RTTheme class >> current [ 15 | ^ current ifNil: [ current := self new ] 16 | ] 17 | 18 | { #category : #accessing } 19 | RTTheme >> textColor [ 20 | ^ Color gray 21 | ] 22 | 23 | { #category : #accessing } 24 | RTTheme >> textFont [ 25 | ^ TRLabelShape getFontForSize: self textSize 26 | ] 27 | 28 | { #category : #accessing } 29 | RTTheme >> textSize [ 30 | ^ 10 31 | ] 32 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTTopLeftBehavior.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTTopLeftBehavior, 3 | #superclass : #RTNestingBehavior, 4 | #category : #'Roassal2-Core-Base' 5 | } 6 | 7 | { #category : #utility } 8 | RTTopLeftBehavior >> makeElements: elements draggableByTrachelShape: trachelShape [ 9 | | callback | 10 | callback := TRTranslationCallback block: [ :shape :step | 11 | | topLeft | 12 | topLeft := trachelShape encompassingRectangle topLeft. 13 | elements translateTo: topLeft + (elements extent / 2) ]. 14 | trachelShape addCallback: callback 15 | ] 16 | 17 | { #category : #hooks } 18 | RTTopLeftBehavior >> on: backElement setNested: elements [ 19 | "Override this method to express a particular behavior" 20 | self makeElements: elements draggableBy: backElement. 21 | self resize: backElement for: elements 22 | 23 | ] 24 | -------------------------------------------------------------------------------- /src/Roassal2-Core/RTTreeLayout.class.st: -------------------------------------------------------------------------------- 1 | " 2 | A ROTreeLayout is xxxxxxxxx. 3 | 4 | " 5 | Class { 6 | #name : #RTTreeLayout, 7 | #superclass : #RTAbstractVerticalTreeLayout, 8 | #category : #'Roassal2-Core-Layouts' 9 | } 10 | 11 | { #category : #'hook-private' } 12 | RTTreeLayout >> computeChildrenFor: aNode [ 13 | ^ self childrenFor: aNode except: alreadyLayoutedNodes 14 | ] 15 | -------------------------------------------------------------------------------- /src/Roassal2-Core/SequenceableCollection.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #SequenceableCollection } 2 | 3 | { #category : #'*roassal2-core' } 4 | SequenceableCollection >> cumsum [ 5 | "Cumulative sum 6 | #(1 2 3 4 5) cumsum = #(1 3 6 10 15) 7 | " 8 | | sum | 9 | sum := 0. 10 | ^ self collect: [ :v | sum := sum + v. sum ] 11 | 12 | ] 13 | -------------------------------------------------------------------------------- /src/Roassal2-Core/Symbol.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #Symbol } 2 | 3 | { #category : #'*Roassal2-Core' } 4 | Symbol >> rtValue: anObject [ 5 | ^ anObject perform: self 6 | ] 7 | -------------------------------------------------------------------------------- /src/Roassal2-Core/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #'Roassal2-Core' } 2 | -------------------------------------------------------------------------------- /src/Roassal2-DependencyStructuralMatrices/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #'Roassal2-DependencyStructuralMatrices' } 2 | -------------------------------------------------------------------------------- /src/Roassal2-Exporter-Tests/RTHTML5ExporterTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTHTML5ExporterTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Exporter-Tests' 5 | } 6 | 7 | { #category : #tests } 8 | RTHTML5ExporterTest >> testBasic [ 9 | | view stream | 10 | view := RTView new. 11 | view add: RTBox element. 12 | stream := WriteStream on: String new. 13 | [RTHTML5Exporter new 14 | export: view toStream: stream; 15 | insert: view named: 'foo' inPillarStream: stream. 16 | ] ensure: [ 17 | 'roassal.js' asFileReference ensureDelete. 18 | 'foo.html' asFileReference ensureDelete. ] 19 | 20 | 21 | ] 22 | -------------------------------------------------------------------------------- /src/Roassal2-Exporter-Tests/RTHTMLStringConverterTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTHTMLStringConverterTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Exporter-Tests' 5 | } 6 | 7 | { #category : #tests } 8 | RTHTMLStringConverterTest >> testBasic [ 9 | 10 | self assert: (RTHTMLStringConverter new convertString: 'Hello world') equals: 'Hello world' 11 | ] 12 | -------------------------------------------------------------------------------- /src/Roassal2-Exporter-Tests/RTSVGStringConverterTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTSVGStringConverterTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Exporter-Tests' 5 | } 6 | 7 | { #category : #tests } 8 | RTSVGStringConverterTest >> testBasic [ 9 | 10 | self 11 | assert: (RTSVGStringConverter new convertString: '< What''s up? >') 12 | equals: '< What's up? >' 13 | ] 14 | -------------------------------------------------------------------------------- /src/Roassal2-Exporter-Tests/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #'Roassal2-Exporter-Tests' } 2 | -------------------------------------------------------------------------------- /src/Roassal2-Exporter/RTSVGCircleMarker.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTSVGCircleMarker, 3 | #superclass : #RTSVGAbstractMarker, 4 | #category : #'Roassal2-Exporter-SVG' 5 | } 6 | 7 | { #category : #adding } 8 | RTSVGCircleMarker >> addPath: stream [ 9 | 10 | stream nextPutAll: 11 | (' d="M 0, <1p> a <1p>,<1p> 0 1,0 <2p>,0 a <1p>,<1p> 0 1,0 -<2p>,0" ' 12 | expandMacrosWith: (xExtent / 2) rounded with: xExtent) 13 | ] 14 | -------------------------------------------------------------------------------- /src/Roassal2-Exporter/RTSVGExporterExample.class.st: -------------------------------------------------------------------------------- 1 | " 2 | A RTSVGExporterExample is the example class for RTSVGExporter. 3 | " 4 | Class { 5 | #name : #RTSVGExporterExample, 6 | #superclass : #RTObject, 7 | #category : #'Roassal2-Exporter-SVG' 8 | } 9 | 10 | { #category : #simple } 11 | RTSVGExporterExample >> exampleDependencyAnalyzerBuilder [ 12 | 13 | "self new exampleDependencyAnalyzerBuilder" 14 | | b | 15 | b := RTMondrian new. 16 | b nodes: Collection withAllSubclasses. 17 | b edges connectFrom: #superclass. 18 | b layout tree. 19 | ^ b view. 20 | 21 | "This line does the export." 22 | "RTSVGExporter exportBuilderAsSVG: b filename:'exampleDependencyAnalyzerBuilder'." 23 | ] 24 | -------------------------------------------------------------------------------- /src/Roassal2-Exporter/RTSVGStringConverter.class.st: -------------------------------------------------------------------------------- 1 | " 2 | A RTHTMLStringConverter is a class used to fix Strings before using them inside HTML elements. Since many characters need to be translated to its HTML standart encoding 3 | " 4 | Class { 5 | #name : #RTSVGStringConverter, 6 | #superclass : #RTHTMLStringConverter, 7 | #category : #'Roassal2-Exporter-SVG' 8 | } 9 | 10 | { #category : #accessing } 11 | RTSVGStringConverter >> initializeValues [ 12 | 13 | convertions 14 | at: $" put: '"'; 15 | at: $' put: '''; 16 | at: $& put: '&'; 17 | at: $< put: '<'; 18 | at: $> put: '>'; 19 | at: Character cr put: '' 20 | ] 21 | -------------------------------------------------------------------------------- /src/Roassal2-Exporter/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #'Roassal2-Exporter' } 2 | -------------------------------------------------------------------------------- /src/Roassal2-ExporterVW/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #'Roassal2-ExporterVW' } 2 | -------------------------------------------------------------------------------- /src/Roassal2-Heatmap/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #'Roassal2-Heatmap' } 2 | -------------------------------------------------------------------------------- /src/Roassal2-Kiviat/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #'Roassal2-Kiviat' } 2 | -------------------------------------------------------------------------------- /src/Roassal2-OpenStreetMap/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #'Roassal2-OpenStreetMap' } 2 | -------------------------------------------------------------------------------- /src/Roassal2-Plugins-CProjectVisualizer/CPPFolder.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #CPPFolder, 3 | #superclass : #CPPAbstractFile, 4 | #instVars : [ 5 | 'files' 6 | ], 7 | #category : #'Roassal2-Plugins-CProjectVisualizer-Core' 8 | } 9 | 10 | { #category : #adding } 11 | CPPFolder >> addFile: aFile [ 12 | files add: aFile 13 | ] 14 | 15 | { #category : #accessing } 16 | CPPFolder >> files [ 17 | ^ files copy 18 | ] 19 | 20 | { #category : #initialization } 21 | CPPFolder >> initialize [ 22 | super initialize. 23 | files := OrderedCollection new 24 | ] 25 | 26 | { #category : #metrics } 27 | CPPFolder >> numberOfFiles [ 28 | ^ files size 29 | ] 30 | -------------------------------------------------------------------------------- /src/Roassal2-Plugins-CProjectVisualizer/CPPFolderTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #CPPFolderTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Plugins-CProjectVisualizer-Tests' 5 | } 6 | 7 | { #category : #tests } 8 | CPPFolderTest >> testBasic [ 9 | self assert: CPPFolder new numberOfFiles equals: 0 10 | ] 11 | -------------------------------------------------------------------------------- /src/Roassal2-Plugins-CProjectVisualizer/CPPHeader.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #CPPHeader, 3 | #superclass : #CPPFile, 4 | #instVars : [ 5 | 'module' 6 | ], 7 | #category : #'Roassal2-Plugins-CProjectVisualizer-Core' 8 | } 9 | 10 | { #category : #testing } 11 | CPPHeader >> hasModule [ 12 | ^ module notNil 13 | ] 14 | 15 | { #category : #accessing } 16 | CPPHeader >> module [ 17 | ^ module 18 | ] 19 | 20 | { #category : #accessing } 21 | CPPHeader >> module: anObject [ 22 | module := anObject 23 | ] 24 | -------------------------------------------------------------------------------- /src/Roassal2-Plugins-CProjectVisualizer/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #'Roassal2-Plugins-CProjectVisualizer' } 2 | -------------------------------------------------------------------------------- /src/Roassal2-Plugins-ExamplesVisualizer/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #'Roassal2-Plugins-ExamplesVisualizer' } 2 | -------------------------------------------------------------------------------- /src/Roassal2-Plugins-JavaVisualizer/JVObject.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #JVObject, 3 | #superclass : #Object, 4 | #category : #'Roassal2-Plugins-JavaVisualizer' 5 | } 6 | -------------------------------------------------------------------------------- /src/Roassal2-Plugins-JavaVisualizer/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #'Roassal2-Plugins-JavaVisualizer' } 2 | -------------------------------------------------------------------------------- /src/Roassal2-Plugins-PythonAnalyzer/PyFileTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #PyFileTest, 3 | #superclass : #TestCase, 4 | #category : #'Roassal2-Plugins-PythonAnalyzer-Tests' 5 | } 6 | 7 | { #category : #tests } 8 | PyFileTest >> testFileAndMethodAndClass [ 9 | 10 | | f c m | 11 | f := PyFile new. 12 | c := PyClass new. 13 | m := PyMethod new. 14 | f addClass: c. 15 | c addMethod: m. 16 | 17 | self assert: c file equals: f. 18 | self assert: m file equals: f. 19 | ] 20 | -------------------------------------------------------------------------------- /src/Roassal2-Plugins-PythonAnalyzer/PyFolder.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I am a simple representation of a python folder 3 | " 4 | Class { 5 | #name : #PyFolder, 6 | #superclass : #PyAbstractFile, 7 | #instVars : [ 8 | 'files' 9 | ], 10 | #category : #'Roassal2-Plugins-PythonAnalyzer-Core' 11 | } 12 | 13 | { #category : #adding } 14 | PyFolder >> addFile: aPyFile [ 15 | self assert: [ aPyFile class == PyFile ] description: 'Please provide a PyFile instead'. 16 | files add: aPyFile 17 | ] 18 | 19 | { #category : #accessing } 20 | PyFolder >> files [ 21 | ^ files copy 22 | ] 23 | 24 | { #category : #initialization } 25 | PyFolder >> initialize [ 26 | super initialize. 27 | files := OrderedCollection new 28 | ] 29 | 30 | { #category : #metrics } 31 | PyFolder >> numberOfFiles [ 32 | ^ files size 33 | ] 34 | -------------------------------------------------------------------------------- /src/Roassal2-Plugins-PythonAnalyzer/PyFolderTest.class.st: -------------------------------------------------------------------------------- 1 | " 2 | A PyFolderTest is a test class for testing the behavior of PyFolder 3 | " 4 | Class { 5 | #name : #PyFolderTest, 6 | #superclass : #TestCase, 7 | #category : #'Roassal2-Plugins-PythonAnalyzer-Tests' 8 | } 9 | 10 | { #category : #tests } 11 | PyFolderTest >> testBasic [ 12 | | folder | 13 | folder := PyFolder new. 14 | 15 | self assert: folder numberOfFiles equals: 0. 16 | self assert: folder files size equals: 0 17 | ] 18 | -------------------------------------------------------------------------------- /src/Roassal2-Plugins-PythonAnalyzer/PyFunction.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #PyFunction, 3 | #superclass : #PyAbstractBehavior, 4 | #category : #'Roassal2-Plugins-PythonAnalyzer-Core' 5 | } 6 | -------------------------------------------------------------------------------- /src/Roassal2-Plugins-PythonAnalyzer/PyMethod.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #PyMethod, 3 | #superclass : #PyAbstractBehavior, 4 | #instVars : [ 5 | 'pythonClass' 6 | ], 7 | #category : #'Roassal2-Plugins-PythonAnalyzer-Core' 8 | } 9 | 10 | { #category : #accessing } 11 | PyMethod >> pythonClass [ 12 | ^ pythonClass 13 | ] 14 | 15 | { #category : #accessing } 16 | PyMethod >> pythonClass: aPyClass [ 17 | pythonClass := aPyClass 18 | ] 19 | -------------------------------------------------------------------------------- /src/Roassal2-Plugins-PythonAnalyzer/PyObject.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I am a base class for PyClasses 3 | " 4 | Class { 5 | #name : #PyObject, 6 | #superclass : #RTObject, 7 | #category : #'Roassal2-Plugins-PythonAnalyzer-Core' 8 | } 9 | -------------------------------------------------------------------------------- /src/Roassal2-Plugins-PythonAnalyzer/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #'Roassal2-Plugins-PythonAnalyzer' } 2 | -------------------------------------------------------------------------------- /src/Roassal2-Rules/RTInvocationSequenceRule.class.st: -------------------------------------------------------------------------------- 1 | " 2 | Edges will not be drawn if nodes are not initialized before the invocation of #edges message 3 | " 4 | Class { 5 | #name : #RTInvocationSequenceRule, 6 | #superclass : #ReInvocationSequenceRule, 7 | #category : #'Roassal2-Rules' 8 | } 9 | 10 | { #category : #accessing } 11 | RTInvocationSequenceRule >> group [ 12 | ^ 'Roassal' 13 | ] 14 | 15 | { #category : #'as yet unclassified' } 16 | RTInvocationSequenceRule >> initialize [ 17 | super initialize. 18 | 19 | self 20 | add: #edges requiresPreSend: #nodes:; 21 | add: #moveBehind requiresPostSend: #connectToAll:; 22 | add: #setAsFixed requiresPostSend: #add:; 23 | 24 | add: #(shape shapes) 25 | requiresPostSend: #(edges node: #nodes: #node:forIt: #nodes:forEach:) 26 | ] 27 | -------------------------------------------------------------------------------- /src/Roassal2-Rules/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #'Roassal2-Rules' } 2 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTAMItemTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTAMItemTest, 3 | #superclass : #RTTest, 4 | #instVars : [ 5 | 'item' 6 | ], 7 | #category : #'Roassal2-Tests' 8 | } 9 | 10 | { #category : #running } 11 | RTAMItemTest >> setUp [ 12 | super setUp. 13 | item := RTAMItem new. 14 | 15 | ] 16 | 17 | { #category : #tests } 18 | RTAMItemTest >> testBasic [ 19 | self assert: item itemName equals: 'Unnamed'. 20 | self assert: item tags isEmpty. 21 | self assert: item row equals: 'row'. 22 | self assert: item column equals: 'column'. 23 | self deny: item hasTag. 24 | self assert: item model isNil 25 | ] 26 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTAbstractGrapherDecoratorTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTAbstractGrapherDecoratorTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests-Builder-Grapher' 5 | } 6 | 7 | { #category : #tests } 8 | RTAbstractGrapherDecoratorTest >> testDatasetValues [ 9 | | b ds1 ds2 deco | 10 | b := RTGrapher new. 11 | ds1 := RTData new. 12 | ds1 points: #(2 4 6). 13 | b add: ds1. 14 | ds2 := RTData new. 15 | ds2 points: #(1 3 5). 16 | b add: ds2. 17 | deco := RTAverageDecorator new. 18 | b addDecorator: deco. 19 | b build. 20 | self assert: deco datasets asSet equals: (Set with: ds1 with: ds2). 21 | deco dataset: ds1. 22 | self assert: deco datasets asSet equals: (Set with: ds1) 23 | ] 24 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTAnimatedScatterPlotTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTAnimatedScatterPlotTest, 3 | #superclass : #RTTest, 4 | #instVars : [ 5 | 'b' 6 | ], 7 | #category : #'Roassal2-Tests' 8 | } 9 | 10 | { #category : #running } 11 | RTAnimatedScatterPlotTest >> setUp [ 12 | super setUp. 13 | b := RTAnimatedScatterPlot new. 14 | ] 15 | 16 | { #category : #tests } 17 | RTAnimatedScatterPlotTest >> testDefault [ 18 | self assert: b numberOfTables = 0. 19 | self assert: b frame = 1. 20 | ] 21 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTArrowedLineTest.class.st: -------------------------------------------------------------------------------- 1 | " 2 | A RTArrowedLineTest is a test class for testing the behavior of RTArrowedLine 3 | " 4 | Class { 5 | #name : #RTArrowedLineTest, 6 | #superclass : #RTTest, 7 | #category : #'Roassal2-Tests-ShapesAndBuilder' 8 | } 9 | 10 | { #category : #tests } 11 | RTArrowedLineTest >> testBasic [ 12 | | s e1 e2 edge | 13 | s := RTArrowedLine new. 14 | e1 := RTBox element. 15 | e2 := RTBox element. 16 | edge := s edgeFrom: e1 to: e2. 17 | self assert: edge from equals: e1. 18 | self assert: edge to equals: e2. 19 | ] 20 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTCacheTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTCacheTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests' 5 | } 6 | 7 | { #category : #tests } 8 | RTCacheTest >> testBasic [ 9 | 10 | | v es form | 11 | v := RTView new. 12 | es := (RTEllipse new size: 20) elementsOn: (1 to: 20). 13 | v addAll: es. 14 | RTHorizontalLineLayout on: es. 15 | 16 | self assert: v numberOfElements equals: 20. 17 | RTCache new cacheElements: es. 18 | self assert: v numberOfElements equals: 1. 19 | self assert: v elements anyOne class equals: RTElement. 20 | self assert: v elements anyOne shape class equals: RTBitmap. 21 | self assert: v elements anyOne trachelShape form class equals: TRPlatform current formClass. 22 | 23 | form := v elements anyOne trachelShape form. 24 | self assert: form extent equals: es extent 25 | ] 26 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTCellLayoutTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTCellLayoutTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests' 5 | } 6 | 7 | { #category : #tests } 8 | RTCellLayoutTest >> testBasic [ 9 | 10 | | v es | 11 | v := RTView new. 12 | es := RTBox elementsOn: (1 to: 20). 13 | v addAll: es. 14 | RTCellLayout on: es. 15 | 16 | self assert: es sixth position x equals: es first position x 17 | ] 18 | 19 | { #category : #tests } 20 | RTCellLayoutTest >> testOnEmpty [ 21 | 22 | RTCellLayout on: Array new 23 | ] 24 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTCircleLayoutTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTCircleLayoutTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests' 5 | } 6 | 7 | { #category : #tests } 8 | RTCircleLayoutTest >> testEmptyLayout [ 9 | 10 | RTCircleLayout on: #() 11 | ] 12 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTCircularTreeMapTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTCircularTreeMapTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests' 5 | } 6 | 7 | { #category : #tests } 8 | RTCircularTreeMapTest >> testBasic [ 9 | 10 | 11 | | b | 12 | b := RTCircularTreeMapBuilder new. 13 | b shape 14 | color: Color transparent; 15 | borderWidth: 1. 16 | b 17 | baseradius: 400; 18 | weight: [:n | n]. 19 | b explore: 1 20 | using: [:n | n< 3 ifTrue: [Array with: n+1 with: n+2] ifFalse: [ #() ] ]. 21 | 22 | b build. 23 | 24 | ] 25 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTCollectionExtensionTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTCollectionExtensionTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests-Core' 5 | } 6 | 7 | { #category : #tests } 8 | RTCollectionExtensionTest >> testBasic [ 9 | 10 | self assert: ((#(5 4 1 5 2) sortedAs: #squared) asArray = #(1 2 4 5 5) ) 11 | ] 12 | 13 | { #category : #tests } 14 | RTCollectionExtensionTest >> testReverseBasic [ 15 | 16 | self assert: ((#(5 4 1 5 2) reverseSortedAs: #squared) asArray = #(1 2 4 5 5) reverse ) 17 | ] 18 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTCursorFollowerTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTCursorFollowerTest, 3 | #superclass : #RTTest, 4 | #instVars : [ 5 | 'b' 6 | ], 7 | #category : #'Roassal2-Tests-Builder-Grapher-Decorators' 8 | } 9 | 10 | { #category : #running } 11 | RTCursorFollowerTest >> setUp [ 12 | | ds | 13 | super setUp. 14 | b := RTGrapher new. 15 | ds := RTData new. 16 | ds points: #(5 10 6 2 -2.5). 17 | b add: ds. 18 | 19 | ] 20 | 21 | { #category : #tests } 22 | RTCursorFollowerTest >> testIsPointOverTheBuilder [ 23 | | follower | 24 | follower := RTCursorFollower new. 25 | b addDecorator: follower. 26 | b build. 27 | 28 | self assert: (follower convertPointForGraph: 5 @ 4) equals: (5 @ -4). 29 | self assert: (follower convertPointForGraph: 5 @ -4) equals: (5 @ 4). 30 | 31 | self assert: (follower isPointOverTheBuilder: 0 @ 0) 32 | ] 33 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTDoubleGrapherBuilderTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTDoubleGrapherBuilderTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests-Builder-Grapher' 5 | } 6 | 7 | { #category : #tests } 8 | RTDoubleGrapherBuilderTest >> testExample [ 9 | | b ds | 10 | b := RTDoubleGrapher new. 11 | b extent: 300 @ 200. 12 | 13 | ds := RTData new. 14 | ds points: #(4 3 2 2). 15 | ds barShape width: 40. 16 | b add: ds. 17 | 18 | ds := RTData new. 19 | ds points: (10 to: 13). 20 | ds dotShape color: Color blue. 21 | ds connectColor: Color red. 22 | b addRight: ds. 23 | 24 | b axisX noLabel. 25 | b axisYRight color: Color red. 26 | b build. 27 | 28 | ] 29 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTDoubleScrollBarTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTDoubleScrollBarTest, 3 | #superclass : #RTTest, 4 | #instVars : [ 5 | 'view' 6 | ], 7 | #category : #'Roassal2-Tests' 8 | } 9 | 10 | { #category : #running } 11 | RTDoubleScrollBarTest >> setUp [ 12 | super setUp. 13 | view := RTView new 14 | ] 15 | 16 | { #category : #tests } 17 | RTDoubleScrollBarTest >> testBasic [ 18 | view @ RTDoubleScrollBar 19 | ] 20 | 21 | { #category : #tests } 22 | RTDoubleScrollBarTest >> testBasic02 [ 23 | 24 | | es | 25 | es := (RTBox new size: #yourself) elementsOn: (0 to: 1000 by: 100). 26 | view addAll: es. 27 | RTFlowLayout on: es. 28 | view @ RTDoubleScrollBar 29 | ] 30 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTDragAndDroppableTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTDragAndDroppableTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests-Core' 5 | } 6 | 7 | { #category : #tests } 8 | RTDragAndDroppableTest >> testDefault [ 9 | 10 | | dnd | 11 | dnd := RTDragAndDroppable new. 12 | self assert: dnd numberOfHosts equals: 0. 13 | dnd host: RTElement new. 14 | dnd host: RTElement new. 15 | self assert: dnd numberOfHosts equals: 2. 16 | ] 17 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTDynamicEqualizerGrapherTest.class.st: -------------------------------------------------------------------------------- 1 | " 2 | A RTDynamicEqualizerGrapherTest is a test class for testing the behavior of RTDynamicEqualizerGrapher 3 | " 4 | Class { 5 | #name : #RTDynamicEqualizerGrapherTest, 6 | #superclass : #RTTest, 7 | #instVars : [ 8 | 'b' 9 | ], 10 | #category : #'Roassal2-Tests-Builder-Grapher' 11 | } 12 | 13 | { #category : #running } 14 | RTDynamicEqualizerGrapherTest >> setUp [ 15 | super setUp. 16 | b := RTDynamicEqualizerGrapher new 17 | ] 18 | 19 | { #category : #tests } 20 | RTDynamicEqualizerGrapherTest >> testBasic [ 21 | self assert: b numberOfMetrics equals: 0 22 | ] 23 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTDynamicGrapherTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTDynamicGrapherTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests-Builder-Grapher' 5 | } 6 | 7 | { #category : #tests } 8 | RTDynamicGrapherTest >> testBasic [ 9 | 10 | | b | 11 | b := RTDynamicGrapher new. 12 | b maxX: 100. 13 | b maxY: 100. 14 | 15 | b x: #x; y: #y. 16 | 17 | b build. 18 | 19 | b shape circle color: (Color red alpha: 0.3). 20 | b addAll: ((1 to: 10) collect: [ :i | (100 atRandom @ 100 atRandom) ]). 21 | b view 22 | ] 23 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTEllipseTest.class.st: -------------------------------------------------------------------------------- 1 | " 2 | A RTEllipseTest is a test class for testing the behavior of RTEllipse 3 | " 4 | Class { 5 | #name : #RTEllipseTest, 6 | #superclass : #RTTest, 7 | #category : #'Roassal2-Tests-ShapesAndBuilder' 8 | } 9 | 10 | { #category : #tests } 11 | RTEllipseTest >> testBorderWidth [ 12 | 13 | self assert: (RTEllipse new borderWidth rtValue: RTElement new) equals: TREllipseShape defaultStrokeWidth 14 | ] 15 | 16 | { #category : #tests } 17 | RTEllipseTest >> testBorderWidth02 [ 18 | 19 | self assert: (RTEllipse new borderWidthFor: RTElement new) equals: TREllipseShape defaultStrokeWidth 20 | ] 21 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTEventForwarderTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTEventForwarderTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests-Core' 5 | } 6 | 7 | { #category : #tests } 8 | RTEventForwarderTest >> testBasic [ 9 | | v e | 10 | v := RTView new. 11 | e := RTBox element. 12 | e @ RTEventForwarder. 13 | v add: e. 14 | 15 | self assert: v canvas camera position equals: 0 @ 0. 16 | ] 17 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTExperimentalExampleTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTExperimentalExampleTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests' 5 | } 6 | 7 | { #category : #tests } 8 | RTExperimentalExampleTest >> testBasic [ 9 | "Should not raise an error" 10 | | view | 11 | view := RTExperimentalExample new exampleClusterBezierAndSlider. 12 | view canvas buildMorph drawOnMockCanvas 13 | ] 14 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTExtensibleLabelTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTExtensibleLabelTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests-Core' 5 | } 6 | 7 | { #category : #tests } 8 | RTExtensibleLabelTest >> testBasic [ 9 | | v s e | 10 | v := RTView new. 11 | s := RTExtensibleLabel new. 12 | e := s elementOn: 'Hello World'. 13 | v add: e. 14 | ] 15 | 16 | { #category : #tests } 17 | RTExtensibleLabelTest >> testBasicWithExtention [ 18 | | v s e | 19 | v := RTView new. 20 | s := RTExtensibleLabel new. 21 | e := s elementOn: 'Hello World'. 22 | e extent: 50 @ 50. 23 | v add: e. 24 | ] 25 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTExtensionTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTExtensionTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests-ShapesAndBuilder' 5 | } 6 | 7 | { #category : #tests } 8 | RTExtensionTest >> testIsReferencedBy [ 9 | 10 | self deny: (String superclass isReferencedBy: self class). 11 | self assert: (String isReferencedBy: Object) 12 | ] 13 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTFocusElementTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTFocusElementTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests' 5 | } 6 | 7 | { #category : #tests } 8 | RTFocusElementTest >> testBasic [ 9 | 10 | | v e | 11 | v := RTView new. 12 | e := (RTBox new size: 50) element. 13 | e @ RTFocusElement. 14 | v add: e. 15 | 16 | e announce: TRMouseDoubleClick. 17 | ] 18 | 19 | { #category : #tests } 20 | RTFocusElementTest >> testBasic02 [ 21 | 22 | | v e | 23 | v := RTView new. 24 | e := (RTBox new size: 50) element. 25 | e @ RTFocusElement animated. 26 | v add: e. 27 | 28 | e announce: TRMouseDoubleClick. 29 | ] 30 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTGridViewTest.class.st: -------------------------------------------------------------------------------- 1 | " 2 | A RTGridViewTest is a test class for testing the behavior of RTGridView 3 | " 4 | Class { 5 | #name : #RTGridViewTest, 6 | #superclass : #RTTest, 7 | #category : #'Roassal2-Tests-ShapesAndBuilder' 8 | } 9 | 10 | { #category : #tests } 11 | RTGridViewTest >> testBasic [ 12 | | gridView | 13 | gridView := RTGridView new. 14 | self assert: gridView gridSize equals: RTGridView defaultGridSize. 15 | self assert: gridView color equals: RTGridView defaultColor. 16 | ] 17 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTHorizontalTickLinePluginTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTHorizontalTickLinePluginTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests-Builder-Grapher' 5 | } 6 | 7 | { #category : #tests } 8 | RTHorizontalTickLinePluginTest >> testDefault [ 9 | 10 | | b p | 11 | b := RTGrapher new. 12 | p := RTHorizontalTickLineDecorator new. 13 | p builder: b. 14 | p lineFrom: 10 @ 10 to: 20 @ 20. 15 | ] 16 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTKiviatBuilderTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTKiviatBuilderTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests' 5 | } 6 | 7 | { #category : #tests } 8 | RTKiviatBuilderTest >> testBasic [ 9 | | b | 10 | b := RTKiviatBuilder new. 11 | b shapes: ((RTColorPalette qualitative colors: 12 scheme:'Paired') do: [:c | c alpha: 0.3]). 12 | b objects: RTAbstractCircleLayout withAllSubclasses. 13 | b addMetric: #numberOfLinesOfCode. 14 | b addMetric: #numberOfMethods. 15 | b addMetric: #numberOfVariables. 16 | 17 | b activateAxisTitle. 18 | 19 | b build. 20 | 21 | b recordElement: (b view elements detect: [ :e | e shape class == RTEllipse ]). 22 | 23 | ] 24 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTLayoutTranslatorTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTLayoutTranslatorTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests' 5 | } 6 | 7 | { #category : #tests } 8 | RTLayoutTranslatorTest >> testDefault [ 9 | 10 | RTLayoutTranslator allSubclasses detect: #isDefault. 11 | RTLayoutTranslator allSubclasses reverse detect: #isDefault. 12 | ] 13 | 14 | { #category : #tests } 15 | RTLayoutTranslatorTest >> testIsDefault [ 16 | 17 | self deny: RTLayoutTranslator isDefault 18 | ] 19 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTLineTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTLineTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests-Core' 5 | } 6 | 7 | { #category : #tests } 8 | RTLineTest >> testBasic [ 9 | 10 | | e1 e2 l edge | 11 | e1 := RTBox elementOn: 5. 12 | e2 := RTBox elementOn: 10. 13 | 14 | l := RTLine new. 15 | l widthElement: [ :anEdge | anEdge from model ]. 16 | edge := l edgeFrom: e1 to: e2. 17 | 18 | self assert: edge trachelShape width equals: 5 19 | ] 20 | 21 | { #category : #tests } 22 | RTLineTest >> testBasicError [ 23 | 24 | | arrow | 25 | arrow := RTArrowedLine new 26 | color: Color red; 27 | edgeFrom: RTElement new to: RTElement new; 28 | withOffsetIfMultiple. 29 | self should: [ arrow element ] raise: Error 30 | ] 31 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTMenuActivableTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTMenuActivableTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests-Core' 5 | } 6 | 7 | { #category : #tests } 8 | RTMenuActivableTest >> testHasInteraction [ 9 | 10 | | e | 11 | e := RTElement new. 12 | self deny: (e hasInteraction: RTMenuActivable). 13 | e @ RTMenuActivable. 14 | self assert: (e hasInteraction: RTMenuActivable). 15 | ] 16 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTMethodAgeTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTMethodAgeTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests' 5 | } 6 | 7 | { #category : #tests } 8 | RTMethodAgeTest >> testMethodAge [ 9 | self assert: RTAbstractElementShape computeYoungestMethod notNil 10 | ] 11 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTMondrianFrameTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTMondrianFrameTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests' 5 | } 6 | 7 | { #category : #tests } 8 | RTMondrianFrameTest >> testDefault [ 9 | 10 | self assert: RTMondrianFrame new elements isEmpty 11 | ] 12 | 13 | { #category : #tests } 14 | RTMondrianFrameTest >> testDefaultDepth [ 15 | 16 | self assert: RTMondrianFrame new depth equals: 1 17 | ] 18 | 19 | { #category : #tests } 20 | RTMondrianFrameTest >> testDefaultElements [ 21 | 22 | self assert: RTMondrianFrame new elements isEmpty 23 | ] 24 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTMultiColoredLineTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTMultiColoredLineTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests-Core' 5 | } 6 | 7 | { #category : #tests } 8 | RTMultiColoredLineTest >> testBasic [ 9 | 10 | | v elem1 elem2 edge| 11 | v := RTView new. 12 | elem1 := (RTEllipse new color: (Color blue alpha:0.6); size:10) elementOn: 1. 13 | elem2 := (RTEllipse new color: (Color blue alpha:0.6); size:10) elementOn: 2. 14 | elem2 translateBy: 200@0. 15 | v add: elem1. 16 | v add: elem2. 17 | edge := RTEdge from:elem1 to:elem2. 18 | v add: (edge + (RTMultiColoredLine new colors: (RTColorPalette qualitative colors: 12 scheme:'Paired'); colorShape)). 19 | 20 | 21 | ] 22 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTNameCloudTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTNameCloudTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests' 5 | } 6 | 7 | { #category : #tests } 8 | RTNameCloudTest >> testBasic [ 9 | | b | 10 | b := RTNameCloud new. 11 | b addString: 'open 12 | 13 | | v shape | 14 | v := RTView new. 15 | shape := RTLabel new height: [ :assoc | assoc value ]; text: #key. 16 | v addAll: (shape elementsOn: table associations). 17 | RTFlowLayout on: v elements. 18 | v open'. 19 | b build. 20 | self assert: b view numberOfElements > 0. 21 | ] 22 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTOptimizedForceBasedLayoutTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTOptimizedForceBasedLayoutTest, 3 | #superclass : #RTForceBasedLayoutTest, 4 | #category : #'Roassal2-Tests-ShapesAndBuilder' 5 | } 6 | 7 | { #category : #tests } 8 | RTOptimizedForceBasedLayoutTest >> classToTest [ 9 | ^ RTOptimizedForceBasedLayout 10 | ] 11 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTPolygonTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTPolygonTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests-Core' 5 | } 6 | 7 | { #category : #tests } 8 | RTPolygonTest >> testBasic [ 9 | RTView new add: RTPolygon element. 10 | ] 11 | 12 | { #category : #tests } 13 | RTPolygonTest >> testBasic02 [ 14 | RTView new add: (RTPolygon new vertices: (Array with: 0 @ 0 with: 50 @ 50 with: 25 @ 75)) element. 15 | ] 16 | 17 | { #category : #tests } 18 | RTPolygonTest >> testBasic03 [ 19 | self assert: (RTPolygon new verticesFor: RTElement new) isEmpty 20 | ] 21 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTRadialTreeLayoutTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTRadialTreeLayoutTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests' 5 | } 6 | 7 | { #category : #tests } 8 | RTRadialTreeLayoutTest >> testEmptyLayout [ 9 | 10 | RTRadialTreeLayout on: #() 11 | ] 12 | 13 | { #category : #tests } 14 | RTRadialTreeLayoutTest >> testOnGraph [ 15 | "Should not raise an exception" 16 | | b edges | 17 | b := RTMondrian new. 18 | b nodes: (0 to: 20). 19 | edges := b edges 20 | moveBehind; 21 | connectFromAll: [ :v | Array with: v // 2 with: v // 3 ]. 22 | b layout radialTree. 23 | "b layout force." 24 | b build 25 | ] 26 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTRotatedLabelTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTRotatedLabelTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests-Core' 5 | } 6 | 7 | { #category : #tests } 8 | RTRotatedLabelTest >> testBasic [ 9 | 10 | | v shape | 11 | v := RTView new. 12 | shape := RTRotatedLabel new. 13 | shape angleInDegree: [ :cls | cls numberOfMethods negated / 1.5 ]. 14 | shape text: [ :cls | ' ', cls name ]. 15 | shape color: (Color black alpha: 0.2). 16 | v addAll: (shape elementsOn: Collection withAllSubclasses). 17 | 18 | v canvas color: Color white. 19 | 20 | ] 21 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTShapedObjectTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTShapedObjectTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests-Core' 5 | } 6 | 7 | { #category : #tests } 8 | RTShapedObjectTest >> testEmittingEvent [ 9 | 10 | | el t | 11 | t := 0. 12 | el := RTBox element. 13 | el when: TRMouseEnter do: [ :evt | t := t + 1 ]. 14 | 15 | self assert: t = 0. 16 | el announce: TRMouseEnter. 17 | self assert: t = 1 18 | 19 | ] 20 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTSimonTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTSimonTest, 3 | #superclass : #RTTest, 4 | #instVars : [ 5 | 'builder' 6 | ], 7 | #category : #'Roassal2-Tests' 8 | } 9 | 10 | { #category : #running } 11 | RTSimonTest >> setUp [ 12 | super setUp. 13 | builder := RTSimon new 14 | ] 15 | 16 | { #category : #tests } 17 | RTSimonTest >> testBasic [ 18 | 19 | builder models: (Array with: 10 with: 20 with: 30). 20 | self assert: builder view numberOfElements equals: 3. 21 | 22 | self assert: builder view elements anyOne shape class == RTArc. 23 | ] 24 | 25 | { #category : #tests } 26 | RTSimonTest >> testDefault [ 27 | 28 | self assert: builder view numberOfElements equals: 0 29 | ] 30 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTSugiyamaLayoutTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTSugiyamaLayoutTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests' 5 | } 6 | 7 | { #category : #'as yet unclassified' } 8 | RTSugiyamaLayoutTest >> testBasic [ 9 | 10 | | v es | 11 | v := RTView new. 12 | es := RTBox elementsOn: (1 to: 10). 13 | v addAll: es. 14 | RTEdgeBuilder new 15 | view: v; 16 | connectFrom: [ :value | value // 2 ]. 17 | RTSugiyamaLayout on: v elements. 18 | 19 | ] 20 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTSunburstBuilderTest.class.st: -------------------------------------------------------------------------------- 1 | " 2 | A RTSunburstBuilderTest is a test class for testing the behavior of RTSunburstBuilder 3 | " 4 | Class { 5 | #name : #RTSunburstBuilderTest, 6 | #superclass : #RTTest, 7 | #category : #'Roassal2-Tests-ShapesAndBuilder' 8 | } 9 | 10 | { #category : #tests } 11 | RTSunburstBuilderTest >> testBasic [ 12 | | b | 13 | b := RTSunburstBuilder new. 14 | self assert: b layout layout class equals: RTSunburstConstantWidthLayout. 15 | self assert: b shape current class equals: RTArc. 16 | self assert: b elements isCollection. 17 | ] 18 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTTreeMapTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTTreeMapTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2-Tests' 5 | } 6 | 7 | { #category : #'as yet unclassified' } 8 | RTTreeMapTest >> testEmpty [ 9 | 10 | RTTreeMapBuilder new build 11 | ] 12 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/RTUnoptimizedComposerTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTUnoptimizedComposerTest, 3 | #superclass : #RTComposerTest, 4 | #category : #'Roassal2-Tests' 5 | } 6 | 7 | { #category : #running } 8 | RTUnoptimizedComposerTest >> setUp [ 9 | super setUp. 10 | composer := RTComposer new. 11 | view := composer view 12 | ] 13 | -------------------------------------------------------------------------------- /src/Roassal2-Tests/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #'Roassal2-Tests' } 2 | -------------------------------------------------------------------------------- /src/Roassal2-UML/RTExperimentalExample.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #RTExperimentalExample } 2 | 3 | { #category : #'*Roassal2-UML' } 4 | RTExperimentalExample >> exampleRadarOnUML [ 5 | 6 | | view radar | 7 | view := RTUMLExample new exampleNoInstVar. 8 | radar := RTRadar on: view. 9 | "radar build. temporal disable" 10 | ^ view 11 | ] 12 | -------------------------------------------------------------------------------- /src/Roassal2-UML/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #'Roassal2-UML' } 2 | -------------------------------------------------------------------------------- /src/Roassal2/AthensCairoCanvas.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #AthensCairoCanvas } 2 | 3 | { #category : #'*roassal2' } 4 | AthensCairoCanvas >> fillPreserve [ 5 | 6 | ^ self nbCall: #(#void #cairo_fill_preserve #(#self)) 7 | 8 | 9 | ] 10 | 11 | { #category : #'*roassal2' } 12 | AthensCairoCanvas >> textPath: anUTF8String [ 13 | "A drawing operator that generates the shape from a string of UTF-8 characters, rendered according to the current font_face, font_size (font_matrix), and font_options. " 14 | 15 | 16 | ^ self nbCall: #(void cairo_text_path (self, char * anUTF8String )) 17 | 18 | ] 19 | -------------------------------------------------------------------------------- /src/Roassal2/BlockClosure.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #BlockClosure } 2 | 3 | { #category : #'*Roassal2' } 4 | BlockClosure >> initializeElement: aRTElement [ 5 | self value: aRTElement 6 | ] 7 | -------------------------------------------------------------------------------- /src/Roassal2/Object.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #Object } 2 | 3 | { #category : #'*Roassal2' } 4 | Object >> rtValue: anArgument [ 5 | ^ self 6 | ] 7 | -------------------------------------------------------------------------------- /src/Roassal2/Point.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #Point } 2 | 3 | { #category : #'*Roassal2' } 4 | Point class >> r: radius theta: angle [ 5 | ^ (radius * angle cos) @ (radius * angle sin) 6 | ] 7 | -------------------------------------------------------------------------------- /src/Roassal2/RTAbstractBuilder.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTAbstractBuilder, 3 | #superclass : #RTObject, 4 | #category : #'Roassal2-Builder-Common' 5 | } 6 | -------------------------------------------------------------------------------- /src/Roassal2/RTAbstractDraggableView.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTAbstractDraggableView, 3 | #superclass : #RTAbstractInteractionView, 4 | #category : #'Roassal2-Interactions' 5 | } 6 | -------------------------------------------------------------------------------- /src/Roassal2/RTAbstractInteractionView.class.st: -------------------------------------------------------------------------------- 1 | " 2 | Subclasses of myself are interaction for the view 3 | " 4 | Class { 5 | #name : #RTAbstractInteractionView, 6 | #superclass : #RTInteraction, 7 | #category : #'Roassal2-Interactions' 8 | } 9 | -------------------------------------------------------------------------------- /src/Roassal2/RTAbstractLineDecorator.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTAbstractLineDecorator, 3 | #superclass : #RTAbstractGrapherDecorator, 4 | #instVars : [ 5 | 'values' 6 | ], 7 | #category : #'Roassal2-Builder-Grapher-Decorators' 8 | } 9 | 10 | { #category : #adding } 11 | RTAbstractLineDecorator >> add: aValue [ 12 | values add: aValue 13 | ] 14 | 15 | { #category : #adding } 16 | RTAbstractLineDecorator >> addAll: someValues [ 17 | values addAll: someValues 18 | ] 19 | 20 | { #category : #adding } 21 | RTAbstractLineDecorator >> forAllPoints [ 22 | 23 | self addAll: self datasetValues 24 | ] 25 | 26 | { #category : #initialization } 27 | RTAbstractLineDecorator >> initialize [ 28 | super initialize. 29 | values := OrderedCollection new. 30 | ] 31 | -------------------------------------------------------------------------------- /src/Roassal2/RTAccelerationMove.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTAccelerationMove, 3 | #superclass : #RTLinearMove, 4 | #category : #'Roassal2-Animation' 5 | } 6 | 7 | { #category : #public } 8 | RTAccelerationMove >> to: anEndPoint during: seconds on: anElement [ 9 | | position | 10 | element := anElement. 11 | 12 | position := anElement position. 13 | animatedValue := TRVIAnimatedValue new 14 | evaluator: [ :t | position interpolateTo: anEndPoint at: (t sqrt) ]; 15 | timer: (TRVITimer new cycleLength: seconds); 16 | yourself. 17 | 18 | ] 19 | -------------------------------------------------------------------------------- /src/Roassal2/RTAutomaticFlowLayout.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTAutomaticFlowLayout, 3 | #superclass : #RTInteraction, 4 | #instVars : [ 5 | 'elements' 6 | ], 7 | #category : #'Roassal2-Layouts' 8 | } 9 | 10 | { #category : #'as yet unclassified' } 11 | RTAutomaticFlowLayout >> initialize [ 12 | super initialize. 13 | elements := #yourself 14 | ] 15 | 16 | { #category : #'as yet unclassified' } 17 | RTAutomaticFlowLayout >> initializeElement: view [ 18 | view canvas when: TRResizeCanvasEvent do: [ :evt | 19 | RTFlowLayout new maxWidth: evt newExtent x; on: (view elements rtValue: elements) 20 | ]. 21 | ] 22 | -------------------------------------------------------------------------------- /src/Roassal2/RTClipBox.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I am a simple class to clip a part of the canvas 3 | " 4 | Class { 5 | #name : #RTClipBox, 6 | #superclass : #RTBox, 7 | #category : #'Roassal2-Experimental' 8 | } 9 | 10 | { #category : #hooks } 11 | RTClipBox >> trachelShapeClass [ 12 | ^ TRClipBoxShape 13 | ] 14 | -------------------------------------------------------------------------------- /src/Roassal2/RTColoredTextLegendItem.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTColoredTextLegendItem, 3 | #superclass : #RTLegendItem, 4 | #instVars : [ 5 | 'text', 6 | 'model' 7 | ], 8 | #category : #'Roassal2-Builder-Legend' 9 | } 10 | 11 | { #category : #hooks } 12 | RTColoredTextLegendItem >> execute [ 13 | ^ RTGroup new add: 14 | ((self newLabelShape: text) elementOn: model); yourself 15 | ] 16 | 17 | { #category : #accessing } 18 | RTColoredTextLegendItem >> model [ 19 | ^ model 20 | ] 21 | 22 | { #category : #accessing } 23 | RTColoredTextLegendItem >> model: anObject [ 24 | model := anObject 25 | ] 26 | 27 | { #category : #accessing } 28 | RTColoredTextLegendItem >> text [ 29 | ^ text 30 | ] 31 | 32 | { #category : #accessing } 33 | RTColoredTextLegendItem >> text: aStringOrABlockOrASymbol [ 34 | text := aStringOrABlockOrASymbol 35 | ] 36 | -------------------------------------------------------------------------------- /src/Roassal2/RTDataEvolver.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTDataEvolver, 3 | #superclass : #RTObject, 4 | #instVars : [ 5 | 'data', 6 | 'stepGiver' 7 | ], 8 | #category : #'Roassal2-Builder-Map' 9 | } 10 | 11 | { #category : #'as yet unclassified' } 12 | RTDataEvolver >> currentValue [ 13 | ^ self valueAt: stepGiver step. 14 | ] 15 | 16 | { #category : #'as yet unclassified' } 17 | RTDataEvolver >> dataSequence: aSequenceOfData [ 18 | data := aSequenceOfData. 19 | ] 20 | 21 | { #category : #'as yet unclassified' } 22 | RTDataEvolver >> stepGiver: anObject [ 23 | stepGiver := anObject 24 | ] 25 | 26 | { #category : #'as yet unclassified' } 27 | RTDataEvolver >> valueAt: step [ 28 | ^ data at: step 29 | ] 30 | -------------------------------------------------------------------------------- /src/Roassal2/RTDataFramePlugin.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTDataFramePlugin, 3 | #superclass : #RTAbstractPlugin, 4 | #category : #'Roassal2-Plugins' 5 | } 6 | 7 | { #category : #hooks } 8 | RTDataFramePlugin >> description [ 9 | ^ 'DataFrame is a tabular data structures for data analysis' 10 | ] 11 | 12 | { #category : #hooks } 13 | RTDataFramePlugin >> execute [ 14 | Metacello new 15 | baseline: 'DataFrame'; 16 | repository: 'github://PolyMathOrg/DataFrame'; 17 | load. 18 | ] 19 | 20 | { #category : #testing } 21 | RTDataFramePlugin >> isLoaded [ 22 | ^ RPackageOrganizer default includesPackageNamed: 'DataFrame-Core' 23 | 24 | ] 25 | 26 | { #category : #hooks } 27 | RTDataFramePlugin >> label [ 28 | ^ 'Data Frame' 29 | ] 30 | -------------------------------------------------------------------------------- /src/Roassal2/RTDataStudioPlugin.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTDataStudioPlugin, 3 | #superclass : #RTAbstractPlugin, 4 | #category : #'Roassal2-Plugins' 5 | } 6 | 7 | { #category : #hooks } 8 | RTDataStudioPlugin >> description [ 9 | ^ 10 | 'Load extension of GT to support a flexible way to manipulate data. 11 | Currently it is still very early work' 12 | ] 13 | 14 | { #category : #hooks } 15 | RTDataStudioPlugin >> execute [ 16 | Gofer new 17 | smalltalkhubUser: 'ObjectProfile' project: 'DataStudio'; 18 | configurationOf: 'DataStudio'; 19 | loadBleedingEdge. 20 | ] 21 | 22 | { #category : #testing } 23 | RTDataStudioPlugin >> isLoaded [ 24 | ^ RPackageOrganizer default includesPackageNamed: 'DataStudio' 25 | 26 | ] 27 | 28 | { #category : #hooks } 29 | RTDataStudioPlugin >> label [ 30 | ^ 'Data Studio' 31 | ] 32 | -------------------------------------------------------------------------------- /src/Roassal2/RTDraggable.class.st: -------------------------------------------------------------------------------- 1 | " 2 | A RTDraggable is an interaction that make an element draggable using the mouse. 3 | 4 | " 5 | Class { 6 | #name : #RTDraggable, 7 | #superclass : #RTAbstractDraggable, 8 | #category : #'Roassal2-Interactions' 9 | } 10 | 11 | { #category : #public } 12 | RTDraggable class >> groupToDrag: elements [ 13 | ^ self new groupToDrag: elements 14 | ] 15 | 16 | { #category : #vistor } 17 | RTDraggable >> accept: aVisitor with: args [ 18 | aVisitor visitDraggableInteraction: self with: args 19 | ] 20 | 21 | { #category : #hooks } 22 | RTDraggable >> transformDistance: distanceAsPoint forElement: anElement [ 23 | "Nothing to be transformed since there is no restriction here" 24 | ^ distanceAsPoint 25 | ] 26 | -------------------------------------------------------------------------------- /src/Roassal2/RTExampleOpeningEvent.class.st: -------------------------------------------------------------------------------- 1 | " 2 | RTExampleOpeningEvent is an event that is trigger when someone browse an example 3 | " 4 | Class { 5 | #name : #RTExampleOpeningEvent, 6 | #superclass : #Announcement, 7 | #instVars : [ 8 | 'theClass', 9 | 'theSelector', 10 | 'time' 11 | ], 12 | #category : #'Roassal2-ExampleBrowser' 13 | } 14 | 15 | { #category : #accessing } 16 | RTExampleOpeningEvent >> theClass [ 17 | ^ theClass 18 | ] 19 | 20 | { #category : #accessing } 21 | RTExampleOpeningEvent >> theClass: aClassnameAsSymbol [ 22 | theClass := aClassnameAsSymbol 23 | ] 24 | 25 | { #category : #accessing } 26 | RTExampleOpeningEvent >> theSelector [ 27 | ^ theSelector 28 | ] 29 | 30 | { #category : #accessing } 31 | RTExampleOpeningEvent >> theSelector: aMethodNameAsSymbol [ 32 | theSelector := aMethodNameAsSymbol 33 | ] 34 | -------------------------------------------------------------------------------- /src/Roassal2/RTExploraTestTree.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTExploraTestTree, 3 | #superclass : #RTObject, 4 | #instVars : [ 5 | 'left', 6 | 'right', 7 | 'parent' 8 | ], 9 | #category : #'Roassal2-Builder-Explora' 10 | } 11 | 12 | { #category : #accessing } 13 | RTExploraTestTree >> left [ 14 | ^ left 15 | ] 16 | 17 | { #category : #accessing } 18 | RTExploraTestTree >> left: aNode [ 19 | left := aNode 20 | ] 21 | 22 | { #category : #accessing } 23 | RTExploraTestTree >> parent [ 24 | ^ parent 25 | ] 26 | 27 | { #category : #accessing } 28 | RTExploraTestTree >> parent: aNode [ 29 | parent := aNode 30 | ] 31 | 32 | { #category : #accessing } 33 | RTExploraTestTree >> right [ 34 | ^ right 35 | ] 36 | 37 | { #category : #accessing } 38 | RTExploraTestTree >> right: aNode [ 39 | right := aNode 40 | ] 41 | -------------------------------------------------------------------------------- /src/Roassal2/RTFixFontProblemPlugin.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTFixFontProblemPlugin, 3 | #superclass : #RTAbstractPlugin, 4 | #category : #'Roassal2-Plugins' 5 | } 6 | 7 | { #category : #hooks } 8 | RTFixFontProblemPlugin >> description [ 9 | ^ 'Time to time, fonts used in Roassal are abnormaly displayed. It happens on Windows. 10 | When the problem happens, this plugin should fix it.' 11 | ] 12 | 13 | { #category : #testing } 14 | RTFixFontProblemPlugin >> doesItLoadCode [ 15 | ^ false 16 | ] 17 | 18 | { #category : #hooks } 19 | RTFixFontProblemPlugin >> execute [ 20 | 21 | CairoGlyph class removeSelector: #byteAlignment. 22 | CairoGlyph rebuildFieldAccessors. 23 | ] 24 | 25 | { #category : #hooks } 26 | RTFixFontProblemPlugin >> label [ 27 | ^ 'Fix font problem' 28 | ] 29 | -------------------------------------------------------------------------------- /src/Roassal2/RTFixedPopup.class.st: -------------------------------------------------------------------------------- 1 | " 2 | A RTFixedPopup creates a popup, located at a fixed position, in the window. 3 | 4 | " 5 | Class { 6 | #name : #RTFixedPopup, 7 | #superclass : #RTPopup, 8 | #category : #'Roassal2-Interactions' 9 | } 10 | 11 | { #category : #initialization } 12 | RTFixedPopup >> createAndShowPopupFor: element event: event [ 13 | | popup windowSize | 14 | self removeLastPopup. 15 | 16 | popup := self getNewPopupFor: element. 17 | self lastPopup: popup. 18 | 19 | 20 | windowSize := element view canvas extent. 21 | popup translateTo: ((popup width / 2) @ (windowSize y - (popup height / 2))) 22 | "TRConstraint moveAtTheBottomOfTheWindow: popup" 23 | ] 24 | -------------------------------------------------------------------------------- /src/Roassal2/RTGraphVizLayoutPlugin.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTGraphVizLayoutPlugin, 3 | #superclass : #RTAbstractPlugin, 4 | #category : #'Roassal2-Plugins' 5 | } 6 | 7 | { #category : #hooks } 8 | RTGraphVizLayoutPlugin >> description [ 9 | ^ 'A GraphViz layout is a Roassal layout that utilizes algorithms in the GraphViz library to create better (orthogonal) layouts.' 10 | ] 11 | 12 | { #category : #hooks } 13 | RTGraphVizLayoutPlugin >> execute [ 14 | Metacello new 15 | baseline: 'GraphVizLayout'; 16 | repository: 'github://peteruhnak/graphviz-layout:master/repository'; 17 | load 18 | ] 19 | 20 | { #category : #hooks } 21 | RTGraphVizLayoutPlugin >> label [ 22 | ^ 'GraphViz layout' 23 | ] 24 | -------------------------------------------------------------------------------- /src/Roassal2/RTGrapherInteraction.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I am a base class for interactions specific to RTGrapher. 3 | " 4 | Class { 5 | #name : #RTGrapherInteraction, 6 | #superclass : #RTInteraction, 7 | #category : #'Roassal2-Builder-Grapher-Core' 8 | } 9 | 10 | { #category : #testing } 11 | RTGrapherInteraction class >> isAbstract [ 12 | ^ self = RTGrapherInteraction 13 | ] 14 | -------------------------------------------------------------------------------- /src/Roassal2/RTHorizontalAllValuesDecorator.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTHorizontalAllValuesDecorator, 3 | #superclass : #RTAbstractHorizontalValuesDecorator, 4 | #category : #'Roassal2-Builder-Grapher-Decorators' 5 | } 6 | 7 | { #category : #rendering } 8 | RTHorizontalAllValuesDecorator >> render [ 9 | self addAll: self datasetValuesX asSet. 10 | super render. 11 | 12 | ] 13 | -------------------------------------------------------------------------------- /src/Roassal2/RTHorizontalValuesDecorator.class.st: -------------------------------------------------------------------------------- 1 | " 2 | Add ticks at particular values: 3 | 4 | -=-=-=-=-=-=-=-=-=-=-=-= 5 | c := (1 to: 100) collect: [ :i | 50 atRandom @ 50 atRandom ]. 6 | 7 | g := RTGrapher new. 8 | d := RTData new. 9 | d points: c. 10 | d x: #x. 11 | d y: #y. 12 | g add: d. 13 | g axisX noTick. 14 | g axisY noTick. 15 | 16 | g addDecorator: (RTVerticalValuesDecorator new addAll: #(10 25)). 17 | g addDecorator: (RTHorizontalValuesDecorator new addAll: #(10 25)). 18 | g 19 | -=-=-=-=-=-=-=-=-=-=-=-= 20 | " 21 | Class { 22 | #name : #RTHorizontalValuesDecorator, 23 | #superclass : #RTAbstractHorizontalValuesDecorator, 24 | #category : #'Roassal2-Builder-Grapher-Decorators' 25 | } 26 | -------------------------------------------------------------------------------- /src/Roassal2/RTIdentityLineDecorator.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTIdentityLineDecorator, 3 | #superclass : #RTAbstractLineDecorator, 4 | #category : #'Roassal2-Builder-Grapher-Decorators' 5 | } 6 | 7 | { #category : #drawing } 8 | RTIdentityLineDecorator >> render [ 9 | | min max | 10 | min := builder getPixelPositionOf: builder minX @ builder minY. 11 | max := builder getPixelPositionOf: builder maxX @ builder maxY. 12 | 13 | self lineFrom: min to: max 14 | ] 15 | -------------------------------------------------------------------------------- /src/Roassal2/RTInteraction.class.st: -------------------------------------------------------------------------------- 1 | " 2 | A ROInteraction is xxxxxxxxx. 3 | 4 | " 5 | Class { 6 | #name : #RTInteraction, 7 | #superclass : #RTObject, 8 | #category : #'Roassal2-Interactions' 9 | } 10 | 11 | { #category : #public } 12 | RTInteraction class >> initializeElement: element [ 13 | ^ self new initializeElement: element; yourself 14 | ] 15 | 16 | { #category : #visitor } 17 | RTInteraction >> accept: aVisitor with: args [ 18 | aVisitor visitInteraction: self with: args 19 | ] 20 | 21 | { #category : #hooks } 22 | RTInteraction >> initializeElement: element [ 23 | self subclassResponsibility 24 | ] 25 | -------------------------------------------------------------------------------- /src/Roassal2/RTLabelled.class.st: -------------------------------------------------------------------------------- 1 | " 2 | THIS CLASS IS OBSOLETE. PLEASE REFER TO RTLabeled 3 | " 4 | Class { 5 | #name : #RTLabelled, 6 | #superclass : #RTLabeled, 7 | #category : #'Roassal2-Interactions' 8 | } 9 | 10 | { #category : #'instance creation' } 11 | RTLabelled class >> new [ 12 | self deprecated: 'RTLabelled is deprecated. Please use RTLabeled'. 13 | ^ super new 14 | ] 15 | 16 | { #category : #'obsolete class' } 17 | RTLabelled >> OBSOLETECLASS [ 18 | "THIS CLASS IS OBSOLETE. PLEASE REFER TO RTLabeled" 19 | ] 20 | -------------------------------------------------------------------------------- /src/Roassal2/RTLayoutBuilder.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #RTLayoutBuilder } 2 | 3 | { #category : #'*Roassal2' } 4 | RTLayoutBuilder >> sunburstWithArcWidth: aNumber [ 5 | layout := RTSunburstConstantWidthLayout new. 6 | layout arcWidth: aNumber. 7 | ^ layout 8 | ] 9 | 10 | { #category : #'*Roassal2' } 11 | RTLayoutBuilder >> sunburstWithRadius [ 12 | ^ self sunburstWithRadius: 200. 13 | 14 | ] 15 | 16 | { #category : #'*Roassal2' } 17 | RTLayoutBuilder >> sunburstWithRadius: radius [ 18 | layout := RTSunburstExtentLayout new. 19 | layout extent: radius asPoint * 2. 20 | ^ layout 21 | ] 22 | -------------------------------------------------------------------------------- /src/Roassal2/RTLazyInteraction.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I am an abstract interaction that postpones the element initialization until it is already connected to the view. 3 | " 4 | Class { 5 | #name : #RTLazyInteraction, 6 | #superclass : #RTInteraction, 7 | #category : #'Roassal2-Interactions' 8 | } 9 | 10 | { #category : #hooks } 11 | RTLazyInteraction >> initializeElement: anElement [ 12 | "postpone initialization if the element is not yet added to the view" 13 | 14 | anElement view 15 | ifNil: [ anElement 16 | addCallback: (TRAddedCallback block: [ :evt | self lazyInitializeElement: anElement ]) ] 17 | ifNotNil: [ self lazyInitializeElement: anElement ] 18 | ] 19 | 20 | { #category : #initialization } 21 | RTLazyInteraction >> lazyInitializeElement: anElement [ 22 | self subclassResponsibility 23 | ] 24 | -------------------------------------------------------------------------------- /src/Roassal2/RTLinePathBuilder.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #RTLinePathBuilder } 2 | 3 | { #category : #'*Roassal2' } 4 | RTLinePathBuilder >> rtValue: anArgument [ 5 | | value | 6 | value := anArgument. 7 | (anArgument isKindOf: Association) 8 | ifTrue: [ 9 | self tension: anArgument value. 10 | value := anArgument key. ]. 11 | 12 | ^ self interpolate: value. 13 | ] 14 | -------------------------------------------------------------------------------- /src/Roassal2/RTLinearClosedPathBuilder.class.st: -------------------------------------------------------------------------------- 1 | " 2 | a Builder for points that return points with Z command 3 | " 4 | Class { 5 | #name : #RTLinearClosedPathBuilder, 6 | #superclass : #RTLinePathBuilder, 7 | #category : #'Roassal2-Experimental' 8 | } 9 | 10 | { #category : #testing } 11 | RTLinearClosedPathBuilder >> closed [ 12 | ^ true 13 | ] 14 | 15 | { #category : #public } 16 | RTLinearClosedPathBuilder >> interpolate: points [ 17 | ^ (RTLinearPathBuilder new interpolate: points),'Z'. 18 | ] 19 | -------------------------------------------------------------------------------- /src/Roassal2/RTLinearPathBuilder.class.st: -------------------------------------------------------------------------------- 1 | " 2 | A simple clase for create Lines in SVG 3 | " 4 | Class { 5 | #name : #RTLinearPathBuilder, 6 | #superclass : #RTLinePathBuilder, 7 | #category : #'Roassal2-Experimental' 8 | } 9 | 10 | { #category : #public } 11 | RTLinearPathBuilder >> interpolate: points [ 12 | | first str point | 13 | first := true. 14 | str := nil. 15 | point := [ :p | p x asFloat asString, ' ', p y asFloat asString ]. 16 | points do: [ :p | 17 | first ifTrue: [ str := point value: p. first := false ] 18 | ifFalse: [ str := str, 'L', (point value: p) ] 19 | ]. 20 | ^ str. 21 | ] 22 | -------------------------------------------------------------------------------- /src/Roassal2/RTLinearTransformation.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTLinearTransformation, 3 | #superclass : #RTScaleTransformation, 4 | #category : #'Roassal2-Builder-Grapher-Scaling' 5 | } 6 | 7 | { #category : #hooks } 8 | RTLinearTransformation >> invTrans: value [ 9 | ^ value 10 | ] 11 | 12 | { #category : #hooks } 13 | RTLinearTransformation >> trans: value [ 14 | ^ value 15 | ] 16 | -------------------------------------------------------------------------------- /src/Roassal2/RTLogTransformation.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTLogTransformation, 3 | #superclass : #RTScaleTransformation, 4 | #category : #'Roassal2-Builder-Grapher-Scaling' 5 | } 6 | 7 | { #category : #hooks } 8 | RTLogTransformation >> invTrans: aValue [ 9 | ^ (10 raisedTo: aValue) - 1 10 | 11 | ] 12 | 13 | { #category : #hooks } 14 | RTLogTransformation >> trans: aValue [ 15 | ^ (aValue + 1) log 16 | ] 17 | -------------------------------------------------------------------------------- /src/Roassal2/RTMoreColorPlugin.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTMoreColorPlugin, 3 | #superclass : #RTAbstractPlugin, 4 | #category : #'Roassal2-Plugins' 5 | } 6 | 7 | { #category : #hooks } 8 | RTMoreColorPlugin >> description [ 9 | ^ 'Extend the Color class with many predefined colors.' 10 | ] 11 | 12 | { #category : #hooks } 13 | RTMoreColorPlugin >> execute [ 14 | "Code to be executed" 15 | 16 | Gofer new 17 | smalltalkhubUser: 'StephaneDucasse' project: 'Colors'; 18 | package: 'MoreColors'; 19 | load. 20 | ] 21 | 22 | { #category : #testing } 23 | RTMoreColorPlugin >> isLoaded [ 24 | ^ RPackageOrganizer default includesPackageNamed: 'MoreColors' 25 | 26 | ] 27 | 28 | { #category : #hooks } 29 | RTMoreColorPlugin >> label [ 30 | ^ 'More Colors' 31 | ] 32 | -------------------------------------------------------------------------------- /src/Roassal2/RTMultiLinearColorCached.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTMultiLinearColorCached, 3 | #superclass : #RTMultiLinearColor, 4 | #instVars : [ 5 | 'cache', 6 | 'sizeBeforeReset' 7 | ], 8 | #category : #'Roassal2-ColorNormalizer' 9 | } 10 | 11 | { #category : #initialization } 12 | RTMultiLinearColorCached >> initialize [ 13 | super initialize. 14 | self resetCache. 15 | sizeBeforeReset := 800 16 | ] 17 | 18 | { #category : #accessing } 19 | RTMultiLinearColorCached >> level: f [ 20 | cache size >= sizeBeforeReset ifTrue: [ self resetCache ]. 21 | ^ cache at: f ifAbsentPut: [ super level: f ] 22 | ] 23 | 24 | { #category : #actions } 25 | RTMultiLinearColorCached >> resetCache [ 26 | cache := Dictionary new 27 | ] 28 | -------------------------------------------------------------------------------- /src/Roassal2/RTMultipleData.class.st: -------------------------------------------------------------------------------- 1 | " 2 | This is an obsolete class 3 | " 4 | Class { 5 | #name : #RTMultipleData, 6 | #superclass : #RTHorizontalMultipleData, 7 | #category : #'Roassal2-Builder-Grapher-Obsolete' 8 | } 9 | 10 | { #category : #readme } 11 | RTMultipleData >> thisIsAnObsoleteClass [ 12 | "please, use RTHorizontalMultipleData instead" 13 | ] 14 | -------------------------------------------------------------------------------- /src/Roassal2/RTNAbstractNormalizer.class.st: -------------------------------------------------------------------------------- 1 | " 2 | A RONAbstractNormalizer is xxxxxxxxx. 3 | 4 | Instance Variables 5 | command: 6 | 7 | command 8 | - xxxxx 9 | 10 | " 11 | Class { 12 | #name : #RTNAbstractNormalizer, 13 | #superclass : #RTObject, 14 | #instVars : [ 15 | 'command' 16 | ], 17 | #category : #'Roassal2-ColorNormalizerOBSOLETE' 18 | } 19 | 20 | { #category : #accessing } 21 | RTNAbstractNormalizer >> command [ 22 | 23 | ^command 24 | ] 25 | 26 | { #category : #accessing } 27 | RTNAbstractNormalizer >> command: aBlock [ 28 | 29 | command := aBlock 30 | ] 31 | 32 | { #category : #accessing } 33 | RTNAbstractNormalizer >> rtValue: anEntity [ 34 | 35 | self subclassResponsibility 36 | ] 37 | -------------------------------------------------------------------------------- /src/Roassal2/RTNFontLinearNormalizer.class.st: -------------------------------------------------------------------------------- 1 | " 2 | A RONFontLinearNormalizer is xxxxxxxxx. 3 | 4 | " 5 | Class { 6 | #name : #RTNFontLinearNormalizer, 7 | #superclass : #RTNLinearNormalizer, 8 | #category : #'Roassal2-ColorNormalizerOBSOLETE' 9 | } 10 | 11 | { #category : #accessing } 12 | RTNFontLinearNormalizer >> rtValue: anEntity [ 13 | "Calculates the color of the entity based on the context." 14 | 15 | | value | 16 | value := self command rtValue: anEntity. 17 | ^5 + (38 * (value abs / (self maximumValue: anEntity))) asInteger 18 | ] 19 | -------------------------------------------------------------------------------- /src/Roassal2/RTNameCloudDictionary.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTNameCloudDictionary, 3 | #superclass : #RTObject, 4 | #category : #'Roassal2-Builder-NameCloud' 5 | } 6 | 7 | { #category : #hooks } 8 | RTNameCloudDictionary >> unnecessaryWords [ 9 | "Override to return the list of unnecessary words" 10 | self subclassResponsibility 11 | ] 12 | -------------------------------------------------------------------------------- /src/Roassal2/RTNoDictionary.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTNoDictionary, 3 | #superclass : #RTNameCloudDictionary, 4 | #category : #'Roassal2-Builder-NameCloud' 5 | } 6 | 7 | { #category : #hooks } 8 | RTNoDictionary >> unnecessaryWords [ 9 | ^ #() 10 | ] 11 | -------------------------------------------------------------------------------- /src/Roassal2/RTNumberInterpolator.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I am the basic interpolator for numbers 3 | " 4 | Class { 5 | #name : #RTNumberInterpolator, 6 | #superclass : #RTInterpolator, 7 | #category : #'Roassal2-Builder-Grapher-Scaling' 8 | } 9 | 10 | { #category : #accessing } 11 | RTNumberInterpolator >> interpolate: t [ 12 | ^ (start * (1 - t)) + (stop * t). 13 | ] 14 | -------------------------------------------------------------------------------- /src/Roassal2/RTResizeCanceled.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I am fired when Resize operation is canceled globally for the whole View. 3 | 4 | !! Collaborators 5 | 6 | DCRTResizable 7 | " 8 | Class { 9 | #name : #RTResizeCanceled, 10 | #superclass : #Announcement, 11 | #category : #'Roassal2-Interactions-Resize' 12 | } 13 | 14 | { #category : #accessing } 15 | RTResizeCanceled >> shape: iDontCare [ 16 | "This is just for compatibility with RTAnnounceableObject>>announce:" 17 | 18 | 19 | ] 20 | -------------------------------------------------------------------------------- /src/Roassal2/RTRoassal3DBasic.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTRoassal3DBasic, 3 | #superclass : #RTAbstractPlugin, 4 | #category : #'Roassal2-Plugins' 5 | } 6 | 7 | { #category : #hooks } 8 | RTRoassal3DBasic >> description [ 9 | ^ 'Load: a basic 3D system based on athens and roassal pretty useful for small applications!' 10 | ] 11 | 12 | { #category : #hooks } 13 | RTRoassal3DBasic >> execute [ 14 | Gofer new 15 | smalltalkhubUser: 'azazael' project: 'roassal3dbasic'; 16 | package: 'Roassal2Basic3D'; 17 | load 18 | ] 19 | 20 | { #category : #hooks } 21 | RTRoassal3DBasic >> isLoaded [ 22 | ^ RPackageOrganizer default includesPackageNamed: 'Roassal2Basic3D' 23 | ] 24 | 25 | { #category : #hooks } 26 | RTRoassal3DBasic >> label [ 27 | ^ 'Basic Roassal3D' 28 | ] 29 | -------------------------------------------------------------------------------- /src/Roassal2/RTSamplingGrapher.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTSamplingGrapher, 3 | #superclass : #RTObject, 4 | #instVars : [ 5 | 'threshold' 6 | ], 7 | #category : #'Roassal2-Builder-Grapher-Core' 8 | } 9 | -------------------------------------------------------------------------------- /src/Roassal2/RTScaleBilinear.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I represent a bilinear range for 2 limits, start and end 3 | " 4 | Class { 5 | #name : #RTScaleBilinear, 6 | #superclass : #RTScale, 7 | #instVars : [ 8 | 'u', 9 | 'i' 10 | ], 11 | #category : #'Roassal2-Builder-Grapher-Scaling' 12 | } 13 | 14 | { #category : #hooks } 15 | RTScaleBilinear >> rescale [ 16 | u := uninterpolate uninterpolate: domain first and: domain second. 17 | i := interpolate interpolate: range first and: range second. 18 | ] 19 | 20 | { #category : #accessing } 21 | RTScaleBilinear >> scale: x [ 22 | ^ i interpolate: (u uninterpolate: x) 23 | ] 24 | -------------------------------------------------------------------------------- /src/Roassal2/RTScalePowPow.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I am a utility clas for RTScalePow 3 | " 4 | Class { 5 | #name : #RTScalePowPow, 6 | #superclass : #RTObject, 7 | #instVars : [ 8 | 'exponent' 9 | ], 10 | #category : #'Roassal2-Builder-Grapher-Scaling' 11 | } 12 | 13 | { #category : #'instance creation' } 14 | RTScalePowPow class >> exponent: exponent [ 15 | ^ self new 16 | exponent: exponent; 17 | yourself 18 | ] 19 | 20 | { #category : #accessing } 21 | RTScalePowPow >> exponent [ 22 | ^ exponent 23 | ] 24 | 25 | { #category : #accessing } 26 | RTScalePowPow >> exponent: aNumber [ 27 | exponent := aNumber 28 | ] 29 | 30 | { #category : #transformations } 31 | RTScalePowPow >> scale: x [ 32 | ^ x < 0 33 | ifTrue: [ (x negated raisedTo: exponent) negated ] 34 | ifFalse: [ x raisedTo: exponent ] 35 | ] 36 | -------------------------------------------------------------------------------- /src/Roassal2/RTScaleTransformation.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTScaleTransformation, 3 | #superclass : #RTObject, 4 | #classInstVars : [ 5 | 'instance' 6 | ], 7 | #category : #'Roassal2-Builder-Grapher-Scaling' 8 | } 9 | 10 | { #category : #'as yet unclassified' } 11 | RTScaleTransformation class >> instance [ 12 | instance ifNil: [ instance := self new ]. 13 | ^ instance 14 | ] 15 | 16 | { #category : #hooks } 17 | RTScaleTransformation >> invTrans: value [ 18 | self subclassResponsibility 19 | ] 20 | 21 | { #category : #'as yet unclassified' } 22 | RTScaleTransformation >> rtValue: aValue [ 23 | ^ self trans: aValue 24 | ] 25 | 26 | { #category : #hooks } 27 | RTScaleTransformation >> trans: value [ 28 | self subclassResponsibility 29 | ] 30 | -------------------------------------------------------------------------------- /src/Roassal2/RTScrollBar.class.st: -------------------------------------------------------------------------------- 1 | " 2 | add a simple scroll bar to the view 3 | " 4 | Class { 5 | #name : #RTScrollBar, 6 | #superclass : #RTInteraction, 7 | #category : #'Roassal2-Interactions' 8 | } 9 | 10 | { #category : #'as yet unclassified' } 11 | RTScrollBar >> addScrollToview: aView [ 12 | 13 | "add a scroll bar to the view" 14 | | b| 15 | b := RTScrollBarBuilder new. 16 | b view: aView. 17 | b build. 18 | ] 19 | 20 | { #category : #'as yet unclassified' } 21 | RTScrollBar >> initializeElement: aView [ 22 | self addScrollToview: aView 23 | ] 24 | -------------------------------------------------------------------------------- /src/Roassal2/RTScrollpad.class.st: -------------------------------------------------------------------------------- 1 | " 2 | add a scroll pad to the view 3 | " 4 | Class { 5 | #name : #RTScrollpad, 6 | #superclass : #RTInteraction, 7 | #category : #'Roassal2-Interactions' 8 | } 9 | 10 | { #category : #'as yet unclassified' } 11 | RTScrollpad >> addPadToview: aView [ 12 | 13 | "add a scroll pad to the view" 14 | | b| 15 | b := RTScrollBarBuilder new. 16 | b view: aView. 17 | b scrollBarType: #isPad. 18 | b build. 19 | ] 20 | 21 | { #category : #'as yet unclassified' } 22 | RTScrollpad >> initializeElement: aView [ 23 | self addPadToview: aView 24 | ] 25 | -------------------------------------------------------------------------------- /src/Roassal2/RTSelectionChange.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I am the event that is called when the elastic box changes over some elements 3 | " 4 | Class { 5 | #name : #RTSelectionChange, 6 | #superclass : #RTSelectionEvent, 7 | #category : #'Roassal2-Selection' 8 | } 9 | -------------------------------------------------------------------------------- /src/Roassal2/RTSelectionEnd.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I am called when the selection with the elastic box ends 3 | " 4 | Class { 5 | #name : #RTSelectionEnd, 6 | #superclass : #RTSelectionEvent, 7 | #category : #'Roassal2-Selection' 8 | } 9 | -------------------------------------------------------------------------------- /src/Roassal2/RTSelectionEvent.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I am an event for RTSelectableView 3 | " 4 | Class { 5 | #name : #RTSelectionEvent, 6 | #superclass : #Announcement, 7 | #instVars : [ 8 | 'group', 9 | 'shape' 10 | ], 11 | #category : #'Roassal2-Selection' 12 | } 13 | 14 | { #category : #accessing } 15 | RTSelectionEvent >> group [ 16 | ^ group 17 | ] 18 | 19 | { #category : #accessing } 20 | RTSelectionEvent >> group: g [ 21 | group := g 22 | ] 23 | 24 | { #category : #accessing } 25 | RTSelectionEvent >> shape [ 26 | ^ shape 27 | ] 28 | 29 | { #category : #accessing } 30 | RTSelectionEvent >> shape: anObject [ 31 | "Not sure whether the argument is a roassal element or not" 32 | shape := anObject 33 | ] 34 | -------------------------------------------------------------------------------- /src/Roassal2/RTSelectionStart.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I am called when the event with the elastic box start over the elements in one view 3 | " 4 | Class { 5 | #name : #RTSelectionStart, 6 | #superclass : #RTSelectionEvent, 7 | #category : #'Roassal2-Selection' 8 | } 9 | -------------------------------------------------------------------------------- /src/Roassal2/RTSmoothResizeLayoutTranslator.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I am a RTSmoothLayoutTranslator that also resizes the elements 3 | " 4 | Class { 5 | #name : #RTSmoothResizeLayoutTranslator, 6 | #superclass : #RTSmoothLayoutTranslator, 7 | #instVars : [ 8 | 'resize' 9 | ], 10 | #category : #'Roassal2-Interactions-MorphingView' 11 | } 12 | 13 | { #category : #testing } 14 | RTSmoothResizeLayoutTranslator >> hasCompleted [ 15 | "Return true if all the translation has completed" 16 | ^ super hasCompleted and: [ resize hasCompleted ] 17 | ] 18 | 19 | { #category : #hook } 20 | RTSmoothResizeLayoutTranslator >> resize: element to: newExtent [ 21 | 22 | resize := RTResizeMove new toExtent: newExtent during: nbCycles on: element. 23 | 24 | view ifNil: [ self view: element view ]. 25 | view addAnimation: resize. 26 | ] 27 | -------------------------------------------------------------------------------- /src/Roassal2/RTSourceCodeDictionary.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTSourceCodeDictionary, 3 | #superclass : #RTNameCloudDictionary, 4 | #category : #'Roassal2-Builder-NameCloud' 5 | } 6 | 7 | { #category : #hooks } 8 | RTSourceCodeDictionary >> unnecessaryWords [ 9 | ^ #( 10 | 'self' 'super' 'ifTrue:' 'ifFalse:' 'ifTrue' 'ifFalse' 11 | ) 12 | ] 13 | -------------------------------------------------------------------------------- /src/Roassal2/RTSpringLayoutStepping.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTSpringLayoutStepping, 3 | #superclass : #RTForceLayoutStepping, 4 | #category : #'Roassal2-Animation' 5 | } 6 | 7 | { #category : #readme } 8 | RTSpringLayoutStepping >> README [ 9 | "OBSOLETE CLASS!!! 10 | Use RTForceLayoutStepping instead" 11 | ] 12 | -------------------------------------------------------------------------------- /src/Roassal2/RTSqrtTransformation.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTSqrtTransformation, 3 | #superclass : #RTScaleTransformation, 4 | #category : #'Roassal2-Builder-Grapher-Scaling' 5 | } 6 | 7 | { #category : #hooks } 8 | RTSqrtTransformation >> invTrans: value [ 9 | ^ value * value 10 | ] 11 | 12 | { #category : #hooks } 13 | RTSqrtTransformation >> trans: aValue [ 14 | ^ aValue sqrt 15 | ] 16 | -------------------------------------------------------------------------------- /src/Roassal2/RTStackBarRow.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTStackBarRow, 3 | #superclass : #RTObject, 4 | #instVars : [ 5 | 'values', 6 | 'title' 7 | ], 8 | #category : #'Roassal2-Builder-StackBarPlot' 9 | } 10 | 11 | { #category : #'accessing - computed' } 12 | RTStackBarRow >> numberOfValues [ 13 | ^ values size 14 | ] 15 | 16 | { #category : #accessing } 17 | RTStackBarRow >> title [ 18 | ^ title 19 | ] 20 | 21 | { #category : #accessing } 22 | RTStackBarRow >> title: aString [ 23 | title := aString 24 | ] 25 | 26 | { #category : #'accessing - computed' } 27 | RTStackBarRow >> totalSum [ 28 | ^ values sum 29 | ] 30 | 31 | { #category : #accessing } 32 | RTStackBarRow >> values [ 33 | ^ values 34 | ] 35 | 36 | { #category : #accessing } 37 | RTStackBarRow >> values: aCollection [ 38 | values := aCollection 39 | ] 40 | -------------------------------------------------------------------------------- /src/Roassal2/RTTable.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTTable, 3 | #superclass : #RTTabTable, 4 | #category : #'Roassal2-Table' 5 | } 6 | 7 | { #category : #'as yet unclassified' } 8 | RTTable class >> inputWithComma: aString [ 9 | self assert: [ aString isString ] description: 'Please, provide a string'. 10 | ^ self new input: aString usingDelimiter: $, 11 | ] 12 | 13 | { #category : #'as yet unclassified' } 14 | RTTable class >> inputWithTab: aString [ 15 | self assert: [ aString isString ] description: 'Please, provide a string'. 16 | ^ self new input: aString usingDelimiter: Character tab 17 | ] 18 | 19 | { #category : #'as yet unclassified' } 20 | RTTable >> convertColumnsToFloat: collectionOfIntegers [ 21 | ^ self convertColumns: collectionOfIntegers to: [ :s | Float readFrom: s ] 22 | ] 23 | -------------------------------------------------------------------------------- /src/Roassal2/RTTextLine.class.st: -------------------------------------------------------------------------------- 1 | " 2 | A RTTextLine contains RTTextWord instances and represents one line of a text. 3 | 4 | " 5 | Class { 6 | #name : #RTTextLine, 7 | #superclass : #OrderedCollection, 8 | #category : #'Roassal2-Builder-TextBuilder' 9 | } 10 | 11 | { #category : #enumerating } 12 | RTTextLine >> wordsDo: aBlockClosure [ 13 | ^ self do: aBlockClosure 14 | ] 15 | -------------------------------------------------------------------------------- /src/Roassal2/RTTextLines.class.st: -------------------------------------------------------------------------------- 1 | " 2 | A RTTextLines contains RTTextLine objects and represents whole text splitted into lines. 3 | " 4 | Class { 5 | #name : #RTTextLines, 6 | #superclass : #OrderedCollection, 7 | #category : #'Roassal2-Builder-TextBuilder' 8 | } 9 | 10 | { #category : #enumerating } 11 | RTTextLines >> linesDo: aBlockClosure [ 12 | ^ self do: aBlockClosure 13 | ] 14 | -------------------------------------------------------------------------------- /src/Roassal2/RTTextWord.class.st: -------------------------------------------------------------------------------- 1 | " 2 | A RTTextWord represents one word of an original text. 3 | 4 | Instance Variables 5 | interval: 6 | text: 7 | 8 | interval 9 | - interval of the word in the original text 10 | 11 | text 12 | - word, a part of the orignal text 13 | " 14 | Class { 15 | #name : #RTTextWord, 16 | #superclass : #RTObject, 17 | #instVars : [ 18 | 'interval', 19 | 'text' 20 | ], 21 | #category : #'Roassal2-Builder-TextBuilder' 22 | } 23 | 24 | { #category : #accessing } 25 | RTTextWord >> interval [ 26 | ^ interval 27 | ] 28 | 29 | { #category : #accessing } 30 | RTTextWord >> interval: aCollection [ 31 | interval := aCollection 32 | ] 33 | 34 | { #category : #accessing } 35 | RTTextWord >> text [ 36 | ^ text 37 | ] 38 | 39 | { #category : #accessing } 40 | RTTextWord >> text: aString [ 41 | text := aString 42 | ] 43 | -------------------------------------------------------------------------------- /src/Roassal2/RTUninterpolateClamp.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I do not allow a value get off the scale of 3 | 0 to 1 4 | " 5 | Class { 6 | #name : #RTUninterpolateClamp, 7 | #superclass : #RTUninterpolate, 8 | #category : #'Roassal2-Builder-Grapher-Scaling' 9 | } 10 | 11 | { #category : #interpolating } 12 | RTUninterpolateClamp >> uninterpolate: x [ 13 | ^ 0 max: (1 min: ((x - a ) / b)) 14 | ] 15 | -------------------------------------------------------------------------------- /src/Roassal2/RTUninterpolateNumber.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I uninterpolate a value of x acording to 2 limits, a and b 3 | " 4 | Class { 5 | #name : #RTUninterpolateNumber, 6 | #superclass : #RTUninterpolate, 7 | #category : #'Roassal2-Builder-Grapher-Scaling' 8 | } 9 | 10 | { #category : #interpolating } 11 | RTUninterpolateNumber >> uninterpolate: x [ 12 | ^ (x - a )/b 13 | ] 14 | -------------------------------------------------------------------------------- /src/Roassal2/RTUnoptimizedComposer.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTUnoptimizedComposer, 3 | #superclass : #RTComposer, 4 | #category : #'Roassal2-Builder-Composer' 5 | } 6 | 7 | { #category : #'public-layout' } 8 | RTUnoptimizedComposer >> group [ 9 | ^ self group: ('group', (mapping size asString)) asSymbol 10 | ] 11 | 12 | { #category : #'public-layout' } 13 | RTUnoptimizedComposer >> group: aName [ 14 | "Compute the group of added objects" 15 | | group | 16 | group := self newElementsAsGroup. 17 | groups add: group. 18 | mapping at: aName put: group. 19 | ] 20 | 21 | { #category : #accessing } 22 | RTUnoptimizedComposer >> newElementsAsGroup [ 23 | ^ RTGroup withAll: (view elements copyWithoutAll: self allGroupedElements) 24 | ] 25 | -------------------------------------------------------------------------------- /src/Roassal2/RTUpdateRoassalPlugin.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTUpdateRoassalPlugin, 3 | #superclass : #RTAbstractPlugin, 4 | #category : #'Roassal2-Plugins' 5 | } 6 | 7 | { #category : #hooks } 8 | RTUpdateRoassalPlugin >> description [ 9 | ^ 'Load the last version of Roassal, Trachel, and Roassal2GT' 10 | ] 11 | 12 | { #category : #testing } 13 | RTUpdateRoassalPlugin >> doesItLoadCode [ 14 | ^ false 15 | ] 16 | 17 | { #category : #hooks } 18 | RTUpdateRoassalPlugin >> execute [ 19 | Gofer it 20 | smalltalkhubUser: 'ObjectProfile' project: 'Roassal2'; 21 | package: 'Roassal2'; 22 | package: 'Roassal2GT'; 23 | package: 'Trachel'; 24 | load. 25 | ] 26 | 27 | { #category : #hooks } 28 | RTUpdateRoassalPlugin >> label [ 29 | ^ 'Update Roassal' 30 | ] 31 | -------------------------------------------------------------------------------- /src/Roassal2/RTVerticalAllValuesDecorator.class.st: -------------------------------------------------------------------------------- 1 | " 2 | =-=-=-=- 3 | | b ds deco labels | 4 | b := RTGrapher new. 5 | 6 | ds := RTData new. 7 | ds points: #(2 3 4 5 6). 8 | b add: ds. 9 | 10 | deco := RTVerticalAllValuesDecorator new. 11 | b addDecorator: deco. 12 | 13 | b axisX noTick; noLabel. 14 | b axisY noTick; noLabel. 15 | b 16 | =-=-=-=- 17 | " 18 | Class { 19 | #name : #RTVerticalAllValuesDecorator, 20 | #superclass : #RTAbstractVerticalValuesDecorator, 21 | #category : #'Roassal2-Builder-Grapher-Decorators' 22 | } 23 | 24 | { #category : #drawing } 25 | RTVerticalAllValuesDecorator >> render [ 26 | self addAll: self datasetValues asSet. 27 | super render. 28 | 29 | ] 30 | -------------------------------------------------------------------------------- /src/Roassal2/RTVerticalDraggableView.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I am an interaction to translate the view as my parent. 3 | The difference is that I only allow horizontal translations 4 | " 5 | Class { 6 | #name : #RTVerticalDraggableView, 7 | #superclass : #RTConstrainedDraggableView, 8 | #category : #'Roassal2-Interactions' 9 | } 10 | 11 | { #category : #initialize } 12 | RTVerticalDraggableView >> initialize [ 13 | 14 | super initialize. 15 | self constraint: [ :aView :point | 0 @ point y ] 16 | ] 17 | -------------------------------------------------------------------------------- /src/Roassal2/RTVerticalMaxValueDecorator.class.st: -------------------------------------------------------------------------------- 1 | " 2 | =-=-=-= 3 | | b ds | 4 | b := RTGrapher new. 5 | 6 | ds := RTData new. 7 | ds points: RTShape withAllSubclasses. 8 | ds y: #numberOfMethods. 9 | b add: ds. 10 | 11 | b addDecorator: RTVerticalMinValueDecorator new red. 12 | b addDecorator: RTVerticalMaxValueDecorator new blue. 13 | 14 | b axisY noLabel. 15 | b 16 | =-=-=-= 17 | " 18 | Class { 19 | #name : #RTVerticalMaxValueDecorator, 20 | #superclass : #RTAbstractVerticalValuesDecorator, 21 | #category : #'Roassal2-Builder-Grapher-Decorators' 22 | } 23 | 24 | { #category : #drawing } 25 | RTVerticalMaxValueDecorator >> render [ 26 | self add: self datasetValues max. 27 | super render. 28 | 29 | ] 30 | -------------------------------------------------------------------------------- /src/Roassal2/RTVerticalMinValueDecorator.class.st: -------------------------------------------------------------------------------- 1 | " 2 | =-=-=-= 3 | | b ds | 4 | b := RTGrapher new. 5 | 6 | ds := RTData new. 7 | ds points: RTShape withAllSubclasses. 8 | ds y: #numberOfMethods. 9 | b add: ds. 10 | 11 | b addDecorator: RTVerticalMinValueDecorator new red. 12 | b addDecorator: RTVerticalMaxValueDecorator new blue. 13 | 14 | b axisY noLabel. 15 | b 16 | =-=-=-= 17 | " 18 | Class { 19 | #name : #RTVerticalMinValueDecorator, 20 | #superclass : #RTAbstractVerticalValuesDecorator, 21 | #category : #'Roassal2-Builder-Grapher-Decorators' 22 | } 23 | 24 | { #category : #drawing } 25 | RTVerticalMinValueDecorator >> render [ 26 | self add: self datasetValues min. 27 | super render. 28 | 29 | ] 30 | -------------------------------------------------------------------------------- /src/Roassal2/RTVerticalTickLineDecorator.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTVerticalTickLineDecorator, 3 | #superclass : #RTAbstractTickLineDecorator, 4 | #category : #'Roassal2-Builder-Grapher-Decorators' 5 | } 6 | 7 | { #category : #hooks } 8 | RTVerticalTickLineDecorator >> axis [ 9 | ^ builder getAxisX 10 | ] 11 | 12 | { #category : #drawing } 13 | RTVerticalTickLineDecorator >> render [ 14 | | xLine mm | 15 | mm := RTMetricNormalizer new. 16 | (self minValue to: self maxValue by: self step) 17 | do: [ :x | 18 | xLine := mm 19 | getValue: x 20 | min: self fromPoint x 21 | max: self toPoint x 22 | minValue: self minValue 23 | maxValue: self maxValue. 24 | self lineFrom: xLine @ builder getAxisY fromPoint y to: xLine @ builder getAxisY toPoint y ] 25 | ] 26 | -------------------------------------------------------------------------------- /src/Roassal2/RTVerticalValuesDecorator.class.st: -------------------------------------------------------------------------------- 1 | " 2 | =-=-=-=- 3 | | b ds deco | 4 | 5 | b := RTGrapher new. 6 | 7 | ds := RTData new. 8 | ds points: #(0 1 2 3 4 5 6). 9 | b add: ds. 10 | 11 | deco := RTHorizontalAllValuesDecorator new. 12 | deco labelConversion: [ :value | '#', value asString ]. 13 | b addDecorator: deco. 14 | 15 | deco := RTVerticalValuesDecorator new. 16 | deco addAll: #(2 3 4). 17 | deco labelConversion: [ :value | '#', value asString ]. 18 | b addDecorator: deco. 19 | 20 | b axisX noTick; noLabel. 21 | b axisY noTick; noLabel. 22 | b 23 | =-=-=-=- 24 | " 25 | Class { 26 | #name : #RTVerticalValuesDecorator, 27 | #superclass : #RTAbstractVerticalValuesDecorator, 28 | #category : #'Roassal2-Builder-Grapher-Decorators' 29 | } 30 | -------------------------------------------------------------------------------- /src/Roassal2/RTVisualizeCSVFileScript.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTVisualizeCSVFileScript, 3 | #superclass : #RTUsefulScript, 4 | #category : #'Roassal2-Plugins' 5 | } 6 | 7 | { #category : #accessing } 8 | RTVisualizeCSVFileScript >> description [ 9 | ^ 10 | 'Let you select a csv file and open a Grapher visualization' 11 | ] 12 | 13 | { #category : #hooks } 14 | RTVisualizeCSVFileScript >> execute [ 15 | FileSystem disk inspect 16 | ] 17 | 18 | { #category : #hooks } 19 | RTVisualizeCSVFileScript >> label [ 20 | ^ 'Browse and visualize CSV file' 21 | ] 22 | -------------------------------------------------------------------------------- /src/Roassal2/RTZoomInMove.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I increase camera's zoom by 25% 3 | " 4 | Class { 5 | #name : #RTZoomInMove, 6 | #superclass : #RTAbstractZoomMove, 7 | #category : #'Roassal2-Animation' 8 | } 9 | 10 | { #category : #'stepping and presenter' } 11 | RTZoomInMove >> step [ 12 | ^ 1.5 13 | ] 14 | -------------------------------------------------------------------------------- /src/Roassal2/RTZoomOutMove.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I decrease camera's zoom by 20% 3 | " 4 | Class { 5 | #name : #RTZoomOutMove, 6 | #superclass : #RTAbstractZoomMove, 7 | #category : #'Roassal2-Animation' 8 | } 9 | 10 | { #category : #'stepping and presenter' } 11 | RTZoomOutMove >> step [ 12 | ^ 0.5 13 | ] 14 | -------------------------------------------------------------------------------- /src/Roassal2/TRTextPath.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I am a simple label shape to draw text with the command textPath: 3 | " 4 | Class { 5 | #name : #TRTextPath, 6 | #superclass : #TRLabelShape, 7 | #instVars : [ 8 | 'outlineColor', 9 | 'outlineWidth' 10 | ], 11 | #category : #'Roassal2-Experimental' 12 | } 13 | 14 | { #category : #drawing } 15 | TRTextPath >> drawOn: athensCanvas [ 16 | TRPlatform current drawTextPathFor: self canvas: athensCanvas 17 | ] 18 | 19 | { #category : #accessing } 20 | TRTextPath >> outlineColor [ 21 | ^ outlineColor 22 | ] 23 | 24 | { #category : #accessing } 25 | TRTextPath >> outlineColor: aColor [ 26 | outlineColor:= aColor 27 | ] 28 | 29 | { #category : #accessing } 30 | TRTextPath >> outlineWidth [ 31 | ^ outlineWidth 32 | ] 33 | 34 | { #category : #accessing } 35 | TRTextPath >> outlineWidth: aNumber [ 36 | outlineWidth := aNumber 37 | ] 38 | -------------------------------------------------------------------------------- /src/Roassal2/TraitBehavior.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #TraitBehavior } 2 | 3 | { #category : #'*Roassal2' } 4 | TraitBehavior >> numberOfLinesOfCode [ 5 | "Return the amount of lines of code" 6 | 7 | ^ 5 + ((self rtmethods, self class rtmethods) inject: 0 into: [:sum :el | sum + el numberOfLinesOfCode ]) 8 | ] 9 | -------------------------------------------------------------------------------- /src/Roassal2/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #Roassal2 } 2 | -------------------------------------------------------------------------------- /src/Roassal2DataStudioObsolete/RTSmartBrowserTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTSmartBrowserTest, 3 | #superclass : #RTTest, 4 | #category : #Roassal2DataStudioObsolete 5 | } 6 | 7 | { #category : #tests } 8 | RTSmartBrowserTest >> testBasic [ 9 | | b win | 10 | b := RTSmartBrowser new. 11 | win := b open. 12 | b addClassesMatching: '*Layout*'. 13 | win delete 14 | ] 15 | -------------------------------------------------------------------------------- /src/Roassal2DataStudioObsolete/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #Roassal2DataStudioObsolete } 2 | -------------------------------------------------------------------------------- /src/Roassal2DowserObsolete/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #Roassal2DowserObsolete } 2 | -------------------------------------------------------------------------------- /src/Roassal2EventCollector/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #Roassal2EventCollector } 2 | -------------------------------------------------------------------------------- /src/Roassal2GT-Tests/GLMCameraCenterActionTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GLMCameraCenterActionTest, 3 | #superclass : #TestCase, 4 | #category : #'Roassal2GT-Tests' 5 | } 6 | 7 | { #category : #tests } 8 | GLMCameraCenterActionTest >> testBasic [ 9 | 10 | | inst | 11 | inst := GLMCameraCenterAction new. 12 | inst roassalPresentation: GLMRoassal2Presentation new. 13 | inst execute 14 | ] 15 | -------------------------------------------------------------------------------- /src/Roassal2GT-Tests/GLMRoassal2ActionTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GLMRoassal2ActionTest, 3 | #superclass : #TestCase, 4 | #category : #'Roassal2GT-Tests' 5 | } 6 | 7 | { #category : #tests } 8 | GLMRoassal2ActionTest >> testInitialize [ 9 | | prez nbActionOriginal | 10 | prez := GLMRoassal2Presentation new. 11 | nbActionOriginal := prez actions size. 12 | GLMRoassal2Action initializePresentation: prez. 13 | self assert: prez actions size - nbActionOriginal equals: GLMRoassal2Action allLeafSubclasses size. 14 | ] 15 | -------------------------------------------------------------------------------- /src/Roassal2GT-Tests/RTExampleTestCase.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTExampleTestCase, 3 | #superclass : #GtExampleTestCase, 4 | #category : #'Roassal2GT-Tests' 5 | } 6 | 7 | { #category : #accessing } 8 | RTExampleTestCase >> defaultTimeLimit [ 9 | ^ 800 seconds 10 | ] 11 | 12 | { #category : #configuration } 13 | RTExampleTestCase >> packageNames [ 14 | ^ { 'Roassal2' . 'Roassal2GT' } 15 | ] 16 | -------------------------------------------------------------------------------- /src/Roassal2GT-Tests/RTFindInAViewTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTFindInAViewTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2GT-Tests' 5 | } 6 | 7 | { #category : #tests } 8 | RTFindInAViewTest >> testBasic [ 9 | 10 | | b | 11 | b := RTMondrian new. 12 | b shape box. 13 | b nodes: Collection withAllSubclasses. 14 | b view @ RTFindInAView. 15 | b build. 16 | 17 | ] 18 | -------------------------------------------------------------------------------- /src/Roassal2GT-Tests/RTGTContextInteractionTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTGTContextInteractionTest, 3 | #superclass : #RTTest, 4 | #category : #'Roassal2GT-Tests' 5 | } 6 | 7 | { #category : #tests } 8 | RTGTContextInteractionTest >> testBasic [ 9 | 10 | | v int | 11 | v := RTView new. 12 | int := RTEmptyViewContextInteraction new. 13 | v @ int. 14 | self assert: (RTAbstractViewContext getContextFor: v) class equals: RTEmptyViewContext. 15 | ] 16 | 17 | { #category : #tests } 18 | RTGTContextInteractionTest >> testBasic02 [ 19 | 20 | | v int | 21 | v := RTView new. 22 | int := RTResizeableViewContextInteraction new. 23 | v @ int. 24 | self assert: (RTAbstractViewContext getContextFor: v) class equals: RTInteractiveViewContext. 25 | ] 26 | -------------------------------------------------------------------------------- /src/Roassal2GT-Tests/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #'Roassal2GT-Tests' } 2 | -------------------------------------------------------------------------------- /src/Roassal2GT/GLMAddScrollbarAction.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GLMAddScrollbarAction, 3 | #superclass : #GLMRoassal2Action, 4 | #category : #'Roassal2GT-Glamour-Actions' 5 | } 6 | 7 | { #category : #accessing } 8 | GLMAddScrollbarAction >> category [ 9 | ^ 'Interactions...' 10 | ] 11 | 12 | { #category : #hooks } 13 | GLMAddScrollbarAction >> execute [ 14 | self roassalView @ RTDoubleScrollBar. 15 | self roassalUpdate 16 | ] 17 | 18 | { #category : #hooks } 19 | GLMAddScrollbarAction >> title [ 20 | ^ 'Add scrollbars' 21 | ] 22 | -------------------------------------------------------------------------------- /src/Roassal2GT/GLMBoxZoomAction.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GLMBoxZoomAction, 3 | #superclass : #GLMRoassal2Action, 4 | #category : #'Roassal2GT-Glamour-Actions' 5 | } 6 | 7 | { #category : #accessing } 8 | GLMBoxZoomAction >> category [ 9 | ^ 'Interactions...' 10 | ] 11 | 12 | { #category : #hooks } 13 | GLMBoxZoomAction >> execute [ 14 | | int | 15 | int := RTZoomableBoxView new. 16 | self roassalView @ int. 17 | ] 18 | 19 | { #category : #hooks } 20 | GLMBoxZoomAction >> title [ 21 | ^ 'Add RTZoomableBoxView' 22 | ] 23 | -------------------------------------------------------------------------------- /src/Roassal2GT/GLMCameraCenterAction.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GLMCameraCenterAction, 3 | #superclass : #GLMRoassal2Action, 4 | #category : #'Roassal2GT-Glamour-Actions' 5 | } 6 | 7 | { #category : #hooks } 8 | GLMCameraCenterAction >> execute [ 9 | self trachelCanvas focusOnCenterScaled. 10 | self roassalUpdate 11 | ] 12 | 13 | { #category : #hooks } 14 | GLMCameraCenterAction >> icon [ 15 | ^ GLMUIThemeExtraIcons glamorousZoomToFit 16 | ] 17 | 18 | { #category : #hooks } 19 | GLMCameraCenterAction >> order [ 20 | ^ 6 21 | ] 22 | 23 | { #category : #hooks } 24 | GLMCameraCenterAction >> title [ 25 | ^ 'Camera center' 26 | ] 27 | -------------------------------------------------------------------------------- /src/Roassal2GT/GLMCompositePresentation.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #GLMCompositePresentation } 2 | 3 | { #category : #'*Roassal2GT-Glamour' } 4 | GLMCompositePresentation >> roassal2 [ 5 | ^ self custom: GLMRoassal2Presentation new 6 | ] 7 | -------------------------------------------------------------------------------- /src/Roassal2GT/GLMEmptyContextAction.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GLMEmptyContextAction, 3 | #superclass : #GLMAbstractSetContextAction, 4 | #category : #'Roassal2GT-Glamour-Actions' 5 | } 6 | 7 | { #category : #accessing } 8 | GLMEmptyContextAction >> contextClass [ 9 | ^ RTEmptyViewContext 10 | ] 11 | -------------------------------------------------------------------------------- /src/Roassal2GT/GLMFindInViewAction.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GLMFindInViewAction, 3 | #superclass : #GLMRoassal2Action, 4 | #category : #'Roassal2GT-Glamour-Actions' 5 | } 6 | 7 | { #category : #hooks } 8 | GLMFindInViewAction >> execute [ 9 | GTSpotterMorph new 10 | extent: 400@500; 11 | spotterModel: (GTSpotter on: self roassalView); 12 | openCenteredInWorld 13 | ] 14 | 15 | { #category : #hooks } 16 | GLMFindInViewAction >> icon [ 17 | ^ GLMUIThemeExtraIcons glamorousInspect 18 | ] 19 | 20 | { #category : #hooks } 21 | GLMFindInViewAction >> order [ 22 | ^ 50 23 | ] 24 | 25 | { #category : #hooks } 26 | GLMFindInViewAction >> title [ 27 | ^ 'Find' 28 | ] 29 | -------------------------------------------------------------------------------- /src/Roassal2GT/GLMHTMLExporting2Action.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GLMHTMLExporting2Action, 3 | #superclass : #GLMAbstractExportingAction, 4 | #category : #'Roassal2GT-Glamour-Actions' 5 | } 6 | 7 | { #category : #hooks } 8 | GLMHTMLExporting2Action >> doExportToFull: fileName [ 9 | RTHTML5Exporter new 10 | directory: fileName parent; 11 | fileName: fileName basename; 12 | export: self roassalView. 13 | 14 | ] 15 | 16 | { #category : #hooks } 17 | GLMHTMLExporting2Action >> extensions [ 18 | ^ #('html') 19 | ] 20 | 21 | { #category : #hooks } 22 | GLMHTMLExporting2Action >> titleExtension [ 23 | ^ 'HTML...' 24 | ] 25 | -------------------------------------------------------------------------------- /src/Roassal2GT/GLMHTMLExportingWithoutFixedShapesAction.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GLMHTMLExportingWithoutFixedShapesAction, 3 | #superclass : #GLMAbstractExportingAction, 4 | #category : #'Roassal2GT-Glamour-Actions' 5 | } 6 | 7 | { #category : #hooks } 8 | GLMHTMLExportingWithoutFixedShapesAction >> doExportToFull: fileName [ 9 | RTHTML5Exporter new 10 | directory: fileName parent; 11 | fileName: fileName basename; 12 | exportFixedShapes: false; 13 | export: self roassalView. 14 | 15 | ] 16 | 17 | { #category : #hooks } 18 | GLMHTMLExportingWithoutFixedShapesAction >> extensions [ 19 | ^ #('html') 20 | ] 21 | 22 | { #category : #hooks } 23 | GLMHTMLExportingWithoutFixedShapesAction >> titleExtension [ 24 | ^ 'HTML (without fixed shapes)...' 25 | ] 26 | -------------------------------------------------------------------------------- /src/Roassal2GT/GLMInspectViewAction.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GLMInspectViewAction, 3 | #superclass : #GLMRoassal2Action, 4 | #category : #'Roassal2GT-Glamour-Actions' 5 | } 6 | 7 | { #category : #hooks } 8 | GLMInspectViewAction >> execute [ 9 | self roassalView inspect 10 | ] 11 | 12 | { #category : #hooks } 13 | GLMInspectViewAction >> title [ 14 | ^ 'Inspect View' 15 | ] 16 | -------------------------------------------------------------------------------- /src/Roassal2GT/GLMInteractiveContextAction.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GLMInteractiveContextAction, 3 | #superclass : #GLMAbstractSetContextAction, 4 | #category : #'Roassal2GT-Glamour-Actions' 5 | } 6 | 7 | { #category : #accessing } 8 | GLMInteractiveContextAction >> contextClass [ 9 | ^ RTInteractiveViewContext 10 | ] 11 | -------------------------------------------------------------------------------- /src/Roassal2GT/GLMMorphicRenderer.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #GLMMorphicRenderer } 2 | 3 | { #category : #'*Roassal2GT-Glamour' } 4 | GLMMorphicRenderer >> renderRoassal2Presentation: aPresentation [ 5 | ^ GLMMorphicRoassal2Renderer render: aPresentation from: self 6 | ] 7 | -------------------------------------------------------------------------------- /src/Roassal2GT/GLMPNGExporting2Action.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GLMPNGExporting2Action, 3 | #superclass : #GLMAbstractExportingAction, 4 | #category : #'Roassal2GT-Glamour-Actions' 5 | } 6 | 7 | { #category : #hooks } 8 | GLMPNGExporting2Action >> doExportToFull: fileName [ 9 | RTPNGExporter new 10 | withScale; 11 | builder: self roassalView; 12 | fileName: fileName fullName; 13 | exportToFile. 14 | ] 15 | 16 | { #category : #hooks } 17 | GLMPNGExporting2Action >> extensions [ 18 | ^ #('png') 19 | ] 20 | 21 | { #category : #hooks } 22 | GLMPNGExporting2Action >> titleExtension [ 23 | ^ 'PNG with scale' 24 | 25 | ] 26 | -------------------------------------------------------------------------------- /src/Roassal2GT/GLMPNGExportingAction.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GLMPNGExportingAction, 3 | #superclass : #GLMAbstractExportingAction, 4 | #category : #'Roassal2GT-Glamour-Actions' 5 | } 6 | 7 | { #category : #hooks } 8 | GLMPNGExportingAction >> doExportToFull: fileName [ 9 | 10 | RTPNGExporter new 11 | builder: self roassalView; 12 | fileName: fileName fullName; 13 | exportToFile. 14 | ] 15 | 16 | { #category : #'as yet unclassified' } 17 | GLMPNGExportingAction >> extensions [ 18 | ^ #('png') 19 | ] 20 | 21 | { #category : #'as yet unclassified' } 22 | GLMPNGExportingAction >> titleExtension [ 23 | ^ 'PNG' 24 | 25 | ] 26 | -------------------------------------------------------------------------------- /src/Roassal2GT/GLMSVGExportingAction.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GLMSVGExportingAction, 3 | #superclass : #GLMAbstractExportingAction, 4 | #category : #'Roassal2GT-Glamour-Actions' 5 | } 6 | 7 | { #category : #hooks } 8 | GLMSVGExportingAction >> doExportToFull: fileName [ 9 | 10 | RTSVGExporter 11 | exportBuilderAsSVG: self roassalView 12 | filename: fileName asAbsolute 13 | ] 14 | 15 | { #category : #hooks } 16 | GLMSVGExportingAction >> extensions [ 17 | ^ #('SVG') 18 | ] 19 | 20 | { #category : #hooks } 21 | GLMSVGExportingAction >> titleExtension [ 22 | ^ 'SVG' 23 | 24 | ] 25 | -------------------------------------------------------------------------------- /src/Roassal2GT/GLMSelectionBox.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GLMSelectionBox, 3 | #superclass : #GLMRoassal2Action, 4 | #category : #'Roassal2GT-Glamour-Actions' 5 | } 6 | 7 | { #category : #accessing } 8 | GLMSelectionBox >> category [ 9 | ^ 'Interactions...' 10 | ] 11 | 12 | { #category : #hooks } 13 | GLMSelectionBox >> execute [ 14 | | int | 15 | int := RTSelectionBox new. 16 | self roassalView @ int. 17 | ] 18 | 19 | { #category : #hooks } 20 | GLMSelectionBox >> title [ 21 | ^ 'Add RTSelectionBox' 22 | ] 23 | -------------------------------------------------------------------------------- /src/Roassal2GT/GLMZoomInAction.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GLMZoomInAction, 3 | #superclass : #GLMRoassal2Action, 4 | #category : #'Roassal2GT-Glamour-Actions' 5 | } 6 | 7 | { #category : #hooks } 8 | GLMZoomInAction >> execute [ 9 | RTZoomInMove on: self roassalView 10 | ] 11 | 12 | { #category : #hooks } 13 | GLMZoomInAction >> icon [ 14 | ^ GLMUIThemeExtraIcons glamorousZoomIn 15 | ] 16 | 17 | { #category : #hooks } 18 | GLMZoomInAction >> order [ 19 | ^ 1 20 | ] 21 | 22 | { #category : #hooks } 23 | GLMZoomInAction >> title [ 24 | ^ 'Zoom in' 25 | ] 26 | -------------------------------------------------------------------------------- /src/Roassal2GT/GLMZoomOutAction.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #GLMZoomOutAction, 3 | #superclass : #GLMRoassal2Action, 4 | #category : #'Roassal2GT-Glamour-Actions' 5 | } 6 | 7 | { #category : #hooks } 8 | GLMZoomOutAction >> execute [ 9 | RTZoomOutMove on: self roassalView 10 | ] 11 | 12 | { #category : #hooks } 13 | GLMZoomOutAction >> icon [ 14 | ^ GLMUIThemeExtraIcons glamorousZoomOut 15 | ] 16 | 17 | { #category : #hooks } 18 | GLMZoomOutAction >> order [ 19 | ^ 5 20 | ] 21 | 22 | { #category : #hooks } 23 | GLMZoomOutAction >> title [ 24 | ^ 'Zoom in' 25 | ] 26 | -------------------------------------------------------------------------------- /src/Roassal2GT/GtExampleMethodIcon.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #GtExampleMethodIcon } 2 | 3 | { #category : #'*Roassal2GT' } 4 | GtExampleMethodIcon class >> fixedBase64String: aString [ 5 | ^ Form fromBinaryStream: aString base64Decoded readStream 6 | ] 7 | -------------------------------------------------------------------------------- /src/Roassal2GT/Object.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #Object } 2 | 3 | { #category : #'*Roassal2GT-Spotter' } 4 | Object >> spotterForRenderingShapesFor: aStep [ 5 | 6 | (aStep hasPreviousNavigationFromClass: RTView) ifTrue: [ 7 | aStep listProcessor 8 | title: 'Shapes'; 9 | candidatesLimit: 5; 10 | allCandidates: [ aStep previousStep origin elements select: [ :each | each model = self ] ]; 11 | itemName: [ :each | each gtDisplayString, ' [', each shape class name, ']' ]; 12 | filter: GTFilterSubstring; 13 | wantsToDisplayOnEmptyQuery: true ] 14 | ] 15 | -------------------------------------------------------------------------------- /src/Roassal2GT/RTAbstractContextInteraction.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTAbstractContextInteraction, 3 | #superclass : #RTInteraction, 4 | #instVars : [ 5 | 'presentation' 6 | ], 7 | #category : #'Roassal2GT-Glamour-Roassal-Interaction' 8 | } 9 | 10 | { #category : #accessing } 11 | RTAbstractContextInteraction >> presentation [ 12 | ^ presentation 13 | ] 14 | 15 | { #category : #accessing } 16 | RTAbstractContextInteraction >> presentation: aGLRoassalPresentation [ 17 | presentation := aGLRoassalPresentation 18 | ] 19 | -------------------------------------------------------------------------------- /src/Roassal2GT/RTBuilder.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #RTBuilder } 2 | 3 | { #category : #'*Roassal2GT-Inspector' } 4 | RTBuilder class >> gtExampleBuilder [ 5 | 6 | 7 | 8 | ^ self new 9 | ] 10 | 11 | { #category : #'*Roassal2GT-Inspector' } 12 | RTBuilder >> gtInspectorViewIn: composite [ 13 | 14 | composite roassal2 15 | title: 'View'; 16 | initializeView: [ self ] 17 | ] 18 | 19 | { #category : #'*Roassal2GT-Glamour' } 20 | RTBuilder >> openWithToolbar [ 21 | ^ GLMCompositePresentation new 22 | title: 'Roassal'; 23 | with: [:composite | 24 | composite roassal2 title: 'Painting'; initializeView: [ self ] ]; 25 | openOn: self 26 | ] 27 | 28 | { #category : #'*Roassal2GT-Glamour' } 29 | RTBuilder >> openWithToolbarEntitled: aTitle [ 30 | ^ self openWithToolbar title: aTitle 31 | ] 32 | -------------------------------------------------------------------------------- /src/Roassal2GT/RTEmptyViewContext.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTEmptyViewContext, 3 | #superclass : #RTAbstractViewContext, 4 | #category : #'Roassal2GT-Glamour-Context' 5 | } 6 | 7 | { #category : #hooks } 8 | RTEmptyViewContext >> interactionsToBeRegistered [ 9 | ^ #() 10 | ] 11 | -------------------------------------------------------------------------------- /src/Roassal2GT/RTEmptyViewContextInteraction.class.st: -------------------------------------------------------------------------------- 1 | " 2 | Interaction for a view. Make the view __not__ resizeable in GTInspector. Here is an example: 3 | -=-=-= 4 | b := RTMondrian new. 5 | b nodes: (1 to: 100). 6 | b layout grid. 7 | b view @ RTEmptyViewContextInteraction. 8 | b 9 | -=-=-= 10 | " 11 | Class { 12 | #name : #RTEmptyViewContextInteraction, 13 | #superclass : #RTAbstractContextInteraction, 14 | #category : #'Roassal2GT-Glamour-Roassal-Interaction' 15 | } 16 | 17 | { #category : #hooks } 18 | RTEmptyViewContextInteraction >> initializeElement: aView [ 19 | RTEmptyViewContext setOnView: aView 20 | ] 21 | -------------------------------------------------------------------------------- /src/Roassal2GT/RTExampleMethodIcon.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTExampleMethodIcon, 3 | #superclass : #GtAbstractExampleMethod, 4 | #category : #'Roassal2GT-Examples' 5 | } 6 | 7 | { #category : #private } 8 | RTExampleMethodIcon >> basicForm [ 9 | | iconSelector iconProvider icon64Mime | 10 | iconSelector := (self selector, 'Icon') asSymbol. 11 | ((iconProvider := self provider) class canPerform: iconSelector) ifFalse: [ ^ nil ]. 12 | icon64Mime := [ iconProvider perform: iconSelector ] 13 | on: Error 14 | do: [ ^ nil ]. 15 | ^ [ TRPlatform current formClass fromBinaryStream: 16 | (TRPlatform current mimeDecodeToBytes: icon64Mime readStream) ] 17 | on: Error 18 | do: [ nil ] 19 | ] 20 | 21 | { #category : #testing } 22 | RTExampleMethodIcon >> exists [ 23 | ^ super exists 24 | and: [ self methodClass includesSelector: (self selector, 'Icon') asSymbol ] 25 | ] 26 | -------------------------------------------------------------------------------- /src/Roassal2GT/RTGTContextExample.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTGTContextExample, 3 | #superclass : #RTObject, 4 | #category : #'Roassal2GT-Glamour-Context' 5 | } 6 | 7 | { #category : #'as yet unclassified' } 8 | RTGTContextExample >> exampleNoContext [ 9 | 10 | | v | 11 | v := RTView new. 12 | v addAll: (RTEllipse new size: 20; elementsOn: #(1 2)). 13 | RTHorizontalLineLayout on: v elements. 14 | RTEmptyViewContext setOnView: v. 15 | v 16 | 17 | ] 18 | -------------------------------------------------------------------------------- /src/Roassal2GT/RTGrapherSelectRangeContextInteraction.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTGrapherSelectRangeContextInteraction, 3 | #superclass : #RTAbstractContextInteraction, 4 | #category : #'Roassal2GT-Glamour-Roassal-Interaction' 5 | } 6 | 7 | { #category : #hooks } 8 | RTGrapherSelectRangeContextInteraction >> initializeElement: aView [ 9 | "This expression is executed after the GTInspector window is open. So, after the build has been done." 10 | self assert: [ self presentation notNil ] description: 'The presentation has to be set'. 11 | aView attributeAt: #presentation put: self presentation 12 | 13 | ] 14 | -------------------------------------------------------------------------------- /src/Roassal2GT/RTInteractiveViewContext.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTInteractiveViewContext, 3 | #superclass : #RTAbstractViewContext, 4 | #category : #'Roassal2GT-Glamour-Context' 5 | } 6 | 7 | { #category : #testing } 8 | RTInteractiveViewContext class >> isDefault [ 9 | ^ true 10 | ] 11 | 12 | { #category : #hooks } 13 | RTInteractiveViewContext >> interactionsToBeRegistered [ 14 | ^ Array with: RTSelectableElementsContextInteraction with: RTResizeableViewContextInteraction 15 | ] 16 | -------------------------------------------------------------------------------- /src/Roassal2GT/RTObject.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #RTObject } 2 | 3 | { #category : #'*Roassal2GT-Examples' } 4 | RTObject class >> gtExamplesFactory [ 5 | ^ RTExampleFactory new 6 | sourceClass: self; 7 | yourself 8 | ] 9 | -------------------------------------------------------------------------------- /src/Roassal2GT/RTSelectableElementContextInteraction.class.st: -------------------------------------------------------------------------------- 1 | " 2 | This is an interaction for an element 3 | 4 | 5 | " 6 | Class { 7 | #name : #RTSelectableElementContextInteraction, 8 | #superclass : #RTAbstractContextInteraction, 9 | #category : #'Roassal2GT-Glamour-Roassal-Interaction' 10 | } 11 | 12 | { #category : #hooks } 13 | RTSelectableElementContextInteraction >> initializeElement: anElement [ 14 | self assert: [ self presentation notNil ] description: 'The presentation has to be set'. 15 | 16 | anElement when: TRMouseLeftClick do: [ :event | 17 | anElement model ifNotNil: [ self presentation selection: anElement model ] ] 18 | ] 19 | -------------------------------------------------------------------------------- /src/Roassal2GT/TRCanvas.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #TRCanvas } 2 | 3 | { #category : #'*Roassal2GT-Inspector' } 4 | TRCanvas class >> gtExampleEmpty [ 5 | 6 | 7 | 8 | ^ TRCanvas new 9 | ] 10 | 11 | { #category : #'*Roassal2GT-Inspector' } 12 | TRCanvas >> gtInspectorViewIn: composite [ 13 | 14 | composite roassal2 15 | title: 'Canvas'; 16 | initializeView: [ RTView new setCanvas: self ] 17 | 18 | ] 19 | -------------------------------------------------------------------------------- /src/Roassal2GT/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #Roassal2GT } 2 | -------------------------------------------------------------------------------- /src/Roassal2HTMLExporterObsolete/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #Roassal2HTMLExporterObsolete } 2 | -------------------------------------------------------------------------------- /src/Roassal2OldGraphBuilder/RTTranslationLayout.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTTranslationLayout, 3 | #superclass : #RTLayout, 4 | #instVars : [ 5 | 'step' 6 | ], 7 | #category : #Roassal2OldGraphBuilder 8 | } 9 | 10 | { #category : #hook } 11 | RTTranslationLayout >> doExecute: elements [ 12 | "Performs the layout" 13 | elements do: [ :e | e translateBy: step ] 14 | ] 15 | 16 | { #category : #'initialize-release' } 17 | RTTranslationLayout >> initialize [ 18 | super initialize. 19 | step := 0 @ 0 20 | ] 21 | 22 | { #category : #accessing } 23 | RTTranslationLayout >> step: aPoint [ 24 | step := aPoint 25 | ] 26 | -------------------------------------------------------------------------------- /src/Roassal2OldGraphBuilder/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #Roassal2OldGraphBuilder } 2 | -------------------------------------------------------------------------------- /src/Roassal2Pillar/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #Roassal2Pillar } 2 | -------------------------------------------------------------------------------- /src/Roassal2ScriptOfTheDay/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #Roassal2ScriptOfTheDay } 2 | -------------------------------------------------------------------------------- /src/Roassal2Spec/SubscriptionRegistry.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #SubscriptionRegistry } 2 | 3 | { #category : #'*Roassal2Spec' } 4 | SubscriptionRegistry >> subscriptionsDo: aBlock [ 5 | | copy | 6 | 7 | self protected: [ copy := subscriptions copy ]. 8 | 9 | copy do: aBlock 10 | ] 11 | -------------------------------------------------------------------------------- /src/Roassal2Spec/TREvent.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #TREvent } 2 | 3 | { #category : #'*Roassal2Spec' } 4 | TREvent >> isMouse [ 5 | 6 | ^ false 7 | ] 8 | -------------------------------------------------------------------------------- /src/Roassal2Spec/TRMouseClick.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #TRMouseClick } 2 | 3 | { #category : #'*Roassal2Spec' } 4 | TRMouseClick >> isMouse [ 5 | 6 | ^ true 7 | ] 8 | -------------------------------------------------------------------------------- /src/Roassal2Spec/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #Roassal2Spec } 2 | -------------------------------------------------------------------------------- /src/Roassal2Spec2/SpAbstractMorphicAdapter.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #SpAbstractMorphicAdapter } 2 | 3 | { #category : #'*Roassal2Spec2' } 4 | SpAbstractMorphicAdapter >> basicAdapt: aPresenter [ 5 | 6 | super adapt: aPresenter 7 | ] 8 | -------------------------------------------------------------------------------- /src/Roassal2Spec2/TREvent.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #TREvent } 2 | 3 | { #category : #'*Roassal2Spec2' } 4 | TREvent >> isMouse [ 5 | 6 | ^ false 7 | ] 8 | -------------------------------------------------------------------------------- /src/Roassal2Spec2/TRMouseClick.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #TRMouseClick } 2 | 3 | { #category : #'*Roassal2Spec2' } 4 | TRMouseClick >> isMouse [ 5 | 6 | ^ true 7 | ] 8 | -------------------------------------------------------------------------------- /src/Roassal2Spec2/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #Roassal2Spec2 } 2 | -------------------------------------------------------------------------------- /src/RoassalObsolete/InstanceSpyTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #InstanceSpyTest, 3 | #superclass : #TestCase, 4 | #instVars : [ 5 | 'spy' 6 | ], 7 | #category : #'RoassalObsolete-Builder-MemoryProfiler' 8 | } 9 | 10 | { #category : #running } 11 | InstanceSpyTest >> setUp [ 12 | super setUp. 13 | spy := InstanceSpy new 14 | ] 15 | 16 | { #category : #tests } 17 | InstanceSpyTest >> testDefault [ 18 | 19 | self assert: spy numberOfClassesToMonitor equals: 0 20 | ] 21 | 22 | { #category : #tests } 23 | InstanceSpyTest >> testNumberOfClassesToMonitor [ 24 | spy monitor: Announcer. 25 | self assert: spy numberOfClassesToMonitor equals: 1. 26 | spy monitor: InstanceSpy. 27 | self assert: spy numberOfClassesToMonitor equals: 2 28 | ] 29 | -------------------------------------------------------------------------------- /src/RoassalObsolete/RTMatrixBuilderTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RTMatrixBuilderTest, 3 | #superclass : #RTTest, 4 | #category : #'RoassalObsolete-Builder-Matrix' 5 | } 6 | 7 | { #category : #tests } 8 | RTMatrixBuilderTest >> testBasic [ 9 | 10 | | b | 11 | b := RTMatrixBuilder new. 12 | b inputCSV: 'FirstName,LastName,Title,ReportsTo.Email,Birthdate,Description 13 | Tom,Jones,Senior Director,buyer@salesforcesample.com,1940-06-07Z,"Self-described as ""the top"" branding guru on the West Coast" 14 | Ian,Dury,Chief Imagineer,cto@salesforcesample.com,,"World-renowned expert in fuzzy logic design. 15 | Influential in technology purchases." 16 | '. 17 | b build 18 | ] 19 | -------------------------------------------------------------------------------- /src/RoassalObsolete/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #RoassalObsolete } 2 | -------------------------------------------------------------------------------- /src/RoassalSpotterIntegration/RTElement.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #RTElement } 2 | 3 | { #category : #'*RoassalSpotterIntegration' } 4 | RTElement >> spotterActDefault [ 5 | RTBlink on: self. 6 | self view canvas camera translateTo: self position. 7 | self view signalUpdate 8 | ] 9 | -------------------------------------------------------------------------------- /src/RoassalSpotterIntegration/RTView.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #RTView } 2 | 3 | { #category : #'*RoassalSpotterIntegration' } 4 | RTView >> spotterElementsFor: aStep [ 5 | 6 | ^ aStep listProcessor 7 | title: 'Elements'; 8 | candidatesLimit: 100; 9 | allCandidates: [ self elements ]; 10 | itemName: [ :each | each model gtDisplayString ]; 11 | matchSubstring; 12 | wantsToDisplayOnEmptyQuery: true 13 | ] 14 | -------------------------------------------------------------------------------- /src/RoassalSpotterIntegration/RoassalSpotterIntegrationExample.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #RoassalSpotterIntegrationExample, 3 | #superclass : #Object, 4 | #category : #RoassalSpotterIntegration 5 | } 6 | 7 | { #category : #'as yet unclassified' } 8 | RoassalSpotterIntegrationExample >> example01 [ 9 | " 10 | self new example01 11 | " 12 | 13 | | b | 14 | b := RTMondrian new. 15 | b nodes: GLMPresentation withAllSubclasses. 16 | b edges connectFrom: #superclass. 17 | b layout tree. 18 | b build. 19 | 20 | b view when: TRKeyDown do: [ :evt | 21 | (evt keyCombination = $F asKeyCombination) ifTrue: 22 | [ GTSpotterMorph new 23 | width: 400; 24 | doLayout; 25 | spotterModel: (GTSpotter on: b view); 26 | openCenteredInWorld ] ]. 27 | 28 | b open 29 | ] 30 | -------------------------------------------------------------------------------- /src/RoassalSpotterIntegration/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #RoassalSpotterIntegration } 2 | -------------------------------------------------------------------------------- /src/Trachel/Announcer.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #Announcer } 2 | 3 | { #category : #'*Trachel' } 4 | Announcer >> handleEventClass: eventClass [ 5 | "Return true if the receiver has a callback subscripbed for the event class" 6 | ^ self subscriptions handleEventClass: eventClass 7 | ] 8 | -------------------------------------------------------------------------------- /src/Trachel/AthensAffineTransform.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #AthensAffineTransform } 2 | 3 | { #category : #'*Trachel' } 4 | AthensAffineTransform >> asFloatTransform [ 5 | ^ self copy floatValues; yourself 6 | ] 7 | 8 | { #category : #'*Trachel' } 9 | AthensAffineTransform >> floatValues [ 10 | "convert all the values to float" 11 | x := x asFloat. 12 | y := y asFloat. 13 | sx := sx asFloat. 14 | sy := sy asFloat. 15 | shx := shx asFloat. 16 | shy := shy asFloat. 17 | 18 | 19 | ] 20 | -------------------------------------------------------------------------------- /src/Trachel/AthensCairoSurface.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #AthensCairoSurface } 2 | 3 | { #category : #'*Trachel' } 4 | AthensCairoSurface >> hasBeenFreed [ 5 | "Return true if the external resource has been freed" 6 | ^ handle isNull 7 | ] 8 | -------------------------------------------------------------------------------- /src/Trachel/FormCanvas.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #FormCanvas } 2 | 3 | { #category : #'*Trachel' } 4 | FormCanvas >> invariant [ 5 | "Return false if the form canvas is not properly defined" 6 | " 7 | (self allInstances collect: #origin) asSet 8 | " 9 | (self origin isPoint and: [ self origin x >= 0 and: [ self origin y >= 0 ] ]) ifFalse: [ ^ false ]. 10 | (self clipRect extent > (0 @ 0)) ifFalse: [ ^ false ]. 11 | self form notNil ifFalse: [ ^ false ]. 12 | 13 | "If the form is okay, then we check the port" 14 | ^ port invariant 15 | ] 16 | -------------------------------------------------------------------------------- /src/Trachel/GrafPort.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #GrafPort } 2 | 3 | { #category : #'*Trachel' } 4 | GrafPort >> invariant [ 5 | "Return false if the form canvas is not properly defined" 6 | " 7 | (self allInstances collect: #origin) asSet 8 | " 9 | combinationRule notNil ifFalse: [ ^ false ]. 10 | clipHeight > 0 ifFalse: [ ^ false ]. 11 | clipWidth > 0 ifFalse: [ ^ false ]. 12 | clipX >= 0 ifFalse: [ ^ false ]. 13 | clipY >= 0 ifFalse: [ ^ false ]. 14 | 15 | "What about destForm?" 16 | (destForm class == DisplayScreen or: [ destForm class == Form ]) ifFalse: [ ^ false ]. 17 | "(sourceForm notNil and: [ destForm notNil ]) ifFalse: [ self haltOnce. ^ false ]." 18 | ^ true 19 | 20 | 21 | ] 22 | -------------------------------------------------------------------------------- /src/Trachel/Point.extension.st: -------------------------------------------------------------------------------- 1 | Extension { #name : #Point } 2 | 3 | { #category : #'*Trachel' } 4 | Point >> relativeAngleTo: aPoint [ 5 | | width height hip | 6 | height:= (self y - aPoint y) abs. 7 | width:= (self x -aPoint x) abs. 8 | (height = 0 and: [ width = 0 ]) ifTrue: [ ^ 0 ]. 9 | hip:= (self dotProduct: aPoint) sqrt. 10 | 11 | "First quadrant" 12 | (self x > 0 and: [self y > 0]) ifTrue: [ (width @ height) angle] 13 | 14 | 15 | 16 | ] 17 | -------------------------------------------------------------------------------- /src/Trachel/TRAbstractArrowHeadShape.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRAbstractArrowHeadShape, 3 | #superclass : #TRAbstractLineDecoratorShape, 4 | #instVars : [ 5 | 'left', 6 | 'right' 7 | ], 8 | #category : #'Trachel-ShapesForArrow' 9 | } 10 | -------------------------------------------------------------------------------- /src/Trachel/TRAbstractMouseClick.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRAbstractMouseClick, 3 | #superclass : #TRAbstractMouseEvent, 4 | #category : #'Trachel-Events' 5 | } 6 | -------------------------------------------------------------------------------- /src/Trachel/TRAbstractMouseEvent.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRAbstractMouseEvent, 3 | #superclass : #TRUserInputEvent, 4 | #category : #'Trachel-Events' 5 | } 6 | 7 | { #category : #testing } 8 | TRAbstractMouseEvent >> isPositionAboveShape [ 9 | ^ shape encompassingRectangle containsPoint: self positionFromCamera 10 | ] 11 | -------------------------------------------------------------------------------- /src/Trachel/TRAddedCallback.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I am triggered when aShape is added to the canvas. 3 | The opposite of me is TRRemoveCallback. 4 | 5 | ==aShape addCallback: (TRAddedCallback block: [ :shape | ""do sth"" ])== 6 | " 7 | Class { 8 | #name : #TRAddedCallback, 9 | #superclass : #TRCallback, 10 | #category : #'Trachel-Callbacks' 11 | } 12 | 13 | { #category : #adding } 14 | TRAddedCallback >> addShape: aTRShape [ 15 | ^ block cull: aTRShape 16 | ] 17 | 18 | { #category : #testing } 19 | TRAddedCallback >> isAddedCallback [ 20 | ^ true 21 | ] 22 | -------------------------------------------------------------------------------- /src/Trachel/TRCameraScaleCallback.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I am triggered when the Camera scale (zoom) has changed. 3 | 4 | I should be atteched to TRCamera (`aView canvas camera addCallback:`) 5 | " 6 | Class { 7 | #name : #TRCameraScaleCallback, 8 | #superclass : #TRCallback, 9 | #category : #'Trachel-Callbacks' 10 | } 11 | 12 | { #category : #testing } 13 | TRCameraScaleCallback >> isCameraScaleCallback [ 14 | ^ true 15 | ] 16 | 17 | { #category : #action } 18 | TRCameraScaleCallback >> scaleChanged: aScaleFactorAsInteger [ 19 | ^ block cull: aScaleFactorAsInteger 20 | ] 21 | -------------------------------------------------------------------------------- /src/Trachel/TRCircleHeadShape.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRCircleHeadShape, 3 | #superclass : #TRAbstractLineDecoratorShape, 4 | #category : #'Trachel-ShapesForArrow' 5 | } 6 | 7 | { #category : #visiting } 8 | TRCircleHeadShape >> accept: aVisitor onStart: aBoolean [ 9 | 10 | aVisitor visitCircleHeadShape: self onStart: aBoolean 11 | ] 12 | 13 | { #category : #hooks } 14 | TRCircleHeadShape >> computePath [ 15 | path := TRPlatform current computeCircleHeadPathFor: self. 16 | 17 | ] 18 | 19 | { #category : #initialization } 20 | TRCircleHeadShape >> initialize [ 21 | super initialize. 22 | open := false. 23 | ] 24 | -------------------------------------------------------------------------------- /src/Trachel/TRDarkSolarizedTheme.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRDarkSolarizedTheme, 3 | #superclass : #TRSolarizedTheme, 4 | #category : #'Trachel-Core-Theme' 5 | } 6 | 7 | { #category : #accessing } 8 | TRDarkSolarizedTheme >> trachelCanvasColor [ 9 | " 10 | The original Solarized color is: 11 | ^ self base03 12 | 13 | However, it does not fit the Pharo Dark theme 14 | " 15 | ^ Color veryDarkGray 16 | ] 17 | -------------------------------------------------------------------------------- /src/Trachel/TRDarkTheme.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRDarkTheme, 3 | #superclass : #TRPlainColorTheme, 4 | #category : #'Trachel-Core-Theme' 5 | } 6 | 7 | { #category : #accessing } 8 | TRDarkTheme >> trachelCanvasColor [ 9 | ^ PharoDarkTheme baseColor 10 | ] 11 | 12 | { #category : #accessing } 13 | TRDarkTheme >> transformColor: aColor [ 14 | " 15 | self new transformColor: (Color red: 0.8 green: 0.5 blue: 0.5) 16 | " 17 | ^ Color h: aColor hue s: aColor saturation l: (0.5 - ((aColor lightness - 0.5) * 0.8)) alpha: aColor alpha 18 | ] 19 | -------------------------------------------------------------------------------- /src/Trachel/TREllipseShapeTest.class.st: -------------------------------------------------------------------------------- 1 | " 2 | A TREllipseShapeTest is a test class for testing the behavior of TREllipseShape 3 | " 4 | Class { 5 | #name : #TREllipseShapeTest, 6 | #superclass : #TRTest, 7 | #category : #'Trachel-Tests' 8 | } 9 | 10 | { #category : #tests } 11 | TREllipseShapeTest >> testStrokeWidth [ 12 | self assert: TREllipseShape new strokeWidth equals: TREllipseShape new defaultStrokeWidth. 13 | ] 14 | 15 | { #category : #tests } 16 | TREllipseShapeTest >> testStrokeWidth02 [ 17 | self assert: TREllipseShape new defaultStrokeWidth equals: 1. 18 | 19 | ] 20 | 21 | { #category : #tests } 22 | TREllipseShapeTest >> testWidth [ 23 | 24 | | s | 25 | s := TREllipseShape new size: 30. 26 | self assert: s strokeWidth equals: 1. 27 | ] 28 | -------------------------------------------------------------------------------- /src/Trachel/TREventOverseer.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TREventOverseer, 3 | #superclass : #TRObject, 4 | #instVars : [ 5 | 'block' 6 | ], 7 | #category : #'Trachel-Core' 8 | } 9 | 10 | { #category : #accessing } 11 | TREventOverseer >> block [ 12 | ^ block 13 | ] 14 | 15 | { #category : #accessing } 16 | TREventOverseer >> block: aOneArgBlock [ 17 | "The block is evaluated at each event fired by TRMorph" 18 | block := aOneArgBlock 19 | ] 20 | 21 | { #category : #public } 22 | TREventOverseer >> firedEvent: anEvent [ 23 | block rtValue: anEvent 24 | ] 25 | 26 | { #category : #initialization } 27 | TREventOverseer >> initialize [ 28 | super initialize. 29 | "Do nothing for now" 30 | block := nil 31 | ] 32 | -------------------------------------------------------------------------------- /src/Trachel/TRExtensibleLabelShape.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRExtensibleLabelShape, 3 | #superclass : #TRLabelShape, 4 | #category : #'Trachel-Shapes' 5 | } 6 | 7 | { #category : #accessing } 8 | TRExtensibleLabelShape >> extent: newExtent [ 9 | | oldExtent | 10 | oldExtent := self extent. 11 | (oldExtent = (0 @ 0)) ifTrue: [ ^ self ]. 12 | matrix scaleBy: newExtent / oldExtent. 13 | self triggerCallbacksForNewExtent: newExtent oldExtent: oldExtent. 14 | 15 | ] 16 | -------------------------------------------------------------------------------- /src/Trachel/TRFilledArrowHeadShape.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRFilledArrowHeadShape, 3 | #superclass : #TREmptyArrowHeadShape, 4 | #category : #'Trachel-ShapesForArrow' 5 | } 6 | 7 | { #category : #accessing } 8 | TRFilledArrowHeadShape >> color: aColor [ 9 | super color: aColor. 10 | color := aColor 11 | ] 12 | -------------------------------------------------------------------------------- /src/Trachel/TRFilledCircleHeadShape.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRFilledCircleHeadShape, 3 | #superclass : #TRCircleHeadShape, 4 | #category : #'Trachel-ShapesForArrow' 5 | } 6 | 7 | { #category : #accessing } 8 | TRFilledCircleHeadShape >> color: aColor [ 9 | super color: aColor. 10 | color := aColor 11 | ] 12 | -------------------------------------------------------------------------------- /src/Trachel/TRFilledDiamondShape.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRFilledDiamondShape, 3 | #superclass : #TRDiamondShape, 4 | #category : #'Trachel-ShapesForArrow' 5 | } 6 | 7 | { #category : #accessing } 8 | TRFilledDiamondShape >> color: aColor [ 9 | super color: aColor. 10 | color := aColor 11 | ] 12 | -------------------------------------------------------------------------------- /src/Trachel/TRFilledNarrowArrowHeadShape.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRFilledNarrowArrowHeadShape, 3 | #superclass : #TREmptyNarrowArrowHeadShape, 4 | #category : #'Trachel-ShapesForArrow' 5 | } 6 | 7 | { #category : #accessing } 8 | TRFilledNarrowArrowHeadShape >> color: aColor [ 9 | super color: aColor. 10 | color := aColor 11 | ] 12 | -------------------------------------------------------------------------------- /src/Trachel/TRFocusCenter.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRFocusCenter, 3 | #superclass : #TRFocusing, 4 | #category : #'Trachel-Core' 5 | } 6 | 7 | { #category : #hooks } 8 | TRFocusCenter >> on: canvas [ 9 | | encompassingRectangle | 10 | encompassingRectangle := self encompassingRectangleOf: canvas shapes. 11 | canvas camera translateTo: encompassingRectangle center. 12 | ] 13 | -------------------------------------------------------------------------------- /src/Trachel/TRFocusRightMost.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRFocusRightMost, 3 | #superclass : #TRFocusing, 4 | #category : #'Trachel-Core' 5 | } 6 | 7 | { #category : #hooks } 8 | TRFocusRightMost >> on: canvas [ 9 | | encompassingRectangle | 10 | encompassingRectangle := self encompassingRectangleOf: canvas shapes. 11 | canvas camera translateTo: encompassingRectangle rightCenter 12 | ] 13 | -------------------------------------------------------------------------------- /src/Trachel/TRFocusTopLeft.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRFocusTopLeft, 3 | #superclass : #TRFocusing, 4 | #category : #'Trachel-Core' 5 | } 6 | 7 | { #category : #hooks } 8 | TRFocusTopLeft >> on: canvas [ 9 | | encompassingRectangle | 10 | encompassingRectangle := self encompassingRectangleOf: canvas shapes. 11 | canvas camera translateTo: encompassingRectangle topLeft 12 | ] 13 | -------------------------------------------------------------------------------- /src/Trachel/TRFocusTopRight.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRFocusTopRight, 3 | #superclass : #TRFocusing, 4 | #category : #'Trachel-Core' 5 | } 6 | 7 | { #category : #hooks } 8 | TRFocusTopRight >> on: canvas [ 9 | | encompassingRectangle | 10 | encompassingRectangle := self encompassingRectangleOf: canvas shapes. 11 | canvas camera translateTo: encompassingRectangle topRight 12 | ] 13 | -------------------------------------------------------------------------------- /src/Trachel/TRFocusing.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRFocusing, 3 | #superclass : #TRObject, 4 | #category : #'Trachel-Core' 5 | } 6 | 7 | { #category : #public } 8 | TRFocusing class >> on: canvas [ 9 | ^ self new on: canvas 10 | ] 11 | 12 | { #category : #utility } 13 | TRFocusing >> encompassingRectangleOf: shapes [ 14 | ^ shapes asRTGroup encompassingRectangle 15 | 16 | ] 17 | 18 | { #category : #hooks } 19 | TRFocusing >> on: canvas [ 20 | self subclassResponsibility 21 | ] 22 | -------------------------------------------------------------------------------- /src/Trachel/TRKeyDown.class.st: -------------------------------------------------------------------------------- 1 | " 2 | Event representing a key pressing (but not releasing) 3 | 4 | -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 5 | v := RTView new. 6 | 7 | e := RTBox new color: Color blue; size: 50; element. 8 | 9 | v add: e. 10 | 11 | e when: TRKeyDown do: [ :event | 12 | event keyCombination = $r asKeyCombination ifTrue: [ 13 | e color: Color random. 14 | v signalUpdate. 15 | ] 16 | ]. 17 | 18 | v open 19 | -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 20 | " 21 | Class { 22 | #name : #TRKeyDown, 23 | #superclass : #TRKeyboardEvent, 24 | #category : #'Trachel-Events' 25 | } 26 | -------------------------------------------------------------------------------- /src/Trachel/TRKeyUp.class.st: -------------------------------------------------------------------------------- 1 | " 2 | Event representing a key release. 3 | 4 | [[[ 5 | c := TRCanvas new. 6 | 7 | c when: TRKeyDown do: [ :event | 8 | self log: '[DOWN]'; logCr: event keyCombination. 9 | ]. 10 | 11 | c when: TRKeyUp do: [ :event | 12 | self log: '[UP]'; logCr: event keyCombination. 13 | ]. 14 | 15 | c open 16 | ]]] 17 | " 18 | Class { 19 | #name : #TRKeyUp, 20 | #superclass : #TRKeyboardEvent, 21 | #category : #'Trachel-Events' 22 | } 23 | -------------------------------------------------------------------------------- /src/Trachel/TRMorphDrop.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRMorphDrop, 3 | #superclass : #TRMorphDropEvent, 4 | #category : #'Trachel-Events' 5 | } 6 | -------------------------------------------------------------------------------- /src/Trachel/TRMorphDropEvent.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRMorphDropEvent, 3 | #superclass : #TRShapeEvent, 4 | #instVars : [ 5 | 'droppedMorph', 6 | 'dropMorphEvent' 7 | ], 8 | #category : #'Trachel-Events' 9 | } 10 | 11 | { #category : #accessing } 12 | TRMorphDropEvent >> dropMorphEvent [ 13 | ^ dropMorphEvent 14 | ] 15 | 16 | { #category : #accessing } 17 | TRMorphDropEvent >> dropMorphEvent: anObject [ 18 | dropMorphEvent := anObject 19 | ] 20 | 21 | { #category : #accessing } 22 | TRMorphDropEvent >> droppedMorph [ 23 | ^ droppedMorph 24 | ] 25 | 26 | { #category : #accessing } 27 | TRMorphDropEvent >> droppedMorph: anObject [ 28 | droppedMorph := anObject 29 | ] 30 | -------------------------------------------------------------------------------- /src/Trachel/TRMorphWantsDrop.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRMorphWantsDrop, 3 | #superclass : #TRMorphDropEvent, 4 | #instVars : [ 5 | 'whenHandledBlock' 6 | ], 7 | #category : #'Trachel-Events' 8 | } 9 | 10 | { #category : #events } 11 | TRMorphWantsDrop >> handledBy: anElement [ 12 | whenHandledBlock value: anElement 13 | ] 14 | 15 | { #category : #events } 16 | TRMorphWantsDrop >> whenHandled: aBlock [ 17 | "For TRMorph internal tracking of who actually handled the morph" 18 | whenHandledBlock := aBlock 19 | ] 20 | -------------------------------------------------------------------------------- /src/Trachel/TRMorphWidgetFactory.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRMorphWidgetFactory, 3 | #superclass : #TRObject, 4 | #category : #'Trachel-Core' 5 | } 6 | 7 | { #category : #public } 8 | TRMorphWidgetFactory class >> menuForAssociations: associations on: element [ 9 | "associations is a list of association following: #aSymbol -> [ :model | ... ] 10 | The block contains in the association is evaluated with the model provided by the element." 11 | 12 | | v | 13 | v := TRPlatform current menuMorphClass new. 14 | associations do: [ :assoc | 15 | v 16 | add: assoc key 17 | target: assoc value 18 | selector: #cull: 19 | argument: element 20 | ]. 21 | 22 | v popUpInWorld. 23 | ] 24 | -------------------------------------------------------------------------------- /src/Trachel/TRMouseAbstractDrop.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I am a base class for (drag and) drop events attached to the drop target elements. 3 | " 4 | Class { 5 | #name : #TRMouseAbstractDrop, 6 | #superclass : #TRAbstractMouseEvent, 7 | #instVars : [ 8 | 'draggedShape' 9 | ], 10 | #category : #'Trachel-Events' 11 | } 12 | 13 | { #category : #accessing } 14 | TRMouseAbstractDrop >> draggedElement [ 15 | ^ draggedShape element 16 | ] 17 | 18 | { #category : #accessing } 19 | TRMouseAbstractDrop >> draggedShape [ 20 | ^ draggedShape 21 | ] 22 | 23 | { #category : #accessing } 24 | TRMouseAbstractDrop >> draggedShape: aShape [ 25 | draggedShape := aShape 26 | ] 27 | -------------------------------------------------------------------------------- /src/Trachel/TRMouseClick.class.st: -------------------------------------------------------------------------------- 1 | " 2 | A ROMouseClick is xxxxxxxxx. 3 | 4 | Instance Variables 5 | commandKeyPressed: 6 | controlKeyPressed: 7 | shiftKeyPressed: 8 | 9 | commandKeyPressed 10 | - xxxxx 11 | 12 | controlKeyPressed 13 | - xxxxx 14 | 15 | shiftKeyPressed 16 | - xxxxx 17 | 18 | " 19 | Class { 20 | #name : #TRMouseClick, 21 | #superclass : #TRAbstractMouseClick, 22 | #category : #'Trachel-Events' 23 | } 24 | -------------------------------------------------------------------------------- /src/Trachel/TRMouseDoubleClick.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRMouseDoubleClick, 3 | #superclass : #TRAbstractMouseClick, 4 | #category : #'Trachel-Events' 5 | } 6 | -------------------------------------------------------------------------------- /src/Trachel/TRMouseDoubleLeftClick.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRMouseDoubleLeftClick, 3 | #superclass : #TRMouseDoubleClick, 4 | #category : #'Trachel-Events' 5 | } 6 | -------------------------------------------------------------------------------- /src/Trachel/TRMouseDoubleRightClick.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRMouseDoubleRightClick, 3 | #superclass : #TRMouseDoubleClick, 4 | #category : #'Trachel-Events' 5 | } 6 | -------------------------------------------------------------------------------- /src/Trachel/TRMouseDragDrop.class.st: -------------------------------------------------------------------------------- 1 | " 2 | When: at the end of DragDrop event 3 | Target: drop target element (element underneath the dragged one) 4 | " 5 | Class { 6 | #name : #TRMouseDragDrop, 7 | #superclass : #TRMouseAbstractDrop, 8 | #category : #'Trachel-Events' 9 | } 10 | -------------------------------------------------------------------------------- /src/Trachel/TRMouseDragEnd.class.st: -------------------------------------------------------------------------------- 1 | " 2 | When: at the end of DragDrop event 3 | Target: dragged element 4 | " 5 | Class { 6 | #name : #TRMouseDragEnd, 7 | #superclass : #TRAbstractMouseEvent, 8 | #category : #'Trachel-Events' 9 | } 10 | -------------------------------------------------------------------------------- /src/Trachel/TRMouseDragEnter.class.st: -------------------------------------------------------------------------------- 1 | " 2 | When: when the dragged element entered a valid drop target element 3 | Target: drop target element (element underneath the dragged one) 4 | " 5 | Class { 6 | #name : #TRMouseDragEnter, 7 | #superclass : #TRMouseAbstractDrop, 8 | #category : #'Trachel-Events' 9 | } 10 | -------------------------------------------------------------------------------- /src/Trachel/TRMouseDragLeave.class.st: -------------------------------------------------------------------------------- 1 | " 2 | When: when the dragged element left a valid drop target element 3 | Target: drop target element (element underneath the dragged one) 4 | " 5 | Class { 6 | #name : #TRMouseDragLeave, 7 | #superclass : #TRMouseAbstractDrop, 8 | #category : #'Trachel-Events' 9 | } 10 | -------------------------------------------------------------------------------- /src/Trachel/TRMouseDragOver.class.st: -------------------------------------------------------------------------------- 1 | " 2 | When: when the dragged element is over a valid drop target element 3 | Target: drop target element (element underneath the dragged one) 4 | " 5 | Class { 6 | #name : #TRMouseDragOver, 7 | #superclass : #TRMouseAbstractDrop, 8 | #category : #'Trachel-Events' 9 | } 10 | -------------------------------------------------------------------------------- /src/Trachel/TRMouseDragStart.class.st: -------------------------------------------------------------------------------- 1 | " 2 | When: when a valid draggable element is grabbed 3 | Target: dragged element 4 | " 5 | Class { 6 | #name : #TRMouseDragStart, 7 | #superclass : #TRAbstractMouseEvent, 8 | #category : #'Trachel-Events' 9 | } 10 | -------------------------------------------------------------------------------- /src/Trachel/TRMouseDraggingTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRMouseDraggingTest, 3 | #superclass : #TRTest, 4 | #category : #'Trachel-Tests' 5 | } 6 | 7 | { #category : #tests } 8 | TRMouseDraggingTest >> testPositionFromCamera [ 9 | 10 | | evt | 11 | evt := TRMouseDragging new. 12 | self assert: (evt positionFromCamera closeTo: -250 @ -250) 13 | ] 14 | 15 | { #category : #tests } 16 | TRMouseDraggingTest >> testPositionOnDefault [ 17 | 18 | | evt | 19 | evt := TRMouseDragging new. 20 | self assert: evt position equals: 0 @ 0 21 | ] 22 | -------------------------------------------------------------------------------- /src/Trachel/TRMouseEnter.class.st: -------------------------------------------------------------------------------- 1 | " 2 | When: when a mouse cursor entered an element 3 | Target: entered element 4 | " 5 | Class { 6 | #name : #TRMouseEnter, 7 | #superclass : #TRAbstractMouseEvent, 8 | #category : #'Trachel-Events' 9 | } 10 | -------------------------------------------------------------------------------- /src/Trachel/TRMouseLeave.class.st: -------------------------------------------------------------------------------- 1 | " 2 | When: when a mouse cursor left an element 3 | Target: entered element 4 | " 5 | Class { 6 | #name : #TRMouseLeave, 7 | #superclass : #TRAbstractMouseEvent, 8 | #category : #'Trachel-Events' 9 | } 10 | -------------------------------------------------------------------------------- /src/Trachel/TRMouseLeftClick.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRMouseLeftClick, 3 | #superclass : #TRMouseClick, 4 | #category : #'Trachel-Events' 5 | } 6 | -------------------------------------------------------------------------------- /src/Trachel/TRMouseLeftDragStart.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRMouseLeftDragStart, 3 | #superclass : #TRMouseDragStart, 4 | #category : #'Trachel-Events' 5 | } 6 | -------------------------------------------------------------------------------- /src/Trachel/TRMouseMiddleDragStart.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRMouseMiddleDragStart, 3 | #superclass : #TRMouseDragStart, 4 | #category : #'Trachel-Events' 5 | } 6 | -------------------------------------------------------------------------------- /src/Trachel/TRMouseMove.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRMouseMove, 3 | #superclass : #TRAbstractMouseEvent, 4 | #category : #'Trachel-Events' 5 | } 6 | -------------------------------------------------------------------------------- /src/Trachel/TRMouseRightClick.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRMouseRightClick, 3 | #superclass : #TRMouseClick, 4 | #category : #'Trachel-Events' 5 | } 6 | -------------------------------------------------------------------------------- /src/Trachel/TRMouseRightDragStart.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRMouseRightDragStart, 3 | #superclass : #TRMouseDragStart, 4 | #category : #'Trachel-Events' 5 | } 6 | -------------------------------------------------------------------------------- /src/Trachel/TRObject.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRObject, 3 | #superclass : #Object, 4 | #category : #'Trachel-Core' 5 | } 6 | -------------------------------------------------------------------------------- /src/Trachel/TRRemoveCallback.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I am triggered when aShape has been removed from a canvas. 3 | The opposite of me is TRAddedCallback. 4 | 5 | ==aShape addCallback: (TRRemoveCallback block: [ :shape | ""do sth"" ])== 6 | " 7 | Class { 8 | #name : #TRRemoveCallback, 9 | #superclass : #TRCallback, 10 | #category : #'Trachel-Callbacks' 11 | } 12 | 13 | { #category : #testing } 14 | TRRemoveCallback >> isRemoveCallback [ 15 | ^ true 16 | ] 17 | 18 | { #category : #linking } 19 | TRRemoveCallback >> removeShape: aTRShape [ 20 | ^ block cull: aTRShape 21 | ] 22 | -------------------------------------------------------------------------------- /src/Trachel/TRResizeCanceled.class.st: -------------------------------------------------------------------------------- 1 | " 2 | I am fired when Resize operation is canceled globally for the whole View. 3 | 4 | !! Collaborators 5 | 6 | DCRTResizable 7 | " 8 | Class { 9 | #name : #TRResizeCanceled, 10 | #superclass : #TRShapeEvent, 11 | #category : #'Trachel-Events' 12 | } 13 | -------------------------------------------------------------------------------- /src/Trachel/TRResizeCanvasEvent.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRResizeCanvasEvent, 3 | #superclass : #TREvent, 4 | #instVars : [ 5 | 'newExtent', 6 | 'oldExtent' 7 | ], 8 | #category : #'Trachel-Events' 9 | } 10 | 11 | { #category : #accessing } 12 | TRResizeCanvasEvent >> newExtent [ 13 | ^ newExtent 14 | ] 15 | 16 | { #category : #accessing } 17 | TRResizeCanvasEvent >> newExtent: aPoint [ 18 | newExtent := aPoint 19 | ] 20 | 21 | { #category : #accessing } 22 | TRResizeCanvasEvent >> oldExtent [ 23 | ^ oldExtent 24 | ] 25 | 26 | { #category : #accessing } 27 | TRResizeCanvasEvent >> oldExtent: aPoint [ 28 | oldExtent := aPoint 29 | ] 30 | -------------------------------------------------------------------------------- /src/Trachel/TRRoundedBoxShape.class.st: -------------------------------------------------------------------------------- 1 | " 2 | Box shape with (optionally) rounded corners. 3 | " 4 | Class { 5 | #name : #TRRoundedBoxShape, 6 | #superclass : #TRBoxShape, 7 | #instVars : [ 8 | 'borderRadius' 9 | ], 10 | #category : #'Trachel-Shapes' 11 | } 12 | 13 | { #category : #accessing } 14 | TRRoundedBoxShape >> borderRadius [ 15 | ^ borderRadius 16 | ] 17 | 18 | { #category : #accessing } 19 | TRRoundedBoxShape >> borderRadius: aNumber [ 20 | borderRadius := aNumber 21 | ] 22 | 23 | { #category : #private } 24 | TRRoundedBoxShape >> computePath [ 25 | path := TRPlatform current computeRoundBoxPathFor: self. 26 | ] 27 | -------------------------------------------------------------------------------- /src/Trachel/TRShapeEvent.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRShapeEvent, 3 | #superclass : #TREvent, 4 | #instVars : [ 5 | 'shape' 6 | ], 7 | #category : #'Trachel-Events' 8 | } 9 | 10 | { #category : #'instance creation' } 11 | TRShapeEvent class >> shape: aTrachelShape [ 12 | ^ self new shape: aTrachelShape; yourself 13 | ] 14 | 15 | { #category : #accessing } 16 | TRShapeEvent >> element [ 17 | "Could be any object" 18 | 19 | ^ self shape class = TRCanvas 20 | ifTrue: [ nil ] 21 | ifFalse: [ self shape element ] 22 | ] 23 | 24 | { #category : #accessing } 25 | TRShapeEvent >> shape [ 26 | 27 | ^ shape 28 | ] 29 | 30 | { #category : #accessing } 31 | TRShapeEvent >> shape: aTrachelShape [ 32 | 33 | shape := aTrachelShape 34 | ] 35 | -------------------------------------------------------------------------------- /src/Trachel/TRTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRTest, 3 | #superclass : #TestCase, 4 | #category : #'Trachel-Tests' 5 | } 6 | 7 | { #category : #documentation } 8 | TRTest >> readme [ 9 | 10 | " 11 | Exporting to Amber 12 | 13 | | exporter rootClasses | 14 | exporter := P2AExporterV11 new. 15 | rootClasses := Array with: TREvent with: TRObject with: TRTest. 16 | rootClasses do: [ :c | 17 | c withAllSubclasses do: [ :cc | exporter addClass: cc ] ]. 18 | exporter fileOutAsString 19 | 20 | 21 | 22 | " 23 | ] 24 | 25 | { #category : #running } 26 | TRTest >> setUp [ 27 | super setUp. 28 | Transcript show: self class name asString, '>>'. 29 | Transcript show: testSelector asString; cr 30 | ] 31 | -------------------------------------------------------------------------------- /src/Trachel/TRUtil.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRUtil, 3 | #superclass : #TRObject, 4 | #classInstVars : [ 5 | 'instance' 6 | ], 7 | #category : #'Trachel-Core' 8 | } 9 | 10 | { #category : #accessing } 11 | TRUtil class >> instance [ 12 | ^ instance ifNil: [ instance := self new ] 13 | ] 14 | 15 | { #category : #factory } 16 | TRUtil >> widgetFactory [ 17 | ^ TRMorphWidgetFactory 18 | ] 19 | -------------------------------------------------------------------------------- /src/Trachel/TRVIAnimatedPointTest.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRVIAnimatedPointTest, 3 | #superclass : #TRTest, 4 | #instVars : [ 5 | 'pZero' 6 | ], 7 | #category : #'Trachel-Viva' 8 | } 9 | 10 | { #category : #running } 11 | TRVIAnimatedPointTest >> setUp [ 12 | super setUp. 13 | pZero := TRVIAnimatedPoint new. 14 | ] 15 | 16 | { #category : #tests } 17 | TRVIAnimatedPointTest >> testAddToZero [ 18 | | p | 19 | p := pZero + (1 @ 1). 20 | self assert: p x value equals: 1. 21 | self assert: p y value equals: 1. 22 | ] 23 | 24 | { #category : #tests } 25 | TRVIAnimatedPointTest >> testZero [ 26 | 27 | self assert: pZero x value equals: 0. 28 | self assert: pZero y value equals: 0. 29 | ] 30 | -------------------------------------------------------------------------------- /src/Trachel/TRWhiteSolarizedTheme.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRWhiteSolarizedTheme, 3 | #superclass : #TRSolarizedTheme, 4 | #category : #'Trachel-Core-Theme' 5 | } 6 | 7 | { #category : #accessing } 8 | TRWhiteSolarizedTheme >> trachelCanvasColor [ 9 | " 10 | The original Solarized color is: 11 | ^ self base3 12 | 13 | However, it does not fit the Pharo Dark theme 14 | " 15 | ^ Color white 16 | ] 17 | -------------------------------------------------------------------------------- /src/Trachel/TRWhiteTheme.class.st: -------------------------------------------------------------------------------- 1 | Class { 2 | #name : #TRWhiteTheme, 3 | #superclass : #TRPlainColorTheme, 4 | #classInstVars : [ 5 | 'default' 6 | ], 7 | #category : #'Trachel-Core-Theme' 8 | } 9 | 10 | { #category : #accessing } 11 | TRWhiteTheme class >> default [ 12 | "Return the default theme" 13 | default ifNil: [ default := self new ]. 14 | ^ default 15 | ] 16 | 17 | { #category : #accessing } 18 | TRWhiteTheme >> trachelCanvasColor [ 19 | ^ Color white 20 | ] 21 | -------------------------------------------------------------------------------- /src/Trachel/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #Trachel } 2 | -------------------------------------------------------------------------------- /src/VersionOfRoassal2/package.st: -------------------------------------------------------------------------------- 1 | Package { #name : #VersionOfRoassal2 } 2 | -------------------------------------------------------------------------------- /update.sh: -------------------------------------------------------------------------------- 1 | git commit --allow-empty -m "Trigger" && git push 2 | --------------------------------------------------------------------------------