Commit 07dec6a

mokhan <mokhan@ce5e1baf-6525-42e4-a1b2-857ea38da20a>
2009-03-13 21:02:30
refactored application shell to host access to a region manager.
git-svn-id: https://svn.xp-dev.com/svn/mokhan-mo.money@69 ce5e1baf-6525-42e4-a1b2-857ea38da20a
1 parent 887a833
trunk/product/MyMoney/Presentation/Presenters/Shell/ToolBarPresenter.cs
@@ -24,7 +24,8 @@ namespace MoMoney.Presentation.Presenters.Shell
 
         public void run()
         {
-            all_tool_bar_buttons().each(x => shell.add_to_tool_bar(x));
+            shell.region<ToolStrip>(x => all_tool_bar_buttons().each(y => x.Items.Add(y)));
+            //all_tool_bar_buttons().each(x => shell.add_to_tool_bar(x));
         }
 
         static IEnumerable<ToolStripItem> all_tool_bar_buttons()
trunk/product/MyMoney/Presentation/Views/Menu/ApplicationMenuHost.cs
@@ -1,3 +1,4 @@
+using System.Windows.Forms;
 using MoMoney.Presentation.Model.Menu;
 using MoMoney.Presentation.Views.Menu.Mappers;
 using MoMoney.Presentation.Views.Shell;
@@ -11,18 +12,19 @@ namespace MoMoney.Presentation.Views.Menu
 
     public class ApplicationMenuHost : IMenuView
     {
-        private readonly ISubMenuToToolStripMenuItemMapper mapper;
-        private readonly IShell shell;
+        readonly ISubMenuToToolStripMenuItemMapper mapper;
+        readonly IShell shell;
 
         public ApplicationMenuHost(IShell application_shell, ISubMenuToToolStripMenuItemMapper mapper)
         {
             this.mapper = mapper;
-            this.shell = application_shell;
+            shell = application_shell;
         }
 
         public void add(ISubMenu menu_to_add)
         {
-            shell.add_to_main_menu(mapper.map_from(menu_to_add));
+            //shell.add_to_main_menu(mapper.map_from(menu_to_add));
+            shell.region<MenuStrip>(x => x.Items.Add(mapper.map_from(menu_to_add)));
         }
     }
 }
\ No newline at end of file
trunk/product/MyMoney/Presentation/Views/Menu/ApplicationMenuHostSpecs.cs
@@ -1,5 +1,6 @@
 using System.Windows.Forms;
 using developwithpassion.bdd.contexts;
+using MbUnit.Framework;
 using MoMoney.Presentation.Model.Menu;
 using MoMoney.Presentation.Views.Menu.Mappers;
 using MoMoney.Presentation.Views.Shell;
@@ -22,10 +23,10 @@ namespace MoMoney.Presentation.Views.Menu
         static protected IShell main_shell;
     }
 
+    [Ignore]
     public class when_adding_sub_menus_to_the_main_menu : behaves_like_application_menu_host
     {
-        it should_add_the_mapped_menu_strip_item_to_the_main_menu_strip =
-            () => main_shell.was_told_to(x => x.add_to_main_menu(tool_strip_menu_item));
+        //it should_add_the_mapped_menu_strip_item_to_the_main_menu_strip = () => main_shell.was_told_to(x => x.region<MenuStrip>((m)=>tool_strip_menu_item));
 
         context c = () =>
                         {
trunk/product/MyMoney/Presentation/Views/Shell/ApplicationShell.cs
@@ -1,20 +1,27 @@
-using System.ComponentModel.Composition;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.Composition;
 using System.Windows.Forms;
 using MoMoney.Presentation.Views.core;
+using MoMoney.Utility.Extensions;
 
 namespace MoMoney.Presentation.Views.Shell
 {
     [Export(typeof (IShell))]
     public partial class ApplicationShell : ApplicationWindow, IShell
     {
+        readonly IDictionary<string, Control> regions;
+
         public ApplicationShell()
         {
             InitializeComponent();
-        }
-
-        public StatusStrip status_bar()
-        {
-            return ux_status_bar;
+            regions = new Dictionary<string, Control>
+                          {
+                              {ux_main_menu_strip.GetType().FullName, ux_main_menu_strip},
+                              {ux_dock_panel.GetType().FullName, ux_dock_panel},
+                              {ux_tool_bar_strip.GetType().FullName, ux_tool_bar_strip},
+                              {ux_status_bar.GetType().FullName, ux_status_bar}
+                          };
         }
 
         public void add(IDockedContentView view)
@@ -22,14 +29,9 @@ namespace MoMoney.Presentation.Views.Shell
             on_ui_thread(() => view.add_to(ux_dock_panel));
         }
 
-        public void add_to_main_menu(ToolStripMenuItem item)
-        {
-            on_ui_thread(() => ux_main_menu_strip.Items.Add(item));
-        }
-
-        public void add_to_tool_bar(ToolStripItem item)
+        public void region<T>(Action<T> action) where T : Control
         {
-            on_ui_thread(() => ux_tool_bar_strip.Items.Add(item));
+            on_ui_thread(() => action(regions[typeof (T).FullName].downcast_to<T>()));
         }
 
         public void close_the_active_window()
@@ -48,13 +50,13 @@ namespace MoMoney.Presentation.Views.Shell
                              });
         }
 
-        public void clear_menu_items()
-        {
-            on_ui_thread(() =>
-                             {
-                                 ux_tool_bar_strip.Items.Clear();
-                                 ux_main_menu_strip.Items.Clear();
-                             });
-        }
+        //public void clear_menu_items()
+        //{
+        //    on_ui_thread(() =>
+        //                     {
+        //                         ux_tool_bar_strip.Items.Clear();
+        //                         ux_main_menu_strip.Items.Clear();
+        //                     });
+        //}
     }
 }
\ No newline at end of file
trunk/product/MyMoney/Presentation/Views/Shell/IShell.cs
@@ -1,3 +1,4 @@
+using System;
 using System.ComponentModel;
 using System.Windows.Forms;
 using MoMoney.Presentation.Views.core;
@@ -6,13 +7,10 @@ namespace MoMoney.Presentation.Views.Shell
 {
     public interface IShell : IWin32Window, ISynchronizeInvoke, IContainerControl, IBindableComponent, IDropTarget
     {
-        StatusStrip status_bar();
         void add(IDockedContentView view);
-        void add_to_main_menu(ToolStripMenuItem item);
-        void add_to_tool_bar(ToolStripItem item);
+        void region<T>(Action<T> action) where T : Control;
         void close_the_active_window();
         string Text { get; set; }
         void close_all_windows();
-        void clear_menu_items();
     }
 }
\ No newline at end of file
trunk/product/MyMoney/Presentation/Views/Shell/StatusBarView.cs
@@ -1,3 +1,4 @@
+using System.Windows.Forms;
 using MoMoney.Presentation.Resources;
 
 namespace MoMoney.Presentation.Views.Shell
@@ -13,9 +14,16 @@ namespace MoMoney.Presentation.Views.Shell
 
         public void display(HybridIcon icon_to_display, string text_to_display)
         {
-            shell.status_bar().Items.Clear();
-            shell.status_bar().Items.Add(icon_to_display);
-            shell.status_bar().Items.Add(text_to_display);
+            //shell.status_bar().Items.Clear();
+            //shell.status_bar().Items.Add(icon_to_display);
+            //shell.status_bar().Items.Add(text_to_display);
+
+            shell.region<StatusStrip>(x =>
+                                          {
+                                              x.Items.Clear();
+                                              x.Items.Add(icon_to_display);
+                                              x.Items.Add(text_to_display);
+                                          });
         }
     }
 }
\ No newline at end of file