/// <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="script"></param>
 public void DelScript(StackingMainLayout script)
 {
     if (Scripts.Contains(script) == true)
     {
         Scripts.Remove(script);
         ItemRemoveEvent?.Invoke(script);
     }
 }
 /// <summary>
 /// 添加一个脚本
 /// </summary>
 /// <param name="script"></param>
 public void AddScript(StackingMainLayout script)
 {
     if (Scripts.Contains(script) == false)
     {
         Scripts.Add(script);
         ItemAddEvent?.Invoke(script);
     }
 }
 /// <summary>
 /// 加载事件
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void ScriptItem_Loaded(object sender, RoutedEventArgs e)
 {
     script = this.DataContext as StackingMainLayout;
     if (script != null)
     {
         script.PropertyChanged += Script_PropertyChanged;
     }
 }
        /// <summary>
        /// 键盘按下
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void UserControl_KeyDown(object sender, KeyEventArgs e)
        {
            StackingMainLayout script = mainContent.GetActiveDocument() as StackingMainLayout;

            if (script != null)
            {
                script.IScriptLayout_KeyDown(script, e);
            }
        }
        /// <summary>
        /// 添加一个脚本
        /// </summary>
        /// <param name="script"></param>
        public StackingMainLayout AddScript()
        {
            IScriptLayout script = new IScriptLayout();

            script.ScriptName = GetScriptName();
            StackingMainLayout stackingMainLayout = StackingMainLayout.InstanceStackingMainLayout(script);

            Scripts.Add(stackingMainLayout);

            ItemAddEvent?.Invoke(stackingMainLayout);
            return(stackingMainLayout);
        }
        /// <summary>
        /// 脚本删除事件
        /// </summary>
        /// <param name="selectedItem"></param>
        private void ScriptControl_ItemRemoveEvent(object selectedItem)
        {
            StackingMainLayout script = selectedItem as StackingMainLayout;

            script.IItemBoxSelected -= IItemBoxSelected;
            script.ScriptLayout.ComipleMessageCall -= LogBox.WritLog;
            mainContent.DelUserExtendByKey(script.Id);
            script.ScriptLayout.ScriptBreakPoint -= ScriptBreakPoint;

            script.ScriptLayout.IScriptInterpreter.ScriptRequest -= ScriptRequest;
            script.ScriptLayout.IScriptInterpreter.ScriptReponse -= ScriptReponse;
        }
        /// <summary>
        /// 脚本双击事件
        /// </summary>
        /// <param name="selectedItem"></param>
        private void ScriptControl_ItemMouseDoubleClickEvent(object selectedItem)
        {
            StackingMainLayout script = selectedItem as StackingMainLayout;

            if (mainContent.GetUserExtendByKey(script.Id) != null)
            {
                mainContent.ShowPane(script.Id);
            }
            else
            {
                mainContent.AddUserControl(script.Id, script, Layout.Content, script.ScriptName);
            }
            PropertyItControl.SetIScriptLayout(script);
            mainContent.SetActiveDocument(script.Id);
        }
        /// <summary>
        /// 脚本添加事件
        /// </summary>
        /// <param name="selectedItem"></param>
        private void ScriptControl_ItemAddEvent(object selectedItem)
        {
            StackingMainLayout script = selectedItem as StackingMainLayout;

            if (script.IItemBoxSelected == null)
            {
                script.IItemBoxSelected += IItemBoxSelected;
            }
            if (script.ScriptLayout.ComipleMessageCall == null)
            {
                script.ScriptLayout.ComipleMessageCall = LogBox.WritLog;
            }
            script.ScriptLayout.ScriptBreakPoint += ScriptBreakPoint;
            script.ScriptLayout.IScriptInterpreter.ScriptRequest += ScriptRequest;
            script.ScriptLayout.IScriptInterpreter.ScriptReponse += ScriptReponse;
        }
        /// <summary>
        /// 加载脚本
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Load_Click(object sender, RoutedEventArgs e)
        {
            System.Windows.Forms.OpenFileDialog openFileDialog = new System.Windows.Forms.OpenFileDialog();
            openFileDialog.Filter = "脚本项目文件 (*.sProject)|*.sProject";
            if (openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                ScriptConfig = JsonConvert.DeserializeObject <ScriptConfig>(openFileDialog.FileName.GetStringFromFile());

                string path = System.IO.Path.GetDirectoryName(openFileDialog.FileName);
                foreach (var item in ScriptConfig.ScriptFiles)
                {
                    IScriptLayout scriptLayout = new IScriptLayout();
                    scriptLayout.LoadFromJson(System.IO.Path.Combine(path, item + ".script"));
                    scriptContent.ScriptControl.AddScript(StackingMainLayout.InstanceStackingMainLayout(scriptLayout));
                }
            }
        }
        /// <summary>
        /// 删除所有脚本
        /// </summary>
        public void RemoveAll()
        {
            if (Scripts.Count == 0)
            {
                return;
            }
            StackingMainLayout script = Scripts.First();

            while (script != null)
            {
                DelScript(script);
                if (Scripts.Count == 0)
                {
                    break;
                }
                script = Scripts.First();
            }
        }
        /// <summary>
        /// 单击事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Item_OnceMouseDown(object sender, MouseButtonEventArgs e)
        {
            StackingMainLayout spt = ((sender as FrameworkElement).DataContext as StackingMainLayout);

            if (spt.ScriptName == script.ScriptName)
            {
                double seconds = (DateTime.Now - forntTime).TotalSeconds;
                if (seconds > 0.4 && seconds < 1.8)
                {
                    this.scriptName.BorderThickness = new Thickness(2);
                    this.scriptName.Background      = new SolidColorBrush(Colors.White);
                    this.scriptName.IsEnabled       = true;
                }
                else if (seconds <= 0.4)
                {
                    ItemMouseDoubleClickEvent?.Invoke(this.DataContext);
                }
                Console.WriteLine("时间:" + seconds);
                Console.WriteLine("对象:" + spt.ScriptName + ",本对象:" + script.ScriptName);
                forntTime = DateTime.Now;
                //forntObject = scriptname;
            }
        }
        /// <summary>
        /// 脚本名称修改事件
        /// </summary>
        /// <param name="selectedItem"></param>
        private void ScriptControl_ItemScriptNameChanged(object selectedItem)
        {
            StackingMainLayout script = selectedItem as StackingMainLayout;

            mainContent.ModifyTitleById(script.Id, script.ScriptName);
        }
 /// <summary>
 /// 设置数据源
 /// </summary>
 /// <param name="script"></param>
 public void SetIScriptLayout(StackingMainLayout script)
 {
     this.script = script;
     this.propertysList.ItemsSource = this.script.IPropertys;
 }