| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 | 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();			_mainWindow.WindowState = WindowState.Minimized;        }		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);		}	}}
 |