#region Disclaimer / License
// Copyright (C) 2010, Jackie Ng
// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie@gmail.com
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
#endregion
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Linq;
using System.Windows.Forms;
using Maestro.Shared.UI;
using Aga.Controls.Tree;
using OSGeo.MapGuide.ObjectModels.MapDefinition;
using Maestro.Editors.Common;
using Maestro.Editors.Generic;
using OSGeo.MapGuide.MaestroAPI;
using OSGeo.MapGuide.MaestroAPI.Resource;
namespace Maestro.Editors.MapDefinition
{
///
///
///
public delegate void OpenLayerEventHandler(object sender, string layerResourceId);
//[ToolboxItem(true)]
[ToolboxItem(false)]
internal partial class MapLayersSectionCtrl : EditorBindableCollapsiblePanel
{
public MapLayersSectionCtrl()
{
InitializeComponent();
trvBaseLayers.KeyUp += new KeyEventHandler(trvBaseLayers_KeyUp);
trvLayerDrawingOrder.KeyUp += new KeyEventHandler(trvLayerDrawingOrder_KeyUp);
trvLayersGroup.KeyUp += new KeyEventHandler(trvLayersGroup_KeyUp);
}
void trvLayersGroup_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Delete || e.KeyCode == Keys.Up || e.KeyCode == Keys.Down)
{
var group = GetSelectedLayerGroupItem() as GroupItem;
var layer = GetSelectedLayerGroupItem() as LayerItem;
if (e.KeyCode == Keys.Delete)
{
if (layer != null)
{
RemoveSelectedLayerGroupItem(layer);
}
else if (group != null)
{
RemoveSelectedLayerGroupItem(group);
}
}
else
{
if (layer != null)
{
OnDynamicLayerItemSelected(layer);
}
else if (group != null)
{
OnDynamicGroupItemSelected(group);
}
}
}
}
void trvLayerDrawingOrder_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Delete || e.KeyCode == Keys.Up || e.KeyCode == Keys.Down)
{
var layer = GetSelectedDrawOrderItem() as LayerItem;
if (layer != null)
{
if (e.KeyCode == Keys.Delete)
{
RemoveSelectedDrawOrderLayerItem(layer);
}
else
{
OnDrawOrderLayerItemSelected(layer);
}
}
}
}
void trvBaseLayers_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Delete || e.KeyCode == Keys.Up || e.KeyCode == Keys.Down)
{
var group = GetSelectedTiledLayerItem() as BaseLayerGroupItem;
var layer = GetSelectedTiledLayerItem() as BaseLayerItem;
if (e.KeyCode == Keys.Delete)
{
if (group != null)
{
RemoveSelectedTiledLayerItem(group);
}
else if (layer != null)
{
RemoveSelectedTiledLayerItem(layer);
}
}
else
{
if (layer != null)
{
OnBaseLayerItemSelected(layer);
}
else if (group != null)
{
OnBaseLayerGroupItemSelected(group);
}
}
}
}
private IMapDefinition _map;
private DrawOrderLayerModel _doLayerModel;
private GroupedLayerModel _grpLayerModel;
private TiledLayerModel _tiledLayerModel;
private IEditorService _edSvc;
public override void Bind(IEditorService service)
{
_edSvc = service;
_edSvc.RegisterCustomNotifier(this);
_map = (IMapDefinition)service.GetEditedResource();
trvLayerDrawingOrder.Model = _doLayerModel = new DrawOrderLayerModel(_map);
trvLayersGroup.Model = _grpLayerModel = new GroupedLayerModel(_map);
trvBaseLayers.Model = _tiledLayerModel = new TiledLayerModel(_map);
}
private void RefreshModels()
{
_doLayerModel.Invalidate();
_grpLayerModel.Invalidate();
_tiledLayerModel.Invalidate();
}
public event OpenLayerEventHandler RequestLayerOpen;
private void trvLayersGroup_MouseDoubleClick(object sender, MouseEventArgs e)
{
TreeNodeAdv node = trvLayersGroup.GetNodeAt(new Point(e.X, e.Y));
if (node != null)
{
var layer = node.Tag as LayerItem;
if (layer != null)
{
var handler = this.RequestLayerOpen;
if (handler != null)
handler(this, layer.Tag.ResourceId);
}
}
}
private void trvLayerDrawingOrder_MouseDoubleClick(object sender, MouseEventArgs e)
{
TreeNodeAdv node = trvLayerDrawingOrder.GetNodeAt(new Point(e.X, e.Y));
if (node != null)
{
var layer = node.Tag as LayerItem;
if (layer != null)
{
var handler = this.RequestLayerOpen;
if (handler != null)
handler(this, layer.Tag.ResourceId);
}
}
}
private void OnDynamicGroupItemSelected(GroupItem group)
{
btnAddGroup.Enabled = true;
btnGRPAddLayer.Enabled = true;
btnRemoveGroup.Enabled = true;
btnMoveLayerOrGroupUp.Enabled = true;
btnMoveLayerOrGroupDown.Enabled = true;
btnConvertLayerGroupToBaseGroup.Enabled = true;
propertiesPanel.Controls.Clear();
//var item = new GroupPropertiesCtrl(_map, group.Tag);
//item.GroupChanged += (s, evt) => { OnResourceChanged(); };
//item.Dock = DockStyle.Fill;
var item = CreateGroupControl(group);
_activeLayer = null;
propertiesPanel.Controls.Add(item);
}
class LocalizedDisplayNameAttribute : DisplayNameAttribute
{
private readonly string resourceName;
public LocalizedDisplayNameAttribute(string resourceName)
: base()
{
this.resourceName = resourceName;
}
public override string DisplayName
{
get
{
return Strings.ResourceManager.GetString(
this.resourceName,
Strings.Culture);
}
}
}
#region Designer Attributes
internal class BaseLayerItemDesigner
{
private BaseLayerItem _layer;
public BaseLayerItemDesigner(BaseLayerItem layer)
{
_layer = layer;
}
[Browsable(false)]
internal BaseLayerItem Item { get { return _layer; } }
[LocalizedDisplayName("MdfEditorSelectable")]
public bool Selectable
{
get { return _layer.Tag.Selectable; }
set { _layer.Tag.Selectable = value; }
}
[LocalizedDisplayName("MdfEditorShowInLegend")]
public bool ShowInLegend
{
get { return _layer.Tag.ShowInLegend; }
set { _layer.Tag.ShowInLegend = value; }
}
[LocalizedDisplayName("MdfEditorExpandInLegend")]
public bool ExpandInLegend
{
get { return _layer.Tag.ExpandInLegend; }
set { _layer.Tag.ExpandInLegend = value; }
}
}
internal class BaseGroupItemDesigner
{
private BaseLayerGroupItem _group;
public BaseGroupItemDesigner(BaseLayerGroupItem group)
{
_group = group;
}
[Browsable(false)]
internal BaseLayerGroupItem Item { get { return _group; } }
[LocalizedDisplayName("MdfEditorVisible")]
public bool Visible
{
get { return _group.Tag.Visible; }
set { _group.Tag.Visible = value; }
}
[LocalizedDisplayName("MdfEditorShowInLegend")]
public bool ShowInLegend
{
get { return _group.Tag.ShowInLegend; }
set { _group.Tag.ShowInLegend = value; }
}
[LocalizedDisplayName("MdfEditorExpandInLegend")]
public bool ExpandInLegend
{
get { return _group.Tag.ExpandInLegend; }
set { _group.Tag.ExpandInLegend = value; }
}
}
internal class LayerItemDesigner
{
private LayerItem _layer;
public LayerItemDesigner(LayerItem layer)
{
_layer = layer;
}
[Browsable(false)]
internal LayerItem Item { get { return _layer; } }
[LocalizedDisplayName("MdfEditorSelectable")]
public bool Selectable
{
get { return _layer.Tag.Selectable; }
set { _layer.Tag.Selectable = value; }
}
[LocalizedDisplayName("MdfEditorVisible")]
public bool Visible
{
get { return _layer.Tag.Visible; }
set { _layer.Tag.Visible = value; }
}
[LocalizedDisplayName("MdfEditorShowInLegend")]
public bool ShowInLegend
{
get { return _layer.Tag.ShowInLegend; }
set { _layer.Tag.ShowInLegend = value; }
}
[LocalizedDisplayName("MdfEditorExpandInLegend")]
public bool ExpandInLegend
{
get { return _layer.Tag.ExpandInLegend; }
set { _layer.Tag.ExpandInLegend = value; }
}
}
internal class GroupItemDesigner
{
private GroupItem _group;
public GroupItemDesigner(GroupItem group)
{
_group = group;
}
[Browsable(false)]
internal GroupItem Item { get { return _group; } }
[LocalizedDisplayName("MdfEditorVisible")]
public bool Visible
{
get { return _group.Tag.Visible; }
set { _group.Tag.Visible = value; }
}
[LocalizedDisplayName("MdfEditorShowInLegend")]
public bool ShowInLegend
{
get { return _group.Tag.ShowInLegend; }
set { _group.Tag.ShowInLegend = value; }
}
[LocalizedDisplayName("MdfEditorExpandInLegend")]
public bool ExpandInLegend
{
get { return _group.Tag.ExpandInLegend; }
set { _group.Tag.ExpandInLegend = value; }
}
}
#endregion
private Control CreateGroupControl(GroupItem group)
{
Control ctrl = new Control();
CommonPropertyCtrl commCtrl = new CommonPropertyCtrl();
commCtrl.Dock = DockStyle.Fill;
commCtrl.SelectedObject = new GroupItemDesigner(group);
var item = new GroupPropertiesCtrl(_map, group.Tag);
item.GroupChanged += (s, evt) => { OnResourceChanged(); };
item.Dock = DockStyle.Top;
ctrl.Controls.Add(commCtrl);
ctrl.Controls.Add(item);
ctrl.Dock = DockStyle.Fill;
return ctrl;
}
#region Control Factories
private Control CreateMultiControl(System.Collections.ObjectModel.ReadOnlyCollection nodes)
{
CommonPropertyCtrl commCtrl = new CommonPropertyCtrl();
commCtrl.Dock = DockStyle.Fill;
List