[mapguide-commits] r5465 - in sandbox/maestro-3.0:
Maestro.Editors/MapDefinition OSGeo.MapGuide.MaestroAPI/ObjectModels
OSGeo.MapGuide.MaestroAPI.Native
svn_mapguide at osgeo.org
svn_mapguide at osgeo.org
Fri Dec 10 04:46:00 EST 2010
Author: jng
Date: 2010-12-10 01:46:00 -0800 (Fri, 10 Dec 2010)
New Revision: 5465
Modified:
sandbox/maestro-3.0/Maestro.Editors/MapDefinition/MapLayersSectionCtrl.cs
sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/MgReadOnlyStream.cs
sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/MapDefinition.cs
sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/MapDefinitionInterfaces.cs
Log:
3.0 sandbox changes:
- #1526: Retain selection when moving items up or down. Add drag/drop support reordering of layers in draw order tab.
- Fix incorrect IDisposable implementation in MgReadOnlyStream
Modified: sandbox/maestro-3.0/Maestro.Editors/MapDefinition/MapLayersSectionCtrl.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/MapDefinition/MapLayersSectionCtrl.cs 2010-12-10 08:49:16 UTC (rev 5464)
+++ sandbox/maestro-3.0/Maestro.Editors/MapDefinition/MapLayersSectionCtrl.cs 2010-12-10 09:46:00 UTC (rev 5465)
@@ -229,6 +229,8 @@
{
_map.MoveUp(layer.Tag);
_doLayerModel.Invalidate();
+
+ RestoreDrawOrderSelection(layer);
}
}
@@ -239,9 +241,12 @@
{
_map.MoveDown(layer.Tag);
_doLayerModel.Invalidate();
+
+ RestoreDrawOrderSelection(layer);
}
}
+
private void btnDLMoveLayerTop_Click(object sender, EventArgs e)
{
var layer = GetSelectedDrawOrderItem() as LayerItem;
@@ -249,6 +254,8 @@
{
_map.SetTopDrawOrder(layer.Tag);
_doLayerModel.Invalidate();
+
+ RestoreDrawOrderSelection(layer);
}
}
@@ -259,9 +266,43 @@
{
_map.SetBottomDrawOrder(layer.Tag);
_doLayerModel.Invalidate();
+
+ RestoreDrawOrderSelection(layer);
}
}
+ private static void RestoreSelection<TaggedType>(TreeViewAdv tree, Predicate<TaggedType> predicate) where TaggedType : class
+ {
+ //Restore selection
+ TreeNodeAdv selectedNode = null;
+ foreach (var node in tree.AllNodes)
+ {
+ var tag = node.Tag as TaggedType;
+
+ if (tag != null && predicate(tag))
+ {
+ selectedNode = node;
+ break;
+ }
+ }
+ if (selectedNode != null)
+ tree.SelectedNode = selectedNode;
+ }
+
+ private void RestoreBaseLayerSelection(BaseLayerItem item)
+ {
+ //The node tag will probably be different, but the wrapped
+ //instance is what we're checking for
+ RestoreSelection<BaseLayerItem>(trvBaseLayers, (tag) => { return tag.Tag == item.Tag; });
+ }
+
+ private void RestoreDrawOrderSelection(LayerItem layer)
+ {
+ //The node tag will probably be different, but the wrapped
+ //instance is what we're checking for
+ RestoreSelection<LayerItem>(trvLayerDrawingOrder, (tag) => { return tag.Tag == layer.Tag; });
+ }
+
private void CreateNewGroup(IMapLayerGroup parentGroup)
{
int counter = 0;
@@ -447,7 +488,11 @@
{
var grp = layer.Parent;
grp.MoveUp(layer.Tag);
- _tiledLayerModel.Invalidate();
+ var node = trvBaseLayers.SelectedNode.Parent;
+ var path = trvBaseLayers.GetPath(node);
+ _tiledLayerModel.Invalidate(path);
+
+ RestoreBaseLayerSelection(layer);
}
}
@@ -458,7 +503,11 @@
{
var grp = layer.Parent;
grp.MoveDown(layer.Tag);
- _tiledLayerModel.Invalidate();
+ var node = trvBaseLayers.SelectedNode.Parent;
+ var path = trvBaseLayers.GetPath(node);
+ _tiledLayerModel.Invalidate(path);
+
+ RestoreBaseLayerSelection(layer);
}
}
@@ -602,46 +651,108 @@
private void trvLayerDrawingOrder_DragDrop(object sender, DragEventArgs e)
{
+ //TODO: Handle drag/drop re-ordering
var rids = e.Data.GetData(typeof(ResourceIdentifier[])) as ResourceIdentifier[];
- if (rids == null || rids.Length == 0)
- return;
-
- IMapLayer layer = null;
- var node = trvLayersGroup.GetNodeAt(trvLayersGroup.PointToClient(new Point(e.X, e.Y)));
- if (node != null)
+ if (rids != null && rids.Length > 0)
{
- var li = node.Tag as LayerItem;
- if (li != null)
- layer = li.Tag;
- }
+ IMapLayer layer = null;
+ var node = trvLayerDrawingOrder.GetNodeAt(trvLayerDrawingOrder.PointToClient(new Point(e.X, e.Y)));
+ if (node != null)
+ {
+ var li = node.Tag as LayerItem;
+ if (li != null)
+ layer = li.Tag;
+ }
- int added = 0;
- foreach (var rid in rids)
- {
- if (rid.ResourceType == ResourceTypes.LayerDefinition)
+ int added = 0;
+ foreach (var rid in rids)
{
- var name = GenerateLayerName(rid.ToString(), _map);
- //var layer = _map.AddLayer(parent == null ? null : parent.Name, name, rid.ToString());
- var lyr = _map.AddLayer(layer, null, name, rid.ToString());
- added++;
+ if (rid.ResourceType == ResourceTypes.LayerDefinition)
+ {
+ var name = GenerateLayerName(rid.ToString(), _map);
+ //var layer = _map.AddLayer(parent == null ? null : parent.Name, name, rid.ToString());
+ var lyr = _map.AddLayer(layer, null, name, rid.ToString());
+ added++;
+ }
}
+
+ if (added > 0)
+ {
+ //TODO: Fine-grain invalidation
+ RefreshModels();
+ }
}
+ else
+ {
+ var data = e.Data.GetData(typeof(TreeNodeAdv[])) as TreeNodeAdv[];
+ if (data != null && data.Length == 1)
+ {
+ var li = data[0].Tag as LayerItem;
+ if (li != null)
+ {
+ IMapLayer sourceLayer = li.Tag;
+ IMapLayer targetLayer = null;
+ var node = trvLayerDrawingOrder.GetNodeAt(trvLayerDrawingOrder.PointToClient(new Point(e.X, e.Y)));
+ if (node != null)
+ {
+ var tli = node.Tag as LayerItem;
+ if (tli != null)
+ targetLayer = tli.Tag;
+ }
- if (added > 0)
- {
- //TODO: Fine-grain invalidation
- RefreshModels();
+ if (sourceLayer != null && targetLayer != null && sourceLayer != targetLayer)
+ {
+ int idx = _map.GetIndex(targetLayer);
+ if (idx >= 0)
+ {
+ _map.RemoveLayer(sourceLayer);
+ _map.InsertLayer(idx, sourceLayer);
+ RefreshModels();
+ }
+ }
+ }
+ }
}
}
private void trvLayerDrawingOrder_DragEnter(object sender, DragEventArgs e)
{
- HandleDragEnter(e);
+ var data = e.Data.GetData(typeof(TreeNodeAdv[])) as TreeNodeAdv[];
+ if (data == null)
+ {
+ HandleDragEnter(e);
+ }
+ else
+ {
+ var layer = data[0].Tag as LayerItem;
+ if (layer == null)
+ {
+ e.Effect = DragDropEffects.None;
+ return;
+ }
+ }
}
private void trvLayerDrawingOrder_DragOver(object sender, DragEventArgs e)
{
- HandleDragOver(e);
+ var data = e.Data.GetData(typeof(TreeNodeAdv[])) as TreeNodeAdv[];
+ if (data == null)
+ {
+ HandleDragOver(e);
+ }
+ else
+ {
+ var li = data[0].Tag as LayerItem;
+ if (li == null)
+ {
+ e.Effect = DragDropEffects.None;
+ return;
+ }
+ else
+ {
+ e.Effect = DragDropEffects.Move;
+ }
+ }
}
private void trvLayerDrawingOrder_ItemDrag(object sender, ItemDragEventArgs e)
@@ -656,31 +767,31 @@
private void trvBaseLayers_DragDrop(object sender, DragEventArgs e)
{
+ int added = 0;
var rids = e.Data.GetData(typeof(ResourceIdentifier[])) as ResourceIdentifier[];
- if (rids == null || rids.Length == 0)
- return;
-
- var node = trvLayersGroup.GetNodeAt(trvLayersGroup.PointToClient(new Point(e.X, e.Y)));
-
- IBaseMapGroup group = null;
- if (node != null && node.Tag is BaseLayerGroupItem)
+ if (rids != null && rids.Length > 0)
{
- group = ((BaseLayerGroupItem)node.Tag).Tag;
- }
+ var node = trvLayersGroup.GetNodeAt(trvLayersGroup.PointToClient(new Point(e.X, e.Y)));
- int added = 0;
- //No group? Let's make one!
- if (group == null)
- {
- _map.InitBaseMap();
- group = _map.BaseMap.AddBaseLayerGroup(GenerateBaseGroupName(_map));
+ IBaseMapGroup group = null;
+ if (node != null && node.Tag is BaseLayerGroupItem)
+ {
+ group = ((BaseLayerGroupItem)node.Tag).Tag;
+ }
- foreach (var rid in rids)
+ //No group? Let's make one!
+ if (group == null)
{
- if (rid.ResourceType == ResourceTypes.LayerDefinition)
+ _map.InitBaseMap();
+ group = _map.BaseMap.AddBaseLayerGroup(GenerateBaseGroupName(_map));
+
+ foreach (var rid in rids)
{
- group.AddLayer(GenerateBaseLayerName(rid.ToString(), _map.BaseMap), rid.ToString());
- added++;
+ if (rid.ResourceType == ResourceTypes.LayerDefinition)
+ {
+ group.AddLayer(GenerateBaseLayerName(rid.ToString(), _map.BaseMap), rid.ToString());
+ added++;
+ }
}
}
}
Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/MapDefinition.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/MapDefinition.cs 2010-12-10 08:49:16 UTC (rev 5464)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/MapDefinition.cs 2010-12-10 09:46:00 UTC (rev 5465)
@@ -125,6 +125,21 @@
get { return true; }
}
+ /// <summary>
+ /// Inserts the layer at the specified index
+ /// </summary>
+ /// <param name="idx"></param>
+ /// <param name="layer"></param>
+ void IMapDefinition.InsertLayer(int idx, IMapLayer layer)
+ {
+ var li = layer as MapLayerType;
+ if (li != null)
+ {
+ this.MapLayer.Insert(idx, li);
+ li.Parent = this;
+ }
+ }
+
void IMapDefinition.SetExtents(double minx, double miny, double maxx, double maxy)
{
if (this.Extents == null)
Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/MapDefinitionInterfaces.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/MapDefinitionInterfaces.cs 2010-12-10 08:49:16 UTC (rev 5464)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/MapDefinitionInterfaces.cs 2010-12-10 09:46:00 UTC (rev 5465)
@@ -203,6 +203,13 @@
/// </summary>
/// <param name="layer"></param>
void SetBottomDrawOrder(IMapLayer layer);
+
+ /// <summary>
+ /// Inserts the layer at the specified index
+ /// </summary>
+ /// <param name="idx"></param>
+ /// <param name="layer"></param>
+ void InsertLayer(int idx, IMapLayer layer);
}
/// <summary>
Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/MgReadOnlyStream.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/MgReadOnlyStream.cs 2010-12-10 08:49:16 UTC (rev 5464)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/MgReadOnlyStream.cs 2010-12-10 09:46:00 UTC (rev 5465)
@@ -51,7 +51,6 @@
~MgReadOnlyStream()
{
Dispose(false);
- GC.SuppressFinalize(this);
}
protected override void Dispose(bool disposing)
More information about the mapguide-commits
mailing list