355 lines
13 KiB
C#
Raw Normal View History

2025-08-15 16:44:13 +08:00
using System;
2025-10-09 17:50:08 +08:00
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
2025-08-15 16:44:13 +08:00
using System.Windows.Forms;
2025-10-09 17:50:08 +08:00
using Bricscad.ApplicationServices;
2025-08-15 16:44:13 +08:00
using Bricscad.Ribbon;
2025-09-04 18:28:02 +08:00
using Bricscad.Windows;
2025-08-15 16:44:13 +08:00
using Prism.Events;
using Prism.Ioc;
using Prism.Services.Dialogs;
using SWS.Commons;
using SWS.Electrical;
using SWS.Electrical.Views;
using SWS.Service;
using SWS.WPF.ViewModels;
2025-09-04 18:28:02 +08:00
using SWS.WPF.Views;
2025-08-15 16:44:13 +08:00
using Teigha.Runtime;
using Telerik.Windows.Controls;
using Unity;
using Application = Bricscad.ApplicationServices.Application;
using DialogParameters = Prism.Services.Dialogs.DialogParameters;
2025-10-09 17:50:08 +08:00
using MessageBox = System.Windows.Forms.MessageBox;
2025-08-15 16:44:13 +08:00
[assembly: CommandClass(typeof(Commands))]
[assembly: ExtensionApplication(typeof(Commands))]
namespace SWS.Electrical
{
public partial class Commands : IExtensionApplication
{
public void Initialize()
{
try
{
2025-10-09 17:50:08 +08:00
2025-08-15 16:44:13 +08:00
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
if (RibbonServices.RibbonPaletteSet == null)
RibbonServices.CreateRibbonPaletteSet();
Start.RegisterTypes();
2025-09-02 11:21:40 +08:00
Start.AutoLogin();
2025-10-09 17:50:08 +08:00
// 延迟初始化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();
2025-08-15 16:44:13 +08:00
}
catch (System.Exception e)
{
Application.ShowAlertDialog(" An exception occurred in Initialize():\n" + e.ToString());
}
}
2025-10-09 17:50:08 +08:00
private void InitializeCustomUI()
{
try
{
//在这里初始化你的自定义UI
AddTab();
}
catch (System.Exception ex)
{
LoggerHelper.Current.Error("UI初始化失败: " + ex.Message);
}
}
2025-08-15 16:44:13 +08:00
private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
try
{
// 记录异常信息到日志文件,这里简单打印到控制 ?
2025-08-15 16:44:13 +08:00
System.Exception ex = e.ExceptionObject as System.Exception;
2025-10-09 17:50:08 +08:00
LoggerHelper.Current.Error($"发生未处理的异常: {ex.Message}");
LoggerHelper.Current.Error($"异常信息: {ex.ToString()}");
LoggerHelper.Current.Error($"异常堆栈跟踪: {ex.StackTrace}");
2025-08-15 16:44:13 +08:00
// 关闭所有打开的对话框窗口
// 提示用户发生了错 ?
2025-10-09 17:50:08 +08:00
var result= MessageBox.Show("发生错误,是否打开日志文件以获取更多信息?", "错误", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
if(result== System.Windows.Forms.DialogResult.OK)
{
System.Diagnostics.Process.Start("explorer.exe", GlobalObject.GetLogPath());
}
2025-08-15 16:44:13 +08:00
}
catch (System.Exception innerEx)
{
// 如果在处理异常时又发生了异常,简单打印信 ?
2025-10-09 17:50:08 +08:00
LoggerHelper.Current.Error($"处理异常时发生错: {innerEx.Message}");
2025-08-15 16:44:13 +08:00
}
}
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.SmallWithText;
btnMenu.CommandHandler = new DelegateCommand(async x =>
2025-09-04 18:28:02 +08:00
{
2025-08-15 16:44:13 +08:00
//打开窗体
try
{
2025-09-04 18:28:02 +08:00
var flag = await GlobalObj.CheckLogin();
2025-08-15 16:44:13 +08:00
if (!flag)
{
MessageBox.Show("登录已过期,请重新登录!");
return;
}
2025-09-04 18:28:02 +08:00
IDialogParameters para = new DialogParameters();
para.Add(GlobalObject.dialogPar.para1.ToString(), "aaaa");
2025-08-15 16:44:13 +08:00
var _dialogService = GlobalObject._prismContainer.Resolve<IDialogService>();
_dialogService.ShowDialog(nameof(DialogTest2), para, (RES) =>
{
//var res = RES.Parameters.GetValue<string>(GlobalObject.dialogPar.para1.ToString());
2025-09-04 18:28:02 +08:00
2025-08-15 16:44:13 +08:00
//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);
}
2025-09-04 18:28:02 +08:00
2025-08-15 16:44:13 +08:00
});
btnMenu.Image = GlobalObject.ImageSourceFromEmbeddedResourceStream("OpenProject.png");
btnMenu.Id = "选择项目";
ribbonRowPanel.Items.Add(btnMenu);
2025-08-15 16:44:13 +08:00
ribbonRowPanel.Items.Add(new RibbonRowBreak());//换行,这样可以使按钮多行排列
#endregion
dataSource.Items.Add(ribbonRowPanel);
#endregion
#region Ribbon
2025-09-04 18:28:02 +08:00
dataSource = new RibbonPanelSource();
2025-08-15 16:44:13 +08:00
dataSource.Title = "信号管理";
dataSource.Id = "信号管理";
2025-09-04 18:28:02 +08:00
dataPanel = new RibbonPanel();
2025-08-15 16:44:13 +08:00
dataPanel.Source = dataSource;
tab1.Panels.Add(dataPanel);
//垂直排列按钮panel
2025-09-04 18:28:02 +08:00
ribbonRowPanel = new RibbonRowPanel();
2025-08-15 16:44:13 +08:00
#region buttons
btnMenu = new RibbonButton();
btnMenu.ToolTip = "信号管理";
btnMenu.Text = "信号管理";
btnMenu.ButtonStyle = RibbonButtonStyle.SmallWithText;
btnMenu.CommandHandler = new DelegateCommand(async x =>
2025-08-15 16:44:13 +08:00
{
//打开窗体
try
{
var flag = await GlobalObj.CheckLogin();
if (!flag)
{
MessageBox.Show("登录已过期,请重新登录!");
return;
}
2025-09-04 18:28:02 +08:00
var para = new DialogParameters();
2025-08-15 16:44:13 +08:00
var _dialogService = GlobalObject._prismContainer.Resolve<IDialogService>();
_dialogService.ShowDialog(nameof(DialogSignalManagement), para, (RES) =>
{
2025-09-04 18:28:02 +08:00
2025-08-15 16:44:13 +08:00
});
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}
});
btnMenu.Image = GlobalObject.ImageSourceFromEmbeddedResourceStream("SinalManage.png");
btnMenu.Id = "信号管理";
ribbonRowPanel.Items.Add(btnMenu);
2025-08-15 16:44:13 +08:00
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.SmallWithText;
btnMenu.CommandHandler = new DelegateCommand(async x =>
2025-08-15 16:44:13 +08:00
{
//打开窗体
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
2025-10-09 17:50:08 +08:00
dataSource.Items.Add(ribbonRowPanel);
#endregion
2025-10-09 17:50:08 +08:00
#region Ribbon
dataSource = new RibbonPanelSource();
dataSource.Title = "材料表管理";
dataSource.Id = "材料表管理";
dataPanel = new RibbonPanel();
dataPanel.Source = dataSource;
tab1.Panels.Add(dataPanel);
//垂直排列按钮panel
ribbonRowPanel = new RibbonRowPanel();
2025-10-09 17:50:08 +08:00
#region buttons
btnMenu = new RibbonButton();
btnMenu.ToolTip = "材料表自动生成";
btnMenu.Text = "材料表自动生成";
btnMenu.ButtonStyle = RibbonButtonStyle.SmallWithText;
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);
2025-08-15 16:44:13 +08:00
ribbonRowPanel.Items.Add(new RibbonRowBreak());//换行,这样可以使按钮多行排列
#endregion
dataSource.Items.Add(ribbonRowPanel);
#endregion
2025-08-15 16:44:13 +08:00
}
2025-10-09 17:50:08 +08:00
public void Terminate()
{
}
2025-08-15 16:44:13 +08:00
}
}