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}