Implemented ui logic for saving.
This commit is contained in:
@@ -11,9 +11,24 @@
|
|||||||
Height="600"
|
Height="600"
|
||||||
MinWidth="600"
|
MinWidth="600"
|
||||||
MinHeight="400"
|
MinHeight="400"
|
||||||
|
Closing="OnClosing"
|
||||||
Closed="OnClosed"
|
Closed="OnClosed"
|
||||||
Icon="logo.ico">
|
Icon="logo.ico">
|
||||||
|
|
||||||
|
<Window.InputBindings>
|
||||||
|
<KeyBinding Modifiers="Control"
|
||||||
|
Key="S"
|
||||||
|
Command="{Binding SaveCommand, RelativeSource={RelativeSource AncestorType=local:BillingWindow}}" />
|
||||||
|
|
||||||
|
<KeyBinding Modifiers="Control + Alt"
|
||||||
|
Key="S"
|
||||||
|
Command="{Binding SaveAsCommand, RelativeSource={RelativeSource AncestorType=local:BillingWindow}}" />
|
||||||
|
|
||||||
|
<KeyBinding Modifiers="Control"
|
||||||
|
Key="P"
|
||||||
|
Command="{Binding PrintCommand, RelativeSource={RelativeSource AncestorType=local:BillingWindow}}" />
|
||||||
|
</Window.InputBindings>
|
||||||
|
|
||||||
<DockPanel>
|
<DockPanel>
|
||||||
<Frame Name="SideBarFrame"
|
<Frame Name="SideBarFrame"
|
||||||
Source="Pages/SideBar.xaml"
|
Source="Pages/SideBar.xaml"
|
||||||
@@ -22,7 +37,7 @@
|
|||||||
Focusable="False" />
|
Focusable="False" />
|
||||||
|
|
||||||
<TabControl Name="TabControl"
|
<TabControl Name="TabControl"
|
||||||
BorderBrush="White">
|
BorderBrush="{x:Static local:Constants.MainColor}">
|
||||||
<TabItem Visibility="Collapsed">
|
<TabItem Visibility="Collapsed">
|
||||||
<Frame Source="Pages/LandlordPage.xaml"
|
<Frame Source="Pages/LandlordPage.xaml"
|
||||||
LoadCompleted="OnLandlordFrameLoadCompleted"
|
LoadCompleted="OnLandlordFrameLoadCompleted"
|
||||||
|
|||||||
+130
-4
@@ -1,20 +1,56 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.IO;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Input;
|
||||||
using System.Windows.Navigation;
|
using System.Windows.Navigation;
|
||||||
|
using Microsoft.Win32;
|
||||||
using UCalc.Data;
|
using UCalc.Data;
|
||||||
using UCalc.Models;
|
using UCalc.Models;
|
||||||
using UCalc.Pages;
|
using UCalc.Pages;
|
||||||
|
|
||||||
namespace UCalc
|
namespace UCalc
|
||||||
{
|
{
|
||||||
|
public class DelegateCommand : ICommand
|
||||||
|
{
|
||||||
|
private readonly Action<object> _execute;
|
||||||
|
|
||||||
|
public DelegateCommand(Action<object> execute)
|
||||||
|
{
|
||||||
|
_execute = execute;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool CanExecute(object parameter)
|
||||||
|
{
|
||||||
|
CanExecuteChanged?.Invoke(this, EventArgs.Empty);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Execute(object parameter)
|
||||||
|
{
|
||||||
|
_execute(parameter);
|
||||||
|
}
|
||||||
|
|
||||||
|
public event EventHandler CanExecuteChanged;
|
||||||
|
}
|
||||||
|
|
||||||
public partial class BillingWindow
|
public partial class BillingWindow
|
||||||
{
|
{
|
||||||
|
public string FilePath { get; set; }
|
||||||
public Model Model { get; }
|
public Model Model { get; }
|
||||||
|
|
||||||
public BillingWindow(Billing billing)
|
public ICommand SaveCommand { get; }
|
||||||
|
public ICommand SaveAsCommand { get; }
|
||||||
|
public ICommand PrintCommand { get; }
|
||||||
|
|
||||||
|
public BillingWindow(string filePath, Billing billing)
|
||||||
{
|
{
|
||||||
|
FilePath = filePath;
|
||||||
Model = new Model(billing);
|
Model = new Model(billing);
|
||||||
|
SaveCommand = new DelegateCommand(parameter => { Save(); });
|
||||||
|
SaveAsCommand = new DelegateCommand(parameter => { Save(true); });
|
||||||
|
PrintCommand = new DelegateCommand(parameter => { Print(); });
|
||||||
|
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
@@ -22,6 +58,36 @@ namespace UCalc
|
|||||||
$"MietRechner - Abrechnung von {billing.StartDate.ToString(Constants.DateFormat)} - {billing.EndDate.Date.ToString(Constants.DateFormat)}";
|
$"MietRechner - Abrechnung von {billing.StartDate.ToString(Constants.DateFormat)} - {billing.EndDate.Date.ToString(Constants.DateFormat)}";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnClosing(object sender, CancelEventArgs e)
|
||||||
|
{
|
||||||
|
if (!Model.Root.Modified)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
switch (MessageBox.Show("Möchten Sie die letzten Änderungen speichern?", "Speichern?",
|
||||||
|
MessageBoxButton.YesNoCancel, MessageBoxImage.Question))
|
||||||
|
{
|
||||||
|
case MessageBoxResult.Yes:
|
||||||
|
if (Save())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case MessageBoxResult.No:
|
||||||
|
return;
|
||||||
|
case MessageBoxResult.Cancel:
|
||||||
|
e.Cancel = true;
|
||||||
|
return;
|
||||||
|
default:
|
||||||
|
throw new ArgumentOutOfRangeException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void OnClosed(object sender, EventArgs e)
|
private void OnClosed(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
Application.Current.MainWindow?.Show();
|
Application.Current.MainWindow?.Show();
|
||||||
@@ -30,10 +96,9 @@ namespace UCalc
|
|||||||
private void OnSideBarFrameLoadCompleted(object sender, NavigationEventArgs e)
|
private void OnSideBarFrameLoadCompleted(object sender, NavigationEventArgs e)
|
||||||
{
|
{
|
||||||
var sideBar = (SideBar) ((Frame) sender).Content;
|
var sideBar = (SideBar) ((Frame) sender).Content;
|
||||||
sideBar.TabControl = TabControl;
|
sideBar.ParentWindow = this;
|
||||||
sideBar.LandlordButton.Selected = true;
|
|
||||||
|
|
||||||
sideBar.Model = Model;
|
sideBar.Model = Model;
|
||||||
|
sideBar.LandlordButton.Selected = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnLandlordFrameLoadCompleted(object sender, NavigationEventArgs e)
|
private void OnLandlordFrameLoadCompleted(object sender, NavigationEventArgs e)
|
||||||
@@ -66,5 +131,66 @@ namespace UCalc
|
|||||||
page.House = Model.Root.House;
|
page.House = Model.Root.House;
|
||||||
page.ParentWindow = this;
|
page.ParentWindow = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool Save(bool rename = false)
|
||||||
|
{
|
||||||
|
if (Model.Root.Errors.Count > 0)
|
||||||
|
{
|
||||||
|
MessageBox.Show(
|
||||||
|
"Fehlerhafte Einträge (wie z.B. ungültige Beträge) gehen beim Speichern und anschließenden Laden verloren.",
|
||||||
|
"Warnung!", MessageBoxButton.OK, MessageBoxImage.Exclamation);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(FilePath) || rename)
|
||||||
|
{
|
||||||
|
var dialog = new SaveFileDialog
|
||||||
|
{Filter = "MietRechner Datei (*.mr) | *.mr", FileName = FilePath ?? ""};
|
||||||
|
if (dialog.ShowDialog() != true)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
FilePath = dialog.FileName;
|
||||||
|
if (!FilePath.EndsWith(".mr"))
|
||||||
|
{
|
||||||
|
FilePath += ".mr";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var billing = Model.Dump();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
new BillingLoader().Store(FilePath, billing);
|
||||||
|
Model.ResetModified();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (IOException)
|
||||||
|
{
|
||||||
|
if (MessageBox.Show(
|
||||||
|
$"Die Daten konnten nicht in \"{FilePath}\" gespeichert werden.\nMöchten Sie die Daten an einem anderen Ort speichern?",
|
||||||
|
"Fehler!", MessageBoxButton.YesNo, MessageBoxImage.Error) == MessageBoxResult.No)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
rename = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Print()
|
||||||
|
{
|
||||||
|
if (Model.Root.Errors.Count > 0)
|
||||||
|
{
|
||||||
|
MessageBox.Show(
|
||||||
|
"Bitte beheben Sie zuerst die angezeigten Fehler, bevor Sie das Dokument drucken können.",
|
||||||
|
"Fehler!", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new System.NotImplementedException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -22,7 +22,7 @@ namespace UCalc
|
|||||||
|
|
||||||
if (newWindow.ShowDialog() == true)
|
if (newWindow.ShowDialog() == true)
|
||||||
{
|
{
|
||||||
new BillingWindow(newWindow.Billing).Show();
|
new BillingWindow(null, newWindow.Billing).Show();
|
||||||
Hide();
|
Hide();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -75,7 +75,7 @@ namespace UCalc
|
|||||||
var billing = new BillingLoader().Load(path);
|
var billing = new BillingLoader().Load(path);
|
||||||
App.RecentlyOpenedList.Add(new RecentlyOpenedItem(path));
|
App.RecentlyOpenedList.Add(new RecentlyOpenedItem(path));
|
||||||
|
|
||||||
new BillingWindow(billing).Show();
|
new BillingWindow(path, billing).Show();
|
||||||
Hide();
|
Hide();
|
||||||
}
|
}
|
||||||
catch (IOException)
|
catch (IOException)
|
||||||
|
|||||||
@@ -147,6 +147,16 @@ namespace UCalc.Models
|
|||||||
return _validator;
|
return _validator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Billing Dump()
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ResetModified()
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
public event PropertyChangedEventHandler PropertyChanged;
|
public event PropertyChangedEventHandler PropertyChanged;
|
||||||
|
|
||||||
[NotifyPropertyChangedInvocator]
|
[NotifyPropertyChangedInvocator]
|
||||||
|
|||||||
@@ -21,7 +21,15 @@
|
|||||||
HighlightBackground="{x:Static local:Constants.SubMainColor}"
|
HighlightBackground="{x:Static local:Constants.SubMainColor}"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
ToolTip="Speichern">
|
Click="OnSaveClick">
|
||||||
|
<controls:HighlightButton.ToolTip>
|
||||||
|
<TextBlock>
|
||||||
|
<Run Text="Speichern (Strg + S)" />
|
||||||
|
<LineBreak />
|
||||||
|
<Run Text="Speichern Unter (Strg + Alt + S)" />
|
||||||
|
</TextBlock>
|
||||||
|
</controls:HighlightButton.ToolTip>
|
||||||
|
|
||||||
<Viewbox Width="24"
|
<Viewbox Width="24"
|
||||||
Height="24"
|
Height="24"
|
||||||
Margin="8"
|
Margin="8"
|
||||||
@@ -45,7 +53,8 @@
|
|||||||
HighlightBackground="{x:Static local:Constants.SubMainColor}"
|
HighlightBackground="{x:Static local:Constants.SubMainColor}"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
ToolTip="Drucken">
|
ToolTip="Drucken (Strg + P)"
|
||||||
|
Click="OnPrintClick">
|
||||||
<Viewbox Width="24"
|
<Viewbox Width="24"
|
||||||
Height="24"
|
Height="24"
|
||||||
Margin="8"
|
Margin="8"
|
||||||
@@ -69,7 +78,8 @@
|
|||||||
HighlightBackground="{x:Static local:Constants.SubMainColor}"
|
HighlightBackground="{x:Static local:Constants.SubMainColor}"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
Grid.Column="2"
|
Grid.Column="2"
|
||||||
ToolTip="Über MietRechner">
|
ToolTip="Über MietRechner"
|
||||||
|
Click="OnAboutClick">
|
||||||
<Viewbox Width="24"
|
<Viewbox Width="24"
|
||||||
Height="24"
|
Height="24"
|
||||||
Margin="8"
|
Margin="8"
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ namespace UCalc.Pages
|
|||||||
{
|
{
|
||||||
public partial class SideBar
|
public partial class SideBar
|
||||||
{
|
{
|
||||||
public TabControl TabControl { get; set; }
|
public BillingWindow ParentWindow { get; set; }
|
||||||
public Model Model { get; set; }
|
public Model Model { get; set; }
|
||||||
|
|
||||||
public SideBar()
|
public SideBar()
|
||||||
@@ -32,10 +32,25 @@ namespace UCalc.Pages
|
|||||||
{
|
{
|
||||||
if (ReferenceEquals(sender, buttons[i]))
|
if (ReferenceEquals(sender, buttons[i]))
|
||||||
{
|
{
|
||||||
TabControl.SelectedIndex = i;
|
ParentWindow.TabControl.SelectedIndex = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void OnSaveClick(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
ParentWindow.Save();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnPrintClick(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
ParentWindow.Print();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnAboutClick(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
throw new System.NotImplementedException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user