Changeset 12717
- Timestamp:
- 25.10.2009 15:49:35 (4 weeks ago)
- Files:
-
- 1 modified
-
trunk/GUI/GraphLogic.hs (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/GUI/GraphLogic.hs
r12661 r12717 131 131 , options = opts }) -> do 132 132 flags <- readIORef opts 133 let (nodes, comp) = if flagHideNodes flags then hideNodesAux dg 133 let edges = if flagHideEdges flags then hideEdgesAux dg else [] 134 (nodes, comp) = if flagHideNodes flags then hideNodesAux dg edges 134 135 else ([],[]) 135 edges = if flagHideEdges flags then hideEdgesAux dg else []136 136 GA.showTemporaryMessage gi 137 137 "Applying development graph calculus proof rule..." … … 167 167 168 168 -- | hides all unnamed internal nodes that are proven 169 hideNodesAux :: DGraph 169 hideNodesAux :: DGraph -> [EdgeId] 170 170 -> ([GA.NodeId], [(GA.NodeId, GA.NodeId, DGEdgeType, Bool)]) 171 hideNodesAux dg =171 hideNodesAux dg ignoreEdges = 172 172 let nodes = selectNodesByType dg [DGNodeType { nonRefType = NonRefType 173 173 { isProvenCons = True 174 174 , isInternalSpec = True} 175 175 , isLocallyEmpty = True}] 176 edges = getCompressedEdges dg nodes 176 edges = getCompressedEdges dg nodes ignoreEdges 177 177 in (nodes, edges) 178 178 … … 240 240 | otherwise = compressTypes False (t2:r) 241 241 242 -- | innDG with filter of not shown edges 243 fInnDG :: [EdgeId] -> DGraph -> Node -> [LEdge DGLinkLab] 244 fInnDG ignore dg = filter (\ (_,_,l) -> elem (dgl_id l) ignore) . innDG dg 245 246 -- | outDG with filter of not shown edges 247 fOutDG :: [EdgeId] -> DGraph -> Node -> [LEdge DGLinkLab] 248 fOutDG ignore dg = filter (\ (_,_,l) -> elem (dgl_id l) ignore) . outDG dg 249 242 250 -- | returns a list of compressed edges 243 getCompressedEdges :: DGraph -> [Node] -> [(Node,Node,DGEdgeType, Bool)] 244 getCompressedEdges dg hidden = filterDuplicates $ getShortPaths 245 $ concatMap (\ e@(_,t,_) -> map (e:) $ getPaths dg t hidden []) inEdges 251 getCompressedEdges :: DGraph -> [Node] -> [EdgeId] 252 -> [(Node,Node,DGEdgeType, Bool)] 253 getCompressedEdges dg hidden ign = filterDuplicates $ getShortPaths 254 $ concatMap (\ e@(_,t,_) -> map (e:) $ getPaths dg t hidden [] ign) inEdges 246 255 where 247 256 inEdges = filter (\ (_,t,_) -> elem t hidden) 248 $ concatMap ( outDGdg)257 $ concatMap (fOutDG ign dg) 249 258 $ foldr (\ n i -> if elem n hidden 250 259 || elem n i then i else n:i) [] 251 $ map (\ (s,_,_) -> s) $ concatMap ( innDGdg) hidden260 $ map (\ (s,_,_) -> s) $ concatMap (fInnDG ign dg) hidden 252 261 253 262 -- | filter duplicate paths … … 264 273 265 274 -- | returns the pahts of a given node through hidden nodes 266 getPaths :: DGraph -> Node -> [Node] -> [Node] -> [[LEdge DGLinkLab]] 267 getPaths dg node hidden seen' = if elem node hidden then 275 getPaths :: DGraph -> Node -> [Node] -> [Node] -> [EdgeId] 276 -> [[LEdge DGLinkLab]] 277 getPaths dg node hidden seen' ign = if elem node hidden then 268 278 if null edges then [] 269 else concatMap (\ e@(_,t,_) -> map (e:) $ getPaths dg t hidden seen) edges 279 else concatMap (\ e@(_,t,_) -> map (e:) $ getPaths dg t hidden seen ign) 280 edges 270 281 else [[]] 271 282 where 272 283 seen = node:seen' 273 edges = filter (\ (_,t,_) -> notElem t seen) $ outDGdg node284 edges = filter (\ (_,t,_) -> notElem t seen) $ fOutDG ign dg node 274 285 275 286 -- | returns source and target node of a path with the compressed type