2025-10-17 16:45:00 +08:00

416 lines
16 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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()
{
}
}
}