416 lines
16 KiB
C#
416 lines
16 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using System.Threading;
|
||
using System.Threading.Tasks;
|
||
using System.Windows;
|
||
using System.Windows.Forms;
|
||
using Bricscad.ApplicationServices;
|
||
using Bricscad.Ribbon;
|
||
using Bricscad.Windows;
|
||
using Prism.Events;
|
||
using Prism.Ioc;
|
||
using Prism.Services.Dialogs;
|
||
using SWS.CAD.Base;
|
||
using SWS.Commons;
|
||
using SWS.Electrical;
|
||
using SWS.Electrical.Views;
|
||
using SWS.Service;
|
||
using SWS.WPF.ViewModels;
|
||
using SWS.WPF.Views;
|
||
using Teigha.Runtime;
|
||
using Telerik.Windows.Controls;
|
||
using Unity;
|
||
using Application = Bricscad.ApplicationServices.Application;
|
||
using DialogParameters = Prism.Services.Dialogs.DialogParameters;
|
||
using MessageBox = System.Windows.Forms.MessageBox;
|
||
|
||
[assembly: CommandClass(typeof(Commands))]
|
||
[assembly: ExtensionApplication(typeof(Commands))]
|
||
namespace SWS.Electrical
|
||
{
|
||
public partial class Commands : IExtensionApplication
|
||
{
|
||
public void Initialize()
|
||
{
|
||
|
||
try
|
||
{
|
||
|
||
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
|
||
if (RibbonServices.RibbonPaletteSet == null)
|
||
RibbonServices.CreateRibbonPaletteSet();
|
||
|
||
Start.RegisterTypes();
|
||
Start.AutoLogin();
|
||
// 延迟初始化UI组件
|
||
InitializeCustomUI();
|
||
|
||
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
|
||
timer.Interval = 50; // 50ms延迟
|
||
timer.Tick += (s, e) =>
|
||
{
|
||
timer.Stop();
|
||
var ribbonControl = ComponentManager.Ribbon;
|
||
if (ribbonControl != null)
|
||
{
|
||
//先切换到常用标签,再切换到电气系统标签
|
||
ribbonControl.Tabs[0].IsActive = true;
|
||
Thread.Sleep(5);
|
||
foreach (var tab in ribbonControl.Tabs)
|
||
{
|
||
if (tab.Name == "Electric")
|
||
{
|
||
// 激活选项卡
|
||
tab.IsActive = true;
|
||
}
|
||
}
|
||
}
|
||
};
|
||
timer.Start();
|
||
|
||
if (System.Windows.Application.Current == null)
|
||
{
|
||
var app = new System.Windows.Application
|
||
{
|
||
// 设置为显式关闭,防止窗口关闭时 Application 被自动终结
|
||
ShutdownMode = ShutdownMode.OnExplicitShutdown
|
||
};
|
||
}
|
||
GlobalObject.ClearLog();
|
||
}
|
||
catch (System.Exception e)
|
||
{
|
||
Application.ShowAlertDialog(" An exception occurred in Initialize():\n" + e.ToString());
|
||
}
|
||
}
|
||
private void InitializeCustomUI()
|
||
{
|
||
try
|
||
{
|
||
//在这里初始化你的自定义UI
|
||
AddTab();
|
||
}
|
||
catch (System.Exception ex)
|
||
{
|
||
LoggerHelper.Current.Error("UI初始化失败: " + ex.Message);
|
||
}
|
||
}
|
||
|
||
private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
|
||
{
|
||
try
|
||
{
|
||
// 记录异常信息到日志文件,这里简单打印到控制 ?
|
||
System.Exception ex = e.ExceptionObject as System.Exception;
|
||
LoggerHelper.Current.Error($"发生未处理的异常: {ex.Message}");
|
||
LoggerHelper.Current.Error($"异常信息: {ex.ToString()}");
|
||
LoggerHelper.Current.Error($"异常堆栈跟踪: {ex.StackTrace}");
|
||
|
||
// 关闭所有打开的对话框窗口
|
||
|
||
|
||
// 提示用户发生了错 ?
|
||
var result = MessageBox.Show("发生错误,是否打开日志文件以获取更多信息?", "错误", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
|
||
if (result == System.Windows.Forms.DialogResult.OK)
|
||
{
|
||
System.Diagnostics.Process.Start("explorer.exe", GlobalObject.GetLogPath());
|
||
}
|
||
}
|
||
catch (System.Exception innerEx)
|
||
{
|
||
// 如果在处理异常时又发生了异常,简单打印信 ?
|
||
LoggerHelper.Current.Error($"处理异常时发生错: {innerEx.Message}");
|
||
}
|
||
}
|
||
|
||
void AddTab()
|
||
{
|
||
RibbonControl rbnCtrl = ComponentManager.Ribbon; //整个上面都是ribbon,比如莫工做的电气系统,就是ribbon中的一个tab
|
||
|
||
if (rbnCtrl == null) return;
|
||
#region create Ribbon tab
|
||
RibbonTab tab1 = new RibbonTab();
|
||
tab1.Title = "电气扩展";
|
||
tab1.Id = "电气扩展";
|
||
rbnCtrl.Tabs.Add(tab1);//一个就行了
|
||
#endregion
|
||
|
||
#region Ribbon 测试
|
||
RibbonPanelSource dataSource = new RibbonPanelSource();
|
||
dataSource.Title = "测试";
|
||
dataSource.Id = "测试";
|
||
RibbonPanel dataPanel = new RibbonPanel();
|
||
dataPanel.Source = dataSource;
|
||
tab1.Panels.Add(dataPanel);
|
||
|
||
//垂直排列按钮panel
|
||
RibbonRowPanel ribbonRowPanel = new RibbonRowPanel();
|
||
|
||
#region buttons 测试绘图
|
||
RibbonButton btnMenu = new RibbonButton();
|
||
btnMenu.ToolTip = "测试绘图";
|
||
btnMenu.Text = "测试绘图";
|
||
btnMenu.ButtonStyle = RibbonButtonStyle.LargeWithText;
|
||
btnMenu.CommandHandler = new DelegateCommand(async x =>
|
||
{
|
||
|
||
//打开窗体
|
||
try
|
||
{
|
||
var flag = await GlobalObj.CheckLogin();
|
||
if (!flag)
|
||
{
|
||
MessageBox.Show("登录已过期,请重新登录!");
|
||
return;
|
||
}
|
||
IDialogParameters para = new DialogParameters();
|
||
para.Add(GlobalObject.dialogPar.para1.ToString(), "aaaa");
|
||
var _dialogService = GlobalObject._prismContainer.Resolve<IDialogService>();
|
||
_dialogService.ShowDialog(nameof(DialogTest2), para, (RES) =>
|
||
{
|
||
//var res = RES.Parameters.GetValue<string>(GlobalObject.dialogPar.para1.ToString());
|
||
|
||
//if (RES.Result == ButtonResult.Yes)
|
||
//{
|
||
// MessageBox.Show("窗体Yes关闭,返回:" + res);
|
||
//}
|
||
//else if (RES.Result == ButtonResult.No)
|
||
//{ MessageBox.Show("窗体NO关闭,返回:" + res); }
|
||
});
|
||
}
|
||
catch (System.Exception ex)
|
||
{
|
||
MessageBox.Show(ex.Message);
|
||
}
|
||
|
||
});
|
||
btnMenu.Image = GlobalObject.ImageSourceFromEmbeddedResourceStream("OpenProject.png");
|
||
btnMenu.Id = "选择项目";
|
||
ribbonRowPanel.Items.Add(btnMenu);
|
||
ribbonRowPanel.Items.Add(new RibbonRowBreak());//换行,这样可以使按钮多行排列
|
||
#endregion
|
||
dataSource.Items.Add(ribbonRowPanel);
|
||
#endregion
|
||
|
||
#region Ribbon 信号管理
|
||
dataSource = new RibbonPanelSource();
|
||
dataSource.Title = "信号管理";
|
||
dataSource.Id = "信号管理";
|
||
dataPanel = new RibbonPanel();
|
||
dataPanel.Source = dataSource;
|
||
tab1.Panels.Add(dataPanel);
|
||
|
||
//垂直排列按钮panel
|
||
ribbonRowPanel = new RibbonRowPanel();
|
||
|
||
#region buttons 信号管理
|
||
btnMenu = new RibbonButton();
|
||
btnMenu.ToolTip = "信号管理";
|
||
btnMenu.Text = "信号管理";
|
||
btnMenu.ButtonStyle = RibbonButtonStyle.LargeWithText;
|
||
btnMenu.CommandHandler = new DelegateCommand(async x =>
|
||
{
|
||
|
||
//打开窗体
|
||
try
|
||
{
|
||
var flag = await GlobalObj.CheckLogin();
|
||
if (!flag)
|
||
{
|
||
MessageBox.Show("登录已过期,请重新登录!");
|
||
return;
|
||
}
|
||
var para = new DialogParameters();
|
||
var _dialogService = GlobalObject._prismContainer.Resolve<IDialogService>();
|
||
_dialogService.ShowDialog(nameof(DialogSignalManagement), para, (RES) =>
|
||
{
|
||
|
||
});
|
||
}
|
||
catch (System.Exception ex)
|
||
{
|
||
MessageBox.Show(ex.Message);
|
||
}
|
||
|
||
});
|
||
btnMenu.Image = GlobalObject.ImageSourceFromEmbeddedResourceStream("SinalManage.png");
|
||
btnMenu.Id = "信号管理";
|
||
ribbonRowPanel.Items.Add(btnMenu);
|
||
ribbonRowPanel.Items.Add(new RibbonRowBreak());//换行,这样可以使按钮多行排列
|
||
#endregion
|
||
dataSource.Items.Add(ribbonRowPanel);
|
||
#endregion
|
||
|
||
#region Ribbon 绘图管理
|
||
dataSource = new RibbonPanelSource();
|
||
dataSource.Title = "绘图管理";
|
||
dataSource.Id = "绘图管理";
|
||
dataPanel = new RibbonPanel();
|
||
dataPanel.Source = dataSource;
|
||
tab1.Panels.Add(dataPanel);
|
||
|
||
//垂直排列按钮panel
|
||
ribbonRowPanel = new RibbonRowPanel();
|
||
|
||
#region buttons 布置图自动绘制
|
||
btnMenu = new RibbonButton();
|
||
btnMenu.ToolTip = "布置图自动绘制";
|
||
btnMenu.Text = "布置图自动绘制";
|
||
btnMenu.ButtonStyle = RibbonButtonStyle.LargeWithText;
|
||
btnMenu.CommandHandler = new DelegateCommand(async x =>
|
||
{
|
||
|
||
//打开窗体
|
||
try
|
||
{
|
||
var flag = await GlobalObj.CheckLogin();
|
||
if (!flag)
|
||
{
|
||
MessageBox.Show("登录已过期,请重新登录!");
|
||
return;
|
||
}
|
||
var para = new DialogParameters();
|
||
var _dialogService = GlobalObject._prismContainer.Resolve<IDialogService>();
|
||
_dialogService.ShowDialog(nameof(DialogAutoArrangeLayout), para, (RES) =>
|
||
{
|
||
|
||
});
|
||
}
|
||
catch (System.Exception ex)
|
||
{
|
||
MessageBox.Show(ex.Message);
|
||
}
|
||
|
||
});
|
||
btnMenu.Image = GlobalObject.ImageSourceFromEmbeddedResourceStream("PlaneLayout.png");
|
||
btnMenu.Id = "绘图管理";
|
||
ribbonRowPanel.Items.Add(btnMenu);
|
||
ribbonRowPanel.Items.Add(new RibbonRowBreak());//换行,这样可以使按钮多行排列
|
||
#endregion
|
||
|
||
dataSource.Items.Add(ribbonRowPanel);
|
||
#endregion
|
||
|
||
#region Ribbon 材料管理
|
||
dataSource = new RibbonPanelSource();
|
||
dataSource.Title = "材料表管理";
|
||
dataSource.Id = "材料表管理";
|
||
dataPanel = new RibbonPanel();
|
||
dataPanel.Source = dataSource;
|
||
tab1.Panels.Add(dataPanel);
|
||
|
||
//垂直排列按钮panel
|
||
ribbonRowPanel = new RibbonRowPanel();
|
||
|
||
#region buttons 材料表自动生成
|
||
btnMenu = new RibbonButton();
|
||
btnMenu.ToolTip = "材料表自动生成";
|
||
btnMenu.Text = "材料表自动生成";
|
||
btnMenu.ButtonStyle = RibbonButtonStyle.LargeWithText;
|
||
btnMenu.CommandHandler = new DelegateCommand(async x =>
|
||
{
|
||
|
||
//打开窗体
|
||
try
|
||
{
|
||
var flag = await GlobalObj.CheckLogin();
|
||
if (!flag)
|
||
{
|
||
MessageBox.Show("登录已过期,请重新登录!");
|
||
return;
|
||
}
|
||
var para = new DialogParameters();
|
||
var _dialogService = GlobalObject._prismContainer.Resolve<IDialogService>();
|
||
_dialogService.ShowDialog(nameof(DialogGenerateBOM), para, (RES) =>
|
||
{
|
||
|
||
});
|
||
}
|
||
catch (System.Exception ex)
|
||
{
|
||
MessageBox.Show(ex.Message);
|
||
}
|
||
|
||
});
|
||
btnMenu.Image = GlobalObject.ImageSourceFromEmbeddedResourceStream("CableSinal.png");
|
||
btnMenu.Id = "材料表管理";
|
||
ribbonRowPanel.Items.Add(btnMenu);
|
||
ribbonRowPanel.Items.Add(new RibbonRowBreak());//换行,这样可以使按钮多行排列
|
||
#endregion
|
||
dataSource.Items.Add(ribbonRowPanel);
|
||
#endregion
|
||
|
||
#region Ribbon 图形刷新
|
||
RibbonPanelSource dwgRefreshSource = new RibbonPanelSource();
|
||
dwgRefreshSource.Title = "图形刷新";
|
||
dwgRefreshSource.Id = "图形刷新";
|
||
RibbonPanel dwgRefreshPanel = new RibbonPanel();
|
||
dwgRefreshPanel.Source = dwgRefreshSource;
|
||
tab1.Panels.Add(dwgRefreshPanel);
|
||
//大按钮
|
||
#region buttons 刷新标注
|
||
RibbonButton btnRefreshText = new RibbonButton();
|
||
btnRefreshText.ToolTip = "刷新标注";
|
||
btnRefreshText.Text = "刷新标注";
|
||
btnRefreshText.ButtonStyle = RibbonButtonStyle.LargeWithText;
|
||
btnRefreshText.CommandHandler = new DelegateCommand(async x =>
|
||
{
|
||
//打开窗体
|
||
try
|
||
{
|
||
var flag = await GlobalObj.CheckLogin();
|
||
if (!flag)
|
||
{
|
||
MessageBox.Show("登录已过期,请重新登录!");
|
||
return;
|
||
}
|
||
var curName = General.GetDwgName();
|
||
var index = curName.LastIndexOf("\\");
|
||
if (index == -1)
|
||
{
|
||
MessageBox.Show("请先在左侧图纸树中打开图纸!");
|
||
return;
|
||
}
|
||
var dwgName = curName.Substring(index+1);//获取当前图纸名称
|
||
var _ServiceDrawing = GlobalObject.container.Resolve<DrawingServce>();
|
||
var list = await _ServiceDrawing.GetDrawingCatalogue();
|
||
GlobalObject.AllDrawings = list.ToList();
|
||
var node = TreeHelper.GetTreeModelByText(GlobalObject.AllDrawings, dwgName);//从图纸树中获取当前节点
|
||
if (node == null)
|
||
{
|
||
MessageBox.Show("当前图纸不是系统图纸,请先在左侧图纸树中打开图纸!");
|
||
return;
|
||
}
|
||
var para = new DialogParameters();
|
||
para.Add(GlobalObject.dialogPar.para1.ToString(), node);
|
||
var _dialogService = GlobalObject._prismContainer.Resolve<IDialogService>();
|
||
_dialogService.ShowDialog(nameof(DialogRefreshAnnotation), para, (RES) =>
|
||
{
|
||
|
||
});
|
||
}
|
||
catch (System.Exception ex)
|
||
{
|
||
MessageBox.Show(ex.Message);
|
||
}
|
||
});
|
||
btnRefreshText.Image = GlobalObject.ImageSourceFromEmbeddedResourceStream(@"RefreshText.png");
|
||
btnRefreshText.Id = "刷新标注";
|
||
dwgRefreshSource.Items.Add(btnRefreshText);
|
||
#endregion
|
||
#endregion
|
||
}
|
||
|
||
public void Terminate()
|
||
{
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|
||
|