|
|
|
|
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 == "-mesnac" || UserInfo.Instance.RoleGUID == "-1")
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
}
|