From: Hannu Niemistö Date: Wed, 18 Oct 2017 12:04:57 +0000 (+0300) Subject: Merge "Workaround for missing selection highlights on SVG diagrams" X-Git-Tag: v1.31.0~110 X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=commitdiff_plain;h=9b4c4580e2808364ea3b683a15ccb5d3a214e807;hp=b5af42299ba5e7b5fdf4779332a58f688b8677a7 Merge "Workaround for missing selection highlights on SVG diagrams" --- diff --git a/bundles/org.simantics.modeling/scl/Simantics/Diagram.scl b/bundles/org.simantics.modeling/scl/Simantics/Diagram.scl index 0ee3e9d28..8276962ea 100644 --- a/bundles/org.simantics.modeling/scl/Simantics/Diagram.scl +++ b/bundles/org.simantics.modeling/scl/Simantics/Diagram.scl @@ -188,8 +188,6 @@ pathNameOf diagram = do diagramResourceOf :: Diagram -> Resource diagramResourceOf d = singleObject d MOD.CompositeToDiagram -import "Extras/HashMap" as Map - """Constructs a transformation for a diagram element.""" mapDiagramElement :: (a -> b) -> (a -> b) -> (a -> Maybe b) -> (a -> b) -> DiagramElement a -> DiagramElement b mapDiagramElement mapComponentType mapTerminal mapAttribute mapFlagType diagramElement = @@ -234,9 +232,9 @@ createDiagramR (ExistingDiagram diagram') joinMap elementSpecs = runProc do configuration = diagram' diagram = compositeToDiagram' configuration hasName = L0.HasName - componentMap = Map.fromList [ (c `relatedValue` hasName :: String, c) - | c <- children configuration - ] + componentMap = MMap.fromEntryList [ (c `relatedValue` hasName :: String, c) + | c <- children configuration + ] denyByPredicate diagram L0.ConsistsOf elements = setElements (DiagramInfo diagram configuration componentMap) joinMap elementSpecs claimRelatedValue diagram DIA.HasModCount @@ -246,7 +244,7 @@ createDiagramR (ExistingDiagram diagram') joinMap elementSpecs = runProc do createDiagramR (NewDiagram model path folderType compositeType) joinMap elementSpecs = (runProc do configuration = createConfiguration () diagram = compositeToDiagram' configuration - elements = setElements (DiagramInfo diagram configuration (Map.create ())) joinMap elementSpecs + elements = setElements (DiagramInfo diagram configuration (MMap.create ())) joinMap elementSpecs claimRelatedValue diagram DIA.HasModCount (fromInteger (length elements) :: Long) (configuration, elements) @@ -304,19 +302,19 @@ importJava "org.simantics.modeling.utils.JoinMap" where /* createJoin :: (Dynamic -> Resource) -> Dynamic -> Resource -createJoin joinMap key = if Map.contains joinMap key - then Map.unsafeGet joinMap key +createJoin joinMap key = if MMap.containsKey joinMap key + then MMap.unsafeGet joinMap key else do j = newEntity [ hasType STR.ConnectionJoin ] - Map.put joinMap key j + MMap.put joinMap key j j */ data DiagramInfo = DiagramInfo Resource // diagram Resource // configuration - (Map.T String Resource) // existing components + (MMap.T String Resource) // existing components """ Sets the elements of the diagram. Diagram is assumed to be empty, @@ -336,7 +334,7 @@ setElements (DiagramInfo diagram configuration componentMap) joinMap elementSpec for (zip elementSpecs elements) setConnectionName elements ) where - elementMap = Map.create () + elementMap = MMap.create () idRef = ref (0 :: Integer) isConnectionResource r = isInstanceOf r DIA.Connection @@ -349,8 +347,8 @@ setElements (DiagramInfo diagram configuration componentMap) joinMap elementSpec idRef := id + 1 show id createElement (Component componentType name position properties) = do - component = if Map.contains componentMap name - then Map.unsafeGet componentMap name + component = if MMap.containsKey componentMap name + then MMap.unsafeGet componentMap name else newEntity [ hasName name, hasParent configuration, @@ -371,13 +369,13 @@ setElements (DiagramInfo diagram configuration componentMap) joinMap elementSpec MOD.ElementToComponent component ] - Map.put elementMap name element + MMap.put elementMap name element Just element newOrMappedElement eName = do - element = match Map.get elementMap eName with + element = match MMap.get elementMap eName with Just element -> element Nothing -> newEntity [] - Map.put elementMap eName element + MMap.put elementMap eName element element createElement (SimpleConnection aName ar bName br _) = do connection = newEntity [ @@ -421,7 +419,7 @@ setElements (DiagramInfo diagram configuration componentMap) joinMap elementSpec then do claim flag DIA.ExternalFlag flag else () - Map.put elementMap name flag + MMap.put elementMap name flag Just flag createElement (Connection nodeSpecs edges _) = do connection = newEntity [ @@ -505,7 +503,7 @@ setElements (DiagramInfo diagram configuration componentMap) joinMap elementSpec hasFont font ] createElement (Monitor label (Just (MonitorReference componentName suffix)) (MonitorVisuals font strokeWidth hAlign vAlign) position) = do - match (Map.get elementMap componentName) with + match (MMap.get elementMap componentName) with Nothing -> Nothing // Monitored component is not on the same diagram as the monitor. Not supported by this routine. Just element -> do component = singleObject element MOD.ElementToComponent @@ -705,11 +703,11 @@ elementsOfR diagram = filterJust $ map readElement' nodeResources = connectors + routeLines nodeResourceWithIds = zip nodeResources [0..length nodeResources-1] edges = runProc do - rMap = Map.fromList nodeResourceWithIds + rMap = MMap.fromEntryList nodeResourceWithIds edgesOf (node,i) = [ Edge i j | r <- node # DIA.AreConnected - , j = Map.unsafeGet rMap r + , j = MMap.unsafeGet rMap r , j > i ] concatMap edgesOf nodeResourceWithIds diff --git a/bundles/org.simantics.modeling/scl/Simantics/DiagramMapping.scl b/bundles/org.simantics.modeling/scl/Simantics/DiagramMapping.scl index a612aca96..0c1844895 100644 --- a/bundles/org.simantics.modeling/scl/Simantics/DiagramMapping.scl +++ b/bundles/org.simantics.modeling/scl/Simantics/DiagramMapping.scl @@ -1,5 +1,4 @@ import "Simantics/DB" -import "Extras/HashMap" as Map import "Simantics/Entity" import "Simantics/Model" import "Simantics/Diagram" @@ -7,19 +6,19 @@ import "Simantics/Diagram" import "http://www.simantics.org/Modeling-1.2" as MOD import "http://www.simantics.org/ModelingTemplate2d-1.0" as TMPL -applyConnectionTypes :: Map.T (DiagramElement Resource) (Resource,Resource) -> () +applyConnectionTypes :: MMap.T (DiagramElement Resource) (Resource,Resource) -> () applyConnectionTypes elementMap = let isConnection ((Connection _ _ _),_) = True isConnection _ = False - in iter (\(a,(source,target)) -> applyConnectionType target) (filter isConnection (Map.entries elementMap)) + in iter (\(a,(source,target)) -> applyConnectionType target) (filter isConnection (MMap.entries elementMap)) // ---- -doElementPostProcessing (elementMap :: Map.T (DiagramElement Resource) (Resource,Resource)) +doElementPostProcessing (elementMap :: MMap.T (DiagramElement Resource) (Resource,Resource)) (elementPostProcessing :: DiagramElement Resource -> Resource -> Resource -> ()) = do - list = sortByCluster (Map.entries elementMap) (\(a,(source,target)) -> target) + list = sortByCluster (MMap.entries elementMap) (\(a,(source,target)) -> target) iter (\(a,(source,target)) -> elementPostProcessing a source target) list translateDiagrams (sourceModel :: Model) @@ -31,7 +30,7 @@ translateDiagrams (sourceModel :: Model) (elementPostProcessing :: DiagramElement Resource -> Resource -> Resource -> ()) (sourceDiagrams :: [Diagram]) = do - elementMap = Map.create() :: Map.T (DiagramElement Resource) (Resource,Resource) + elementMap = MMap.create () :: MMap.T (DiagramElement Resource) (Resource,Resource) // Join map contains all joins of the model joinMap = createJoinMap () @@ -60,7 +59,7 @@ translateDiagram (sourceModel :: Model) (compositeType :: Resource) (f :: Diagram -> [(DiagramElement Resource,Resource)]) (joinMap :: Dynamic -> Resource) - (elementMap :: Map.T (DiagramElement Resource) (Resource,Resource)) + (elementMap :: MMap.T (DiagramElement Resource) (Resource,Resource)) (diagramPostProcessing :: Diagram -> Diagram -> ()) (sourceDiagram :: Diagram) = do disableDependencies @@ -96,9 +95,9 @@ makeSpec targetModel sourceDiagram folderType compositeType = getTargetDiagram (targetModel :: Model) (sourceDiagram :: Diagram) = (possibleDiagram targetModel $ pathOf sourceDiagram) :: Maybe Diagram -store :: Map.T (DiagramElement Resource) (Resource,Resource) -> (DiagramElement Resource) -> Resource -> Resource -> () +store :: MMap.T (DiagramElement Resource) (Resource,Resource) -> (DiagramElement Resource) -> Resource -> Resource -> () store elementMap a b c = do - Map.put elementMap a (b,c) + MMap.put elementMap a (b,c) () getTargetComponent (targetDiagram :: Diagram) (sourceComponent :: Resource) = @@ -110,7 +109,7 @@ translateDiagram2 (targetModel :: Model) (compositeType :: Resource) (f :: Diagram -> [(DiagramElement Resource,Resource)]) (joinMap :: Dynamic -> Resource) - (elementMap :: Map.T (DiagramElement Resource) (Resource,Resource)) = do + (elementMap :: MMap.T (DiagramElement Resource) (Resource,Resource)) = do spec = makeSpec targetModel sourceDiagram folderType compositeType elementSpecs = f sourceDiagram in1 = (filter (not . isReferring) elementSpecs + filter isReferring elementSpecs) diff --git a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/events/NodeEventHandler.java b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/events/NodeEventHandler.java index ec0a4fe5f..1c1ac8a37 100644 --- a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/events/NodeEventHandler.java +++ b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/events/NodeEventHandler.java @@ -12,6 +12,7 @@ package org.simantics.scenegraph.g2d.events; import java.awt.Component; +import java.awt.GraphicsEnvironment; import java.awt.dnd.DnDConstants; import java.awt.dnd.DragGestureEvent; import java.awt.dnd.DragGestureListener; @@ -35,6 +36,8 @@ import org.simantics.scenegraph.g2d.events.MouseEvent.MouseButtonPressedEvent; import org.simantics.scenegraph.g2d.events.MouseEvent.MouseDragBegin; import org.simantics.scenegraph.g2d.events.adapter.AWTMouseEventAdapter; import org.simantics.scenegraph.g2d.events.command.CommandEvent; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Delivers events (mouse, key, focus, command, time) to scene graph nodes that @@ -44,6 +47,8 @@ import org.simantics.scenegraph.g2d.events.command.CommandEvent; */ public class NodeEventHandler implements IEventHandler { + private static final Logger LOGGER = LoggerFactory.getLogger(NodeEventHandler.class); + private static final boolean DEBUG_EVENTS = false; private static final boolean DEBUG_HANDLER_SORT = false; @@ -197,12 +202,6 @@ public class NodeEventHandler implements IEventHandler { */ protected G2DSceneGraph sg; - /** - * For proper initiation of native DnD operations within this AWT-based - * scenegraph system. - */ - protected DragSource ds = new DragSource(); - public NodeEventHandler(G2DSceneGraph sg) { this.sg = sg; } @@ -222,6 +221,11 @@ public class NodeEventHandler implements IEventHandler { } public void setRootPane(Component rootPane) { + if (GraphicsEnvironment.isHeadless()) { + LOGGER.info("Disabling DragSource in headless environments"); + return; + } + final DragSource ds = new DragSource(); final DragSourceListener dsl = new DragSourceListener() { @Override public void dropActionChanged(DragSourceDragEvent dsde) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/compilation/Elaboration.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/compilation/Elaboration.java index f7f745841..5a82823a1 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/compilation/Elaboration.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/compilation/Elaboration.java @@ -206,9 +206,9 @@ public class Elaboration { try { String absoluteModuleName = ModuleUtils.resolveAbsolutePath(moduleName, relativeImport.moduleName); ImportDeclaration absoluteImport = new ImportDeclaration( + relativeImport.location, absoluteModuleName, relativeImport.localName, relativeImport.reexport, relativeImport.spec); - absoluteImport.location = relativeImport.location; absoluteImports.add(absoluteImport); } catch (InvalidModulePathException e) { errorLog.log(relativeImport.location, e.getMessage()); diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/errors/Locations.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/errors/Locations.java index 3a77cf325..70c258b9b 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/errors/Locations.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/errors/Locations.java @@ -48,4 +48,11 @@ public class Locations { localEnd = begin-end; return location(begin+localBegin, begin+localEnd); } + + public static String toString(long location) { + if(location == NO_LOCATION) + return "NO LOCATION"; + else + return beginOf(location) + "-" + endOf(location); + } } diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/types/TApplyAst.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/types/TApplyAst.java index 3c7700075..1aeba2071 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/types/TApplyAst.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/types/TApplyAst.java @@ -49,15 +49,19 @@ public class TApplyAst extends TypeAst { return Types.metaVar(Kinds.STAR); } if(alias != null) { - if(parameters.length != alias.getArity()) { + int arity = alias.getArity(); + if(parameters.length < arity) { context.getErrorLog().log(location, "Wrong number of parameters are given to the type alias. Expected " + - alias.getArity() + " parameters, got " + parameters.length + " parameters."); + arity + " parameters, got " + parameters.length + " parameters."); return Types.metaVar(Kinds.metaVar()); } - Type[] parameterTypes = new Type[parameters.length]; - for(int i=0;i result = new THashMap(); Collection failures = null; - THashSet originalImports = new THashSet(); + TObjectLongHashMap originalImports = new TObjectLongHashMap(); ArrayList stack = new ArrayList(imports.length); for(ImportDeclaration import_ : imports) { stack.add(import_); - originalImports.add(import_.moduleName); + originalImports.put(import_.moduleName, import_.location); } while(!stack.isEmpty()) { ImportDeclaration import_ = stack.remove(stack.size()-1); @@ -278,8 +280,10 @@ public class ModuleRepository { stack.addAll(compilationResult.getResult().getDependencies()); if(originalImport) { String deprecation = compilationResult.getResult().getDeprecation(); - if(deprecation != null && compilationContext != null) - compilationContext.errorLog.logWarning(import_.location, "Deprecated module " + import_.moduleName + (deprecation.isEmpty() ? "." : ": " + deprecation)); + if(deprecation != null && compilationContext != null) { + long location = originalImport ? originalImports.get(import_.moduleName) : Locations.NO_LOCATION; + compilationContext.errorLog.logWarning(location, "Deprecated module " + import_.moduleName + (deprecation.isEmpty() ? "." : ": " + deprecation)); + } } } else { diff --git a/bundles/org.simantics.scl.osgi/scl/Extras/HashMap.scl b/bundles/org.simantics.scl.osgi/scl/Extras/HashMap.scl index e055c81c3..76ab15c6c 100644 --- a/bundles/org.simantics.scl.osgi/scl/Extras/HashMap.scl +++ b/bundles/org.simantics.scl.osgi/scl/Extras/HashMap.scl @@ -1,23 +1,31 @@ -import "StandardLibrary" hiding (contains) +module { + deprecated = "Use module MMap instead." +} -importJava "gnu.trove.map.hash.THashMap" where - data T a b - - @JavaName "" - create :: () -> T a b - put :: T a b -> a -> b -> Maybe b - get :: T a b -> a -> Maybe b - @JavaName get - unsafeGet :: T a b -> a -> b +import "MMap" as MMap + +type T = MMap.T + +create :: () -> T a b +create = MMap.create + +put :: T a b -> a -> b -> Maybe b +put = MMap.put + +get :: T a b -> a -> Maybe b +get = MMap.get + +unsafeGet :: T a b -> a -> b +unsafeGet = MMap.unsafeGet - contains :: T a b -> a -> Boolean - size :: T a b -> Integer +contains :: T a b -> a -> Boolean +contains = MMap.containsKey + +size :: T a b -> Integer +size = MMap.size -importJava "org.simantics.scl.osgi.map.HashMapUtils" where - entries :: T a b -> [(a,b)] +entries :: T a b -> [(a,b)] +entries = MMap.entries fromList :: [(a,b)] -> T a b -fromList entries = do - result = create () - for entries (\(k,v) -> do put result k v; ()) - result \ No newline at end of file +fromList = MMap.fromEntryList diff --git a/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor/completion/SCLTextEditorEnvironment.java b/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor/completion/SCLTextEditorEnvironment.java index de335f0f9..98b519177 100644 --- a/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor/completion/SCLTextEditorEnvironment.java +++ b/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor/completion/SCLTextEditorEnvironment.java @@ -108,6 +108,7 @@ public class SCLTextEditorEnvironment { try { String absoluteModuleName = ModuleUtils.resolveAbsolutePath(moduleName, relativeImport.moduleName); absoluteImports.add(new ImportDeclaration( + relativeImport.location, absoluteModuleName, relativeImport.localName, relativeImport.reexport, relativeImport.spec)); } catch (InvalidModulePathException e) {