/// <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);
     }
 }
예제 #12
0
        /// <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("程序运行结束");
            }
        }
예제 #14
0
 /// <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");
 }
예제 #16
0
 /// <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);
        }
예제 #19
0
 /// <summary>
 /// 删除一个代码块
 /// </summary>
 /// <param name="box"></param>
 public virtual void Del(IItemBox box)
 {
 }