Commit 24a180e
Changed files (21)
product
desktop.ui
bootstrappers
handlers
presenters
thirdparty
automapper
product/desktop.ui/bootstrappers/Bootstrapper.cs
@@ -1,9 +1,9 @@
-using System;
using System.Collections.Generic;
using System.Threading;
using System.Windows.Threading;
using Autofac;
using desktop.ui.eventing;
+using desktop.ui.handlers;
using desktop.ui.presenters;
using desktop.ui.views;
using infrastructure.container;
@@ -28,10 +28,11 @@ namespace desktop.ui.bootstrappers
//builder.Register<Log4NetLogFactory>().As<LogFactory>().SingleInstance();
builder.RegisterType<DefaultMapper>().As<Mapper>().SingleInstance();
//builder.RegisterGeneric(typeof (Mapper<,>));
- builder.RegisterType<StubServiceBus>().As<ServiceBus>().SingleInstance();
+ builder.RegisterType<InMemoryServiceBus>().As<ServiceBus>().SingleInstance();
register_presentation_infrastructure(builder);
register_presenters(builder);
+ register_for_message_to_listen_for(builder);
shell_window.Closed += (o, e) => Resolve.the<CommandProcessor>().stop();
shell_window.Closed += (o, e) => Resolve.the<IEnumerable<NeedsShutdown>>();
@@ -63,23 +64,30 @@ namespace desktop.ui.bootstrappers
static void register_presenters(ContainerBuilder builder)
{
+ builder.RegisterType<CancelCommand>();
+
builder.RegisterType<StatusBarPresenter>().SingleInstance();
+
builder.RegisterType<SelectedFamilyMemberPresenter>().SingleInstance();
+
builder.RegisterType<AddFamilyMemberPresenter>();
builder.RegisterType<AddFamilyMemberPresenter.SaveCommand>();
+
builder.RegisterType<AccountPresenter>();
builder.RegisterType<AccountPresenter.ImportTransactionCommand>();
- builder.RegisterType<CancelCommand>();
+
builder.RegisterType<AddNewDetailAccountPresenter>();
builder.RegisterType<AddNewDetailAccountPresenter.CreateNewAccount>();
+
+ builder.RegisterType<AddNewIncomeViewModel>();
+ builder.RegisterType<AddNewIncomeViewModel.AddIncomeCommand>();
+
+ builder.RegisterType<TaxSummaryPresenter>();
}
- }
- public class DefaultMapper : Mapper
- {
- public Output map_from<Input, Output>(Input item)
+ static void register_for_message_to_listen_for(ContainerBuilder builder)
{
- throw new NotImplementedException();
+ builder.RegisterType<PublishEventHandler<AddedNewFamilyMember>>().As<Handles<AddedNewFamilyMember>>();
}
}
}
\ No newline at end of file
product/desktop.ui/bootstrappers/ComposeShell.cs
@@ -17,6 +17,7 @@ namespace desktop.ui.bootstrappers
public void run()
{
controller.add_tab<AccountPresenter, AccountTab>();
+ controller.add_tab<TaxSummaryPresenter, TaxSummaryTab>();
region_manager.region<MainMenu>(x =>
{
@@ -24,9 +25,15 @@ namespace desktop.ui.bootstrappers
{
controller.launch_dialog<AddFamilyMemberPresenter, AddFamilyMemberDialog>();
});
- x.add("_Accounts").add("_Add Account", () => {
- controller.launch_dialog<AddNewDetailAccountPresenter, AddNewDetailAccountDialog>();
- });
+ //x.add("_Accounts").add("_Add Account", () => {
+ //controller.launch_dialog<AddNewDetailAccountPresenter, AddNewDetailAccountDialog>();
+ //});
+ x.add("_Income").add("_Add Income", () => {
+ controller.launch_dialog<AddNewIncomeViewModel, AddNewIncomeDialog>();
+ }) ;
+ //x.add("_Deductions").add("_Add RRSP", () => { }) ;
+ //x.add("_Credits").add("_Add Credit", () => { }) ;
+ //x.add("_Benefits").add("_Add Benefit", () => { }) ;
});
controller.load_region<StatusBarPresenter, StatusBarRegion>();
product/desktop.ui/bootstrappers/DefaultMapper.cs
@@ -0,0 +1,14 @@
+using System;
+using utility;
+
+namespace desktop.ui.bootstrappers
+{
+ public class DefaultMapper : Mapper
+ {
+ public Output map_from<Input, Output>(Input item)
+ {
+ //return AutoMapper.Mapper.Map<Input, Output>(item);
+ throw new NotImplementedException();
+ }
+ }
+}
\ No newline at end of file
product/desktop.ui/handlers/Handles.cs
@@ -0,0 +1,7 @@
+namespace desktop.ui.handlers
+{
+ public interface Handles<T>
+ {
+ void handle(T item);
+ }
+}
\ No newline at end of file
product/desktop.ui/handlers/PublishEventHandler.cs
@@ -0,0 +1,19 @@
+using desktop.ui.eventing;
+
+namespace desktop.ui.handlers
+{
+ public class PublishEventHandler<T> : Handles<T> where T : Event
+ {
+ EventAggregator event_aggregator;
+
+ public PublishEventHandler(EventAggregator event_aggregator)
+ {
+ this.event_aggregator = event_aggregator;
+ }
+
+ public void handle(T item)
+ {
+ event_aggregator.publish(item);
+ }
+ }
+}
\ No newline at end of file
product/desktop.ui/presenters/AccountPresenter.cs
@@ -27,7 +27,7 @@ namespace desktop.ui.presenters
{
ApplicationController controller;
- protected override void run(AccountPresenter presenter)
+ public override void run(AccountPresenter presenter)
{
//controller.launch_dialog<ImportTransactionsPresenter, ImportTransactionDialog>(presenter.SelectedAccount);
}
product/desktop.ui/presenters/AddFamilyMemberPresenter.cs
@@ -35,7 +35,7 @@ namespace desktop.ui.presenters
this.bus = bus;
}
- protected override void run(AddFamilyMemberPresenter presenter)
+ public override void run(AddFamilyMemberPresenter presenter)
{
bus.publish<FamilyMemberToAdd>(x =>
{
product/desktop.ui/presenters/AddNewDetailAccountPresenter.cs
@@ -35,7 +35,7 @@ namespace desktop.ui.presenters
this.bus = bus;
}
- protected override void run(AddNewDetailAccountPresenter presenter)
+ public override void run(AddNewDetailAccountPresenter presenter)
{
bus.publish<CreateNewDetailAccountCommand>(x =>
{
product/desktop.ui/presenters/AddNewIncomeViewModel.cs
@@ -0,0 +1,34 @@
+using System;
+
+namespace desktop.ui.presenters
+{
+ public class AddNewIncomeViewModel : DialogPresenter
+ {
+ UICommandBuilder builder;
+
+ public AddNewIncomeViewModel(UICommandBuilder builder)
+ {
+ this.builder = builder;
+ }
+
+ public void present()
+ {
+ Add = builder.build<AddIncomeCommand>(this);
+ Cancel = builder.build<CancelCommand>(this);
+ }
+
+ public decimal amount { get; set; }
+ public IObservableCommand Add { get; set; }
+ public IObservableCommand Cancel { get; set; }
+ public Action close { get; set; }
+
+ public class AddIncomeCommand : UICommand<AddNewIncomeViewModel>
+ {
+ public override void run(AddNewIncomeViewModel presenter)
+ {
+ Console.Out.WriteLine(presenter.amount);
+ presenter.close();
+ }
+ }
+ }
+}
\ No newline at end of file
product/desktop.ui/presenters/SelectedFamilyMemberPresenter.cs
@@ -1,3 +1,4 @@
+using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using desktop.ui.eventing;
@@ -52,5 +53,8 @@ namespace desktop.ui.presenters
public class AddedNewFamilyMember : Event
{
+ public Guid id { get; set; }
+ public string first_name { get; set; }
+ public string last_name { get; set; }
}
}
\ No newline at end of file
product/desktop.ui/presenters/TaxSummaryPresenter.cs
@@ -0,0 +1,21 @@
+namespace desktop.ui.presenters
+{
+ public class TaxSummaryPresenter : TabPresenter
+ {
+ UICommandBuilder builder;
+
+ public TaxSummaryPresenter(UICommandBuilder builder)
+ {
+ this.builder = builder;
+ }
+
+ public void present()
+ {
+ }
+
+ public string Header
+ {
+ get { return "Taxes"; }
+ }
+ }
+}
\ No newline at end of file
product/desktop.ui/views/AddNewIncomeDialog.xaml
@@ -0,0 +1,11 @@
+<Window x:Class="desktop.ui.views.AddNewIncomeDialog"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ Title="Add Income">
+ <StackPanel>
+ <Label>Income Amount:</Label>
+ <TextBox Text="{Binding Path=amount}"></TextBox>
+ <Button Command="{Binding Path=Add}">_Add</Button>
+ <Button Command="{Binding Path=Cancel}">_Cancel</Button>
+ </StackPanel>
+</Window>
product/desktop.ui/views/AddNewIncomeDialog.xaml.cs
@@ -0,0 +1,19 @@
+using System.Windows;
+using desktop.ui.presenters;
+
+namespace desktop.ui.views
+{
+ public partial class AddNewIncomeDialog : Dialog<AddNewIncomeViewModel>
+ {
+ public AddNewIncomeDialog()
+ {
+ InitializeComponent();
+ }
+
+ public void open()
+ {
+ Owner = Application.Current.MainWindow;
+ ShowDialog();
+ }
+ }
+}
\ No newline at end of file
product/desktop.ui/views/TaxSummaryTab.xaml
@@ -0,0 +1,18 @@
+<UserControl x:Class="desktop.ui.views.TaxSummaryTab"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ mc:Ignorable="d" >
+ <StackPanel>
+ <Label>Tax Summary</Label>
+ <Label>Federal Tax Rates for 2011</Label>
+ <TextBlock>
+ * 15% on the first $41,544 of taxable income, +
+ * 22% on the next $41,544 of taxable income (on the portion of taxable income between $41,544 and $83,088), +
+ * 26% on the next $45,712 of taxable income (on the portion of taxable income between $83,088 and $128,800), +
+ * 29% of taxable income over $128,800.
+ </TextBlock>
+ <WebBrowser x:Name="browser"></WebBrowser>
+ </StackPanel>
+</UserControl>
product/desktop.ui/views/TaxSummaryTab.xaml.cs
@@ -0,0 +1,14 @@
+using System;
+using desktop.ui.presenters;
+
+namespace desktop.ui.views
+{
+ public partial class TaxSummaryTab : Tab<TaxSummaryPresenter>
+ {
+ public TaxSummaryTab()
+ {
+ InitializeComponent();
+ browser.Navigate(new Uri("http://www.cra-arc.gc.ca/tx/ndvdls/fq/txrts-eng.html"));
+ }
+ }
+}
\ No newline at end of file
product/desktop.ui/CancelCommand.cs
@@ -2,7 +2,7 @@ namespace desktop.ui
{
public class CancelCommand : UICommand<DialogPresenter>
{
- protected override void run(DialogPresenter presenter)
+ public override void run(DialogPresenter presenter)
{
presenter.close();
}
product/desktop.ui/desktop.ui.csproj
@@ -61,6 +61,7 @@
<Compile Include="bootstrappers\Bootstrapper.cs" />
<Compile Include="bootstrappers\ComposeShell.cs" />
<Compile Include="bootstrappers\ConfigureMappings.cs" />
+ <Compile Include="bootstrappers\DefaultMapper.cs" />
<Compile Include="bootstrappers\NeedsShutdown.cs" />
<Compile Include="bootstrappers\NeedStartup.cs" />
<Compile Include="CancelCommand.cs" />
@@ -72,6 +73,8 @@
<Compile Include="eventing\SynchronizedEventAggregator.cs" />
<Compile Include="events\SelectedFamilyMember.cs" />
<Compile Include="events\UpdateOnLongRunningProcess.cs" />
+ <Compile Include="handlers\Handles.cs" />
+ <Compile Include="handlers\PublishEventHandler.cs" />
<Compile Include="IObservableCommand.cs" />
<Compile Include="Observable.cs" />
<Compile Include="Presenter.cs" />
@@ -79,15 +82,17 @@
<Compile Include="presenters\AccountPresenter.cs" />
<Compile Include="presenters\AddFamilyMemberPresenter.cs" />
<Compile Include="presenters\AddNewDetailAccountPresenter.cs" />
+ <Compile Include="presenters\AddNewIncomeViewModel.cs" />
<Compile Include="presenters\PersonDetails.cs" />
<Compile Include="presenters\SelectedFamilyMemberPresenter.cs" />
+ <Compile Include="presenters\TaxSummaryPresenter.cs" />
<Compile Include="ServiceBus.cs" />
<Compile Include="presenters\StatusBarPresenter.cs" />
<Compile Include="presenters\WpfBindingExtensinos.cs" />
<Compile Include="presenters\WpfCommandBuilder.cs" />
<Compile Include="Program.cs" />
<Compile Include="SimpleCommand.cs" />
- <Compile Include="StubServiceBus.cs" />
+ <Compile Include="InMemoryServiceBus.cs" />
<Compile Include="Tab.cs" />
<Compile Include="TabPresenter.cs" />
<Compile Include="UICommand.cs" />
@@ -102,6 +107,9 @@
<Compile Include="views\AddNewDetailAccountDialog.xaml.cs">
<DependentUpon>AddNewDetailAccountDialog.xaml</DependentUpon>
</Compile>
+ <Compile Include="views\AddNewIncomeDialog.xaml.cs">
+ <DependentUpon>AddNewIncomeDialog.xaml</DependentUpon>
+ </Compile>
<Compile Include="views\ErrorWindow.xaml.cs">
<DependentUpon>ErrorWindow.xaml</DependentUpon>
</Compile>
@@ -117,6 +125,9 @@
<Compile Include="views\StatusBarRegion.xaml.cs">
<DependentUpon>StatusBarRegion.xaml</DependentUpon>
</Compile>
+ <Compile Include="views\TaxSummaryTab.xaml.cs">
+ <DependentUpon>TaxSummaryTab.xaml</DependentUpon>
+ </Compile>
<Compile Include="WPFApplication.cs" />
<Compile Include="WPFApplicationController.cs" />
<Compile Include="RegionManager.cs" />
@@ -159,6 +170,10 @@
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
+ <Page Include="views\AddNewIncomeDialog.xaml">
+ <SubType>Designer</SubType>
+ <Generator>MSBuild:Compile</Generator>
+ </Page>
<Page Include="views\ErrorWindow.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
@@ -175,6 +190,10 @@
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
+ <Page Include="views\TaxSummaryTab.xaml">
+ <SubType>Designer</SubType>
+ <Generator>MSBuild:Compile</Generator>
+ </Page>
</ItemGroup>
<ItemGroup>
<Resource Include="views\images\cancel.png" />
product/desktop.ui/InMemoryServiceBus.cs
@@ -0,0 +1,34 @@
+using System;
+using desktop.ui.handlers;
+using infrastructure.container;
+using utility;
+
+namespace desktop.ui
+{
+ public class InMemoryServiceBus : ServiceBus
+ {
+ DependencyRegistry registry;
+
+ public InMemoryServiceBus(DependencyRegistry registry)
+ {
+ this.registry = registry;
+ }
+
+ public void publish<Message>() where Message : new()
+ {
+ publish(new Message());
+ }
+
+ public void publish<Message>(Message item) where Message : new()
+ {
+ registry.get_all<Handles<Message>>().each(x => x.handle(item));
+ }
+
+ public void publish<Message>(Action<Message> configure) where Message : new()
+ {
+ var message = new Message();
+ configure(message);
+ publish(message);
+ }
+ }
+}
\ No newline at end of file
product/desktop.ui/StubServiceBus.cs
@@ -1,19 +0,0 @@
-using System;
-
-namespace desktop.ui
-{
- public class StubServiceBus : ServiceBus
- {
- public void publish<Message>() where Message : new()
- {
- }
-
- public void publish<Message>(Message item) where Message : new()
- {
- }
-
- public void publish<Message>(Action<Message> configure) where Message : new()
- {
- }
- }
-}
\ No newline at end of file
product/desktop.ui/UICommand.cs
@@ -12,6 +12,6 @@ namespace desktop.ui
run(presenter as T);
}
- protected abstract void run(T presenter);
+ public abstract void run(T presenter);
}
}
\ No newline at end of file
thirdparty/automapper/AutoMapper.dll
Binary file