diff --git a/MaterialModernWPF/App.config b/MaterialModernWPF/App.config index 3fa4d10..0df9a3c 100644 --- a/MaterialModernWPF/App.config +++ b/MaterialModernWPF/App.config @@ -13,6 +13,10 @@ + + + + diff --git a/MaterialModernWPF/App.xaml b/MaterialModernWPF/App.xaml index 51e6529..8624815 100644 --- a/MaterialModernWPF/App.xaml +++ b/MaterialModernWPF/App.xaml @@ -1,8 +1,9 @@ - + xmlns:dragablz="http://dragablz.net/winfx/xaml/dragablz" + xmlns:prism="http://prismlibrary.com/"> @@ -11,12 +12,11 @@ - - - - + + + + + diff --git a/MaterialModernWPF/Module/MainView.xaml.cs b/MaterialModernWPF/Module/MainView.xaml.cs new file mode 100644 index 0000000..5b5c512 --- /dev/null +++ b/MaterialModernWPF/Module/MainView.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace MaterialModernWPF.Module +{ + /// + /// Interaktionslogik für MainView.xaml + /// + public partial class MainView : UserControl + { + public MainView() + { + InitializeComponent(); + } + } +} diff --git a/MaterialModernWPF/Module/MainViewModel.cs b/MaterialModernWPF/Module/MainViewModel.cs new file mode 100644 index 0000000..d92e84c --- /dev/null +++ b/MaterialModernWPF/Module/MainViewModel.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; +using DryIoc; +using MaterialModernWPF.Service; + +namespace MaterialModernWPF.Module +{ + public class MainViewModel + { + private readonly CalculationPackageContainer _container; + + public MainViewModel(CalculationPackageContainer container) + { + _container = container; + } + + public IEnumerable Packages => _container.CalculationPackages; + } +} \ No newline at end of file diff --git a/MaterialModernWPF/Service/AdditionalMoments.cs b/MaterialModernWPF/Service/AdditionalMoments.cs new file mode 100644 index 0000000..99c0710 --- /dev/null +++ b/MaterialModernWPF/Service/AdditionalMoments.cs @@ -0,0 +1,17 @@ +using System; +using Prism.Events; + +namespace MaterialModernWPF.Service +{ + public class AdditionalMoments : CalculationPackage + { + public AdditionalMoments(IEventAggregator eventAggregator) : base(eventAggregator) + { + Name = "Additional moments"; + CalculationViewType = typeof(DetailedGeometryView); + } + + public override string Name { get; } + public override Type CalculationViewType { get; } + } +} \ No newline at end of file diff --git a/MaterialModernWPF/Service/CalculationPackage.cs b/MaterialModernWPF/Service/CalculationPackage.cs new file mode 100644 index 0000000..324458d --- /dev/null +++ b/MaterialModernWPF/Service/CalculationPackage.cs @@ -0,0 +1,37 @@ +using System; +using System.Windows.Controls; +using Prism.Events; + +namespace MaterialModernWPF.Service +{ + public abstract class CalculationPackage + { + private readonly IEventAggregator _eventAggregator; + private bool _isSelected; + + public CalculationPackage(IEventAggregator eventAggregator) + { + _eventAggregator = eventAggregator; + } + + public abstract string Name { get; } + + public bool IsSelected + { + get => _isSelected; + set + { + if (Equals(_isSelected, value)) return; + _isSelected = value; + _eventAggregator.GetEvent().Publish((this, value)); + } + } + + public abstract Type CalculationViewType { get; } + } + + public class CalculationView : UserControl + { + + } +} \ No newline at end of file diff --git a/MaterialModernWPF/Service/CalculationPackageContainer.cs b/MaterialModernWPF/Service/CalculationPackageContainer.cs new file mode 100644 index 0000000..c3e55b5 --- /dev/null +++ b/MaterialModernWPF/Service/CalculationPackageContainer.cs @@ -0,0 +1,40 @@ +using System.Linq; +using DryIoc; +using Prism.Events; +using Prism.Regions; + +namespace MaterialModernWPF.Service +{ + public class CalculationPackageContainer + { + private readonly IRegionManager _regionManager; + private readonly IResolver _resolver; + public CalculationPackage[] CalculationPackages { get; } + + public CalculationPackageContainer( + IEventAggregator eventAggregator, IRegionManager regionManager, + IResolver resolver) + { + _regionManager = regionManager; + _resolver = resolver; + CalculationPackages = resolver.ResolveMany().ToArray(); + eventAggregator.GetEvent().Subscribe(SelectionChanged); + } + + private void SelectionChanged((CalculationPackage sender, bool isSelected) payload) + { + var viewKey = payload.sender.CalculationViewType.FullName; + var region = _regionManager.Regions[Constants.PackagesRegion]; + if (payload.isSelected) + { + var view = _resolver.Resolve(payload.sender.CalculationViewType); + region.Add(view, viewKey); + } + else + { + var view = region.GetView(viewKey); + region.Remove(view); + } + } + } +} \ No newline at end of file diff --git a/MaterialModernWPF/Service/CalculationPackageSelectionChangedEvent.cs b/MaterialModernWPF/Service/CalculationPackageSelectionChangedEvent.cs new file mode 100644 index 0000000..e7470ff --- /dev/null +++ b/MaterialModernWPF/Service/CalculationPackageSelectionChangedEvent.cs @@ -0,0 +1,9 @@ +using Prism.Events; + +namespace MaterialModernWPF.Service +{ + public class CalculationPackageSelectionChangedEvent : PubSubEvent<(CalculationPackage, bool)> + { + + } +} \ No newline at end of file diff --git a/MaterialModernWPF/Service/DetailedGeometryPackage.cs b/MaterialModernWPF/Service/DetailedGeometryPackage.cs new file mode 100644 index 0000000..d4f6ef9 --- /dev/null +++ b/MaterialModernWPF/Service/DetailedGeometryPackage.cs @@ -0,0 +1,17 @@ +using System; +using Prism.Events; + +namespace MaterialModernWPF.Service +{ + public class DetailedGeometryPackage : CalculationPackage + { + public DetailedGeometryPackage(IEventAggregator eventAggregator) : base(eventAggregator) + { + Name = "Detailed Geometry"; + CalculationViewType = typeof(DetailedGeometryView); + } + + public override string Name { get; } + public override Type CalculationViewType { get; } + } +} \ No newline at end of file diff --git a/MaterialModernWPF/Service/DetailedGeometryView.xaml b/MaterialModernWPF/Service/DetailedGeometryView.xaml new file mode 100644 index 0000000..c65b95a --- /dev/null +++ b/MaterialModernWPF/Service/DetailedGeometryView.xaml @@ -0,0 +1,14 @@ + + + + + diff --git a/MaterialModernWPF/Service/DetailedGeometryView.xaml.cs b/MaterialModernWPF/Service/DetailedGeometryView.xaml.cs new file mode 100644 index 0000000..dfef822 --- /dev/null +++ b/MaterialModernWPF/Service/DetailedGeometryView.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace MaterialModernWPF.Service +{ + /// + /// Interaktionslogik für DetailedGeometryView.xaml + /// + public partial class DetailedGeometryView : CalculationView + { + public DetailedGeometryView() + { + InitializeComponent(); + } + } +} diff --git a/MaterialModernWPF/Shell.xaml b/MaterialModernWPF/Shell.xaml deleted file mode 100644 index 024368b..0000000 --- a/MaterialModernWPF/Shell.xaml +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + +