using BeDesignerSCADA.ViewModel; using BPASmart.Model; using BPASmartClient.Compiler; using BPASmartClient.DATABUS; using BPASmartClient.MessageName; using System; using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Linq; using System.Reflection; using System.Reflection.Emit; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Forms; using System.Windows.Input; using System.Windows.Markup; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace BeDesignerSCADA { /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : Window { MainViewModel viewModel=new MainViewModel(); public MainWindow() { InitializeComponent(); this.DataContext = viewModel; viewModel.Loaded(cav, runCanvas); //控件加载 Assembly assembly = Assembly.LoadFile($"{System.AppDomain.CurrentDomain.BaseDirectory}\\BPASmartClient.SCADAControl.dll"); //Assembly.GetExecutingAssembly(); var controls = assembly.GetTypes().Where(t => t.GetInterface("IExecutable") != null).OrderBy(o=>o.Name); CtlList.ItemsSource = controls; this.GotFocus += MainWindow_GotFocus; this.LostFocus += MainWindow_LostFocus; } private void MainWindow_LostFocus(object sender, RoutedEventArgs e) { System.Diagnostics.Trace.WriteLine("失去焦点:" + e.OriginalSource.ToString()); // Console.WriteLine(e.OriginalSource.ToString()); } private void MainWindow_GotFocus(object sender, RoutedEventArgs e) { System.Diagnostics.Trace.WriteLine("获得焦点:"+e.OriginalSource.ToString()); } #region 加载数据中心与事件中心 /// /// 加载数据中心 /// public void Loading() { //try //{ // Assembly assembly1 = Assembly.LoadFile($"{System.AppDomain.CurrentDomain.BaseDirectory}\\BPASmartClient.MessageName.dll"); // Type type = assembly1.GetType("BPASmartClient.MessageName.MessageName"); // var control = Activator.CreateInstance(type); // var fildes = control.GetType().GetFields(); // foreach (var fi in fildes) // { // EventModel eventModel = new EventModel(); // eventModel.EventValue = fi.GetValue(control)?.ToString(); // eventModel.EventName = fi.Name; // foreach (var item in fi.CustomAttributes) // { // if (item.AttributeType.Name == "CategoryAttribute") // { // eventModel.Category = item.ConstructorArguments.Count() > 0 ? item.ConstructorArguments[0].Value?.ToString() : ""; // } // else if (item.AttributeType.Name == "DescriptionAttribute") // { // eventModel.Description = item.ConstructorArguments.Count() > 0 ? item.ConstructorArguments[0].Value?.ToString() : ""; // } // else if (item.AttributeType.Name == "BrowsableAttribute") // { // eventModel.Browsable = item.ConstructorArguments.Count() > 0 ? (bool)item.ConstructorArguments[0].Value : true; // } // } // if (!string.IsNullOrEmpty(eventModel.Category)) // { // if (Class_DataBus.GetInstance().EventData.ContainsKey(eventModel.Category)) // Class_DataBus.GetInstance().EventData[eventModel.Category].Add(eventModel); // else // { // Class_DataBus.GetInstance().EventData[eventModel.Category] = new List { eventModel }; // } // } // } // type = assembly1.GetType("BPASmartClient.MessageName.DataName"); // control = Activator.CreateInstance(type); // fildes = control.GetType().GetFields(); // foreach (var fi in fildes) // { // ALLModel aLLModel = new ALLModel(); // aLLModel.DataValue = fi.GetValue(control)?.ToString(); // aLLModel.DataName = fi.Name; // foreach (var item in fi.CustomAttributes) // { // if (item.AttributeType.Name == "CategoryAttribute") // { // aLLModel.Category = item.ConstructorArguments.Count() > 0 ? item.ConstructorArguments[0].Value?.ToString() : ""; // } // else if (item.AttributeType.Name == "DescriptionAttribute") // { // aLLModel.Description = item.ConstructorArguments.Count() > 0 ? item.ConstructorArguments[0].Value?.ToString() : ""; // } // else if (item.AttributeType.Name == "BrowsableAttribute") // { // aLLModel.Browsable = item.ConstructorArguments.Count() > 0 ? (bool)item.ConstructorArguments[0].Value : true; // } // } // if (!string.IsNullOrEmpty(aLLModel.Category)) // { // if (Class_DataBus.GetInstance().ALLData.ContainsKey(aLLModel.Category)) // Class_DataBus.GetInstance().ALLData[aLLModel.Category].Add(aLLModel); // else // { // Class_DataBus.GetInstance().ALLData[aLLModel.Category] = new List { aLLModel }; // } // } // } //} //catch (Exception ex) //{ // System.Windows.MessageBox.Show(ex.Message); //} } /// /// 加载本地文件 /// public void LoadFile() { //加载配置数据 FJson.Read(); viewModel.DevNameList = new System.Collections.ObjectModel.ObservableCollection(); viewModel.DevValueList = new System.Collections.ObjectModel.ObservableCollection(); FJson.Data.CommunicationDevices?.ToList().ForEach(data => { viewModel.DevNameList.Add(data.DeviceName); data.VarTableModels?.ToList().ForEach((data) => { if(!viewModel.DevValueList.Contains(data.VarName) && !string.IsNullOrEmpty(data.VarName)) viewModel.DevValueList.Add(data.VarName); }); }); //CommunicationModel model = new CommunicationModel(); //Type typeData = model.GetType(); //PropertyInfo[] properties = typeData.GetProperties(); //foreach (PropertyInfo property in properties) //{ // viewModel.DevValueList.Add(property.Name); //} //ICommunicationDevice DeviceType; //DeviceType = FJson.Data.CommunicationDevices.ElementAt(0).CommDevice; //VariableInfo variable = new VariableInfo(DeviceType); //PropertyInfo[] prope = variable.GetType().GetProperties(); //foreach (var item in prope) //{ // viewModel.DevValueList.Add(item.Name); //} } #endregion #region 位置调整 /// /// 左对齐 /// /// /// private void AglinLeftBtn_Click(object sender, RoutedEventArgs e) { cav.AlignLeft(); } /// /// 底部对齐 /// /// /// private void AglinBottomBtn_Click(object sender, RoutedEventArgs e) { cav.AlignBottom(); } /// /// 顶部对齐 /// /// /// private void AglinTopBtn_Click(object sender, RoutedEventArgs e) { cav.AlignTop(); } /// /// 右对齐 /// /// /// private void AglinRightBtn_Click(object sender, RoutedEventArgs e) { cav.AlignRight(); } /// /// 居中 /// /// /// private void AglinCenterBtn_Click(object sender, RoutedEventArgs e) { cav.AlignCenter(); } /// /// 垂直分布 /// /// /// private void VerticalLayoutBtn_Click(object sender, RoutedEventArgs e) { cav.VertialLayout(); } /// /// 水平分布 /// /// /// private void HorizontalLayoutBtn_Click(object sender, RoutedEventArgs e) { cav.HorizontalLayout(); } #endregion #region 其他事件操作 /// /// 运行 /// /// /// private void RunBtn_Click(object sender, RoutedEventArgs e) { if (sender is System.Windows.Controls.Button btn) { if (btn.Tag.ToString() == "运行") { cav.ClearSelection(); runCanvas.Run(cav.Generator()); } else if (btn.Tag.ToString() == "停止") { runCanvas.Destory(); } } } /// /// 加载 /// /// /// private void LoadBtn_Click(object sender, RoutedEventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "布局文件|*.lay"; if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { cav.Load(ofd.FileName); } DoubleAnimation da = new DoubleAnimation(-200, 0, new Duration(TimeSpan.FromMilliseconds(250))); da.EasingFunction = new CubicEase() { EasingMode = EasingMode.EaseOut }; CanvasTranslate.BeginAnimation(TranslateTransform.XProperty, da); DoubleAnimation daop = new DoubleAnimation(0, 1, new Duration(TimeSpan.FromMilliseconds(250))); daop.EasingFunction = new CubicEase() { EasingMode = EasingMode.EaseOut }; cav.BeginAnimation(OpacityProperty, daop); } /// /// 保存 /// /// /// private void SaveBtn_Click(object sender, RoutedEventArgs e) { SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = "布局文件|*.lay"; if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { string str = cav.Save(); File.WriteAllText(sfd.FileName, str, Encoding.Unicode); } } /// /// 模拟消息发送 /// /// /// private void MNBtn_Click(object sender, RoutedEventArgs e) { } #endregion #region 左侧控件栏移动 /// /// 移动到右侧 /// /// /// private void CtlList_PreviewMouseMove(object sender, System.Windows.Input.MouseEventArgs e) { if (CtlList.SelectedItem != null && e.LeftButton == MouseButtonState.Pressed) { DragDrop.DoDragDrop(CtlList, CtlList.SelectedItem, System.Windows.DragDropEffects.Copy); codeEditor.Text = cav.Save(); } } /// /// 显示代码 /// /// /// private void showCode_Click(object sender, RoutedEventArgs e) { codeEditor.Text = cav.Save(); } /// /// 编辑 /// /// /// private void ToggleButton_Click(object sender, RoutedEventArgs e) { try { if (sender is ToggleButton) { ToggleButton toggle = (ToggleButton)sender; Xceed.Wpf.Toolkit.PropertyGrid.PropertyItem propertyGridCommand = toggle.DataContext as Xceed.Wpf.Toolkit.PropertyGrid.PropertyItem; if (propertyGridCommand != null) { viewModel.Edit(propertyGridCommand); } } } catch (Exception ex) { } } /// /// 变量选择 /// /// /// private void ComboBoxValue_TextChanged(object sender,TextChangedEventArgs e) { try { if (sender is System.Windows.Controls.ComboBox) { System.Windows.Controls.ComboBox toggle = (System.Windows.Controls.ComboBox)sender; Xceed.Wpf.Toolkit.PropertyGrid.PropertyItem propertyGridCommand = toggle.DataContext as Xceed.Wpf.Toolkit.PropertyGrid.PropertyItem; if (toggle.Tag != null && !string.IsNullOrEmpty(toggle.Text)) propertyGridCommand.Value = "{" + $"Binding {toggle.Tag}.{toggle.Text}" + "}"; } } catch (Exception ex) { } } /// /// 变量下拉框打开事件 /// /// /// private void valuebox_DropDownOpened(object sender,EventArgs e) { try { viewModel.DevValueList = new System.Collections.ObjectModel.ObservableCollection(); if (sender is System.Windows.Controls.ComboBox) { System.Windows.Controls.ComboBox toggle = (System.Windows.Controls.ComboBox)sender; if (toggle.Tag == null) return; if (Class_DataBus.GetInstance().Dic_DeviceData.ContainsKey(toggle.Tag.ToString())) { Class_DataBus.GetInstance().Dic_DeviceData[toggle.Tag.ToString()].Keys?.ToList().ForEach(key => { viewModel.DevValueList.Add(key); }); } } } catch (Exception ex) { } } /// /// 设备名称选择 /// /// /// private void ComboBoxName_TextChanged(object sender,TextChangedEventArgs e) { try { if (sender is System.Windows.Controls.ComboBox) { System.Windows.Controls.ComboBox toggle = (System.Windows.Controls.ComboBox)sender; Xceed.Wpf.Toolkit.PropertyGrid.PropertyItem propertyGridCommand = toggle.DataContext as Xceed.Wpf.Toolkit.PropertyGrid.PropertyItem; if(toggle.Tag!=null && !string.IsNullOrEmpty(toggle.Text)) propertyGridCommand.Value = "{" + $"Binding {toggle.Text}.{toggle.Tag}" + "}"; else if(!string.IsNullOrEmpty(toggle.Text)) propertyGridCommand.Value = "{" + $"Binding {toggle.Text}." + "}"; } } catch (Exception ex) { } } /// /// 设备名称下拉框打开事件 /// /// /// private void namebox_DropDownOpened(object sender,EventArgs e) { viewModel.DevNameList = new System.Collections.ObjectModel.ObservableCollection(); Class_DataBus.GetInstance().Dic_DeviceData.Keys?.ToList().ForEach(key => { viewModel.DevNameList.Add(key); }); } #endregion } }