This module provides an easy-to-use interface to create an interactive, graphical front-end for you graph rewriting system. The controls of the GUI are:
- left-click on a menu entry: rule selection. At all times for each redex (according to the selected rule) one node of the redex (the first node that is matched) is marked red in the graph.
- right-click on a menu entry: applies the rule once for each redex currently existing in the graph. No contractions take place for redexes deleted or arisen during this process.
- right-click on a (red) node: applies the selected rule to the redex containing the node.
- drag a node: by this you can manually help out the graph drawing mechanism to find a better layout.
- drag outside of a node: scroll around.
- mouse wheel: zoom
-
z
: autozoom -
space
: pause/resume layouting
Please have a look the graph-rewriting-ski package for an example application that makes use of this library.
- initialise :: IO (String, [String])
- run :: (View Position n, Render n', View Position n', View Rotation n', PortSpec n', View [Port] n') => Int -> (Graph n -> Graph n') -> (Node -> Rewrite n a) -> Graph n -> LabeledTree (Rule n) -> IO ()
- data LabeledTree a
- = Branch String [LabeledTree a]
- | Leaf String a
Documentation
initialise :: IO (String, [String])Source
Initialises GLUT. Returns program name and command line arguments.
:: (View Position n, Render n', View Position n', View Rotation n', PortSpec n', View [Port] n') | |
=> Int | The number of layout steps to apply before displaying the graph |
-> (Graph n -> Graph n') | A projection function that is applied just before displaying the graph |
-> (Node -> Rewrite n a) | The monadic graph transformation code for a layout step |
-> Graph n | |
-> LabeledTree (Rule n) | The rule menu given as a tree of named rules |
-> IO () |
data LabeledTree a Source
Branch String [LabeledTree a] | |
Leaf String a |