using PaintDotNet.Annotation.Enum;
using PaintDotNet.Base;
using PaintDotNet.Data.Param;
using PaintDotNet.FieldView;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Globalization;
using System.Windows.Forms;
namespace PaintDotNet.Menus
{
///
/// 视场菜单
///
internal sealed class ViewSettingMenu : PdnMenuItem
{
private PdnMenuItem menuViewSelect;
private PdnMenuItem menuViewDeleteSelect;
private PdnMenuItem menuViewClearAll;
private ToolStripSeparator menuHelpSeparator1;
private PdnMenuItem menuOvalView;
private PdnMenuItem menuRoundView;
private PdnMenuItem menuRectangleView;
private PdnMenuItem menuRectangleExView;
private PdnMenuItem menuTriangleView;
private PdnMenuItem menuTriangleExView;
private PdnMenuItem menuSquareView;
private PdnMenuItem menuPolygonView;
private ToolStripSeparator menuHelpSeparator2;
private PdnMenuItem menuMergeFieldOfView;
private PdnMenuItem menuDeleteFieldOfView;
private ToolStripSeparator menuHelpSeparator3;
private PdnMenuItem menuShearFieldOfView;
private PdnMenuItem menuTransparentCut;
private ToolStripSeparator menuHelpSeparator4;
private PdnMenuItem menuOpenFieldOfView;
private PdnMenuItem menuModifyFieldOfView;
private PdnMenuItem menuSaveFieldOfView;
public ViewSettingMenu(int menuId)
{
InitializeComponent();
this.MenuId = menuId;
this.AutoNextScript = false;
this.AutomaticScript = false;
}
protected override void OnAppWorkspaceChanged()
{
base.OnAppWorkspaceChanged();
}
protected override void OnDropDownOpening(EventArgs e)
{
//this.RecursiveData(this.DropDownItems);
base.OnDropDownOpening(e);
}
private void InitializeComponent()
{
this.menuViewSelect = new PdnMenuItem(ActionType.ViewSelect);
this.menuViewDeleteSelect = new PdnMenuItem(ActionType.ViewDeleteSelect);
this.menuViewClearAll = new PdnMenuItem(ActionType.ViewClearAll);
this.menuHelpSeparator1 = new ToolStripSeparator();
this.menuOvalView = new PdnMenuItem(ActionType.OvalView);
this.menuRoundView = new PdnMenuItem(ActionType.RoundView);
this.menuRectangleView = new PdnMenuItem(ActionType.RectangleView);
this.menuRectangleExView = new PdnMenuItem(ActionType.RectangleExView);
this.menuTriangleView = new PdnMenuItem(ActionType.TriangleView);
this.menuTriangleExView = new PdnMenuItem(ActionType.TriangleExView);
this.menuSquareView = new PdnMenuItem(ActionType.SquareView);
this.menuPolygonView = new PdnMenuItem(ActionType.PolygonView);
this.menuHelpSeparator2 = new ToolStripSeparator();
this.menuMergeFieldOfView = new PdnMenuItem(ActionType.MergeFieldOfView);
this.menuDeleteFieldOfView = new PdnMenuItem(ActionType.DeleteFieldOfView);
this.menuHelpSeparator3 = new ToolStripSeparator();
this.menuShearFieldOfView = new PdnMenuItem(ActionType.ShearFieldOfView);
this.menuTransparentCut = new PdnMenuItem(ActionType.TransparentCut);
this.menuHelpSeparator4 = new ToolStripSeparator();
this.menuOpenFieldOfView = new PdnMenuItem(ActionType.OpenFieldOfView);
this.menuModifyFieldOfView = new PdnMenuItem(ActionType.ModifyFieldOfView);
this.menuSaveFieldOfView = new PdnMenuItem(ActionType.SaveFieldOfView);
//
// 主菜单
//
this.DropDownItems.AddRange(new ToolStripItem[] {
this.menuViewSelect,
this.menuViewDeleteSelect,
this.menuViewClearAll,
this.menuHelpSeparator1,
this.menuOvalView,
this.menuRoundView,
this.menuRectangleView,
this.menuRectangleExView,
this.menuTriangleView,
this.menuTriangleExView,
this.menuSquareView,
this.menuPolygonView,
this.menuHelpSeparator2,
this.menuMergeFieldOfView,
this.menuDeleteFieldOfView,
this.menuHelpSeparator3,
this.menuShearFieldOfView,
this.menuTransparentCut,
this.menuHelpSeparator4,
this.menuOpenFieldOfView,
this.menuModifyFieldOfView,
this.menuSaveFieldOfView
});
this.Name = "Menu.ViewSetting";
this.Text = PdnResources.GetString("Menu.ViewSetting.Text");
//
// 选择视场
//
this.menuViewSelect.Click += new EventHandler(MenuViewSelect_Click);
this.menuViewSelect.NeedWaitKey = true;
//
// 删除选择
//
this.menuViewDeleteSelect.Click += new System.EventHandler(MenuViewDeleteSelect_Click);
this.menuViewDeleteSelect.NeedWaitKey = true;
//
// 清空全部
//
this.menuViewClearAll.Click += new System.EventHandler(MenuViewClearAll_Click);
this.menuViewClearAll.NeedWaitKey = true;
//
// 椭圆视场
//
this.menuOvalView.Click += new System.EventHandler(MenuOvalView_Click);
this.menuOvalView.NeedWaitKey = true;
//
// 圆形视场
//
this.menuRoundView.Click += new System.EventHandler(MenuRoundView_Click);
this.menuRoundView.NeedWaitKey = true;
//
// 矩形视场
//
this.menuRectangleView.Click += new System.EventHandler(MenuRectangleView_Click);
this.menuRectangleView.NeedWaitKey = true;
//
// 矩形视场
//
this.menuRectangleExView.Click += new System.EventHandler(MenuRectangleExView_Click);
this.menuRectangleExView.NeedWaitKey = true;
//
// 直角三角形视场
//
this.menuTriangleView.Click += new System.EventHandler(MenuTriangleView_Click);
this.menuTriangleView.NeedWaitKey = true;
//
// 任意三角形视场
//
this.menuTriangleExView.Click += new System.EventHandler(MenuTriangleExView_Click);
this.menuTriangleExView.NeedWaitKey = true;
//
// 正方形视场
//
this.menuSquareView.Click += new System.EventHandler(MenuSquareView_Click);
this.menuSquareView.NeedWaitKey = true;
//
// 多边形视场
//
this.menuPolygonView.Click += new System.EventHandler(MenuPolygonView_Click);
this.menuPolygonView.NeedWaitKey = true;
//
// 合并视场
//
this.menuMergeFieldOfView.Click += new System.EventHandler(MenuMergeFieldOfView_Click);
this.menuMergeFieldOfView.NeedWaitKey = true;
this.menuMergeFieldOfView.Checked = true;
//
// 删除视场
//
this.menuDeleteFieldOfView.Click += new System.EventHandler(MenuDeleteFieldOfView_Click);
this.menuDeleteFieldOfView.NeedWaitKey = true;
this.menuDeleteFieldOfView.Checked = false;
//
// 剪切视场
//
this.menuShearFieldOfView.Click += new System.EventHandler(MenuShearFieldOfView_Click);
this.menuShearFieldOfView.NeedWaitKey = true;
//
// 透明剪切
//
this.menuTransparentCut.Click += new System.EventHandler(MenuTransparentCut_Click);
this.menuTransparentCut.NeedWaitKey = true;
//
// 打开视场
//
this.menuOpenFieldOfView.Click += new System.EventHandler(MenuOpenFieldOfView_Click);
this.menuOpenFieldOfView.NeedWaitKey = true;
//
// 修改视场
//
this.menuModifyFieldOfView.Click += new System.EventHandler(MenuModifyFieldOfView_Click);
this.menuModifyFieldOfView.NeedWaitKey = true;
//
// 保存视场
//
this.menuSaveFieldOfView.Click += new System.EventHandler(MenuSaveFieldOfView_Click);
this.menuSaveFieldOfView.NeedWaitKey = true;
//
// 加载菜单的文字和icon
//
this.LoadNames(this.Name);
this.LoadIcons();
}
///
/// 选择视场
///
///
///
private void MenuViewSelect_Click(object sender, EventArgs e)
{
if (AppWorkspace.ActiveDocumentWorkspace != null)
{
if (AppWorkspace.startScriptRecording)
{
AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List());
}
AppWorkspace.ActiveDocumentWorkspace.ActiveTool = DrawToolType.Pointer;
}
}
///
/// 删除选择的视场
///
///
///
private void MenuViewDeleteSelect_Click(object sender, EventArgs e)
{
if (AppWorkspace.ActiveDocumentWorkspace != null)
{
if (AppWorkspace.startScriptRecording)
{
AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List());
}
AppWorkspace.ActiveDocumentWorkspace.ActiveTool = DrawToolType.Pointer;
AppWorkspace.ActiveDocumentWorkspace.GraphicsList.DeleteSelection(DrawClass.View);
AppWorkspace.ActiveDocumentWorkspace.Refresh();
}
}
///
/// 清空全部
///
///
///
private void MenuViewClearAll_Click(object sender, EventArgs e)
{
if (AppWorkspace.ActiveDocumentWorkspace != null)
{
if (AppWorkspace.startScriptRecording)
{
AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List());
}
AppWorkspace.ActiveDocumentWorkspace.GraphicsList.DeleteAllView();
AppWorkspace.ActiveDocumentWorkspace.Refresh();
}
}
///
/// 椭圆视场
///
///
///
private void MenuOvalView_Click(object sender, EventArgs e)
{
if (AppWorkspace.ActiveDocumentWorkspace != null)
{
if (AppWorkspace.startScriptRecording)
{
AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List());
}
AppWorkspace.ActiveDocumentWorkspace.ActiveTool = DrawToolType.ViewOval;
}
}
///
/// 圆形视场
///
///
///
private void MenuRoundView_Click(object sender, EventArgs e)
{
if (AppWorkspace.ActiveDocumentWorkspace != null)
{
if (AppWorkspace.startScriptRecording)
{
AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List());
}
AppWorkspace.ActiveDocumentWorkspace.ActiveTool = DrawToolType.ViewCircle;
}
}
///
/// 矩形视场
///
///
///
private void MenuRectangleView_Click(object sender, EventArgs e)
{
if (AppWorkspace.ActiveDocumentWorkspace != null)
{
if (AppWorkspace.startScriptRecording)
{
AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List());
}
AppWorkspace.ActiveDocumentWorkspace.ActiveTool = DrawToolType.ViewRectangle;
}
}
///
/// 矩形视场
///
///
///
private void MenuRectangleExView_Click(object sender, EventArgs e)
{
if (AppWorkspace.ActiveDocumentWorkspace != null)
{
if (AppWorkspace.startScriptRecording)
{
AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List());
}
AppWorkspace.ActiveDocumentWorkspace.ActiveTool = DrawToolType.ViewRectangleEx;
}
}
///
/// 三角形视场
///
///
///
private void MenuTriangleView_Click(object sender, EventArgs e)
{
if (AppWorkspace.ActiveDocumentWorkspace != null)
{
if (AppWorkspace.startScriptRecording)
{
AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List());
}
AppWorkspace.ActiveDocumentWorkspace.ActiveTool = DrawToolType.ViewTriangle;
}
}
///
/// 任意三角形视场
///
///
///
private void MenuTriangleExView_Click(object sender, EventArgs e)
{
if (AppWorkspace.ActiveDocumentWorkspace != null)
{
if (AppWorkspace.startScriptRecording)
{
AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List());
}
AppWorkspace.ActiveDocumentWorkspace.ActiveTool = DrawToolType.ViewTriangleEx;
}
}
///
/// 正方形视场
///
///
///
private void MenuSquareView_Click(object sender, EventArgs e)
{
if (AppWorkspace.ActiveDocumentWorkspace != null)
{
if (AppWorkspace.startScriptRecording)
{
AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List());
}
AppWorkspace.ActiveDocumentWorkspace.ActiveTool = DrawToolType.ViewSquare;
}
}
///
/// 多边形视场
///
///
///
private void MenuPolygonView_Click(object sender, EventArgs e)
{
if (AppWorkspace.ActiveDocumentWorkspace != null)
{
if (AppWorkspace.startScriptRecording)
{
AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List());
}
AppWorkspace.ActiveDocumentWorkspace.ActiveTool = DrawToolType.ViewPolygon;
}
}
///
/// 合并视场
///
///
///
private void MenuMergeFieldOfView_Click(object sender, EventArgs e)
{
if (AppWorkspace.ActiveDocumentWorkspace != null)
{
AppWorkspace.ActiveDocumentWorkspace.CombineMode = CombineMode.Union;
if (!AppWorkspace.ActiveDocumentWorkspace.MergeFieldOfView)
{
if (AppWorkspace.startScriptRecording)
{
AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List());
}
AppWorkspace.ActiveDocumentWorkspace.DeleteFieldOfView = AppWorkspace.ActiveDocumentWorkspace.MergeFieldOfView;
AppWorkspace.ActiveDocumentWorkspace.MergeFieldOfView = !AppWorkspace.ActiveDocumentWorkspace.MergeFieldOfView;
this.menuMergeFieldOfView.Checked = AppWorkspace.ActiveDocumentWorkspace.MergeFieldOfView;
this.menuDeleteFieldOfView.Checked = AppWorkspace.ActiveDocumentWorkspace.DeleteFieldOfView;
this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.DeleteFieldOfView, "DeleteFieldOfView");
this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.DeleteFieldOfView, "DeleteFieldOfView");
this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.MergeFieldOfView, "MergeFieldOfView");
this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.MergeFieldOfView, "MergeFieldOfView");
}
}
}
///
/// 删除视场
///
///
///
private void MenuDeleteFieldOfView_Click(object sender, EventArgs e)
{
if (AppWorkspace.ActiveDocumentWorkspace != null)
{
AppWorkspace.ActiveDocumentWorkspace.CombineMode = CombineMode.Complement;
if(!AppWorkspace.ActiveDocumentWorkspace.DeleteFieldOfView)
{
if (AppWorkspace.startScriptRecording)
{
AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List());
}
AppWorkspace.ActiveDocumentWorkspace.MergeFieldOfView = AppWorkspace.ActiveDocumentWorkspace.DeleteFieldOfView;
AppWorkspace.ActiveDocumentWorkspace.DeleteFieldOfView = !AppWorkspace.ActiveDocumentWorkspace.DeleteFieldOfView;
this.menuMergeFieldOfView.Checked = AppWorkspace.ActiveDocumentWorkspace.MergeFieldOfView;
this.menuDeleteFieldOfView.Checked = AppWorkspace.ActiveDocumentWorkspace.DeleteFieldOfView;
this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.MergeFieldOfView, "MergeFieldOfView");
this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.MergeFieldOfView, "MergeFieldOfView");
this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.DeleteFieldOfView, "DeleteFieldOfView");
this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.DeleteFieldOfView, "DeleteFieldOfView");
}
}
}
///
/// 剪切视场
///
///
///
private void MenuShearFieldOfView_Click(object sender, EventArgs e)
{
if (this.AppWorkspace!=null && this.AppWorkspace.ActiveDocumentWorkspace!=null)
{
Bitmap bitmap = this.AppWorkspace.ActiveDocumentWorkspace.GetCutSizeWithColorWhiteOrTransparent(false);
if(bitmap!=null)
{
if (AppWorkspace.startScriptRecording)
{
AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List());
}
DocumentWorkspace dw = AppWorkspace.AddNewDocumentWorkspace();
Document document = Document.FromImageMat(Camera.Tools.ToMat(bitmap));
dw.Document = document;
dw.xmlSaveModel = this.AppWorkspace.ActiveDocumentWorkspace.xmlSaveModel;
dw.rules = this.AppWorkspace.ActiveDocumentWorkspace.rules;
dw.fileText = PdnResources.GetString("Menu.ViewSetting.ShearFieldOfView.Text") + "-" + Startup.instance.step_length;
AppWorkspace.ActiveDocumentWorkspace = dw;
Startup.instance.step_length += 1;
}
}
}
///
/// 透明剪切
///
///
///
private void MenuTransparentCut_Click(object sender, EventArgs e)
{
if (this.AppWorkspace != null && this.AppWorkspace.ActiveDocumentWorkspace != null)
{
Bitmap bitmap = this.AppWorkspace.ActiveDocumentWorkspace.GetCutSizeWithColorWhiteOrTransparent(true);
if (bitmap != null)
{
if (AppWorkspace.startScriptRecording)
{
AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List());
}
DocumentWorkspace dw = AppWorkspace.AddNewDocumentWorkspace();
Document document = Document.FromImageMat(Camera.Tools.ToMat(bitmap));
dw.Document = document;
dw.xmlSaveModel = this.AppWorkspace.ActiveDocumentWorkspace.xmlSaveModel;
dw.rules = this.AppWorkspace.ActiveDocumentWorkspace.rules;
dw.fileText = PdnResources.GetString("Menu.ViewSetting.TransparentCut.Text") + "-" + Startup.instance.step_length;
AppWorkspace.ActiveDocumentWorkspace = dw;
Startup.instance.step_length += 1;
}
}
}
///
/// 打开视场
///
///
///
private void MenuOpenFieldOfView_Click(object sender, EventArgs e)
{
using (OpenViewDialog dialog = new OpenViewDialog(AppWorkspace))
{
if (AppWorkspace.startScriptRecording)
{
AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List());
}
dialog.StartPosition = FormStartPosition.CenterScreen;
dialog.ShowDialog();
}
}
///
/// 修改视场
///
///
///
private void MenuModifyFieldOfView_Click(object sender, EventArgs e)
{
//如果当前界面有视场、并且选中的是视场
if (AppWorkspace.ActiveDocumentWorkspace!=null
&& AppWorkspace.ActiveDocumentWorkspace.GraphicsList!=null
&& AppWorkspace.ActiveDocumentWorkspace.GraphicsList.Count>0
&& AppWorkspace.ActiveDocumentWorkspace.GraphicsList.SelectionCount==1)
{
if (AppWorkspace.startScriptRecording)
{
AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List());
}
var changeViewDialog = (ChangeViewDialog)Application.OpenForms["ChangeViewDialog"];//尝试获取已经弹出的窗口对象
FloatingFormMethod.ShowFloatForm(changeViewDialog, changeViewDialog == null ? new ChangeViewDialog(AppWorkspace)/*没有弹出的窗口对象则创建*/ : null, AppWorkspace);
}
else
{
MessageBox.Show(PdnResources.GetString("Menu.leaseonlyonefieldofviewtomodify.Text"));
}
}
///
/// 保存视场
///
///
///
private void MenuSaveFieldOfView_Click(object sender, EventArgs e)
{
if(AppWorkspace.ActiveDocumentWorkspace!=null)
{
Region region = AppWorkspace.ActiveDocumentWorkspace.GetRegion();
Bitmap bitmap = AppWorkspace.ActiveDocumentWorkspace.CompositionSurface.CreateAliasedBitmap();
//判断当前surfacebox内是否有视场
if (region != null)
{
using (SaveViewDialog dialog = new SaveViewDialog(AppWorkspace, region, bitmap))
{
if (AppWorkspace.startScriptRecording)
{
AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List());
}
dialog.StartPosition = FormStartPosition.CenterScreen;
dialog.ShowDialog();
}
}
else
{
MessageBox.Show(PdnResources.GetString("Menu.Drawthefieldofviewfirst.Text"));
}
}
}
private string GetCultureInfoName(CultureInfo ci)
{
CultureInfo en_US = new CultureInfo("en-US");
if (ci.Equals(en_US))
{
return GetCultureInfoName(ci.Parent);
}
else
{
return ci.NativeName;
}
}
}
}