F2T      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~{~}|xzyqwvutsrnpohmlkjiNgfedcba`_^]\[ZYXWVUTSRQPOKMLIJFHGCED?BA@9;:<>=687.543210/+-,(*)&'$%"# !    !!"##$%%&''(*))*+-,,-.543210//012345687789;::;<>==>?BA@@ABCEDDEFHGGHIJJKMLLMNgfedcba`_^]\[ZYXWVUTSRQPOOPQRSTUVWXYZ[\]^_`abcdefghmlkjiijklmnpoopqwvutsrrstuvwxzyyz{ ~}||}~   2      !"#$ t%&'()*+,-./0123456789:;<=>?@ABCDEFTiresomely we need to make the "real" node type untyped. < This is so that the interactor which handles drag-and-drop 2 can get the type out without knowing what it is. GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnIWe run a separate thread for redrawing. The idea is that when more than H one redraw request arrives while daVinci is already redrawing, we only H send one. This means it is not too bad when we make a lot of changes,  redrawing each one. opqrs=setUpNodeType is used for doing Haskell-side initialisations F either after (a) a new node has been created, or (b) we have changed  the type. tuvwxyz{|}~BThis is called internally, by the function set up by newNodePrim. E The function returns False to indicate that this function failed as  the node has been deleted. 4 (This behaviour may now be useless anyway but I can't be bothered  to change it.) 0This function similarly changes the font style. ,This function similarly changes the border.         !"#$%$&'()*+,&-./0123456789:;<=>?1@2ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~SS      !"#$%&'()*++,-.//0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrsuni-uDrawGraph-2.2.0.0UDrawGraph.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 showBoolFuncDestroysContextNoYesAnswerDestination GlobalEvent LocalEventResponse contextIddestructChannel typeSourceidSource menuIdSource handlerIORefwithHandlerLockDaVinci childProcesscontextRegistrycurrentContextIdMVardestroyActMVar responseMVaroIDversiondaVincichallengeResponsePair newDaVinciworkAroundDaVinciBug1 daVinciSkipgetDaVinciEnvironmentdoInContextVeryGeneralfailSafeSetContextforAllContextsinvalidContextIdanswerDestinationdestroysContextanswerDispatchergetMultiAnswer getNextAnswerAtt AttributesoptionsmenuOptArcDataInvisibleArcTypeParms arcAttributesconfigArcDoubleClickAction configArcTextarcTypearcMenuActionsarcDoubleClickAction arcArcTextnodeAttributesconfigNodeTextconfigFontStyle configBorderconfigNodeDoubleClickActionconfigCreateNodeAndEdgeActionconfigCreateEdgeAction NodeDataDatatypeData valueDatasinkNodeDatanodeTypenodeText fontStylebordernodeMenuActionsnodeDoubleClickActioncreateNodeAndEdgeActioncreateEdgeAction graphConfigs surveyViewconfigDoImproveconfigFileMenuActionsconfigGlobalMenuconfigActionWrappergraphTitleSource delayerOptconfigOrientation LastSelectionLastEdgeLastNodeLastNonecontextnodesedgespendingChangesMVarglobalMenuActions otherActionslastSelectionRef doImprovedestructionChanneldestroyActions redrawChanneldelayer redrawActionsignalDestruct redrawThreadinitialFileMenuActionsaddGraphConfigCmd mkGlobalMenu newNodePrim1 setUpNodeType addArcGeneralemptyAttributescoMapAttributesencodeAttributesencodeLocalMenu getMenuIdsencodeGlobalMenuencodeDaVinciMenu addNodeUpdate addEdgeUpdatesortPendingChangessortPendingChanges1removeNullifyingChangesflushPendingChanges toFinalState setNodeTitletitleAttribute setFontStylefontStyleAttribute setBorderborderAttributefromFileMenuOptiontoFileMenuOptionmenuOptionListcoDyn getValueHere