main
1using System;
2using System.Windows;
3using gorilla.utility;
4using solidware.financials.infrastructure.eventing;
5
6namespace solidware.financials.windows.ui
7{
8 public class WPFApplicationController : ApplicationController
9 {
10 RegionManager region_manager;
11 PresenterFactory factory;
12 EventAggregator event_aggregator;
13
14 public WPFApplicationController(RegionManager region_manager, PresenterFactory factory, EventAggregator event_aggregator)
15 {
16 this.region_manager = region_manager;
17 this.event_aggregator = event_aggregator;
18 this.factory = factory;
19 }
20
21 public void add_tab<Presenter, View>() where Presenter : TabPresenter where View : Tab<Presenter>, new()
22 {
23 var presenter = open<Presenter>();
24 var view = new View();
25 view.bind_to(presenter);
26 region_manager.region(new TabRegionConfiguration(presenter, view.downcast_to<FrameworkElement>()));
27 }
28
29 public void load_tab<Presenter, View>(Presenter presenter) where Presenter : TabPresenter where View : Tab<Presenter>, new()
30 {
31 event_aggregator.subscribe(presenter);
32 presenter.present();
33 var view = new View();
34 view.bind_to(presenter);
35 region_manager.region(new TabRegionConfiguration(presenter, view.downcast_to<FrameworkElement>()));
36 }
37
38 public void load_region<TPresenter, Region>() where TPresenter : Presenter where Region : FrameworkElement, View<TPresenter>, new()
39 {
40 configure_region<Region>(x =>
41 {
42 x.DataContext = open<TPresenter>();
43 });
44 }
45
46 void configure_region<TRegion>(Action<TRegion> configure) where TRegion : UIElement
47 {
48 region_manager.region(configure);
49 }
50
51 TPresenter open<TPresenter>() where TPresenter : Presenter
52 {
53 var presenter = factory.create<TPresenter>();
54 event_aggregator.subscribe(presenter);
55 presenter.present();
56 return presenter;
57 }
58 }
59}