You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

261 lines
9.0 KiB
C#

1 year ago
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.IO;
using ICSharpCode.Core;
using Mesnac.PlugIn.View;
using Mesnac.Gui.Workbench;
using Mesnac.Core.Service;
using Mesnac.Basic;
using Mesnac.Gui.Run.Global;
using Mesnac.Gui.Common;
namespace Mesnac.Gui.Run.ViewContent
{
#region 通用功能定义
#endregion
#region 文件菜单
#region 系统工程配置
/// <summary>
/// 系统工程配置
/// </summary>
public class SysConfigCommand : AbstractCommand
{
public override void Run()
{
IViewContent frmSysConfig = null;
IWorkbenchWindow window = WorkbenchSingleton.Workbench.GetViewByType(typeof(FrmSysConfig));
if (window != null)
{
frmSysConfig = window.ViewContent;
}
else
{
frmSysConfig = new FrmSysConfig();
}
WorkbenchSingleton.Workbench.ShowView(frmSysConfig);
}
}
#endregion
#region 刷新自定义插件
/// <summary>
/// 刷新自定义插件
/// </summary>
public class RefreshPlugInCommand : AbstractCommand
{
public override void Run()
{
WorkbenchSingleton.Workbench.RefreshPlugIn();
}
}
#endregion
#region 全屏切换
/// <summary>
/// 全屏切换
/// </summary>
public class ToggleFullscreenCommand : AbstractCommand
{
public override void Run()
{
WorkbenchSingleton.Workbench.FullScreen = !WorkbenchSingleton.Workbench.FullScreen;
}
}
#endregion
#region 退出应用程序
/// <summary>
/// 退出应用程序
/// </summary>
public class ExitCommand : AbstractCommand
{
public override void Run()
{
string caption = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_Caption"));
string msg = StringParser.Parse(ResourceService.GetString("Dialog_MessageBox_ExtAsk"));
DialogResult result = MessageBox.Show(msg, caption, MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
WorkbenchSingleton.Workbench.CloseFlag = false; //设置系统关闭标识
(WorkbenchSingleton.Workbench as System.Windows.Forms.Form).Close();
Application.ExitThread();
}
}
}
#endregion
#endregion
#region 帮助菜单
#region 关于
public class AboutCommand : AbstractCommand
{
public override void Run()
{
Dialog.FrmAbout frmAbout = new Dialog.FrmAbout();
frmAbout.ShowDialog();
}
}
#endregion
#endregion
#region 语言菜单处理
#region 中文
public class ChineseCommand : AbstractCommand
{
public override void Run()
{
if (System.Threading.Thread.CurrentThread.CurrentUICulture == null || System.Threading.Thread.CurrentThread.CurrentUICulture.Name != "zh-CN")
{
LanguageHelper.SetCurrentCultureInfo("zh-CN");
WorkbenchSingleton.Workbench.CloseAllViews();
string projectPath = Path.Combine(Application.StartupPath, AppConfigHandler.Instance.MCProjectPath) + "." + System.Threading.Thread.CurrentThread.CurrentUICulture.Name; //组态工程路径
if (!System.IO.Directory.Exists(projectPath))
{
ICSharpCode.Core.LoggingService<ChineseCommand>.Warn(String.Format("目录:{0},不存在,重新加载默认工程目录!", projectPath));
projectPath = Path.Combine(Application.StartupPath, AppConfigHandler.Instance.MCProjectPath);
}
if (Mesnac.Gui.Common.RunEngine.Instance.Init(projectPath, true, true, true)) //初始化运行引擎
{
AppConfigHandler.Instance.InitCustomerMenuAndToolStrip(WorkbenchSingleton.Workbench.TopMenu, WorkbenchSingleton.Workbench.ToolStrip); //初始化自定义系统菜单和工具栏
}
}
}
}
#endregion
#region 英文
public class EnglishCommand : AbstractCommand
{
public override void Run()
{
if (System.Threading.Thread.CurrentThread.CurrentUICulture == null || System.Threading.Thread.CurrentThread.CurrentUICulture.Name != "en-US")
{
LanguageHelper.SetCurrentCultureInfo("en-US");
WorkbenchSingleton.Workbench.CloseAllViews();
string projectPath = Path.Combine(Application.StartupPath, AppConfigHandler.Instance.MCProjectPath) + "." + System.Threading.Thread.CurrentThread.CurrentUICulture.Name; //组态工程路径
if (!System.IO.Directory.Exists(projectPath))
{
ICSharpCode.Core.LoggingService<ChineseCommand>.Warn(String.Format("目录:{0},不存在,重新加载默认工程目录!", projectPath));
projectPath = Path.Combine(Application.StartupPath, AppConfigHandler.Instance.MCProjectPath);
}
if (Mesnac.Gui.Common.RunEngine.Instance.Init(projectPath, true, true, true)) //初始化运行引擎
{
AppConfigHandler.Instance.InitCustomerMenuAndToolStrip(WorkbenchSingleton.Workbench.TopMenu, WorkbenchSingleton.Workbench.ToolStrip); //初始化自定义系统菜单和工具栏
}
}
}
}
#endregion
#endregion
#region 测试命令
public class TestCommand : AbstractCommand
{
public override void Run()
{
LoggingService<TestCommand>.Debug("测试命令执行..." + this.Owner.ToString());
LoggingService<TestCommand>.Debug("RoleId = " + UserInfo.Instance.RoleGUID);
LoggingService<TestCommand>.Debug("UserId = " + UserInfo.Instance.UserGUID);
LoggingService<TestCommand>.Debug("UserName = " + UserInfo.Instance.UserName);
}
}
#endregion
#region 测试 资源回收
/// <summary>
/// 资源回收
/// </summary>
public class ReleaseResourceCommand : AbstractCommand
{
public override void Run()
{
//System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(this.Release));
string[] keys = new string[WorkbenchSingleton.Workbench.ViewContentDic.Keys.Count];
WorkbenchSingleton.Workbench.ViewContentDic.Keys.CopyTo(keys, 0);
foreach (string key in keys)
{
IViewContent content = WorkbenchSingleton.Workbench.ViewContentDic[key];
WorkbenchSingleton.Workbench.ViewContentDic.Remove(key);
IWorkbenchWindow window = content.MyOwner as IWorkbenchWindow;
//content.IsRealClose = true;
//content.Dispose();
window.CloseWindow(true);
}
//WorkbenchSingleton.Workbench.ViewContentDic.Clear();
System.GC.Collect();
LoggingService<ReleaseResourceCommand>.Debug("垃圾回收执行...");
LoggingService<ReleaseResourceCommand>.Debug("当前组态工程ViewContent数量" + WorkbenchSingleton.Workbench.ViewContentDic.Count);
}
public void Release(object obj)
{
string[] keys = new string[WorkbenchSingleton.Workbench.ViewContentDic.Keys.Count];
WorkbenchSingleton.Workbench.ViewContentDic.Keys.CopyTo(keys, 0);
foreach (string key in keys)
{
IViewContent content = WorkbenchSingleton.Workbench.ViewContentDic[key];
WorkbenchSingleton.Workbench.ViewContentDic.Remove(key);
IWorkbenchWindow window = content.MyOwner as IWorkbenchWindow;
content.IsRealClose = true;
content.Dispose();
window.CloseWindow(true);
}
//WorkbenchSingleton.Workbench.ViewContentDic.Clear();
System.GC.Collect();
LoggingService<ReleaseResourceCommand>.Debug("垃圾回收执行...");
LoggingService<ReleaseResourceCommand>.Debug("当前组态工程ViewContent数量" + WorkbenchSingleton.Workbench.ViewContentDic.Count);
}
}
#endregion
#region 菜单项启用、禁用操作(权限控制)
/// <summary>
/// 刷新插件、工程配置权限控制(只允许管理员操作)
/// </summary>
public class MCRunSuperConditionEvaluator : IConditionEvaluator
{
public bool IsValid(object owner, ICSharpCode.Core.Condition condition)
{
//如果是超级管理员或没经过登录(独立运行)则可用
if (UserInfo.Instance.RoleGUID == "-99" || UserInfo.Instance.RoleGUID == "-1")
{
return true;
}
else
{
return false;
}
}
}
#endregion
}