#region Disclaimer / License
// Copyright (C) 2011, 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.Text;
using Maestro.Base.Services;
using OSGeo.MapGuide.ObjectModels.MapDefinition;
using OSGeo.MapGuide.ObjectModels;
using OSGeo.MapGuide.ObjectModels.Common;
using OSGeo.MapGuide.MaestroAPI;
using OSGeo.MapGuide;
using OSGeo.MapGuide.ObjectModels.WatermarkDefinition;
using OSGeo.MapGuide.ObjectModels.LayerDefinition;
using OSGeo.MapGuide.MaestroAPI.Resource;
using Maestro.Editors;
using Maestro.Editors.Preview;
namespace Maestro.AddIn.Local.Services
{
public class LocalPreviewer : IResourcePreviewer
{
public bool IsPreviewable(OSGeo.MapGuide.MaestroAPI.Resource.IResource res)
{
var rt = res.ResourceType;
return (rt == ResourceTypes.LayerDefinition ||
rt == ResourceTypes.MapDefinition ||
rt == ResourceTypes.WatermarkDefinition);
}
///
/// Previews the specified resource
///
/// The resource to be previewed
/// The editor service
public void Preview(IResource res, IEditorService edSvc)
{
Preview(res, edSvc, edSvc.PreviewLocale);
}
public void Preview(IResource res, IEditorService edSvc, string locale)
{
IMapDefinition mapDef = null;
var conn = res.CurrentConnection;
if (res.ResourceType == ResourceTypes.LayerDefinition)
{
var ldf = (ILayerDefinition)res;
string wkt;
var env = ldf.GetSpatialExtent(true, out wkt);
if (env == null)
throw new ApplicationException(Strings.CouldNotComputeExtentsForPreview);
mapDef = ObjectFactory.CreateMapDefinition(conn, "Preview");
mapDef.CoordinateSystem = wkt;
mapDef.SetExtents(env.MinX, env.MinY, env.MaxX, env.MaxY);
string resId = "Session:" + edSvc.SessionID + "//" + Guid.NewGuid() + "." + res.ResourceType.ToString();
edSvc.ResourceService.SetResourceXmlData(resId, ResourceTypeRegistry.Serialize(res));
mapDef.AddLayer(null, "PreviewLayer", resId);
}
else if (res.ResourceType == ResourceTypes.MapDefinition)
{
mapDef = (IMapDefinition)res;
}
else if (res.ResourceType == ResourceTypes.WatermarkDefinition)
{
string resId = "Session:" + edSvc.SessionID + "//" + Guid.NewGuid() + "." + res.ResourceType.ToString();
edSvc.ResourceService.SetResourceXmlData(resId, ResourceTypeRegistry.Serialize(res));
var csFact = new MgCoordinateSystemFactory();
var arbXY = csFact.ConvertCoordinateSystemCodeToWkt("XY-M");
mapDef = ObjectFactory.CreateMapDefinition(conn, new Version(2, 3, 0), "Preview");
mapDef.CoordinateSystem = arbXY;
mapDef.SetExtents(-100000, -100000, 100000, 100000);
var wm = ((IMapDefinition2)mapDef).AddWatermark(((IWatermarkDefinition)res));
wm.ResourceId = resId;
}
var mapResId = new MgResourceIdentifier("Session:" + edSvc.SessionID + "//" + mapDef.ResourceType.ToString() + "Preview" + Guid.NewGuid() + "." + mapDef.ResourceType.ToString());
edSvc.ResourceService.SetResourceXmlData(mapResId.ToString(), ResourceTypeRegistry.Serialize(mapDef));
//MgdMap map = new MgdMap(mapResId);
//var diag = new MapPreviewWindow(map, conn);
//diag.ShowDialog();
var diag = new UI.MapPreviewWindow(conn);
diag.Init(mapResId);
diag.ShowDialog();
}
}
}