Changeset 12717

Show
Ignore:
Timestamp:
25.10.2009 15:49:35 (4 weeks ago)
Author:
raider
Message:

hidden edges are now filtered befor calculating compressed paths. see #753

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/GUI/GraphLogic.hs

    r12661 r12717  
    131131                      , options = opts }) -> do 
    132132      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 
    134135                          else ([],[]) 
    135           edges = if flagHideEdges flags then hideEdgesAux dg else [] 
    136136      GA.showTemporaryMessage gi 
    137137        "Applying development graph calculus proof rule..." 
     
    167167 
    168168-- | hides all unnamed internal nodes that are proven 
    169 hideNodesAux :: DGraph 
     169hideNodesAux :: DGraph -> [EdgeId] 
    170170             -> ([GA.NodeId], [(GA.NodeId, GA.NodeId, DGEdgeType, Bool)]) 
    171 hideNodesAux dg = 
     171hideNodesAux dg ignoreEdges = 
    172172  let nodes = selectNodesByType dg [DGNodeType { nonRefType = NonRefType 
    173173                                                 { isProvenCons = True 
    174174                                                 , isInternalSpec = True} 
    175175                                               , isLocallyEmpty = True}] 
    176       edges = getCompressedEdges dg nodes 
     176      edges = getCompressedEdges dg nodes ignoreEdges 
    177177  in (nodes, edges) 
    178178 
     
    240240  | otherwise = compressTypes False (t2:r) 
    241241 
     242-- | innDG with filter of not shown edges 
     243fInnDG :: [EdgeId] -> DGraph -> Node -> [LEdge DGLinkLab] 
     244fInnDG ignore dg = filter (\ (_,_,l) -> elem (dgl_id l) ignore) . innDG dg 
     245 
     246-- | outDG with filter of not shown edges 
     247fOutDG :: [EdgeId] -> DGraph -> Node -> [LEdge DGLinkLab] 
     248fOutDG ignore dg = filter (\ (_,_,l) -> elem (dgl_id l) ignore) . outDG dg 
     249 
    242250-- | 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 
     251getCompressedEdges :: DGraph -> [Node] -> [EdgeId] 
     252                   -> [(Node,Node,DGEdgeType, Bool)] 
     253getCompressedEdges dg hidden ign = filterDuplicates $ getShortPaths 
     254  $ concatMap (\ e@(_,t,_) -> map (e:) $ getPaths dg t hidden [] ign) inEdges 
    246255  where 
    247256    inEdges = filter (\ (_,t,_) -> elem t hidden) 
    248                      $ concatMap (outDG dg) 
     257                     $ concatMap (fOutDG ign dg) 
    249258                     $ foldr (\ n i -> if elem n hidden 
    250259                                       || elem n i then i else n:i) [] 
    251                      $ map (\ (s,_,_) -> s) $ concatMap (innDG dg) hidden 
     260                     $ map (\ (s,_,_) -> s) $ concatMap (fInnDG ign dg) hidden 
    252261 
    253262-- | filter duplicate paths 
     
    264273 
    265274-- | 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 
     275getPaths :: DGraph -> Node -> [Node] -> [Node] -> [EdgeId] 
     276         -> [[LEdge DGLinkLab]] 
     277getPaths dg node hidden seen' ign = if elem node hidden then 
    268278  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 
    270281  else [[]] 
    271282  where 
    272283    seen = node:seen' 
    273     edges = filter (\ (_,t,_) -> notElem t seen) $ outDG dg node 
     284    edges = filter (\ (_,t,_) -> notElem t seen) $ fOutDG ign dg node 
    274285 
    275286-- | returns source and target node of a path with the compressed type