123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301 |
- 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);
- }
- }
- }
|