Advertisement
Guest User

Untitled

a guest
Feb 25th, 2021
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.47 KB | None | 0 0
  1. namespace GSModuleManager
  2. {
  3.     /// <summary>
  4.     /// Klasa obsługi widoczności modułów
  5.     /// </summary>
  6.     public class ModuleController : INotifyPropertyChanged
  7.     {
  8.         #region ProperyChanged
  9.         public event PropertyChangedEventHandler PropertyChanged;
  10.         public void OnPropertyChanged(string PropertyName)
  11.         {
  12.             this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName));
  13.         }
  14.         #endregion
  15.         /// <summary>
  16.         /// Inicjuje nową instancję obiektu <see cref="ModuleController"/>
  17.         /// </summary>
  18.         public ModuleController()
  19.         {
  20.            
  21.         }
  22.  
  23.         private IModule selectedModule = null;
  24.         /// <summary>
  25.         /// Aktualnie wybrany moduł
  26.         /// </summary>
  27.         public IModule SelectedModule
  28.         {
  29.             get
  30.             {
  31.                 return selectedModule;
  32.             }
  33.             private set
  34.             {
  35.                 selectedModule = value;
  36.                 OnPropertyChanged("SelectedModule");
  37.             }
  38.         }
  39.  
  40.         /// <summary>
  41.         /// Zamyka aktualny moduł i otwiera nowy
  42.         /// </summary>
  43.         /// <param name="Module">Nowy moduł do wybrania, pozostaw NULL, aby tylko zamknąć aktualny</param>
  44.         public void Select(IModule Module)
  45.         {
  46.             if (SelectedModule != null)
  47.             {
  48.                 IModule Zamykany = SelectedModule;
  49.                 Closing?.Invoke(Zamykany, ModuleActionEventArgs.Empty(Zamykany));
  50.                 SelectedModule = null;
  51.                 Closed?.Invoke(Zamykany, ModuleActionEventArgs.Empty(Zamykany));
  52.             }
  53.             if (Module != null)
  54.             {
  55.                 Activating?.Invoke(Module, ModuleActionEventArgs.Empty(Module));
  56.                 SelectedModule = Module;
  57.                 Activated?.Invoke(Module, ModuleActionEventArgs.Empty(Module));
  58.             }
  59.         }
  60.         /// <summary>
  61.         /// Zamyka aktualny moduł i otwiera nowy
  62.         /// </summary>
  63.         /// <param name="Module">Nowy moduł do wybrania, pozostaw NULL, aby tylko zamknąć aktualny</param>
  64.         /// <param name="Args">Dodatkowe parametry</param>
  65.         public void Select(IModule Module, object Args)
  66.         {
  67.             if (SelectedModule != null)
  68.             {
  69.                 IModule Zamykany = SelectedModule;
  70.                 Closing?.Invoke(Zamykany, new ModuleActionEventArgs(Zamykany, Args));
  71.                 SelectedModule = null;
  72.                 Closed?.Invoke(Zamykany, new ModuleActionEventArgs(Zamykany, Args));
  73.             }
  74.             if (Module != null)
  75.             {
  76.                 Activating?.Invoke(Module, new ModuleActionEventArgs(Module, Args));
  77.                 SelectedModule = Module;
  78.                 Activated?.Invoke(Module, new ModuleActionEventArgs(Module, Args));
  79.             }
  80.         }
  81.  
  82.         /// <summary>
  83.         /// Informuje o otwieraniu modułu. W parametrze Sender znajduje się <see cref="IModule"/>
  84.         /// </summary>
  85.         public event EventHandler<ModuleActionEventArgs> Activating;
  86.         /// <summary>
  87.         /// Informuje o otwarciu modułu. W parametrze Sender znajduje się <see cref="IModule"/>
  88.         /// </summary>
  89.         public event EventHandler<ModuleActionEventArgs> Activated;
  90.         /// <summary>
  91.         /// Informuje o zamykaniu modułu. W parametrze Sender znajduje się <see cref="IModule"/>
  92.         /// </summary>
  93.         public event EventHandler<ModuleActionEventArgs> Closing;
  94.         /// <summary>
  95.         /// Informuje o Zamknięciu modułu. W parametrze Sender znajduje się <see cref="IModule"/>
  96.         /// </summary>
  97.         public event EventHandler<ModuleActionEventArgs> Closed;
  98.     }
  99.     /// <summary>
  100.     /// Interfejs dziedziczony przez każdy moduł
  101.     /// </summary>
  102.     public interface IModule
  103.     {
  104.         string ID { get; }
  105.        
  106.         bool Compare(IModule Module);
  107.         bool Compare(string ModuleName);
  108.     }
  109.     /// <summary>
  110.     /// Klasa przesyłana w zdarzeniach obsługujących <see cref="KontrolaWidocznosciModulow"/>
  111.     /// </summary>
  112.     public class ModuleActionEventArgs : EventArgs
  113.     {
  114.         public ModuleActionEventArgs(IModule Module, object Args)
  115.         {
  116.             this.Module = Module;
  117.             this.Args = Args;
  118.         }
  119.         public IModule Module { get; private set; }
  120.         public object Args { get; private set; }
  121.  
  122.         public new static ModuleActionEventArgs Empty(IModule Module)
  123.         {
  124.             return new ModuleActionEventArgs(Module, null);
  125.         }
  126.     }
  127.     /// <summary>
  128.     /// Konwerter nazwy moduły na stan widoczności
  129.     /// </summary>
  130.     public class ModuleVisibilityConverter : IValueConverter
  131.     {
  132.         private string module;
  133.         /// <summary>
  134.         /// Nazwa modułu do którego powiązywana będzie nazwa
  135.         /// </summary>
  136.         public string Module
  137.         {
  138.             get { return module; }
  139.             set { module = value; }
  140.         }
  141.  
  142.  
  143.         public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  144.         {
  145.             IModule current = (IModule)value;
  146.             return (current != null && Module != null && current.Compare(Module)) ? Visibility.Visible : Visibility.Collapsed;
  147.         }
  148.  
  149.         public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  150.         {
  151.             throw new NotImplementedException();
  152.         }
  153.     }
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement