Wed Nov 16 11:06:33 WET 2005 Malcolm.Wallace@cs.york.ac.uk
* allow editing of edge info
It is now possible to edit the info field on an edge, just like the info
field on a node. (Through a context menu, or pressing 'i' whilst the
edge is selected.)
{
hunk ./src/ContextMenu.hs 46
-edge :: Frame () -> DoublePoint -> State g n e -> IO ()
+edge :: (InfoKind n g, InfoKind e g) =>
+ Frame () -> DoublePoint -> State g n e -> IO ()
hunk ./src/ContextMenu.hs 58
+ ; menuItem contextMenu
+ [ text := "Edit info (i)"
+ , on command := safetyNet theFrame $ reinfoNodeOrEdge theFrame state
+ ]
hunk ./src/ContextMenu.hs 81
-node :: (InfoKind n g) => Int -> Frame () -> State g n e -> IO ()
+node :: (InfoKind n g, InfoKind e g) => Int -> Frame () -> State g n e -> IO ()
hunk ./src/ContextMenu.hs 106
- , on command := safetyNet theFrame $ reinfoNode theFrame state
+ , on command := safetyNet theFrame $ reinfoNodeOrEdge theFrame state
hunk ./src/GUIEvents.hs 17
-mouseDown :: (InfoKind n g, Show g, Parse g) =>
+mouseDown :: (InfoKind n g, InfoKind e g, Show g, Parse g) =>
hunk ./src/GUIEvents.hs 128
-pressIKey :: (InfoKind n g) => Frame () -> State g n e -> IO ()
+pressIKey :: (InfoKind n g, InfoKind e g) => Frame () -> State g n e -> IO ()
hunk ./src/GUIEvents.hs 130
- reinfoNode theFrame state
+ reinfoNodeOrEdge theFrame state
hunk ./src/Network.hs 31
+ , updateEdge
hunk ./src/Network.hs 469
-updateNode :: NodeNr -> (Node n -> Node n) -> Network g n e
- -> Network g n e
+updateNode :: NodeNr -> (Node n -> Node n) -> Network g n e -> Network g n e
hunk ./src/Network.hs 472
- network { networkNodes = insert nodeNr (nodeFunction node) (networkNodes network) }
+ network { networkNodes = insert nodeNr (nodeFunction node)
+ (networkNodes network) }
+
+updateEdge :: EdgeNr -> (Edge e -> Edge e) -> Network g n e -> Network g n e
+updateEdge edgeNr edgeFunction network =
+ network { networkEdges = adjust edgeFunction edgeNr
+ (networkEdges network) }
hunk ./src/NetworkControl.hs 10
- , renameNode, reinfoNode
+ , renameNode, reinfoNodeOrEdge
hunk ./src/NetworkControl.hs 260
-reinfoNode :: InfoKind n g => Frame () -> State g n e -> IO ()
-reinfoNode theFrame state = [_$_]
+reinfoNodeOrEdge :: (InfoKind n g, InfoKind e g) =>
+ Frame () -> State g n e -> IO ()
+reinfoNodeOrEdge theFrame state = [_$_]
hunk ./src/NetworkControl.hs 287
+ ; repaintAll state
+ }
+ (Left err, _, s) -> errorDialog theFrame "Edit warning"
+ ("Cannot parse entered text."
+ ++"\nReason: "++err
+ ++"\nRemaining text: "++s)
+ }
+ EdgeSelection edgeNr ->
+ do{ let oldInfo = getEdgeInfo (getEdge edgeNr network)
+ ; result <- myTextDialog theFrame MultiLine
+ "Edit edge info" (show oldInfo) True
+ ; ifJust result $ \newInfo ->
+ case Parse.runParser Parse.parse () newInfo of
+ (Right x, _, s) ->
+ do{ when (not (null s)) $
+ errorDialog theFrame "Edit warning"
+ ("Excess text after parsed value."
+ ++"\nRemaining text: "++s)
+ -- ; case check (getNodeName network nodeNr)
+ -- (getGlobalInfo network) x of
+ -- [] -> return ()
+ -- e -> errorDialog theFrame "Validity warning"
+ -- ("Validity check fails:\n"
+ -- ++unlines e)
+ ; PD.updateDocument "edit edge info"
+ (updateNetwork [_$_]
+ (updateEdge edgeNr (setEdgeInfo x))) pDoc
hunk ./src/NetworkUI.hs 263
-keyboardEvent :: (InfoKind n g) => Frame () -> State g n e -> EventKey -> IO ()
+keyboardEvent :: (InfoKind n g, InfoKind e g) =>
+ Frame () -> State g n e -> EventKey -> IO ()
}