public InputBinder(InputConfig config) { On <InputEvent>(OnInput); On <LoadMapEvent>(e => _mapId = e.MapId); foreach (var rawMode in config.Bindings) { if (!_bindings.ContainsKey(rawMode.Key)) { _bindings.Add(rawMode.Key, new Dictionary <KeyBinding, string>()); } var mode = _bindings[rawMode.Key]; foreach (var rawBinding in rawMode.Value) { var parts = rawBinding.Key.Split('+').Select(x => x.Trim().ToLower()).ToArray(); Key key = Key.LastKey; var modifiers = ModifierKeys.None; for (int i = 0; i < parts.Length; i++) { if (i == parts.Length - 1) { if (int.TryParse(parts[i], out var numeric)) { key = Key.Number0 + numeric; } else { key = Enum.Parse <Key>(parts[i], true); } } else { modifiers |= Enum.Parse <ModifierKeys>(parts[i], true); } } if (key != Key.LastKey) { mode[new KeyBinding(key, modifiers)] = rawBinding.Value; } } } }
private data.Canvas TryGetCanvas(string filePath) { if (string.IsNullOrEmpty(filePath)) { return(null); } IModel model = data.Models.GetActivities(); string queryString = @" PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX nfo: <http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#> PREFIX prov: <http://www.w3.org/ns/prov#> PREFIX art: <http://semiodesk.com/artivity/1.0/> SELECT DISTINCT ?canvas WHERE { ?activity prov:used ?file . ?activity prov:startedAtTime ?startTime . ?file rdf:type nfo:FileDataObject . ?file nfo:fileUrl ""file://" + Uri.EscapeUriString(filePath) + @""" . ?file art:canvas ?canvas . } ORDER BY DESC(?startTime) LIMIT 1"; SparqlQuery query = new SparqlQuery(queryString); ISparqlQueryResult result = model.ExecuteQuery(query); BindingSet bindings = result.GetBindings().FirstOrDefault(); if (bindings == null || !bindings.ContainsKey("canvas")) { return(null); } UriRef canvasUri = new UriRef(bindings["canvas"].ToString()); return(model.GetResource <data.Canvas>(canvasUri)); }