-- |Netrium is Copyright Anthony Waite, Dave Hetwett, Shaun Laurens 2009-2015, and files herein are licensed
-- |under the MIT license,  the text of which can be found in license.txt
--
{-# OPTIONS_HADDOCK hide #-}
module Display (

    module Data.Tree,
    Display(..),
    trimDepth,
    module WriteDotGraph,

    disp, disp',

  ) where

import Data.Tree
import System.Cmd

import WriteDotGraph


class Display a where
  toTree :: a -> Tree String

trimDepth :: Int -> Tree String -> Tree String
trimDepth 0 (Node _ _)  = Node "..." []
trimDepth n (Node l ts) = Node l     (map (trimDepth (n-1)) ts)

-- Utils for use in ghci:

disp :: Display a => a -> IO ()
disp = disp' 8

disp' :: Display a => Int -> a -> IO ()
disp' depth x = do
  writeDotFile "out.dot" (trimDepth depth $ toTree x)
  rawSystem "dot" ["-Tsvg", "-o", "out.svg", "out.dot"]
  rawSystem "eog" ["out.svg"]
  return ()