From bde85e56515f7052b9d6875a5f77d638de2163f8 Mon Sep 17 00:00:00 2001 From: Daniel Kraus Date: Fri, 7 Aug 2015 21:37:14 +0200 Subject: [PATCH] Fix views and view models. --- Tests/Controller/SettingsTest.cs | 53 +++++++++++ Tests/Tests.csproj | 1 + zaaReloaded2/Properties/AssemblyInfo.cs | 4 +- zaaReloaded2/Ribbon.cs | 4 - .../ViewModels/ElementPickerViewModel.cs | 27 ++++-- .../ViewModels/SettingsRepositoryViewModel.cs | 4 + zaaReloaded2/Views/ElementPickerView.xaml | 55 +++++++++++ zaaReloaded2/Views/ElementPickerView.xaml.cs | 33 +++++++ zaaReloaded2/Views/ElementView.xaml | 40 ++++++++ zaaReloaded2/Views/ElementView.xaml.cs | 33 +++++++ .../Views/SettingsRepositoryView.xaml | 11 ++- zaaReloaded2/Views/SettingsView.xaml | 92 +++++++++++++++++++ zaaReloaded2/Views/SettingsView.xaml.cs | 33 +++++++ zaaReloaded2/zaaReloaded2.csproj | 48 +++++++++- 14 files changed, 419 insertions(+), 19 deletions(-) create mode 100755 Tests/Controller/SettingsTest.cs create mode 100755 zaaReloaded2/Views/ElementPickerView.xaml create mode 100755 zaaReloaded2/Views/ElementPickerView.xaml.cs create mode 100755 zaaReloaded2/Views/ElementView.xaml create mode 100755 zaaReloaded2/Views/ElementView.xaml.cs create mode 100755 zaaReloaded2/Views/SettingsView.xaml create mode 100755 zaaReloaded2/Views/SettingsView.xaml.cs diff --git a/Tests/Controller/SettingsTest.cs b/Tests/Controller/SettingsTest.cs new file mode 100755 index 0000000..b59821b --- /dev/null +++ b/Tests/Controller/SettingsTest.cs @@ -0,0 +1,53 @@ +/* SettingsTest.cs + * part of zaaReloaded2 + * + * Copyright 2015 Daniel Kraus + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NUnit.Framework; +using zaaReloaded2.Controller; +using zaaReloaded2.Controller.Elements; + +namespace Tests.Controller +{ + [TestFixture] + class SettingsTest + { + [Test] + public void CloneSettings() + { + SelectEachDay selectEachDay = new SelectEachDay(); + Items items = new Items("some text"); + Settings source = new Settings( + "hello world", + new List() { selectEachDay, items }); + source.ReferenceStyle = zaaReloaded2.Formatter.ReferenceStyle.IfSpecialOrAbnormal; + Settings clone = source.Clone() as Settings; + Assert.AreNotSame(source, clone); + Assert.AreEqual("Kopie von " + source.Name, clone.Name, + "Name"); + Assert.AreNotSame(source.Elements, clone.Elements); + Assert.AreEqual(source.ReferenceStyle, clone.ReferenceStyle, + "ReferenceStyle"); + Assert.AreEqual( + ((Items)source.Elements[1]).Content, + ((Items)clone.Elements[1]).Content, + "Items content"); + } + } +} diff --git a/Tests/Tests.csproj b/Tests/Tests.csproj index fc37c1f..c9404eb 100755 --- a/Tests/Tests.csproj +++ b/Tests/Tests.csproj @@ -79,6 +79,7 @@ + diff --git a/zaaReloaded2/Properties/AssemblyInfo.cs b/zaaReloaded2/Properties/AssemblyInfo.cs index 1b66dcf..0d946e1 100755 --- a/zaaReloaded2/Properties/AssemblyInfo.cs +++ b/zaaReloaded2/Properties/AssemblyInfo.cs @@ -9,9 +9,9 @@ using System.Security; [assembly: AssemblyTitle("zaaReloaded2")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyCompany("Daniel Kraus")] [assembly: AssemblyProduct("zaaReloaded2")] -[assembly: AssemblyCopyright("Copyright © Microsoft 2015")] +[assembly: AssemblyCopyright("Copyright © Daniel Kraus 2015")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: InternalsVisibleTo("Tests, PublicKey=002400000480000094000000060200000024000052534131000400000100010061ecc0718277dee13e7dae2dad33787a981c9883ba80a659bebbdbec76563e201a7a3a6a5852e01bb5eb328d24d5889244b4626da9af9f93db663565441a3120e3985789e6f2a39289f4eed063725b84152cbef472d9dd2f7495f51dad6c91f4dc6fb7c72cb6bd9381335ac9878ec0a6369e880f35b8eca3063e16468d7704eb")] diff --git a/zaaReloaded2/Ribbon.cs b/zaaReloaded2/Ribbon.cs index 37305bf..958e328 100755 --- a/zaaReloaded2/Ribbon.cs +++ b/zaaReloaded2/Ribbon.cs @@ -202,10 +202,6 @@ namespace zaaReloaded2 Properties.Settings.Default.LastSettings = settings.Uid; Properties.Settings.Default.Save(); }; - vm.RequestCloseView += (sender, args) => - { - repository.Save(); - }; vm.InjectInto().ShowDialog(); } diff --git a/zaaReloaded2/ViewModels/ElementPickerViewModel.cs b/zaaReloaded2/ViewModels/ElementPickerViewModel.cs index 6b2ecbb..557119c 100755 --- a/zaaReloaded2/ViewModels/ElementPickerViewModel.cs +++ b/zaaReloaded2/ViewModels/ElementPickerViewModel.cs @@ -96,7 +96,7 @@ namespace zaaReloaded2.ViewModels Categories = new List(); if (allowControlElements) { - Categories.Add( + AddCategory( new CategoryViewModel( "Kontroll-Elemente", new Collection() @@ -108,7 +108,7 @@ namespace zaaReloaded2.ViewModels ) ); } - Categories.Add( + AddCategory( new CategoryViewModel( "Ausgabe-Elemente", new Collection() @@ -124,6 +124,12 @@ namespace zaaReloaded2.ViewModels #region Private methods + void AddCategory(CategoryViewModel category) + { + category.PropertyChanged += ElementViewModel_PropertyChanged; + Categories.Add(category); + } + /// /// Creates a new ControlElementViewModel that wraps a ControlElementBase /// object. The display string of the ControlElementViewModel is taken @@ -152,13 +158,16 @@ namespace zaaReloaded2.ViewModels void ElementViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { - if (e.PropertyName == "IsSelected") + // Casting sender as ElementViewModel may result in Null, but this + // is a desired effect because category headings may be selected + // in a view, but are not valid ElementViewModels that we could + // 'choose'. In addition, when an element is selected, another one + // is deselected, and the event triggers twice, once for the selected + // element and once for the deselected one. + ElementViewModel elementVM = sender as ElementViewModel; + if (elementVM != null && elementVM.IsSelected && e.PropertyName == "IsSelected") { - // Casting sender as ElementViewModel may result in Null, but this - // is a desired effect because category headings may be selected - // in a view, but are not valid ElementViewModels that we could - // 'choose'. - Selected = sender as ElementViewModel; + Selected = elementVM; } } @@ -172,7 +181,7 @@ namespace zaaReloaded2.ViewModels bool CanChooseElement() { - return Selected != null; + return Selected != null && Selected.IsSelected == true; } #endregion diff --git a/zaaReloaded2/ViewModels/SettingsRepositoryViewModel.cs b/zaaReloaded2/ViewModels/SettingsRepositoryViewModel.cs index 3822f8e..6277d1f 100755 --- a/zaaReloaded2/ViewModels/SettingsRepositoryViewModel.cs +++ b/zaaReloaded2/ViewModels/SettingsRepositoryViewModel.cs @@ -199,6 +199,10 @@ namespace zaaReloaded2.ViewModels SettingsViewModel vm = new SettingsViewModel(s); AddSettingsViewModel(vm); } + RequestCloseView += (sender, args) => + { + _repository.Store(); + }; } #endregion diff --git a/zaaReloaded2/Views/ElementPickerView.xaml b/zaaReloaded2/Views/ElementPickerView.xaml new file mode 100755 index 0000000..e845457 --- /dev/null +++ b/zaaReloaded2/Views/ElementPickerView.xaml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + +