====== Source Code ServicesEditionSample PrintPreview CS WinForms 111115.zip ======
====Banner.cs====
using System;
using System.Diagnostics;
using System.IO;
using System.Management;
using System.Windows.Forms;
namespace PrintPreview
{
public partial class Banner : UserControl
{
public Banner()
{
InitializeComponent();
SetupBannerAd();
}
public void SetupBannerAd()
{
if (Process.GetCurrentProcess().ProcessName != "devenv")
{
adRotator.Url = new Uri(new DirectoryInfo(@"..\..\Resources\bannerad_offline.html").FullName);
if (IsNetworkAlive())
{
adRotator.Navigate("http://gis.thinkgeo.com/Default.aspx?tabid=640&random=" + Guid.NewGuid().ToString());
adsRotatorTimer.Start();
}
}
}
private static bool IsNetworkAlive()
{
ObjectQuery objectQuery = new ObjectQuery("select * from Win32_NetworkAdapter where NetConnectionStatus=2");
ManagementObjectSearcher searcher = null;
try
{
searcher = new ManagementObjectSearcher(objectQuery);
return (searcher.Get().Count > 0);
}
finally
{
if (searcher != null)
{
searcher.Dispose();
}
}
}
private void adsRotatorTimer_Tick(object sender, EventArgs e)
{
adRotator.Navigate("http://gis.thinkgeo.com/Default.aspx?tabid=640&random=" + Guid.NewGuid().ToString());
}
}
}
====CompassPrinterLayerProperty.cs====
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ThinkGeo.MapSuite.Core;
namespace PrintPreview
{
public partial class CompassPrinterLayerProperty : Form
{
CompassPrinterLayer layer = null;
public CompassPrinterLayerProperty(CompassPrinterLayer layer)
{
InitializeComponent();
this.layer = layer;
}
private void Window_Load(object sender, EventArgs e)
{
LoadLayerProperties();
LoadResize();
LoadDrag();
}
private void btnOK_Click(object sender, EventArgs e)
{
SetLayerProperties();
SetResize();
SetDrag();
Close();
DialogResult = DialogResult.OK;
}
private void LoadLayerProperties()
{
if (layer.NeedleImage != null)
{
txtPath.Text = layer.NeedleImage.PathFilename;
}
}
private void SetLayerProperties()
{
GeoImage image = new GeoImage(txtPath.Text);
layer.NeedleImage = image;
layer.Open();
PointShape centerPoint = layer.GetPosition().GetCenterPoint();
layer.SetPosition(image.GetWidth(), image.GetHeight(), centerPoint, PrintingUnit.Point);
}
private void LoadResize()
{
switch (layer.PrinterResizeMode)
{
case PrinterResizeMode.Fixed:
rbtnResizeFixed.Checked = true;
break;
case PrinterResizeMode.MaintainAspectRatio:
rbtnResizeMaintainRaio.Checked = true;
break;
case PrinterResizeMode.Resizable:
rbtnResize.Checked = true;
break;
default:
break;
}
}
private void SetResize()
{
if (rbtnResize.Checked)
{
layer.PrinterResizeMode = PrinterResizeMode.Resizable;
}
else if (rbtnResizeFixed.Checked)
{
layer.PrinterResizeMode = PrinterResizeMode.Fixed;
}
else if (rbtnResizeMaintainRaio.Checked)
{
layer.PrinterResizeMode = PrinterResizeMode.MaintainAspectRatio;
}
}
private void LoadDrag()
{
switch (layer.PrinterDragMode)
{
case PrinterDragMode.Fixed:
rbtnDragFixed.Checked = true;
break;
case PrinterDragMode.Dragable:
rbtnDraggable.Checked = true;
break;
default:
break;
}
}
private void SetDrag()
{
if (rbtnDragFixed.Checked)
{
layer.PrinterDragMode = PrinterDragMode.Fixed;
}
else if (rbtnDraggable.Checked)
{
layer.PrinterDragMode = PrinterDragMode.Dragable;
}
}
private void btnBrowse_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "All files (*.*)|*.*";
ofd.RestoreDirectory = true;
if (ofd.ShowDialog() == DialogResult.OK)
{
txtPath.Text = ofd.FileName;
}
}
}
}
====DataGridPrinterLayerProperty.cs====
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ThinkGeo.MapSuite.Core;
namespace PrintPreview
{
public partial class DataGridPrinterLayerProperty : Form
{
DataGridPrinterLayer dataGridPrinterLayer = null;
public DataGridPrinterLayerProperty(DataGridPrinterLayer dataGridPrinterLayer)
{
InitializeComponent();
this.dataGridPrinterLayer = dataGridPrinterLayer;
}
private void Window_Load(object sender, EventArgs e)
{
LoadLayerProperties();
LoadResize();
LoadDrag();
}
private void btnOK_Click(object sender, EventArgs e)
{
SetLayerProperties();
SetResize();
SetDrag();
Close();
DialogResult = DialogResult.OK;
}
private void LoadLayerProperties()
{
dv.DataSource = dataGridPrinterLayer.DataTable;
foreach (DataColumn column in dataGridPrinterLayer.DataTable.Columns)
{
cbxColumns.Items.Add(column.ColumnName);
}
lbFontSample.Font = Helper .GetFont ( dataGridPrinterLayer.TextFont);
lbFontSample.ForeColor = Helper.GetColor(((GeoSolidBrush)dataGridPrinterLayer.TextBrush).Color);
}
private void SetLayerProperties()
{
dataGridPrinterLayer.DataTable = (DataTable)dv.DataSource;
dataGridPrinterLayer.TextFont = Helper.GetGeoFont(lbFontSample.Font);
((GeoSolidBrush)dataGridPrinterLayer.TextBrush).Color = Helper.GetGeoColor(lbFontSample.ForeColor);
}
private void LoadResize()
{
switch (dataGridPrinterLayer.ResizeMode)
{
case PrinterResizeMode.Fixed:
rbtnResizeFixed.Checked = true;
break;
case PrinterResizeMode.MaintainAspectRatio:
rbtnResizeMaintainRaio.Checked = true;
break;
case PrinterResizeMode.Resizable:
rbtnResize.Checked = true;
break;
default:
break;
}
}
private void SetResize()
{
if (rbtnResize.Checked)
{
dataGridPrinterLayer.ResizeMode = PrinterResizeMode.Resizable;
}
else if (rbtnResizeFixed.Checked)
{
dataGridPrinterLayer.ResizeMode = PrinterResizeMode.Fixed;
}
else if (rbtnResizeMaintainRaio.Checked)
{
dataGridPrinterLayer.ResizeMode = PrinterResizeMode.MaintainAspectRatio;
}
}
private void LoadDrag()
{
switch (dataGridPrinterLayer.DragMode)
{
case PrinterDragMode.Fixed:
rbtnDragFixed.Checked = true;
break;
case PrinterDragMode.Dragable:
rbtnDraggable.Checked = true;
break;
default:
break;
}
}
private void SetDrag()
{
if (rbtnDragFixed.Checked)
{
dataGridPrinterLayer.DragMode = PrinterDragMode.Fixed;
}
else if (rbtnDraggable.Checked)
{
dataGridPrinterLayer.DragMode = PrinterDragMode.Dragable;
}
}
private void btnAdd_Click(object sender, EventArgs e)
{
DataTable dt = (DataTable)dv.DataSource;
string columnName = txtColumnName.Text;
if (dt.Columns.Contains(columnName))
{
MessageBox.Show("Duplicate Column Name");
}
else
{
dt.Columns.Add(columnName);
txtColumnName.Text = "";
cbxColumns.Items.Add(columnName);
}
}
private void btnRemove_Click(object sender, EventArgs e)
{
DataTable dt = (DataTable)dv.DataSource;
string deletingColumnName = cbxColumns.Text;
if (dt.Columns.Contains(deletingColumnName))
{
dt.Columns.Remove(deletingColumnName);
}
}
private void btnChangeFont_Click(object sender, EventArgs e)
{
FontDialog fd = new FontDialog();
fd.ShowColor = true;
fd.Font = lbFontSample.Font;
fd.Color = lbFontSample.ForeColor;
if (fd.ShowDialog() != DialogResult.Cancel)
{
lbFontSample.Font = fd.Font;
lbFontSample.ForeColor = fd.Color;
}
}
private void btnCancel_Click(object sender, EventArgs e)
{
Close();
}
}
}
====Footer.cs====
using System;
using System.Diagnostics;
using System.Windows.Forms;
using PrintPreview.Properties;
public partial class Footer : UserControl
{
public Footer()
{
InitializeComponent();
}
private void btnProductInformation_Click(object sender, EventArgs e)
{
Process.Start("http://gis.thinkgeo.com/Default.aspx?tabid=674");
}
private void btnProductInformation_Activate(object sender, EventArgs e)
{
btnProductInformation.Image = Resources.btn_active_map_suite_products;
}
private void btnProductInformation_Deactivate(object sender, EventArgs e)
{
btnProductInformation.Image = Resources.btn_inactive_map_suite_products;
}
private void btnSupportCenter_Click(object sender, EventArgs e)
{
Process.Start("http://gis.thinkgeo.com/supportcenter");
}
private void btnSupportCenter_Activate(object sender, EventArgs e)
{
btnSupportCenter.Image = Resources.btn_active_support_center;
}
private void btnSupportCenter_Deactivate(object sender, EventArgs e)
{
btnSupportCenter.Image = Resources.btn_inactive_support_center;
}
private void btnDiscussForum_Click(object sender, EventArgs e)
{
Process.Start("http://gis.thinkgeo.com/Support/DiscussionForums/tabid/143/afv/topicsview/aff/21/Default.aspx");
}
private void btnDiscussForum_Activate(object sender, EventArgs e)
{
btnDiscussForum.Image = Resources.btn_active_discussion_forums;
}
private void btnDiscussForum_Deactivate(object sender, EventArgs e)
{
btnDiscussForum.Image = Resources.btn_inactive_discussion_forums;
}
private void btnWiki_Click(object sender, EventArgs e)
{
Process.Start("http://wiki.thinkgeo.com/wiki/Map_Suite_Desktop_Edition");
}
private void btnWiki_Activate(object sender, EventArgs e)
{
btnWiki.Image = Resources.btn_active_thinkgeo_wiki;
}
private void btnWiki_Deactivate(object sender, EventArgs e)
{
btnWiki.Image = Resources.btn_inactive_thinkgeo_wiki;
}
private void btnContactUs_Click(object sender, EventArgs e)
{
Process.Start("http://gis.thinkgeo.com/Default.aspx?tabid=147");
}
private void btnContactUs_Activate(object sender, EventArgs e)
{
btnContactUs.Image = Resources.btn_active_contact_us;
}
private void btnContactUs_Deactivate(object sender, EventArgs e)
{
btnContactUs.Image = Resources.btn_inactive_contact_us;
}
}
====Helper.cs====
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using ThinkGeo.MapSuite.Core;
namespace PrintPreview
{
public static class Helper
{
public static Font GetFont(GeoFont geoFont)
{
FontStyle style = FontStyle.Regular;
switch (geoFont.Style)
{
case DrawingFontStyles.Regular:
style = FontStyle.Regular;
break;
case DrawingFontStyles.Bold:
style = FontStyle.Bold;
break;
case DrawingFontStyles.Italic:
style = FontStyle.Italic;
break;
case DrawingFontStyles.Underline:
style = FontStyle.Underline;
break;
case DrawingFontStyles.Strikeout:
style = FontStyle.Strikeout;
break;
default:
break;
}
Font font = new Font(geoFont.FontName, geoFont.Size, style);
return font;
}
public static GeoFont GetGeoFont(Font font)
{
DrawingFontStyles style = DrawingFontStyles.Regular;
switch (font.Style)
{
case FontStyle.Bold:
style = DrawingFontStyles.Bold;
break;
case FontStyle.Italic:
style = DrawingFontStyles.Italic;
break;
case FontStyle.Regular:
style = DrawingFontStyles.Regular;
break;
case FontStyle.Strikeout:
style = DrawingFontStyles.Strikeout;
break;
case FontStyle.Underline:
style = DrawingFontStyles.Underline;
break;
default:
break;
}
return new GeoFont(font.FontFamily.Name, font.Size, style);
}
public static Color GetColor(GeoColor geoColor)
{
return Color.FromArgb(geoColor.AlphaComponent, geoColor.RedComponent, geoColor.GreenComponent, geoColor.BlueComponent);
}
public static GeoColor GetGeoColor(Color color)
{
return GeoColor.FromArgb(color.A, color.R, color.G, color.B);
}
}
}
====ImagePrinterLayerProperty.cs====
using System;
using System.Windows.Forms;
using ThinkGeo.MapSuite.Core;
namespace PrintPreview
{
public partial class ImagePrinterLayerProperty : Form
{
ImagePrinterLayer imagePrinterLayer = null;
public ImagePrinterLayerProperty(ImagePrinterLayer imagePrinterLayer)
{
InitializeComponent();
this.imagePrinterLayer = imagePrinterLayer;
}
private void Window_Load(object sender, EventArgs e)
{
LoadLayerProperties();
LoadResize();
LoadDrag();
}
private void btnOK_Click(object sender, EventArgs e)
{
SetLayerProperties();
SetResize();
SetDrag();
Close();
DialogResult = DialogResult.OK;
}
private void LoadLayerProperties()
{
txtPath.Text = imagePrinterLayer.Image.PathFilename;
}
private void SetLayerProperties()
{
GeoImage image = new GeoImage(txtPath.Text);
imagePrinterLayer.Image = image;
imagePrinterLayer.Open();
PointShape centerPoint = imagePrinterLayer.GetPosition().GetCenterPoint();
imagePrinterLayer.SetPosition(image.GetWidth(), image.GetHeight(), centerPoint, PrintingUnit.Point);
}
private void LoadResize()
{
switch (imagePrinterLayer.ResizeMode)
{
case PrinterResizeMode.Fixed:
rbtnResizeFixed.Checked = true;
break;
case PrinterResizeMode.MaintainAspectRatio:
rbtnResizeMaintainRaio.Checked = true;
break;
case PrinterResizeMode.Resizable:
rbtnResize.Checked = true;
break;
default:
break;
}
}
private void SetResize()
{
if (rbtnResize.Checked)
{
imagePrinterLayer.ResizeMode = PrinterResizeMode.Resizable;
}
else if (rbtnResizeFixed.Checked)
{
imagePrinterLayer.ResizeMode = PrinterResizeMode.Fixed;
}
else if (rbtnResizeMaintainRaio.Checked)
{
imagePrinterLayer.ResizeMode = PrinterResizeMode.MaintainAspectRatio;
}
}
private void LoadDrag()
{
switch (imagePrinterLayer.DragMode)
{
case PrinterDragMode.Fixed:
rbtnDragFixed.Checked = true;
break;
case PrinterDragMode.Dragable:
rbtnDraggable.Checked = true;
break;
default:
break;
}
}
private void SetDrag()
{
if (rbtnDragFixed.Checked)
{
imagePrinterLayer.DragMode = PrinterDragMode.Fixed;
}
else if (rbtnDraggable.Checked)
{
imagePrinterLayer.DragMode = PrinterDragMode.Dragable;
}
}
private void btnBrowse_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "All files (*.*)|*.*";
ofd.RestoreDirectory = true;
if (ofd.ShowDialog() == DialogResult.OK)
{
txtPath.Text = ofd.FileName;
}
}
}
}
====LabelPrinterLayerProperty.cs====
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ThinkGeo.MapSuite.Core;
namespace PrintPreview
{
public partial class LabelPrinterLayerProperty : Form
{
LabelPrinterLayer labelPrinterLayer = null;
public LabelPrinterLayerProperty(LabelPrinterLayer labelPrinterLayer)
{
InitializeComponent();
this.labelPrinterLayer = labelPrinterLayer;
}
private void LabelPrinterLayerProperty_Load(object sender, EventArgs e)
{
LoadLayerProperties();
LoadResize();
LoadDrag();
}
private void btnOK_Click(object sender, EventArgs e)
{
SetLayerProperties();
SetResize();
SetDrag();
Close();
DialogResult = DialogResult.OK;
}
private void LoadLayerProperties()
{
txtText.Text = labelPrinterLayer.Text;
lbFontSample.Font = GetFont(labelPrinterLayer.Font);
lbFontSample.ForeColor = GetColor(((GeoSolidBrush)labelPrinterLayer.TextBrush).Color);
if (labelPrinterLayer.PrinterWrapMode == PrinterWrapMode.WrapText)
{
chkEnableWrapText.Checked = true;
}
else
{
chkEnableWrapText.Checked = false;
}
}
private void SetLayerProperties()
{
labelPrinterLayer.Text = txtText.Text;
labelPrinterLayer.Font = GetGeoFont(lbFontSample.Font);
((GeoSolidBrush)labelPrinterLayer.TextBrush).Color = GetGeoColor(lbFontSample.ForeColor);
if (chkEnableWrapText.Checked)
{
labelPrinterLayer.PrinterWrapMode = PrinterWrapMode.WrapText;
}
else
{
labelPrinterLayer.PrinterWrapMode = PrinterWrapMode.AutoSizeText;
}
}
private Font GetFont(GeoFont geoFont)
{
return new Font(geoFont.FontName, geoFont.Size);
}
private GeoFont GetGeoFont(Font font)
{
return new GeoFont(font.FontFamily.Name, font.Size);
}
private Color GetColor(GeoColor geoColor)
{
return Color.FromArgb(geoColor.AlphaComponent, geoColor.RedComponent, geoColor.GreenComponent, geoColor.BlueComponent);
}
private GeoColor GetGeoColor(Color color)
{
return GeoColor.FromArgb(color.A, color.R, color.G, color.B);
}
private void btnChangeFont_Click(object sender, EventArgs e)
{
FontDialog fd = new FontDialog();
fd.ShowColor = true;
fd.Font = lbFontSample.Font;
fd.Color = lbFontSample.ForeColor;
if (fd.ShowDialog() != DialogResult.Cancel)
{
lbFontSample.Font = fd.Font;
lbFontSample.ForeColor = fd.Color;
}
}
private void LoadResize()
{
switch (labelPrinterLayer.ResizeMode)
{
case PrinterResizeMode.Fixed:
rbtnResizeFixed.Checked = true;
break;
case PrinterResizeMode.MaintainAspectRatio:
rbtnResizeMaintainRaio.Checked = true;
break;
case PrinterResizeMode.Resizable:
rbtnResize.Checked = true;
break;
default:
break;
}
}
private void SetResize()
{
if (rbtnResize.Checked)
{
labelPrinterLayer.ResizeMode = PrinterResizeMode.Resizable;
}
else if (rbtnResizeFixed.Checked)
{
labelPrinterLayer.ResizeMode = PrinterResizeMode.Fixed;
}
else if (rbtnResizeMaintainRaio.Checked)
{
labelPrinterLayer.ResizeMode = PrinterResizeMode.MaintainAspectRatio;
}
}
private void LoadDrag()
{
switch (labelPrinterLayer.DragMode)
{
case PrinterDragMode.Fixed:
rbtnDragFixed.Checked = true;
break;
case PrinterDragMode.Dragable:
rbtnDraggable.Checked = true;
break;
default:
break;
}
}
private void SetDrag()
{
if (rbtnDragFixed.Checked)
{
labelPrinterLayer.DragMode = PrinterDragMode.Fixed;
}
else if (rbtnDraggable.Checked)
{
labelPrinterLayer.DragMode = PrinterDragMode.Dragable;
}
}
}
}
====MapPrinterLayerProperty.cs====
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ThinkGeo.MapSuite.Core;
namespace PrintPreview
{
public partial class MapPrinterLayerProperty : Form
{
MapPrinterLayer mapPrinterLayer = null;
bool isEditing = false;
public MapPrinterLayerProperty(MapPrinterLayer mapPrinterLayer)
{
InitializeComponent();
this.mapPrinterLayer = mapPrinterLayer;
}
private void Window_Load(object sender, EventArgs e)
{
LoadLayerProperties();
LoadResize();
LoadDrag();
}
private void btnOK_Click(object sender, EventArgs e)
{
SetLayerProperties();
SetResize();
SetDrag();
Close();
DialogResult = DialogResult.OK;
}
private void LoadLayerProperties()
{
if (mapPrinterLayer.Layers.Count > 0
&& mapPrinterLayer.Layers[0].GetType() == typeof(ShapeFileFeatureLayer))
{
txtPath.Text = ((ShapeFileFeatureLayer)mapPrinterLayer.Layers[0]).ShapePathFileName;
isEditing = true;
}
if (isEditing)
{
txtPath.Enabled = false;
btnBrowse.Enabled = false;
}
}
private void SetLayerProperties()
{
ShapeFileFeatureLayer shapeLayer = new ShapeFileFeatureLayer(txtPath.Text);
shapeLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
shapeLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country1;
shapeLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = new LineStyle(new GeoPen(GeoColor.SimpleColors.Black, 1));
shapeLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.Capital1;
shapeLayer.Open();
if (isEditing)
{
mapPrinterLayer.Layers.RemoveAt(0);
}
else
{
mapPrinterLayer.SetPosition(500, 500, 0, 0, PrintingUnit.Point);
mapPrinterLayer.MapExtent = shapeLayer.GetBoundingBox();
}
mapPrinterLayer.Layers.Add(shapeLayer);
}
private void LoadResize()
{
switch (mapPrinterLayer.ResizeMode)
{
case PrinterResizeMode.Fixed:
rbtnResizeFixed.Checked = true;
break;
case PrinterResizeMode.MaintainAspectRatio:
rbtnResizeMaintainRaio.Checked = true;
break;
case PrinterResizeMode.Resizable:
rbtnResize.Checked = true;
break;
default:
break;
}
}
private void SetResize()
{
if (rbtnResize.Checked)
{
mapPrinterLayer.ResizeMode = PrinterResizeMode.Resizable;
}
else if (rbtnResizeFixed.Checked)
{
mapPrinterLayer.ResizeMode = PrinterResizeMode.Fixed;
}
else if (rbtnResizeMaintainRaio.Checked)
{
mapPrinterLayer.ResizeMode = PrinterResizeMode.MaintainAspectRatio;
}
}
private void LoadDrag()
{
switch (mapPrinterLayer.DragMode)
{
case PrinterDragMode.Fixed:
rbtnDragFixed.Checked = true;
break;
case PrinterDragMode.Dragable:
rbtnDraggable.Checked = true;
break;
default:
break;
}
}
private void SetDrag()
{
if (rbtnDragFixed.Checked)
{
mapPrinterLayer.DragMode = PrinterDragMode.Fixed;
}
else if (rbtnDraggable.Checked)
{
mapPrinterLayer.DragMode = PrinterDragMode.Dragable;
}
}
private void btnBrowse_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Shape files (*.shp)|*.shp";
ofd.RestoreDirectory = true;
if (ofd.ShowDialog() == DialogResult.OK)
{
txtPath.Text = ofd.FileName;
}
}
}
}
====Program.cs====
using System;
using System.Windows.Forms;
namespace PrintPreview
{
static class Program
{
///
/// The main entry point for the application.
///
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Sample());
}
}
}
====Sample.cs====
using System;
using System.Collections.ObjectModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;
using PdfSharp;
using PdfSharp.Pdf;
using ThinkGeo.MapSuite.Core;
using ThinkGeo.MapSuite.DesktopEdition;
namespace PrintPreview
{
public partial class Sample : Form
{
public Sample() { InitializeComponent(); }
#region Add PrinterLayer Elements
private void Sample_Load(object sender, EventArgs e)
{
SetupMapWithBlankPage();
AddCenteredTitleLabel();
AddMapLayer();
AddDataGridLayer();
AddLogoImage();
AddScaleLineLayer();
AddLegendLayer();
SetupComboBoxes();
winformsMap1.Refresh();
}
private void SetupMapWithBlankPage()
{
// Setup the map unit, you want to always use feet or meters for printer layout maps
winformsMap1.MapUnit = GeographyUnit.Meter;
// Here we create the default zoom levels for the sample. We have pre-created a PrinterZoomLevelSet
// That pre-defines commonly used zoom levels based on percentages of zoom
winformsMap1.ZoomLevelSet = new PrinterZoomLevelSet(winformsMap1.MapUnit, PrinterHelper.GetPointsPerGeographyUnit(winformsMap1.MapUnit));
// Here we set the background color to gray so there is contrast with the while page
winformsMap1.BackgroundOverlay.BackgroundBrush = new GeoSolidBrush(GeoColor.StandardColors.LightGray);
// Create the PrinterInteractiveOverlay to contain all of the PrinterLayers.
// The interactive overlay allows the layers to be interacted with
PrinterInteractiveOverLay printerOverlay = new PrinterInteractiveOverLay();
winformsMap1.InteractiveOverlays.Add("PrintPreviewOverlay", printerOverlay);
winformsMap1.InteractiveOverlays.MoveToBottom("PrintPreviewOverlay");
// Create the PagePrinterLayer which shows the page boundary and is the area the user will
// arrange all of the other layer on top of.
PagePrinterLayer pagePrinterLayer = new PagePrinterLayer(PrinterPageSize.AnsiA, PrinterOrientation.Portrait);
pagePrinterLayer.Open();
printerOverlay.PrinterLayers.Add("PageLayer", pagePrinterLayer);
// Get the pages extent, slightly scale it up, and then set that as the default current extent
winformsMap1.CurrentExtent = RectangleShape.ScaleUp(pagePrinterLayer.GetPosition(), 10).GetBoundingBox();
// Set the minimum scale of the map to the last zoom level
winformsMap1.MinimumScale = winformsMap1.ZoomLevelSet.ZoomLevel20.Scale;
}
private void AddCenteredTitleLabel()
{
LabelPrinterLayer labelPrinterLayer = new LabelPrinterLayer();
//Setup the text and the font..
labelPrinterLayer.Text = "Population > 70 Million";
labelPrinterLayer.Font = new GeoFont("Arial", 10, DrawingFontStyles.Bold);
labelPrinterLayer.TextBrush = new GeoSolidBrush(GeoColor.StandardColors.Black);
labelPrinterLayer.PrinterWrapMode = PrinterWrapMode.AutoSizeText;
// Set the labels position so that is it centered on the page one inch from the top
RectangleShape pageBoundingbox = GetPageBoundingBox(PrintingUnit.Inch);
PointShape labelCenter = new PointShape();
labelCenter.X = pageBoundingbox.UpperRightPoint.X - pageBoundingbox.Width / 2;
labelCenter.Y = pageBoundingbox.UpperLeftPoint.Y - .5;
labelPrinterLayer.SetPosition(5, 1, labelCenter, PrintingUnit.Inch);
// Find the PrinterInteractiveOverlay so we can add the new LabelPrinterLayer
PrinterInteractiveOverLay printerInteractiveOverLay = (PrinterInteractiveOverLay)winformsMap1.InteractiveOverlays["PrintPreviewOverlay"];
printerInteractiveOverLay.PrinterLayers.Add("LabelLayer", labelPrinterLayer);
}
private void AddMapLayer()
{
// Create the MapPrinterLayer and set the position
MapPrinterLayer mapPrinterLayer = new MapPrinterLayer();
mapPrinterLayer.MapUnit = GeographyUnit.DecimalDegree;
mapPrinterLayer.BackgroundMask = new AreaStyle(new GeoPen(GeoColor.StandardColors.Black, 1));
mapPrinterLayer.Open();
// Set the maps position slightly below the pages center and 8 inches wide and 7 inches tall
RectangleShape pageBoundingbox = GetPageBoundingBox(PrintingUnit.Inch);
mapPrinterLayer.SetPosition(8, 7, pageBoundingbox.GetCenterPoint().X, pageBoundingbox.GetCenterPoint().Y + 1, PrintingUnit.Inch);
// Setup the intial extent and ensure they snap to the default ZoomLevel
ZoomLevelSet zoomLevelSet = new ZoomLevelSet();
mapPrinterLayer.MapExtent = ExtentHelper.ZoomToScale(zoomLevelSet.ZoomLevel03.Scale, new RectangleShape(-180, 90, 180, -90), mapPrinterLayer.MapUnit, (float)mapPrinterLayer.GetBoundingBox().Width, (float)mapPrinterLayer.GetBoundingBox().Height);
// Add the World Map Kit layer as the background
WorldMapKitLayer worldMapKitLayer = new WorldMapKitLayer();
worldMapKitLayer.Projection = WorldMapKitProjection.DecimalDegrees;
mapPrinterLayer.Layers.Add(worldMapKitLayer);
// Setup the Countries mapping layer
ShapeFileFeatureLayer shapefileFeatureLayer = new ShapeFileFeatureLayer(@"data/Countries02.shp", ShapeFileReadWriteMode.ReadOnly);
shapefileFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
//Create the class break style for countries less than 70 million
ClassBreakStyle classBreakStyle = new ClassBreakStyle("POP_CNTRY");
// Create the style and class break for countries with greater and 70 million
AreaStyle hatchAreaStyle = new AreaStyle(new GeoSolidBrush(GeoColor.FromArgb(100, GeoColor.StandardColors.Green)));
classBreakStyle.ClassBreaks.Add(new ClassBreak(70000000, hatchAreaStyle));
// Add the class break style to the layer
shapefileFeatureLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(classBreakStyle);
// Add the new country layer to the MapPrinterLayer
mapPrinterLayer.Layers.Add(shapefileFeatureLayer);
// Add the MapPrinterLayer to the PrinterInteractiveOverlay
PrinterInteractiveOverLay printerInteractiveOverLay = (PrinterInteractiveOverLay)winformsMap1.InteractiveOverlays["PrintPreviewOverlay"];
printerInteractiveOverLay.PrinterLayers.Add("MapLayer", mapPrinterLayer);
}
private void AddLegendLayer()
{
LegendItem title = new LegendItem();
title.TextStyle = new TextStyle("Map Legend", new GeoFont("Arial", 10, DrawingFontStyles.Bold), new GeoSolidBrush(GeoColor.SimpleColors.Black));
LegendItem legendItem1 = new LegendItem();
legendItem1.ImageStyle = new AreaStyle(new GeoSolidBrush(GeoColor.FromArgb(170, GeoColor.StandardColors.Green)));
legendItem1.TextStyle = new TextStyle("Population > 70 million", new GeoFont("Arial", 8), new GeoSolidBrush(GeoColor.SimpleColors.Black));
LegendItem legendItem2 = new LegendItem();
legendItem2.ImageStyle = AreaStyles.Country1;
legendItem2.TextStyle = new TextStyle("Population < 70 million", new GeoFont("Arial", 8), new GeoSolidBrush(GeoColor.SimpleColors.Black));
LegendPrinterLayer legendPrinterLayer = new LegendPrinterLayer();
legendPrinterLayer.Title = title;
legendPrinterLayer.LegendItems.Add(legendItem1);
legendPrinterLayer.LegendItems.Add(legendItem2);
legendPrinterLayer.Width = 160;
legendPrinterLayer.Height = 100;
legendPrinterLayer.SetPosition(2, 1, -2.9, 3.9, PrintingUnit.Inch);
PrinterInteractiveOverLay printerInteractiveOverLay = (PrinterInteractiveOverLay)winformsMap1.InteractiveOverlays["PrintPreviewOverlay"];
printerInteractiveOverLay.PrinterLayers.Add("LegendPrinterLayer", legendPrinterLayer);
}
private void AddDataGridLayer()
{
// Create the DataGridPrinterLayer
DataGridPrinterLayer dataGridPrinterLayer = new DataGridPrinterLayer();
dataGridPrinterLayer.TextFont = new GeoFont("Arial", 8);
dataGridPrinterLayer.TextHorizontalAlignment = TextHorizontalAlignment.Left;
// Set the data grid position 4 inches below the page center and 8 inches wide and 2.5 inches tall
RectangleShape pageBoundingbox = GetPageBoundingBox(PrintingUnit.Inch);
dataGridPrinterLayer.SetPosition(8, 2.5, pageBoundingbox.GetCenterPoint().X, pageBoundingbox.GetCenterPoint().Y - 4, PrintingUnit.Inch);
//Create the data table and columns
dataGridPrinterLayer.DataTable = new DataTable();
dataGridPrinterLayer.DataTable.Columns.Add("Country");
dataGridPrinterLayer.DataTable.Columns.Add("Population");
dataGridPrinterLayer.DataTable.Columns.Add("CurrencyCode");
dataGridPrinterLayer.DataTable.Columns.Add("Area");
// Find all of the countries with a population greater than 70 million
// and add those items to the data table
ShapeFileFeatureLayer shapefileFeatureLayer = new ShapeFileFeatureLayer(@"data/Countries02.shp", ShapeFileReadWriteMode.ReadOnly);
shapefileFeatureLayer.Open();
Collection features = shapefileFeatureLayer.QueryTools.GetAllFeatures(ReturningColumnsType.AllColumns);
shapefileFeatureLayer.Close();
foreach (Feature feature in features)
{
double pop = Convert.ToDouble(feature.ColumnValues["Pop_cntry"].ToString());
if (pop > 70000000)
{
dataGridPrinterLayer.DataTable.Rows.Add(new object[4] { feature.ColumnValues["Cntry_Name"], feature.ColumnValues["Pop_cntry"], feature.ColumnValues["curr_code"], feature.ColumnValues["sqkm"] });
}
}
// Add the DataGridPrinterLayer to the PrinterInteractiveOverlay
PrinterInteractiveOverLay printerInteractiveOverLay = (PrinterInteractiveOverLay)winformsMap1.InteractiveOverlays["PrintPreviewOverlay"];
printerInteractiveOverLay.PrinterLayers.Add("DataGridLayer", dataGridPrinterLayer);
}
private void AddLogoImage()
{
//Load the image to a GeoImage and then create the ImagePrinterLayer using that image
GeoImage compassGeoImage = new GeoImage(@"Images\Compass.png");
ImagePrinterLayer imagePrinterLayer = new ImagePrinterLayer(compassGeoImage);
// Set the imagePrinterLayer position offset from the page center and .75 inches wide and .75 inches tall
RectangleShape pageBoundingbox = GetPageBoundingBox(PrintingUnit.Inch);
imagePrinterLayer.SetPosition(.75, .75, pageBoundingbox.GetCenterPoint().X + 3.5, pageBoundingbox.GetCenterPoint().Y - 2.0, PrintingUnit.Inch);
// Add the imagePrinterLayer to the PrinterInteractiveOverlay
PrinterInteractiveOverLay printerInteractiveOverLay = (PrinterInteractiveOverLay)winformsMap1.InteractiveOverlays["PrintPreviewOverlay"];
printerInteractiveOverLay.PrinterLayers.Add("ImageLayer", imagePrinterLayer);
}
private void AddScaleLineLayer()
{
// Get the PrinterInteractiveOverlay
PrinterInteractiveOverLay printerInteractiveOverLay = (PrinterInteractiveOverLay)winformsMap1.InteractiveOverlays["PrintPreviewOverlay"];
// Grab the MapPrinterLayer as we need to pass that into the scaleLinePrinterLayer so it
// can be synced up to the map itself in real-time
MapPrinterLayer mapPrinterLayer = (MapPrinterLayer)printerInteractiveOverLay.PrinterLayers["MapLayer"];
//Create the scaleLinePrinterLayer and pass in the MapPrinterLayer
ScaleLinePrinterLayer scaleLinePrinterLayer = new ScaleLinePrinterLayer(mapPrinterLayer);
scaleLinePrinterLayer.MapUnit = GeographyUnit.DecimalDegree;
// Set the scale line position offset from the page center and 1.25 inches wide and .25 inches tall
RectangleShape pageBoundingbox = GetPageBoundingBox(PrintingUnit.Inch);
scaleLinePrinterLayer.SetPosition(1.25, .25, pageBoundingbox.GetCenterPoint().X - 3.25, pageBoundingbox.GetCenterPoint().Y - 2.25, PrintingUnit.Inch);
// Add the ScaleLinePrinterLayer to the PrinterInteractiveOverlay
printerInteractiveOverLay.PrinterLayers.Add("ScaleLineLayer", scaleLinePrinterLayer);
}
#endregion
#region Export Buttons
private void btnPrintPreview_Click(object sender, EventArgs e)
{
PrinterInteractiveOverLay printerInteractiveOverLay = (PrinterInteractiveOverLay)winformsMap1.InteractiveOverlays["PrintPreviewOverlay"];
PagePrinterLayer pagePrinterLayer = printerInteractiveOverLay.PrinterLayers["PageLayer"] as PagePrinterLayer;
PrintDialog printDialog = new PrintDialog();
PrintDocument printDocument = new PrintDocument();
printDocument.DefaultPageSettings.Landscape = true;
if (pagePrinterLayer.Orientation == PrinterOrientation.Portrait)
{
printDocument.DefaultPageSettings.Landscape = false;
}
printDocument.DefaultPageSettings.PaperSize = GetPrintPreviewPaperSize(pagePrinterLayer);
PrinterGeoCanvas printerGeoCanvas = new PrinterGeoCanvas();
printerGeoCanvas.DrawingArea = printDocument.DefaultPageSettings.Bounds;
printerGeoCanvas.BeginDrawing(printDocument, pagePrinterLayer.GetBoundingBox(), winformsMap1.MapUnit);
// Loop through all of the PrintingLayer in the PrinterInteractiveOverlay and print all of the
// except for the PagePrinterLayer
Collection labelsInAllLayers = new Collection();
foreach (PrinterLayer printerLayer in printerInteractiveOverLay.PrinterLayers)
{
printerLayer.IsDrawing = true;
if (!(printerLayer is PagePrinterLayer))
{
printerLayer.Draw(printerGeoCanvas, labelsInAllLayers);
}
printerLayer.IsDrawing = false;
}
printerGeoCanvas.Flush();
PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog();
printPreviewDialog.Document = printDocument;
DialogResult dialogResult = printPreviewDialog.ShowDialog();
}
private void btnExportBitmap_Click(object sender, EventArgs e)
{
PrinterInteractiveOverLay printerInteractiveOverLay = (PrinterInteractiveOverLay)winformsMap1.InteractiveOverlays["PrintPreviewOverlay"];
PagePrinterLayer pagePrinterLayer = printerInteractiveOverLay.PrinterLayers["PageLayer"] as PagePrinterLayer;
// Create a bitmap that is the size of the pages bounding box. The page by default is in points unit
// system which is very similar to pixels so that ampping is nice.
Bitmap bitmap = null;
try
{
bitmap = new Bitmap((int)pagePrinterLayer.GetBoundingBox().Width, (int)pagePrinterLayer.GetBoundingBox().Height);
// Create a GdiPlusGeoCanvas and start the drawing
GdiPlusGeoCanvas gdiPlusGeoCanvas = new GdiPlusGeoCanvas();
gdiPlusGeoCanvas.BeginDrawing(bitmap, pagePrinterLayer.GetBoundingBox(), winformsMap1.MapUnit);
// Loop through all of the PrintingLayer in the PrinterInteractiveOverlay and print all of the
// except for the PagePrinterLayer
Collection labelsInAllLayers = new Collection();
foreach (PrinterLayer printerLayer in printerInteractiveOverLay.PrinterLayers)
{
printerLayer.IsDrawing = true;
if (!(printerLayer is PagePrinterLayer))
{
printerLayer.Draw(gdiPlusGeoCanvas, labelsInAllLayers);
}
printerLayer.IsDrawing = false;
}
// End the drawing
gdiPlusGeoCanvas.EndDrawing();
//Save the resulting bitmap to a file and open the file to show the user
string filename = "PrintingResults.bmp";
bitmap.Save(filename);
Process.Start(filename);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + " " + ex.StackTrace, "Exception");
}
finally
{
if (bitmap != null) { bitmap.Dispose(); }
}
}
private void btnExportToPdf_Click(object sender, EventArgs e)
{
// Get the PrinterInteractiveOverlay and PagePrinterLayer as we are going to need them below
PrinterInteractiveOverLay printerInteractiveOverLay = (PrinterInteractiveOverLay)winformsMap1.InteractiveOverlays["PrintPreviewOverlay"];
PagePrinterLayer pagePrinterLayer = printerInteractiveOverLay.PrinterLayers["PageLayer"] as PagePrinterLayer;
PdfDocument pdfDocument = null;
PdfPage pdfPage = null;
try
{
// Create the PDF documents, pages, and copnfigure them
pdfDocument = new PdfDocument();
pdfPage = pdfDocument.AddPage();
pdfPage.Orientation = pagePrinterLayer.Orientation == PrinterOrientation.Portrait ? PageOrientation.Portrait : PageOrientation.Landscape;
pdfPage.Size = GetPdfPageSize(pagePrinterLayer.PageSize);
// Create the PdfGeoCanvas and pass tha PdfPage into the BeginDrawing
PdfGeoCanvas pdfGeoCanvas = new PdfGeoCanvas();
pdfGeoCanvas.BeginDrawing(pdfPage, pagePrinterLayer.GetBoundingBox(), winformsMap1.MapUnit);
// Loop through all of the PrinterLayers and draw them to the canvas except for the
// PagePrinterLayer which is just used for the visual layout
Collection labelsInAllLayers = new Collection();
foreach (PrinterLayer printerLayer in printerInteractiveOverLay.PrinterLayers)
{
printerLayer.IsDrawing = true;
if (!(printerLayer is PagePrinterLayer))
{
printerLayer.Draw(pdfGeoCanvas, labelsInAllLayers);
}
printerLayer.IsDrawing = false;
}
// Finish up the drawing
pdfGeoCanvas.EndDrawing();
// Dave the PDF document and launch it in the default viewer to show the user
string filename = "PrintingResults.pdf";
pdfDocument.Save(filename);
Process.Start(filename);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + " " + ex.StackTrace, "Exception");
}
finally
{
if (pdfDocument != null) { pdfDocument.Dispose(); }
}
}
private void btnPrint_Click(object sender, EventArgs e)
{
PrinterInteractiveOverLay printerInteractiveOverLay = (PrinterInteractiveOverLay)winformsMap1.InteractiveOverlays["PrintPreviewOverlay"];
PagePrinterLayer pagePrinterLayer = printerInteractiveOverLay.PrinterLayers["PageLayer"] as PagePrinterLayer;
PrintDocument printDocument = new PrintDocument();
printDocument.DefaultPageSettings.Landscape = true;
if (pagePrinterLayer.Orientation == PrinterOrientation.Portrait)
{
printDocument.DefaultPageSettings.Landscape = false;
}
printDocument.DefaultPageSettings.PaperSize = GetPrintPreviewPaperSize(pagePrinterLayer);
PrinterGeoCanvas printerGeoCanvas = new PrinterGeoCanvas();
printerGeoCanvas.DrawingArea = new Rectangle(0, 0, Convert.ToInt32(printDocument.DefaultPageSettings.PrintableArea.Width), Convert.ToInt32(printDocument.DefaultPageSettings.PrintableArea.Height));
printerGeoCanvas.BeginDrawing(printDocument, pagePrinterLayer.GetBoundingBox(), winformsMap1.MapUnit);
// Loop through all of the PrintingLayer in the PrinterInteractiveOverlay and print all of the
// except for the PagePrinterLayer
Collection labelsInAllLayers = new Collection();
foreach (PrinterLayer printerLayer in printerInteractiveOverLay.PrinterLayers)
{
printerLayer.IsDrawing = true;
if (!(printerLayer is PagePrinterLayer))
{
printerLayer.Draw(printerGeoCanvas, labelsInAllLayers);
}
printerLayer.IsDrawing = false;
}
printerGeoCanvas.EndDrawing();
}
#endregion
#region Map Events
void winformsMap1_CurrentScaleChanged(object sender, CurrentScaleChangedWinformsMapEventArgs e)
{
// Here we sync up the zoom combox to the map's zoom level.
PrinterZoomLevelSet printerZoomLevelSet = (PrinterZoomLevelSet)winformsMap1.ZoomLevelSet;
ZoomLevel currentZoomLevel = printerZoomLevelSet.GetZoomLevel(winformsMap1.CurrentExtent, winformsMap1.Width, winformsMap1.MapUnit);
cboZoom.SelectedItem = printerZoomLevelSet.GetZoomPercentage(currentZoomLevel) + "%";
}
private void winformsMap1_MapClick(object sender, MapClickWinformsMapEventArgs e)
{
// Here we loop through all of the PrinterLayers to find the one the user right mouse clicked on.
// Then we show the right click menu to give the user some options
if (e.MouseButton == MapMouseButton.Right)
{
PrinterInteractiveOverLay printerOverlay = (PrinterInteractiveOverLay)winformsMap1.InteractiveOverlays["PrintPreviewOverlay"];
for (int i = printerOverlay.PrinterLayers.Count - 1; i >= 0; i--)
{
if (printerOverlay.PrinterLayers[i].GetType() != typeof(PagePrinterLayer))
{
RectangleShape boundingBox = printerOverlay.PrinterLayers[i].GetPosition();
if (boundingBox.Contains(e.WorldLocation))
{
cmRightClick.Tag = printerOverlay.PrinterLayers[i];
cmRightClick.Show(winformsMap1, new Point((int)(e.ScreenX), (int)(e.ScreenY)));
break;
}
}
}
}
}
#endregion
#region Pan & Zoom Buttons
private void btnZoomIn_Click(object sender, EventArgs e)
{
// Grab the MapPrinterLayer and adjust the extent
PrinterInteractiveOverLay printerOverlay = (PrinterInteractiveOverLay)winformsMap1.InteractiveOverlays["PrintPreviewOverlay"];
MapPrinterLayer mapPrinterLayer = ((MapPrinterLayer)(printerOverlay.PrinterLayers["MapLayer"]));
// Here we snap the current scale to the default zoomLevelSet when we zoom in
ZoomLevelSet zoomLevelSet = new ZoomLevelSet();
double newScale = ZoomLevelSet.GetLowerZoomLevelScale(ExtentHelper.GetScale(mapPrinterLayer.MapExtent, (float)mapPrinterLayer.GetBoundingBox().Width, mapPrinterLayer.MapUnit), zoomLevelSet);
mapPrinterLayer.MapExtent = ExtentHelper.ZoomToScale(newScale, mapPrinterLayer.MapExtent, mapPrinterLayer.MapUnit, (float)mapPrinterLayer.GetBoundingBox().Width, (float)mapPrinterLayer.GetBoundingBox().Height);
winformsMap1.Refresh();
}
private void btnZoomOut_Click(object sender, EventArgs e)
{
// Grab the MapPrinterLayer and adjust the extent
PrinterInteractiveOverLay printerOverlay = (PrinterInteractiveOverLay)winformsMap1.InteractiveOverlays["PrintPreviewOverlay"];
MapPrinterLayer mapPrinterLayer = ((MapPrinterLayer)(printerOverlay.PrinterLayers["MapLayer"]));
// Here we snap the current scale to the default zoomLevelSet when we zoom out
ZoomLevelSet zoomLevelSet = new ZoomLevelSet();
double newScale = ZoomLevelSet.GetHigherZoomLevelScale(ExtentHelper.GetScale(mapPrinterLayer.MapExtent, (float)mapPrinterLayer.GetBoundingBox().Width, mapPrinterLayer.MapUnit), zoomLevelSet);
mapPrinterLayer.MapExtent = ExtentHelper.ZoomToScale(newScale, mapPrinterLayer.MapExtent, mapPrinterLayer.MapUnit, (float)mapPrinterLayer.GetBoundingBox().Width, (float)mapPrinterLayer.GetBoundingBox().Height);
winformsMap1.Refresh();
}
private void btnPan_Click(object sender, EventArgs e)
{
// Grab the MapPrinterLayer and adjust the extent
PrinterInteractiveOverLay printerOverlay = (PrinterInteractiveOverLay)winformsMap1.InteractiveOverlays["PrintPreviewOverlay"];
MapPrinterLayer mapPrinterLayer = ((MapPrinterLayer)(printerOverlay.PrinterLayers["MapLayer"]));
if (sender == btnPanUp)
{ mapPrinterLayer.MapExtent = ExtentHelper.Pan(mapPrinterLayer.MapExtent, PanDirection.Up, 30); }
else if (sender == btnPanDown)
{ mapPrinterLayer.MapExtent = ExtentHelper.Pan(mapPrinterLayer.MapExtent, PanDirection.Down, 30); }
else if (sender == btnPanLeft)
{ mapPrinterLayer.MapExtent = ExtentHelper.Pan(mapPrinterLayer.MapExtent, PanDirection.Left, 30); }
else if (sender == btnPanRight)
{ mapPrinterLayer.MapExtent = ExtentHelper.Pan(mapPrinterLayer.MapExtent, PanDirection.Right, 30); }
winformsMap1.Refresh();
}
#endregion
#region Combo Boxes
private void SetupComboBoxes()
{
// Set the default combobox items
cboPageSize.SelectedIndex = 0;
cboOrientation.SelectedIndex = 0;
//Setup the zoom level combobox to relfect the zoom percentages
foreach (ZoomLevel level in winformsMap1.ZoomLevelSet.GetZoomLevels())
{
cboZoom.Items.Add(((PrinterZoomLevelSet)winformsMap1.ZoomLevelSet).GetZoomPercentage(level) + "%");
}
}
private void cboPageSize_SelectedIndexChanged(object sender, EventArgs e)
{
// When the page size combobox is changed then we update the PagePrinterLayer to reflect the changes
if (((ComboBox)sender).Focused)
{
PrinterInteractiveOverLay printerInteractiveOverLay = (PrinterInteractiveOverLay)winformsMap1.InteractiveOverlays["PrintPreviewOverlay"];
PagePrinterLayer pagePrinterLayer = (PagePrinterLayer)printerInteractiveOverLay.PrinterLayers["PageLayer"];
string selectText = cboPageSize.SelectedItem.ToString();
if (selectText.StartsWith("ANSI A"))
pagePrinterLayer.PageSize = PrinterPageSize.AnsiA;
else if (selectText.StartsWith("ANSI B"))
pagePrinterLayer.PageSize = PrinterPageSize.AnsiB;
else if (selectText.StartsWith("ANSI C"))
pagePrinterLayer.PageSize = PrinterPageSize.AnsiC;
else if (selectText.StartsWith("ANSI D"))
pagePrinterLayer.PageSize = PrinterPageSize.AnsiD;
else if (selectText.StartsWith("ANSI E"))
pagePrinterLayer.PageSize = PrinterPageSize.AnsiE;
winformsMap1.Refresh();
}
}
private void cboOrientation_SelectedIndexChanged(object sender, EventArgs e)
{
// When the orientation combobox is changed then we update the PagePrinterLayer to reflect the changes
if (((ComboBox)sender).Focused)
{
PrinterInteractiveOverLay printerInteractiveOverLay = (PrinterInteractiveOverLay)winformsMap1.InteractiveOverlays["PrintPreviewOverlay"];
PagePrinterLayer pagePrinterLayer = (PagePrinterLayer)printerInteractiveOverLay.PrinterLayers["PageLayer"];
string selectText = cboOrientation.SelectedItem.ToString();
if (selectText.ToUpper() == "LANDSCAPE")
{
pagePrinterLayer.Orientation = PrinterOrientation.Landscape;
}
else if (selectText.ToUpper() == "PORTRAIT")
{
pagePrinterLayer.Orientation = PrinterOrientation.Portrait;
}
winformsMap1.Refresh();
}
}
private void cboZoom_SelectionChangeCommitted(object sender, EventArgs e)
{
if (((ComboBox)sender).Focused)
{
String zoomString = (String)cboZoom.SelectedItem;
double currentZoom = Double.Parse(zoomString.Replace("%", ""));
winformsMap1.CurrentScale = PrinterHelper.GetPointsPerGeographyUnit(winformsMap1.MapUnit) / (currentZoom / 100);
winformsMap1.Refresh();
}
}
#endregion
#region Toolbox
private void toolStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
PrinterInteractiveOverLay printerInteractiveOverLay = (PrinterInteractiveOverLay)winformsMap1.InteractiveOverlays["PrintPreviewOverlay"];
PrinterLayer printerLayer = null;
string name = e.ClickedItem.Text.ToLower();
switch (name)
{
case "label":
printerLayer = new LabelPrinterLayer();
printerLayer.SetPosition(2, 1, 0, 0, PrintingUnit.Inch);
break;
case "image":
printerLayer = new ImagePrinterLayer();
break;
case "scale line":
MessageBox.Show("NotImplemented");
break;
case "scale bar":
MessageBox.Show("NotImplemented");
break;
case "data grid":
printerLayer = new DataGridPrinterLayer();
printerLayer.SetPosition(1, 1, 0, 0, PrintingUnit.Inch);
break;
default:
break;
}
if (printerLayer != null && ShowPrinterLayerProperties(printerLayer) == DialogResult.OK)
{
printerInteractiveOverLay.PrinterLayers.Add(printerLayer);
winformsMap1.Refresh();
}
}
#endregion
#region Right Click and Dialogs
private void cmRightClick_Click(object sender, EventArgs e)
{
PrinterInteractiveOverLay printerInteractiveOverLay = (PrinterInteractiveOverLay)winformsMap1.InteractiveOverlays["PrintPreviewOverlay"];
PrinterLayer printerLayer = (PrinterLayer)cmRightClick.Tag;
ToolStripItem selectedItem = cmRightClick.GetItemAt(((MouseEventArgs)e).X, ((MouseEventArgs)e).Y);
if (selectedItem.Name == "tsmRemove")
{
printerInteractiveOverLay.PrinterLayers.Remove(printerLayer);
}
else if (selectedItem.Name == "tsmProperty")
{
ShowPrinterLayerProperties(printerLayer);
}
winformsMap1.Refresh();
}
private DialogResult ShowPrinterLayerProperties(PrinterLayer printerLayer)
{
DialogResult dialogResult = DialogResult.Cancel;
if (printerLayer.GetType() == typeof(LabelPrinterLayer))
{
LabelPrinterLayerProperty dialog = new LabelPrinterLayerProperty((LabelPrinterLayer)printerLayer);
dialog.StartPosition = FormStartPosition.CenterParent;
dialogResult = dialog.ShowDialog();
}
else if (printerLayer.GetType() == typeof(ScaleBarPrinterLayer))
{
MessageBox.Show("Scalebar (Coming Soon)");
}
else if (printerLayer.GetType() == typeof(ScaleLinePrinterLayer))
{
MessageBox.Show("Scaleline (Coming Soon)");
}
else if (printerLayer.GetType() == typeof(ImagePrinterLayer))
{
ImagePrinterLayerProperty dialog = new ImagePrinterLayerProperty((ImagePrinterLayer)printerLayer);
dialog.StartPosition = FormStartPosition.CenterParent;
dialogResult = dialog.ShowDialog();
}
else if (printerLayer.GetType() == typeof(DataGridPrinterLayer))
{
DataGridPrinterLayerProperty dialog = new DataGridPrinterLayerProperty((DataGridPrinterLayer)printerLayer);
dialog.StartPosition = FormStartPosition.CenterParent;
dialogResult = dialog.ShowDialog();
}
return dialogResult;
}
#endregion
#region Helper Methods
private RectangleShape GetPageBoundingBox(PrintingUnit unit)
{
// This helper method gets the pages bounding box in the unit requested
PrinterInteractiveOverLay printerInteractiveOverLay = (PrinterInteractiveOverLay)winformsMap1.InteractiveOverlays["PrintPreviewOverlay"];
PagePrinterLayer pagePrinterLayer = (PagePrinterLayer)printerInteractiveOverLay.PrinterLayers["PageLayer"];
return pagePrinterLayer.GetPosition(unit); ;
}
private PageSize GetPdfPageSize(PrinterPageSize pageSize)
{
PageSize pdfPageSize = PageSize.Letter;
switch (pageSize)
{
case PrinterPageSize.AnsiA:
pdfPageSize = PageSize.Letter;
break;
case PrinterPageSize.AnsiB:
pdfPageSize = PageSize.Ledger;
break;
case PrinterPageSize.AnsiC:
pdfPageSize = PageSize.A2;
break;
case PrinterPageSize.AnsiD:
pdfPageSize = PageSize.A1;
break;
case PrinterPageSize.AnsiE:
pdfPageSize = PageSize.A0;
break;
case PrinterPageSize.Custom:
throw new NotSupportedException();
default:
throw new NotSupportedException();
}
return pdfPageSize;
}
private PaperSize GetPrintPreviewPaperSize(PagePrinterLayer pagePrinterLayer)
{
PaperSize printPreviewPaperSize = new PaperSize("AnsiA", 850, 1100);
switch (pagePrinterLayer.PageSize)
{
case PrinterPageSize.AnsiA:
printPreviewPaperSize = new PaperSize("AnsiA", 850, 1100);
break;
case PrinterPageSize.AnsiB:
printPreviewPaperSize = new PaperSize("AnsiB", 1100, 1700);
break;
case PrinterPageSize.AnsiC:
printPreviewPaperSize = new PaperSize("AnsiC", 1700, 2200);
break;
case PrinterPageSize.AnsiD:
printPreviewPaperSize = new PaperSize("AnsiD", 2200, 3400);
break;
case PrinterPageSize.AnsiE:
printPreviewPaperSize = new PaperSize("AnsiE", 3400, 4400);
break;
case PrinterPageSize.Custom:
printPreviewPaperSize = new PaperSize("Custom Size", (int)pagePrinterLayer.CustomWidth, (int)pagePrinterLayer.CustomHeight);
break;
default:
break;
}
return printPreviewPaperSize;
}
#endregion
}
}
====ScalePrinterLayerProperty.cs====
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ThinkGeo.MapSuite.Core;
using ThinkGeo.MapSuite.DesktopEdition;
using System.IO;
using System.Collections.ObjectModel;
namespace PrintPreview
{
public partial class ScalePrinterLayerProperty : Form
{
PrinterLayer layer = null;
PrinterInteractiveOverLay overlay = null;
GeoCollection mapLayers = new GeoCollection();
public ScalePrinterLayerProperty(PrinterLayer layer, PrinterInteractiveOverLay overlay)
{
InitializeComponent();
this.layer = layer;
this.overlay = overlay;
}
private void Window_Load(object sender, EventArgs e)
{
LoadLayerProperties();
LoadResize();
LoadDrag();
}
private void btnOK_Click(object sender, EventArgs e)
{
SetLayerProperties();
SetResize();
SetDrag();
Close();
DialogResult = DialogResult.OK;
}
private void LoadLayerProperties()
{
//foreach (PrinterLayer printerLayer in overlay .PrinterLayers)
//{
// if (printerLayer .GetType () == typeof (MapPrinterLayer))
// {
// string fileName = ((ShapeFileFeatureLayer)((MapPrinterLayer)printerLayer).Layers[0]).ShapePathFileName;
// fileName = Path.GetFileNameWithoutExtension(fileName);
// cbxMap.Items.Add(fileName);
// mapLayers.Add(((MapPrinterLayer)printerLayer ).GetHashCode (), (MapPrinterLayer)printerLayer);
// }
// }
}
private void SetLayerProperties()
{
//GeoImage image = new GeoImage(txtPath.Text);
//layer.NeedleImage = image;
//layer.Open();
//PointShape centerPoint = layer.GetPosition().GetCenterPoint();
//layer.SetPosition(image.GetWidth(), image.GetHeight(), centerPoint, PrintingUnit.Point);
}
private void LoadResize()
{
switch (layer.ResizeMode)
{
case PrinterResizeMode.Fixed:
rbtnResizeFixed.Checked = true;
break;
case PrinterResizeMode.MaintainAspectRatio:
rbtnResizeMaintainRaio.Checked = true;
break;
case PrinterResizeMode.Resizable:
rbtnResize.Checked = true;
break;
default:
break;
}
}
private void SetResize()
{
if (rbtnResize.Checked)
{
layer.ResizeMode = PrinterResizeMode.Resizable;
}
else if (rbtnResizeFixed.Checked)
{
layer.ResizeMode = PrinterResizeMode.Fixed;
}
else if (rbtnResizeMaintainRaio.Checked)
{
layer.ResizeMode = PrinterResizeMode.MaintainAspectRatio;
}
}
private void LoadDrag()
{
switch (layer.DragMode)
{
case PrinterDragMode.Fixed:
rbtnDragFixed.Checked = true;
break;
case PrinterDragMode.Dragable:
rbtnDraggable.Checked = true;
break;
default:
break;
}
}
private void SetDrag()
{
if (rbtnDragFixed.Checked)
{
layer.DragMode = PrinterDragMode.Fixed;
}
else if (rbtnDraggable.Checked)
{
layer.DragMode = PrinterDragMode.Dragable;
}
}
private void btnBrowse_Click(object sender, EventArgs e)
{
//OpenFileDialog ofd = new OpenFileDialog();
//ofd.Filter = "All files (*.*)|*.*";
//ofd.RestoreDirectory = true;
//if (ofd.ShowDialog() == DialogResult.OK)
//{
// txtPath.Text = ofd.FileName;
//}
}
}
}