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
}
}