public bool AddDatasource(IDatasource ds, string layerName = "") { int addedCount = 0; var layers = _context.Map.Layers; foreach (var layer in ds.GetLayers()) { // projection mistmatch testing var newLayer = TestProjectionMismatch(layer, out _aborted); if (_aborted) { return(false); } if (newLayer == null) { continue; } // ask plugins if they don't object var args = new DatasourceCancelEventArgs(newLayer); _broadcaster.BroadcastEvent(p => p.BeforeLayerAdded_, _context.Map, args); if (args.Cancel) { return(false); } int layerHandle = layers.Add(newLayer); if (layerHandle != -1) { var ll = layers.ItemByHandle(layerHandle); ll.Name = string.IsNullOrWhiteSpace(layerName) ? layer.Name : layerName; addedCount++; _lastLayerHandle = layerHandle; } } return(addedCount > 0); // currently at least one should be success to return success }