Commit 7f73942
Changed files (75)
trunk
build
product
MyMoney
Infrastructure
eventing
Presentation
Context
Databindings
Model
Menu
messages
Projects
Presenters
Navigation
reporting
Resources
Views
billing
income
Navigation
Testing
win.forms
trunk/build/resources/images/company_details.png
Binary file
trunk/build/resources/images/company_details_disabled.png
Binary file
trunk/build/resources/images/company_details_selected.png
Binary file
trunk/build/resources/images/generate_report.png
Binary file
trunk/build/resources/images/generate_report_disabled.png
Binary file
trunk/build/resources/images/generate_report_selected.png
Binary file
trunk/build/resources/images/home.png
Binary file
trunk/build/resources/images/new_file.png
Binary file
trunk/build/resources/images/new_file_selected.png
Binary file
trunk/build/resources/images/open_file.png
Binary file
trunk/build/resources/images/open_file_selected.png
Binary file
trunk/build/resources/images/plus.gif
Binary file
trunk/build/resources/images/unsaved.gif
Binary file
trunk/build/resources/images/welcome.png
Binary file
trunk/product/MyMoney/Infrastructure/eventing/event_aggregator.cs โ trunk/product/MyMoney/Infrastructure/eventing/EventAggregator.cs
@@ -13,11 +13,11 @@ namespace MoMoney.Infrastructure.eventing
}
[Singleton]
- public class event_aggregator : IEventAggregator
+ public class EventAggregator : IEventAggregator
{
private readonly IDictionary<string, HashSet<object>> subscribers;
- public event_aggregator()
+ public EventAggregator()
{
subscribers = new Dictionary<string, HashSet<object>>();
}
trunk/product/MyMoney/Presentation/Context/the_application_context.cs
@@ -12,7 +12,7 @@ namespace MoMoney.Presentation.Context
IExitCommand exit_command,
ILoadApplicationShellCommand command)
{
- shell_view.downcast_to<Form>().Closed += delegate { exit_command.run(); };
+ shell_view.downcast_to<Form>().Closed += ((sender, args) => exit_command.run());
MainForm = shell_view.downcast_to<Form>();
command.run();
}
trunk/product/MyMoney/Presentation/Views/listbox_extensions.cs โ trunk/product/MyMoney/Presentation/Databindings/listbox_extensions.cs
@@ -3,7 +3,7 @@ using System.Windows.Forms;
using ComponentFactory.Krypton.Toolkit;
using MoMoney.Utility.Extensions;
-namespace MoMoney.Presentation.Views
+namespace MoMoney.Presentation.Databindings
{
public static class listbox_extensions
{
trunk/product/MyMoney/Presentation/Model/keyboard/shortcut_key.cs
@@ -1,24 +0,0 @@
-using System.Windows.Forms;
-
-namespace MoMoney.Presentation.Model.keyboard
-{
- public class shortcut_key
- {
- private readonly Keys key;
-
- public shortcut_key(Keys key)
- {
- this.key = key;
- }
-
- public shortcut_key and(shortcut_key other_key)
- {
- return new shortcut_key(key | other_key.key);
- }
-
- public static implicit operator Keys(shortcut_key key_to_convert)
- {
- return key_to_convert.key;
- }
- }
-}
\ No newline at end of file
trunk/product/MyMoney/Presentation/Model/keyboard/shortcut_keys.cs
@@ -2,15 +2,15 @@ using System.Windows.Forms;
namespace MoMoney.Presentation.Model.keyboard
{
- public class shortcut_keys
+ public static class shortcut_keys
{
- public static readonly shortcut_key control = new shortcut_key(Keys.Control);
- public static readonly shortcut_key alt = new shortcut_key(Keys.Alt);
- public static readonly shortcut_key none = new shortcut_key(Keys.None);
- public static readonly shortcut_key L = new shortcut_key(Keys.L);
- public static readonly shortcut_key N = new shortcut_key(Keys.N);
- public static readonly shortcut_key O = new shortcut_key(Keys.O);
- public static readonly shortcut_key S = new shortcut_key(Keys.S);
- public static readonly shortcut_key X = new shortcut_key(Keys.X);
+ public static readonly ShortcutKey control = new ShortcutKey(Keys.Control);
+ public static readonly ShortcutKey alt = new ShortcutKey(Keys.Alt);
+ public static readonly ShortcutKey none = new ShortcutKey(Keys.None);
+ public static readonly ShortcutKey L = new ShortcutKey(Keys.L);
+ public static readonly ShortcutKey N = new ShortcutKey(Keys.N);
+ public static readonly ShortcutKey O = new ShortcutKey(Keys.O);
+ public static readonly ShortcutKey S = new ShortcutKey(Keys.S);
+ public static readonly ShortcutKey X = new ShortcutKey(Keys.X);
}
}
\ No newline at end of file
trunk/product/MyMoney/Presentation/Model/keyboard/ShortcutKey.cs
@@ -0,0 +1,24 @@
+using System.Windows.Forms;
+
+namespace MoMoney.Presentation.Model.keyboard
+{
+ public class ShortcutKey
+ {
+ private readonly Keys key;
+
+ public ShortcutKey(Keys key)
+ {
+ this.key = key;
+ }
+
+ public ShortcutKey and(ShortcutKey other_key)
+ {
+ return new ShortcutKey(key | other_key.key);
+ }
+
+ public static implicit operator Keys(ShortcutKey key_to_convert)
+ {
+ return key_to_convert.key;
+ }
+ }
+}
\ No newline at end of file
trunk/product/MyMoney/Presentation/Model/Menu/File/Commands/close_project_command.cs โ trunk/product/MyMoney/Presentation/Model/Menu/File/Commands/CloseProjectCommand.cs
@@ -8,13 +8,13 @@ namespace MoMoney.Presentation.Model.Menu.File.Commands
{
}
- public class close_project_command : ICloseCommand
+ public class CloseProjectCommand : ICloseCommand
{
readonly IShell shell;
readonly IProject project;
readonly ISaveChangesCommand command;
- public close_project_command(IShell shell, IProject project, ISaveChangesCommand command)
+ public CloseProjectCommand(IShell shell, IProject project, ISaveChangesCommand command)
{
this.shell = shell;
this.command = command;
@@ -28,13 +28,13 @@ namespace MoMoney.Presentation.Model.Menu.File.Commands
public void saved()
{
- project.start_a_new_project();
+ project.close();
shell.close_all_windows();
}
public void not_saved()
{
- project.start_a_new_project();
+ project.close();
shell.close_all_windows();
}
trunk/product/MyMoney/Presentation/Model/Menu/File/Commands/new_command_specs.cs
@@ -7,13 +7,13 @@ using MoMoney.Testing.spechelpers.core;
namespace MoMoney.Presentation.Model.Menu.File.Commands
{
- [Concern(typeof (new_command))]
- public abstract class behaves_like_new_command : concerns_for<INewCommand, new_command>
+ [Concern(typeof (NewCommand))]
+ public abstract class behaves_like_new_command : concerns_for<INewCommand, NewCommand>
{
- public override INewCommand create_sut()
- {
- return new new_command(current_project, command, save_changes_command);
- }
+ //public override INewCommand create_sut()
+ //{
+ // return new NewCommand(current_project, command, save_changes_command);
+ //}
context c = () =>
{
trunk/product/MyMoney/Presentation/Model/Menu/File/Commands/new_command.cs โ trunk/product/MyMoney/Presentation/Model/Menu/File/Commands/NewCommand.cs
@@ -8,13 +8,13 @@ namespace MoMoney.Presentation.Model.Menu.File.Commands
{
}
- public class new_command : INewCommand
+ public class NewCommand : INewCommand
{
readonly IProject current_project;
readonly ILoadApplicationShellCommand command;
readonly ISaveChangesCommand save_changes_command;
- public new_command(IProject current_project, ILoadApplicationShellCommand command, ISaveChangesCommand save_changes_command)
+ public NewCommand(IProject current_project, ILoadApplicationShellCommand command, ISaveChangesCommand save_changes_command)
{
this.current_project = current_project;
this.save_changes_command = save_changes_command;
trunk/product/MyMoney/Presentation/Model/Menu/File/Commands/open_command.cs โ trunk/product/MyMoney/Presentation/Model/Menu/File/Commands/OpenCommand.cs
@@ -9,14 +9,14 @@ namespace MoMoney.Presentation.Model.Menu.File.Commands
{
}
- public class open_command : IOpenCommand
+ public class OpenCommand : IOpenCommand
{
readonly ISelectFileToOpenDialog view;
readonly IProject project;
readonly ILoadApplicationShellCommand command;
readonly ISaveChangesCommand save_changes_command;
- public open_command(ISelectFileToOpenDialog view, IProject project, ILoadApplicationShellCommand command,
+ public OpenCommand(ISelectFileToOpenDialog view, IProject project, ILoadApplicationShellCommand command,
ISaveChangesCommand save_changes_command)
{
this.view = view;
trunk/product/MyMoney/Presentation/Model/Menu/File/Commands/open_command_specs.cs โ trunk/product/MyMoney/Presentation/Model/Menu/File/Commands/OpenCommandSpecs.cs
@@ -8,12 +8,12 @@ using MoMoney.Testing.spechelpers.core;
namespace MoMoney.Presentation.Model.Menu.File.Commands
{
- [Concern(typeof (open_command))]
- public abstract class behaves_like_command_to_open_a_project : concerns_for<IOpenCommand, open_command>
+ [Concern(typeof (OpenCommand))]
+ public abstract class behaves_like_command_to_open_a_project : concerns_for<IOpenCommand, OpenCommand>
{
public override IOpenCommand create_sut()
{
- return new open_command(view, project, command, save_changes_command);
+ return new OpenCommand(view, project, command, save_changes_command);
}
context c = () =>
trunk/product/MyMoney/Presentation/Model/Menu/File/file_menu.cs โ trunk/product/MyMoney/Presentation/Model/Menu/File/FileMenu.cs
@@ -1,6 +1,7 @@
using System.Collections.Generic;
using MoMoney.Presentation.Model.keyboard;
using MoMoney.Presentation.Model.Menu.File.Commands;
+using MoMoney.Presentation.Model.Projects;
using MoMoney.Presentation.Resources;
namespace MoMoney.Presentation.Model.Menu.File
@@ -9,8 +10,15 @@ namespace MoMoney.Presentation.Model.Menu.File
{
}
- public class file_menu : IFileMenu
+ public class FileMenu : IFileMenu
{
+ readonly IProject project;
+
+ public FileMenu(IProject project)
+ {
+ this.project = project;
+ }
+
public IEnumerable<IMenuItem> all_menu_items()
{
yield return create
@@ -34,6 +42,7 @@ namespace MoMoney.Presentation.Model.Menu.File
.named("&Save")
.that_executes<ISaveCommand>()
.represented_by(ApplicationIcons.SaveProject)
+ .can_be_clicked_when(() => project.has_unsaved_changes())
.can_be_accessed_with(shortcut_keys.control.and(shortcut_keys.S))
.build();
@@ -41,12 +50,14 @@ namespace MoMoney.Presentation.Model.Menu.File
.a_menu_item()
.named("Save &As...")
.that_executes<ISaveAsCommand>()
+ //.can_be_clicked_when(() => project.has_unsaved_changes())
.represented_by(ApplicationIcons.SaveProjectAs)
.build();
yield return create
.a_menu_item()
.named("&Close")
+ //.can_be_clicked_when(() => project.is_open())
.that_executes<ICloseCommand>()
.build();
trunk/product/MyMoney/Presentation/Model/Menu/create.cs
@@ -1,17 +1,18 @@
using MoMoney.Infrastructure.Container;
+using MoMoney.Infrastructure.eventing;
namespace MoMoney.Presentation.Model.Menu
{
- public class create
+ public static class create
{
public static IMenuItemBuilder a_menu_item()
{
- return new menu_item_builder(resolve.dependency_for<IDependencyRegistry>());
+ return new MenuItemBuilder(resolve.dependency_for<IDependencyRegistry>(),resolve.dependency_for<IEventAggregator>());
}
public static IMenuItem a_menu_item_separator()
{
- return new menu_item_separator();
+ return new MenuItemSeparator();
}
public static IToolbarItemBuilder a_tool_bar_item()
trunk/product/MyMoney/Presentation/Model/Menu/MenuItem.cs
@@ -0,0 +1,60 @@
+using System;
+using System.Windows.Forms;
+using MoMoney.Presentation.Model.keyboard;
+using MoMoney.Presentation.Resources;
+
+namespace MoMoney.Presentation.Model.Menu
+{
+ public interface IMenuItem
+ {
+ string name { get; }
+ void click();
+ ToolStripItem build();
+ System.Windows.Forms.MenuItem build_menu_item();
+ }
+
+ public class MenuItem : IMenuItem
+ {
+ public MenuItem(string name, Action command, HybridIcon underlying_icon, ShortcutKey key,
+ Func<bool> can_be_clicked)
+ {
+ this.name = name;
+ this.command = command;
+ this.underlying_icon = underlying_icon;
+ this.key = key;
+ this.can_be_clicked = can_be_clicked;
+ }
+
+ public string name { get; private set; }
+ Action command { get; set; }
+ HybridIcon underlying_icon { get; set; }
+ ShortcutKey key { get; set; }
+ readonly Func<bool> can_be_clicked;
+ ToolStripMenuItem tool_strip_menu_item;
+ System.Windows.Forms.MenuItem menu_item;
+
+ public void click()
+ {
+ command();
+ }
+
+ public ToolStripItem build()
+ {
+ tool_strip_menu_item = new ToolStripMenuItem(name);
+ tool_strip_menu_item.Click += ((o, e) => click());
+ tool_strip_menu_item.Image = underlying_icon;
+ tool_strip_menu_item.ShortcutKeys = key;
+ tool_strip_menu_item.Enabled = can_be_clicked();
+ return tool_strip_menu_item;
+ }
+
+ public System.Windows.Forms.MenuItem build_menu_item()
+ {
+ menu_item = new System.Windows.Forms.MenuItem(name);
+ menu_item.Click += ((sender, e) => click());
+ menu_item.ShowShortcut = true;
+ menu_item.Enabled = can_be_clicked();
+ return menu_item;
+ }
+ }
+}
\ No newline at end of file
trunk/product/MyMoney/Presentation/Model/Menu/menu_item_builder.cs โ trunk/product/MyMoney/Presentation/Model/Menu/MenuItemBuilder.cs
@@ -1,5 +1,6 @@
using System;
using MoMoney.Infrastructure.Container;
+using MoMoney.Infrastructure.eventing;
using MoMoney.Presentation.Model.keyboard;
using MoMoney.Presentation.Resources;
using MoMoney.Utility.Core;
@@ -12,19 +13,23 @@ namespace MoMoney.Presentation.Model.Menu
IMenuItemBuilder that_executes<TheCommand>() where TheCommand : ICommand;
IMenuItemBuilder that_executes(Action action);
IMenuItemBuilder represented_by(HybridIcon project);
- IMenuItemBuilder can_be_accessed_with(shortcut_key hot_key);
+ IMenuItemBuilder can_be_accessed_with(ShortcutKey hot_key);
+ IMenuItemBuilder can_be_clicked_when(Func<bool> predicate);
IMenuItem build();
}
- public class menu_item_builder : IMenuItemBuilder
+ public class MenuItemBuilder : IMenuItemBuilder
{
readonly IDependencyRegistry registry;
+ Func<bool> can_be_clicked = () => true;
+ readonly IEventAggregator broker;
- public menu_item_builder(IDependencyRegistry registry)
+ public MenuItemBuilder(IDependencyRegistry registry, IEventAggregator broker)
{
name_of_the_menu = "Unknown";
command_to_execute = () => { };
this.registry = registry;
+ this.broker = broker;
icon = ApplicationIcons.Empty;
key = shortcut_keys.none;
}
@@ -32,7 +37,7 @@ namespace MoMoney.Presentation.Model.Menu
public string name_of_the_menu { get; private set; }
public Action command_to_execute { get; private set; }
public HybridIcon icon { get; private set; }
- public shortcut_key key { get; private set; }
+ public ShortcutKey key { get; private set; }
public IMenuItemBuilder named(string name)
{
@@ -58,15 +63,21 @@ namespace MoMoney.Presentation.Model.Menu
return this;
}
- public IMenuItemBuilder can_be_accessed_with(shortcut_key hot_key)
+ public IMenuItemBuilder can_be_accessed_with(ShortcutKey hot_key)
{
key = hot_key;
return this;
}
+ public IMenuItemBuilder can_be_clicked_when(Func<bool> predicate)
+ {
+ can_be_clicked = predicate;
+ return this;
+ }
+
public IMenuItem build()
{
- return new menu_item(name_of_the_menu, command_to_execute, icon, key);
+ return new MenuItem(name_of_the_menu, command_to_execute, icon, key, can_be_clicked);
}
}
}
\ No newline at end of file
trunk/product/MyMoney/Presentation/Model/Menu/MenuItemSeparator.cs
@@ -0,0 +1,23 @@
+using System.Windows.Forms;
+
+namespace MoMoney.Presentation.Model.Menu
+{
+ internal class MenuItemSeparator : IMenuItem
+ {
+ public string name { get; private set; }
+
+ public void click()
+ {
+ }
+
+ public ToolStripItem build()
+ {
+ return new ToolStripSeparator();
+ }
+
+ public System.Windows.Forms.MenuItem build_menu_item()
+ {
+ return new System.Windows.Forms.MenuItem("----------");
+ }
+ }
+}
\ No newline at end of file
trunk/product/MyMoney/Presentation/Model/Menu/sub_menu_registry.cs โ trunk/product/MyMoney/Presentation/Model/Menu/SubMenuRegistry.cs
@@ -7,15 +7,16 @@ using MoMoney.Presentation.Model.Menu.window;
namespace MoMoney.Presentation.Model.Menu
{
public interface ISubMenuRegistry : IRegistry<ISubMenu>
- {}
+ {
+ }
- public class sub_menu_registry : ISubMenuRegistry
+ public class SubMenuRegistry : ISubMenuRegistry
{
- private readonly IFileMenu file_menu;
- private readonly IWindowMenu window_menu;
- private readonly IHelpMenu help_menu;
+ readonly IFileMenu file_menu;
+ readonly IWindowMenu window_menu;
+ readonly IHelpMenu help_menu;
- public sub_menu_registry(IFileMenu file_menu, IWindowMenu window_menu, IHelpMenu help_menu)
+ public SubMenuRegistry(IFileMenu file_menu, IWindowMenu window_menu, IHelpMenu help_menu)
{
this.file_menu = file_menu;
this.window_menu = window_menu;
trunk/product/MyMoney/Presentation/Model/messages/closing_project_event.cs
@@ -0,0 +1,8 @@
+using MoMoney.Infrastructure.eventing;
+
+namespace MoMoney.Presentation.Model.messages
+{
+ public class closing_project_event : IEvent
+ {
+ }
+}
\ No newline at end of file
trunk/product/MyMoney/Presentation/Model/Projects/current_project.cs
@@ -16,6 +16,8 @@ namespace MoMoney.Presentation.Model.Projects
bool has_been_saved_at_least_once();
void save_changes();
bool has_unsaved_changes();
+ bool is_open();
+ void close();
}
[Singleton]
@@ -24,6 +26,7 @@ namespace MoMoney.Presentation.Model.Projects
readonly IDatabaseConfiguration configuration;
readonly IEventAggregator broker;
IFile current_file;
+ bool is_project_open = false;
bool changes_to_save = false;
public current_project(IDatabaseConfiguration configuration, IEventAggregator broker)
@@ -49,6 +52,7 @@ namespace MoMoney.Presentation.Model.Projects
public void start_a_new_project()
{
+ is_project_open = true;
current_file = null;
configuration.change_path_to((ApplicationFile) Path.GetTempFileName());
changes_to_save = false;
@@ -83,6 +87,18 @@ namespace MoMoney.Presentation.Model.Projects
return changes_to_save;
}
+ public bool is_open()
+ {
+ return is_project_open;
+ }
+
+ public void close()
+ {
+ is_project_open = false;
+ changes_to_save = false;
+ broker.publish<closing_project_event>();
+ }
+
void ensure_that_a_path_to_save_to_has_been_specified()
{
if (!has_been_saved_at_least_once())
trunk/product/MyMoney/Presentation/Presenters/billing/add_bill_payment_presenter.cs โ trunk/product/MyMoney/Presentation/Presenters/billing/AddBillPaymentPresenter.cs
@@ -13,12 +13,12 @@ namespace MoMoney.Presentation.Presenters.billing
void submit_bill_payment(add_new_bill_dto dto);
}
- public class add_bill_payment_presenter : IAddBillPaymentPresenter
+ public class AddBillPaymentPresenter : IAddBillPaymentPresenter
{
private readonly IAddBillPaymentView view;
private readonly IBillingTasks tasks;
- public add_bill_payment_presenter(IAddBillPaymentView view, IBillingTasks tasks)
+ public AddBillPaymentPresenter(IAddBillPaymentView view, IBillingTasks tasks)
{
this.view = view;
this.tasks = tasks;
trunk/product/MyMoney/Presentation/Presenters/billing/view_all_bills_presenter.cs โ trunk/product/MyMoney/Presentation/Presenters/billing/ViewAllBillsPresenter.cs
@@ -8,14 +8,15 @@ using MoMoney.Utility.Extensions;
namespace MoMoney.Presentation.Presenters.billing
{
public interface IViewAllBillsPresenter : IContentPresenter
- {}
+ {
+ }
- public class view_all_bills_presenter : IViewAllBillsPresenter
+ public class ViewAllBillsPresenter : IViewAllBillsPresenter
{
- private readonly IViewAllBills view;
- private readonly IBillingTasks tasks;
+ readonly IViewAllBills view;
+ readonly IBillingTasks tasks;
- public view_all_bills_presenter(IViewAllBills view, IBillingTasks tasks)
+ public ViewAllBillsPresenter(IViewAllBills view, IBillingTasks tasks)
{
this.view = view;
this.tasks = tasks;
@@ -27,11 +28,12 @@ namespace MoMoney.Presentation.Presenters.billing
tasks
.all_bills()
.map_all_using(
- x => new bill_information_dto {
- company_name = x.company_to_pay.name,
- the_amount_owed = x.the_amount_owed.ToString(),
- due_date = x.due_date.to_date_time(),
- }));
+ x => new bill_information_dto
+ {
+ company_name = x.company_to_pay.name,
+ the_amount_owed = x.the_amount_owed.ToString(),
+ due_date = x.due_date.to_date_time(),
+ }));
}
IDockedContentView IContentPresenter.View
trunk/product/MyMoney/Presentation/Presenters/income/add_new_income_presenter.cs โ trunk/product/MyMoney/Presentation/Presenters/income/AddNewIncomePresenter.cs
@@ -15,12 +15,12 @@ namespace MoMoney.Presentation.Presenters.income
void submit_new(income_submission_dto income);
}
- public class add_new_income_presenter : IAddNewIncomePresenter
+ public class AddNewIncomePresenter : IAddNewIncomePresenter
{
private readonly IAddNewIncomeView view;
private readonly IIncomeTasks tasks;
- public add_new_income_presenter(IAddNewIncomeView view, IIncomeTasks tasks)
+ public AddNewIncomePresenter(IAddNewIncomeView view, IIncomeTasks tasks)
{
this.view = view;
this.tasks = tasks;
trunk/product/MyMoney/Presentation/Presenters/income/add_new_income_presenter_specs.cs โ trunk/product/MyMoney/Presentation/Presenters/income/AddNewIncomePresenterSpecs.cs
@@ -12,14 +12,9 @@ using MoMoney.Testing.spechelpers.core;
namespace MoMoney.Presentation.Presenters.income
{
- [Concern(typeof (add_new_income_presenter))]
- public abstract class behaves_like_add_new_income_presenter : concerns_for<IAddNewIncomePresenter, add_new_income_presenter>
+ [Concern(typeof (AddNewIncomePresenter))]
+ public abstract class behaves_like_add_new_income_presenter : concerns_for<IAddNewIncomePresenter, AddNewIncomePresenter>
{
- //public override IAddNewIncomePresenter create_sut()
- //{
- // return new add_new_income_presenter(view, tasks);
- //}
-
context c = () =>
{
view = the_dependency<IAddNewIncomeView>();
@@ -62,7 +57,7 @@ namespace MoMoney.Presentation.Presenters.income
static List<ICompany> companys;
}
- [Concern(typeof (add_new_income_presenter))]
+ [Concern(typeof (AddNewIncomePresenter))]
public class when_attempting_to_submit_the_same_income_more_than_once : behaves_like_add_new_income_presenter
{
it should_inform_you_that_you_have_already_added_it =
trunk/product/MyMoney/Presentation/Presenters/income/view_income_history_presenter.cs โ trunk/product/MyMoney/Presentation/Presenters/income/ViewIncomeHistoryPresenter.cs
@@ -13,12 +13,12 @@ namespace MoMoney.Presentation.Presenters.income
{
}
- public class view_income_history_presenter : IViewIncomeHistoryPresenter
+ public class ViewIncomeHistoryPresenter : IViewIncomeHistoryPresenter
{
private readonly IViewIncomeHistory view;
private readonly IIncomeTasks tasks;
- public view_income_history_presenter(IViewIncomeHistory view, IIncomeTasks tasks)
+ public ViewIncomeHistoryPresenter(IViewIncomeHistory view, IIncomeTasks tasks)
{
this.view = view;
this.tasks = tasks;
trunk/product/MyMoney/Presentation/Presenters/Menu/main_menu_presenter.cs โ trunk/product/MyMoney/Presentation/Presenters/Menu/MainMenuPresenter.cs
@@ -9,12 +9,12 @@ namespace MoMoney.Presentation.Presenters.Menu
{
}
- public class main_menu_presenter : IMainMenuPresenter
+ public class MainMenuPresenter : IMainMenuPresenter
{
readonly IMenuView main_menu;
readonly ISubMenuRegistry registry;
- public main_menu_presenter(IMenuView main_menu, ISubMenuRegistry registry)
+ public MainMenuPresenter(IMenuView main_menu, ISubMenuRegistry registry)
{
this.main_menu = main_menu;
this.registry = registry;
trunk/product/MyMoney/Presentation/Presenters/Menu/main_menu_presenter_specs.cs โ trunk/product/MyMoney/Presentation/Presenters/Menu/MainMenuPresenterSpecs.cs
@@ -7,8 +7,8 @@ using MoMoney.Testing.spechelpers.core;
namespace MoMoney.Presentation.Presenters.Menu
{
- [Concern(typeof (main_menu_presenter))]
- public abstract class behaves_like_the_main_menu_presenter : concerns_for<IMainMenuPresenter, main_menu_presenter>
+ [Concern(typeof (MainMenuPresenter))]
+ public abstract class behaves_like_the_main_menu_presenter : concerns_for<IMainMenuPresenter, MainMenuPresenter>
{
context c = () =>
{
trunk/product/MyMoney/Presentation/Presenters/reporting/report_presenter.cs โ trunk/product/MyMoney/Presentation/Presenters/reporting/ReportPresenter.cs
@@ -13,13 +13,13 @@ namespace MoMoney.Presentation.Presenters.reporting
{
}
- public class report_presenter : IViewAllBillsReportPresenter
+ public class ReportPresenter : IViewAllBillsReportPresenter
{
- private readonly IReportViewer view;
- private readonly IViewAllBillsReport report;
- private readonly IBillingTasks tasks;
+ readonly IReportViewer view;
+ readonly IViewAllBillsReport report;
+ readonly IBillingTasks tasks;
- public report_presenter(IReportViewer view, IViewAllBillsReport report, IBillingTasks tasks)
+ public ReportPresenter(IReportViewer view, IViewAllBillsReport report, IBillingTasks tasks)
{
this.view = view;
this.tasks = tasks;
@@ -32,7 +32,7 @@ namespace MoMoney.Presentation.Presenters.reporting
view.display(report);
}
- private bill_information_dto map_from(IBill x)
+ bill_information_dto map_from(IBill x)
{
return new bill_information_dto
{
trunk/product/MyMoney/Presentation/Presenters/Shell/GettingStartedPresenter.cs
@@ -24,6 +24,7 @@ namespace MoMoney.Presentation.Presenters.Shell
public void run()
{
+ view.display();
broker.subscribe_to(this);
}
trunk/product/MyMoney/Presentation/Presenters/Shell/ToolBarPresenter.cs
@@ -27,7 +27,7 @@ namespace MoMoney.Presentation.Presenters.Shell
all_tool_bar_buttons().each(x => shell.add_to_tool_bar(x));
}
- IEnumerable<ToolStripItem> all_tool_bar_buttons()
+ static IEnumerable<ToolStripItem> all_tool_bar_buttons()
{
yield return create
.a_tool_bar_item()
trunk/product/MyMoney/Presentation/Presenters/add_company_presenter.cs โ trunk/product/MyMoney/Presentation/Presenters/AddCompanyPresenter.cs
@@ -13,12 +13,12 @@ namespace MoMoney.Presentation.Presenters
void submit(register_new_company dto);
}
- public class add_company_presenter : IAddCompanyPresenter
+ public class AddCompanyPresenter : IAddCompanyPresenter
{
private readonly IAddCompanyView view;
private readonly IBillingTasks tasks;
- public add_company_presenter(IAddCompanyView view, IBillingTasks tasks)
+ public AddCompanyPresenter(IAddCompanyView view, IBillingTasks tasks)
{
this.view = view;
this.tasks = tasks;
trunk/product/MyMoney/Presentation/Presenters/add_company_presenter_specs.cs โ trunk/product/MyMoney/Presentation/Presenters/AddCompanyPresenterSpecs.cs
@@ -8,14 +8,9 @@ using MoMoney.Testing.spechelpers.core;
namespace MoMoney.Presentation.Presenters
{
- [Concern(typeof (add_company_presenter))]
- public abstract class behaves_like_the_add_company_presenter : concerns_for<IAddCompanyPresenter, add_company_presenter>
+ [Concern(typeof (AddCompanyPresenter))]
+ public abstract class behaves_like_the_add_company_presenter : concerns_for<IAddCompanyPresenter, AddCompanyPresenter>
{
- //public override IAddCompanyPresenter create_sut()
- //{
- // return new add_company_presenter(view, tasks);
- //}
-
context c = () =>
{
view = the_dependency<IAddCompanyView>();
trunk/product/MyMoney/Presentation/Resources/ApplicationImage.cs
@@ -7,8 +7,8 @@ namespace MoMoney.Presentation.Resources
{
public class ApplicationImage : IDisposable
{
- private readonly string name_of_the_image;
- private readonly Image underlying_image;
+ readonly string name_of_the_image;
+ readonly Image underlying_image;
public ApplicationImage(string name_of_the_image)
{
@@ -28,7 +28,12 @@ namespace MoMoney.Presentation.Resources
return image_to_convert.underlying_image;
}
- private string FullPathToTheFile(ApplicationImage image_to_convert)
+ public static implicit operator Bitmap(ApplicationImage image_to_convert)
+ {
+ return new Bitmap(image_to_convert);
+ }
+
+ string FullPathToTheFile(ApplicationImage image_to_convert)
{
return Path.Combine(image_to_convert.startup_directory() + @"\images", image_to_convert.name_of_the_image);
}
trunk/product/MyMoney/Presentation/Resources/ApplicationImages.cs
@@ -5,5 +5,28 @@ namespace MoMoney.Presentation.Resources
public static readonly ApplicationImage Splash = new ApplicationImage("splash_screen.gif");
public static readonly ApplicationImage ReadingABill = new ApplicationImage("reading_a_bill.jpg");
public static readonly ApplicationImage PayingABill = new ApplicationImage("paying_a_bill.jpg");
+ public static readonly ApplicationImage Welcome = new ApplicationImage("welcome.png");
+
+ public static readonly ApplicationImage CreateNewFile = new ApplicationImage("new_file.png");
+ public static readonly ApplicationImage CreateNewFileSelected = new ApplicationImage("new_file_selected.png");
+
+ public static readonly ApplicationImage OpenExistingFile = new ApplicationImage("open_file.png");
+ public static readonly ApplicationImage OpenExistingFileSelected = new ApplicationImage("open_file_selected.png");
+
+ public static readonly ApplicationImage CompanyDetails = new ApplicationImage("company_details.png");
+
+ public static readonly ApplicationImage CompanyDetailsSelected =
+ new ApplicationImage("company_details_selected.png");
+
+ public static readonly ApplicationImage CompanyDetailsDisabled =
+ new ApplicationImage("company_details_disabled.png");
+
+ public static readonly ApplicationImage GenerateReport = new ApplicationImage("generate_report.png");
+
+ public static readonly ApplicationImage GenerateReportSelected =
+ new ApplicationImage("generate_report_selected.png");
+
+ public static readonly ApplicationImage GenerateReportDisabled =
+ new ApplicationImage("generate_report_disabled.png");
}
}
\ No newline at end of file
trunk/product/MyMoney/Presentation/Views/billing/add_bill_payment.cs
@@ -1,5 +1,6 @@
๏ปฟusing System.Collections.Generic;
using MoMoney.Domain.accounting.billing;
+using MoMoney.Presentation.Databindings;
using MoMoney.Presentation.Presenters.billing;
using MoMoney.Presentation.Presenters.billing.dto;
using MoMoney.Presentation.Views.core;
trunk/product/MyMoney/Presentation/Views/income/AddNewIncomeView.cs
@@ -2,6 +2,7 @@ using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using MoMoney.Domain.accounting.billing;
+using MoMoney.Presentation.Databindings;
using MoMoney.Presentation.Model.interaction;
using MoMoney.Presentation.Presenters.income;
using MoMoney.Presentation.Presenters.income.dto;
@@ -23,9 +24,9 @@ namespace MoMoney.Presentation.Views.income
ux_submit_button.Click += (sender, e) => presenter.submit_new(create_income());
}
- public void display(IEnumerable<ICompany> companys)
+ public void display(IEnumerable<ICompany> companies)
{
- ux_companys.bind_to(companys);
+ ux_companys.bind_to(companies);
}
public void display(IEnumerable<income_information_dto> incomes)
trunk/product/MyMoney/Presentation/Views/Menu/ApplicationMenuHost.cs
@@ -12,17 +12,17 @@ namespace MoMoney.Presentation.Views.Menu
public class ApplicationMenuHost : IMenuView
{
private readonly ISubMenuToToolStripMenuItemMapper mapper;
- private readonly IShell application_shell;
+ private readonly IShell shell;
public ApplicationMenuHost(IShell application_shell, ISubMenuToToolStripMenuItemMapper mapper)
{
this.mapper = mapper;
- this.application_shell = application_shell;
+ this.shell = application_shell;
}
public void add(ISubMenu menu_to_add)
{
- application_shell.add_to_main_menu(mapper.map_from(menu_to_add));
+ shell.add_to_main_menu(mapper.map_from(menu_to_add));
}
}
}
\ No newline at end of file
trunk/product/MyMoney/Presentation/Views/Shell/ApplicationShell.cs
@@ -1,6 +1,5 @@
๏ปฟusing System.ComponentModel.Composition;
using System.Windows.Forms;
-using MoMoney.Presentation.Resources;
using MoMoney.Presentation.Views.core;
namespace MoMoney.Presentation.Views.Shell
@@ -11,7 +10,6 @@ namespace MoMoney.Presentation.Views.Shell
public ApplicationShell()
{
InitializeComponent();
- Icon = ApplicationIcons.Application;
}
public StatusStrip status_bar()
trunk/product/MyMoney/Presentation/Views/Shell/ApplicationShellSpecs.cs
@@ -0,0 +1,24 @@
+using System;
+using jpboodhoo.bdd.contexts;
+using MoMoney.Presentation.Model.Menu.File.Commands;
+using MoMoney.Testing.spechelpers.contexts;
+using MoMoney.Testing.spechelpers.core;
+using MoMoney.Testing.win.forms;
+
+namespace MoMoney.Presentation.Views.Shell
+{
+ public class behaves_like_application_shell : concerns_for<IShell, ApplicationShell>
+ {
+ }
+
+ //public class when_the_application_shell_is_closed : behaves_like_application_shell
+ //{
+ // it should_execute_the_close_command = () => close_command.was_told_to(x => x.run());
+
+ // context c = () => { close_command = the_dependency<ICloseCommand>(); };
+
+ // because b = () => EventTrigger.trigger_event<Events.FormEvents>(x => x.OnClosed(new EventArgs()), sut);
+
+ // static ICloseCommand close_command;
+ //}
+}
\ No newline at end of file
trunk/product/MyMoney/Presentation/Views/Shell/BitmapRegion.cs
@@ -0,0 +1,125 @@
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Windows.Forms;
+
+namespace MoMoney.Presentation.Views.Shell
+{
+ public static class BitmapRegion
+ {
+ /// <summary>
+ /// Create and apply the region on the supplied control
+ /// </summary>
+ /// <param name="control">The Control object to apply the region to</param>
+ /// <param name="bitmap">The Bitmap object to create the region from</param>
+ public static void CreateControlRegion(Control control, Bitmap bitmap)
+ {
+ // Return if control and bitmap are null
+ if (control == null || bitmap == null)
+ return;
+
+ // Set our control's size to be the same as the bitmap + 6 pixels so that the borders don't affect it.
+ control.Width = bitmap.Width;
+ control.Height = bitmap.Height;
+
+ // Check if we are dealing with Form here
+ if (control is Form)
+ {
+ // Cast to a Form object
+ var form = (Form) control;
+
+ // Set our form's size to be a little larger that the bitmap just
+ // in case the form's border style is not set to none in the first place
+ form.Width += 15;
+ form.Height += 35;
+
+ // No border
+ form.FormBorderStyle = FormBorderStyle.None;
+
+ // Set bitmap as the background image
+ form.BackgroundImage = bitmap;
+
+ // Calculate the graphics path based on the bitmap supplied
+ var graphicsPath = CalculateControlGraphicsPath(bitmap);
+
+ // Apply new region
+ form.Region = new Region(graphicsPath);
+ }
+
+ // Check if we are dealing with Button here
+ else if (control is Button)
+ {
+ // Cast to a button object
+ var button = (Button) control;
+
+ // Do not show button text
+ button.Text = "";
+
+ // Change cursor to hand when over button
+ button.Cursor = Cursors.Hand;
+
+ // Set background image of button
+ button.BackgroundImage = bitmap;
+
+ // Calculate the graphics path based on the bitmap supplied
+ var graphicsPath = CalculateControlGraphicsPath(bitmap);
+
+ // Apply new region
+ button.Region = new Region(graphicsPath);
+ }
+ }
+
+ /// <summary>
+ /// Calculate the graphics path that representing the figure in the bitmap
+ /// excluding the transparent color which is the top left pixel.
+ /// </summary>
+ /// <param name="bitmap">The Bitmap object to calculate our graphics path from</param>
+ /// <returns>Calculated graphics path</returns>
+ static GraphicsPath CalculateControlGraphicsPath(Bitmap bitmap)
+ {
+ // Create GraphicsPath for our bitmap calculation
+ var graphicsPath = new GraphicsPath();
+
+ // Use the top left pixel as our transparent color
+ var colorTransparent = bitmap.GetPixel(0, 0);
+
+ // This is to store the column value where an opaque pixel is first found.
+ // This value will determine where we start scanning for trailing opaque pixels.
+ var colOpaquePixel = 0;
+
+ // Go through all rows (Y axis)
+ for (var row = 0; row < bitmap.Height; row ++)
+ {
+ // Reset value
+ colOpaquePixel = 0;
+
+ // Go through all columns (X axis)
+ for (var col = 0; col < bitmap.Width; col ++)
+ {
+ // If this is an opaque pixel, mark it and search for anymore trailing behind
+ if (bitmap.GetPixel(col, row) != colorTransparent)
+ {
+ // Opaque pixel found, mark current position
+ colOpaquePixel = col;
+
+ // Create another variable to set the current pixel position
+ var colNext = col;
+
+ // Starting from current found opaque pixel, search for anymore opaque pixels
+ // trailing behind, until a transparent pixel is found or minimum width is reached
+ for (colNext = colOpaquePixel; colNext < bitmap.Width; colNext ++)
+ if (bitmap.GetPixel(colNext, row) == colorTransparent)
+ break;
+
+ // Form a rectangle for line of opaque pixels found and add it to our graphics path
+ graphicsPath.AddRectangle(new Rectangle(colOpaquePixel, row, colNext - colOpaquePixel, 1));
+
+ // No need to scan the line of opaque pixels just found
+ col = colNext;
+ }
+ }
+ }
+ // Return calculated graphics path
+ return graphicsPath;
+ }
+ }
+}
\ No newline at end of file
trunk/product/MyMoney/Presentation/Views/Shell/NotificationIconView.cs
@@ -5,6 +5,8 @@ using MoMoney.Presentation.Model.Menu.File;
using MoMoney.Presentation.Model.Menu.Help;
using MoMoney.Presentation.Model.Menu.window;
using MoMoney.Presentation.Resources;
+using MoMoney.Utility.Extensions;
+using MenuItem=System.Windows.Forms.MenuItem;
namespace MoMoney.Presentation.Views.Shell
{
@@ -64,12 +66,9 @@ namespace MoMoney.Presentation.Views.Shell
MenuItem map_from(ISubMenu item)
{
- var toolStripMenuItem = new MenuItem(item.name);
- foreach (var menuItem in item.all_menu_items())
- {
- toolStripMenuItem.MenuItems.Add(menuItem.build_menu_item());
- }
- return toolStripMenuItem;
+ var menu_item = new MenuItem(item.name);
+ item.all_menu_items().each(x => menu_item.MenuItems.Add(x.build_menu_item()) );
+ return menu_item;
}
public void Dispose()
trunk/product/MyMoney/Presentation/Views/Shell/UnhandledErrorView.cs
@@ -1,42 +1,24 @@
-using System;
-using System.Windows.Forms;
+๏ปฟusing System;
using MoMoney.Presentation.Presenters.Shell;
+using MoMoney.Presentation.Views.core;
namespace MoMoney.Presentation.Views.Shell
{
- public class UnhandledErrorView : IUnhandledErrorView
+ public partial class UnhandledErrorView : ApplicationWindow, IUnhandledErrorView
{
- public void attach_to(IUnhandledErrorPresenter presenter)
- {
- }
-
- public void display(Exception exception)
- {
- MessageBox.Show(exception.ToString());
- }
-
- public IAsyncResult BeginInvoke(Delegate method, object[] args)
+ public UnhandledErrorView()
{
- return null;
+ InitializeComponent();
+ titled("Aw snap... an error occurred");
}
- public object EndInvoke(IAsyncResult result)
- {
- return new object();
- }
-
- public object Invoke(Delegate method, object[] args)
- {
- return new object();
- }
-
- public bool InvokeRequired
+ public void attach_to(IUnhandledErrorPresenter presenter)
{
- get { return false; }
}
- public void Dispose()
+ public void display(Exception exception)
{
+ ux_message.Text = exception.ToString();
}
}
}
\ No newline at end of file
trunk/product/MyMoney/Presentation/Views/Shell/UnhandledErrorView.Designer.cs
@@ -0,0 +1,76 @@
+๏ปฟnamespace MoMoney.Presentation.Views.Shell
+{
+ partial class UnhandledErrorView
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.ux_message = new System.Windows.Forms.TextBox();
+ this.groupBox1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // groupBox1
+ //
+ this.groupBox1.Controls.Add(this.ux_message);
+ this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.groupBox1.Location = new System.Drawing.Point(0, 0);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(709, 467);
+ this.groupBox1.TabIndex = 0;
+ this.groupBox1.TabStop = false;
+ //
+ // ux_message
+ //
+ this.ux_message.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.ux_message.Location = new System.Drawing.Point(3, 18);
+ this.ux_message.Multiline = true;
+ this.ux_message.Name = "ux_message";
+ this.ux_message.ReadOnly = true;
+ this.ux_message.Size = new System.Drawing.Size(703, 446);
+ this.ux_message.TabIndex = 0;
+ //
+ // UnhandledErrorView
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(709, 467);
+ this.Controls.Add(this.groupBox1);
+ this.Name = "UnhandledErrorView";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "UnhandledErrorView";
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.TextBox ux_message;
+ }
+}
\ No newline at end of file
trunk/product/MyMoney/Presentation/Views/Shell/UnhandledErrorView.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+</root>
\ No newline at end of file
trunk/product/MyMoney/Presentation/Views/Shell/WelcomeScreen.cs
@@ -0,0 +1,46 @@
+using MoMoney.Presentation.Model.Menu.File.Commands;
+using MoMoney.Presentation.Resources;
+using MoMoney.Presentation.Views.core;
+
+namespace MoMoney.Presentation.Views.Shell
+{
+ public partial class WelcomeScreen : ApplicationDockedWindow, IGettingStartedView
+ {
+ readonly IShell shell;
+
+ public WelcomeScreen(IShell shell)
+ {
+ this.shell = shell;
+ InitializeComponent();
+ titled("Getting Started");
+ //base.BackgroundImage = ApplicationImages.Welcome;
+ //base.BackgroundImageLayout = ImageLayout.Center;
+ }
+
+ public void display()
+ {
+ ux_open_existing_file_button.will_be_shown_as(ApplicationImages.OpenExistingFile)
+ .when_hovered_over_will_show(ApplicationImages.OpenExistingFileSelected)
+ .will_execute<IOpenCommand>(() => true)
+ .with_tool_tip("Open Existing File", "Open an existing project.");
+
+ ux_create_new_file_button.will_be_shown_as(ApplicationImages.CreateNewFile)
+ .when_hovered_over_will_show(ApplicationImages.CreateNewFileSelected)
+ .will_execute<INewCommand>(() => true)
+ .with_tool_tip("Create New File", "Create a new project.");
+
+ //ux_company_details_button
+ // .will_be_shown_as(ApplicationImages.CompanyDetails)
+ // .when_hovered_over_will_show(ApplicationImages.CompanyDetailsSelected)
+ // .will_execute<ICompanyTreeNode>(is_there_a_protocol_selected)
+ // .with_tool_tip("Company Details", "Capture the company details.");
+
+ //ux_generate_report_button
+ // .will_be_shown_as(ApplicationImages.GenerateReport)
+ // .when_hovered_over_will_show(ApplicationImages.GenerateReportSelected)
+ // .will_execute<IGenerateReportCommand>(is_there_a_protocol_selected)
+ // .with_tool_tip("Generate Report", "Generate a printable report.");
+ shell.add(this);
+ }
+ }
+}
\ No newline at end of file
trunk/product/MyMoney/Presentation/Views/Shell/WelcomeScreen.Designer.cs
@@ -0,0 +1,83 @@
+๏ปฟnamespace MoMoney.Presentation.Views.Shell
+{
+ partial class WelcomeScreen
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Component Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ this.ux_create_new_file_button = new System.Windows.Forms.Button();
+ this.ux_open_existing_file_button = new System.Windows.Forms.Button();
+ this.SuspendLayout();
+ //
+ // ux_create_new_file_button
+ //
+ this.ux_create_new_file_button.Anchor = System.Windows.Forms.AnchorStyles.None;
+ this.ux_create_new_file_button.Enabled = false;
+ this.ux_create_new_file_button.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+ this.ux_create_new_file_button.Location = new System.Drawing.Point(101, 97);
+ this.ux_create_new_file_button.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
+ this.ux_create_new_file_button.Name = "ux_create_new_file_button";
+ this.ux_create_new_file_button.Size = new System.Drawing.Size(100, 28);
+ this.ux_create_new_file_button.TabIndex = 0;
+ this.ux_create_new_file_button.Text = "Create New File";
+ this.ux_create_new_file_button.UseVisualStyleBackColor = true;
+ //
+ // ux_open_existing_file_button
+ //
+ this.ux_open_existing_file_button.Anchor = System.Windows.Forms.AnchorStyles.None;
+ this.ux_open_existing_file_button.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+ this.ux_open_existing_file_button.Location = new System.Drawing.Point(101, 164);
+ this.ux_open_existing_file_button.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
+ this.ux_open_existing_file_button.Name = "ux_open_existing_file_button";
+ this.ux_open_existing_file_button.Size = new System.Drawing.Size(100, 28);
+ this.ux_open_existing_file_button.TabIndex = 1;
+ this.ux_open_existing_file_button.Text = "Open Existing File";
+ this.ux_open_existing_file_button.UseVisualStyleBackColor = true;
+ //
+ // WelcomeScreen
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.AutoSize = true;
+ this.AutoValidate = System.Windows.Forms.AutoValidate.Disable;
+ this.BackColor = System.Drawing.Color.WhiteSmoke;
+ this.ClientSize = new System.Drawing.Size(963, 609);
+ this.Controls.Add(this.ux_open_existing_file_button);
+ this.Controls.Add(this.ux_create_new_file_button);
+ this.DoubleBuffered = true;
+ this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
+ this.Name = "WelcomeScreen";
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Button ux_create_new_file_button;
+ private System.Windows.Forms.Button ux_open_existing_file_button;
+
+ }
+}
\ No newline at end of file
trunk/product/MyMoney/Presentation/Views/Shell/WelcomeScreen.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+</root>
\ No newline at end of file
trunk/product/MyMoney/Testing/win.forms/Events.cs
@@ -32,6 +32,8 @@ namespace MoMoney.Testing.win.forms
{
void OnActivated(EventArgs e);
void OnDeactivate(EventArgs e);
+ void OnClosed(EventArgs e);
+ void OnClosing(CancelEventArgs e);
}
}
}
\ No newline at end of file
trunk/product/MyMoney/windows.ui/start_the_application.cs
@@ -21,7 +21,6 @@ namespace MoMoney.windows.ui
{
this.log().error(e);
resolve.dependency_for<IEventAggregator>().publish(new unhandled_error_occurred(e));
- //MessageBox.Show(e.ToString(), e.Message);
}
}
}
trunk/product/MyMoney/windows.ui/wire_up_the_views_in_to_the.cs
@@ -29,6 +29,7 @@ namespace MoMoney.windows.ui
{
register.singleton<IShell, ApplicationShell>();
//register.proxy(new SynchronizedViewProxyConfiguration<IShell>(), () => new ApplicationShell());
+ //register.proxy(new ShellConfiguration(), () => new ApplicationShell());
register.singleton<the_application_context, the_application_context>();
register.transient<IAboutApplicationView, AboutTheApplicationView>();
register.transient<ISplashScreenView, SplashScreenView>();
@@ -43,6 +44,8 @@ namespace MoMoney.windows.ui
register.transient<ICheckForUpdatesView, CheckForUpdatesView>();
register.singleton<INotificationIconView, NotificationIconView>();
register.transient<IStatusBarView, StatusBarView>();
+ register.transient<IUnhandledErrorView, UnhandledErrorView>();
+ register.transient<IGettingStartedView, WelcomeScreen>();
}
}
@@ -53,4 +56,19 @@ namespace MoMoney.windows.ui
item.add_interceptor<SynchronizedInterceptor<T>>();
}
}
+
+ internal class ShellConfiguration : IConfiguration<IProxyBuilder<IShell>>
+ {
+ public void configure(IProxyBuilder<IShell> item)
+ {
+ IShell shell = item.add_interceptor<SynchronizedInterceptor<IShell>>().InterceptOn;
+ shell.add(null);
+ shell.add_to_main_menu(null);
+ shell.add_to_tool_bar(null);
+ shell.clear_menu_items();
+ shell.close_all_windows();
+ shell.close_the_active_window();
+ shell.status_bar();
+ }
+ }
}
\ No newline at end of file
trunk/product/MyMoney/MyMoney.csproj
@@ -208,7 +208,7 @@
<Compile Include="Infrastructure\Container\Windsor\configuration\SubclassesForm.cs" />
<Compile Include="Infrastructure\Container\Windsor\WindsorContainerFactory.cs" />
<Compile Include="Infrastructure\debugging\Launch.cs" />
- <Compile Include="Infrastructure\eventing\event_aggregator.cs" />
+ <Compile Include="Infrastructure\eventing\EventAggregator.cs" />
<Compile Include="Infrastructure\eventing\IEvent.cs" />
<Compile Include="Infrastructure\eventing\IEventSubscriber.cs" />
<Compile Include="Infrastructure\Extensions\threading_extensions.cs" />
@@ -279,16 +279,17 @@
<Compile Include="Presentation\Model\interaction\INotification.cs" />
<Compile Include="Presentation\Model\interaction\notification_message.cs" />
<Compile Include="Presentation\Model\keyboard\shortcut_keys.cs" />
- <Compile Include="Presentation\Model\keyboard\shortcut_key.cs" />
- <Compile Include="Presentation\Model\Menu\File\Commands\close_project_command.cs" />
+ <Compile Include="Presentation\Model\keyboard\ShortcutKey.cs" />
+ <Compile Include="Presentation\Model\Menu\File\Commands\CloseProjectCommand.cs" />
<Compile Include="Presentation\Model\Menu\File\Commands\close_window_command.cs" />
<Compile Include="Presentation\Model\Menu\File\Commands\new_command_specs.cs" />
<Compile Include="Presentation\Model\Menu\File\Commands\SaveChangesCommand.cs" />
<Compile Include="Presentation\Model\Menu\File\Commands\save_as_command_specs.cs" />
<Compile Include="Presentation\Model\Menu\File\Commands\save_command_specs.cs" />
- <Compile Include="Presentation\Model\Menu\menu_item_separator.cs" />
+ <Compile Include="Presentation\Model\Menu\MenuItemSeparator.cs" />
<Compile Include="Presentation\Model\Menu\tool_bar_item_builder.cs" />
<Compile Include="Presentation\Model\Menu\window\window_menu.cs" />
+ <Compile Include="Presentation\Model\messages\closing_project_event.cs" />
<Compile Include="Presentation\Model\messages\closing_the_application.cs" />
<Compile Include="Presentation\Model\messages\unhandled_error_occurred.cs" />
<Compile Include="Presentation\Model\Navigation\branches\add_bill_payment_branch.cs" />
@@ -299,18 +300,18 @@
<Compile Include="Presentation\Core\PresenterRegistry.cs" />
<Compile Include="Presentation\Model\Menu\create.cs" />
<Compile Include="Presentation\Model\Menu\File\Commands\ExitCommand.cs" />
- <Compile Include="Presentation\Model\Menu\File\Commands\new_command.cs" />
- <Compile Include="Presentation\Model\Menu\File\Commands\open_command.cs" />
- <Compile Include="Presentation\Model\Menu\File\Commands\open_command_specs.cs" />
+ <Compile Include="Presentation\Model\Menu\File\Commands\NewCommand.cs" />
+ <Compile Include="Presentation\Model\Menu\File\Commands\OpenCommand.cs" />
+ <Compile Include="Presentation\Model\Menu\File\Commands\OpenCommandSpecs.cs" />
<Compile Include="Presentation\Model\Menu\File\Commands\save_as_command.cs" />
<Compile Include="Presentation\Model\Menu\File\Commands\save_command.cs" />
<Compile Include="Presentation\Model\Menu\Help\commands\display_information_about_the_application.cs" />
- <Compile Include="Presentation\Model\Menu\menu_item.cs" />
- <Compile Include="Presentation\Model\Menu\menu_item_builder.cs" />
- <Compile Include="Presentation\Model\Menu\sub_menu_registry.cs" />
+ <Compile Include="Presentation\Model\Menu\MenuItem.cs" />
+ <Compile Include="Presentation\Model\Menu\MenuItemBuilder.cs" />
+ <Compile Include="Presentation\Model\Menu\SubMenuRegistry.cs" />
<Compile Include="Presentation\Model\Navigation\branches\add_new_bill_branch.cs" />
<Compile Include="Presentation\Model\Navigation\IBranchVisitor.cs" />
- <Compile Include="Presentation\Model\Navigation\navigation_tree_visitor.cs" />
+ <Compile Include="Presentation\Model\Navigation\NavigationTreeVisitor.cs" />
<Compile Include="Presentation\Model\Navigation\navigation_tree_visitor_specs.cs" />
<Compile Include="Presentation\Model\Navigation\tree_branch.cs" />
<Compile Include="Presentation\Model\Navigation\tree_branch_specs.cs" />
@@ -322,13 +323,13 @@
<Compile Include="Presentation\Model\reporting\report_binding_extensions.cs" />
<Compile Include="Presentation\Model\reporting\report_binding_extensions_specs.cs" />
<Compile Include="Presentation\Model\updates\ApplicationVersion.cs" />
- <Compile Include="Presentation\Presenters\billing\add_bill_payment_presenter.cs" />
- <Compile Include="Presentation\Presenters\add_company_presenter.cs" />
- <Compile Include="Presentation\Presenters\add_company_presenter_specs.cs" />
+ <Compile Include="Presentation\Presenters\billing\AddBillPaymentPresenter.cs" />
+ <Compile Include="Presentation\Presenters\AddCompanyPresenter.cs" />
+ <Compile Include="Presentation\Presenters\AddCompanyPresenterSpecs.cs" />
<Compile Include="Presentation\Presenters\billing\dto\add_new_bill_dto.cs" />
<Compile Include="Presentation\Presenters\billing\dto\bill_information_dto.cs" />
<Compile Include="Presentation\Presenters\billing\dto\register_new_company.cs" />
- <Compile Include="Presentation\Presenters\billing\view_all_bills_presenter.cs" />
+ <Compile Include="Presentation\Presenters\billing\ViewAllBillsPresenter.cs" />
<Compile Include="Presentation\Presenters\Commands\RestartCommand.cs" />
<Compile Include="Presentation\Presenters\Commands\run_presenter_command.cs" />
<Compile Include="Presentation\Presenters\Commands\run_the.cs" />
@@ -342,14 +343,14 @@
<Compile Include="Presentation\Presenters\excel\ICell.cs" />
<Compile Include="Presentation\Presenters\excel\ICellInterior.cs" />
<Compile Include="Presentation\Presenters\excel\ICellVisitor.cs" />
- <Compile Include="Presentation\Presenters\income\add_new_income_presenter.cs" />
- <Compile Include="Presentation\Presenters\income\add_new_income_presenter_specs.cs" />
+ <Compile Include="Presentation\Presenters\income\AddNewIncomePresenter.cs" />
+ <Compile Include="Presentation\Presenters\income\AddNewIncomePresenterSpecs.cs" />
<Compile Include="Presentation\Presenters\income\dto\income_information_dto.cs" />
<Compile Include="Presentation\Presenters\income\dto\income_submission_dto.cs" />
<Compile Include="Presentation\Presenters\income\dto\monthly_summary_dto.cs" />
- <Compile Include="Presentation\Presenters\income\view_income_history_presenter.cs" />
+ <Compile Include="Presentation\Presenters\income\ViewIncomeHistoryPresenter.cs" />
<Compile Include="Presentation\Presenters\Menu\Help\about_the_application_presenter.cs" />
- <Compile Include="Presentation\Presenters\Menu\main_menu_presenter.cs" />
+ <Compile Include="Presentation\Presenters\Menu\MainMenuPresenter.cs" />
<Compile Include="Presentation\Model\messages\new_project_opened.cs" />
<Compile Include="Presentation\Model\messages\saved_changes_event.cs" />
<Compile Include="Presentation\Model\messages\unsaved_changes_event.cs" />
@@ -367,7 +368,7 @@
<Compile Include="Presentation\Presenters\Navigation\MainMenuPresenter.cs" />
<Compile Include="Presentation\Presenters\Navigation\NavigationPresenter.cs" />
<Compile Include="Presentation\Presenters\Navigation\NavigationPresenterSpecs.cs" />
- <Compile Include="Presentation\Presenters\reporting\report_presenter.cs" />
+ <Compile Include="Presentation\Presenters\reporting\ReportPresenter.cs" />
<Compile Include="Presentation\Presenters\Shell\LoadApplicationShellSpecs.cs" />
<Compile Include="Presentation\Presenters\Shell\NotificationIconPresenterSpecs.cs" />
<Compile Include="Presentation\Presenters\Shell\TaskTrayPresenter.cs" />
@@ -441,7 +442,7 @@
<Compile Include="Presentation\Views\income\ViewAllIncome.Designer.cs">
<DependentUpon>ViewAllIncome.cs</DependentUpon>
</Compile>
- <Compile Include="Presentation\Views\listbox_extensions.cs" />
+ <Compile Include="Presentation\Databindings\listbox_extensions.cs" />
<Compile Include="Presentation\Views\Menu\ApplicationMenuHost.cs" />
<Compile Include="Presentation\Views\Navigation\IMainMenuView.cs" />
<Compile Include="Presentation\Views\Navigation\MainMenuView.cs">
@@ -470,6 +471,9 @@
<Compile Include="Presentation\Views\billing\view_all_bills_report.Designer.cs">
<DependentUpon>view_all_bills_report.cs</DependentUpon>
</Compile>
+ <Compile Include="Presentation\Views\Shell\ApplicationShellSpecs.cs" />
+ <Compile Include="Presentation\Views\Shell\BitmapRegion.cs" />
+ <Compile Include="Presentation\Views\Shell\button_extensions.cs" />
<Compile Include="Presentation\Views\Shell\IGettingStartedView.cs" />
<Compile Include="Presentation\Views\Shell\INotificationIconView.cs" />
<Compile Include="Presentation\Views\Shell\IShell.cs" />
@@ -479,7 +483,18 @@
<Compile Include="Presentation\Views\Shell\StatusBarView.cs" />
<Compile Include="Presentation\Views\Shell\TaskTrayMessage.cs" />
<Compile Include="Presentation\Views\Shell\TitleBar.cs" />
- <Compile Include="Presentation\Views\Shell\UnhandledErrorView.cs" />
+ <Compile Include="Presentation\Views\Shell\UnhandledErrorView.cs">
+ <SubType>Form</SubType>
+ </Compile>
+ <Compile Include="Presentation\Views\Shell\UnhandledErrorView.Designer.cs">
+ <DependentUpon>UnhandledErrorView.cs</DependentUpon>
+ </Compile>
+ <Compile Include="Presentation\Views\Shell\WelcomeScreen.cs">
+ <SubType>Form</SubType>
+ </Compile>
+ <Compile Include="Presentation\Views\Shell\WelcomeScreen.Designer.cs">
+ <DependentUpon>WelcomeScreen.cs</DependentUpon>
+ </Compile>
<Compile Include="Presentation\Views\updates\CheckForUpdatesView.cs">
<SubType>Form</SubType>
</Compile>
@@ -544,7 +559,7 @@
<Compile Include="Presentation\Presenters\Commands\display_the_splash_screen.cs" />
<Compile Include="Presentation\Core\IPresentationModule.cs" />
<Compile Include="Presentation\Core\presenter_registry_extensions.cs" />
- <Compile Include="Presentation\Model\Menu\File\file_menu.cs" />
+ <Compile Include="Presentation\Model\Menu\File\FileMenu.cs" />
<Compile Include="Presentation\Model\Menu\Help\help_menu.cs" />
<Compile Include="Utility\Core\ISpecification.cs" />
<Compile Include="Utility\Core\Map.cs" />
@@ -619,7 +634,7 @@
<Compile Include="Presentation\Core\application_controller.cs" />
<Compile Include="Presentation\Core\IPresenter.cs" />
<Compile Include="Infrastructure\Container\IDependencyRegistry.cs" />
- <Compile Include="Presentation\Presenters\Menu\main_menu_presenter_specs.cs" />
+ <Compile Include="Presentation\Presenters\Menu\MainMenuPresenterSpecs.cs" />
<Compile Include="Presentation\Presenters\Commands\LoadApplicationShell.cs" />
<Compile Include="Presentation\Views\Menu\ApplicationMenuHostSpecs.cs" />
<Compile Include="windows.ui\bootstrap.cs" />
@@ -673,6 +688,12 @@
<DependentUpon>ApplicationShell.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
+ <EmbeddedResource Include="Presentation\Views\Shell\UnhandledErrorView.resx">
+ <DependentUpon>UnhandledErrorView.cs</DependentUpon>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Presentation\Views\Shell\WelcomeScreen.resx">
+ <DependentUpon>WelcomeScreen.cs</DependentUpon>
+ </EmbeddedResource>
<EmbeddedResource Include="Presentation\Views\Startup\SplashScreenView.resx">
<DependentUpon>SplashScreenView.cs</DependentUpon>
</EmbeddedResource>