/// <summary> /// 创建代码块事件 /// </summary> /// <param name="data"></param> public override void DataTree_CreateCallback(IItemBox data) { ItemBox box = new ItemBox(); box.Copy(data); this.Add(box); HiddenTree(); }
/// <summary> /// 创建代码事件 /// </summary> /// <param name="data"></param> private void TreeView_CreateCallback(IItemBox data) { if (mainContent.GetActiveDocument() != null) { StackingMainLayout script = mainContent.GetActiveDocument() as StackingMainLayout; script.DataTree_CreateCallback(data); } }
/// <summary> /// 脚本检测是否断点 /// </summary> /// <param name="item"></param> /// <param name="si"></param> /// <param name="so"></param> protected void checkScriptRunForStopPoint(IItemBox item, ScriptInput si, ScriptOutput so) { if (item.IsHasBreakPoint || isDebugMode) { ScriptBreakPoint?.Invoke(item, si, null); runStop(); } }
/// <summary> /// 代码块被选中 /// </summary> /// <param name="scriptLayout"></param> /// <param name="itembox"></param> public void IItemBoxSelected(IScriptLayout scriptLayout, IItemBox itembox) { ItemboxParamterCom itemboxParamterCom = new ItemboxParamterCom() { ScriptLayout = scriptLayout, ItemBox = itembox }; FunctionParaItemList.DataContext = itemboxParamterCom; //FunctionParaItemList.DataContext = itembox; }
/// <summary> /// 脚本赋值 /// </summary> /// <param name="load"></param> /// <param name="lib"></param> private void ScriptContent_HalfCloneBack(IItemBox load, IItemBox lib) { ItemBox opbox = load as ItemBox; ItemBox libbox = lib as ItemBox; if (opbox != null && libbox != null) { //opbox.CloneScriptFunction(libbox); } }
/// <summary> /// 运行带url的函数 /// </summary> /// <param name="itemBox"></param> /// <param name="scriptInput"></param> /// <returns></returns> private ScriptOutput RunScript(IItemBox itemBox, ScriptInput scriptInput) { ScriptRequest?.Invoke(scriptInput, itemBox.Name); string json = ScriptClient.PostStringAsync(itemBox.ScriptUrl, (JObject)JsonConvert.DeserializeObject(JsonConvert.SerializeObject(scriptInput))); ScriptOutput scriptOutput = JsonConvert.DeserializeObject <ScriptOutput>(json); ScriptReponse?.Invoke(scriptOutput, itemBox.Name); if (scriptOutput != null && scriptOutput.IsExecption) { throw new Exception("服务器给出停止信号!"); } return(scriptOutput); }
/// <summary> /// 添加一个函数框 /// </summary> /// <param name="itbox"></param> public override void Add(IItemBox item) { LineItemBox itbox = item as LineItemBox; FunctionBox fb = new FunctionBox(); itbox.ContentX = currentPosition.X; itbox.ContentY = currentPosition.Y; fb.UIMain = contentsCanvas; fb.DataContext = itbox; itbox.Thickness = 6; Itemboxs.Add(itbox); fb.InitFunction(); Add(fb); }
/// <summary> /// 删除一个 /// </summary> /// <param name="fb"></param> public void Del(FunctionBox fb) { if (iFunctionBoxs.Contains(fb)) { iFunctionBoxs.Remove(fb); } if (contentsCanvas.Children.Contains(fb)) { contentsCanvas.Children.Remove(fb); } fb.MouseEnter -= Fb_MouseEnter; fb.MouseLeave -= Fb_MouseLeave; foreach (var item in fb.Inputs) { List <BezierLine> bzs = new List <BezierLine>((item as MLParatItemLayout).LinksBezierLine); if (bzs.Count != 0) { foreach (var bz in bzs) { Del(bz); } } bzs.Clear(); bzs = null; } foreach (var item in fb.Outputs) { List <BezierLine> bzs = new List <BezierLine>((item as MLParatItemLayout).LinksBezierLine); if (bzs.Count != 0) { foreach (var bz in bzs) { Del(bz); } } bzs.Clear(); bzs = null; } IItemBox ibox = fb.Ibox; if (ibox != null) { this.Itemboxs.Remove(ibox); } fb.DataContext = null; fb = null; }
/// <summary> /// 添加一个函数框 /// </summary> /// <param name="itbox"></param> public void Add(IItemBox item, bool isaddposition) { LineItemBox itbox = item as LineItemBox; FunctionBox fb = new FunctionBox(); if (isaddposition == true) { itbox.ContentX = currentPosition.X; itbox.ContentY = currentPosition.Y; } fb.UIMain = contentsCanvas; fb.DataContext = itbox; itbox.Thickness = 6; Itemboxs.Add(itbox); fb.InitFunction(); Add(fb); }
/// <summary> /// 获取iitembox /// </summary> /// <typeparam name="IBox"></typeparam> /// <typeparam name="IParat"></typeparam> /// <param name="tdfather"></param> /// <param name="attribute"></param> /// <returns></returns> public static IItemBox GetIItemboxByScriptMeth <IBox, IParat>(TreeData tdfather, ScriptMethAttribute attribute) { IBox box = (IBox)Activator.CreateInstance(typeof(IBox)); IItemBox opitem = box as IItemBox; if (attribute != null) { opitem.Name = attribute.Name; opitem.ScriptUrl = attribute.Url; opitem.BoxType = attribute.ItemBoxEnum; opitem.TipText = attribute.Describe; if (attribute.InputData.Count > 0) { foreach (var item in attribute.InputData) { IParat ipa = (IParat)Activator.CreateInstance(typeof(IParat)); IParatItem op = ipa as IParatItem; //ParatItem op = new ParatItem(item.Name, LogLib.TClassOption.GetEnumTypeByString<ParaItemEnum>(item.Type), item.EnumDatas) op.Name = item.Name; op.PIEnum = LogLib.TClassOption.GetEnumTypeByString <ParaItemEnum>(item.Type); op.EnumDatas = item.EnumDatas; op.Value = item.DefultValue; opitem.AddInput(op); op.TipText = item.TipText; } } if (attribute.OutputData.Count > 0) { foreach (var item in attribute.OutputData) { IParat ipa = (IParat)Activator.CreateInstance(typeof(IParat)); IParatItem op = ipa as IParatItem; op.Name = item.Name; op.PIEnum = LogLib.TClassOption.GetEnumTypeByString <ParaItemEnum>(item.Type); op.EnumDatas = item.EnumDatas; op.Value = item.DefultValue; opitem.AddOutput(op); op.TipText = item.TipText; } } tdfather.Children.Add(new TreeData(opitem)); } return(opitem); }
/// <summary> /// 选中执行的函数 /// </summary> /// <param name="box"></param> /// <param name="wrs"></param> /// <param name="ml"></param> protected void RunningFunction(IItemBox box, WriteStreamCallBack wrs, IScriptLayout ml) { foreach (var currentbox in (box as ItemBox).Children) { ml.SetFunctionBoxRun(currentbox); if (currentbox.BoxType == ItemBoxEnum.FUNCTION) { Dofunction(currentbox, wrs, ml); } else if (currentbox.BoxType == ItemBoxEnum.IF) { DoIfFunction(currentbox, wrs, ml); } else if (currentbox.BoxType == ItemBoxEnum.WHILE) { DoWhileFunction(currentbox, wrs, ml); } ml.SetFunctionBoxStop(currentbox); } }
/// <summary> /// 从box中复制信息 /// </summary> /// <param name="box"></param> /// <returns></returns> public virtual void Copy(IItemBox box) { //this.Id = box.Id; this.name = box.Name; this.tipText = box.TipText; this.BoxType = box.BoxType; this.InputDatas.Clear(); this.ScriptUrl = box.ScriptUrl; this.OutDatas.Clear(); ObservableCollection <IParatItem> paratItems = box.GetInputParatItems(); foreach (var item in paratItems) { this.AddInput(item.Clone()); } paratItems.Clear(); paratItems = box.GetOutputParatItems(); foreach (var item in paratItems) { this.AddOutput(item.Clone()); } paratItems.Clear(); }
/// <summary> /// 运行脚本 /// </summary> /// <param name="ml"></param> public static void RunScript(MainLayout ml, WriteStreamCallBack wrs, IList <IPropertyIt> propertys, WriteStreamCallBack runover = null) { ScriptObjectManager sm = new ScriptObjectManager(); if (propertys.Count > 0) { foreach (var item in propertys) { ScriptOutput so = new ScriptOutput(); so.SetValue(item.Name, item.Value); sm.SetValue(item.Id, so); } } try { IItemBox currentib = (ml.MainIb as LineItemBox).Next(0); IItemBox next = null; while (currentib != null) { ml.SetFunctionBoxRun(System.Windows.Media.Colors.Red, currentib); next = DoFunction(currentib as ItemBox, sm, wrs); ml.SetFunctionBoxStop(System.Windows.Media.Colors.White, currentib); currentib = next; } } catch (Exception ex) { wrs?.Invoke("脚本运行失败"); Log.Write(new LogMessage("脚本运行失败", ex)); } finally { sm.Dispose(); sm = null; runover?.Invoke("程序运行结束"); } }
/// <summary> /// 设置代码块在停止 /// </summary> /// <param name="itemBox"></param> public void SetFunctionBoxStop(IItemBox itemBox) { itemBox.IsRunning = false; }
/// <summary> /// 脚本断点回调函数 /// </summary> /// <param name="item"></param> /// <param name="si"></param> /// <param name="so"></param> private void ScriptBreakPoint(IItemBox item, ScriptInput si, ScriptOutput so) { ScriptDebugWindow.UpdateWatchObjectSource(si, "ScriptInput"); }
/// <summary> /// 设置代码块在运行 /// </summary> /// <param name="itemBox"></param> public void SetFunctionBoxRun(IItemBox itemBox) { itemBox.IsRunning = true; }
/// <summary> /// 构造函数 /// </summary> /// <param name="box"></param> public TreeData(IItemBox box) { this.Name = box.Name; this.data = box; this.TipText = box.TipText; }
/// <summary> /// 在tdfather子内容中添加一个对象的方法作为itembox /// </summary> /// <param name="tdfather"></param> /// <param name="obj"></param> /// <param name="medthname"></param> public static IItemBox AddMeodthToItemBox <IBox, IParat>(TreeData tdfather, ScriptFunction sf) { string medthname = sf.GetMethodInfo().Name; IBox box = (IBox)Activator.CreateInstance(typeof(IBox)); IItemBox opitem = box as IItemBox; if (opitem == null) { throw new Exception("IBox, 不是一个有效的实现于IItemBox的类"); } opitem.BoxType = ItemBoxEnum.FUNCTION; MethodInfo minfo = sf.GetMethodInfo(); if (minfo != null) { ScriptMethAttribute attribute = minfo.GetCustomAttribute(typeof(ScriptMethAttribute), false) as ScriptMethAttribute; if (attribute != null) { if (attribute.Name != "") { opitem.Name = attribute.Name; } else { opitem.Name = medthname; } opitem.BoxType = attribute.ItemBoxEnum; opitem.TipText = attribute.Describe; if (attribute.InputData.Count > 0) { foreach (var item in attribute.InputData) { IParat ipa = (IParat)Activator.CreateInstance(typeof(IParat)); IParatItem op = ipa as IParatItem; //ParatItem op = new ParatItem(item.Name, LogLib.TClassOption.GetEnumTypeByString<ParaItemEnum>(item.Type), item.EnumDatas) op.Name = item.Name; op.PIEnum = LogLib.TClassOption.GetEnumTypeByString <ParaItemEnum>(item.Type); op.EnumDatas = item.EnumDatas; op.Value = item.DefultValue; opitem.AddInput(op); op.TipText = item.TipText; } } if (attribute.OutputData.Count > 0) { foreach (var item in attribute.OutputData) { IParat ipa = (IParat)Activator.CreateInstance(typeof(IParat)); IParatItem op = ipa as IParatItem; op.Name = item.Name; op.PIEnum = LogLib.TClassOption.GetEnumTypeByString <ParaItemEnum>(item.Type); op.EnumDatas = item.EnumDatas; op.Value = item.DefultValue; opitem.AddOutput(op); op.TipText = item.TipText; } } tdfather.Children.Add(new TreeData(opitem)); } } //opitem = null; return(opitem); }
/// <summary> /// 删除一个代码块 /// </summary> /// <param name="box"></param> public virtual void Del(IItemBox box) { }