main
 1using gorilla.commons.utility;
 2using MoMoney.Presentation.Views;
 3
 4namespace MoMoney.Presentation.Core
 5{
 6    public interface IApplicationController
 7    {
 8        void run<Presenter>() where Presenter : IPresenter;
 9    }
10
11    public class ApplicationController : IApplicationController, ParameterizedCommand<IPresenter>
12    {
13        readonly IPresenterRegistry registered_presenters;
14        readonly IShell shell;
15
16        public ApplicationController(IPresenterRegistry registered_presenters, IShell shell)
17        {
18            this.registered_presenters = registered_presenters;
19            this.shell = shell;
20        }
21
22        public void run<Presenter>() where Presenter : IPresenter
23        {
24            run(registered_presenters.find_an_implementation_of<IPresenter, Presenter>());
25        }
26
27        public void run(IPresenter presenter)
28        {
29            presenter.run();
30            if (presenter.is_an_implementation_of<IContentPresenter>())
31            {
32                var content_presenter = presenter.downcast_to<IContentPresenter>();
33                var view = content_presenter.View;
34
35                //view.on_activated = x => content_presenter.activate();
36                //view.deactivated = x => content_presenter.deactivate();
37                //view.on_closing = x => x.Cancel = !content_presenter.can_close();
38                //view.closed = x => remove(presenter);
39
40                shell.add(view);
41            }
42        }
43    }
44}