Index: src/DeltaShell/DeltaShell.Plugins.SharpMapGis.Gui/Forms/MapView.cs =================================================================== diff -u -r8f6ae890fed8e8eae3a32f9c0498a10f82e0ddf9 -r5fc71a385897af92ccb092f2f969b5709afab85a --- src/DeltaShell/DeltaShell.Plugins.SharpMapGis.Gui/Forms/MapView.cs (.../MapView.cs) (revision 8f6ae890fed8e8eae3a32f9c0498a10f82e0ddf9) +++ src/DeltaShell/DeltaShell.Plugins.SharpMapGis.Gui/Forms/MapView.cs (.../MapView.cs) (revision 5fc71a385897af92ccb092f2f969b5709afab85a) @@ -29,34 +29,38 @@ { public partial class MapView : UserControl, ICanvasEditor, ICompositeView, ISearchableView { - private MapViewTabControl tabControl; - private bool canAddPoint = true; private bool canDeleteItem = true; private bool canMoveItem = true; private bool canMoveItemLinear = true; private bool canSelectItem = true; private bool settingSelection = false; - private StackTrace constructorStackTrace; + private readonly StackTrace constructorStackTrace; public MapView() { InitializeComponent(); IsAllowSyncWithGuiSelection = true; - tabControl = new MapViewTabControl { Size = new Size(300, 250), Dock = DockStyle.Bottom }; - Controls.Add(tabControl); + TabControl = new MapViewTabControl + { + Size = new Size(300, 250), Dock = DockStyle.Bottom + }; + Controls.Add(TabControl); - mapControl.SelectedFeaturesChanged += (s,e) => SyncMapViewEditorSelection(); - collapsibleSplitter1.ControlToHide = tabControl; - tabControl.ViewCollectionChanged += OnTabControlOnViewCollectionChanged; + MapControl.SelectedFeaturesChanged += (s, e) => SyncMapViewEditorSelection(); + Splitter.ControlToHide = TabControl; + TabControl.ViewCollectionChanged += OnTabControlOnViewCollectionChanged; // hide for now IsTabControlVisible = false; // add some tools here, to avoid references to DeltaShell projects in SharpMap - mapControl.Tools.Add(new ExportMapToImageMapTool()); - Map = new Map(mapControl.ClientSize) { Zoom = 100 }; + MapControl.Tools.Add(new ExportMapToImageMapTool()); + Map = new Map(MapControl.ClientSize) + { + Zoom = 100 + }; if (Assembly.GetEntryAssembly() == null) // HACK: detecting nasty dispose exceptions when assembly empty - we run from non-exe (test) { @@ -66,17 +70,20 @@ public bool IsTabControlVisible { - get { return collapsibleSplitter1.Visible; } + get + { + return Splitter.Visible; + } set { if (IsTabControlVisible == value) { return; } - collapsibleSplitter1.ToggleState(); - collapsibleSplitter1.Visible = value; - tabControl.SendToBack(); + Splitter.ToggleState(); + Splitter.Visible = value; + TabControl.SendToBack(); } } @@ -87,34 +94,46 @@ public Map Map { - get { return mapControl.Map; } + get + { + return MapControl.Map; + } set { - if(mapControl.Map == value) + if (MapControl.Map == value) { return; } UnsubscribeEvents(); - if (mapControl != null) + if (MapControl != null) { - mapControl.Map = value; + MapControl.Map = value; } SubscribeEvents(); } } - public MapControl MapControl - { - get { return mapControl; } - } + public MapControl MapControl { get; private set; } - public ViewInfo ViewInfo { get; set; } + public MapViewTabControl TabControl { get; private set; } + public CollapsibleSplitter Splitter { get; set; } + + public Func GetDataForLayer { get; set; } + + public Func GetLayerForData { get; set; } + public bool CanSelectItem { - get { return canSelectItem; } - set { canSelectItem = value; } + get + { + return canSelectItem; + } + set + { + canSelectItem = value; + } } public bool IsSelectItemActive @@ -136,13 +155,22 @@ public bool CanMoveItem { - get { return canMoveItem; } - set { canMoveItem = value; } + get + { + return canMoveItem; + } + set + { + canMoveItem = value; + } } public bool IsMoveItemActive { - get { return MapControl.MoveTool.IsActive; } + get + { + return MapControl.MoveTool.IsActive; + } set { // only support setting to true @@ -155,13 +183,22 @@ public bool CanMoveItemLinear { - get { return canMoveItemLinear; } - set { canMoveItemLinear = value; } + get + { + return canMoveItemLinear; + } + set + { + canMoveItemLinear = value; + } } public bool IsMoveItemLinearActive { - get { return MapControl.LinearMoveTool.IsActive; } + get + { + return MapControl.LinearMoveTool.IsActive; + } set { if (value) @@ -173,34 +210,49 @@ public bool CanDeleteItem { - get { return canDeleteItem; } - set { canDeleteItem = value; } + get + { + return canDeleteItem; + } + set + { + canDeleteItem = value; + } } public bool IsDeleteItemActive { - get { return true; } - set { } + get + { + return true; + } + set {} } public bool CanAddPoint { - get { return canAddPoint; } - set { canAddPoint = value; } + get + { + return canAddPoint; + } + set + { + canAddPoint = value; + } } public bool IsAddPointActive { get { - var tool = (CurvePointTool)MapControl.GetToolByName("CurvePoint"); + var tool = (CurvePointTool) MapControl.GetToolByName("CurvePoint"); return tool.IsActive && tool.Mode == CurvePointTool.EditMode.Add; } set { if (value) { - var tool = (CurvePointTool)MapControl.GetToolByName("CurvePoint"); + var tool = (CurvePointTool) MapControl.GetToolByName("CurvePoint"); tool.Mode = CurvePointTool.EditMode.Add; MapControl.ActivateTool(tool); } @@ -211,59 +263,104 @@ { get { - var tool = (CurvePointTool)MapControl.GetToolByName("CurvePoint"); + var tool = (CurvePointTool) MapControl.GetToolByName("CurvePoint"); return tool.IsActive && tool.Mode == CurvePointTool.EditMode.Remove; } set { if (value) { - var tool = (CurvePointTool)MapControl.GetToolByName("CurvePoint"); + var tool = (CurvePointTool) MapControl.GetToolByName("CurvePoint"); tool.Mode = CurvePointTool.EditMode.Remove; MapControl.ActivateTool(tool); } } } - public bool CanRemovePoint { get { return true; } } + public bool CanRemovePoint + { + get + { + return true; + } + } + public ViewInfo ViewInfo { get; set; } + /// /// Expects a Map /// public object Data { - get { return mapControl.Map; } - set { Map = (Map) value; } + get + { + return MapControl.Map; + } + set + { + Map = (Map) value; + } } - public Image Image + public Image Image { - get { return Resources.Map; } - set { } + get + { + return Resources.Map; + } + set {} } - public MapViewTabControl TabControl { get { return tabControl; } } - - public CollapsibleSplitter Splitter - { - get { return collapsibleSplitter1; } - set { collapsibleSplitter1 = value; } - } - public IEventedList ChildViews { - get { return tabControl.ChildViews; } + get + { + return TabControl.ChildViews; + } } public bool HandlesChildViews { - get { return true; } + get + { + return true; + } } - public Func GetDataForLayer { get; set; } + public IView OpenLayerAttributeTable(ILayer layer, Action openViewMethod = null) + { + if (!(layer is VectorLayer) || !layer.ShowAttributeTable) + { + return null; + } - public Func GetLayerForData { get; set; } + var view = TabControl.ChildViews.OfType().FirstOrDefault(v => v.Data == layer); + if (view != null) + { + TabControl.ActiveView = view; + return null; + } + if (!IsTabControlVisible) + { + IsTabControlVisible = true; + } + + view = new VectorLayerAttributeTableView + { + Data = layer, + Layer = layer, + Text = layer.Name, + ZoomToFeature = feature => EnsureVisible(feature), + OpenViewMethod = openViewMethod, + DeleteSelectedFeatures = () => MapControl.DeleteTool.DeleteSelection() + }; + + TabControl.AddView(view); + + return view; + } + public void EnsureVisible(object item) { // recursive to tabs @@ -273,7 +370,10 @@ { view.EnsureVisible(item); } - catch (Exception) { /* gulp */ } + catch (Exception) + { + /* gulp */ + } } var layer = item as ILayer; @@ -289,80 +389,57 @@ { return; } - ILayer featureLayer = mapControl.Map.GetLayerByFeature(feature); + ILayer featureLayer = MapControl.Map.GetLayerByFeature(feature); if (featureLayer == null) { return; } EnsureFeatureVisible(feature, layer); } - private void EnsureFeatureVisible(IFeature feature, ILayer layer) + public void ActivateChildView(IView childView) { - var envelope = feature.Geometry.EnvelopeInternal; - - if (feature.Geometry is IPoint) + TabControl.ActiveView = childView; + if (IsTabControlVisible && Splitter.IsCollapsed) { - var point = (IPoint) feature.Geometry; - var envelopeExpansion = 100d; //crap!!!!! - envelope = new Envelope(point.X - envelopeExpansion, point.X + envelopeExpansion, - point.Y - envelopeExpansion, point.Y + envelopeExpansion); + Splitter.ToggleState(); //re-show tabcontrol now } - else - { - envelope.ExpandBy(envelope.Width*0.05); // 10% bigger - } - - if (layer != null && layer.CoordinateTransformation != null) - { - envelope = GeometryTransform.TransformBox(envelope, layer.CoordinateTransformation.MathTransform); - } - - Map.ZoomToFit(envelope); - MapControl.Refresh(); } - public IView OpenLayerAttributeTable(ILayer layer, Action openViewMethod = null) + public IEnumerable> SearchItemsByText(string text, bool caseSensitive, Func isSearchCancelled, Action setProgressPercentage) { - if (!(layer is VectorLayer) || !layer.ShowAttributeTable) + var visibleLayers = Map.GetAllVisibleLayers(false).Where(l => l.DataSource != null && l.DataSource.Features != null).ToList(); + if (visibleLayers.Count == 0) { - return null; + yield break; } - var view = tabControl.ChildViews.OfType().FirstOrDefault(v => v.Data == layer); - if (view != null) - { - TabControl.ActiveView = view; - return null; - } + var percentageStep = 100.0/visibleLayers.Count; + var currentPercentage = 0.0; - if (!IsTabControlVisible) + foreach (var layer in visibleLayers) { - IsTabControlVisible = true; - } + if (isSearchCancelled()) + { + yield break; + } - view = new VectorLayerAttributeTableView + var matchingItems = layer.DataSource.Features.OfType(). + Where(n => n.Name != null && + (caseSensitive + ? n.Name.Contains(text) + : n.Name.ToLower().Contains(text.ToLower()))); + + foreach (var item in matchingItems) { - Data = layer, - Layer = layer, - Text = layer.Name, - ZoomToFeature = feature => EnsureVisible(feature), - OpenViewMethod = openViewMethod, - DeleteSelectedFeatures = () => mapControl.DeleteTool.DeleteSelection() - }; + yield return new System.Tuple(string.Format("{0} ({1})", item.Name, layer.Name), item); + } - TabControl.AddView(view); - - return view; + currentPercentage += percentageStep; + setProgressPercentage((int) currentPercentage); + } } - public void ActivateChildView(IView childView) - { - TabControl.ActiveView = childView; - if (IsTabControlVisible && collapsibleSplitter1.IsCollapsed) - collapsibleSplitter1.ToggleState(); //re-show tabcontrol now - } - /// /// Clean up any resources being used. /// @@ -373,8 +450,8 @@ { if (disposing) { - mapControl.Dispose(); - tabControl.Dispose(); + MapControl.Dispose(); + TabControl.Dispose(); } if (disposing && (components != null)) @@ -390,9 +467,37 @@ } } + private void EnsureFeatureVisible(IFeature feature, ILayer layer) + { + var envelope = feature.Geometry.EnvelopeInternal; + + if (feature.Geometry is IPoint) + { + var point = (IPoint) feature.Geometry; + var envelopeExpansion = 100d; //crap!!!!! + envelope = new Envelope(point.X - envelopeExpansion, point.X + envelopeExpansion, + point.Y - envelopeExpansion, point.Y + envelopeExpansion); + } + else + { + envelope.ExpandBy(envelope.Width*0.05); // 10% bigger + } + + if (layer != null && layer.CoordinateTransformation != null) + { + envelope = GeometryTransform.TransformBox(envelope, layer.CoordinateTransformation.MathTransform); + } + + Map.ZoomToFit(envelope); + MapControl.Refresh(); + } + private void SubscribeEvents() { - if (Map == null) return; + if (Map == null) + { + return; + } Map.CollectionChanged += mapCollectionChangedEventHandler; @@ -403,7 +508,10 @@ private void UnsubscribeEvents() { - if (Map == null) return; + if (Map == null) + { + return; + } Map.CollectionChanged -= mapCollectionChangedEventHandler; @@ -433,30 +541,32 @@ } var dataForLayer = GetDataForLayer != null - ? GetDataForLayer(layer) ?? layer - : layer; + ? GetDataForLayer(layer) ?? layer + : layer; - var view = tabControl.ChildViews.FirstOrDefault(v => Equals(v.Data, dataForLayer)); + var view = TabControl.ChildViews.FirstOrDefault(v => Equals(v.Data, dataForLayer)); if (view == null) { return; } - tabControl.RemoveView(view); + TabControl.RemoveView(view); } private void MapControlMouseMove(object sender, MouseEventArgs e) { - var worldLocation = mapControl.Map.ImageToWorld(e.Location); + var worldLocation = MapControl.Map.ImageToWorld(e.Location); if (SharpMapGisGuiPlugin.Instance != null && SharpMapGisGuiPlugin.Instance.Gui != null && worldLocation != null) { - var coordinateSystem = mapControl.Map.CoordinateSystem != null - ? "(" + mapControl.Map.CoordinateSystem.Name + ")" - : ""; + var coordinateSystem = MapControl.Map.CoordinateSystem != null + ? "(" + MapControl.Map.CoordinateSystem.Name + ")" + : ""; var message = string.Format("Current map coordinates {0} : {1}, {2}", coordinateSystem, worldLocation.X, worldLocation.Y); // HACK:.... if (SharpMapGisGuiPlugin.Instance.Gui.MainWindow != null) + { SharpMapGisGuiPlugin.Instance.Gui.MainWindow.StatusBarMessage = message; + } } } @@ -467,7 +577,9 @@ if (SharpMapGisGuiPlugin.Instance != null && SharpMapGisGuiPlugin.Instance.Gui != null) { if (SharpMapGisGuiPlugin.Instance.Gui.MainWindow != null) + { SharpMapGisGuiPlugin.Instance.Gui.MainWindow.StatusBarMessage = ""; + } } } @@ -483,8 +595,11 @@ private void SyncMapViewEditorSelection() { - var features = mapControl.SelectedFeatures; - if (features == null || settingSelection) return; + var features = MapControl.SelectedFeatures; + if (features == null || settingSelection) + { + return; + } settingSelection = true; @@ -500,10 +615,13 @@ private void MapEditorSelectedFeaturesChanged(object sender, EventArgs e) { var mapViewEditor = sender as ILayerEditorView; - if (mapViewEditor == null || settingSelection) return; + if (mapViewEditor == null || settingSelection) + { + return; + } settingSelection = true; - mapControl.SelectTool.Select(mapViewEditor.SelectedFeatures); + MapControl.SelectTool.Select(mapViewEditor.SelectedFeatures); settingSelection = false; } @@ -535,42 +653,11 @@ mapEditor.Dispose(); } - if (IsTabControlVisible && !tabControl.ChildViews.Any()) + if (IsTabControlVisible && !TabControl.ChildViews.Any()) { IsTabControlVisible = false; } } } - - public IEnumerable> SearchItemsByText(string text, bool caseSensitive, Func isSearchCancelled, Action setProgressPercentage) - { - var visibleLayers = Map.GetAllVisibleLayers(false).Where(l => l.DataSource != null && l.DataSource.Features != null).ToList(); - if (visibleLayers.Count == 0) yield break; - - var percentageStep = 100.0 / visibleLayers.Count; - var currentPercentage = 0.0; - - foreach (var layer in visibleLayers) - { - if (isSearchCancelled()) - { - yield break; - } - - var matchingItems = layer.DataSource.Features.OfType(). - Where(n => n.Name != null && - (caseSensitive - ? n.Name.Contains(text) - : n.Name.ToLower().Contains(text.ToLower()))); - - foreach (var item in matchingItems) - { - yield return new System.Tuple(string.Format("{0} ({1})", item.Name, layer.Name), item); - } - - currentPercentage += percentageStep; - setProgressPercentage((int) currentPercentage); - } - } } } \ No newline at end of file