Index: src/Common/SharpMap.UI/Forms/IMapControl.cs =================================================================== diff -u -r8f6ae890fed8e8eae3a32f9c0498a10f82e0ddf9 -r685868ff25d1872c06c286a66dff024a1476dd31 --- src/Common/SharpMap.UI/Forms/IMapControl.cs (.../IMapControl.cs) (revision 8f6ae890fed8e8eae3a32f9c0498a10f82e0ddf9) +++ src/Common/SharpMap.UI/Forms/IMapControl.cs (.../IMapControl.cs) (revision 685868ff25d1872c06c286a66dff024a1476dd31) @@ -20,7 +20,13 @@ SelectTool SelectTool { get; } SnapTool SnapTool { get; } - + + /// + /// Gets the name of the tool by. + /// + /// Name of the tool. + /// An instance of IMapTool matching the given name, or null if no match was found. + /// Do not throw ArgumentOutOfRangeException UI handlers (button checked) can ask for not existing tool IMapTool GetToolByName(string toolName); T GetToolByType() where T : class; Index: src/Common/SharpMap.UI/Forms/MapControl.cs =================================================================== diff -u -rc911dd539d1c78029e363c35adbee1c92f98d3ea -r685868ff25d1872c06c286a66dff024a1476dd31 --- src/Common/SharpMap.UI/Forms/MapControl.cs (.../MapControl.cs) (revision c911dd539d1c78029e363c35adbee1c92f98d3ea) +++ src/Common/SharpMap.UI/Forms/MapControl.cs (.../MapControl.cs) (revision 685868ff25d1872c06c286a66dff024a1476dd31) @@ -45,11 +45,10 @@ // TODO: fieds below should be moved to some more specific tools? private bool disposed; private bool disposingActive; + private bool inRefresh; private Map map; - private DelayedEventHandler mapCollectionChangedEventHandler; - private DelayedEventHandler mapPropertyChangedEventHandler; private IList selectedFeatures = new List(); - private Timer refreshTimer = new Timer() { Interval = 300 }; + private Timer refreshTimer = new Timer { Interval = 300 }; /// /// Initializes a new map @@ -62,32 +61,6 @@ base.AllowDrop = true; CreateMapTools(); - - mapPropertyChangedEventHandler = - new DelayedEventHandler(MapPropertyChangedDelayed) - { - SynchronizingObject = this, - FireLastEventOnly = true, - Delay = 300, - Filter = (sender, e) => sender is ILayer || - sender is VectorStyle || - sender is ITheme || - sender is IList, - Enabled = false - }; - - mapCollectionChangedEventHandler = - new DelayedEventHandler(MapCollectionChangedDelayed) - { - SynchronizingObject = this, - FireLastEventOnly = true, - Delay = 300, - FullRefreshEventHandler = (sender, e) => OnFullRefresh(sender, e), - Filter = (sender, e) => sender is Map || - sender is ILayer || - sender is IList, - Enabled = false - }; Width = 100; Height = 100; @@ -220,24 +193,11 @@ } } - public bool IsProcessing - { - get - { - var processingPropertyChangedEvents = mapPropertyChangedEventHandler != null && - (mapPropertyChangedEventHandler.IsRunning || mapPropertyChangedEventHandler.HasEventsToProcess); + public bool IsProcessing { get { return false; } } - var processingCollectionChangedEvents = mapCollectionChangedEventHandler != null && - (mapCollectionChangedEventHandler.IsRunning || mapCollectionChangedEventHandler.HasEventsToProcess); - - return processingPropertyChangedEvents || processingCollectionChangedEvents; - } - } - public IMapTool GetToolByName(string toolName) { return Tools.SingleOrDefault(tool => tool.Name == toolName); - // Do not throw ArgumentOutOfRangeException UI handlers (button checked) can ask for not existing tool } public T GetToolByType() where T : class @@ -268,8 +228,6 @@ } } - private bool inRefresh = false; - /// /// Refreshes the map /// @@ -354,24 +312,24 @@ ColorMatrix colorMatrix; if (good) { - colorMatrix = new ColorMatrix(new float[][] - { - new float[] {1.0f, 0.0f, 0.0f, 0.0f, 0.0f}, // red scaling of 1 - new float[] {0.0f, 1.0f, 0.0f, 0.0f, 0.0f}, // green scaling of 1 - new float[] {0.0f, 0.0f, 1.0f, 0.0f, 0.0f}, // blue scaling of 1 - new float[] {0.0f, 0.0f, 0.0f, 0.5f, 0.0f}, // alpha scaling of 0.5 - new float[] {0.0f, 0.0f, 0.0f, 0.0f, 1.0f} + colorMatrix = new ColorMatrix(new[] + { + new [] {1.0f, 0.0f, 0.0f, 0.0f, 0.0f}, // red scaling of 1 + new [] {0.0f, 1.0f, 0.0f, 0.0f, 0.0f}, // green scaling of 1 + new [] {0.0f, 0.0f, 1.0f, 0.0f, 0.0f}, // blue scaling of 1 + new [] {0.0f, 0.0f, 0.0f, 0.5f, 0.0f}, // alpha scaling of 0.5 + new [] {0.0f, 0.0f, 0.0f, 0.0f, 1.0f} }); } else { - colorMatrix = new ColorMatrix(new float[][] + colorMatrix = new ColorMatrix(new [] { - new float[] {2.0f, 0.0f, 0.0f, 0.0f, 0.0f}, // red scaling of 2 - new float[] {0.0f, 1.0f, 0.0f, 0.0f, 0.0f}, // green scaling of 1 - new float[] {0.0f, 0.0f, 1.0f, 0.0f, 0.0f}, // blue scaling of 1 - new float[] {0.0f, 0.0f, 0.0f, 0.5f, 0.0f}, // alpha scaling of 0.5 - new float[] {1.0f, 0.0f, 0.0f, 0.0f, 1.0f} + new [] {2.0f, 0.0f, 0.0f, 0.0f, 0.0f}, // red scaling of 2 + new [] {0.0f, 1.0f, 0.0f, 0.0f, 0.0f}, // green scaling of 1 + new [] {0.0f, 0.0f, 1.0f, 0.0f, 0.0f}, // blue scaling of 1 + new [] {0.0f, 0.0f, 0.0f, 0.5f, 0.0f}, // alpha scaling of 0.5 + new [] {1.0f, 0.0f, 0.0f, 0.0f, 1.0f} }); } @@ -396,19 +354,8 @@ base.OnResize(e); } - protected override void OnHandleCreated(EventArgs e) - { - base.OnHandleCreated(e); - - mapPropertyChangedEventHandler.Enabled = true; - mapCollectionChangedEventHandler.Enabled = true; - } - protected override void OnHandleDestroyed(EventArgs e) { - mapPropertyChangedEventHandler.Enabled = false; - mapCollectionChangedEventHandler.Enabled = false; - if (refreshTimer != null) { refreshTimer.Tick -= RefreshTimerTick; @@ -696,9 +643,6 @@ Cursor = null; - mapPropertyChangedEventHandler.Enabled = false; - mapCollectionChangedEventHandler.Enabled = false; - if (refreshTimer != null) { refreshTimer.Tick -= RefreshTimerTick; @@ -707,9 +651,6 @@ refreshTimer = null; } - mapCollectionChangedEventHandler.Dispose(); - mapPropertyChangedEventHandler.Dispose(); - base.Dispose(disposing); } catch (Exception e) @@ -812,16 +753,16 @@ private void UnSubscribeMapEvents() { - map.CollectionChanged -= mapCollectionChangedEventHandler; - ((INotifyPropertyChanged)map).PropertyChanged -= mapPropertyChangedEventHandler; + map.CollectionChanged -= MapCollectionChangedDelayed; + ((INotifyPropertyChanged)map).PropertyChanged -= MapPropertyChangedDelayed; map.MapRendered -= OnMapRendered; map.MapLayerRendered -= OnMapLayerRendered; } private void SubScribeMapEvents() { - map.CollectionChanged += mapCollectionChangedEventHandler; - ((INotifyPropertyChanged)map).PropertyChanged += mapPropertyChangedEventHandler; + map.CollectionChanged += MapCollectionChangedDelayed; + ((INotifyPropertyChanged)map).PropertyChanged += MapPropertyChangedDelayed; map.MapRendered += OnMapRendered; map.MapLayerRendered += OnMapLayerRendered; } @@ -865,14 +806,17 @@ private void MapPropertyChangedDelayed(object sender, PropertyChangedEventArgs e) { - if (IsDisposed || !IsHandleCreated) // must be called before InvokeRequired + if (sender is ILayer || sender is VectorStyle || sender is ITheme || sender is IList) { - return; - } + if (IsDisposed || !IsHandleCreated) // must be called before InvokeRequired + { + return; + } - //Log.DebugFormat("IsDisposed: {0}, IsHandleCreated: {1}, Disposing: {2}", IsDisposed, IsHandleCreated, Disposing); + //Log.DebugFormat("IsDisposed: {0}, IsHandleCreated: {1}, Disposing: {2}", IsDisposed, IsHandleCreated, Disposing); - MapPropertyChanged(sender, e); + MapPropertyChanged(sender, e); + } } [InvokeRequired] @@ -904,12 +848,17 @@ private void MapCollectionChangedDelayed(object sender, NotifyCollectionChangingEventArgs e) { - if (IsDisposed || !IsHandleCreated) // must be called before InvokeRequired + if (sender is Map || sender is ILayer || sender is IList) { - return; - } + if (IsDisposed || !IsHandleCreated) // must be called before InvokeRequired + { + return; + } - MapCollectionChanged(sender, e); + MapCollectionChanged(sender, e); + + OnFullRefresh(sender, e); + } } [InvokeRequired]