/* * ============================================================================== * * Filename: OperateJob * Description: * * Version: 1.0 * Created: 2021/2/25 15:23:31 * * Author: liu.wenjie * * ============================================================================== */ using CommonMethods; using Logger; using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace ToolLib.VisionJob { public class OperateProject { private static OperateProject _instance; private static readonly object lockObject = new object(); private OperateProject() { } /// /// 操作者单例模式调用 /// public static OperateProject Instance { get { if (_instance == null) { lock (lockObject) { if (_instance == null) { _instance = new OperateProject(); } } } return _instance; } } public void CreateNewJob(string jobName = "newJob", bool newAddJob = true) { TabPage newTab = new TabPage(jobName); newTab.Controls.Add(new TreeView()); FormJobManage.Instance.tabJobUnion.TabPages.Add(newTab); if(newAddJob) { VisionJobParams.pVisionProject.Project.Add(jobName, new VisionJob(jobName)); } InitJob(VisionJobParams.pVisionProject.Project[jobName]); } public void SaveJob() { // Serialize.BinarySerialize($"{VisionJobParams.sSysConfigPath}Vision.prj" , VisionJobParams.myProject); //SaveFileDialog saveFileDialog = new SaveFileDialog(); //saveFileDialog.Title = "请指定项目保存路径"; //saveFileDialog.Filter = "项目文件|*.pjt"; //saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); //if (saveFileDialog.ShowDialog() == DialogResult.OK) //{ // try // { // Serialize.BinarySerialize(saveFileDialog.FileName, VisionJobParams.myProject); // LoggerClass.WriteLog("项目保存成功"); // } // catch (Exception ex) // { // LoggerClass.WriteLog("项目保存失败", ex); // } //} } public void InitJob(VisionJob myJob) { myJob.GetJobTree().Dock = DockStyle.Fill; myJob.GetJobTree().ImageList = FormToolBox.Instance.imageListTool; myJob.GetJobTree().Font = new Font("微软雅黑", 9, FontStyle.Bold); myJob.GetJobTree().Scrollable = true; myJob.GetJobTree().ItemHeight = 20; myJob.GetJobTree().ShowLines = false; myJob.GetJobTree().AllowDrop = true; //myTreeView.ImageList = Job.imageList; // 在窗体UI出现变化时,更新画线 myJob.GetJobTree().AfterSelect += myJob.tvw_job_AfterSelect; myJob.GetJobTree().ChangeUICues += myJob.MyJobTreeView_ChangeUICues; FormJobManage.Instance.SizeChanged += myJob.tbc_jobs_SelectedIndexChanged; //节点间拖拽 myJob.GetJobTree().ItemDrag += new ItemDragEventHandler(myJob.TvwJob_ItemDrag); myJob.GetJobTree().DragEnter += new DragEventHandler(myJob.TvwJob_DragEnter); myJob.GetJobTree().DragDrop += new DragEventHandler(myJob.TvwJob_DragDrop); //以下事件为画线事件 myJob.GetJobTree().MouseMove += myJob.DrawLineWithoutRefresh; myJob.GetJobTree().AfterExpand += myJob.Draw_Line; myJob.GetJobTree().AfterCollapse += myJob.Draw_Line; // 在流程节点上操作时 myJob.GetJobTree().MouseDoubleClick += TreeViewJob_DoubleClick; ; myJob.GetJobTree().MouseClick += myJob.tvw_job_MouseClick; Application.DoEvents(); if (myJob.GetJobTree().Nodes.Count > 0) { //默认选中第一个工具节点 myJob.GetJobTree().SelectedNode = myJob.GetJobTree().Nodes[0]; } //展开已默认添加的工具的输入输出项 myJob.GetJobTree().ExpandAll(); } public void InitJob(Dictionary myProject, string jobName) { myProject[jobName].GetJobTree().Dock = DockStyle.Fill; myProject[jobName].GetJobTree().ImageList = FormToolBox.Instance.imageListTool; myProject[jobName].GetJobTree().Font = new Font("微软雅黑", 9, FontStyle.Bold); myProject[jobName].GetJobTree().Scrollable = true; myProject[jobName].GetJobTree().ItemHeight = 20; myProject[jobName].GetJobTree().ShowLines = false; myProject[jobName].GetJobTree().AllowDrop = true; //myTreeView.ImageList = Job.imageList; // 在窗体UI出现变化时,更新画线 myProject[jobName].GetJobTree().AfterSelect += myProject[jobName].tvw_job_AfterSelect; myProject[jobName].GetJobTree().ChangeUICues += myProject[jobName].MyJobTreeView_ChangeUICues; FormJobManage.Instance.SizeChanged += myProject[jobName].tbc_jobs_SelectedIndexChanged; //节点间拖拽 myProject[jobName].GetJobTree().ItemDrag += new ItemDragEventHandler(myProject[jobName].TvwJob_ItemDrag); myProject[jobName].GetJobTree().DragEnter += new DragEventHandler(myProject[jobName].TvwJob_DragEnter); myProject[jobName].GetJobTree().DragDrop += new DragEventHandler(myProject[jobName].TvwJob_DragDrop); //以下事件为画线事件 myProject[jobName].GetJobTree().MouseMove += myProject[jobName].DrawLineWithoutRefresh; myProject[jobName].GetJobTree().AfterExpand += myProject[jobName].Draw_Line; myProject[jobName].GetJobTree().AfterCollapse += myProject[jobName].Draw_Line; // 在流程节点上操作时 myProject[jobName].GetJobTree().MouseDoubleClick += TreeViewJob_DoubleClick; ; myProject[jobName].GetJobTree().MouseClick += myProject[jobName].tvw_job_MouseClick; Application.DoEvents(); if(myProject[jobName].GetJobTree().Nodes.Count > 0) { //默认选中第一个工具节点 myProject[jobName].GetJobTree().SelectedNode = myProject[jobName].GetJobTree().Nodes[0]; } //展开已默认添加的工具的输入输出项 myProject[jobName].GetJobTree().ExpandAll(); } /// /// TreeView双击 /// /// /// public static void TreeViewJob_DoubleClick(object sender, MouseEventArgs e) { //判断是否在节点上双击 object toolClass = new object(); string jobName = FormJobManage.Instance.tabJobUnion.SelectedTab.Text; TreeViewHitTestInfo test = VisionJobParams.pVisionProject.Project[jobName].GetJobTree().HitTest(e.X, e.Y); TreeNode selectNode = test.Node.Level == 0 ? test.Node : test.Node.Parent; selectNode.ExpandAll(); for (int i = 0; i < VisionJobParams.pVisionProject.Project[jobName].L_toolList.Count; i++) { if (selectNode.Text == VisionJobParams.pVisionProject.Project[jobName].L_toolList[i].toolName) { string AssemblyName = VisionJobParams.pVisionProject.Project[jobName].L_toolList[i].FormToolName.Split('.')[0]; string className = VisionJobParams.pVisionProject.Project[jobName].L_toolList[i].FormToolName; toolClass = VisionJobParams.pVisionProject.Project[jobName].L_toolList[i]; IToolInfo.FormTool = (Form)Assembly.Load(AssemblyName).CreateInstance(className, false, BindingFlags.Default, null, new object[] { toolClass }, null, null); IToolInfo.FormTool.ShowDialog(); //VisionJobParams.myProject[jobName].L_toolList[i].SetFormTool(IToolInfo.FormTool); //VisionJobParams.myProject[jobName].L_toolList[i].GetFormTool().ShowDialog(); //VisionJobParams.myProject[jobName].L_toolList[i].FormTool = (Form)Assembly.Load(AssemblyName).CreateInstance(className, false, BindingFlags.Default, null, new object[] { toolClass }, null, null); //VisionJobParams.myProject[jobName].L_toolList[i].FormTool.ShowDialog(); } } } } }