Or56      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Safe-Inferred  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~{~}|xzyqwvutsrnpohmlkjiNgfedcba`_^]\[ZYXWVUTSRQPOKMLIJFHGCED?BA@9;:<>=687.543210/+-,(*)&'$%"# !  a  !"#$%&'(*)+-,.543210/6879;:<>=?BA@CEDFHGIJKMLNgfedcba`_^]\[ZYXWVUTSRQPOhmlkjinpoqwvutsrxzy{ ~}|         !"#$%&'()NoneM8*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUV #*,+-0/.123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVNone +2346:MTiresomely we need to make the "real" node type untyped. This is so that the interactor which handles drag-and-drop can get the type out without knowing what it is.WWe run a separate thread for redrawing. The idea is that when more than one redraw request arrives while daVinci is already redrawing, we only send one. This means it is not too bad when we make a lot of changes, redrawing each one.XsetUpNodeType is used for doing Haskell-side initialisations either after (a) a new node has been created, or (b) we have changed the type.YThis is called internally, by the function set up by newNodePrim. The function returns False to indicate that this function failed as the node has been deleted. (This behaviour may now be useless anyway but I can't be bothered to change it.)Z/This function similarly changes the font style.[+This function similarly changes the border.\]^_`abcdefghijklmnopqrstuvwxyz{|}~WXYZ[ u\]^_`abcedfghijklmnopqrstuvwxyz{|} ~ WXYZ[       !"#$%$&'()*+,&-./0123456789:;<=>?1@2ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~S      !"#$S%&'()*+,,-./0123456789:;<=>?@ABCDEFGHIJKLMNNOOPQRRSTUVWXYZ[\]^_`abbcdeffghijklmnopqrstuvwxyz{|}~uni-uDrawGraph-2.2.0.3UDrawGraph.TypesUDrawGraph.BasicUDrawGraph.GraphMenuModNoneMetaControlShift AlternateBtypeBt DirectionDVRightDVLeftDownUpOrient RightLeft LeftRightBottomUpTopDownWindowId ContextIdFilenameTypeIconIdMenuAccMenuMne MenuLabelMenuIdEdgeIdNodeId VisualRuleERNR IconEntryBlankIconEntry MenuEntrySubmenuEntryDisabledMenuEntryDisabledBlankMenuEntrySubmenuEntryMne SubmenuEntry MenuEntryMne TypeChangeEdgeTypeNodeType AttrChangeEdgeNode MixedUpdateEUNU EdgeUpdate NewEdgeBehindNewEdge DeleteEdge NodeUpdateNewNode DeleteNode AttributeMAERN DaVinciAnswer Versioned CloseWindow OpenWindow ContextWindowDropNode CreateEdgeCreateNodeAndEdge CreateNodePopupSelectionEdgePopupSelectionNodeQuitClosed Disconnect BrowserAnswer TclAnswerContext IconSelection MenuSelectionEdgeDoubleClickEdgeSelectionLabelsEdgeSelectionLabelNodeDoubleClickNodeSelectionsLabelsCommunicationErrorOkDragAndDropCmdNewEdgeAndNodeAtCoordNewNodeAtCoord DraggingOff DragAndDropOn DraggingOn VisualCmdAddRulesNewRules SpecialCmdVersionShowUrlFocusNodeAnimated FocusNode SelectEdge SelectNodesTclCmdEvalFileDVEval WindowCmd FileBrowser DeactivateActivate DeiconifyIconifyRaiseSizePosition ShowStatus ShowMessageTitleSetCmd RulesFirstNoCacheAnimationSpeedScrollingOnSelectionSelfEdgeRadius MultiEdgeGap GapHeightGapWidthFontSizeKeepNodesAtLevelsLayoutAccuracy AppMenuCmdControlFileEvents ActivateIcons ActivateMenus CreateIcons CreateMenus LayoutMenuCmd Orientation CompactAllImproveVisible ImproveAllAbstractionMenuCmdRestoreAllEdges ShowEdges HideEdgesRestoreAllSubgraphs ShowSubgraph HideSubgraphNavigationMenuCmdFind NavigatorSelectChildren SelectChildsSelectSiblings SelectParents ViewMenuCmd DaVinciInfo GraphInfoScaleFitScaleToWindow FullScaleOpenSurveyView OpenNewView FileMenuCmdExitClosePrint SaveStatus SaveGraph OpenStatusOpenGraphPlaced OpenGraph ClearGraphMenuCmdLayout Abstraction NavigationViewFileMultiCmdSetContextWindow SetContext OpenContext NewContextGraphCmd ChangeTypeUpdateAndChangeAttrMixed UpdateMixedUpdateAndChangeAttr ChangeAttrUpdate NewPlacedNew DaVinciCmd DragAndDropVisual DVNothingSpecialTclWindowDVSetAppMenuMenuMultiGraphdaVinciVersion newContext exitDaVinci doInContextdoInContextGeneral withHandlernewType newNodeId newEdgeId newMenuIdDaVinciArcTypeParmsDaVinciArcType DaVinciArcDaVinciNodeTypeParmsDaVinciNodeType DaVinciNodeDaVinciGraphParms DaVinciGraphpendingChangesLock daVinciSortgetDaVinciGraphContext showFunc1 showFunc2 showFunc3 showFunc4 showFunc5 showFunc6 showFunc7 showLabeledshowLst showBoolFunc $fShowMenuMod $fShowBtype$fShowDirection $fShowOrient$fShowWindowId$fShowContextId$fShowFilename $fShowType $fShowIconId $fShowMenuAcc $fShowMenuMne$fShowMenuLabel $fShowMenuId $fShowEdgeId $fShowNodeId$fShowVisualRule$fShowIconEntry$fShowMenuEntry$fShowTypeChange$fShowAttrChange$fShowMixedUpdate$fShowEdgeUpdate$fShowNodeUpdate$fShowAttribute $fShowEdge $fShowNode$fReadDaVinciAnswer$fShowDaVinciAnswer$fShowDragAndDropCmd$fShowVisualCmd$fShowSpecialCmd $fShowTclCmd$fShowWindowCmd $fShowSetCmd$fShowAppMenuCmd$fShowLayoutMenuCmd$fShowAbstractionMenuCmd$fShowNavigationMenuCmd$fShowViewMenuCmd$fShowFileMenuCmd $fShowMenuCmd$fShowMultiCmd$fShowGraphCmd$fShowDaVinciCmdDestroysContextNoYesAnswerDestination GlobalEvent LocalEventResponse contextIddestructChannel typeSourceidSource menuIdSource handlerIORefwithHandlerLockDaVinci childProcesscontextRegistrycurrentContextIdMVardestroyActMVar responseMVaroIDversiondaVincichallengeResponsePair newDaVinciworkAroundDaVinciBug1 daVinciSkipgetDaVinciEnvironmentdoInContextVeryGeneralfailSafeSetContextforAllContextsinvalidContextIdanswerDestinationdestroysContextanswerDispatchergetMultiAnswer getNextAnswer $fOrdContext $fEqContext$fDestructibleContext$fDestroyableContext$fObjectDaVinci$fDestroyableDaVinci redrawThread setUpNodeType setNodeTitle setFontStyle setBorderAtt AttributesoptionsmenuOptArcDataInvisibleArcTypeParms arcAttributesconfigArcDoubleClickAction configArcTextarcTypearcMenuActionsarcDoubleClickAction arcArcTextnodeAttributesconfigNodeTextconfigFontStyle configBorderconfigNodeDoubleClickActionconfigCreateNodeAndEdgeActionconfigCreateEdgeAction NodeDataDatatypeData valueDatasinkNodeDatanodeTypenodeText fontStylebordernodeMenuActionsnodeDoubleClickActioncreateNodeAndEdgeActioncreateEdgeAction graphConfigs surveyViewconfigDoImproveconfigFileMenuActionsconfigGlobalMenuconfigActionWrappergraphTitleSource delayerOptconfigOrientation LastSelectionLastEdgeLastNodeLastNonecontextnodesedgespendingChangesMVarglobalMenuActions otherActionslastSelectionRef doImprovedestructionChanneldestroyActions redrawChanneldelayer redrawActionsignalDestructinitialFileMenuActionsaddGraphConfigCmd mkGlobalMenu newNodePrim1 addArcGeneralemptyAttributescoMapAttributesencodeAttributesencodeLocalMenu getMenuIdsencodeGlobalMenuencodeDaVinciMenu addNodeUpdate addEdgeUpdatesortPendingChangessortPendingChanges1removeNullifyingChangesflushPendingChanges toFinalStatetitleAttributefontStyleAttributeborderAttributefromFileMenuOptiontoFileMenuOptionmenuOptionListcoDyn getValueHere#$fHasConfigValueLocalMenuAttributes$fHasConfigValueAttAttributes-$fHasConfigValueValueTitleDaVinciArcTypeParms4$fHasConfigValueDoubleClickActionDaVinciArcTypeParms0$fHasConfigValuearcTypeConfigDaVinciArcTypeParms,$fHasConfigValueLocalMenuDaVinciArcTypeParms.$fHasConfigValueEdgePatternDaVinciArcTypeParms'$fHasConfigValueHeadDaVinciArcTypeParms*$fHasConfigValueEdgeDirDaVinciArcTypeParms($fHasConfigValueColorDaVinciArcTypeParms!$fArcTypeParmsDaVinciArcTypeParms9$fNewArcTypeDaVinciGraphDaVinciArcTypeDaVinciArcTypeParms$fArcTypeClassDaVinciArcType$fOrd1DaVinciArcType$fEq1DaVinciArcType$fArcClassDaVinciArc!$fDeleteArcDaVinciGraphDaVinciArc0$fSetArcTypeDaVinciGraphDaVinciArcDaVinciArcTypeB$fNewArcDaVinciGraphDaVinciNodeDaVinciNodeDaVinciArcDaVinciArcType$fOrd1DaVinciArc$fEq1DaVinciArc3$fHasConfigValueNodeDragAndDropDaVinciNodeTypeParms/$fHasConfigValueNodeGestureDaVinciNodeTypeParms*$fHasModifyValue(,)DaVinciGraphDaVinciNode0$fHasModifyValueAttributeDaVinciGraphDaVinciNode5$fHasModifyValueNodeArcsHiddenDaVinciGraphDaVinciNode5$fHasConfigValueDoubleClickActionDaVinciNodeTypeParms-$fHasConfigValueLocalMenuDaVinciNodeTypeParms)$fHasConfigValueColorDaVinciNodeTypeParms)$fHasConfigValueShapeDaVinciNodeTypeParms0$fHasConfigValueBorderSourceDaVinciNodeTypeParms3$fHasConfigValueFontStyleSourceDaVinciNodeTypeParms4$fHasConfigValueValueTitleSourceDaVinciNodeTypeParms.$fHasConfigValueValueTitleDaVinciNodeTypeParms/$fHasConfigValuegraphConfigDaVinciNodeTypeParms#$fNodeTypeParmsDaVinciNodeTypeParms<$fNewNodeTypeDaVinciGraphDaVinciNodeTypeDaVinciNodeTypeParms$fNodeTypeClassDaVinciNodeType$fNodeClassDaVinciNode%$fSetNodeFocusDaVinciGraphDaVinciNode#$fDeleteNodeDaVinciGraphDaVinciNode/$fNewNodeDaVinciGraphDaVinciNodeDaVinciNodeType$fEq1DaVinciNodeType$fOrd1DaVinciNode$fEq1DaVinciNode'$fHasConfiggraphConfigDaVinciGraphParms($fHasConfigGraphGestureDaVinciGraphParms&$fHasConfigGlobalMenuDaVinciGraphParms)$fHasConfigAllowDraggingDaVinciGraphParms)$fHasConfigActionWrapperDaVinciGraphParms'$fHasConfigOrientationDaVinciGraphParms$fHasConfig(,)DaVinciGraphParms'$fHasConfigFileMenuActDaVinciGraphParms&$fHasConfigAllowCloseDaVinciGraphParms&$fHasConfigSurveyViewDaVinciGraphParms*$fHasConfigOptimiseLayoutDaVinciGraphParms($fHasConfigSimpleSourceDaVinciGraphParms#$fHasConfigDelayerDaVinciGraphParms&$fHasConfigGraphTitleDaVinciGraphParms$fGraphParmsDaVinciGraphParms'$fNewGraphDaVinciGraphDaVinciGraphParms$fGraphClassDaVinciGraph$fHasDelayerDaVinciGraph$fDestructibleDaVinciGraph$fDestroyableDaVinciGraph$fOrdDaVinciGraph$fEqDaVinciGraph$fGraphAllConfigDaVinciGraphDaVinciGraphParmsDaVinciNodeDaVinciNodeTypeDaVinciNodeTypeParmsDaVinciArcDaVinciArcTypeDaVinciArcTypeParms