301 lines
8.1 KiB
C#
301 lines
8.1 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Globalization;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
using System.Threading;
|
|||
|
using System.Windows.Documents;
|
|||
|
using System.Windows.Media;
|
|||
|
using System.Windows.Controls;
|
|||
|
using System.Reflection;
|
|||
|
using System.Windows;
|
|||
|
using Aitex.Core.Account;
|
|||
|
using MECF.Framework.Common.Properties;
|
|||
|
using MECF.Framework.UI.Core.Properties;
|
|||
|
using Autofac;
|
|||
|
using Aitex.Core.UI.View.Common;
|
|||
|
using MECF.Framework.UI.Core.Applications;
|
|||
|
|
|||
|
namespace Aitex.Core.UI.View.Frame
|
|||
|
{
|
|||
|
public class ViewManager
|
|||
|
{
|
|||
|
public const string Culture_CN = "zh-CN";
|
|||
|
public const string Culture_EN = "en-US";
|
|||
|
|
|||
|
public List<string> GetAllViewList
|
|||
|
{
|
|||
|
get { return _views == null ? null : _views.ViewIdList; }
|
|||
|
}
|
|||
|
public string SystemName { get; set; }
|
|||
|
public string UILayoutFile { get; set; }
|
|||
|
public string ViewAssembly { get; set; }
|
|||
|
public ImageSource SystemLogo { get; set; }
|
|||
|
public Window MainWindow { get { return _mainWindow; } }
|
|||
|
public event Action OnMainWindowLoaded;
|
|||
|
public static Account.Account LoginAccount;
|
|||
|
public bool MaxSizeShow { get; set; }
|
|||
|
|
|||
|
UILayoutParser _views;
|
|||
|
ITopView _topView;
|
|||
|
BottomView _bottomView = new BottomView();
|
|||
|
CenterView _centerView = new CenterView();
|
|||
|
StandardFrameWindow _mainWindow;
|
|||
|
|
|||
|
private bool _isLogoff;
|
|||
|
|
|||
|
private string _culture = "en-US";
|
|||
|
|
|||
|
public int PreferWidth { get; set; }
|
|||
|
public int PreferHeight { get; set; }
|
|||
|
public int PreferHeightTopPanel { get; set; }
|
|||
|
public int PreferHeightCenterPanel { get; set; }
|
|||
|
public int PreferHeightBottomPanel { get; set; }
|
|||
|
|
|||
|
public ViewManager()
|
|||
|
{
|
|||
|
PreferWidth = 1920;
|
|||
|
PreferHeight = 1020;
|
|||
|
PreferHeightTopPanel = 130;
|
|||
|
PreferHeightCenterPanel = 800;
|
|||
|
PreferHeightBottomPanel = 90;
|
|||
|
MaxSizeShow = true;
|
|||
|
}
|
|||
|
|
|||
|
public void InitWindow()
|
|||
|
{
|
|||
|
_views = new UILayoutParser(UILayoutFile);
|
|||
|
|
|||
|
if (_views.PreferWidth > 0)
|
|||
|
PreferWidth = _views.PreferWidth;
|
|||
|
|
|||
|
if (_views.PreferTopPanelHeight > 0)
|
|||
|
PreferHeightTopPanel = _views.PreferTopPanelHeight;
|
|||
|
if (_views.PreferCenterPanelHeight > 0)
|
|||
|
PreferHeightCenterPanel = _views.PreferCenterPanelHeight;
|
|||
|
if (_views.PreferBottomPanelHeight > 0)
|
|||
|
PreferHeightBottomPanel = _views.PreferBottomPanelHeight;
|
|||
|
PreferHeight = PreferHeightTopPanel + PreferHeightCenterPanel + PreferHeightBottomPanel;
|
|||
|
|
|||
|
try
|
|||
|
{
|
|||
|
using (var scope = UiApplication.Instance.Container.BeginLifetimeScope())
|
|||
|
{
|
|||
|
var type = Assembly.Load(_views.TitleView.AssemblyName).GetType(_views.TitleView.ViewClass);
|
|||
|
_topView = scope.Resolve(type) as ITopView;
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception )
|
|||
|
{
|
|||
|
throw new ApplicationException(string.Format("在程序集{0}中,没有找到{1},请检查UILayout配置文件中的设置", ViewAssembly, _views.TitleView.ViewClass));
|
|||
|
}
|
|||
|
UserControl uc = (UserControl)_topView;
|
|||
|
|
|||
|
_bottomView.CreateMenu(_views.NavigationView);
|
|||
|
_bottomView.ButtonClicked += new Action<string>(_bottomView_ButtonClicked);
|
|||
|
|
|||
|
_centerView.CreateView(_views.NavigationView);
|
|||
|
}
|
|||
|
|
|||
|
void _bottomView_ButtonClicked(string obj)
|
|||
|
{
|
|||
|
UpdateSelection(obj, "");
|
|||
|
}
|
|||
|
|
|||
|
public void ShowMainWindow(bool visible)
|
|||
|
{
|
|||
|
InitWindow();
|
|||
|
|
|||
|
_mainWindow = new StandardFrameWindow()
|
|||
|
{
|
|||
|
TopView = _topView as UserControl,
|
|||
|
BottomView = _bottomView,
|
|||
|
CenterView = _centerView,
|
|||
|
Icon = SystemLogo,
|
|||
|
Title = SystemName,
|
|||
|
WindowState = MaxSizeShow ? WindowState.Maximized : WindowState.Normal,
|
|||
|
};
|
|||
|
|
|||
|
_mainWindow.CenterGrid.Width = PreferWidth;
|
|||
|
_mainWindow.CenterGrid.Height = PreferHeight;
|
|||
|
_mainWindow.TopRow.Height = new GridLength(PreferHeightTopPanel);
|
|||
|
_mainWindow.CenterRow.Height = new GridLength(PreferHeightCenterPanel);
|
|||
|
_mainWindow.BottomRow.Height = new GridLength(PreferHeightBottomPanel);
|
|||
|
|
|||
|
_centerView.Height = PreferHeightCenterPanel;
|
|||
|
|
|||
|
_bottomView.Height = PreferHeightBottomPanel;
|
|||
|
|
|||
|
_mainWindow.UpdateLayout();
|
|||
|
|
|||
|
UpdateSelection(_views.NavigationView[0].Id, "");
|
|||
|
_mainWindow.Closing += new System.ComponentModel.CancelEventHandler(_mainWindow_Closing);
|
|||
|
_mainWindow.Loaded += new RoutedEventHandler(_mainWindow_Loaded);
|
|||
|
|
|||
|
if (visible)
|
|||
|
_mainWindow.Show();
|
|||
|
}
|
|||
|
|
|||
|
public void Logoff()
|
|||
|
{
|
|||
|
_isLogoff = true;
|
|||
|
|
|||
|
_mainWindow.Close();
|
|||
|
}
|
|||
|
|
|||
|
void _mainWindow_Loaded(object sender, RoutedEventArgs e)
|
|||
|
{
|
|||
|
if (OnMainWindowLoaded != null)
|
|||
|
OnMainWindowLoaded();
|
|||
|
}
|
|||
|
|
|||
|
void _mainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
|||
|
{
|
|||
|
if (_isLogoff)
|
|||
|
{
|
|||
|
e.Cancel = false;
|
|||
|
System.Diagnostics.Process.Start(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);
|
|||
|
|
|||
|
Application.Current.Shutdown();
|
|||
|
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
e.Cancel = !Exit();
|
|||
|
}
|
|||
|
|
|||
|
bool Exit()
|
|||
|
{
|
|||
|
return MessageBox.Show("Are you sure you want to exit system?", SystemName, MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes;
|
|||
|
}
|
|||
|
|
|||
|
void UpdateSelection(string navigationId, string subviewId)
|
|||
|
{
|
|||
|
if (navigationId == "exit")
|
|||
|
{
|
|||
|
_mainWindow.Close();
|
|||
|
return;
|
|||
|
}
|
|||
|
_bottomView.SetSelection(navigationId);
|
|||
|
|
|||
|
_centerView.SetSelection(navigationId);
|
|||
|
|
|||
|
_topView.SetTitle(_centerView.GetCurrentViewName(_culture));
|
|||
|
}
|
|||
|
|
|||
|
public UserControl FindView(string id)
|
|||
|
{
|
|||
|
return _centerView.GetView(id);
|
|||
|
}
|
|||
|
|
|||
|
public TabItem FindTab(string id)
|
|||
|
{
|
|||
|
return _centerView.GetTab(id);
|
|||
|
}
|
|||
|
|
|||
|
public void SetViewPermission(Account.Account account)
|
|||
|
{
|
|||
|
UserControl userControl;
|
|||
|
TabItem tabItem;
|
|||
|
|
|||
|
LoginAccount = account;
|
|||
|
|
|||
|
foreach (var dic in account.Permission)
|
|||
|
{
|
|||
|
userControl = FindView(dic.Key);
|
|||
|
tabItem = FindTab(dic.Key);
|
|||
|
|
|||
|
if (userControl == null)
|
|||
|
continue;
|
|||
|
|
|||
|
switch (dic.Value)
|
|||
|
{
|
|||
|
case ViewPermission.FullyControl:
|
|||
|
case ViewPermission.ProcessOPControl:
|
|||
|
userControl.Visibility = Visibility.Visible;
|
|||
|
userControl.IsEnabled = true;
|
|||
|
break;
|
|||
|
case ViewPermission.PartlyControl:
|
|||
|
userControl.Visibility = Visibility.Visible;
|
|||
|
userControl.IsEnabled = true;
|
|||
|
break;
|
|||
|
case ViewPermission.Readonly:
|
|||
|
userControl.Visibility = Visibility.Visible;
|
|||
|
userControl.IsEnabled = dic.Key == "recipe" ? true : false;
|
|||
|
break;
|
|||
|
case ViewPermission.Invisiable:
|
|||
|
userControl.Visibility = Visibility.Hidden;
|
|||
|
tabItem.Visibility = Visibility.Hidden;
|
|||
|
tabItem.Width = 0;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
foreach (ViewItem item in _views.NavigationView)
|
|||
|
{
|
|||
|
bool enable = false;
|
|||
|
foreach (ViewItem sub in item.SubView)
|
|||
|
{
|
|||
|
foreach (var dic in account.Permission)
|
|||
|
{
|
|||
|
if (dic.Key == sub.Id && dic.Value != ViewPermission.Invisiable)
|
|||
|
{
|
|||
|
enable = true;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
_bottomView.Enable(item.Id, enable);
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
public void SetCulture(string culture)
|
|||
|
{
|
|||
|
_culture = culture;
|
|||
|
|
|||
|
if (_topView != null)
|
|||
|
_topView.SetTitle(_centerView.GetCurrentViewName(_culture));
|
|||
|
|
|||
|
_centerView.SetCulture(culture);
|
|||
|
|
|||
|
_bottomView.SetCulture(culture);
|
|||
|
|
|||
|
UpdateCultureResource(culture);
|
|||
|
}
|
|||
|
|
|||
|
private void UpdateCultureResource(string culture)
|
|||
|
{
|
|||
|
//string culture = language == 2 ? "zh-CN" : "en-US";
|
|||
|
|
|||
|
//Copy all MergedDictionarys into a auxiliar list.
|
|||
|
var dictionaryList = Application.Current.Resources.MergedDictionaries.ToList();
|
|||
|
|
|||
|
//Search for the specified culture.
|
|||
|
string requestedCulture = string.Format(@"/MECF.Framework.Common;component/Resources/Language/StringResources.{0}.xaml", culture);
|
|||
|
var resourceDictionary = dictionaryList.FirstOrDefault(d => d.Source.OriginalString == requestedCulture);
|
|||
|
|
|||
|
if (resourceDictionary == null)
|
|||
|
{
|
|||
|
//If not found, select our default language.
|
|||
|
requestedCulture = "StringResources.xaml";
|
|||
|
resourceDictionary = dictionaryList.
|
|||
|
FirstOrDefault(d => d.Source.OriginalString == requestedCulture);
|
|||
|
}
|
|||
|
|
|||
|
//If we have the requested resource, remove it from the list and place at the end.
|
|||
|
//Then this language will be our string table to use.
|
|||
|
if (resourceDictionary != null)
|
|||
|
{
|
|||
|
Application.Current.Resources.MergedDictionaries.Remove(resourceDictionary);
|
|||
|
Application.Current.Resources.MergedDictionaries.Add(resourceDictionary);
|
|||
|
}
|
|||
|
|
|||
|
//Inform the threads of the new culture.
|
|||
|
Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);
|
|||
|
Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
}
|