Commit 47cd045
Changed files (24)
trunk
product
MyMoney
Domain
Core
Infrastructure
eventing
Presentation
Model
Presenters
Resources
Views
Tasks
infrastructure
trunk/product/MyMoney/Domain/Core/Percent.cs
@@ -19,7 +19,17 @@ namespace MoMoney.Domain.Core
percentage = Math.Round(percentage, 1);
}
- static public implicit operator Percent(double percentage)
+ public bool represents(Percent other_percent)
+ {
+ return Equals(other_percent);
+ }
+
+ public bool is_less_than(Percent other_percent)
+ {
+ throw new NotImplementedException();
+ }
+
+ public static implicit operator Percent(double percentage)
{
return new Percent(percentage);
}
trunk/product/MyMoney/Infrastructure/eventing/EventAggregator.cs
@@ -1,6 +1,5 @@
using System.Collections.Generic;
using System.Linq;
-using MoMoney.Infrastructure.Extensions;
using MoMoney.Utility.Extensions;
namespace MoMoney.Infrastructure.eventing
@@ -33,11 +32,6 @@ namespace MoMoney.Infrastructure.eventing
{
get_list_for<Event>()
.Select(x => x.downcast_to<IEventSubscriber<Event>>())
- .Select(x =>
- {
- this.log().debug("publishing: {0} to {1}", typeof (Event), x);
- return x;
- })
.each(x => x.notify(the_event_to_broadcast));
}
trunk/product/MyMoney/Presentation/Model/Menu/File/Commands/close_window_command.cs → trunk/product/MyMoney/Presentation/Model/Menu/File/Commands/CloseWindowCommand.cs
@@ -4,13 +4,14 @@ using MoMoney.Utility.Core;
namespace MoMoney.Presentation.Model.Menu.File.Commands
{
public interface ICloseWindowCommand : ICommand
- {}
+ {
+ }
- public class close_window_command : ICloseWindowCommand
+ public class CloseWindowCommand : ICloseWindowCommand
{
- private readonly IShell shell;
+ readonly IShell shell;
- public close_window_command(IShell shell)
+ public CloseWindowCommand(IShell shell)
{
this.shell = shell;
}
trunk/product/MyMoney/Presentation/Model/Menu/File/Commands/exit_command_specs.cs → trunk/product/MyMoney/Presentation/Model/Menu/File/Commands/ExitCommandSpecs.cs
File renamed without changes
trunk/product/MyMoney/Presentation/Model/Menu/File/Commands/save_as_command.cs → trunk/product/MyMoney/Presentation/Model/Menu/File/Commands/SaveAsCommand.cs
@@ -8,12 +8,12 @@ namespace MoMoney.Presentation.Model.Menu.File.Commands
{
}
- public class save_as_command : ISaveAsCommand
+ public class SaveAsCommand : ISaveAsCommand
{
readonly IProject current_project;
readonly ISelectFileToSaveToDialog view;
- public save_as_command(ISelectFileToSaveToDialog view, IProject current_project)
+ public SaveAsCommand(ISelectFileToSaveToDialog view, IProject current_project)
{
this.view = view;
this.current_project = current_project;
trunk/product/MyMoney/Presentation/Model/Menu/File/Commands/save_as_command_specs.cs → trunk/product/MyMoney/Presentation/Model/Menu/File/Commands/SaveAsCommandSpecs.cs
@@ -7,8 +7,8 @@ using MoMoney.Testing.spechelpers.core;
namespace MoMoney.Presentation.Model.Menu.File.Commands
{
- [Concern(typeof (save_as_command))]
- public class when_saving_the_current_project_to_a_new_file_path : concerns_for<ISaveAsCommand, save_as_command>
+ [Concern(typeof (SaveAsCommand))]
+ public class when_saving_the_current_project_to_a_new_file_path : concerns_for<ISaveAsCommand, SaveAsCommand>
{
it should_save_the_current_project_to_the_new_path = () => current_project.was_told_to(x => x.save_project_to(new_path));
@@ -25,7 +25,7 @@ namespace MoMoney.Presentation.Model.Menu.File.Commands
public override ISaveAsCommand create_sut()
{
- return new save_as_command(view, current_project);
+ return new SaveAsCommand(view, current_project);
}
static IProject current_project;
trunk/product/MyMoney/Presentation/Model/Menu/File/Commands/save_command.cs → trunk/product/MyMoney/Presentation/Model/Menu/File/Commands/SaveCommand.cs
@@ -7,12 +7,12 @@ namespace MoMoney.Presentation.Model.Menu.File.Commands
{
}
- public class save_command : ISaveCommand
+ public class SaveCommand : ISaveCommand
{
readonly IProject the_current_project;
readonly ISaveAsCommand save_as_command;
- public save_command(IProject current_project, ISaveAsCommand save_as_command)
+ public SaveCommand(IProject current_project, ISaveAsCommand save_as_command)
{
the_current_project = current_project;
this.save_as_command = save_as_command;
trunk/product/MyMoney/Presentation/Model/Menu/File/Commands/save_command_specs.cs → trunk/product/MyMoney/Presentation/Model/Menu/File/Commands/SaveCommandSpecs.cs
@@ -6,12 +6,12 @@ using MoMoney.Testing.spechelpers.core;
namespace MoMoney.Presentation.Model.Menu.File.Commands
{
- [Concern(typeof (save_command))]
- public abstract class behaves_like_the_save_command : concerns_for<ISaveCommand, save_command>
+ [Concern(typeof (SaveCommand))]
+ public abstract class behaves_like_the_save_command : concerns_for<ISaveCommand, SaveCommand>
{
public override ISaveCommand create_sut()
{
- return new save_command(current_project, save_as_command);
+ return new SaveCommand(current_project, save_as_command);
}
context c = () =>
@@ -35,11 +35,11 @@ namespace MoMoney.Presentation.Model.Menu.File.Commands
public override ISaveCommand create_sut()
{
- return new save_command(current_project, save_as_command);
+ return new SaveCommand(current_project, save_as_command);
}
}
- [Concern(typeof (save_command))]
+ [Concern(typeof (SaveCommand))]
public class when_saving_the_current_project_that_has_been_saved_before : behaves_like_the_save_command
{
it should_save_the_current_project_to_the_same_path = () => current_project.was_told_to(x => x.save_changes());
@@ -52,7 +52,7 @@ namespace MoMoney.Presentation.Model.Menu.File.Commands
public override ISaveCommand create_sut()
{
- return new save_command(current_project, save_as_command);
+ return new SaveCommand(current_project, save_as_command);
}
}
trunk/product/MyMoney/Presentation/Model/Menu/MenuItem.cs
@@ -1,6 +1,5 @@
using System;
using System.Windows.Forms;
-using MoMoney.Infrastructure.Extensions;
using MoMoney.Presentation.Model.keyboard;
using MoMoney.Presentation.Resources;
@@ -46,7 +45,6 @@ namespace MoMoney.Presentation.Model.Menu
{
var item = new System.Windows.Forms.MenuItem(name) {ShowShortcut = true, Enabled = can_be_clicked()};
item.Click += (sender, e) => command();
- this.log().debug("{0} can be clicked? {1}", name, can_be_clicked());
return item;
}
}
trunk/product/MyMoney/Presentation/Presenters/Menu/Help/about_the_application_presenter_specs.cs
@@ -6,18 +6,13 @@ using MoMoney.Testing.spechelpers.core;
namespace MoMoney.Presentation.Presenters.Menu.Help
{
- [Concern(typeof (about_the_application_presenter))]
+ [Concern(typeof (AboutTheApplicationPresenter))]
public abstract class behaves_like_the_application_information_presenter :
- concerns_for<IAboutApplicationPresenter, about_the_application_presenter>
+ concerns_for<IAboutApplicationPresenter, AboutTheApplicationPresenter>
{
- //public override IAboutApplicationPresenter create_sut()
- //{
- // return new about_the_application_presenter(view);
- //}
-
context c = () => { view = the_dependency<IAboutApplicationView>(); };
- static protected IAboutApplicationView view;
+ protected static IAboutApplicationView view;
}
public class when_initializing_the_application_information_presenter :
trunk/product/MyMoney/Presentation/Presenters/Menu/Help/about_the_application_presenter.cs → trunk/product/MyMoney/Presentation/Presenters/Menu/Help/AboutTheApplicationPresenter.cs
@@ -7,11 +7,11 @@ namespace MoMoney.Presentation.Presenters.Menu.Help
{
}
- public class about_the_application_presenter : IAboutApplicationPresenter
+ public class AboutTheApplicationPresenter : IAboutApplicationPresenter
{
private readonly IAboutApplicationView view;
- public about_the_application_presenter(IAboutApplicationView view)
+ public AboutTheApplicationPresenter(IAboutApplicationView view)
{
this.view = view;
}
trunk/product/MyMoney/Presentation/Presenters/Shell/GettingStartedModule.cs
@@ -5,7 +5,9 @@ using MoMoney.Presentation.Presenters.Commands;
namespace MoMoney.Presentation.Presenters.Shell
{
- public interface IGettingStartedModule : IPresentationModule, IEventSubscriber<NewProjectOpened>
+ public interface IGettingStartedModule : IPresentationModule,
+ IEventSubscriber<NewProjectOpened>,
+ IEventSubscriber<ClosingProjectEvent>
{
}
@@ -22,7 +24,8 @@ namespace MoMoney.Presentation.Presenters.Shell
public void run()
{
- broker.subscribe_to(this);
+ broker.subscribe_to<NewProjectOpened>(this);
+ broker.subscribe_to<ClosingProjectEvent>(this);
command.run<IGettingStartedPresenter>();
}
@@ -30,5 +33,10 @@ namespace MoMoney.Presentation.Presenters.Shell
{
command.run<IGettingStartedPresenter>();
}
+
+ public void notify(ClosingProjectEvent message)
+ {
+ command.run<IGettingStartedPresenter>();
+ }
}
}
\ No newline at end of file
trunk/product/MyMoney/Presentation/Presenters/Shell/GettingStartedModuleSpecs.cs
@@ -1,5 +1,6 @@
using developwithpassion.bdd.contexts;
using MoMoney.Infrastructure.eventing;
+using MoMoney.Presentation.Model.messages;
using MoMoney.Presentation.Presenters.Commands;
using MoMoney.Testing.spechelpers.contexts;
using MoMoney.Testing.spechelpers.core;
@@ -24,7 +25,7 @@ namespace MoMoney.Presentation.Presenters.Shell
public class when_initializing_the_getting_started_module : behaves_like_the_getting_started_module
{
it should_start_listening_for_when_a_new_project_is_started =
- () => broker.was_told_to(x => x.subscribe_to(sut));
+ () => broker.was_told_to(x => x.subscribe_to<NewProjectOpened>(sut));
because b = () => sut.run();
}
trunk/product/MyMoney/Presentation/Resources/ApplicationIcon.cs
@@ -7,12 +7,13 @@ namespace MoMoney.Presentation.Resources
{
public class ApplicationIcon : IDisposable
{
- private readonly Icon underlying_icon;
+ readonly Icon underlying_icon;
public ApplicationIcon(string name_of_the_icon)
{
this.name_of_the_icon = name_of_the_icon;
- if (icon_can_be_found()) {
+ if (icon_can_be_found())
+ {
ApplicationIcons.add(this);
underlying_icon = new Icon(find_full_path_to(this));
}
@@ -37,8 +38,7 @@ namespace MoMoney.Presentation.Resources
protected bool icon_can_be_found()
{
- var path_to_the_icon = find_full_path_to(this);
- return File.Exists(path_to_the_icon);
+ return File.Exists(find_full_path_to(this));
}
}
}
\ No newline at end of file
trunk/product/MyMoney/Presentation/Resources/ApplicationIcons.cs
@@ -1,12 +1,11 @@
using System.Collections.Generic;
-using System.Drawing;
using MoMoney.Utility.Extensions;
namespace MoMoney.Presentation.Resources
{
public static class ApplicationIcons
{
- private static readonly IList<ApplicationIcon> all_icons = new List<ApplicationIcon>();
+ static readonly IList<ApplicationIcon> all_icons = new List<ApplicationIcon>();
public static readonly ApplicationIcon Application = new ApplicationIcon("mokhan.ico");
public static readonly ApplicationIcon FileExplorer = new ApplicationIcon("search4files.ico");
trunk/product/MyMoney/Presentation/Views/core/ApplicationWindow.cs
@@ -1,5 +1,6 @@
using System;
using System.Windows.Forms;
+using MoMoney.Infrastructure.Extensions;
using MoMoney.Presentation.Resources;
namespace MoMoney.Presentation.Views.core
@@ -18,6 +19,7 @@ namespace MoMoney.Presentation.Views.core
{
InitializeComponent();
Icon = ApplicationIcons.Application;
+ this.log().debug("created {0}", GetType());
}
public IApplicationWindow create_tool_tip_for(string title, string caption, Control control)
trunk/product/MyMoney/Presentation/Views/Menu/Help/AboutTheApplicationView.cs
@@ -1,7 +1,6 @@
+using System;
using System.Linq;
using System.Reflection;
-using Castle.Core;
-using MoMoney.Infrastructure.interceptors;
using MoMoney.Presentation.Resources;
using MoMoney.Presentation.Views.core;
using MoMoney.Utility.Extensions;
@@ -13,17 +12,24 @@ namespace MoMoney.Presentation.Views.Menu.Help
public AboutTheApplicationView()
{
InitializeComponent();
- labelProductName.Text = get_attribute<AssemblyProductAttribute>().Product;
- labelVersion.Text = string.Format("Version {0} {0}", AssemblyVersion);
- uxCopyright.Text = get_attribute<AssemblyCopyrightAttribute>().Copyright;
- uxCompanyName.Text = get_attribute<AssemblyCompanyAttribute>().Company;
- uxDescription.Text = get_attribute<AssemblyDescriptionAttribute>().Description;
- ux_logo.Image = ApplicationImages.Splash;
+ }
+
+ protected override void OnLoad(EventArgs e)
+ {
+ on_ui_thread(() =>
+ {
+ labelProductName.Text = get_attribute<AssemblyProductAttribute>().Product;
+ labelVersion.Text = string.Format("Version {0} {0}", AssemblyVersion);
+ uxCopyright.Text = get_attribute<AssemblyCopyrightAttribute>().Copyright;
+ uxCompanyName.Text = get_attribute<AssemblyCompanyAttribute>().Company;
+ uxDescription.Text = get_attribute<AssemblyDescriptionAttribute>().Description;
+ ux_logo.Image = ApplicationImages.Splash;
+ });
}
public void display()
{
- ShowDialog();
+ on_ui_thread(() => ShowDialog());
}
string AssemblyVersion
trunk/product/MyMoney/Presentation/Views/Shell/ApplicationShell.Designer.cs
@@ -58,21 +58,20 @@ namespace MoMoney.Presentation.Views.Shell {
// ux_dock_panel
//
this.ux_dock_panel.ActiveAutoHideContent = null;
- this.ux_dock_panel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
this.ux_dock_panel.BackColor = System.Drawing.Color.Transparent;
+ this.ux_dock_panel.CausesValidation = false;
+ this.ux_dock_panel.Dock = System.Windows.Forms.DockStyle.Fill;
this.ux_dock_panel.DockBackColor = System.Drawing.Color.Transparent;
this.ux_dock_panel.DockBottomPortion = 150;
this.ux_dock_panel.DockLeftPortion = 200;
this.ux_dock_panel.DockRightPortion = 200;
this.ux_dock_panel.DockTopPortion = 150;
this.ux_dock_panel.Font = new System.Drawing.Font("Tahoma", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.World, ((byte)(0)));
- this.ux_dock_panel.Location = new System.Drawing.Point(0, 64);
- this.ux_dock_panel.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
+ this.ux_dock_panel.Location = new System.Drawing.Point(0, 24);
+ this.ux_dock_panel.Margin = new System.Windows.Forms.Padding(4);
this.ux_dock_panel.Name = "ux_dock_panel";
this.ux_dock_panel.RightToLeftLayout = true;
- this.ux_dock_panel.Size = new System.Drawing.Size(1008, 533);
+ this.ux_dock_panel.Size = new System.Drawing.Size(1008, 578);
this.ux_dock_panel.TabIndex = 3;
//
// ux_tool_bar_strip
@@ -103,7 +102,7 @@ namespace MoMoney.Presentation.Views.Shell {
this.Controls.Add(this.ux_main_menu_strip);
this.IsMdiContainer = true;
this.MainMenuStrip = this.ux_main_menu_strip;
- this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
+ this.Margin = new System.Windows.Forms.Padding(4);
this.Name = "ApplicationShell";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "MoMoney";
trunk/product/MyMoney/Presentation/Views/Shell/TitleBar.cs
@@ -1,5 +1,3 @@
-using MoMoney.Infrastructure.Extensions;
-
namespace MoMoney.Presentation.Views.Shell
{
public interface ITitleBar
@@ -25,7 +23,6 @@ namespace MoMoney.Presentation.Views.Shell
shell.Text = shell.Text.Remove(shell.Text.IndexOf("-") - 1);
}
shell.Text = shell.Text + " - " + title;
- this.log().debug("displaying title: {0}", title);
}
public void append_asterik()
trunk/product/MyMoney/Presentation/Views/Shell/WelcomeScreen.cs
@@ -10,8 +10,6 @@ namespace MoMoney.Presentation.Views.Shell
{
InitializeComponent();
titled("Getting Started");
- //base.BackgroundImage = ApplicationImages.Welcome;
- //base.BackgroundImageLayout = ImageLayout.Center;
}
public void display()
trunk/product/MyMoney/Presentation/Views/updates/CheckForUpdatesView.cs
@@ -50,16 +50,17 @@ namespace MoMoney.Presentation.Views.updates
public void downloaded(Percent percentage_complete)
{
- //var bar = new ProgressBar {Visible = true, Minimum = 1, Value = 1};
- //while (true)
- //{
- // if (bar.Value.Equals(percentage_complete)) { }
- //}
+ while (percentage_complete.is_less_than(progress_bar.Value))
+ {
+ if (percentage_complete.represents(progress_bar.Value))
+ break;
+
+ progress_bar.PerformStep();
+ }
}
public void update_complete()
{
- MessageBox.Show("update complete, the application will now restart.", "Complete", MessageBoxButtons.OK);
the_presenter.restart();
}
trunk/product/MyMoney/Presentation/Views/updates/CheckForUpdatesView.Designer.cs
@@ -37,6 +37,7 @@ namespace MoMoney.Presentation.Views.updates
this.ux_update_button = new System.Windows.Forms.Button();
this.ux_new_version = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label();
+ this.progress_bar = new System.Windows.Forms.ProgressBar();
((System.ComponentModel.ISupportInitialize)(this.ux_image)).BeginInit();
this.SuspendLayout();
//
@@ -134,11 +135,20 @@ namespace MoMoney.Presentation.Views.updates
this.label5.TabIndex = 17;
this.label5.Text = "to";
//
- // check_for_updates
+ // progress_bar
+ //
+ this.progress_bar.Location = new System.Drawing.Point(174, 87);
+ this.progress_bar.Name = "progress_bar";
+ this.progress_bar.Size = new System.Drawing.Size(195, 23);
+ this.progress_bar.TabIndex = 18;
+ this.progress_bar.Visible = false;
+ //
+ // CheckForUpdatesView
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(388, 403);
+ this.Controls.Add(this.progress_bar);
this.Controls.Add(this.label5);
this.Controls.Add(this.ux_new_version);
this.Controls.Add(this.label3);
@@ -148,7 +158,7 @@ namespace MoMoney.Presentation.Views.updates
this.Controls.Add(this.ux_cancel_button);
this.Controls.Add(this.ux_dont_update_button);
this.Controls.Add(this.ux_update_button);
- this.Name = "check_for_updates";
+ this.Name = "CheckForUpdatesView";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "MoMoney - Check For Updates";
((System.ComponentModel.ISupportInitialize)(this.ux_image)).EndInit();
@@ -168,6 +178,7 @@ namespace MoMoney.Presentation.Views.updates
private System.Windows.Forms.Button ux_update_button;
private System.Windows.Forms.Label ux_new_version;
private System.Windows.Forms.Label label5;
+ private System.Windows.Forms.ProgressBar progress_bar;
}
}
\ No newline at end of file
trunk/product/MyMoney/Tasks/infrastructure/UpdateTasks.cs
@@ -55,6 +55,8 @@ namespace MoMoney.Tasks.infrastructure
public void stop_updating()
{
+ if (null == deployment) return;
+
deployment.UpdateAsyncCancel();
}
}
trunk/product/MyMoney/MyMoney.csproj
@@ -306,11 +306,11 @@
<Compile Include="Presentation\Model\keyboard\ShortcutKeys.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\CloseWindowCommand.cs" />
<Compile Include="Presentation\Model\Menu\File\Commands\NewCommandSpecs.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\File\Commands\SaveAsCommandSpecs.cs" />
+ <Compile Include="Presentation\Model\Menu\File\Commands\SaveCommandSpecs.cs" />
<Compile Include="Presentation\Model\Menu\File\SubMenu.cs" />
<Compile Include="Presentation\Model\Menu\IToolbarButton.cs" />
<Compile Include="Presentation\Model\Menu\IToolbarItemBuilder.cs" />
@@ -331,8 +331,8 @@
<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\File\Commands\SaveAsCommand.cs" />
+ <Compile Include="Presentation\Model\Menu\File\Commands\SaveCommand.cs" />
<Compile Include="Presentation\Model\Menu\Help\commands\display_information_about_the_application.cs" />
<Compile Include="Presentation\Model\Menu\MenuItem.cs" />
<Compile Include="Presentation\Model\Menu\MenuItemBuilder.cs" />
@@ -377,7 +377,7 @@
<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\ViewIncomeHistoryPresenter.cs" />
- <Compile Include="Presentation\Presenters\Menu\Help\about_the_application_presenter.cs" />
+ <Compile Include="Presentation\Presenters\Menu\Help\AboutTheApplicationPresenter.cs" />
<Compile Include="Presentation\Presenters\Menu\ApplicationMenuModule.cs" />
<Compile Include="Presentation\Presenters\Menu\ApplicationMenuPresenter.cs" />
<Compile Include="Presentation\Model\messages\new_project_opened.cs" />
@@ -679,7 +679,7 @@
<Compile Include="Utility\Core\ICommand.cs" />
<Compile Include="Utility\Core\IMapper.cs" />
<Compile Include="Utility\Extensions\string_extensions.cs" />
- <Compile Include="Presentation\Model\Menu\File\Commands\exit_command_specs.cs" />
+ <Compile Include="Presentation\Model\Menu\File\Commands\ExitCommandSpecs.cs" />
<Compile Include="Presentation\Core\ApplicationControllerSpecs.cs" />
<Compile Include="Presentation\Core\ApplicationController.cs" />
<Compile Include="Presentation\Core\IPresenter.cs" />