X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.modeling%2Fscl%2FSimantics%2FDiagram.scl;h=8276962eac7d4aefab138355327ee3d364cd3ffe;hb=3edbf85ff8a7f1bd596857a24b1bdebd66943d6b;hp=554a25edad081a50f4388688d19820b359440942;hpb=04f200d2010339b05ba016b6f0c247653f5bdc97;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.modeling/scl/Simantics/Diagram.scl b/bundles/org.simantics.modeling/scl/Simantics/Diagram.scl index 554a25eda..8276962ea 100644 --- a/bundles/org.simantics.modeling/scl/Simantics/Diagram.scl +++ b/bundles/org.simantics.modeling/scl/Simantics/Diagram.scl @@ -149,9 +149,15 @@ hasRandomIdentifier entity = runProc (claimRelatedValue_ entity L0.identifier GU """Returns all diagrams of the given model.""" diagramsOf :: Model -> [Diagram] -diagramsOf model = recurse - DIA.Diagram - (configurationOf model) +diagramsOf model = diagramsUnder $ configurationOf model + +""" +Returns all diagrams under the specified diagram folder. +The parameter can also be the configuration root `configurationOf` +in which case this function returns the same as `diagramsOf model`. +""" +diagramsUnder :: DiagramFolder -> [Resource] +diagramsUnder folder = recurse DIA.Diagram folder where recurse t r = do cs = children r @@ -182,8 +188,6 @@ pathNameOf diagram = do diagramResourceOf :: Diagram -> Resource diagramResourceOf d = singleObject d MOD.CompositeToDiagram -import "Extras/HashMap" as Map - """Constructs a transformation for a diagram element.""" mapDiagramElement :: (a -> b) -> (a -> b) -> (a -> Maybe b) -> (a -> b) -> DiagramElement a -> DiagramElement b mapDiagramElement mapComponentType mapTerminal mapAttribute mapFlagType diagramElement = @@ -228,9 +232,9 @@ createDiagramR (ExistingDiagram diagram') joinMap elementSpecs = runProc do configuration = diagram' diagram = compositeToDiagram' configuration hasName = L0.HasName - componentMap = Map.fromList [ (c `relatedValue` hasName :: String, c) - | c <- children configuration - ] + componentMap = MMap.fromEntryList [ (c `relatedValue` hasName :: String, c) + | c <- children configuration + ] denyByPredicate diagram L0.ConsistsOf elements = setElements (DiagramInfo diagram configuration componentMap) joinMap elementSpecs claimRelatedValue diagram DIA.HasModCount @@ -240,7 +244,7 @@ createDiagramR (ExistingDiagram diagram') joinMap elementSpecs = runProc do createDiagramR (NewDiagram model path folderType compositeType) joinMap elementSpecs = (runProc do configuration = createConfiguration () diagram = compositeToDiagram' configuration - elements = setElements (DiagramInfo diagram configuration (Map.create ())) joinMap elementSpecs + elements = setElements (DiagramInfo diagram configuration (MMap.create ())) joinMap elementSpecs claimRelatedValue diagram DIA.HasModCount (fromInteger (length elements) :: Long) (configuration, elements) @@ -298,19 +302,19 @@ importJava "org.simantics.modeling.utils.JoinMap" where /* createJoin :: (Dynamic -> Resource) -> Dynamic -> Resource -createJoin joinMap key = if Map.contains joinMap key - then Map.unsafeGet joinMap key +createJoin joinMap key = if MMap.containsKey joinMap key + then MMap.unsafeGet joinMap key else do j = newEntity [ hasType STR.ConnectionJoin ] - Map.put joinMap key j + MMap.put joinMap key j j */ data DiagramInfo = DiagramInfo Resource // diagram Resource // configuration - (Map.T String Resource) // existing components + (MMap.T String Resource) // existing components """ Sets the elements of the diagram. Diagram is assumed to be empty, @@ -330,7 +334,7 @@ setElements (DiagramInfo diagram configuration componentMap) joinMap elementSpec for (zip elementSpecs elements) setConnectionName elements ) where - elementMap = Map.create () + elementMap = MMap.create () idRef = ref (0 :: Integer) isConnectionResource r = isInstanceOf r DIA.Connection @@ -343,8 +347,8 @@ setElements (DiagramInfo diagram configuration componentMap) joinMap elementSpec idRef := id + 1 show id createElement (Component componentType name position properties) = do - component = if Map.contains componentMap name - then Map.unsafeGet componentMap name + component = if MMap.containsKey componentMap name + then MMap.unsafeGet componentMap name else newEntity [ hasName name, hasParent configuration, @@ -365,13 +369,13 @@ setElements (DiagramInfo diagram configuration componentMap) joinMap elementSpec MOD.ElementToComponent component ] - Map.put elementMap name element + MMap.put elementMap name element Just element newOrMappedElement eName = do - element = match Map.get elementMap eName with + element = match MMap.get elementMap eName with Just element -> element Nothing -> newEntity [] - Map.put elementMap eName element + MMap.put elementMap eName element element createElement (SimpleConnection aName ar bName br _) = do connection = newEntity [ @@ -415,7 +419,7 @@ setElements (DiagramInfo diagram configuration componentMap) joinMap elementSpec then do claim flag DIA.ExternalFlag flag else () - Map.put elementMap name flag + MMap.put elementMap name flag Just flag createElement (Connection nodeSpecs edges _) = do connection = newEntity [ @@ -499,7 +503,7 @@ setElements (DiagramInfo diagram configuration componentMap) joinMap elementSpec hasFont font ] createElement (Monitor label (Just (MonitorReference componentName suffix)) (MonitorVisuals font strokeWidth hAlign vAlign) position) = do - match (Map.get elementMap componentName) with + match (MMap.get elementMap componentName) with Nothing -> Nothing // Monitored component is not on the same diagram as the monitor. Not supported by this routine. Just element -> do component = singleObject element MOD.ElementToComponent @@ -699,11 +703,11 @@ elementsOfR diagram = filterJust $ map readElement' nodeResources = connectors + routeLines nodeResourceWithIds = zip nodeResources [0..length nodeResources-1] edges = runProc do - rMap = Map.fromList nodeResourceWithIds + rMap = MMap.fromEntryList nodeResourceWithIds edgesOf (node,i) = [ Edge i j | r <- node # DIA.AreConnected - , j = Map.unsafeGet rMap r + , j = MMap.unsafeGet rMap r , j > i ] concatMap edgesOf nodeResourceWithIds