Merge branch 'release-2.0.0-beta.1'
							
								
								
									
										19
									
								
								HISTORY.md
									
									
									
									
									
								
							
							
						
						@@ -1,4 +1,21 @@
 | 
				
			|||||||
Version 2.0.0-alpha.5 (2015-08-04)
 | 
					Version 2.0.0-beta.1 (2015-08-13)
 | 
				
			||||||
 | 
					========================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- FIX: Datenimport funktioniert jetzt auch mit Word-Text und nicht nur in den Tests.
 | 
				
			||||||
 | 
					- FIX: Mehrere Thesaurus-Fehler behoben.
 | 
				
			||||||
 | 
					- FIX: Stile werden jetzt gespeichert.
 | 
				
			||||||
 | 
					- NEU: Auf Werkseinstellungen zurücksetzen.
 | 
				
			||||||
 | 
					- NEU: Datumsangaben werden in eine Zeile "Laborwerte vom ..." eingebettet.
 | 
				
			||||||
 | 
					- NEU: Elemente können verschoben werden.
 | 
				
			||||||
 | 
					- NEU: Formatierung der Ausgabe mit Absatzvorlage.
 | 
				
			||||||
 | 
					- NEU: Parameter können im Thesaurus als "blacklisted" markiert werden und werden dann bei Verwendung einer Wildcard ("*") nicht berücksichtigt.
 | 
				
			||||||
 | 
					- NEU: Steuer-Elemente für Spalten.
 | 
				
			||||||
 | 
					- NEU: Stile können importiert und exportiert werden.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Version 2.0.0-alpha.5. (2015-08-04)
 | 
				
			||||||
========================================================================
 | 
					========================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- FIX: Daniels Spezial löscht nicht mehr die Unterschriften.
 | 
					- FIX: Daniels Spezial löscht nicht mehr die Unterschriften.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										50
									
								
								README.md
									
									
									
									
									
								
							
							
						
						@@ -52,6 +52,11 @@ folgende Teile aufgeteilt:
 | 
				
			|||||||
    existieren verschiedene Klassen, die die Klassen des Labor-Modells
 | 
					    existieren verschiedene Klassen, die die Klassen des Labor-Modells
 | 
				
			||||||
    (`zaaReloaded2.LabModel`) umschließen und um entsprechende
 | 
					    (`zaaReloaded2.LabModel`) umschließen und um entsprechende
 | 
				
			||||||
    Funktionalitäten erweitern.
 | 
					    Funktionalitäten erweitern.
 | 
				
			||||||
 | 
					  - __Kontrolle der Formatierung:__ Der Namensraum
 | 
				
			||||||
 | 
					    `zaaReloaded2.Controller` umfaßt Klassen, mit denen ein
 | 
				
			||||||
 | 
					    `zaaReloaded2.Formatter.Formatter` gesteuert werden kann. Diese
 | 
				
			||||||
 | 
					    Klassen spielen eine große Rolle bei den benutzerdefinierten
 | 
				
			||||||
 | 
					    Anpassungen von Stilen.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Parsen der Lauris-Ausgabe
 | 
					## Parsen der Lauris-Ausgabe
 | 
				
			||||||
@@ -174,4 +179,49 @@ oder nicht-normalen Parametern oder immer mit ausgegeben werden:
 | 
				
			|||||||
Die Markierung besonderer Parameter erfolgt in der Textdatei, aus der
 | 
					Die Markierung besonderer Parameter erfolgt in der Textdatei, aus der
 | 
				
			||||||
das `zaaReloaded2.Thesaurus.Parameters` generiert wird (s.o.).
 | 
					das `zaaReloaded2.Thesaurus.Parameters` generiert wird (s.o.).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## User Interface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Das User Interface wurde mit der Windows Presentation Foundation nach
 | 
				
			||||||
 | 
					dem [MVVM][]-Muster implementiert. Dabei wurde auf das Hilfs-Framework
 | 
				
			||||||
 | 
					[Bovender][bovender-framework] zurückgegriffen.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Updates
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Das Add-in sucht täglich nach einem Update; dabei wird die Datei
 | 
				
			||||||
 | 
					<http://zaa.nephrowiki.de/versioninfo.txt> heruntergeladen. Updates
 | 
				
			||||||
 | 
					werden automatisch im Hintergrund geladen und beim Schließen von Word
 | 
				
			||||||
 | 
					(bzw. der Zentralen Arztbriefablage) installiert und stehen dann beim
 | 
				
			||||||
 | 
					nächsten Starten der Anwendung zur Verfügung.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Serialisierung
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Um das Stil-Repositorium (`zaaReloaded2.Controller.SettingsRepository`)
 | 
				
			||||||
 | 
					in den Assembly-Properties speichern zu können und für den Im- und
 | 
				
			||||||
 | 
					Export von Stilen werden die in .NET eingebauten
 | 
				
			||||||
 | 
					Serialisierungs-Strukturen genutzt. Weil es mit der Verwendung eines
 | 
				
			||||||
 | 
					`XmlSerializer`s Probleme gab, weil der `XmlSerializer` nicht mit
 | 
				
			||||||
 | 
					Interface-Eigenschaften umgehen kann, wurde zunächst für alle Klassen,
 | 
				
			||||||
 | 
					die serialisiert werden müssen (`SettingsRepository`,
 | 
				
			||||||
 | 
					`zaaReloaded2.Controller.Settings` und die von
 | 
				
			||||||
 | 
					`zaaReloaded2.Controller.Elements.ElementBase` abgeleiteten Klassen) das
 | 
				
			||||||
 | 
					Interface `ISerializable` implementiert. Das hat aber auch nicht dazu
 | 
				
			||||||
 | 
					geführt, daß der `XmlSerializer` die Klassen serialisierte, so daß
 | 
				
			||||||
 | 
					jetzt der `SoapFormatter` verwendet wird. Der stört sich nicht an
 | 
				
			||||||
 | 
					Interface-Eigenschaften und produziert auch XML, wenngleich im etwas
 | 
				
			||||||
 | 
					komplizierten [SOAP][]-Format.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Um das `SettingsRepository` in den Assembly-Properties zu persistieren,
 | 
				
			||||||
 | 
					muß das serialisierte XML noch in einen Base64-kodierten String
 | 
				
			||||||
 | 
					umgewandelt werden, damit das SOAP-XML nicht mit dem XML der
 | 
				
			||||||
 | 
					Assembly-Properties ins Gehege kommt (siehe
 | 
				
			||||||
 | 
					`zaaReloaded2.Controller.SettingsRepository.Load()` und
 | 
				
			||||||
 | 
					`zaaReloaded2.Controller.SettingsRepository.Store()`).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[SOAP]: http://de.wikipedia.org/wiki/SOAP
 | 
				
			||||||
 | 
					[MVVM]: http://de.wikipedia.org/wiki/MVVM
 | 
				
			||||||
 | 
					[bovender-framework]: https://github.com/bovender/bovender
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<!-- vim: set tw=72 sw=2 ts=2 sts=-1 : -->
 | 
					<!-- vim: set tw=72 sw=2 ts=2 sts=-1 : -->
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -61,7 +61,10 @@ namespace Tests.Controller.Elements
 | 
				
			|||||||
            _formatter.Laboratory = lab;
 | 
					            _formatter.Laboratory = lab;
 | 
				
			||||||
            _formatter.Settings.Elements.Add(new zaa.Items("Na, K, Cl"));
 | 
					            _formatter.Settings.Elements.Add(new zaa.Items("Na, K, Cl"));
 | 
				
			||||||
            _formatter.Run();
 | 
					            _formatter.Run();
 | 
				
			||||||
            Assert.AreEqual("Na 133, K 6 (5)\r", _document.Range().Text);
 | 
					            string expected = (
 | 
				
			||||||
 | 
					                TimePointFormatter.DateAndTimeHeader(new DateTime(2015, 07, 13, 13, 31, 00)) +
 | 
				
			||||||
 | 
					                "Na 133, K 6 (5)\r\r").Replace(Environment.NewLine, "\r");
 | 
				
			||||||
 | 
					            Assert.AreEqual(expected, _document.Range().Text);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@@ -78,7 +81,10 @@ namespace Tests.Controller.Elements
 | 
				
			|||||||
            _formatter.Laboratory = lab;
 | 
					            _formatter.Laboratory = lab;
 | 
				
			||||||
            _formatter.Settings.Elements.Add(new zaa.Items("Klinische Chemie: Na, K, Cl"));
 | 
					            _formatter.Settings.Elements.Add(new zaa.Items("Klinische Chemie: Na, K, Cl"));
 | 
				
			||||||
            _formatter.Run();
 | 
					            _formatter.Run();
 | 
				
			||||||
            Assert.AreEqual("Klinische Chemie: Na 133, K 6 (5)\r", _document.Range().Text);
 | 
					            string expected = (
 | 
				
			||||||
 | 
					                TimePointFormatter.DateAndTimeHeader(new DateTime(2015, 07, 13, 13, 31, 00)) +
 | 
				
			||||||
 | 
					                "Klinische Chemie: Na 133, K 6 (5)\r\r").Replace(Environment.NewLine, "\r");
 | 
				
			||||||
 | 
					            Assert.AreEqual(expected, _document.Range().Text);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@@ -113,8 +119,10 @@ namespace Tests.Controller.Elements
 | 
				
			|||||||
            _formatter.Laboratory = lab;
 | 
					            _formatter.Laboratory = lab;
 | 
				
			||||||
            _formatter.Settings.Elements.Add(new zaa.Items("Klinische Chemie: Na, *"));
 | 
					            _formatter.Settings.Elements.Add(new zaa.Items("Klinische Chemie: Na, *"));
 | 
				
			||||||
            _formatter.Run();
 | 
					            _formatter.Run();
 | 
				
			||||||
            Assert.AreEqual("Klinische Chemie: Na 133, Cl 110, K 6\r",
 | 
					            string expected = (
 | 
				
			||||||
                _document.Range().Text);
 | 
					                TimePointFormatter.DateAndTimeHeader(new DateTime(2015, 07, 13, 13, 31, 00)) +
 | 
				
			||||||
 | 
					                "Klinische Chemie: Na 133, Cl 110, K 6\r\r").Replace(Environment.NewLine, "\r");
 | 
				
			||||||
 | 
					            Assert.AreEqual(expected, _document.Range().Text);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@@ -133,8 +141,10 @@ namespace Tests.Controller.Elements
 | 
				
			|||||||
            _formatter.Laboratory = lab;
 | 
					            _formatter.Laboratory = lab;
 | 
				
			||||||
            _formatter.Settings.Elements.Add(new zaa.Items("Klinische Chemie: Na, SU-*"));
 | 
					            _formatter.Settings.Elements.Add(new zaa.Items("Klinische Chemie: Na, SU-*"));
 | 
				
			||||||
            _formatter.Run();
 | 
					            _formatter.Run();
 | 
				
			||||||
            Assert.AreEqual("Klinische Chemie: Na 133, SU-Protein 2,8\r",
 | 
					            string expected = (
 | 
				
			||||||
                _document.Range().Text);
 | 
					                TimePointFormatter.DateAndTimeHeader(new DateTime(2015, 07, 13, 13, 31, 00)) +
 | 
				
			||||||
 | 
					                "Klinische Chemie: Na 133, SU-Protein 2,8\r\r").Replace(Environment.NewLine, "\r");
 | 
				
			||||||
 | 
					            Assert.AreEqual(expected, _document.Range().Text);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@@ -153,8 +163,11 @@ namespace Tests.Controller.Elements
 | 
				
			|||||||
            _formatter.Laboratory = lab;
 | 
					            _formatter.Laboratory = lab;
 | 
				
			||||||
            _formatter.Settings.Elements.Add(new zaa.Items("Klinische Chemie: Na, SU-*, *"));
 | 
					            _formatter.Settings.Elements.Add(new zaa.Items("Klinische Chemie: Na, SU-*, *"));
 | 
				
			||||||
            _formatter.Run();
 | 
					            _formatter.Run();
 | 
				
			||||||
            Assert.AreEqual("Klinische Chemie: Na 133, SU-Protein 2,8, Cl 110, U-Na 99\r",
 | 
					            string expected = (
 | 
				
			||||||
                _document.Range().Text);
 | 
					                TimePointFormatter.DateAndTimeHeader(new DateTime(2015, 07, 13, 13, 31, 00)) +
 | 
				
			||||||
 | 
					                "Klinische Chemie: Na 133, SU-Protein 2,8, Cl 110, U-Na 99\r\r")
 | 
				
			||||||
 | 
					                .Replace(Environment.NewLine, "\r");
 | 
				
			||||||
 | 
					            Assert.AreEqual(expected, _document.Range().Text);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,7 +27,7 @@ namespace Tests.Controller
 | 
				
			|||||||
    [TestFixture]
 | 
					    [TestFixture]
 | 
				
			||||||
    class SettingsRepositoryTest
 | 
					    class SettingsRepositoryTest
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        SettingsRepository _savedSettings;
 | 
					        string _savedSettings;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [SetUp]
 | 
					        [SetUp]
 | 
				
			||||||
        public void SetUp()
 | 
					        public void SetUp()
 | 
				
			||||||
@@ -50,11 +50,13 @@ namespace Tests.Controller
 | 
				
			|||||||
            string testName = "test";
 | 
					            string testName = "test";
 | 
				
			||||||
            s.Name = testName;
 | 
					            s.Name = testName;
 | 
				
			||||||
            sr.SettingsList.Add(s);
 | 
					            sr.SettingsList.Add(s);
 | 
				
			||||||
 | 
					            int expected = sr.SettingsList.Count;
 | 
				
			||||||
 | 
					            int index = sr.SettingsList.IndexOf(s);
 | 
				
			||||||
            sr.Store();
 | 
					            sr.Store();
 | 
				
			||||||
            sr = null;
 | 
					            sr = null;
 | 
				
			||||||
            sr = SettingsRepository.Load();
 | 
					            sr = SettingsRepository.Load();
 | 
				
			||||||
            Assert.AreEqual(1, sr.SettingsList.Count);
 | 
					            Assert.AreEqual(expected, sr.SettingsList.Count);
 | 
				
			||||||
            Assert.AreEqual(testName, sr.SettingsList[0].Name);
 | 
					            Assert.AreEqual(testName, sr.SettingsList[index].Name);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										54
									
								
								Tests/Controller/SettingsTest.cs
									
									
									
									
									
										Executable file
									
								
							
							
						
						@@ -0,0 +1,54 @@
 | 
				
			|||||||
 | 
					/* 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;
 | 
				
			||||||
 | 
					using System.IO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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<ElementBase>() { 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");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
04.07.2015 12:31:00:
 | 
					Laborwerte vom 04.07.2015 12:31:00:
 | 
				
			||||||
Klinische Chemie: Na 144 mM, K 4,3 mM
 | 
					Klinische Chemie: Na 144 mM, K 4,3 mM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
06.07.2015 10:28:00:
 | 
					Laborwerte vom 06.07.2015 10:28:00:
 | 
				
			||||||
Klinische Chemie: Na 138 mM, K 4,6 mM
 | 
					Klinische Chemie: Na 138 mM, K 4,6 mM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
04.07.2015:
 | 
					Laborwerte vom 04.07.2015:
 | 
				
			||||||
Klinische Chemie: Na 144 mM, K 4,3 mM
 | 
					Klinische Chemie: Na 144 mM, K 4,3 mM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
06.07.2015:
 | 
					Laborwerte vom 06.07.2015:
 | 
				
			||||||
Klinische Chemie: Na 138 mM, K 4,6 mM
 | 
					Klinische Chemie: Na 138 mM, K 4,6 mM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
04.07.2015:
 | 
					Laborwerte vom 04.07.2015:
 | 
				
			||||||
Klinische Chemie: Na 144 mM, K 4,3 mM
 | 
					Klinische Chemie: Na 144 mM, K 4,3 mM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
06.07.2015:
 | 
					Laborwerte vom 06.07.2015:
 | 
				
			||||||
Klinische Chemie: Na 138 mM, K 4,6 mM
 | 
					Klinische Chemie: Na 138 mM, K 4,6 mM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -99,6 +99,25 @@ namespace Tests.Formatter
 | 
				
			|||||||
                _document.Range().Text);
 | 
					                _document.Range().Text);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Test]
 | 
				
			||||||
 | 
					        public void FormatSpecialItems()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            ZaaImporter importer = new ZaaImporter();
 | 
				
			||||||
 | 
					            importer.Import(
 | 
				
			||||||
 | 
					                "Klinische Chemie: glomerul. Filtrationsr. CKD-EP: 36 ml/min /1,73qm; " +
 | 
				
			||||||
 | 
					                "Sammelmenge (U): 12300 ml; "
 | 
				
			||||||
 | 
					                );
 | 
				
			||||||
 | 
					            Document document = new Document();
 | 
				
			||||||
 | 
					            f.Formatter formatter = new f.Formatter(document);
 | 
				
			||||||
 | 
					            formatter.Laboratory = importer.Laboratory;
 | 
				
			||||||
 | 
					            formatter.Settings = new zaaReloaded2.Controller.Settings(
 | 
				
			||||||
 | 
					                new List<ElementBase>() { new Items("*") } );
 | 
				
			||||||
 | 
					            formatter.Run();
 | 
				
			||||||
 | 
					            Assert.AreEqual(
 | 
				
			||||||
 | 
					                "eGFR (CKD-EPI) 36 ml/min/1,73 m², SU-Volumen 12300 ml\r\r",
 | 
				
			||||||
 | 
					                document.Range().Text);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        string GetResourceText(string resource)
 | 
					        string GetResourceText(string resource)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            try
 | 
					            try
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -40,7 +40,7 @@ namespace Tests.Importer.ZaaImporter
 | 
				
			|||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
        public void ParseInvalidLaurisTimePoints()
 | 
					        public void ParseInvalidLaurisTimePoints()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            LaurisTimePoint tp = new LaurisTimePoint("Aerobe Kultur: Enterokokken ;  Wachstum: 10 ;");
 | 
					            LaurisTimePoint tp = new LaurisTimePoint("Mit freundlichen Grüßen");
 | 
				
			||||||
            Assert.IsFalse(tp.IsValidTimePoint,
 | 
					            Assert.IsFalse(tp.IsValidTimePoint,
 | 
				
			||||||
                "Bogus paragraph should be invalid LaurisTimePoint");
 | 
					                "Bogus paragraph should be invalid LaurisTimePoint");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,5 +41,15 @@ namespace Tests.Importer.ZaaImporter
 | 
				
			|||||||
            // Only 6 distinct time points (see method documentation above).
 | 
					            // Only 6 distinct time points (see method documentation above).
 | 
				
			||||||
            Assert.AreEqual(6, importer.Laboratory.TimePoints.Count);
 | 
					            Assert.AreEqual(6, importer.Laboratory.TimePoints.Count);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Test]
 | 
				
			||||||
 | 
					        public void ParseInvalidInput()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            zaa.ZaaImporter importer = new zaa.ZaaImporter();
 | 
				
			||||||
 | 
					            importer.Import("some arbitrary text\r\nthat does not represent\r\na valid lab");
 | 
				
			||||||
 | 
					            Assert.IsFalse(importer.Success);
 | 
				
			||||||
 | 
					            importer.Import("(03.03.1930 13:30:00)\r\nKlinische Chemie: Natrium 135 [135 - 145] mmol/l;");
 | 
				
			||||||
 | 
					            Assert.IsTrue(importer.Success);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										169
									
								
								Tests/SerializationTest.cs
									
									
									
									
									
										Executable file
									
								
							
							
						
						@@ -0,0 +1,169 @@
 | 
				
			|||||||
 | 
					/* SelectFirstDayTest.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.IO;
 | 
				
			||||||
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Text;
 | 
				
			||||||
 | 
					using System.Xml.Serialization;
 | 
				
			||||||
 | 
					using zaaReloaded2.Controller.Elements;
 | 
				
			||||||
 | 
					using NUnit.Framework;
 | 
				
			||||||
 | 
					using System.Runtime.Serialization.Formatters.Binary;
 | 
				
			||||||
 | 
					using System.Runtime.Serialization.Formatters.Soap;
 | 
				
			||||||
 | 
					using zaaReloaded2.Controller;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Tests.Controller
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [TestFixture]
 | 
				
			||||||
 | 
					    class SerializationTest
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        [Test]
 | 
				
			||||||
 | 
					        public void SerializeControlElement()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            SelectFirstDay element = new SelectFirstDay(
 | 
				
			||||||
 | 
					                new List<FormatElementBase>()
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    new Items("hello"),
 | 
				
			||||||
 | 
					                    new Items("world")
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					            MemoryStream stream = new MemoryStream();
 | 
				
			||||||
 | 
					            // XmlSerializer does not work with interface properties...
 | 
				
			||||||
 | 
					            // XmlSerializer serializer = new XmlSerializer(typeof(SelectFirstDay));
 | 
				
			||||||
 | 
					            // BinaryFormatter serializer = new BinaryFormatter();
 | 
				
			||||||
 | 
					            SoapFormatter serializer = new SoapFormatter();
 | 
				
			||||||
 | 
					            serializer.Serialize(stream, element);
 | 
				
			||||||
 | 
					            stream.Position = 0;
 | 
				
			||||||
 | 
					            StreamReader sr = new StreamReader(stream);
 | 
				
			||||||
 | 
					            Console.WriteLine(sr.ReadToEnd());
 | 
				
			||||||
 | 
					            stream.Position = 0;
 | 
				
			||||||
 | 
					            SelectFirstDay deserialized = serializer.Deserialize(stream) as SelectFirstDay;
 | 
				
			||||||
 | 
					            Assert.IsNotNull(deserialized);
 | 
				
			||||||
 | 
					            Assert.AreEqual(element.Children.Count, deserialized.Children.Count);
 | 
				
			||||||
 | 
					            Assert.AreEqual(element.Children[0].Content, deserialized.Children[0].Content);
 | 
				
			||||||
 | 
					            Assert.AreEqual(element.Children[1].Content, deserialized.Children[1].Content);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Test]
 | 
				
			||||||
 | 
					        public void SerializeFormatElement()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            string testString = "Hello World";
 | 
				
			||||||
 | 
					            CustomText element = new CustomText();
 | 
				
			||||||
 | 
					            element.Content = testString;
 | 
				
			||||||
 | 
					            MemoryStream stream = new MemoryStream();
 | 
				
			||||||
 | 
					            SoapFormatter serializer = new SoapFormatter();
 | 
				
			||||||
 | 
					            serializer.Serialize(stream, element);
 | 
				
			||||||
 | 
					            stream.Position = 0;
 | 
				
			||||||
 | 
					            CustomText deserialized = serializer.Deserialize(stream) as CustomText;
 | 
				
			||||||
 | 
					            Assert.IsNotNull(deserialized);
 | 
				
			||||||
 | 
					            Assert.AreEqual(element.Content, deserialized.Content);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Test]
 | 
				
			||||||
 | 
					        public void SerializeSettings()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Settings settings = CreateTestSettings1();
 | 
				
			||||||
 | 
					            MemoryStream stream = new MemoryStream();
 | 
				
			||||||
 | 
					            SoapFormatter serializer = new SoapFormatter();
 | 
				
			||||||
 | 
					            serializer.Serialize(stream, settings);
 | 
				
			||||||
 | 
					            stream.Position = 0;
 | 
				
			||||||
 | 
					            Settings deserialized = serializer.Deserialize(stream) as Settings;
 | 
				
			||||||
 | 
					            Assert.IsNotNull(deserialized);
 | 
				
			||||||
 | 
					            Assert.AreEqual(settings.Name, deserialized.Name);
 | 
				
			||||||
 | 
					            Assert.AreEqual(settings.ReferenceStyle, deserialized.ReferenceStyle);
 | 
				
			||||||
 | 
					            Assert.AreEqual(settings.Elements.Count, deserialized.Elements.Count);
 | 
				
			||||||
 | 
					            Assert.AreEqual(settings.Elements[0].GetType(), deserialized.Elements[0].GetType());
 | 
				
			||||||
 | 
					            Assert.AreEqual(settings.Elements[1].GetType(), deserialized.Elements[1].GetType());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Test]
 | 
				
			||||||
 | 
					        public void SerializeSettingsRepository()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            SettingsRepository repository = new SettingsRepository();
 | 
				
			||||||
 | 
					            repository.SettingsList.Add(CreateTestSettings1());
 | 
				
			||||||
 | 
					            repository.SettingsList.Add(CreateTestSettings2());
 | 
				
			||||||
 | 
					            MemoryStream stream = new MemoryStream();
 | 
				
			||||||
 | 
					            SoapFormatter serializer = new SoapFormatter();
 | 
				
			||||||
 | 
					            serializer.Serialize(stream, repository);
 | 
				
			||||||
 | 
					            stream.Position = 0;
 | 
				
			||||||
 | 
					            SettingsRepository deserialized = serializer.Deserialize(stream) as SettingsRepository;
 | 
				
			||||||
 | 
					            Assert.IsNotNull(deserialized);
 | 
				
			||||||
 | 
					            Assert.AreEqual(repository.SettingsList.Count, deserialized.SettingsList.Count);
 | 
				
			||||||
 | 
					            Assert.AreEqual(
 | 
				
			||||||
 | 
					                repository.SettingsList[1].Elements.Count,
 | 
				
			||||||
 | 
					                deserialized.SettingsList[1].Elements.Count
 | 
				
			||||||
 | 
					                );
 | 
				
			||||||
 | 
					            Assert.AreEqual(
 | 
				
			||||||
 | 
					                repository.SettingsList[0].Name,
 | 
				
			||||||
 | 
					                deserialized.SettingsList[0].Name
 | 
				
			||||||
 | 
					                );
 | 
				
			||||||
 | 
					            Assert.AreEqual(
 | 
				
			||||||
 | 
					                repository.SettingsList[0].ReferenceStyle,
 | 
				
			||||||
 | 
					                deserialized.SettingsList[0].ReferenceStyle
 | 
				
			||||||
 | 
					                );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Settings CreateTestSettings1()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            string testName = "test name...";
 | 
				
			||||||
 | 
					            string testString = "Hello World";
 | 
				
			||||||
 | 
					            SelectFirstDay controlElement = new SelectFirstDay(
 | 
				
			||||||
 | 
					                new List<FormatElementBase>()
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    new Items("hello"),
 | 
				
			||||||
 | 
					                    new Items("world")
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					            CustomText formatElement = new CustomText();
 | 
				
			||||||
 | 
					            formatElement.Content = testString;
 | 
				
			||||||
 | 
					            Settings settings = new Settings(testName, new List<ElementBase>()
 | 
				
			||||||
 | 
					                { 
 | 
				
			||||||
 | 
					                    controlElement,
 | 
				
			||||||
 | 
					                    formatElement
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					            settings.ReferenceStyle = zaaReloaded2.Formatter.ReferenceStyle.IfSpecialItem;
 | 
				
			||||||
 | 
					            return settings;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Settings CreateTestSettings2()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            string testName = "another test name";
 | 
				
			||||||
 | 
					            SelectFirstDay controlElement1 = new SelectFirstDay(
 | 
				
			||||||
 | 
					                new List<FormatElementBase>()
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    new CustomText(),
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					            SelectLastDay controlElement2 = new SelectLastDay(
 | 
				
			||||||
 | 
					                new List<FormatElementBase>()
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    new Items("Items content"),
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					            Settings settings = new Settings(testName, new List<ElementBase>()
 | 
				
			||||||
 | 
					                { 
 | 
				
			||||||
 | 
					                    controlElement1,
 | 
				
			||||||
 | 
					                    controlElement2
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					            settings.ReferenceStyle = zaaReloaded2.Formatter.ReferenceStyle.IfSpecialOrAbnormal;
 | 
				
			||||||
 | 
					            return settings;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -58,11 +58,13 @@
 | 
				
			|||||||
    <Reference Include="System.Core">
 | 
					    <Reference Include="System.Core">
 | 
				
			||||||
      <RequiredTargetFramework>3.5</RequiredTargetFramework>
 | 
					      <RequiredTargetFramework>3.5</RequiredTargetFramework>
 | 
				
			||||||
    </Reference>
 | 
					    </Reference>
 | 
				
			||||||
 | 
					    <Reference Include="System.Runtime.Serialization.Formatters.Soap" />
 | 
				
			||||||
    <Reference Include="System.Windows.Interactivity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
 | 
					    <Reference Include="System.Windows.Interactivity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
 | 
				
			||||||
      <HintPath>..\packages\Expression.Blend.Sdk.1.0.2\lib\net40-client\System.Windows.Interactivity.dll</HintPath>
 | 
					      <HintPath>..\packages\Expression.Blend.Sdk.1.0.2\lib\net40-client\System.Windows.Interactivity.dll</HintPath>
 | 
				
			||||||
      <Private>True</Private>
 | 
					      <Private>True</Private>
 | 
				
			||||||
    </Reference>
 | 
					    </Reference>
 | 
				
			||||||
    <Reference Include="System.Xaml" />
 | 
					    <Reference Include="System.Xaml" />
 | 
				
			||||||
 | 
					    <Reference Include="System.XML" />
 | 
				
			||||||
    <Reference Include="WindowsBase" />
 | 
					    <Reference Include="WindowsBase" />
 | 
				
			||||||
  </ItemGroup>
 | 
					  </ItemGroup>
 | 
				
			||||||
  <Choose>
 | 
					  <Choose>
 | 
				
			||||||
@@ -78,7 +80,9 @@
 | 
				
			|||||||
    </Otherwise>
 | 
					    </Otherwise>
 | 
				
			||||||
  </Choose>
 | 
					  </Choose>
 | 
				
			||||||
  <ItemGroup>
 | 
					  <ItemGroup>
 | 
				
			||||||
 | 
					    <Compile Include="SerializationTest.cs" />
 | 
				
			||||||
    <Compile Include="Controller\SettingsRepositoryTest.cs" />
 | 
					    <Compile Include="Controller\SettingsRepositoryTest.cs" />
 | 
				
			||||||
 | 
					    <Compile Include="Controller\SettingsTest.cs" />
 | 
				
			||||||
    <Compile Include="Formatter\DocumentWriterTest.cs" />
 | 
					    <Compile Include="Formatter\DocumentWriterTest.cs" />
 | 
				
			||||||
    <Compile Include="Thesaurus\ThesaurusTest.cs" />
 | 
					    <Compile Include="Thesaurus\ThesaurusTest.cs" />
 | 
				
			||||||
    <Compile Include="Controller\Elements\ItemsTest.cs" />
 | 
					    <Compile Include="Controller\Elements\ItemsTest.cs" />
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -69,7 +69,7 @@ namespace Tests.ViewModels
 | 
				
			|||||||
            _settingsVM.AddElementViewModel(viewModel);
 | 
					            _settingsVM.AddElementViewModel(viewModel);
 | 
				
			||||||
            viewModel.IsSelected = true;
 | 
					            viewModel.IsSelected = true;
 | 
				
			||||||
            int oldViewModelChildrenCount = viewModel.Elements.Count;
 | 
					            int oldViewModelChildrenCount = viewModel.Elements.Count;
 | 
				
			||||||
            int oldModelChildrenCount = model.FormatElements.Count;
 | 
					            int oldModelChildrenCount = model.Children.Count;
 | 
				
			||||||
            _settingsVM.AddChildElementMessage.Sent += (sender, args) =>
 | 
					            _settingsVM.AddChildElementMessage.Sent += (sender, args) =>
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                messageSent = true;
 | 
					                messageSent = true;
 | 
				
			||||||
@@ -84,7 +84,7 @@ namespace Tests.ViewModels
 | 
				
			|||||||
            Assert.IsTrue(messageSent, "Message was not sent");
 | 
					            Assert.IsTrue(messageSent, "Message was not sent");
 | 
				
			||||||
            Assert.AreEqual(oldViewModelChildrenCount + 1, viewModel.Elements.Count,
 | 
					            Assert.AreEqual(oldViewModelChildrenCount + 1, viewModel.Elements.Count,
 | 
				
			||||||
                "Count of children in ViewModel was not increased by 1");
 | 
					                "Count of children in ViewModel was not increased by 1");
 | 
				
			||||||
            Assert.AreEqual(oldModelChildrenCount + 1, model.FormatElements.Count,
 | 
					            Assert.AreEqual(oldModelChildrenCount + 1, model.Children.Count,
 | 
				
			||||||
                "Count of children in Model was not increased by 1");
 | 
					                "Count of children in Model was not increased by 1");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -106,13 +106,83 @@ namespace Tests.ViewModels
 | 
				
			|||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
        public void DeleteElement()
 | 
					        public void DeleteElement()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            throw new NotImplementedException();
 | 
					            Settings settings = new Settings();
 | 
				
			||||||
 | 
					            settings.AddElement(new SelectFirstDay());
 | 
				
			||||||
 | 
					            settings.AddElement(new SelectEachDay());
 | 
				
			||||||
 | 
					            settings.AddElement(new SelectLastDay());
 | 
				
			||||||
 | 
					            SettingsViewModel settingsVM = new SettingsViewModel(settings);
 | 
				
			||||||
 | 
					            int oldCount = settingsVM.Elements.Count;
 | 
				
			||||||
 | 
					            ElementViewModel elementVM = settingsVM.Elements.First();
 | 
				
			||||||
 | 
					            ElementBase element = elementVM.RevealModelObject() as ElementBase;
 | 
				
			||||||
 | 
					            Assert.IsTrue(settings.Elements.Contains(element),
 | 
				
			||||||
 | 
					                "Settings object does not contain the model that the VM revealed?!");
 | 
				
			||||||
 | 
					            elementVM.IsSelected = true;
 | 
				
			||||||
 | 
					            Assert.IsTrue(settingsVM.DeleteElementCommand.CanExecute(null),
 | 
				
			||||||
 | 
					                "DeleteElementCommand should be enabled.");
 | 
				
			||||||
 | 
					            settingsVM.DeleteElementCommand.Execute(null);
 | 
				
			||||||
 | 
					            Assert.AreEqual(oldCount - 1, settingsVM.Elements.Count);
 | 
				
			||||||
 | 
					            Assert.IsFalse(settingsVM.Elements.Contains(elementVM),
 | 
				
			||||||
 | 
					                "Elements collection still contains the deleted element view model.");
 | 
				
			||||||
 | 
					            Assert.IsFalse(settings.Elements.Contains(element),
 | 
				
			||||||
 | 
					                "Settings' Element collection still contains the element model.");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Test]
 | 
				
			||||||
 | 
					        public void DeleteChildElement()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Settings settings = new Settings();
 | 
				
			||||||
 | 
					            settings.AddElement(new SelectFirstDay(new Items()));
 | 
				
			||||||
 | 
					            settings.AddElement(new SelectEachDay());
 | 
				
			||||||
 | 
					            settings.AddElement(new SelectLastDay());
 | 
				
			||||||
 | 
					            SettingsViewModel settingsVM = new SettingsViewModel(settings);
 | 
				
			||||||
 | 
					            ControlElementViewModel parent = ((ControlElementViewModel)settingsVM.Elements.First());
 | 
				
			||||||
 | 
					            int oldCount = parent.Elements.Count;
 | 
				
			||||||
 | 
					            ElementViewModel elementVM = ((ControlElementViewModel)settingsVM.Elements.First())
 | 
				
			||||||
 | 
					                .Elements.First();
 | 
				
			||||||
 | 
					            ElementBase element = elementVM.RevealModelObject() as ElementBase;
 | 
				
			||||||
 | 
					            Assert.IsTrue(((ControlElementBase)settings.Elements[0]).Children.Contains(element),
 | 
				
			||||||
 | 
					                "Settings object does not contain the model that the VM revealed?!");
 | 
				
			||||||
 | 
					            elementVM.IsSelected = true;
 | 
				
			||||||
 | 
					            Assert.IsTrue(settingsVM.DeleteElementCommand.CanExecute(null),
 | 
				
			||||||
 | 
					                "DeleteElementCommand should be enabled.");
 | 
				
			||||||
 | 
					            settingsVM.DeleteElementCommand.Execute(null);
 | 
				
			||||||
 | 
					            Assert.AreEqual(oldCount - 1, parent.Elements.Count);
 | 
				
			||||||
 | 
					            Assert.IsFalse(parent.Elements.Contains(elementVM),
 | 
				
			||||||
 | 
					                "Elements collection still contains the deleted element view model.");
 | 
				
			||||||
 | 
					            Assert.IsFalse(((ControlElementBase)settings.Elements[0]).Children.Contains(element),
 | 
				
			||||||
 | 
					                "Settings' collection of FormatElement children still contains the element model.");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
        public void CopyElement()
 | 
					        public void CopyElement()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            throw new NotImplementedException();
 | 
					            string testString = "this text should be duplicated";
 | 
				
			||||||
 | 
					            _settingsVM.AddElementViewModel(
 | 
				
			||||||
 | 
					                new ControlElementViewModel(new SelectEachDay(new Items(testString))));
 | 
				
			||||||
 | 
					            int oldCount = _settingsVM.Elements.Count;
 | 
				
			||||||
 | 
					            _settingsVM.Elements.First().IsSelected = true;
 | 
				
			||||||
 | 
					            Assert.IsTrue(_settingsVM.CopyElementCommand.CanExecute(null),
 | 
				
			||||||
 | 
					                "CopyElementCommand should be enabled.");
 | 
				
			||||||
 | 
					            _settingsVM.CopyElementCommand.Execute(null);
 | 
				
			||||||
 | 
					            Assert.AreEqual(oldCount + 1, _settingsVM.Elements.Count);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Access the first element
 | 
				
			||||||
 | 
					            ControlElementViewModel controlVM = _settingsVM.Elements.First() as ControlElementViewModel;
 | 
				
			||||||
 | 
					            FormatElementViewModel formatVM = controlVM.Elements.First() as FormatElementViewModel;
 | 
				
			||||||
 | 
					            Items items = formatVM.RevealModelObject() as Items;
 | 
				
			||||||
 | 
					            Assert.IsNotNull(items,
 | 
				
			||||||
 | 
					                "Child ViewModel of first ControlElementViewModel does not wrap Items object.");
 | 
				
			||||||
 | 
					            Assert.AreEqual(testString, items.Content,
 | 
				
			||||||
 | 
					                "First control element's child element has incorrect Content string.");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Access the second element
 | 
				
			||||||
 | 
					            controlVM = _settingsVM.Elements.Last() as ControlElementViewModel;
 | 
				
			||||||
 | 
					            formatVM = controlVM.Elements.First() as FormatElementViewModel;
 | 
				
			||||||
 | 
					            items = formatVM.RevealModelObject() as Items;
 | 
				
			||||||
 | 
					            Assert.IsNotNull(items,
 | 
				
			||||||
 | 
					                "Child ViewModel of last ControlElementViewModel does not wrap Items object.");
 | 
				
			||||||
 | 
					            Assert.AreEqual(testString, items.Content,
 | 
				
			||||||
 | 
					                "First control element's child element has incorrect Content string.");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										
											BIN
										
									
								
								gimp/down.xcf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								gimp/duplicate.xcf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								gimp/exit.xcf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								gimp/export.xcf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								gimp/gear.xcf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								gimp/import.xcf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								gimp/minus.xcf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								gimp/pen.xcf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								gimp/plus-child.xcf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								gimp/plus.xcf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								gimp/reset.xcf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								gimp/up.xcf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								www/img/elementbearbeiten.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 12 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								www/img/elementpicker.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 18 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								www/img/nachher.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 37 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								www/img/ribbon.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 5.6 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								www/img/stilauswahl.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 24 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								www/img/stilbearbeiten.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 29 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								www/img/vorher.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 78 KiB  | 
							
								
								
									
										162
									
								
								www/index.html
									
									
									
									
									
								
							
							
						
						@@ -1,20 +1,178 @@
 | 
				
			|||||||
<html>
 | 
					<html>
 | 
				
			||||||
<head>
 | 
					<head>
 | 
				
			||||||
  <title>zaaReloaded2 by Daniel Kraus</title>
 | 
					  <title>zaaReloaded2 by Daniel Kraus</title>
 | 
				
			||||||
 | 
					  <meta charset="utf-8">
 | 
				
			||||||
 | 
					  <meta name="author" content="Daniel Kraus">
 | 
				
			||||||
 | 
					  <style type="text/css"><!--
 | 
				
			||||||
 | 
					    * {
 | 
				
			||||||
 | 
					      font-family: Arial; font-size: 16px; line-height: 125%;
 | 
				
			||||||
 | 
					      color: #333;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    body { margin: 16px 24px; max-width: 800px; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    h1 { font-size: 150%; margin: 48px 0 24px 0; }
 | 
				
			||||||
 | 
					    h2 { font-size: 120%; margin: 32px 0 16px 0; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    p { text-align: justify; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    img {
 | 
				
			||||||
 | 
					      box-shadow: 2px 2px 8px #444;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .download {
 | 
				
			||||||
 | 
					      width: 500px; margin: 16px auto; 
 | 
				
			||||||
 | 
					      padding: 8px; border: 1px solid #888; 
 | 
				
			||||||
 | 
					      box-shadow: 2px 2px 8px #444;
 | 
				
			||||||
 | 
					      background-color: #eef;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .float-right {
 | 
				
			||||||
 | 
					      float: right;
 | 
				
			||||||
 | 
					      margin: 8px 0 8px 16px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .center {
 | 
				
			||||||
 | 
					      text-align: center;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .clear {
 | 
				
			||||||
 | 
					      clear: both;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  --></style>
 | 
				
			||||||
</head>
 | 
					</head>
 | 
				
			||||||
<body>
 | 
					<body>
 | 
				
			||||||
  <h1>zaaReloaded2</h1>
 | 
					  <h1>zaaReloaded2</h1>
 | 
				
			||||||
  <p>
 | 
					  <p style="font-weight: bold;">
 | 
				
			||||||
    Erweiterung für Microsoft® Word 2010-2013, das die <a
 | 
					    Erweiterung für Microsoft® Word 2010-2013, das die <a
 | 
				
			||||||
    href="http://www.smi.ukw.de/sap-klinische-verfahren/archivsysteme/zentrale-arztbriefablage.html">
 | 
					    href="http://www.smi.ukw.de/sap-klinische-verfahren/archivsysteme/zentrale-arztbriefablage.html">
 | 
				
			||||||
    Zentrale Arztbriefablage (ZAA)</a> um Funktionen für das Formatieren
 | 
					    Zentrale Arztbriefablage (ZAA)</a> um Funktionen für das Formatieren
 | 
				
			||||||
    von Laborwerten erweitert. 
 | 
					    von Laborwerten erweitert. 
 | 
				
			||||||
  </p>
 | 
					  </p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <div class="download">
 | 
				
			||||||
 | 
					    <h2 style="margin-top:0">Download</h2>
 | 
				
			||||||
 | 
					    <p><a href="downloads/">zaa.nephrowiki.de/downloads</a></p>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <h2>Anleitung</h2>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <p class="center">
 | 
				
			||||||
 | 
					    <img src="img/ribbon.png" alt="zaaReloaded2-Ribbon" />
 | 
				
			||||||
 | 
					  </p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <ol>
 | 
				
			||||||
 | 
					    <li>Laborwerte auf üblichem Wege in einen Arztbrief einfügen
 | 
				
			||||||
 | 
					      (alternativ kann der Befehl "Demo" ausgeführt werden, dann wird
 | 
				
			||||||
 | 
					      ein Beispieldokument mit Laborwerten geöffnet).</li>
 | 
				
			||||||
 | 
					    <li>Im zaaReloaded-Tab (s.o.) den linken Knopf "Formatieren"
 | 
				
			||||||
 | 
					      klicken.</li>
 | 
				
			||||||
 | 
					    <p class="center">
 | 
				
			||||||
 | 
					      <img src="img/stilauswahl.png" alt="Stil auswählen" />
 | 
				
			||||||
 | 
					    </p>
 | 
				
			||||||
 | 
					    <li>
 | 
				
			||||||
 | 
					      Beim ersten Mal erscheint eine Liste mit Stilen, aus der man den
 | 
				
			||||||
 | 
					      gewünschten Stil auswählt (siehe Abbildung). Beim nächsten Mal,
 | 
				
			||||||
 | 
					      wenn man auf diesen Knopf drückt, wird der zuletzt verwendete Stil
 | 
				
			||||||
 | 
					      genommen.</li>
 | 
				
			||||||
 | 
					    <li>Einen Moment warten... Voilà.</li>
 | 
				
			||||||
 | 
					  </ol>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <h2 class="clear">Anpassen</h2>
 | 
				
			||||||
 | 
					  <p>
 | 
				
			||||||
 | 
					    Das Addin enthält einen Stil-Editor, mit dem die eingebauten Stile
 | 
				
			||||||
 | 
					    bearbeitet und neue Stile entworfen werden können:
 | 
				
			||||||
 | 
					  </p>
 | 
				
			||||||
 | 
					  <p class="center">
 | 
				
			||||||
 | 
					    <img src="img/stilbearbeiten.png" alt="Stil bearbeiten" />
 | 
				
			||||||
 | 
					  </p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <p class="clear">
 | 
				
			||||||
 | 
					    <img src="img/elementpicker.png" alt="Elemente" class="float-right" />
 | 
				
			||||||
 | 
					    Jeder Stil setzt sich aus sog. <i>Elementen</i> zusammen. Es gibt
 | 
				
			||||||
 | 
					    <i>Steuerelemente</i>, die zum Beispiel für die Auswahl eines Tages
 | 
				
			||||||
 | 
					    (erster Tag/letzter Tag) zuständig sind, und es gibt
 | 
				
			||||||
 | 
					    <i>Ausgabeelemente</i>, die die eigentliche Formatierung und Ausgabe
 | 
				
			||||||
 | 
					    der Laborwerte übernehmen.
 | 
				
			||||||
 | 
					  </p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <p>
 | 
				
			||||||
 | 
					    Steuerelemente:
 | 
				
			||||||
 | 
					  </p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <ul>
 | 
				
			||||||
 | 
					    <li>Ersten Tag auswählen</li>
 | 
				
			||||||
 | 
					    <li>Letzten Tag auswählen</li>
 | 
				
			||||||
 | 
					    <li>Jeden Tag nacheinander auswählen</li>
 | 
				
			||||||
 | 
					    <li>Zwei Spalten einfügen/zur nächsten Spalte wechseln</li>
 | 
				
			||||||
 | 
					  </ul>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <p>
 | 
				
			||||||
 | 
					    Ausgabeelemente:
 | 
				
			||||||
 | 
					  </p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <ul>
 | 
				
			||||||
 | 
					    <li>Laborparameter</li>
 | 
				
			||||||
 | 
					    <li>Beliebiger Text</li>
 | 
				
			||||||
 | 
					  </ul>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <p>
 | 
				
			||||||
 | 
					    "Beliebiger Text" kann, wie der Name schon sagt, beliebigen Text
 | 
				
			||||||
 | 
					    enthalten, der nicht weiter bearbeitet wird. Auf diese Weise kann
 | 
				
			||||||
 | 
					    man z.B. Platzhalter für Urinsedimente ausgeben lassen, die dann
 | 
				
			||||||
 | 
					    noch händisch vervollständigt werden.
 | 
				
			||||||
 | 
					  </p>
 | 
				
			||||||
 | 
					  <p>
 | 
				
			||||||
 | 
					    "Laborparameter" enthalten eine durch Kommata getrennte Auflistung
 | 
				
			||||||
 | 
					    von Parametern, die ausgegeben werden sollen. Jedes Element
 | 
				
			||||||
 | 
					    "Laborparameter" kann optional einen Titel enthalten:
 | 
				
			||||||
 | 
					  </p>
 | 
				
			||||||
 | 
					  <p>
 | 
				
			||||||
 | 
					    Beispiel:
 | 
				
			||||||
 | 
					  </p>
 | 
				
			||||||
 | 
					  <blockquote>
 | 
				
			||||||
 | 
					    <p>
 | 
				
			||||||
 | 
					      <img src="img/elementbearbeiten.png" alt="Element bearbeiten" />
 | 
				
			||||||
 | 
					    </p>
 | 
				
			||||||
 | 
					    <p>
 | 
				
			||||||
 | 
					      Klinische Chemie: Na, K, Cl, (usw.)
 | 
				
			||||||
 | 
					    </p>
 | 
				
			||||||
 | 
					  </blockquote>
 | 
				
			||||||
 | 
					  <p>
 | 
				
			||||||
 | 
					    In diesem Fall ist "Klinische Chemie:" der optionale Titel.
 | 
				
			||||||
 | 
					  </p>
 | 
				
			||||||
 | 
					  <p>
 | 
				
			||||||
 | 
					    Die Bezeichnungen der einzelnen Parameter sind fest einprogrammiert.
 | 
				
			||||||
 | 
					    Teils decken sie sich mit den Bezeichnungen, wie sie in der
 | 
				
			||||||
 | 
					    Zentralen Arztbriefablage erscheinen; teils sind sie aber auch
 | 
				
			||||||
 | 
					    Surrogate (z.B. "eGFR (CKD-EPI)" anstatt "glomerul. Filtrationsr.
 | 
				
			||||||
 | 
					    CKD-EP").
 | 
				
			||||||
 | 
					  </p>
 | 
				
			||||||
 | 
					  <p>
 | 
				
			||||||
 | 
					    Die Platzhalter "SU-*", "U-*" und "*" geben die noch nicht
 | 
				
			||||||
 | 
					    verwendeten Werte für Sammelurin, Spontanurin und alles weitere aus.
 | 
				
			||||||
 | 
					    "*" sollte daher als letztes verwendet werden.
 | 
				
			||||||
 | 
					  <p>
 | 
				
			||||||
 | 
					    Die Liste der möglichen Parameternamen ist momentan fest
 | 
				
			||||||
 | 
					    einprogrammiert und kann auch noch nicht angezeigt werden. Man kann
 | 
				
			||||||
 | 
					    beim Entwickeln eines Stils aber probehalber den Platzhalter "*"
 | 
				
			||||||
 | 
					    verwenden und sieht dann, welche Parameternamen noch verwendet
 | 
				
			||||||
 | 
					    werden könnten.
 | 
				
			||||||
 | 
					  </p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <h2>Updates</h2>
 | 
				
			||||||
 | 
					  <p>
 | 
				
			||||||
 | 
					    Das Addin sucht täglich nach Updates und lädt und installiert diese
 | 
				
			||||||
 | 
					    bei Bedarf im Hintergrund.
 | 
				
			||||||
 | 
					  </p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <h2>Weitere Informationen</h2>
 | 
					  <h2>Weitere Informationen</h2>
 | 
				
			||||||
  <p><a href="doc/md_history.html">Versionsgeschichte</a></p>
 | 
					  <p><a href="doc/md_history.html">Versionsgeschichte</a></p>
 | 
				
			||||||
  <p><a href="doc/index.html">Quellcode-Dokumentation</a></p>
 | 
					  <p><a href="doc/index.html">Quellcode-Dokumentation</a></p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <hr />
 | 
					  <hr />
 | 
				
			||||||
  <p>© 2015 Daniel Kraus</p>
 | 
					  <p>© 2015 <a href="http://www.bovender.de">Daniel Kraus</a></p>
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
<!-- vim: set tw=72 ai sts=2 ts=2 sw=2 : -->
 | 
					<!-- vim: set tw=72 ai sts=2 ts=2 sw=2 : -->
 | 
				
			||||||
</html>
 | 
					</html>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
2.0.0-alpha.5
 | 
					2.0.0-beta.1
 | 
				
			||||||
http://zaa.nephrowiki.de/downloads/zaaReloaded-2.0.0-alpha.5.exe
 | 
					http://zaa.nephrowiki.de/downloads/zaaReloaded-2.0.0-beta.1.exe
 | 
				
			||||||
423cbe81b42ddfc293cf5b387c1d8d269dce3f61  publish/release/zaaReloaded-2.0.0-alpha.5.exe
 | 
					4fe0f2bd8ba1c3852c02c6220bddf53b5fd98ef8  publish/release/zaaReloaded-2.0.0-beta.1.exe
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,5 @@
 | 
				
			|||||||
/* ControlElementBase.cs
 | 
					using System;
 | 
				
			||||||
 | 
					/* ControlElementBase.cs
 | 
				
			||||||
 * part of zaaReloaded2
 | 
					 * part of zaaReloaded2
 | 
				
			||||||
 * 
 | 
					 * 
 | 
				
			||||||
 * Copyright 2015 Daniel Kraus
 | 
					 * Copyright 2015 Daniel Kraus
 | 
				
			||||||
@@ -16,6 +17,8 @@
 | 
				
			|||||||
 * limitations under the License.
 | 
					 * limitations under the License.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Runtime.Serialization;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace zaaReloaded2.Controller.Elements
 | 
					namespace zaaReloaded2.Controller.Elements
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -23,25 +26,90 @@ namespace zaaReloaded2.Controller.Elements
 | 
				
			|||||||
    /// Base class for control elements that control e.g. the working
 | 
					    /// Base class for control elements that control e.g. the working
 | 
				
			||||||
    /// set of time points in a Formatter object.
 | 
					    /// set of time points in a Formatter object.
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    public abstract class ControlElementBase : ElementBase
 | 
					    [Serializable]
 | 
				
			||||||
 | 
					    public abstract class ControlElementBase : ElementBase, ISerializable
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        #region Properties
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Gets a list of child elements, all of which must be derived
 | 
					        /// Gets a list of child elements, all of which must be derived
 | 
				
			||||||
        /// from FormatElementBase.
 | 
					        /// from FormatElementBase.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        public IList<FormatElementBase> FormatElements { get; private set; }
 | 
					        public IList<FormatElementBase> Children { get; internal set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Informs whether this control element can have child elements.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public virtual bool CanHaveChildren { get { return true; } }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #region Constructors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public ControlElementBase()
 | 
					        public ControlElementBase()
 | 
				
			||||||
            : this(new List<FormatElementBase>())
 | 
					            : this(new List<FormatElementBase>())
 | 
				
			||||||
        { }
 | 
					        { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public ControlElementBase(IList<FormatElementBase> formatElements)
 | 
					        public ControlElementBase(IList<FormatElementBase> children)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            FormatElements = formatElements;
 | 
					            Children = children;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public ControlElementBase(FormatElementBase formatElement)
 | 
					        public ControlElementBase(FormatElementBase children)
 | 
				
			||||||
            : this(new List<FormatElementBase>() { formatElement })
 | 
					            : this(new List<FormatElementBase>() { children })
 | 
				
			||||||
        { }
 | 
					        { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #region Serialization
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Deserialization constructor.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        protected ControlElementBase(SerializationInfo info, StreamingContext context)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            int version = info.GetInt32("Version");
 | 
				
			||||||
 | 
					            int childrenCount = info.GetInt32("ChildrenCount");
 | 
				
			||||||
 | 
					            Children = new List<FormatElementBase>();
 | 
				
			||||||
 | 
					            for (int i = 0; i < childrenCount; i++)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Type typeOfChild = info.GetValue(SerializedChildName(i, "Type"), typeof(Type)) as Type;
 | 
				
			||||||
 | 
					                Children.Add(info.GetValue(SerializedChildName(i, "Object"), typeOfChild) as FormatElementBase);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public void GetObjectData(SerializationInfo info, StreamingContext context)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            info.AddValue("Version", Properties.Settings.Default.SerializationVersion);
 | 
				
			||||||
 | 
					            info.AddValue("ChildrenCount", Children.Count);
 | 
				
			||||||
 | 
					            int i = 0;
 | 
				
			||||||
 | 
					            foreach (FormatElementBase child in Children)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                info.AddValue(SerializedChildName(i, "Type"), child.GetType());
 | 
				
			||||||
 | 
					                info.AddValue(SerializedChildName(i, "Object"), child);
 | 
				
			||||||
 | 
					                i++;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private string SerializedChildName(int index, string info)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return String.Format("Child{0}{1}", index, info);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #region Protected methods
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Creates a clone of the Children list (for use in cloning
 | 
				
			||||||
 | 
					        /// derived classes).
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <returns>Clone of the Children list.</returns>
 | 
				
			||||||
 | 
					        protected IList<FormatElementBase> CloneChildren()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return Children.Select(child => child.Clone() as FormatElementBase).ToList();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,6 +18,7 @@
 | 
				
			|||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Runtime.Serialization;
 | 
				
			||||||
using System.Text;
 | 
					using System.Text;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace zaaReloaded2.Controller.Elements
 | 
					namespace zaaReloaded2.Controller.Elements
 | 
				
			||||||
@@ -25,11 +26,22 @@ namespace zaaReloaded2.Controller.Elements
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Controller element that writes arbitrary text to the document.
 | 
					    /// Controller element that writes arbitrary text to the document.
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    class CustomText : FormatElementBase
 | 
					    [Serializable]
 | 
				
			||||||
 | 
					    public class CustomText : FormatElementBase, ISerializable
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        public override string Label
 | 
					        public override string Label
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            get { return String.Format("\"{0}\"", Content); }
 | 
					            get
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (String.IsNullOrEmpty(Content))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    return "Beliebiger Text";
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    return String.Format("\"{0}\"", Content);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override void Run(Formatter.Formatter formatter)
 | 
					        public override void Run(Formatter.Formatter formatter)
 | 
				
			||||||
@@ -43,5 +55,20 @@ namespace zaaReloaded2.Controller.Elements
 | 
				
			|||||||
            clone.Content = Content;
 | 
					            clone.Content = Content;
 | 
				
			||||||
            return clone;
 | 
					            return clone;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #region Constructors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public CustomText () { }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Deserialization constructor.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        protected CustomText(SerializationInfo info, StreamingContext context)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            int version = info.GetInt32("Version");
 | 
				
			||||||
 | 
					            Content = info.GetString("Content");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,13 +21,13 @@ using System.Linq;
 | 
				
			|||||||
using System.Text;
 | 
					using System.Text;
 | 
				
			||||||
using Microsoft.Office.Interop.Word;
 | 
					using Microsoft.Office.Interop.Word;
 | 
				
			||||||
using zaaReloaded2.LabModel;
 | 
					using zaaReloaded2.LabModel;
 | 
				
			||||||
 | 
					using System.Runtime.Serialization;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace zaaReloaded2.Controller.Elements
 | 
					namespace zaaReloaded2.Controller.Elements
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Base class for formatting elements.
 | 
					    /// Base class for formatting elements.
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Serializable]
 | 
					 | 
				
			||||||
    public abstract class ElementBase : ICloneable
 | 
					    public abstract class ElementBase : ICloneable
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,12 +16,14 @@
 | 
				
			|||||||
 * limitations under the License.
 | 
					 * limitations under the License.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Runtime.Serialization;
 | 
				
			||||||
namespace zaaReloaded2.Controller.Elements
 | 
					namespace zaaReloaded2.Controller.Elements
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Base class for elements that perform actual formatting.
 | 
					    /// Base class for elements that perform actual formatting.
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    public abstract class FormatElementBase : ElementBase
 | 
					    public abstract class FormatElementBase : ElementBase, ISerializable
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Gets or sets the content of this format element.
 | 
					        /// Gets or sets the content of this format element.
 | 
				
			||||||
@@ -32,7 +34,6 @@ namespace zaaReloaded2.Controller.Elements
 | 
				
			|||||||
            set
 | 
					            set
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                _content = value;
 | 
					                _content = value;
 | 
				
			||||||
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -42,5 +43,15 @@ namespace zaaReloaded2.Controller.Elements
 | 
				
			|||||||
        protected virtual void OnContentChanged() {}
 | 
					        protected virtual void OnContentChanged() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private string _content;
 | 
					        private string _content;
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        #region Serialization
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            info.AddValue("Version", Properties.Settings.Default.SerializationVersion);
 | 
				
			||||||
 | 
					            info.AddValue("Content", Content);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,6 +23,7 @@ using System.Diagnostics;
 | 
				
			|||||||
using Microsoft.Office.Interop.Word;
 | 
					using Microsoft.Office.Interop.Word;
 | 
				
			||||||
using zaaReloaded2.LabModel;
 | 
					using zaaReloaded2.LabModel;
 | 
				
			||||||
using zaaReloaded2.Formatter;
 | 
					using zaaReloaded2.Formatter;
 | 
				
			||||||
 | 
					using System.Runtime.Serialization;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace zaaReloaded2.Controller.Elements
 | 
					namespace zaaReloaded2.Controller.Elements
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -31,13 +32,23 @@ namespace zaaReloaded2.Controller.Elements
 | 
				
			|||||||
    /// to a Word document.
 | 
					    /// to a Word document.
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Serializable]
 | 
					    [Serializable]
 | 
				
			||||||
    class Items : CustomText
 | 
					    public class Items : CustomText
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        #region ElementBase implementation
 | 
					        #region ElementBase implementation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override string Label
 | 
					        public override string Label
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            get { return Content; }
 | 
					            get
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (String.IsNullOrEmpty(Content))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    return "Laborparameter";
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    return Content;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override void Run(zaaReloaded2.Formatter.Formatter formatter)
 | 
					        public override void Run(zaaReloaded2.Formatter.Formatter formatter)
 | 
				
			||||||
@@ -74,6 +85,13 @@ namespace zaaReloaded2.Controller.Elements
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        protected override ElementBase CreateInstance()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Items clone = new Items();
 | 
				
			||||||
 | 
					            clone.Content = Content;
 | 
				
			||||||
 | 
					            return clone;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Constructors
 | 
					        #region Constructors
 | 
				
			||||||
@@ -86,6 +104,13 @@ namespace zaaReloaded2.Controller.Elements
 | 
				
			|||||||
            Content = content;
 | 
					            Content = content;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Deserialization constructor.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        protected Items(SerializationInfo info, StreamingContext context)
 | 
				
			||||||
 | 
					            : base(info, context)
 | 
				
			||||||
 | 
					        { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Private methods
 | 
					        #region Private methods
 | 
				
			||||||
@@ -132,7 +157,6 @@ namespace zaaReloaded2.Controller.Elements
 | 
				
			|||||||
                {
 | 
					                {
 | 
				
			||||||
                    items.AddRange(CollectByName(formatter, itemName));
 | 
					                    items.AddRange(CollectByName(formatter, itemName));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            return items;
 | 
					            return items;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -148,9 +172,12 @@ namespace zaaReloaded2.Controller.Elements
 | 
				
			|||||||
            foreach (TimePointFormatter tpf in formatter.WorkingTimePoints.Values)
 | 
					            foreach (TimePointFormatter tpf in formatter.WorkingTimePoints.Values)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                List<ItemFormatter> newItems = tpf.ItemFormatters.Values
 | 
					                List<ItemFormatter> newItems = tpf.ItemFormatters.Values
 | 
				
			||||||
                    .Where(i => !i.HasBeenUsed && i.LabItem.QualifiedName.StartsWith(material))
 | 
					                    .Where(i => !i.HasBeenUsed && !i.IsBlacklisted && i.LabItem.QualifiedName.StartsWith(material))
 | 
				
			||||||
                    .ToList();
 | 
					                    .ToList();
 | 
				
			||||||
                newItems.ForEach(i => i.HasBeenUsed = true);
 | 
					                newItems.ForEach(i => i.HasBeenUsed = true);
 | 
				
			||||||
 | 
					                // Include the material prefix only if this item was collected by a
 | 
				
			||||||
 | 
					                // general wildcard ("*" rather than "SU-*" etc.).
 | 
				
			||||||
 | 
					                newItems.ForEach(i => i.IncludeMaterial = String.IsNullOrEmpty(material));
 | 
				
			||||||
                items.AddRange(newItems);
 | 
					                items.AddRange(newItems);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            return items;
 | 
					            return items;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										69
									
								
								zaaReloaded2/Controller/Elements/NextColumn.cs
									
									
									
									
									
										Executable file
									
								
							
							
						
						@@ -0,0 +1,69 @@
 | 
				
			|||||||
 | 
					/* NextColumn.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.Runtime.Serialization;
 | 
				
			||||||
 | 
					using System.Text;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace zaaReloaded2.Controller.Elements
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// Format element that causes a Formatter object to move the
 | 
				
			||||||
 | 
					    /// insertion point to the next colum in a layout table.
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
 | 
					    [Serializable]
 | 
				
			||||||
 | 
					    public class NextColumn : ControlElementBase, ISerializable
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public override string Label
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            get { return "Nächste Spalte"; }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public override bool CanHaveChildren
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            get
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                return false;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public override void Run(Formatter.Formatter formatter)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            formatter.NextColumn();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        protected override ElementBase CreateInstance()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return new NextColumn();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #region Constructors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public NextColumn() : base() { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Deserialization constructor.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        protected NextColumn(SerializationInfo info, StreamingContext context)
 | 
				
			||||||
 | 
					            : base(info, context)
 | 
				
			||||||
 | 
					        { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -18,15 +18,17 @@
 | 
				
			|||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Runtime.Serialization;
 | 
				
			||||||
using System.Text;
 | 
					using System.Text;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace zaaReloaded2.Controller.Elements
 | 
					namespace zaaReloaded2.Controller.Elements
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    class SelectEachDay : ControlElementBase
 | 
					    [Serializable]
 | 
				
			||||||
 | 
					    public class SelectEachDay : ControlElementBase
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        public override string Label
 | 
					        public override string Label
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            get { return "Jeden Tag auswählen"; }
 | 
					            get { return "Jeder Tag"; }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override void Run(Formatter.Formatter formatter)
 | 
					        public override void Run(Formatter.Formatter formatter)
 | 
				
			||||||
@@ -34,6 +36,13 @@ namespace zaaReloaded2.Controller.Elements
 | 
				
			|||||||
            formatter.ProcessEachDay(this);
 | 
					            formatter.ProcessEachDay(this);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        protected override ElementBase CreateInstance()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return new SelectEachDay(CloneChildren());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #region Constructors
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        public SelectEachDay() : base() { }
 | 
					        public SelectEachDay() : base() { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public SelectEachDay(FormatElementBase formatElement)
 | 
					        public SelectEachDay(FormatElementBase formatElement)
 | 
				
			||||||
@@ -44,9 +53,13 @@ namespace zaaReloaded2.Controller.Elements
 | 
				
			|||||||
            : base(formatElements)
 | 
					            : base(formatElements)
 | 
				
			||||||
        { }
 | 
					        { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override ElementBase CreateInstance()
 | 
					        /// <summary>
 | 
				
			||||||
        {
 | 
					        /// Deserialization constructor.
 | 
				
			||||||
            return new SelectEachDay();
 | 
					        /// </summary>
 | 
				
			||||||
        }
 | 
					        protected SelectEachDay(SerializationInfo info, StreamingContext context)
 | 
				
			||||||
 | 
					            : base(info, context)
 | 
				
			||||||
 | 
					        { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,6 +18,7 @@
 | 
				
			|||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Runtime.Serialization;
 | 
				
			||||||
using System.Text;
 | 
					using System.Text;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace zaaReloaded2.Controller.Elements
 | 
					namespace zaaReloaded2.Controller.Elements
 | 
				
			||||||
@@ -26,11 +27,12 @@ namespace zaaReloaded2.Controller.Elements
 | 
				
			|||||||
    /// Selects the time points of the first day in a given Formatter
 | 
					    /// Selects the time points of the first day in a given Formatter
 | 
				
			||||||
    /// object.
 | 
					    /// object.
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    class SelectFirstDay : ControlElementBase
 | 
					    [Serializable]
 | 
				
			||||||
 | 
					    public class SelectFirstDay : ControlElementBase, ISerializable
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        public override string Label
 | 
					        public override string Label
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            get { return "Ersten Tag auswählen"; }
 | 
					            get { return "Erster Tag"; }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override void Run(Formatter.Formatter formatter)
 | 
					        public override void Run(Formatter.Formatter formatter)
 | 
				
			||||||
@@ -38,6 +40,13 @@ namespace zaaReloaded2.Controller.Elements
 | 
				
			|||||||
            formatter.ProcessFirstDay(this);
 | 
					            formatter.ProcessFirstDay(this);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        protected override ElementBase CreateInstance()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return new SelectFirstDay(CloneChildren());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #region Constructors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public SelectFirstDay() : base() { }
 | 
					        public SelectFirstDay() : base() { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public SelectFirstDay(FormatElementBase formatElement)
 | 
					        public SelectFirstDay(FormatElementBase formatElement)
 | 
				
			||||||
@@ -48,9 +57,13 @@ namespace zaaReloaded2.Controller.Elements
 | 
				
			|||||||
            : base(formatElements)
 | 
					            : base(formatElements)
 | 
				
			||||||
        { }
 | 
					        { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override ElementBase CreateInstance()
 | 
					        /// <summary>
 | 
				
			||||||
        {
 | 
					        /// Deserialization constructor.
 | 
				
			||||||
            return new SelectFirstDay();
 | 
					        /// </summary>
 | 
				
			||||||
        }
 | 
					        protected SelectFirstDay(SerializationInfo info, StreamingContext context)
 | 
				
			||||||
 | 
					            : base(info, context)
 | 
				
			||||||
 | 
					        { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,6 +19,7 @@
 | 
				
			|||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Runtime.Serialization;
 | 
				
			||||||
using System.Text;
 | 
					using System.Text;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace zaaReloaded2.Controller.Elements
 | 
					namespace zaaReloaded2.Controller.Elements
 | 
				
			||||||
@@ -27,11 +28,12 @@ namespace zaaReloaded2.Controller.Elements
 | 
				
			|||||||
    /// Selects the time points of the last day in a given Formatter
 | 
					    /// Selects the time points of the last day in a given Formatter
 | 
				
			||||||
    /// object.
 | 
					    /// object.
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    class SelectLastDay : ControlElementBase
 | 
					    [Serializable]
 | 
				
			||||||
 | 
					    public class SelectLastDay : ControlElementBase, ISerializable
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        public override string Label
 | 
					        public override string Label
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            get { return "Letzten Tag auswählen"; }
 | 
					            get { return "Letzter Tag"; }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override void Run(Formatter.Formatter formatter)
 | 
					        public override void Run(Formatter.Formatter formatter)
 | 
				
			||||||
@@ -39,6 +41,13 @@ namespace zaaReloaded2.Controller.Elements
 | 
				
			|||||||
            formatter.ProcessLastDay(this);
 | 
					            formatter.ProcessLastDay(this);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        protected override ElementBase CreateInstance()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return new SelectLastDay(CloneChildren());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #region Constructors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public SelectLastDay() : base() { }
 | 
					        public SelectLastDay() : base() { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public SelectLastDay(FormatElementBase formatElement)
 | 
					        public SelectLastDay(FormatElementBase formatElement)
 | 
				
			||||||
@@ -49,9 +58,13 @@ namespace zaaReloaded2.Controller.Elements
 | 
				
			|||||||
            : base(formatElements)
 | 
					            : base(formatElements)
 | 
				
			||||||
        { }
 | 
					        { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override ElementBase CreateInstance()
 | 
					        /// <summary>
 | 
				
			||||||
        {
 | 
					        /// Deserialization constructor.
 | 
				
			||||||
            return new SelectLastDay();
 | 
					        /// </summary>
 | 
				
			||||||
        }
 | 
					        protected SelectLastDay(SerializationInfo info, StreamingContext context)
 | 
				
			||||||
 | 
					            : base(info, context)
 | 
				
			||||||
 | 
					        { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										69
									
								
								zaaReloaded2/Controller/Elements/TwoColumns.cs
									
									
									
									
									
										Executable file
									
								
							
							
						
						@@ -0,0 +1,69 @@
 | 
				
			|||||||
 | 
					/* TwoColumns.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.Runtime.Serialization;
 | 
				
			||||||
 | 
					using System.Text;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace zaaReloaded2.Controller.Elements
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// Format element that causes a Formatter object to insert a table with
 | 
				
			||||||
 | 
					    /// two columns and one row into the documents.
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
 | 
					    [Serializable]
 | 
				
			||||||
 | 
					    public class TwoColumns : ControlElementBase, ISerializable
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public override string Label
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            get { return "Zwei Spalten einfügen"; }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public override bool CanHaveChildren
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            get
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                return false;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public override void Run(Formatter.Formatter formatter)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            formatter.InsertTwoColumns();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        protected override ElementBase CreateInstance()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return new TwoColumns();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #region Constructors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public TwoColumns() : base() { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Deserialization constructor.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        protected TwoColumns(SerializationInfo info, StreamingContext context)
 | 
				
			||||||
 | 
					            : base(info, context)
 | 
				
			||||||
 | 
					        { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -21,6 +21,10 @@ using System.Linq;
 | 
				
			|||||||
using System.Text;
 | 
					using System.Text;
 | 
				
			||||||
using zaaReloaded2.Formatter;
 | 
					using zaaReloaded2.Formatter;
 | 
				
			||||||
using zaaReloaded2.Controller.Elements;
 | 
					using zaaReloaded2.Controller.Elements;
 | 
				
			||||||
 | 
					using System.IO;
 | 
				
			||||||
 | 
					using System.Text.RegularExpressions;
 | 
				
			||||||
 | 
					using System.Runtime.Serialization;
 | 
				
			||||||
 | 
					using System.Runtime.Serialization.Formatters.Soap;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace zaaReloaded2.Controller
 | 
					namespace zaaReloaded2.Controller
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -28,8 +32,43 @@ namespace zaaReloaded2.Controller
 | 
				
			|||||||
    /// Holds settings related to controlling laboratory output.
 | 
					    /// Holds settings related to controlling laboratory output.
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Serializable]
 | 
					    [Serializable]
 | 
				
			||||||
    public class Settings : ICloneable
 | 
					    public class Settings : ICloneable, ISerializable
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        #region Persistence
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Deserializes a Settings object from SOAP XML that is read from a file.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="fileName">File to read.</param>
 | 
				
			||||||
 | 
					        /// <returns>Deserialized Settings object with new unique ID.</returns>
 | 
				
			||||||
 | 
					        /// <exception cref="InvalidDataException">if the file does not contain
 | 
				
			||||||
 | 
					        /// SOAP XML that can be deserialized to a Settings object.</exception>
 | 
				
			||||||
 | 
					        public static Settings LoadFromFile(string fileName)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            StreamReader reader = new StreamReader(fileName);
 | 
				
			||||||
 | 
					            SoapFormatter formatter = new SoapFormatter();
 | 
				
			||||||
 | 
					            Settings settings = formatter.Deserialize(reader.BaseStream) as Settings;
 | 
				
			||||||
 | 
					            if (settings == null)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                throw new InvalidDataException("Datei enthält keine Stil-Daten oder ist beschädigt.");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            settings.Uid = Guid.NewGuid();
 | 
				
			||||||
 | 
					            return settings;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Serializes a Settings object to SOAP XML that is written to a file.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="fileName">File to write to.</param>
 | 
				
			||||||
 | 
					        public void SaveToFile(string fileName)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            StreamWriter writer = new StreamWriter(fileName);
 | 
				
			||||||
 | 
					            SoapFormatter formatter = new SoapFormatter();
 | 
				
			||||||
 | 
					            formatter.Serialize(writer.BaseStream, this);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Properties
 | 
					        #region Properties
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
@@ -51,14 +90,14 @@ namespace zaaReloaded2.Controller
 | 
				
			|||||||
        /// Gets the unique ID of this Settings object. The unique
 | 
					        /// Gets the unique ID of this Settings object. The unique
 | 
				
			||||||
        /// ID is not included in deep-copying (cloning).
 | 
					        /// ID is not included in deep-copying (cloning).
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        public Guid Uid { get; private set; }
 | 
					        public Guid Uid { get; internal set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Constructors
 | 
					        #region Constructors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public Settings()
 | 
					        public Settings()
 | 
				
			||||||
            : this(string.Empty, new List<ElementBase>())
 | 
					            : this(string.Empty, null)
 | 
				
			||||||
        { }
 | 
					        { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public Settings(string name)
 | 
					        public Settings(string name)
 | 
				
			||||||
@@ -87,6 +126,44 @@ namespace zaaReloaded2.Controller
 | 
				
			|||||||
            Uid = Guid.NewGuid();
 | 
					            Uid = Guid.NewGuid();
 | 
				
			||||||
            Name = name;
 | 
					            Name = name;
 | 
				
			||||||
            Elements = initialElements;
 | 
					            Elements = initialElements;
 | 
				
			||||||
 | 
					            ReferenceStyle = Properties.Settings.Default.ReferenceStyle;
 | 
				
			||||||
 | 
					            if (Elements == null)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Elements = new List<ElementBase>();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Creates a new Settings object with an initial
 | 
				
			||||||
 | 
					        /// set of elements, a name, and a unique ID.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="initialElements">Set of ElementBase
 | 
				
			||||||
 | 
					        /// object (or derived ones).</param>
 | 
				
			||||||
 | 
					        /// <param name="name">Name of these settings.</param>
 | 
				
			||||||
 | 
					        /// <param name="Uid">Unique ID for this Settings object.</param>
 | 
				
			||||||
 | 
					        public Settings(string name, IList<ElementBase> initialElements, Guid uid)
 | 
				
			||||||
 | 
					            : this(name, initialElements)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Uid = uid;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Deserialization constructor.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        protected Settings(SerializationInfo info, StreamingContext context)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            int version = info.GetInt32("Version");
 | 
				
			||||||
 | 
					            Uid = (Guid)info.GetValue("Uid", typeof(Guid));
 | 
				
			||||||
 | 
					            Name = info.GetString("Name");
 | 
				
			||||||
 | 
					            ReferenceStyle = (ReferenceStyle)info.GetValue("ReferenceStyle", typeof(ReferenceStyle));
 | 
				
			||||||
 | 
					            int elementsCount = info.GetInt32("ElementsCount");
 | 
				
			||||||
 | 
					            Elements = new List<ElementBase>();
 | 
				
			||||||
 | 
					            for (int i = 0; i < elementsCount; i++)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Type type = info.GetValue(SerializationElementName(i, "Type"), typeof(Type)) as Type;
 | 
				
			||||||
 | 
					                ElementBase element = info.GetValue(SerializationElementName(i, "Object"), type) as ElementBase;
 | 
				
			||||||
 | 
					                Elements.Add(element);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }   
 | 
					        }   
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
@@ -117,5 +194,37 @@ namespace zaaReloaded2.Controller
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #region Implementation of ISerializable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public void GetObjectData(SerializationInfo info, StreamingContext context)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            info.AddValue("Version", Properties.Settings.Default.SerializationVersion);
 | 
				
			||||||
 | 
					            info.AddValue("Uid", Uid);
 | 
				
			||||||
 | 
					            info.AddValue("Name", Name);
 | 
				
			||||||
 | 
					            info.AddValue("ReferenceStyle", ReferenceStyle);
 | 
				
			||||||
 | 
					            info.AddValue("ElementsCount", Elements.Count);
 | 
				
			||||||
 | 
					            int i = 0;
 | 
				
			||||||
 | 
					            foreach (ElementBase e in Elements)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                info.AddValue(SerializationElementName(i, "Type"), e.GetType());
 | 
				
			||||||
 | 
					                info.AddValue(SerializationElementName(i, "Object"), e);
 | 
				
			||||||
 | 
					                i++;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        string SerializationElementName(int index, string info)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return String.Format("Element{0}{1}", index, info);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #region Fields
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Defines header lines for the persistence file: "[My name]" and so on.
 | 
				
			||||||
 | 
					        static readonly Regex _persistenceHeaderRegex = new Regex(@"^\[(?<name>.+?)]$");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,10 +18,15 @@
 | 
				
			|||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Collections.ObjectModel;
 | 
					using System.Collections.ObjectModel;
 | 
				
			||||||
using System.Configuration;
 | 
					using System.IO;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Text;
 | 
					using System.Text;
 | 
				
			||||||
 | 
					using System.Xml.Serialization;
 | 
				
			||||||
 | 
					using System.Reflection;
 | 
				
			||||||
using zaaReloaded2.Controller.Elements;
 | 
					using zaaReloaded2.Controller.Elements;
 | 
				
			||||||
 | 
					using System.Runtime.Serialization.Formatters.Soap;
 | 
				
			||||||
 | 
					using System.Web;
 | 
				
			||||||
 | 
					using System.Runtime.Serialization;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace zaaReloaded2.Controller
 | 
					namespace zaaReloaded2.Controller
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -35,30 +40,67 @@ namespace zaaReloaded2.Controller
 | 
				
			|||||||
    /// different from zaaReloaded's Settings.
 | 
					    /// different from zaaReloaded's Settings.
 | 
				
			||||||
    /// </remarks>
 | 
					    /// </remarks>
 | 
				
			||||||
    [Serializable]
 | 
					    [Serializable]
 | 
				
			||||||
    public class SettingsRepository : ApplicationSettingsBase
 | 
					    public class SettingsRepository : ISerializable
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        #region Persistence
 | 
					        #region Properties persistence
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Loads the SettingsRepository instance that was persisted in
 | 
				
			||||||
 | 
					        /// the assembly properties.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <returns>SettingsRepository that was last stored in the
 | 
				
			||||||
 | 
					        /// assembly properties, or a newly created SettingsRepository
 | 
				
			||||||
 | 
					        /// if no previously stored exists.</returns>
 | 
				
			||||||
 | 
					        /// <remarks>
 | 
				
			||||||
 | 
					        /// The SettingsRepository is serialized using a SoapFormatter, which
 | 
				
			||||||
 | 
					        /// creates SOAP XML. Since the assembly properties are stored as
 | 
				
			||||||
 | 
					        /// XML as well, the serialized SettingsRepository is converted to
 | 
				
			||||||
 | 
					        /// a base-64 string, which does not mess with the properties XML.
 | 
				
			||||||
 | 
					        /// </remarks>
 | 
				
			||||||
        public static SettingsRepository Load()
 | 
					        public static SettingsRepository Load()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            return
 | 
					            string s = Properties.Settings.Default.SettingsRepository;
 | 
				
			||||||
                zaaReloaded2.Properties.Settings.Default.SettingsRepository ??
 | 
					            if (String.IsNullOrEmpty(s))
 | 
				
			||||||
                new SettingsRepository();
 | 
					            {
 | 
				
			||||||
 | 
					                return new SettingsRepository();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                MemoryStream stream = new MemoryStream();
 | 
				
			||||||
 | 
					                string encoded = Properties.Settings.Default.SettingsRepository;
 | 
				
			||||||
 | 
					                byte[] bytes = Convert.FromBase64String(encoded);
 | 
				
			||||||
 | 
					                stream.Write(bytes, 0, bytes.Length);
 | 
				
			||||||
 | 
					                stream.Position = 0;
 | 
				
			||||||
 | 
					                SoapFormatter serializer = new SoapFormatter();
 | 
				
			||||||
 | 
					                return serializer.Deserialize(stream) as SettingsRepository;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Stores the SettingsRepository in the assembly properties.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <remarks>
 | 
				
			||||||
 | 
					        /// The SettingsRepository is serialized using a SoapFormatter, which
 | 
				
			||||||
 | 
					        /// creates SOAP XML. Since the assembly properties are stored as
 | 
				
			||||||
 | 
					        /// XML as well, the serialized SettingsRepository is converted to
 | 
				
			||||||
 | 
					        /// a base-64 string, which does not mess with the properties XML.
 | 
				
			||||||
 | 
					        /// </remarks>
 | 
				
			||||||
        public void Store()
 | 
					        public void Store()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            zaaReloaded2.Properties.Settings.Default.SettingsRepository = this;
 | 
					            MemoryStream stream = new MemoryStream();
 | 
				
			||||||
            zaaReloaded2.Properties.Settings.Default.Save();
 | 
					            SoapFormatter serializer = new SoapFormatter();
 | 
				
			||||||
 | 
					            serializer.Serialize(stream, this);
 | 
				
			||||||
 | 
					            stream.Position = 0;
 | 
				
			||||||
 | 
					            string encoded = Convert.ToBase64String(stream.ToArray());
 | 
				
			||||||
 | 
					            Properties.Settings.Default.SettingsRepository =  encoded;
 | 
				
			||||||
 | 
					            Properties.Settings.Default.Save();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Properties
 | 
					        #region Properties
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [UserScopedSetting()]
 | 
					        public IList<Settings> SettingsList { get; protected set; }
 | 
				
			||||||
        [SettingsSerializeAs(SettingsSerializeAs.Xml)]
 | 
					 | 
				
			||||||
        public IList<Settings> SettingsList { get; private set; }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -76,6 +118,41 @@ namespace zaaReloaded2.Controller
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #region Serialization
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        protected SettingsRepository(SerializationInfo info, StreamingContext context)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            int version = info.GetInt32("Version");
 | 
				
			||||||
 | 
					            int settingsCount = info.GetInt32("SettingsCount");
 | 
				
			||||||
 | 
					            SettingsList = new List<Settings>();
 | 
				
			||||||
 | 
					            for (int i = 0; i < settingsCount; i++)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Type type = info.GetValue(SerializationSettingsName(i, "Type"), typeof(Type)) as Type;
 | 
				
			||||||
 | 
					                Settings s = info.GetValue(SerializationSettingsName(i, "Object"), typeof(Settings)) as Settings;
 | 
				
			||||||
 | 
					                SettingsList.Add(s);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public void GetObjectData(SerializationInfo info, StreamingContext context)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            info.AddValue("Version", Properties.Settings.Default.SerializationVersion);
 | 
				
			||||||
 | 
					            info.AddValue("SettingsCount", SettingsList.Count);
 | 
				
			||||||
 | 
					            int i = 0;
 | 
				
			||||||
 | 
					            foreach (Settings s in SettingsList)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                info.AddValue(SerializationSettingsName(i, "Type"), s.GetType());
 | 
				
			||||||
 | 
					                info.AddValue(SerializationSettingsName(i, "Object"), s);
 | 
				
			||||||
 | 
					                i++;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        string SerializationSettingsName(int index, string info)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return String.Format("Settings{0}{1}", index, info);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Public methods
 | 
					        #region Public methods
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
@@ -89,6 +166,13 @@ namespace zaaReloaded2.Controller
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            return SettingsList.FirstOrDefault(s => s.Uid == uid);
 | 
					            return SettingsList.FirstOrDefault(s => s.Uid == uid);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public static bool IsDefaultSettings(Settings settings)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return (settings.Name == Properties.Settings.Default.SettingsNameClinic + BUILTIN_LABEL ||
 | 
				
			||||||
 | 
					                settings.Name == Properties.Settings.Default.SettingsNameWard + BUILTIN_LABEL);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Private methods
 | 
					        #region Private methods
 | 
				
			||||||
@@ -101,49 +185,39 @@ namespace zaaReloaded2.Controller
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            SettingsList.Clear();
 | 
					            SettingsList.Clear();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Shortcut to assembly properties
 | 
					            Assembly myAssembly = this.GetType().Assembly;
 | 
				
			||||||
            zaaReloaded2.Properties.Settings def = zaaReloaded2.Properties.Settings.Default;
 | 
					            SoapFormatter deserializer = new SoapFormatter();
 | 
				
			||||||
 | 
					            Stream stream = myAssembly.GetManifestResourceStream("zaaReloaded2.Defaults.ward.zaaReloaded");
 | 
				
			||||||
 | 
					            Settings settings = deserializer.Deserialize(stream) as Settings;
 | 
				
			||||||
 | 
					            settings.Name = Properties.Settings.Default.SettingsNameWard + BUILTIN_LABEL;
 | 
				
			||||||
 | 
					            settings.Uid = Guid.Parse(DEFAULT_SETTINGS_1_UID);
 | 
				
			||||||
 | 
					            SettingsList.Add(settings);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // TODO: May want to create deep copies of this list below
 | 
					            stream = myAssembly.GetManifestResourceStream("zaaReloaded2.Defaults.clinic.zaaReloaded");
 | 
				
			||||||
            List<FormatElementBase> defaultItems = new List<FormatElementBase>()
 | 
					            settings = deserializer.Deserialize(stream) as Settings;
 | 
				
			||||||
            {
 | 
					            settings.Name = Properties.Settings.Default.SettingsNameClinic + BUILTIN_LABEL;
 | 
				
			||||||
                new Items(def.DefaultItemsClinicalChem),
 | 
					            settings.Uid = Guid.Parse(DEFAULT_SETTINGS_2_UID);
 | 
				
			||||||
                new Items(def.DefaultItemsInflammation),
 | 
					            SettingsList.Add(settings);
 | 
				
			||||||
                new Items(def.DefaultItemsCardio),
 | 
					        }
 | 
				
			||||||
                new Items(def.DefaultItemsKidney),
 | 
					 | 
				
			||||||
                new Items(def.DefaultItemsLiver),
 | 
					 | 
				
			||||||
                new Items(def.DefaultItemsLipids),
 | 
					 | 
				
			||||||
                new Items(def.DefaultItemsHematology),
 | 
					 | 
				
			||||||
                new Items(def.DefaultItemsCoagulation),
 | 
					 | 
				
			||||||
                new Items(def.DefaultItemsDrugs),
 | 
					 | 
				
			||||||
                new Items(def.DefaultItemsCollectedUrine),
 | 
					 | 
				
			||||||
                new Items(def.DefaultItemsSpotUrine),
 | 
					 | 
				
			||||||
                new Items(def.DefaultItemsOther),
 | 
					 | 
				
			||||||
            };
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Configure the settings for the ward
 | 
					        #endregion
 | 
				
			||||||
            SettingsList.Add(
 | 
					 | 
				
			||||||
                new Settings(
 | 
					 | 
				
			||||||
                    def.SettingsNameWard,
 | 
					 | 
				
			||||||
                    new List<ElementBase>()
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        new SelectFirstDay(defaultItems),
 | 
					 | 
				
			||||||
                        new SelectLastDay(defaultItems)
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                )
 | 
					 | 
				
			||||||
            );
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Configure the settings for the outpatient clinic
 | 
					        #region Constants
 | 
				
			||||||
            SettingsList.Add(
 | 
					
 | 
				
			||||||
                new Settings(
 | 
					        /// <summary>
 | 
				
			||||||
                    def.SettingsNameClinic,
 | 
					        /// Label that is appended to the default Settings' names.
 | 
				
			||||||
                    new List<ElementBase>()
 | 
					        /// </summary>
 | 
				
			||||||
                    {
 | 
					        public const string BUILTIN_LABEL = " (eingebaut)";
 | 
				
			||||||
                        new SelectEachDay(defaultItems),
 | 
					
 | 
				
			||||||
                    }
 | 
					        /// <summary>
 | 
				
			||||||
                )
 | 
					        /// Constant GUID for the first default Settings.
 | 
				
			||||||
            );
 | 
					        /// </summary>
 | 
				
			||||||
        }
 | 
					        const string DEFAULT_SETTINGS_1_UID = "EA79DE6C-E999-44F1-9122-929A8AA404CB";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Constant GUID for the second default Settings.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        const string DEFAULT_SETTINGS_2_UID = "783C63B5-A964-4368-B2D0-D4595DCCB952";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										158
									
								
								zaaReloaded2/Defaults/clinic.zaaReloaded
									
									
									
									
									
										Executable file
									
								
							
							
						
						@@ -0,0 +1,158 @@
 | 
				
			|||||||
 | 
					<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:clr="http://schemas.microsoft.com/soap/encoding/clr/1.0" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
 | 
				
			||||||
 | 
					<SOAP-ENV:Body>
 | 
				
			||||||
 | 
					<a1:Settings id="ref-1" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Uid xsi:type="a2:Guid" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
 | 
				
			||||||
 | 
					<_a>-97947944</_a>
 | 
				
			||||||
 | 
					<_b>-28017</_b>
 | 
				
			||||||
 | 
					<_c>17434</_c>
 | 
				
			||||||
 | 
					<_d>191</_d>
 | 
				
			||||||
 | 
					<_e>72</_e>
 | 
				
			||||||
 | 
					<_f>82</_f>
 | 
				
			||||||
 | 
					<_g>56</_g>
 | 
				
			||||||
 | 
					<_h>48</_h>
 | 
				
			||||||
 | 
					<_i>158</_i>
 | 
				
			||||||
 | 
					<_j>105</_j>
 | 
				
			||||||
 | 
					<_k>95</_k>
 | 
				
			||||||
 | 
					</Uid>
 | 
				
			||||||
 | 
					<Name id="ref-3">NepA neu</Name>
 | 
				
			||||||
 | 
					<ReferenceStyle xsi:type="a3:ReferenceStyle" xmlns:a3="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Formatter/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">IfSpecialItem</ReferenceStyle>
 | 
				
			||||||
 | 
					<ElementsCount>1</ElementsCount>
 | 
				
			||||||
 | 
					<Element0Type href="#ref-4"/>
 | 
				
			||||||
 | 
					<Element0Object href="#ref-5"/>
 | 
				
			||||||
 | 
					</a1:Settings>
 | 
				
			||||||
 | 
					<a2:UnitySerializationHolder id="ref-4" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
 | 
				
			||||||
 | 
					<Data id="ref-6">zaaReloaded2.Controller.Elements.SelectEachDay</Data>
 | 
				
			||||||
 | 
					<UnityType>4</UnityType>
 | 
				
			||||||
 | 
					<AssemblyName id="ref-7">zaaReloaded2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6ec8d075a1ab1383</AssemblyName>
 | 
				
			||||||
 | 
					</a2:UnitySerializationHolder>
 | 
				
			||||||
 | 
					<a4:SelectEachDay id="ref-5" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<ChildrenCount>19</ChildrenCount>
 | 
				
			||||||
 | 
					<Child0Type href="#ref-8"/>
 | 
				
			||||||
 | 
					<Child0Object href="#ref-9"/>
 | 
				
			||||||
 | 
					<Child1Type href="#ref-8"/>
 | 
				
			||||||
 | 
					<Child1Object href="#ref-10"/>
 | 
				
			||||||
 | 
					<Child2Type href="#ref-8"/>
 | 
				
			||||||
 | 
					<Child2Object href="#ref-11"/>
 | 
				
			||||||
 | 
					<Child3Type href="#ref-8"/>
 | 
				
			||||||
 | 
					<Child3Object href="#ref-12"/>
 | 
				
			||||||
 | 
					<Child4Type href="#ref-8"/>
 | 
				
			||||||
 | 
					<Child4Object href="#ref-13"/>
 | 
				
			||||||
 | 
					<Child5Type href="#ref-8"/>
 | 
				
			||||||
 | 
					<Child5Object href="#ref-14"/>
 | 
				
			||||||
 | 
					<Child6Type href="#ref-8"/>
 | 
				
			||||||
 | 
					<Child6Object href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child7Type href="#ref-8"/>
 | 
				
			||||||
 | 
					<Child7Object href="#ref-16"/>
 | 
				
			||||||
 | 
					<Child8Type href="#ref-8"/>
 | 
				
			||||||
 | 
					<Child8Object href="#ref-17"/>
 | 
				
			||||||
 | 
					<Child9Type href="#ref-8"/>
 | 
				
			||||||
 | 
					<Child9Object href="#ref-18"/>
 | 
				
			||||||
 | 
					<Child10Type href="#ref-8"/>
 | 
				
			||||||
 | 
					<Child10Object href="#ref-19"/>
 | 
				
			||||||
 | 
					<Child11Type href="#ref-8"/>
 | 
				
			||||||
 | 
					<Child11Object href="#ref-20"/>
 | 
				
			||||||
 | 
					<Child12Type href="#ref-8"/>
 | 
				
			||||||
 | 
					<Child12Object href="#ref-21"/>
 | 
				
			||||||
 | 
					<Child13Type href="#ref-8"/>
 | 
				
			||||||
 | 
					<Child13Object href="#ref-22"/>
 | 
				
			||||||
 | 
					<Child14Type href="#ref-8"/>
 | 
				
			||||||
 | 
					<Child14Object href="#ref-23"/>
 | 
				
			||||||
 | 
					<Child15Type href="#ref-24"/>
 | 
				
			||||||
 | 
					<Child15Object href="#ref-25"/>
 | 
				
			||||||
 | 
					<Child16Type href="#ref-24"/>
 | 
				
			||||||
 | 
					<Child16Object href="#ref-26"/>
 | 
				
			||||||
 | 
					<Child17Type href="#ref-24"/>
 | 
				
			||||||
 | 
					<Child17Object href="#ref-27"/>
 | 
				
			||||||
 | 
					<Child18Type href="#ref-8"/>
 | 
				
			||||||
 | 
					<Child18Object href="#ref-28"/>
 | 
				
			||||||
 | 
					</a4:SelectEachDay>
 | 
				
			||||||
 | 
					<a2:UnitySerializationHolder id="ref-8" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
 | 
				
			||||||
 | 
					<Data id="ref-29">zaaReloaded2.Controller.Elements.Items</Data>
 | 
				
			||||||
 | 
					<UnityType>4</UnityType>
 | 
				
			||||||
 | 
					<AssemblyName href="#ref-7"/>
 | 
				
			||||||
 | 
					</a2:UnitySerializationHolder>
 | 
				
			||||||
 | 
					<a4:Items id="ref-9" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-30">Klinische Chemie: Na, K, Cl, Mg, Ca, P, CaxP, Alb, Prot, Haptoglobin, LDH, Glukose, Harnsäure</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-10" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-31">Entzündung/Immunsystem: CRP, Pct, C3c, C4, Anti-DNAse B, ASL</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-11" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-32">Kardiale Marker: CK, CKMB, Trop, NTproBNP</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-12" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-33">Niere: Krea, Hst, eGFR (CKD-EPI)</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-13" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-34">Sammelurin: SU-Proteinurie, SU-Alb, SU-CrCl, SU-HstCl, SU-GFR, SU-Natrium, SU-Zeit, SU-Volumen</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-14" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-35">Spot-Urin: U-*</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-15" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-36">Leber: GOT, GGT, GPT, AP, Bilirubin, CHE</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-16" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-37">Blutfette: TG, Chol, LDL, HDL, Lp(a)</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-17" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-38">Hämatologie: Hb, Hkt, Reti, Leu, Thr, MCV, HbA1c, Retikulozyten, Fragmentozyten</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-18" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-39">Gerinnung: Quick, INR, PTT, Fibrinogen, ATIII, Anti-Xa</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-19" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-40">Diff.-BB: Ery, Neu, Lym, Mon, Baso, Eos</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-20" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-41">Hormone: iPTH, TSH</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-21" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-42">Medikamente: TAC, CSA, SIR, Vancomycin, Gentamicin, Tobramicin</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-22" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-43">Eisenhaushalt: Eisen, Ferritin, Transferrin, Tf.-Sätt.</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-23" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-44">BGA: pH, Std.-Bic., BE</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a2:UnitySerializationHolder id="ref-24" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
 | 
				
			||||||
 | 
					<Data id="ref-45">zaaReloaded2.Controller.Elements.CustomText</Data>
 | 
				
			||||||
 | 
					<UnityType>4</UnityType>
 | 
				
			||||||
 | 
					<AssemblyName href="#ref-7"/>
 | 
				
			||||||
 | 
					</a2:UnitySerializationHolder>
 | 
				
			||||||
 | 
					<a4:CustomText id="ref-25" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-46">Virologie (EDTA-Blut): CMV-PCR, BKV-PCR</Content>
 | 
				
			||||||
 | 
					</a4:CustomText>
 | 
				
			||||||
 | 
					<a4:CustomText id="ref-26" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-47">Nephrolog. Sediment: pH, Proteinurie, Ery /µl, Leu /µl, Plattenep. /µl, Bakt., Schleimfäden</Content>
 | 
				
			||||||
 | 
					</a4:CustomText>
 | 
				
			||||||
 | 
					<a4:CustomText id="ref-27" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-48">Autoantikörper: ANCA (IF), MPO-ANCA (ELISA), PR3-ANCA (ELISA), ANA (IF), AnDNA (ELISA), AnDNA (RIA)</Content>
 | 
				
			||||||
 | 
					</a4:CustomText>
 | 
				
			||||||
 | 
					<a4:Items id="ref-28" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-49">Hepatitis-Serologie: Anti-HBs, Anti-HBc</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					</SOAP-ENV:Body>
 | 
				
			||||||
 | 
					</SOAP-ENV:Envelope>
 | 
				
			||||||
							
								
								
									
										117
									
								
								zaaReloaded2/Defaults/parameters.txt
									
									
									
									
									
										Executable file
									
								
							
							
						
						@@ -0,0 +1,117 @@
 | 
				
			|||||||
 | 
					# LAURIS-NAME                      "KANONISCHER NAME"   MATERIAL   "IMMER REFERENZBEREICH"   "BLACKLIST"
 | 
				
			||||||
 | 
					# ===========                      ==================   ========   =======================   ===========
 | 
				
			||||||
 | 
					"Übergangsepithelien (U)"          Übergangsep.         U
 | 
				
			||||||
 | 
					"a1-Microglobulin (SU)"            a1-Microglobulin     SU
 | 
				
			||||||
 | 
					"a1-Microglobulin (SU)/die"        a1-Microglobulin     SU
 | 
				
			||||||
 | 
					"aktuelles Bicarbonat"             Bic                  BGA
 | 
				
			||||||
 | 
					"Albumin (PU)"                     Alb                  U
 | 
				
			||||||
 | 
					"Albumin (SU)"                     Alb                  SU
 | 
				
			||||||
 | 
					"Albumin (SU)/die"                 Alb                  SU
 | 
				
			||||||
 | 
					Albumin                            Alb                  S
 | 
				
			||||||
 | 
					Albumin/Creatinin (PU)"            ACR                  U
 | 
				
			||||||
 | 
					"Alk. Phosphatase"                 AP                   S
 | 
				
			||||||
 | 
					Amylase                            Amylase              S
 | 
				
			||||||
 | 
					"anorg. Phosphat"                  P                    S
 | 
				
			||||||
 | 
					"Bakterien (U)"                    Bakt                 U
 | 
				
			||||||
 | 
					Basenabweichung                    BE                   BGA
 | 
				
			||||||
 | 
					Basophile                          Baso                 E
 | 
				
			||||||
 | 
					"Bilirubin (U)"                    Bilirubin            U
 | 
				
			||||||
 | 
					"C-reaktives Protein"              CRP                  S
 | 
				
			||||||
 | 
					"Calcium (SU)"                     Ca                   SU
 | 
				
			||||||
 | 
					"Calcium (SU)/die"                 Ca                   SU
 | 
				
			||||||
 | 
					Calcium                            Ca                   S
 | 
				
			||||||
 | 
					Calcium-Phosphat-Produkt           CaxP                 S
 | 
				
			||||||
 | 
					Cholesterin                        Chol                 S
 | 
				
			||||||
 | 
					CK gesamt"                         CK                   S
 | 
				
			||||||
 | 
					"CK MB"                            CK-MB                S
 | 
				
			||||||
 | 
					"Creatinin (PU)"                   Krea                 U
 | 
				
			||||||
 | 
					"Creatinin (SU)"                   Krea                 SU
 | 
				
			||||||
 | 
					Creatinin                          Krea                 S
 | 
				
			||||||
 | 
					"Creatinin-Clearance (SU)/min"     CrCl                 SU
 | 
				
			||||||
 | 
					"Cyclosporin-A vor Gabe"           "CsA (C0)"           S                  X
 | 
				
			||||||
 | 
					"Cystatin C (N Latex)"             "Cystatin C"         S                  X
 | 
				
			||||||
 | 
					Eisen                              Fe                   S
 | 
				
			||||||
 | 
					Eosinophile                        Eos                  E
 | 
				
			||||||
 | 
					"Erythrozyten (U)"                 Ery                  U
 | 
				
			||||||
 | 
					Erythrozyten                       Ery                  E
 | 
				
			||||||
 | 
					Ferritin                           Ferr                 S
 | 
				
			||||||
 | 
					Gesamt-Bilirubin                   Bilirubin            S
 | 
				
			||||||
 | 
					"Gesamt-Eiweiss (PU)"              Protein              U
 | 
				
			||||||
 | 
					"Gesamt-Eiweiss (SU)"              Protein              SU
 | 
				
			||||||
 | 
					"Gesamt-Eiweiss (SU)/die"          Proteinurie          SU
 | 
				
			||||||
 | 
					Gesamt-Eiweiss                     Protein              S
 | 
				
			||||||
 | 
					"Gesamt-Eiweiss/Creatinin (PU)"    TPCR                 U
 | 
				
			||||||
 | 
					GGT                                GGT                  S
 | 
				
			||||||
 | 
					"glomeruläre Filtrationsrate"      GFR                  SU
 | 
				
			||||||
 | 
					"glomerul. Filtrationsr. (MDRD)"   "eGFR (MDRD)"        S                   ---         X
 | 
				
			||||||
 | 
					"glomerul. Filtrationsr. CKD-EP"   "eGFR (CKD-EPI)"     S
 | 
				
			||||||
 | 
					"Glucose (U)"                      Glukose              U
 | 
				
			||||||
 | 
					Glucose                            Glukose              S
 | 
				
			||||||
 | 
					"GOT (ASAT)"                       GOT                  S
 | 
				
			||||||
 | 
					"GPT (ALAT)"                       GPT                  S
 | 
				
			||||||
 | 
					Hämatokrit                         Hkt                  E
 | 
				
			||||||
 | 
					Hämoglobin                         Hb                   E
 | 
				
			||||||
 | 
					Haptoglobin                        Haptoglobin          S                   X
 | 
				
			||||||
 | 
					Harnsäure                          Harnsäure            S
 | 
				
			||||||
 | 
					"Harnstoff (SU)"                   Hst                  SU
 | 
				
			||||||
 | 
					"Harnstoff (SU)/die"               Hst/Tag              SU
 | 
				
			||||||
 | 
					Harnstoff"                         Hst                  S
 | 
				
			||||||
 | 
					"Harnstoff-Clearance (SU)/min"     HstCl                SU
 | 
				
			||||||
 | 
					"HbA1c (NGSP)"                     HbA1c                E
 | 
				
			||||||
 | 
					"HDL - Cholesterin"                HDL                  S
 | 
				
			||||||
 | 
					"hyaline Zylinder (U)"             "hyal. Zyl."         U
 | 
				
			||||||
 | 
					"Kalium (SU)"                      K                    U
 | 
				
			||||||
 | 
					"Kalium (SU)/die"                  K                    SU
 | 
				
			||||||
 | 
					Kalium                             K                    S
 | 
				
			||||||
 | 
					"Ketonkörper (U)"                  KK                   U
 | 
				
			||||||
 | 
					"Lactat Dehydrogenase"             LDH                  S
 | 
				
			||||||
 | 
					"LDL - Cholesterin"                LDL                  S
 | 
				
			||||||
 | 
					"Leukozyten (U)"                   Leu                  U
 | 
				
			||||||
 | 
					Leukozyten                         Leu                  E
 | 
				
			||||||
 | 
					Lymphozyten                        Lym                  E
 | 
				
			||||||
 | 
					Magnesium                          Mg                   S                   X
 | 
				
			||||||
 | 
					"MCH (HbE)"                        MCH                  E
 | 
				
			||||||
 | 
					MCHC                               MCHC                 E
 | 
				
			||||||
 | 
					MCV                                MCV                  E
 | 
				
			||||||
 | 
					"Mittleres Plättchenvolumen"       MPV                  E
 | 
				
			||||||
 | 
					Monozyten                          Mon                  E
 | 
				
			||||||
 | 
					"Natrium (SU)"                     Na                   SU
 | 
				
			||||||
 | 
					"Natrium (SU)/die"                 Na                   SU
 | 
				
			||||||
 | 
					Natrium                            Na                   S
 | 
				
			||||||
 | 
					Neutrophile                        Neu                  E
 | 
				
			||||||
 | 
					"Nitrit (U)"                       Nitrit               U
 | 
				
			||||||
 | 
					NT-proBNP                          NT-proBNP            S
 | 
				
			||||||
 | 
					"PCO2 (art.)"                      pCO2                 BGA
 | 
				
			||||||
 | 
					"pH (U)"                           pH                   U
 | 
				
			||||||
 | 
					pH                                 pH                   BGA
 | 
				
			||||||
 | 
					"Plattenepithelien (U)"            Plattenep            U
 | 
				
			||||||
 | 
					"PO2 (art.)"                       pO2                  BGA
 | 
				
			||||||
 | 
					"Protein (U)"                      Protein              U
 | 
				
			||||||
 | 
					"Sammelmenge (U)"                  Volumen              SU
 | 
				
			||||||
 | 
					"Sammelzeit (U)"                   Zeit                 SU
 | 
				
			||||||
 | 
					"Sauerstoffsättigung (art.)"       SO2                  BGA
 | 
				
			||||||
 | 
					Sirolimus                          SIR                  S
 | 
				
			||||||
 | 
					"spezifisches Gewicht (U)"         "spez. Gew."         U
 | 
				
			||||||
 | 
					"Standard Bicarbonat"              "Std.-Bic."          BGA
 | 
				
			||||||
 | 
					"Tacrolimus (FK506)"               TAC                  S
 | 
				
			||||||
 | 
					Thrombozyten                       Thr                  E
 | 
				
			||||||
 | 
					Transferrin                        Transferrin          S
 | 
				
			||||||
 | 
					"Transferrinsättigung"             Tf.-Sätt.            S
 | 
				
			||||||
 | 
					"Triglyceride"                     TG                   S
 | 
				
			||||||
 | 
					"Troponin T (high sensitive)"      hsTnT                S
 | 
				
			||||||
 | 
					Unreife Granulozyten"              Gran                 E
 | 
				
			||||||
 | 
					"Urobilinogen (U)"                 Urobilinogen         U
 | 
				
			||||||
 | 
					"Niedermol. Heparin (Anti-Xa)"     Anti-Xa              Z
 | 
				
			||||||
 | 
					"Thromboplastinzeit n. Quick"      Quick                Z
 | 
				
			||||||
 | 
					PTT                                PTT                  Z
 | 
				
			||||||
 | 
					"Ratio int. norm."                 INR                  Z
 | 
				
			||||||
 | 
					"Komplementfaktor C3c"             C3c                  S                     X
 | 
				
			||||||
 | 
					"Komplementfaktor C4"              C4                   S                     X
 | 
				
			||||||
 | 
					"Anti-DNAse B"                     "Anti-DNAse B"       S
 | 
				
			||||||
 | 
					Anti-Streptolysin                  ASL                  S
 | 
				
			||||||
 | 
					"PTH intakt"                       iPTH                 S
 | 
				
			||||||
 | 
					TSH                                TSH                  S
 | 
				
			||||||
 | 
					HAPTOGLOBIN                        Haptoglobin          S
 | 
				
			||||||
 | 
					FRAGMENTOZYTEN                     Fragmentozyten       E
 | 
				
			||||||
 | 
					"HBc-Antikörper (gesamt)"          Anti-HBc             S
 | 
				
			||||||
 | 
					HBs-Antikörper                     Anti-HBs             S
 | 
				
			||||||
@@ -2,6 +2,9 @@
 | 
				
			|||||||
# ==============    ====================
 | 
					# ==============    ====================
 | 
				
			||||||
# WICHTIG: Nur direkt austauschbare Einheiten verwenden,
 | 
					# WICHTIG: Nur direkt austauschbare Einheiten verwenden,
 | 
				
			||||||
# weil (bislang) keine Umrechnung der Werte vorgesehen ist!
 | 
					# weil (bislang) keine Umrechnung der Werte vorgesehen ist!
 | 
				
			||||||
"ml/min/ 1,73qm"    "ml/min/1,73 m²"
 | 
					"ml/min /1,73qm"    "ml/min/1,73 m²"
 | 
				
			||||||
ng/ml               µg/l
 | 
					ng/ml               µg/l
 | 
				
			||||||
mmol/l              mM
 | 
					mmol/l              mM
 | 
				
			||||||
 | 
					n*1000/µl           /nl
 | 
				
			||||||
 | 
					n*10E6/µl           /fl
 | 
				
			||||||
 | 
					Bak/µl              /µl
 | 
				
			||||||
							
								
								
									
										208
									
								
								zaaReloaded2/Defaults/ward.zaaReloaded
									
									
									
									
									
										Executable file
									
								
							
							
						
						@@ -0,0 +1,208 @@
 | 
				
			|||||||
 | 
					<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:clr="http://schemas.microsoft.com/soap/encoding/clr/1.0" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
 | 
				
			||||||
 | 
					<SOAP-ENV:Body>
 | 
				
			||||||
 | 
					<a1:Settings id="ref-1" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Uid xsi:type="a2:Guid" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
 | 
				
			||||||
 | 
					<_a>-1732917544</_a>
 | 
				
			||||||
 | 
					<_b>21822</_b>
 | 
				
			||||||
 | 
					<_c>16721</_c>
 | 
				
			||||||
 | 
					<_d>134</_d>
 | 
				
			||||||
 | 
					<_e>250</_e>
 | 
				
			||||||
 | 
					<_f>231</_f>
 | 
				
			||||||
 | 
					<_g>106</_g>
 | 
				
			||||||
 | 
					<_h>44</_h>
 | 
				
			||||||
 | 
					<_i>93</_i>
 | 
				
			||||||
 | 
					<_j>252</_j>
 | 
				
			||||||
 | 
					<_k>234</_k>
 | 
				
			||||||
 | 
					</Uid>
 | 
				
			||||||
 | 
					<Name id="ref-3">Station neu</Name>
 | 
				
			||||||
 | 
					<ReferenceStyle xsi:type="a3:ReferenceStyle" xmlns:a3="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Formatter/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">IfSpecialOrAbnormal</ReferenceStyle>
 | 
				
			||||||
 | 
					<ElementsCount>4</ElementsCount>
 | 
				
			||||||
 | 
					<Element0Type href="#ref-4"/>
 | 
				
			||||||
 | 
					<Element0Object href="#ref-5"/>
 | 
				
			||||||
 | 
					<Element1Type href="#ref-6"/>
 | 
				
			||||||
 | 
					<Element1Object href="#ref-7"/>
 | 
				
			||||||
 | 
					<Element2Type href="#ref-8"/>
 | 
				
			||||||
 | 
					<Element2Object href="#ref-9"/>
 | 
				
			||||||
 | 
					<Element3Type href="#ref-10"/>
 | 
				
			||||||
 | 
					<Element3Object href="#ref-11"/>
 | 
				
			||||||
 | 
					</a1:Settings>
 | 
				
			||||||
 | 
					<a2:UnitySerializationHolder id="ref-4" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
 | 
				
			||||||
 | 
					<Data id="ref-12">zaaReloaded2.Controller.Elements.TwoColumns</Data>
 | 
				
			||||||
 | 
					<UnityType>4</UnityType>
 | 
				
			||||||
 | 
					<AssemblyName id="ref-13">zaaReloaded2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6ec8d075a1ab1383</AssemblyName>
 | 
				
			||||||
 | 
					</a2:UnitySerializationHolder>
 | 
				
			||||||
 | 
					<a4:TwoColumns id="ref-5" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<ChildrenCount>0</ChildrenCount>
 | 
				
			||||||
 | 
					</a4:TwoColumns>
 | 
				
			||||||
 | 
					<a2:UnitySerializationHolder id="ref-6" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
 | 
				
			||||||
 | 
					<Data id="ref-14">zaaReloaded2.Controller.Elements.SelectFirstDay</Data>
 | 
				
			||||||
 | 
					<UnityType>4</UnityType>
 | 
				
			||||||
 | 
					<AssemblyName href="#ref-13"/>
 | 
				
			||||||
 | 
					</a2:UnitySerializationHolder>
 | 
				
			||||||
 | 
					<a4:SelectFirstDay id="ref-7" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<ChildrenCount>17</ChildrenCount>
 | 
				
			||||||
 | 
					<Child0Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child0Object href="#ref-16"/>
 | 
				
			||||||
 | 
					<Child1Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child1Object href="#ref-17"/>
 | 
				
			||||||
 | 
					<Child2Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child2Object href="#ref-18"/>
 | 
				
			||||||
 | 
					<Child3Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child3Object href="#ref-19"/>
 | 
				
			||||||
 | 
					<Child4Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child4Object href="#ref-20"/>
 | 
				
			||||||
 | 
					<Child5Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child5Object href="#ref-21"/>
 | 
				
			||||||
 | 
					<Child6Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child6Object href="#ref-22"/>
 | 
				
			||||||
 | 
					<Child7Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child7Object href="#ref-23"/>
 | 
				
			||||||
 | 
					<Child8Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child8Object href="#ref-24"/>
 | 
				
			||||||
 | 
					<Child9Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child9Object href="#ref-25"/>
 | 
				
			||||||
 | 
					<Child10Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child10Object href="#ref-26"/>
 | 
				
			||||||
 | 
					<Child11Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child11Object href="#ref-27"/>
 | 
				
			||||||
 | 
					<Child12Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child12Object href="#ref-28"/>
 | 
				
			||||||
 | 
					<Child13Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child13Object href="#ref-29"/>
 | 
				
			||||||
 | 
					<Child14Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child14Object href="#ref-30"/>
 | 
				
			||||||
 | 
					<Child15Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child15Object href="#ref-31"/>
 | 
				
			||||||
 | 
					<Child16Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child16Object href="#ref-32"/>
 | 
				
			||||||
 | 
					</a4:SelectFirstDay>
 | 
				
			||||||
 | 
					<a2:UnitySerializationHolder id="ref-8" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
 | 
				
			||||||
 | 
					<Data id="ref-33">zaaReloaded2.Controller.Elements.NextColumn</Data>
 | 
				
			||||||
 | 
					<UnityType>4</UnityType>
 | 
				
			||||||
 | 
					<AssemblyName href="#ref-13"/>
 | 
				
			||||||
 | 
					</a2:UnitySerializationHolder>
 | 
				
			||||||
 | 
					<a4:NextColumn id="ref-9" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<ChildrenCount>0</ChildrenCount>
 | 
				
			||||||
 | 
					</a4:NextColumn>
 | 
				
			||||||
 | 
					<a2:UnitySerializationHolder id="ref-10" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
 | 
				
			||||||
 | 
					<Data id="ref-34">zaaReloaded2.Controller.Elements.SelectLastDay</Data>
 | 
				
			||||||
 | 
					<UnityType>4</UnityType>
 | 
				
			||||||
 | 
					<AssemblyName href="#ref-13"/>
 | 
				
			||||||
 | 
					</a2:UnitySerializationHolder>
 | 
				
			||||||
 | 
					<a4:SelectLastDay id="ref-11" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<ChildrenCount>17</ChildrenCount>
 | 
				
			||||||
 | 
					<Child0Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child0Object href="#ref-16"/>
 | 
				
			||||||
 | 
					<Child1Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child1Object href="#ref-17"/>
 | 
				
			||||||
 | 
					<Child2Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child2Object href="#ref-18"/>
 | 
				
			||||||
 | 
					<Child3Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child3Object href="#ref-19"/>
 | 
				
			||||||
 | 
					<Child4Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child4Object href="#ref-20"/>
 | 
				
			||||||
 | 
					<Child5Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child5Object href="#ref-21"/>
 | 
				
			||||||
 | 
					<Child6Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child6Object href="#ref-22"/>
 | 
				
			||||||
 | 
					<Child7Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child7Object href="#ref-23"/>
 | 
				
			||||||
 | 
					<Child8Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child8Object href="#ref-24"/>
 | 
				
			||||||
 | 
					<Child9Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child9Object href="#ref-25"/>
 | 
				
			||||||
 | 
					<Child10Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child10Object href="#ref-26"/>
 | 
				
			||||||
 | 
					<Child11Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child11Object href="#ref-27"/>
 | 
				
			||||||
 | 
					<Child12Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child12Object href="#ref-28"/>
 | 
				
			||||||
 | 
					<Child13Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child13Object href="#ref-29"/>
 | 
				
			||||||
 | 
					<Child14Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child14Object href="#ref-30"/>
 | 
				
			||||||
 | 
					<Child15Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child15Object href="#ref-31"/>
 | 
				
			||||||
 | 
					<Child16Type href="#ref-15"/>
 | 
				
			||||||
 | 
					<Child16Object href="#ref-32"/>
 | 
				
			||||||
 | 
					</a4:SelectLastDay>
 | 
				
			||||||
 | 
					<a2:UnitySerializationHolder id="ref-15" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
 | 
				
			||||||
 | 
					<Data id="ref-35">zaaReloaded2.Controller.Elements.Items</Data>
 | 
				
			||||||
 | 
					<UnityType>4</UnityType>
 | 
				
			||||||
 | 
					<AssemblyName href="#ref-13"/>
 | 
				
			||||||
 | 
					</a2:UnitySerializationHolder>
 | 
				
			||||||
 | 
					<a4:Items id="ref-16" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-36">Klinische Chemie: Na, K, Cl, Mg, Ca, P, CaxP, Alb, Prot, Haptoglobin, LDH, Glukose, Harnsäure</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-17" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-37">Entzündung/Immunsystem: CRP, Pct, C3c, C4, Anti-DNAse B, ASL</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-18" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-38">Kardiale Marker: CK, CKMB, Trop, NTproBNP</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-19" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-39">Niere: Krea, Hst, eGFR (CKD-EPI)</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-20" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-40">Sammelurin: SU-Proteinurie, SU-Alb, SU-CrCl, SU-HstCl, SU-GFR, SU-Natrium, SU-Zeit, SU-Volumen</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-21" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-41">Spot-Urin: U-*</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-22" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-42">Leber: GOT, GGT, GPT, AP, Bilirubin, CHE</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-23" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-43">Blutfette: TG, Chol, LDL, HDL, Lp(a)</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-24" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-44">Hämatologie: Hb, Hkt, Reti, Leu, Thr, MCV, HbA1c, Retikulozyten, Fragmentozyten</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-25" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-45">Gerinnung: Quick, INR, PTT, Fibrinogen, ATIII, Anti-Xa</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-26" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-46">Diff.-BB: Ery, Neu, Lym, Mon, Baso, Eos</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-27" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-47">Hormone: iPTH, TSH</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-28" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-48">Medikamente: TAC, CSA, SIR, Vancomycin, Gentamicin, Tobramicin</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-29" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-49">Eisenhaushalt: Eisen, Ferritin, Transferrin, Tf.-Sätt.</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-30" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-50">BGA: pH, Std.-Bic., BE</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-31" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-51">Hepatitis-Serologie: Anti-HBs, Anti-HBc</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					<a4:Items id="ref-32" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
 | 
				
			||||||
 | 
					<Version>1</Version>
 | 
				
			||||||
 | 
					<Content id="ref-52">Weitere Werte: *</Content>
 | 
				
			||||||
 | 
					</a4:Items>
 | 
				
			||||||
 | 
					</SOAP-ENV:Body>
 | 
				
			||||||
 | 
					</SOAP-ENV:Envelope>
 | 
				
			||||||
@@ -25,7 +25,8 @@
 | 
				
			|||||||
        xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
 | 
					        xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
 | 
				
			||||||
        xmlns:settings="clr-namespace:Bovender.Mvvm.Views.Settings;assembly=Bovender"
 | 
					        xmlns:settings="clr-namespace:Bovender.Mvvm.Views.Settings;assembly=Bovender"
 | 
				
			||||||
        xmlns:converter="clr-namespace:Bovender.Mvvm.Converters;assembly=Bovender"
 | 
					        xmlns:converter="clr-namespace:Bovender.Mvvm.Converters;assembly=Bovender"
 | 
				
			||||||
        SizeToContent="Height" Width="700"
 | 
					        SizeToContent="Height" Width="700" ShowInTaskbar="False"
 | 
				
			||||||
 | 
					        WindowStyle="ToolWindow" Topmost="True" ResizeMode="CanResizeWithGrip"
 | 
				
			||||||
        x:Name="exceptionDetailView"
 | 
					        x:Name="exceptionDetailView"
 | 
				
			||||||
        Title="Technische Fehlerdetails"
 | 
					        Title="Technische Fehlerdetails"
 | 
				
			||||||
        settings:WindowState.Save="True"
 | 
					        settings:WindowState.Save="True"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,6 +27,7 @@
 | 
				
			|||||||
        xmlns:actions="clr-namespace:Bovender.Mvvm.Actions;assembly=Bovender"
 | 
					        xmlns:actions="clr-namespace:Bovender.Mvvm.Actions;assembly=Bovender"
 | 
				
			||||||
        xmlns:settings="clr-namespace:Bovender.Mvvm.Views.Settings;assembly=Bovender"
 | 
					        xmlns:settings="clr-namespace:Bovender.Mvvm.Views.Settings;assembly=Bovender"
 | 
				
			||||||
        SizeToContent="WidthAndHeight" ResizeMode="CanResizeWithGrip"
 | 
					        SizeToContent="WidthAndHeight" ResizeMode="CanResizeWithGrip"
 | 
				
			||||||
 | 
					        WindowStyle="ToolWindow" ShowInTaskbar="False" Topmost="True"
 | 
				
			||||||
        WindowStartupLocation="CenterScreen"
 | 
					        WindowStartupLocation="CenterScreen"
 | 
				
			||||||
        Title="zaaReloaded2: Fehler!"
 | 
					        Title="zaaReloaded2: Fehler!"
 | 
				
			||||||
        settings:WindowState.Save="True"
 | 
					        settings:WindowState.Save="True"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,8 +32,7 @@ namespace zaaReloaded2.ExceptionHandler
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            get
 | 
					            get
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                // TODO: Get Word version
 | 
					                return Globals.ThisAddIn.Application.Build;
 | 
				
			||||||
                return "n/a";
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -84,7 +83,7 @@ namespace zaaReloaded2.ExceptionHandler
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        protected override string DevPath()
 | 
					        protected override string DevPath()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            return @"x:\Code\zaaReloaded2\";
 | 
					            return @"x:\Code\zaaReloaded2\zaaReloaded2\";
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,6 +53,12 @@ namespace zaaReloaded2.Formatter
 | 
				
			|||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        public bool HasBufferedText { get { return _buffer.Length > 0; } }
 | 
					        public bool HasBufferedText { get { return _buffer.Length > 0; } }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Gets or sets the desired paragraph style when flushing into
 | 
				
			||||||
 | 
					        /// a Document.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public string ParagraphStyle { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Constructors
 | 
					        #region Constructors
 | 
				
			||||||
@@ -113,7 +119,14 @@ namespace zaaReloaded2.Formatter
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            if (Document != null)
 | 
					            if (Document != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                Document.Range().Text = _buffer.ToString();
 | 
					                Selection s = Document.ActiveWindow.Selection;
 | 
				
			||||||
 | 
					                s.ClearCharacterDirectFormatting();
 | 
				
			||||||
 | 
					                s.ClearParagraphDirectFormatting();
 | 
				
			||||||
 | 
					                if (!string.IsNullOrEmpty(ParagraphStyle))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    s.set_Style(ParagraphStyle);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                s.Range.Text = _buffer.ToString();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (Parent != null)
 | 
					            if (Parent != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -64,6 +64,12 @@ namespace zaaReloaded2.Formatter
 | 
				
			|||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        public Dictionary<DateTime, TimePointFormatter> WorkingTimePoints { get; private set; }
 | 
					        public Dictionary<DateTime, TimePointFormatter> WorkingTimePoints { get; private set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Is true if this Formatter object carries a Laboratory with
 | 
				
			||||||
 | 
					        /// at least one time point.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public bool CanRun { get { return Laboratory.TimePoints.Count > 0; } }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Constructors
 | 
					        #region Constructors
 | 
				
			||||||
@@ -113,6 +119,10 @@ namespace zaaReloaded2.Formatter
 | 
				
			|||||||
        /// current position of the cursor).</param>
 | 
					        /// current position of the cursor).</param>
 | 
				
			||||||
        public void Run()
 | 
					        public void Run()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            if (!CanRun) throw new InvalidOperationException("No laboratory data to format.");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            CreateParagraphStyle();
 | 
				
			||||||
 | 
					            _secondaryBuffer.ParagraphStyle = zaaReloaded2.Properties.Settings.Default.ParagraphStyleName;
 | 
				
			||||||
            int current = 0;
 | 
					            int current = 0;
 | 
				
			||||||
            while (current < Settings.Elements.Count)
 | 
					            while (current < Settings.Elements.Count)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -195,7 +205,68 @@ namespace zaaReloaded2.Formatter
 | 
				
			|||||||
        /// FormatElementBase children to process.</param>
 | 
					        /// FormatElementBase children to process.</param>
 | 
				
			||||||
        public void ProcessAllTimePoints(ControlElementBase controlElement)
 | 
					        public void ProcessAllTimePoints(ControlElementBase controlElement)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            ProcessAllTimePoints(controlElement.FormatElements);
 | 
					            ProcessAllTimePoints(controlElement.Children);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Inserts a table with two columns into the document.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public void InsertTwoColumns()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            _secondaryBuffer.Flush();
 | 
				
			||||||
 | 
					            if (Document != null)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Range r = Document.ActiveWindow.Selection.Range;
 | 
				
			||||||
 | 
					                _table = Document.Tables.Add(r, NumRows: 1, NumColumns: 2);
 | 
				
			||||||
 | 
					                _table.AllowAutoFit = true;
 | 
				
			||||||
 | 
					                _table.AutoFitBehavior(WdAutoFitBehavior.wdAutoFitWindow);
 | 
				
			||||||
 | 
					                _table.PreferredWidthType = WdPreferredWidthType.wdPreferredWidthPercent;
 | 
				
			||||||
 | 
					                _table.PreferredWidth = 100;
 | 
				
			||||||
 | 
					                _table.Borders.Enable = 0;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Moves the insertion point to the next column in a layout
 | 
				
			||||||
 | 
					        /// table.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public void NextColumn()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (_table == null)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                throw new InvalidOperationException(
 | 
				
			||||||
 | 
					                    "Kann nicht zur nächsten Spalte wechseln, da bislang keine Tabelle eingefügt wurde.");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            _secondaryBuffer.Flush();
 | 
				
			||||||
 | 
					            Document.ActiveWindow.Selection.MoveRight(WdUnits.wdCell);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Creates a zaaReloaded2 paragraph style in the document.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public void CreateParagraphStyle()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (Document != null)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Style style;
 | 
				
			||||||
 | 
					                // Don't see a better way to check for the existence of a particular
 | 
				
			||||||
 | 
					                // paragraph style than by using a try...catch construction.
 | 
				
			||||||
 | 
					                try
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    style = Document.Styles[Properties.Settings.Default.ParagraphStyleName];
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                catch
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    style = Document.Styles.Add(Properties.Settings.Default.ParagraphStyleName);
 | 
				
			||||||
 | 
					                    style.Font.Size = 10; // pt
 | 
				
			||||||
 | 
					                    style.Font.Bold = 0;
 | 
				
			||||||
 | 
					                    style.Font.Italic = 0;
 | 
				
			||||||
 | 
					                    style.Font.Underline = 0;
 | 
				
			||||||
 | 
					                    style.ParagraphFormat.LeftIndent = 36; // pt
 | 
				
			||||||
 | 
					                    style.ParagraphFormat.FirstLineIndent = -36; // pt
 | 
				
			||||||
 | 
					                    style.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphJustify;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
@@ -259,7 +330,7 @@ namespace zaaReloaded2.Formatter
 | 
				
			|||||||
                throw new ArgumentNullException("workingTimePoints");
 | 
					                throw new ArgumentNullException("workingTimePoints");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            WorkingTimePoints = workingTimePoints;
 | 
					            WorkingTimePoints = workingTimePoints;
 | 
				
			||||||
            ProcessElements(controlElement.FormatElements);
 | 
					            ProcessElements(controlElement.Children);
 | 
				
			||||||
            if (_primaryBuffer.HasBufferedText)
 | 
					            if (_primaryBuffer.HasBufferedText)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                _primaryBuffer.Prepend(
 | 
					                _primaryBuffer.Prepend(
 | 
				
			||||||
@@ -286,6 +357,7 @@ namespace zaaReloaded2.Formatter
 | 
				
			|||||||
        Laboratory _laboratory;
 | 
					        Laboratory _laboratory;
 | 
				
			||||||
        DocumentWriter _primaryBuffer;
 | 
					        DocumentWriter _primaryBuffer;
 | 
				
			||||||
        DocumentWriter _secondaryBuffer;
 | 
					        DocumentWriter _secondaryBuffer;
 | 
				
			||||||
 | 
					        Table _table;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -48,6 +48,23 @@ namespace zaaReloaded2.Formatter
 | 
				
			|||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        public bool HasBeenUsed { get; set; }
 | 
					        public bool HasBeenUsed { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Gets or sets a flag that tells the formatter to include or
 | 
				
			||||||
 | 
					        /// not include the material indicator in the formatted output.
 | 
				
			||||||
 | 
					        /// Default is true.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <remarks>
 | 
				
			||||||
 | 
					        /// For example, items that are selected with a wildcard may
 | 
				
			||||||
 | 
					        /// contain the material info, while expressly chosen items
 | 
				
			||||||
 | 
					        /// may not.
 | 
				
			||||||
 | 
					        /// </remarks>
 | 
				
			||||||
 | 
					        public bool IncludeMaterial { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Gets whether the Item is marked as blacklisted in the thesaurus.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public bool IsBlacklisted { get { return LabItem.IsBlacklisted;  } }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Constructor
 | 
					        #region Constructor
 | 
				
			||||||
@@ -58,6 +75,7 @@ namespace zaaReloaded2.Formatter
 | 
				
			|||||||
        /// <param name="labItem">LabItem to wrap in this ItemFormatter.</param>
 | 
					        /// <param name="labItem">LabItem to wrap in this ItemFormatter.</param>
 | 
				
			||||||
        public ItemFormatter(LabItem labItem, ReferenceStyle referenceStyle)
 | 
					        public ItemFormatter(LabItem labItem, ReferenceStyle referenceStyle)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            IncludeMaterial = true;
 | 
				
			||||||
            LabItem = labItem;
 | 
					            LabItem = labItem;
 | 
				
			||||||
            ReferenceStyle = referenceStyle;
 | 
					            ReferenceStyle = referenceStyle;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -133,11 +151,13 @@ namespace zaaReloaded2.Formatter
 | 
				
			|||||||
                value = LabItem.Value;
 | 
					                value = LabItem.Value;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            string name = IncludeMaterial ? LabItem.QualifiedName : LabItem.Name;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Insert the formatted text into the document.
 | 
					            // Insert the formatted text into the document.
 | 
				
			||||||
            formatter.Write(
 | 
					            formatter.Write(
 | 
				
			||||||
                String.Format(
 | 
					                String.Format(
 | 
				
			||||||
                    "{0} {1}{2}{3}",
 | 
					                    "{0} {1}{2}{3}",
 | 
				
			||||||
                    LabItem.QualifiedName,
 | 
					                    name,
 | 
				
			||||||
                    value,
 | 
					                    value,
 | 
				
			||||||
                    unit,
 | 
					                    unit,
 | 
				
			||||||
                    reference
 | 
					                    reference
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,37 +26,36 @@ namespace zaaReloaded2.Formatter
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Describes the style of normal range references.
 | 
					    /// Describes the style of normal range references.
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Serializable]
 | 
					 | 
				
			||||||
    public enum ReferenceStyle
 | 
					    public enum ReferenceStyle
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Never write normal ranges
 | 
					        /// Never write normal ranges
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        [Description("Referenzbereich nie ausgeben")]
 | 
					        [Description("Niemals")]
 | 
				
			||||||
        Never,
 | 
					        Never,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Write normal range if item is marked in dictionary
 | 
					        /// Write normal range if item is marked in dictionary
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        [Description("Referenzbereich ausgeben, falls Parameter so markiert ist")]
 | 
					        [Description("Bei speziellen Parametern immer")]
 | 
				
			||||||
        IfSpecialItem,
 | 
					        IfSpecialItem,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Write normal range if value is abnormal
 | 
					        /// Write normal range if value is abnormal
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        [Description("Referenzbereich ausgeben, falls Wert nicht normal ist")]
 | 
					        [Description("Bei pathologischem Wert")]
 | 
				
			||||||
        IfAbnormal,
 | 
					        IfAbnormal,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Write normal range if item is marked in dictionary, or if value is abnormal
 | 
					        /// Write normal range if item is marked in dictionary, or if value is abnormal
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        [Description("Referenzbereich ausgeben, falls Parameter so markiert ist oder falls Wert nicht normal ist")]
 | 
					        [Description("Bei pathologischem Wert oder speziellem Parameter")]
 | 
				
			||||||
        IfSpecialOrAbnormal,
 | 
					        IfSpecialOrAbnormal,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Always write normal range reference
 | 
					        /// Always write normal range reference
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        [Description("Referenzbereich immer ausgeben")]
 | 
					        [Description("Immer")]
 | 
				
			||||||
        Always
 | 
					        Always
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,6 +28,55 @@ namespace zaaReloaded2.Formatter
 | 
				
			|||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    public class TimePointFormatter
 | 
					    public class TimePointFormatter
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        #region Static methods
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Builds a header paragraph from a Date,
 | 
				
			||||||
 | 
					        /// but only if the Date structure has a value.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string DateHeader(DateTime date)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (date != _nullTimeStamp.Date)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                return FormatHeader(date.ToShortDateString());
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                return String.Empty;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Builds a header paragraph from a DateTime structure,
 | 
				
			||||||
 | 
					        /// but only if the DateTime structure has a value.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string DateAndTimeHeader(DateTime dateTime)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (dateTime != _nullTimeStamp)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                return FormatHeader(dateTime.ToString());
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                return String.Empty;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #region Private static methods
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        static string FormatHeader(string text)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return String.Format("{0}Laborwerte vom {1}:{2}",
 | 
				
			||||||
 | 
					                Environment.NewLine,
 | 
				
			||||||
 | 
					                text,
 | 
				
			||||||
 | 
					                Environment.NewLine
 | 
				
			||||||
 | 
					                );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Properties
 | 
					        #region Properties
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
@@ -77,7 +126,7 @@ namespace zaaReloaded2.Formatter
 | 
				
			|||||||
        /// <returns></returns>
 | 
					        /// <returns></returns>
 | 
				
			||||||
        public string GetDateHeader()
 | 
					        public string GetDateHeader()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            return FormatHeader(TimeStamp.ToShortDateString());
 | 
					            return DateHeader(TimeStamp);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -88,21 +137,14 @@ namespace zaaReloaded2.Formatter
 | 
				
			|||||||
        /// <returns></returns>
 | 
					        /// <returns></returns>
 | 
				
			||||||
        public string GetDateAndTimeHeader()
 | 
					        public string GetDateAndTimeHeader()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            return FormatHeader(TimeStamp.ToString());
 | 
					            return DateAndTimeHeader(TimeStamp);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Private methods
 | 
					        #region Fields
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        string FormatHeader(string text)
 | 
					        static readonly DateTime _nullTimeStamp = new DateTime();
 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            return String.Format("{0}{1}:{2}",
 | 
					 | 
				
			||||||
                Environment.NewLine,
 | 
					 | 
				
			||||||
                text,
 | 
					 | 
				
			||||||
                Environment.NewLine
 | 
					 | 
				
			||||||
                );
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										
											BIN
										
									
								
								zaaReloaded2/Icons/down.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 545 B  | 
							
								
								
									
										
											BIN
										
									
								
								zaaReloaded2/Icons/duplicate.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 337 B  | 
							
								
								
									
										
											BIN
										
									
								
								zaaReloaded2/Icons/exit.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 751 B  | 
							
								
								
									
										
											BIN
										
									
								
								zaaReloaded2/Icons/export.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 365 B  | 
							
								
								
									
										
											BIN
										
									
								
								zaaReloaded2/Icons/gear.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.4 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								zaaReloaded2/Icons/import.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 470 B  | 
							
								
								
									
										
											BIN
										
									
								
								zaaReloaded2/Icons/minus.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 280 B  | 
							
								
								
									
										
											BIN
										
									
								
								zaaReloaded2/Icons/pen.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 739 B  | 
							
								
								
									
										
											BIN
										
									
								
								zaaReloaded2/Icons/plus-child.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 557 B  | 
							
								
								
									
										
											BIN
										
									
								
								zaaReloaded2/Icons/plus.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 393 B  | 
							
								
								
									
										
											BIN
										
									
								
								zaaReloaded2/Icons/reset.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 743 B  | 
							
								
								
									
										
											BIN
										
									
								
								zaaReloaded2/Icons/up.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 537 B  | 
@@ -30,6 +30,11 @@ namespace zaaReloaded2.Importer
 | 
				
			|||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        Laboratory Laboratory { get; set; }
 | 
					        Laboratory Laboratory { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Indicates whether the import was successful.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        bool Success { get; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Imports laboratory data contained in a string.
 | 
					        /// Imports laboratory data contained in a string.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -74,7 +74,9 @@ namespace zaaReloaded2.Importer.ZaaImporter
 | 
				
			|||||||
            if (parameterDictionary != null)
 | 
					            if (parameterDictionary != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                Name = parameterDictionary.GetCanonicalName(OriginalName);
 | 
					                Name = parameterDictionary.GetCanonicalName(OriginalName);
 | 
				
			||||||
                AlwaysPrintLimits = parameterDictionary.GetForceReferenceDisplay(Name);
 | 
					                AlwaysPrintLimits = parameterDictionary.GetForceReferenceDisplay(OriginalName);
 | 
				
			||||||
 | 
					                IsBlacklisted = parameterDictionary.GetIsBlacklisted(OriginalName);
 | 
				
			||||||
 | 
					                Material = parameterDictionary.GetMaterial(OriginalName, Material);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (unitDictionary != null)
 | 
					            if (unitDictionary != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -164,10 +166,12 @@ namespace zaaReloaded2.Importer.ZaaImporter
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Analyses the Lauris name for a material abbreviation.
 | 
					        /// Parses the original Lauris name for a material abbreviation.
 | 
				
			||||||
        /// If the parameter does not refer to blood (serum, whole
 | 
					        /// This may be misleading in certain cases, e.g. "Sammelmenge (U)"
 | 
				
			||||||
        /// blood, etc.), Lauris appends an abbreviation in parentheses
 | 
					        /// appears to be spot urine ("U"), but is collected urine instead
 | 
				
			||||||
        /// to the parameter name.
 | 
					        /// ("SU"). Therefore, in the constructor that takes the thesaurus
 | 
				
			||||||
 | 
					        /// parameters, the material is looked up in the Parameters thesaurus.
 | 
				
			||||||
 | 
					        /// ("Sammelmenge (U)" is contained in the Parameters thesaurus.)
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        /// <example>
 | 
					        /// <example>
 | 
				
			||||||
        /// Gesamt-Eiweiss (SU), Albumin (SU)/die, Gesamt-Eiweiss (PU)
 | 
					        /// Gesamt-Eiweiss (SU), Albumin (SU)/die, Gesamt-Eiweiss (PU)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,6 +32,19 @@ namespace zaaReloaded2.Importer.ZaaImporter
 | 
				
			|||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    public class LaurisParagraph
 | 
					    public class LaurisParagraph
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        #region Static methods
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Investigates a paragraph and determines whether it looks
 | 
				
			||||||
 | 
					        /// like a Lauris laboratory items paragraph.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static bool ResemblesLaurisParagraph(string paragraph)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return _expectedFormat.IsMatch(paragraph);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Public properties
 | 
					        #region Public properties
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
@@ -122,7 +135,7 @@ namespace zaaReloaded2.Importer.ZaaImporter
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        #region Fields
 | 
					        #region Fields
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        static readonly Regex _expectedFormat = new Regex(@"(?<caption>[^:]+:\s*)?(?<items>[^:]+:\s*[^;]+;)*");
 | 
					        static readonly Regex _expectedFormat = new Regex(@"(?<caption>[^:]+:\s*)?(?<items>[^:]+:\s*[^;]+;)+");
 | 
				
			||||||
        Thesaurus.Parameters _parameterDictionary;
 | 
					        Thesaurus.Parameters _parameterDictionary;
 | 
				
			||||||
        Thesaurus.Units _unitDictionary;
 | 
					        Thesaurus.Units _unitDictionary;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -65,11 +65,15 @@ namespace zaaReloaded2.Importer.ZaaImporter
 | 
				
			|||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Gets an array of paragraphs in this LaurisText.
 | 
					        /// Gets an array of paragraphs in this LaurisText.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        public string[] Paragraphs
 | 
					        public IList<String> Paragraphs
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            [DebuggerStepThrough]
 | 
					            [DebuggerStepThrough]
 | 
				
			||||||
            get
 | 
					            get
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 | 
					                if (_paragraphs == null)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    _paragraphs = new List<String>();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
                return _paragraphs;
 | 
					                return _paragraphs;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            set
 | 
					            set
 | 
				
			||||||
@@ -83,7 +87,13 @@ namespace zaaReloaded2.Importer.ZaaImporter
 | 
				
			|||||||
        /// Is true if the LaurisText has time stamp in the first
 | 
					        /// Is true if the LaurisText has time stamp in the first
 | 
				
			||||||
        /// paragraph and <see cref="LabItem"/>s in the others.
 | 
					        /// paragraph and <see cref="LabItem"/>s in the others.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        public bool IsValidTimePoint { get; private set; }
 | 
					        public bool IsValidTimePoint
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            get
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                return Items.Count > 0;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Gets or sets the original Lauris text for this timepoint.
 | 
					        /// Gets or sets the original Lauris text for this timepoint.
 | 
				
			||||||
@@ -101,7 +111,7 @@ namespace zaaReloaded2.Importer.ZaaImporter
 | 
				
			|||||||
                {
 | 
					                {
 | 
				
			||||||
                    Paragraphs = value.Split(
 | 
					                    Paragraphs = value.Split(
 | 
				
			||||||
                        new string[] { Environment.NewLine },
 | 
					                        new string[] { Environment.NewLine },
 | 
				
			||||||
                        StringSplitOptions.None);
 | 
					                        StringSplitOptions.None).ToList();
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -128,19 +138,41 @@ namespace zaaReloaded2.Importer.ZaaImporter
 | 
				
			|||||||
        { }
 | 
					        { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public LaurisTimePoint(
 | 
					        public LaurisTimePoint(
 | 
				
			||||||
            string[] paragraphs,
 | 
					            IList<String> paragraphs,
 | 
				
			||||||
 | 
					            Parameters parameterDictionary,
 | 
				
			||||||
 | 
					            Units unitDictionary)
 | 
				
			||||||
 | 
					            : this(parameterDictionary, unitDictionary)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Paragraphs = paragraphs;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public LaurisTimePoint(IList<String> paragraphs)
 | 
				
			||||||
 | 
					            : this(paragraphs, null, null)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public LaurisTimePoint(
 | 
				
			||||||
                Parameters parameterDictionary,
 | 
					                Parameters parameterDictionary,
 | 
				
			||||||
                Units unitDictionary)
 | 
					                Units unitDictionary)
 | 
				
			||||||
            : this()
 | 
					            : this()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _parameterDictionary = parameterDictionary;
 | 
					            _parameterDictionary = parameterDictionary;
 | 
				
			||||||
            _unitDictionary = unitDictionary;
 | 
					            _unitDictionary = unitDictionary;
 | 
				
			||||||
            Paragraphs = paragraphs;
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public LaurisTimePoint(string[] paragraphs)
 | 
					        #endregion
 | 
				
			||||||
            : this(paragraphs, null, null)
 | 
					
 | 
				
			||||||
 | 
					        #region Public methods
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Adds a new paragraph to this time point by parsing
 | 
				
			||||||
 | 
					        /// the paragraph for laboratory items.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="paragraph">Paragraph to add.</param>
 | 
				
			||||||
 | 
					        public void AddParagraph(string paragraph)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            Paragraphs.Add(paragraph);
 | 
				
			||||||
 | 
					            ParseParagraph(paragraph);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
@@ -151,20 +183,36 @@ namespace zaaReloaded2.Importer.ZaaImporter
 | 
				
			|||||||
        /// Analyzes each Lauris paragraph in this time point, sets the date
 | 
					        /// Analyzes each Lauris paragraph in this time point, sets the date
 | 
				
			||||||
        /// and time, and collects LabItem data.
 | 
					        /// and time, and collects LabItem data.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        /// <returns>True if the LaurisText has time stamp in the first paragraphs
 | 
					        void ParseParagraphs()
 | 
				
			||||||
        /// and contains <see cref="LabItem"/>s in the others.</returns>
 | 
					 | 
				
			||||||
        bool ParseParagraphs()
 | 
					 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (Paragraphs.Length > 0)
 | 
					            if (Paragraphs != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                if (!ParseTimeStamp()) return false;
 | 
					                foreach (string paragraph in Paragraphs)
 | 
				
			||||||
                LaurisParagraph lp;
 | 
					 | 
				
			||||||
                if (IsValidTimePoint)
 | 
					 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    for (int i = 1; i < Paragraphs.Length; i++)
 | 
					                    ParseParagraph(paragraph);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        void ParseParagraph(string paragraph)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
                        lp = new LaurisParagraph(
 | 
					            if (_timeStampRegex.IsMatch(paragraph))
 | 
				
			||||||
                                Paragraphs[i],
 | 
					            {
 | 
				
			||||||
 | 
					                DateTime dt;
 | 
				
			||||||
 | 
					                if (DateTime.TryParseExact(
 | 
				
			||||||
 | 
					                    _timeStampRegex.Match(paragraph).Groups["datetime"].Value,
 | 
				
			||||||
 | 
					                    "dd.MM.yyyy HH:mm",
 | 
				
			||||||
 | 
					                    CultureInfo.InvariantCulture,
 | 
				
			||||||
 | 
					                    DateTimeStyles.AllowWhiteSpaces,
 | 
				
			||||||
 | 
					                    out dt))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    TimeStamp = dt;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                LaurisParagraph lp = new LaurisParagraph(
 | 
				
			||||||
 | 
					                        paragraph,
 | 
				
			||||||
                        _parameterDictionary,
 | 
					                        _parameterDictionary,
 | 
				
			||||||
                        _unitDictionary);
 | 
					                        _unitDictionary);
 | 
				
			||||||
                if (lp.IsLaurisParagraph)
 | 
					                if (lp.IsLaurisParagraph)
 | 
				
			||||||
@@ -173,38 +221,6 @@ namespace zaaReloaded2.Importer.ZaaImporter
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
                IsValidTimePoint = Items.Count > 0;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return true;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        /// <summary>
 | 
					 | 
				
			||||||
        /// Analyzes the date and time information that is expected to be
 | 
					 | 
				
			||||||
        /// in the first paragraph.
 | 
					 | 
				
			||||||
        /// </summary>
 | 
					 | 
				
			||||||
        /// <returns>True if the LaurisText contains a time stamp in the
 | 
					 | 
				
			||||||
        /// first paragraph.</returns>
 | 
					 | 
				
			||||||
        bool ParseTimeStamp()
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            if (Paragraphs.Length == 0)
 | 
					 | 
				
			||||||
                throw new InvalidOperationException("The time point has no paragraphs.");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            Match m = _timeStampRegex.Match(Paragraphs[0]);
 | 
					 | 
				
			||||||
            bool success = false;
 | 
					 | 
				
			||||||
            if (m.Success)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                DateTime dt;
 | 
					 | 
				
			||||||
                success = DateTime.TryParseExact(
 | 
					 | 
				
			||||||
                    m.Groups["datetime"].Value,
 | 
					 | 
				
			||||||
                    "dd.MM.yyyy HH:mm",
 | 
					 | 
				
			||||||
                    CultureInfo.InvariantCulture,
 | 
					 | 
				
			||||||
                    DateTimeStyles.AllowWhiteSpaces,
 | 
					 | 
				
			||||||
                    out dt);
 | 
					 | 
				
			||||||
                TimeStamp = dt;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            IsValidTimePoint = success;
 | 
					 | 
				
			||||||
            return success;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        void AddItems(IItemDictionary items)
 | 
					        void AddItems(IItemDictionary items)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@@ -221,7 +237,7 @@ namespace zaaReloaded2.Importer.ZaaImporter
 | 
				
			|||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        static readonly Regex _timeStampRegex = new Regex(
 | 
					        static readonly Regex _timeStampRegex = new Regex(
 | 
				
			||||||
            @"^\s*\(?\s*(?<datetime>\d\d\.\d\d\.\d\d\d\d\s+\d\d:\d\d)");
 | 
					            @"^\s*\(?\s*(?<datetime>\d\d\.\d\d\.\d\d\d\d\s+\d\d:\d\d)");
 | 
				
			||||||
        string[] _paragraphs;
 | 
					        IList<String> _paragraphs;
 | 
				
			||||||
        Parameters _parameterDictionary;
 | 
					        Parameters _parameterDictionary;
 | 
				
			||||||
        Units _unitDictionary;
 | 
					        Units _unitDictionary;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -52,6 +52,14 @@ namespace zaaReloaded2.Importer.ZaaImporter
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public bool Success
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            get
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                return Laboratory.TimePoints.Count > 0;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Splits the <paramref name="text"/> into individual time points
 | 
					        /// Splits the <paramref name="text"/> into individual time points
 | 
				
			||||||
        /// and creates <see cref="LaurisTimePoint"/> objects from them.
 | 
					        /// and creates <see cref="LaurisTimePoint"/> objects from them.
 | 
				
			||||||
@@ -59,45 +67,45 @@ namespace zaaReloaded2.Importer.ZaaImporter
 | 
				
			|||||||
        /// <param name="text">ZAA-formatted Lauris output to import.</param>
 | 
					        /// <param name="text">ZAA-formatted Lauris output to import.</param>
 | 
				
			||||||
        public void Import(string text)
 | 
					        public void Import(string text)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            // Split the text into parargraphs. This implementation relies on the fact
 | 
				
			||||||
 | 
					            // that the order or splitting strings in C#'s String.Split() method is
 | 
				
			||||||
 | 
					            // important; see http://stackoverflow.com/a/8664639/270712
 | 
				
			||||||
            string[] paragraphs = text.Split(
 | 
					            string[] paragraphs = text.Split(
 | 
				
			||||||
                new string[] { Environment.NewLine },
 | 
					                new string[] { "\r\n", "\n\r", "\r", "\n" },
 | 
				
			||||||
                StringSplitOptions.RemoveEmptyEntries);
 | 
					                StringSplitOptions.RemoveEmptyEntries);
 | 
				
			||||||
            int i = 0;
 | 
					            LaurisTimePoint timePoint = null;
 | 
				
			||||||
            int start = 0;
 | 
					 | 
				
			||||||
            int numParagraphs = paragraphs.Length;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            while (i < numParagraphs)
 | 
					            foreach (string paragraph in paragraphs)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                // Search for the next occurrence of a time stamp line
 | 
					                // If the current paragraph looks like a Lauris time stamp,
 | 
				
			||||||
                while (i < numParagraphs
 | 
					                // create a new time point.
 | 
				
			||||||
                    && !LaurisTimePoint.IsTimeStampLine(paragraphs[i]))
 | 
					                if (LaurisTimePoint.IsTimeStampLine(paragraph))
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    i++;
 | 
					                    timePoint = new LaurisTimePoint(paragraph, _parameters, _units);
 | 
				
			||||||
 | 
					                    // Add the time point to the laboratory only if none
 | 
				
			||||||
 | 
					                    // with the same time stamp exists yet.
 | 
				
			||||||
 | 
					                    TimePoint existing = null;
 | 
				
			||||||
 | 
					                    if (Laboratory.TryGetTimePoint(timePoint.TimeStamp, ref existing))
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        timePoint = existing as LaurisTimePoint;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
                // TODO: Find an alternative to returning in the middle of the method.
 | 
					 | 
				
			||||||
                if (i >= numParagraphs) return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (LaurisTimePoint.IsTimeStampLine(paragraphs[i]))
 | 
					 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                    // Remember the time stamp line's index
 | 
					                        Laboratory.AddTimePoint(timePoint);
 | 
				
			||||||
                    start = i;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    // Seek the next time stamp line
 | 
					 | 
				
			||||||
                    while (i + 1 < numParagraphs
 | 
					 | 
				
			||||||
                        && !LaurisTimePoint.IsTimeStampLine(paragraphs[i + 1]))
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        i++;
 | 
					 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					                // If the current paragraph looks like a paragraph with
 | 
				
			||||||
                Laboratory.AddTimePoint(
 | 
					                // laboratory items, add it to the current time point;
 | 
				
			||||||
                    new LaurisTimePoint(
 | 
					                // if no time point exists yet, create one.
 | 
				
			||||||
                        paragraphs.Slice(start, i - start + 1),
 | 
					                else if (LaurisParagraph.ResemblesLaurisParagraph(paragraph))
 | 
				
			||||||
                        _parameters,
 | 
					                {
 | 
				
			||||||
                        _units
 | 
					                    if (timePoint == null)
 | 
				
			||||||
                        )
 | 
					                    {
 | 
				
			||||||
                    );
 | 
					                        timePoint = new LaurisTimePoint(_parameters, _units);
 | 
				
			||||||
 | 
					                        Laboratory.AddTimePoint(timePoint);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    timePoint.AddParagraph(paragraph);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -205,6 +205,12 @@ namespace zaaReloaded2.LabModel
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        public Material Material { get; protected set; }
 | 
					        public Material Material { get; protected set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Gets whether the LabItem is marked as blacklisted
 | 
				
			||||||
 | 
					        /// in the thesaurus.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public bool IsBlacklisted { get; protected set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Constructors
 | 
					        #region Constructors
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -66,6 +66,30 @@ namespace zaaReloaded2.LabModel
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Checks if the Laboratory contains a TimePoint with an identical
 | 
				
			||||||
 | 
					        /// time stamp to the one being queried.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="timePoint">TimePoint whose time stamp to look for.</param>
 | 
				
			||||||
 | 
					        /// <returns>True if a TimePoint with identical time stamp exists.</returns>
 | 
				
			||||||
 | 
					        public bool HasTimePoint(TimePoint timePoint)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return TimePoints.ContainsKey(timePoint.TimeStamp);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Looks for a TimePoint with a given timeStamp and returns
 | 
				
			||||||
 | 
					        /// it as a reference parameter.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="timeStamp">Time stamp to look for.</param>
 | 
				
			||||||
 | 
					        /// <param name="timePoint">Resulting TimePoint (if any).</param>
 | 
				
			||||||
 | 
					        /// <returns>True if TimePoints contains a TimePoint with
 | 
				
			||||||
 | 
					        /// the requested timeStamp.</returns>
 | 
				
			||||||
 | 
					        public bool TryGetTimePoint(DateTime timeStamp, ref TimePoint timePoint)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return TimePoints.TryGetValue(timeStamp, out timePoint);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,9 +9,9 @@ using System.Security;
 | 
				
			|||||||
[assembly: AssemblyTitle("zaaReloaded2")]
 | 
					[assembly: AssemblyTitle("zaaReloaded2")]
 | 
				
			||||||
[assembly: AssemblyDescription("")]
 | 
					[assembly: AssemblyDescription("")]
 | 
				
			||||||
[assembly: AssemblyConfiguration("")]
 | 
					[assembly: AssemblyConfiguration("")]
 | 
				
			||||||
[assembly: AssemblyCompany("Microsoft")]
 | 
					[assembly: AssemblyCompany("Daniel Kraus")]
 | 
				
			||||||
[assembly: AssemblyProduct("zaaReloaded2")]
 | 
					[assembly: AssemblyProduct("zaaReloaded2")]
 | 
				
			||||||
[assembly: AssemblyCopyright("Copyright © Microsoft 2015")]
 | 
					[assembly: AssemblyCopyright("Copyright © Daniel Kraus 2015")]
 | 
				
			||||||
[assembly: AssemblyTrademark("")]
 | 
					[assembly: AssemblyTrademark("")]
 | 
				
			||||||
[assembly: AssemblyCulture("")]
 | 
					[assembly: AssemblyCulture("")]
 | 
				
			||||||
[assembly: InternalsVisibleTo("Tests, PublicKey=002400000480000094000000060200000024000052534131000400000100010061ecc0718277dee13e7dae2dad33787a981c9883ba80a659bebbdbec76563e201a7a3a6a5852e01bb5eb328d24d5889244b4626da9af9f93db663565441a3120e3985789e6f2a39289f4eed063725b84152cbef472d9dd2f7495f51dad6c91f4dc6fb7c72cb6bd9381335ac9878ec0a6369e880f35b8eca3063e16468d7704eb")]
 | 
					[assembly: InternalsVisibleTo("Tests, PublicKey=002400000480000094000000060200000024000052534131000400000100010061ecc0718277dee13e7dae2dad33787a981c9883ba80a659bebbdbec76563e201a7a3a6a5852e01bb5eb328d24d5889244b4626da9af9f93db663565441a3120e3985789e6f2a39289f4eed063725b84152cbef472d9dd2f7495f51dad6c91f4dc6fb7c72cb6bd9381335ac9878ec0a6369e880f35b8eca3063e16468d7704eb")]
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										62
									
								
								zaaReloaded2/Properties/Settings.Designer.cs
									
									
									
										generated
									
									
									
								
							
							
						
						@@ -25,9 +25,10 @@ namespace zaaReloaded2.Properties {
 | 
				
			|||||||
        
 | 
					        
 | 
				
			||||||
        [global::System.Configuration.UserScopedSettingAttribute()]
 | 
					        [global::System.Configuration.UserScopedSettingAttribute()]
 | 
				
			||||||
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
 | 
					        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
 | 
				
			||||||
        public global::zaaReloaded2.Controller.SettingsRepository SettingsRepository {
 | 
					        [global::System.Configuration.DefaultSettingValueAttribute("")]
 | 
				
			||||||
 | 
					        public string SettingsRepository {
 | 
				
			||||||
            get {
 | 
					            get {
 | 
				
			||||||
                return ((global::zaaReloaded2.Controller.SettingsRepository)(this["SettingsRepository"]));
 | 
					                return ((string)(this["SettingsRepository"]));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            set {
 | 
					            set {
 | 
				
			||||||
                this["SettingsRepository"] = value;
 | 
					                this["SettingsRepository"] = value;
 | 
				
			||||||
@@ -245,5 +246,62 @@ namespace zaaReloaded2.Properties {
 | 
				
			|||||||
                this["LastSettings"] = value;
 | 
					                this["LastSettings"] = value;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        [global::System.Configuration.ApplicationScopedSettingAttribute()]
 | 
				
			||||||
 | 
					        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
 | 
				
			||||||
 | 
					        [global::System.Configuration.DefaultSettingValueAttribute("zaaReloaded2-Laborwerte")]
 | 
				
			||||||
 | 
					        public string ParagraphStyleName {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ((string)(this["ParagraphStyleName"]));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        [global::System.Configuration.ApplicationScopedSettingAttribute()]
 | 
				
			||||||
 | 
					        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
 | 
				
			||||||
 | 
					        [global::System.Configuration.DefaultSettingValueAttribute("IfSpecialOrAbnormal")]
 | 
				
			||||||
 | 
					        public global::zaaReloaded2.Formatter.ReferenceStyle ReferenceStyle {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ((global::zaaReloaded2.Formatter.ReferenceStyle)(this["ReferenceStyle"]));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        [global::System.Configuration.ApplicationScopedSettingAttribute()]
 | 
				
			||||||
 | 
					        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
 | 
				
			||||||
 | 
					        [global::System.Configuration.DefaultSettingValueAttribute("Ausgabe-Elemente")]
 | 
				
			||||||
 | 
					        public string FormatElementLabel {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ((string)(this["FormatElementLabel"]));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        [global::System.Configuration.ApplicationScopedSettingAttribute()]
 | 
				
			||||||
 | 
					        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
 | 
				
			||||||
 | 
					        [global::System.Configuration.DefaultSettingValueAttribute("Steuerungs-Elemente")]
 | 
				
			||||||
 | 
					        public string ControlElementLabel {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ((string)(this["ControlElementLabel"]));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        [global::System.Configuration.ApplicationScopedSettingAttribute()]
 | 
				
			||||||
 | 
					        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
 | 
				
			||||||
 | 
					        [global::System.Configuration.DefaultSettingValueAttribute("1")]
 | 
				
			||||||
 | 
					        public int SerializationVersion {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ((int)(this["SerializationVersion"]));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        [global::System.Configuration.UserScopedSettingAttribute()]
 | 
				
			||||||
 | 
					        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
 | 
				
			||||||
 | 
					        [global::System.Configuration.DefaultSettingValueAttribute("")]
 | 
				
			||||||
 | 
					        public string ImportExportPath {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ((string)(this["ImportExportPath"]));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            set {
 | 
				
			||||||
 | 
					                this["ImportExportPath"] = value;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="zaaReloaded2.Properties" GeneratedClassName="Settings">
 | 
					<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="zaaReloaded2.Properties" GeneratedClassName="Settings">
 | 
				
			||||||
  <Profiles />
 | 
					  <Profiles />
 | 
				
			||||||
  <Settings>
 | 
					  <Settings>
 | 
				
			||||||
    <Setting Name="SettingsRepository" Type="zaaReloaded2.Controller.SettingsRepository" Scope="User">
 | 
					    <Setting Name="SettingsRepository" Type="System.String" Scope="User">
 | 
				
			||||||
      <Value Profile="(Default)" />
 | 
					      <Value Profile="(Default)" />
 | 
				
			||||||
    </Setting>
 | 
					    </Setting>
 | 
				
			||||||
    <Setting Name="AddinName" Type="System.String" Scope="Application">
 | 
					    <Setting Name="AddinName" Type="System.String" Scope="Application">
 | 
				
			||||||
@@ -74,5 +74,23 @@
 | 
				
			|||||||
    <Setting Name="LastSettings" Type="System.Guid" Scope="User">
 | 
					    <Setting Name="LastSettings" Type="System.Guid" Scope="User">
 | 
				
			||||||
      <Value Profile="(Default)">00000000-0000-0000-0000-000000000000</Value>
 | 
					      <Value Profile="(Default)">00000000-0000-0000-0000-000000000000</Value>
 | 
				
			||||||
    </Setting>
 | 
					    </Setting>
 | 
				
			||||||
 | 
					    <Setting Name="ParagraphStyleName" Type="System.String" Scope="Application">
 | 
				
			||||||
 | 
					      <Value Profile="(Default)">zaaReloaded2-Laborwerte</Value>
 | 
				
			||||||
 | 
					    </Setting>
 | 
				
			||||||
 | 
					    <Setting Name="ReferenceStyle" Type="zaaReloaded2.Formatter.ReferenceStyle" Scope="Application">
 | 
				
			||||||
 | 
					      <Value Profile="(Default)">IfSpecialOrAbnormal</Value>
 | 
				
			||||||
 | 
					    </Setting>
 | 
				
			||||||
 | 
					    <Setting Name="FormatElementLabel" Type="System.String" Scope="Application">
 | 
				
			||||||
 | 
					      <Value Profile="(Default)">Ausgabe-Elemente</Value>
 | 
				
			||||||
 | 
					    </Setting>
 | 
				
			||||||
 | 
					    <Setting Name="ControlElementLabel" Type="System.String" Scope="Application">
 | 
				
			||||||
 | 
					      <Value Profile="(Default)">Steuerungs-Elemente</Value>
 | 
				
			||||||
 | 
					    </Setting>
 | 
				
			||||||
 | 
					    <Setting Name="SerializationVersion" Type="System.Int32" Scope="Application">
 | 
				
			||||||
 | 
					      <Value Profile="(Default)">1</Value>
 | 
				
			||||||
 | 
					    </Setting>
 | 
				
			||||||
 | 
					    <Setting Name="ImportExportPath" Type="System.String" Scope="User">
 | 
				
			||||||
 | 
					      <Value Profile="(Default)" />
 | 
				
			||||||
 | 
					    </Setting>
 | 
				
			||||||
  </Settings>
 | 
					  </Settings>
 | 
				
			||||||
</SettingsFile>
 | 
					</SettingsFile>
 | 
				
			||||||
@@ -200,10 +200,7 @@ namespace zaaReloaded2
 | 
				
			|||||||
                Settings settings = settingsVM.RevealModelObject() as Settings;
 | 
					                Settings settings = settingsVM.RevealModelObject() as Settings;
 | 
				
			||||||
                DoFormat(settings);
 | 
					                DoFormat(settings);
 | 
				
			||||||
                Properties.Settings.Default.LastSettings = settings.Uid;
 | 
					                Properties.Settings.Default.LastSettings = settings.Uid;
 | 
				
			||||||
            };
 | 
					                Properties.Settings.Default.Save();
 | 
				
			||||||
            vm.RequestCloseView += (sender, args) =>
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                repository.Save();
 | 
					 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
            vm.InjectInto<SettingsRepositoryView>().ShowDialog();
 | 
					            vm.InjectInto<SettingsRepositoryView>().ShowDialog();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -49,6 +49,13 @@
 | 
				
			|||||||
        <Setter Property="Control.ToolTip" Value="{Binding Path=ToolTip, Mode=OneWay}" />
 | 
					        <Setter Property="Control.ToolTip" Value="{Binding Path=ToolTip, Mode=OneWay}" />
 | 
				
			||||||
        <Setter Property="IsEnabled" Value="{Binding Path=IsEnabled, Mode=OneWay}" />
 | 
					        <Setter Property="IsEnabled" Value="{Binding Path=IsEnabled, Mode=OneWay}" />
 | 
				
			||||||
    </Style>
 | 
					    </Style>
 | 
				
			||||||
 | 
					    <Style TargetType="Image">
 | 
				
			||||||
 | 
					        <Style.Triggers>
 | 
				
			||||||
 | 
					            <Trigger Property="IsEnabled" Value="False">
 | 
				
			||||||
 | 
					                <Setter Property="Opacity" Value="0.3" />
 | 
				
			||||||
 | 
					            </Trigger>
 | 
				
			||||||
 | 
					        </Style.Triggers>
 | 
				
			||||||
 | 
					    </Style>
 | 
				
			||||||
    <conv:EnumBooleanConverter x:Key="enumBoolConv" />
 | 
					    <conv:EnumBooleanConverter x:Key="enumBoolConv" />
 | 
				
			||||||
    <conv:VisibilityBooleanConverter x:Key="visBoolConv" />
 | 
					    <conv:VisibilityBooleanConverter x:Key="visBoolConv" />
 | 
				
			||||||
    <conv:BooleanNegationConverter x:Key="boolNegConv" />
 | 
					    <conv:BooleanNegationConverter x:Key="boolNegConv" />
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,114 +0,0 @@
 | 
				
			|||||||
# LAURIS-NAME                      "KANONISCHER NAME"   MATERIAL   "IMMER REFERENZBEREICH"
 | 
					 | 
				
			||||||
# ===========                      ==================   ========   =======================
 | 
					 | 
				
			||||||
"Übergangsepithelien (U)"          Übergangsep.         U
 | 
					 | 
				
			||||||
"a1-Microglobulin (SU)"            a1-Microglobulin     SU
 | 
					 | 
				
			||||||
"a1-Microglobulin (SU)/die"        a1-Microglobulin     SU
 | 
					 | 
				
			||||||
"aktuelles Bicarbonat"             Bic                  BGA
 | 
					 | 
				
			||||||
"Albumin (PU)"                     Alb                  U
 | 
					 | 
				
			||||||
"Albumin (SU)"                     Alb                  SU
 | 
					 | 
				
			||||||
"Albumin (SU)/die"                 Alb                  SU
 | 
					 | 
				
			||||||
Albumin                            Alb                  S
 | 
					 | 
				
			||||||
Albumin/Creatinin (PU)"            ACR                  U
 | 
					 | 
				
			||||||
"Alk. Phosphatase"                 AP                   S
 | 
					 | 
				
			||||||
Amylase                            Amylase              S
 | 
					 | 
				
			||||||
anorg. Phosphat"                   Phosphat             S
 | 
					 | 
				
			||||||
Bakterien (U)"                     Bakt                 U
 | 
					 | 
				
			||||||
Basenabweichung                    BE                   BGA
 | 
					 | 
				
			||||||
Basophile                          Baso                 E
 | 
					 | 
				
			||||||
Bilirubin (U)"                     Bilirubin            U
 | 
					 | 
				
			||||||
C-reaktives Protein"               CRP                  S
 | 
					 | 
				
			||||||
Calcium (SU)"                      Ca                   SU
 | 
					 | 
				
			||||||
Calcium (SU)/die"                  Ca                   SU
 | 
					 | 
				
			||||||
Calcium                            Ca                   S
 | 
					 | 
				
			||||||
Calcium-Phosphat-Produkt           CaxP                 S
 | 
					 | 
				
			||||||
Cholesterin                        Chol                 S
 | 
					 | 
				
			||||||
CK gesamt"                         CK                   S
 | 
					 | 
				
			||||||
CK MB"                             CK-MB                S
 | 
					 | 
				
			||||||
Creatinin (PU)"                    Krea                 U
 | 
					 | 
				
			||||||
Creatinin (SU)"                    Krea                 SU
 | 
					 | 
				
			||||||
Creatinin                          Krea                 S
 | 
					 | 
				
			||||||
Creatinin-Clearance (SU)/min"      CrCl                 SU
 | 
					 | 
				
			||||||
Cyclosporin-A vor Gabe"            "CsA (C0)"           S      X
 | 
					 | 
				
			||||||
Cystatin C (N Latex)"              "Cystatin C"         S      X
 | 
					 | 
				
			||||||
Eisen                              Fe                   S
 | 
					 | 
				
			||||||
Eosinophile                        Eos                  E
 | 
					 | 
				
			||||||
Erythrozyten (U)"                  Ery                  U
 | 
					 | 
				
			||||||
Erythrozyten                       Ery                  E
 | 
					 | 
				
			||||||
Ferritin                           Ferr                 S
 | 
					 | 
				
			||||||
Gesamt-Bilirubin                   Bilirubin            S
 | 
					 | 
				
			||||||
Gesamt-Eiweiss (PU)"               Protein              U
 | 
					 | 
				
			||||||
Gesamt-Eiweiss (SU)"               Protein              SU
 | 
					 | 
				
			||||||
Gesamt-Eiweiss (SU)/die"           Proteinurie          SU
 | 
					 | 
				
			||||||
Gesamt-Eiweiss                     Protein              S
 | 
					 | 
				
			||||||
Gesamt-Eiweiss/Creatinin (PU)"     TPCR                 U
 | 
					 | 
				
			||||||
GGT                                GGT                  S
 | 
					 | 
				
			||||||
glomeruläre Filtrationsrate"       GFR                  SU
 | 
					 | 
				
			||||||
glomerul. Filtrationsr. (MDRD)"    "eGFR (MDRD)"        S
 | 
					 | 
				
			||||||
glomerul. Filtrationsr. CKD-EP"    "eGFR (CKD-EPI)"     S
 | 
					 | 
				
			||||||
Glucose (U)"                       Glukose              U
 | 
					 | 
				
			||||||
Glucose                            Glukose              S
 | 
					 | 
				
			||||||
GOT (ASAT)"                        GOT                  S
 | 
					 | 
				
			||||||
GPT (ALAT)"                        GPT                  S
 | 
					 | 
				
			||||||
Hämatokrit                         Hkt                  E
 | 
					 | 
				
			||||||
Hämoglobin                         Hb                   E
 | 
					 | 
				
			||||||
Haptoglobin                        Haptoglobin          S      X
 | 
					 | 
				
			||||||
Harnsäure                          Harnsäure            S
 | 
					 | 
				
			||||||
Harnstoff (SU)"                    Hst                  SU
 | 
					 | 
				
			||||||
Harnstoff (SU)/die"                Hst/Tag              SU
 | 
					 | 
				
			||||||
Harnstoff"                         Hst                  S
 | 
					 | 
				
			||||||
Harnstoff-Clearance (SU)/min"      HstCl                SU
 | 
					 | 
				
			||||||
HbA1c (NGSP)"                      HbA1c                E
 | 
					 | 
				
			||||||
HDL - Cholesterin"                 HDL                  S
 | 
					 | 
				
			||||||
hyaline Zylinder (U)"              "hyal. Zyl."         U
 | 
					 | 
				
			||||||
Kalium (SU)"                       K                    U
 | 
					 | 
				
			||||||
Kalium (SU)/die"                   K                    SU
 | 
					 | 
				
			||||||
Kalium                             K                    S
 | 
					 | 
				
			||||||
Ketonkörper (U)"                   KK                   U
 | 
					 | 
				
			||||||
Lactat Dehydrogenase"              LDH                  S
 | 
					 | 
				
			||||||
LDL - Cholesterin"                 LDL                  S
 | 
					 | 
				
			||||||
Leukozyten (U)"                    Leu                  U
 | 
					 | 
				
			||||||
Leukozyten                         Leu                  E
 | 
					 | 
				
			||||||
Lymphozyten                        Lym                  E
 | 
					 | 
				
			||||||
MCH (HbE)                          MCH                  E
 | 
					 | 
				
			||||||
MCHC                               MCHC                 E
 | 
					 | 
				
			||||||
MCV                                MCV                  E
 | 
					 | 
				
			||||||
Mittleres Plättchenvolumen         MPV                  E
 | 
					 | 
				
			||||||
Monozyten                          Mon                  E
 | 
					 | 
				
			||||||
Natrium (SU)"                      Na                   SU
 | 
					 | 
				
			||||||
Natrium (SU)/die"                  Na                   SU
 | 
					 | 
				
			||||||
Natrium                            Na                   S
 | 
					 | 
				
			||||||
Neutrophile                        Neu                  E
 | 
					 | 
				
			||||||
Nitrit (U)"                        Nitrit               U
 | 
					 | 
				
			||||||
NT-proBNP                          NT-proBNP            S
 | 
					 | 
				
			||||||
PCO2 (art.)"                       pCO2                 BGA
 | 
					 | 
				
			||||||
pH (U)"                            pH                   U
 | 
					 | 
				
			||||||
pH"                                pH                   BGA
 | 
					 | 
				
			||||||
Plattenepithelien (U)"             Plattenep            U
 | 
					 | 
				
			||||||
PO2 (art.)"                        pO2                  BGA
 | 
					 | 
				
			||||||
Protein (U)"                       Protein              U
 | 
					 | 
				
			||||||
Sammelmenge (U)"                   Volumen              SU
 | 
					 | 
				
			||||||
Sammelzeit (U)"                    Zeit                 SU
 | 
					 | 
				
			||||||
Sauerstoffsättigung (art.)"        SO2                  BGA
 | 
					 | 
				
			||||||
Sirolimus                          SIR                  S
 | 
					 | 
				
			||||||
spezifisches Gewicht (U)"          "spez. Gew."         U
 | 
					 | 
				
			||||||
Standard Bicarbonat"               "Std.-Bic."          BGA
 | 
					 | 
				
			||||||
Tacrolimus (FK506)"                TAC                  S
 | 
					 | 
				
			||||||
Thrombozyten                       Thr                  E
 | 
					 | 
				
			||||||
Transferrin                        Transferrin          S
 | 
					 | 
				
			||||||
Transferrinsättigung"              Tf.-Sätt.            S
 | 
					 | 
				
			||||||
Triglyceride"                      TG                   S
 | 
					 | 
				
			||||||
Troponin T (high sensitive)"       hsTnT                S
 | 
					 | 
				
			||||||
Unreife Granulozyten"              Gran                 E
 | 
					 | 
				
			||||||
Urobilinogen (U)"                  Urobilinogen         U
 | 
					 | 
				
			||||||
Niedermol. Heparin (Anti-Xa)"      Anti-Xa              Z
 | 
					 | 
				
			||||||
Thromboplastinzeit n. Quick"       Quick                Z
 | 
					 | 
				
			||||||
PTT                                aPTT                 Z
 | 
					 | 
				
			||||||
Ratio int. norm."                  INR                  Z
 | 
					 | 
				
			||||||
Komplementfaktor C3c               C3c                  S     X
 | 
					 | 
				
			||||||
Komplementfaktor C4                C4                   S     X
 | 
					 | 
				
			||||||
Anti-DNAse B                       "Anti-DNAse B"       S
 | 
					 | 
				
			||||||
Anti-Streptolysin                  ASL                  S
 | 
					 | 
				
			||||||
PTH intakt"                        iPTH                 S
 | 
					 | 
				
			||||||
TSH                                TSH                  S
 | 
					 | 
				
			||||||
HAPTOGLOBIN                        Haptoglobin          S
 | 
					 | 
				
			||||||
FRAGMENTOZYTEN                     Fragmentozyten       E
 | 
					 | 
				
			||||||
@@ -69,9 +69,15 @@ namespace zaaReloaded2.Thesaurus
 | 
				
			|||||||
        /// <param name="laurisName">Lauris item name to look up.</param>
 | 
					        /// <param name="laurisName">Lauris item name to look up.</param>
 | 
				
			||||||
        /// <returns><see cref="zaaReloaded2.LabModel.Material"/> enum; if no material is
 | 
					        /// <returns><see cref="zaaReloaded2.LabModel.Material"/> enum; if no material is
 | 
				
			||||||
        /// found in the dictionary, the default material "S" (serum) is returned.</returns>
 | 
					        /// found in the dictionary, the default material "S" (serum) is returned.</returns>
 | 
				
			||||||
        public Material GetMaterial(string laurisName)
 | 
					        public Material GetMaterial(string laurisName, Material def)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            string textValue = LookUpValue(laurisName, 2);
 | 
					            string textValue = LookUpValue(laurisName, 2);
 | 
				
			||||||
 | 
					            if (String.IsNullOrEmpty(textValue))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                return def;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
                try
 | 
					                try
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    return MaterialFactory.FromAbbreviation(textValue);
 | 
					                    return MaterialFactory.FromAbbreviation(textValue);
 | 
				
			||||||
@@ -81,6 +87,7 @@ namespace zaaReloaded2.Thesaurus
 | 
				
			|||||||
                    return Material.B;
 | 
					                    return Material.B;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Returns whether or not reference limits shall always
 | 
					        /// Returns whether or not reference limits shall always
 | 
				
			||||||
@@ -95,6 +102,18 @@ namespace zaaReloaded2.Thesaurus
 | 
				
			|||||||
            return LookUpValue(laurisName, 3, false);
 | 
					            return LookUpValue(laurisName, 3, false);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Checks whether an item is marked as blacklisted in the
 | 
				
			||||||
 | 
					        /// thesaurus.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="laurisName">Laboratory item to lok up;
 | 
				
			||||||
 | 
					        /// this must be an original Lauris string.</param>
 | 
				
			||||||
 | 
					        /// <returns>True if the item is marked as blacklisted,
 | 
				
			||||||
 | 
					        /// false if not. Default is false.</returns>
 | 
				
			||||||
 | 
					        public bool GetIsBlacklisted(string laurisName)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return LookUpValue(laurisName, 4, false);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Overrides
 | 
					        #region Overrides
 | 
				
			||||||
@@ -105,7 +124,7 @@ namespace zaaReloaded2.Thesaurus
 | 
				
			|||||||
        protected override System.IO.Stream GetDefaultStream()
 | 
					        protected override System.IO.Stream GetDefaultStream()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            return Assembly.GetExecutingAssembly().GetManifestResourceStream(
 | 
					            return Assembly.GetExecutingAssembly().GetManifestResourceStream(
 | 
				
			||||||
                "zaaReloaded2.Thesaurus.Defaults.parameters.txt");
 | 
					                "zaaReloaded2.Defaults.parameters.txt");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
@@ -118,6 +137,5 @@ namespace zaaReloaded2.Thesaurus
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -242,7 +242,7 @@ namespace zaaReloaded2.Thesaurus
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        #region Fields
 | 
					        #region Fields
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private static readonly Regex _dashes = new Regex("-+");
 | 
					        private static readonly Regex _dashes = new Regex("^-+$");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -72,7 +72,7 @@ namespace zaaReloaded2.Thesaurus
 | 
				
			|||||||
        protected override System.IO.Stream GetDefaultStream()
 | 
					        protected override System.IO.Stream GetDefaultStream()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            return Assembly.GetExecutingAssembly().GetManifestResourceStream(
 | 
					            return Assembly.GetExecutingAssembly().GetManifestResourceStream(
 | 
				
			||||||
                "zaaReloaded2.Thesaurus.Defaults.units.txt");
 | 
					                "zaaReloaded2.Defaults.units.txt");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,2 +1,2 @@
 | 
				
			|||||||
2.0.0-alpha.5
 | 
					2.0.0-beta.1
 | 
				
			||||||
2.0.0.5
 | 
					2.0.0.6
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,6 +35,20 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        public ObservableCollection<ElementViewModel> Elements { get; protected set; }
 | 
					        public ObservableCollection<ElementViewModel> Elements { get; protected set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Gets information whether this control element view model can
 | 
				
			||||||
 | 
					        /// have child elements;
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public virtual bool CanHaveChildren
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            get
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                return ((ControlElementBase)Element).CanHaveChildren;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public override string ToolTip { get { return Element.Label; } }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Constructors
 | 
					        #region Constructors
 | 
				
			||||||
@@ -47,7 +61,7 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
            Elements = new ObservableCollection<ElementViewModel>();
 | 
					            Elements = new ObservableCollection<ElementViewModel>();
 | 
				
			||||||
            if (controlElement != null)
 | 
					            if (controlElement != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                foreach (FormatElementBase childElement in controlElement.FormatElements)
 | 
					                foreach (FormatElementBase childElement in controlElement.Children)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    FormatElementViewModel childVM = new FormatElementViewModel(childElement);
 | 
					                    FormatElementViewModel childVM = new FormatElementViewModel(childElement);
 | 
				
			||||||
                    Elements.Add(childVM);
 | 
					                    Elements.Add(childVM);
 | 
				
			||||||
@@ -55,6 +69,22 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Creates a new instance by copying the Elements property from another
 | 
				
			||||||
 | 
					        /// ControlElementViewModel and the Children property from the other
 | 
				
			||||||
 | 
					        /// view model's model.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="copyFrom">Other ControlElementViewModel to copy
 | 
				
			||||||
 | 
					        /// from.</param>
 | 
				
			||||||
 | 
					        public ControlElementViewModel(
 | 
				
			||||||
 | 
					            ControlElementBase controlElement,
 | 
				
			||||||
 | 
					            ControlElementViewModel copyFrom)
 | 
				
			||||||
 | 
					            : this(controlElement)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Elements = copyFrom.Elements;
 | 
				
			||||||
 | 
					            ((ControlElementBase)Element).Children = controlElement.Children;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Public methods
 | 
					        #region Public methods
 | 
				
			||||||
@@ -62,8 +92,39 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
        public void AddChildElement(FormatElementViewModel viewModel)
 | 
					        public void AddChildElement(FormatElementViewModel viewModel)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            Elements.Add(viewModel);
 | 
					            Elements.Add(viewModel);
 | 
				
			||||||
 | 
					            viewModel.Parent = this;
 | 
				
			||||||
            ControlElementBase e = Element as ControlElementBase;
 | 
					            ControlElementBase e = Element as ControlElementBase;
 | 
				
			||||||
            e.FormatElements.Add(viewModel.RevealModelObject() as FormatElementBase);
 | 
					            e.Children.Add(viewModel.RevealModelObject() as FormatElementBase);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public void RemoveChildElement(FormatElementViewModel viewModel)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (!Elements.Contains(viewModel))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                throw new InvalidOperationException(
 | 
				
			||||||
 | 
					                    "Cannot remove child view model that is not in the collection.");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            Elements.Remove(viewModel);
 | 
				
			||||||
 | 
					            ((ControlElementBase)Element).Children
 | 
				
			||||||
 | 
					                .Remove(viewModel.RevealModelObject() as FormatElementBase);
 | 
				
			||||||
 | 
					            viewModel.Parent = null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #region Overrides
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public override object Clone()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            ControlElementViewModel clone = new ControlElementViewModel();
 | 
				
			||||||
 | 
					            clone.Element = Element;
 | 
				
			||||||
 | 
					            clone.Elements = new ObservableCollection<ElementViewModel>(
 | 
				
			||||||
 | 
					                Elements.Select(evm => evm.Clone() as ElementViewModel));
 | 
				
			||||||
 | 
					            foreach (FormatElementViewModel evm in clone.Elements)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                evm.Parent = clone;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return clone;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,7 +29,9 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// View model that presents a list of zaaReloaded2.Contorller.Elements.ElementBase
 | 
					    /// View model that presents a list of zaaReloaded2.Contorller.Elements.ElementBase
 | 
				
			||||||
    /// classes to choose from.
 | 
					    /// classes to choose from. Depending on which constructor is used, this view model
 | 
				
			||||||
 | 
					    /// presents either a list of ControlElementBase-derived classes, a list of
 | 
				
			||||||
 | 
					    /// FormatElementBase-derived classes, or both.
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    class ElementPickerViewModel : ViewModelBase
 | 
					    class ElementPickerViewModel : ViewModelBase
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -96,25 +98,43 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
            Categories = new List<CategoryViewModel>();
 | 
					            Categories = new List<CategoryViewModel>();
 | 
				
			||||||
            if (allowControlElements)
 | 
					            if (allowControlElements)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                Categories.Add(
 | 
					                AddCategory(
 | 
				
			||||||
                    new CategoryViewModel(
 | 
					                    new CategoryViewModel(
 | 
				
			||||||
                        "Kontroll-Elemente",
 | 
					                        Properties.Settings.Default.ControlElementLabel,
 | 
				
			||||||
                        new Collection<ViewModelBase>()
 | 
					                        new Collection<ViewModelBase>()
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            CreateControlElementViewModel(new SelectFirstDay()),
 | 
					                            CreateControlElementViewModel(new SelectFirstDay()),
 | 
				
			||||||
                            CreateControlElementViewModel(new SelectLastDay()),
 | 
					                            CreateControlElementViewModel(new SelectLastDay()),
 | 
				
			||||||
                            CreateControlElementViewModel(new SelectEachDay())
 | 
					                            CreateControlElementViewModel(new SelectEachDay()),
 | 
				
			||||||
 | 
					                            CreateControlElementViewModel(new TwoColumns()),
 | 
				
			||||||
 | 
					                            CreateControlElementViewModel(new NextColumn()),
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    )
 | 
					                    )
 | 
				
			||||||
                );
 | 
					                );
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            Categories.Add(
 | 
					            CreateFormatElementViewModels();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Creates a new element picker for control elements only;
 | 
				
			||||||
 | 
					        /// the selected ControlElementVieModel will copy the Elements
 | 
				
			||||||
 | 
					        /// property from a source view model.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="copyFromViewModel">ControlElementViewModel
 | 
				
			||||||
 | 
					        /// whose Elements property to copy.</param>
 | 
				
			||||||
 | 
					        public ElementPickerViewModel(ControlElementViewModel copyFromViewModel)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Categories = new List<CategoryViewModel>();
 | 
				
			||||||
 | 
					            AddCategory(
 | 
				
			||||||
                new CategoryViewModel(
 | 
					                new CategoryViewModel(
 | 
				
			||||||
                    "Ausgabe-Elemente",
 | 
					                    Properties.Settings.Default.ControlElementLabel,
 | 
				
			||||||
                    new Collection<ViewModelBase>()
 | 
					                    new Collection<ViewModelBase>()
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            CreateFormatElementViewModel("Laborparameter", new Items()),
 | 
					                            CreateControlElementViewModel(new SelectFirstDay(), copyFromViewModel),
 | 
				
			||||||
                            CreateFormatElementViewModel("Beliebiger Text", new CustomText()),
 | 
					                            CreateControlElementViewModel(new SelectLastDay(), copyFromViewModel),
 | 
				
			||||||
 | 
					                            CreateControlElementViewModel(new SelectEachDay(), copyFromViewModel),
 | 
				
			||||||
 | 
					                            CreateControlElementViewModel(new TwoColumns()),
 | 
				
			||||||
 | 
					                            CreateControlElementViewModel(new NextColumn()),
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                )
 | 
					                )
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
@@ -124,6 +144,26 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        #region Private methods
 | 
					        #region Private methods
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        void CreateFormatElementViewModels()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            AddCategory(
 | 
				
			||||||
 | 
					                new CategoryViewModel(
 | 
				
			||||||
 | 
					                    Properties.Settings.Default.FormatElementLabel,
 | 
				
			||||||
 | 
					                    new Collection<ViewModelBase>()
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            CreateFormatElementViewModel(new Items()),
 | 
				
			||||||
 | 
					                            CreateFormatElementViewModel(new CustomText()),
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                )
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        void AddCategory(CategoryViewModel category)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            category.PropertyChanged += ElementViewModel_PropertyChanged;
 | 
				
			||||||
 | 
					            Categories.Add(category);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Creates a new ControlElementViewModel that wraps a ControlElementBase
 | 
					        /// Creates a new ControlElementViewModel that wraps a ControlElementBase
 | 
				
			||||||
        /// object. The display string of the ControlElementViewModel is taken
 | 
					        /// object. The display string of the ControlElementViewModel is taken
 | 
				
			||||||
@@ -137,28 +177,39 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
            return vm;
 | 
					            return vm;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ViewModelBase CreateControlElementViewModel(
 | 
				
			||||||
 | 
					            ControlElementBase element, ControlElementViewModel copyFromViewModel)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            ControlElementViewModel vm = new ControlElementViewModel(element, copyFromViewModel);
 | 
				
			||||||
 | 
					            vm.DisplayString = element.Label;
 | 
				
			||||||
 | 
					            vm.PropertyChanged += ElementViewModel_PropertyChanged;
 | 
				
			||||||
 | 
					            return vm;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Creates a new FormatElementViewModel that wraps a FormatElementBase
 | 
					        /// Creates a new FormatElementViewModel that wraps a FormatElementBase
 | 
				
			||||||
        /// object and has a custom display string. The custom display string
 | 
					        /// object and has a custom display string. The custom display string
 | 
				
			||||||
        /// is necessary because format elements do not have a canonical label.
 | 
					        /// is necessary because format elements do not have a canonical label.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        ViewModelBase CreateFormatElementViewModel(string name, FormatElementBase element)
 | 
					        ViewModelBase CreateFormatElementViewModel(FormatElementBase element)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            FormatElementViewModel vm = new FormatElementViewModel(element);
 | 
					            FormatElementViewModel vm = new FormatElementViewModel(element);
 | 
				
			||||||
            vm.DisplayString = name;
 | 
					 | 
				
			||||||
            vm.PropertyChanged += ElementViewModel_PropertyChanged;
 | 
					            vm.PropertyChanged += ElementViewModel_PropertyChanged;
 | 
				
			||||||
            return vm;
 | 
					            return vm;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        void ElementViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
 | 
					        void ElementViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            if (e.PropertyName == "IsSelected")
 | 
					 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            // Casting sender as ElementViewModel may result in Null, but this
 | 
					            // Casting sender as ElementViewModel may result in Null, but this
 | 
				
			||||||
            // is a desired effect because category headings may be selected
 | 
					            // is a desired effect because category headings may be selected
 | 
				
			||||||
            // in a view, but are not valid ElementViewModels that we could
 | 
					            // in a view, but are not valid ElementViewModels that we could
 | 
				
			||||||
                // 'choose'.
 | 
					            // 'choose'. In addition, when an element is selected, another one
 | 
				
			||||||
                Selected = sender as ElementViewModel;
 | 
					            // 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")
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Selected = elementVM;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -167,12 +218,13 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
            if (CanChooseElement())
 | 
					            if (CanChooseElement())
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                ElementChosenMessage.Send(new ViewModelMessageContent(Selected));
 | 
					                ElementChosenMessage.Send(new ViewModelMessageContent(Selected));
 | 
				
			||||||
 | 
					                DoCloseView();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        bool CanChooseElement()
 | 
					        bool CanChooseElement()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            return Selected != null;
 | 
					            return Selected != null && Selected.IsSelected == true;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,19 +26,28 @@ using System.Collections.ObjectModel;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace zaaReloaded2.ViewModels
 | 
					namespace zaaReloaded2.ViewModels
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    public abstract class ElementViewModel : ViewModelBase
 | 
					    public abstract class ElementViewModel : ViewModelBase, ICloneable
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        #region Properties
 | 
					        #region Properties
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Gets the label of the wrapped element.
 | 
					        /// Returns the wrapped Element's label or an explicitly
 | 
				
			||||||
 | 
					        /// set display string.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        public virtual string Label
 | 
					        public override string DisplayString
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            [DebuggerStepThrough]
 | 
					            get { return Element.Label;  }
 | 
				
			||||||
            get
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public abstract string ToolTip { get;  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public bool IsExpanded
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
                return Element.Label;
 | 
					            get { return _isExpanded; }
 | 
				
			||||||
 | 
					            set
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                _isExpanded = value;
 | 
				
			||||||
 | 
					                OnPropertyChanged("IsExpanded");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -69,5 +78,17 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #region Implementation of ICloneable
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        public abstract object Clone();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #region Fields
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        bool _isExpanded;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,6 +20,7 @@ using System.Collections.Generic;
 | 
				
			|||||||
using System.Diagnostics;
 | 
					using System.Diagnostics;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Text;
 | 
					using System.Text;
 | 
				
			||||||
 | 
					using Bovender.Mvvm;
 | 
				
			||||||
using zaaReloaded2.Controller.Elements;
 | 
					using zaaReloaded2.Controller.Elements;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace zaaReloaded2.ViewModels
 | 
					namespace zaaReloaded2.ViewModels
 | 
				
			||||||
@@ -31,14 +32,40 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
        public string Content
 | 
					        public string Content
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            [DebuggerStepThrough]
 | 
					            [DebuggerStepThrough]
 | 
				
			||||||
            get { return ((FormatElementBase)Element).Content; }
 | 
					            get { return _content; }
 | 
				
			||||||
            set
 | 
					            set
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                ((FormatElementBase)Element).Content = value;
 | 
					                _content = value;
 | 
				
			||||||
                OnPropertyChanged("Content");
 | 
					                OnPropertyChanged("Content");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Gets or sets the parent ControlElementViewModel, if
 | 
				
			||||||
 | 
					        /// there is any.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public ControlElementViewModel Parent { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public override string ToolTip { get { return Element.Label; } }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #region Commands
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public DelegatingCommand SaveCommand
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            get
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (_saveCommand == null)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    _saveCommand = new DelegatingCommand(
 | 
				
			||||||
 | 
					                        param => DoSave(),
 | 
				
			||||||
 | 
					                        param => CanSave());
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                return _saveCommand;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Constructors
 | 
					        #region Constructors
 | 
				
			||||||
@@ -49,8 +76,46 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
            : this()
 | 
					            : this()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            Element = formatElement;
 | 
					            Element = formatElement;
 | 
				
			||||||
 | 
					            Content = ((FormatElementBase)Element).Content;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #region Overrides
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public override object Clone()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            FormatElementViewModel clone = new FormatElementViewModel();
 | 
				
			||||||
 | 
					            clone.Parent = Parent;
 | 
				
			||||||
 | 
					            clone.Element = Element;
 | 
				
			||||||
 | 
					            return clone;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #region Private methods
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        void DoSave()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            ((FormatElementBase)Element).Content = _content;
 | 
				
			||||||
 | 
					            // Writing the _content field to the model affects our
 | 
				
			||||||
 | 
					            // DisplayString property; this is a hack to make it known.
 | 
				
			||||||
 | 
					            OnPropertyChanged("DisplayString");
 | 
				
			||||||
 | 
					            CloseViewCommand.Execute(null);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        bool CanSave()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return !String.IsNullOrEmpty(Content);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #region Fields
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        DelegatingCommand _saveCommand;
 | 
				
			||||||
 | 
					        string _content;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										46
									
								
								zaaReloaded2/ViewModels/IoErrorViewModel.cs
									
									
									
									
									
										Executable file
									
								
							
							
						
						@@ -0,0 +1,46 @@
 | 
				
			|||||||
 | 
					/* IoErrorViewModel.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 Bovender.Mvvm.ViewModels;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace zaaReloaded2.ViewModels
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// Simple view model for I/O error messages, for use in conjunction
 | 
				
			||||||
 | 
					    /// with Bovender's ShowViewDialogAction and zaaReloaded2.Views.IoErrorView.
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
 | 
					    class IoErrorViewModel : ViewModelBase
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public Exception Exception { get; private set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public string Message { get { return Exception.Message; } }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public IoErrorViewModel(Exception e)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Exception = e;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public override object RevealModelObject()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return Exception;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -24,6 +24,8 @@ using Bovender.Mvvm.ViewModels;
 | 
				
			|||||||
using Bovender.Mvvm.Messaging;
 | 
					using Bovender.Mvvm.Messaging;
 | 
				
			||||||
using zaaReloaded2.Controller;
 | 
					using zaaReloaded2.Controller;
 | 
				
			||||||
using System.Collections.ObjectModel;
 | 
					using System.Collections.ObjectModel;
 | 
				
			||||||
 | 
					using System.Runtime.Serialization.Formatters.Soap;
 | 
				
			||||||
 | 
					using System.IO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace zaaReloaded2.ViewModels
 | 
					namespace zaaReloaded2.ViewModels
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -33,7 +35,21 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        public ObservableCollection<SettingsViewModel> SettingsList { get; private set; }
 | 
					        public ObservableCollection<SettingsViewModel> SettingsList { get; private set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public SettingsViewModel Selected { get; private set; }
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Gets the SettingsViewModel that was most recently selected. Whether
 | 
				
			||||||
 | 
					        /// this view model is still selected can be found out be getting the
 | 
				
			||||||
 | 
					        /// view model's IsSelected property.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <remarks>
 | 
				
			||||||
 | 
					        /// Due to the way the WPF ListBox (for example) is implemented, selecting
 | 
				
			||||||
 | 
					        /// a list item will trigger an PropertyChanged event twice: Once for the
 | 
				
			||||||
 | 
					        /// item being selected, and once for the item being deselected. Thus we
 | 
				
			||||||
 | 
					        /// can only capture the last item that actually was selected. We cannot
 | 
				
			||||||
 | 
					        /// howeve capture if an item was deselected without a new selection,
 | 
				
			||||||
 | 
					        /// because we cannot logicaly connect two occurrences of the same event
 | 
				
			||||||
 | 
					        /// from different objects.
 | 
				
			||||||
 | 
					        /// </remarks>
 | 
				
			||||||
 | 
					        public SettingsViewModel LastSelected { get; private set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -120,6 +136,34 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public DelegatingCommand ExportSettingsCommand
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            get
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (_exportSettingsCommand == null)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    _exportSettingsCommand = new DelegatingCommand(
 | 
				
			||||||
 | 
					                        param => DoExportSettings(),
 | 
				
			||||||
 | 
					                        param => CanExportSettings());
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                return _exportSettingsCommand;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public DelegatingCommand ImportSettingsCommand
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            get
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (_importSettingsCommand == null)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    _importSettingsCommand = new DelegatingCommand(
 | 
				
			||||||
 | 
					                        param => DoImportSettings(),
 | 
				
			||||||
 | 
					                        param => CanImportSettings());
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                return _importSettingsCommand;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Messages
 | 
					        #region Messages
 | 
				
			||||||
@@ -172,6 +216,54 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public Message<FileNameMessageContent> ChooseExportFileNameMessage
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            get
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (_chooseExportFileNameMessage == null)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    _chooseExportFileNameMessage = new Message<FileNameMessageContent>();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                return _chooseExportFileNameMessage;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public Message<FileNameMessageContent> ChooseImportFileNameMessage
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            get
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (_chooseImportFileNameMessage == null)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    _chooseImportFileNameMessage = new Message<FileNameMessageContent>();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                return _chooseImportFileNameMessage;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public Message<ViewModelMessageContent> ExportErrorMessage
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            get
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (_exportErrorMessage == null)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    _exportErrorMessage = new Message<ViewModelMessageContent>();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                return _exportErrorMessage;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public Message<ViewModelMessageContent> ImportErrorMessage
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            get
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (_importErrorMessage == null)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    _importErrorMessage = new Message<ViewModelMessageContent>();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                return _importErrorMessage;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Constructors
 | 
					        #region Constructors
 | 
				
			||||||
@@ -179,39 +271,50 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
        public SettingsRepositoryViewModel(SettingsRepository repository)
 | 
					        public SettingsRepositoryViewModel(SettingsRepository repository)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _repository = repository;
 | 
					            _repository = repository;
 | 
				
			||||||
            SettingsList = new ObservableCollection<SettingsViewModel>();
 | 
					            BuildSettingsList();
 | 
				
			||||||
            foreach (Settings s in repository.SettingsList)
 | 
					            RequestCloseView += (sender, args) =>
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                SettingsViewModel vm = new SettingsViewModel(s);
 | 
					                _repository.Store();
 | 
				
			||||||
                AddSettingsViewModel(vm);
 | 
					            };
 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Private methods
 | 
					        #region Private methods
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        void BuildSettingsList()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            SettingsList = new ObservableCollection<SettingsViewModel>();
 | 
				
			||||||
 | 
					            foreach (Settings s in _repository.SettingsList)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                SettingsViewModel vm = new SettingsViewModel(s);
 | 
				
			||||||
 | 
					                AddSettingsViewModel(vm);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            OnPropertyChanged("SettingsList");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        void DoEditSettings()
 | 
					        void DoEditSettings()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (CanEditSettings())
 | 
					            if (CanEditSettings())
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                EditSettingsMessage.Send(new ViewModelMessageContent(Selected));
 | 
					                EditSettingsMessage.Send(new ViewModelMessageContent(LastSelected));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        bool CanEditSettings()
 | 
					        bool CanEditSettings()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            return Selected != null && !IsDefaultSettings();
 | 
					            return LastSelected != null && LastSelected.IsSelected && !IsDefaultSettings();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        void DoUseSettings()
 | 
					        void DoUseSettings()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            UseSettingsMessage.Send(new ViewModelMessageContent(Selected));
 | 
					            UseSettingsMessage.Send(new ViewModelMessageContent(LastSelected));
 | 
				
			||||||
 | 
					            CloseViewCommand.Execute(null);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        bool CanUseSettings()
 | 
					        bool CanUseSettings()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            return Selected != null;
 | 
					            return LastSelected != null && LastSelected.IsSelected;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        void DoAddSettings()
 | 
					        void DoAddSettings()
 | 
				
			||||||
@@ -219,13 +322,14 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
            Settings s = new Settings("Neu");
 | 
					            Settings s = new Settings("Neu");
 | 
				
			||||||
            SettingsViewModel vm = new SettingsViewModel(s);
 | 
					            SettingsViewModel vm = new SettingsViewModel(s);
 | 
				
			||||||
            _repository.SettingsList.Add(s);
 | 
					            _repository.SettingsList.Add(s);
 | 
				
			||||||
            SettingsList.Add(vm);
 | 
					            AddSettingsViewModel(vm);
 | 
				
			||||||
            vm.IsSelected = true;
 | 
					            vm.IsSelected = true;
 | 
				
			||||||
 | 
					            EditSettingsMessage.Send(new ViewModelMessageContent(vm));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        bool CanDeleteSettings()
 | 
					        bool CanDeleteSettings()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            return Selected != null && !IsDefaultSettings();
 | 
					            return LastSelected != null && LastSelected.IsSelected && !IsDefaultSettings();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        void DoDeleteSettings() 
 | 
					        void DoDeleteSettings() 
 | 
				
			||||||
@@ -233,7 +337,7 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
            if (CanDeleteSettings())
 | 
					            if (CanDeleteSettings())
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                ConfirmDeleteSettingsMessage.Send(
 | 
					                ConfirmDeleteSettingsMessage.Send(
 | 
				
			||||||
                    new ViewModelMessageContent(Selected),
 | 
					                    new ViewModelMessageContent(LastSelected),
 | 
				
			||||||
                    param => ConfirmDeleteSettings(param));
 | 
					                    param => ConfirmDeleteSettings(param));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -259,19 +363,25 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            if (content.Confirmed)
 | 
					            if (content.Confirmed)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 | 
					                _repository = new SettingsRepository();
 | 
				
			||||||
 | 
					                BuildSettingsList();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        void DoCopySettings()
 | 
					        void DoCopySettings()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (Selected != null)
 | 
					            if (LastSelected != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                SettingsViewModel copy = Selected.Clone() as SettingsViewModel;
 | 
					                SettingsViewModel copy = LastSelected.Clone() as SettingsViewModel;
 | 
				
			||||||
 | 
					                if (IsDefaultSettings())
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    copy.Name = copy.Name.Replace(SettingsRepository.BUILTIN_LABEL, String.Empty);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
                _repository.SettingsList.Add(copy.RevealModelObject() as Settings);
 | 
					                _repository.SettingsList.Add(copy.RevealModelObject() as Settings);
 | 
				
			||||||
                AddSettingsViewModel(copy);
 | 
					                AddSettingsViewModel(copy);
 | 
				
			||||||
                Selected.IsSelected = false;
 | 
					                LastSelected.IsSelected = false;
 | 
				
			||||||
                copy.IsSelected = true;
 | 
					                copy.IsSelected = true;
 | 
				
			||||||
 | 
					                EditSettingsMessage.Send(new ViewModelMessageContent(copy));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -280,7 +390,7 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
            SettingsViewModel vm = sender as SettingsViewModel;
 | 
					            SettingsViewModel vm = sender as SettingsViewModel;
 | 
				
			||||||
            if (vm != null && e.PropertyName == "IsSelected")
 | 
					            if (vm != null && e.PropertyName == "IsSelected")
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                Selected = vm.IsSelected ? vm : null;
 | 
					                if (vm.IsSelected) LastSelected = vm;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -290,11 +400,9 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        bool IsDefaultSettings()
 | 
					        bool IsDefaultSettings()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (Selected != null)
 | 
					            if (LastSelected != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                return
 | 
					                return SettingsRepository.IsDefaultSettings(LastSelected.RevealModelObject() as Settings);
 | 
				
			||||||
                    (Selected.Name == zaaReloaded2.Properties.Settings.Default.SettingsNameClinic
 | 
					 | 
				
			||||||
                    || Selected.Name == zaaReloaded2.Properties.Settings.Default.SettingsNameWard);
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -313,6 +421,86 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
            SettingsList.Add(settingsViewModel);
 | 
					            SettingsList.Add(settingsViewModel);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        void DoExportSettings()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (CanExportSettings())
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                ChooseExportFileNameMessage.Send(
 | 
				
			||||||
 | 
					                    new FileNameMessageContent(SuggestImportExportPath(), FILE_FILTER),
 | 
				
			||||||
 | 
					                    msg => ConfirmExportSettings(msg));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        bool CanExportSettings()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return LastSelected != null && LastSelected.IsSelected && !IsDefaultSettings();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        void ConfirmExportSettings(FileNameMessageContent message)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (message.Confirmed)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Properties.Settings.Default.ImportExportPath = message.Value;
 | 
				
			||||||
 | 
					                Properties.Settings.Default.Save();
 | 
				
			||||||
 | 
					                Settings settings = LastSelected.RevealModelObject() as Settings;
 | 
				
			||||||
 | 
					                try
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                 settings.SaveToFile(message.Value);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                catch (Exception e)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    ExportErrorMessage.Send(
 | 
				
			||||||
 | 
					                        new ViewModelMessageContent(new IoErrorViewModel(e))
 | 
				
			||||||
 | 
					                    );
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        void DoImportSettings()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            ChooseImportFileNameMessage.Send(
 | 
				
			||||||
 | 
					                new FileNameMessageContent(SuggestImportExportPath(), FILE_FILTER),
 | 
				
			||||||
 | 
					                msg => ConfirmImportSettings(msg));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        bool CanImportSettings()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        void ConfirmImportSettings(FileNameMessageContent message)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (message.Confirmed)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Properties.Settings.Default.ImportExportPath = message.Value;
 | 
				
			||||||
 | 
					                Properties.Settings.Default.Save();
 | 
				
			||||||
 | 
					                try
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    Settings settings = Settings.LoadFromFile(message.Value);
 | 
				
			||||||
 | 
					                    AddSettingsViewModel(new SettingsViewModel(settings));
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                catch (Exception e)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    ImportErrorMessage.Send(
 | 
				
			||||||
 | 
					                        new ViewModelMessageContent(new IoErrorViewModel(e))
 | 
				
			||||||
 | 
					                    );
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        string SuggestImportExportPath()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            string path = Properties.Settings.Default.ImportExportPath;
 | 
				
			||||||
 | 
					            if (String.IsNullOrEmpty(path))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                return Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                return path;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Implementation of ViewModelBase
 | 
					        #region Implementation of ViewModelBase
 | 
				
			||||||
@@ -333,10 +521,26 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
        DelegatingCommand _deleteSettingsCommand;
 | 
					        DelegatingCommand _deleteSettingsCommand;
 | 
				
			||||||
        DelegatingCommand _resetSettingsCommand;
 | 
					        DelegatingCommand _resetSettingsCommand;
 | 
				
			||||||
        DelegatingCommand _copySettingsCommand;
 | 
					        DelegatingCommand _copySettingsCommand;
 | 
				
			||||||
 | 
					        DelegatingCommand _exportSettingsCommand;
 | 
				
			||||||
 | 
					        DelegatingCommand _importSettingsCommand;
 | 
				
			||||||
        Message<ViewModelMessageContent> _confirmDeleteSettingsMessage;
 | 
					        Message<ViewModelMessageContent> _confirmDeleteSettingsMessage;
 | 
				
			||||||
        Message<ViewModelMessageContent> _confirmResetSettingsMessage;
 | 
					        Message<ViewModelMessageContent> _confirmResetSettingsMessage;
 | 
				
			||||||
        Message<ViewModelMessageContent> _editSettingsMessage;
 | 
					        Message<ViewModelMessageContent> _editSettingsMessage;
 | 
				
			||||||
        Message<ViewModelMessageContent> _useSettingsMessage;
 | 
					        Message<ViewModelMessageContent> _useSettingsMessage;
 | 
				
			||||||
 | 
					        Message<FileNameMessageContent> _chooseExportFileNameMessage;
 | 
				
			||||||
 | 
					        Message<FileNameMessageContent> _chooseImportFileNameMessage;
 | 
				
			||||||
 | 
					        Message<ViewModelMessageContent> _exportErrorMessage;
 | 
				
			||||||
 | 
					        Message<ViewModelMessageContent> _importErrorMessage;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #region Constant
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// File filter that is used for the import and export
 | 
				
			||||||
 | 
					        /// of settings.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        const string FILE_FILTER = "zaaReloaded-Stildatei (*.zaaReloaded)|*.zaaReloaded";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,6 +26,7 @@ using Bovender.Mvvm.Messaging;
 | 
				
			|||||||
using zaaReloaded2.Controller;
 | 
					using zaaReloaded2.Controller;
 | 
				
			||||||
using zaaReloaded2.Controller.Elements;
 | 
					using zaaReloaded2.Controller.Elements;
 | 
				
			||||||
using zaaReloaded2.Formatter;
 | 
					using zaaReloaded2.Formatter;
 | 
				
			||||||
 | 
					using System.Collections.ObjectModel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace zaaReloaded2.ViewModels
 | 
					namespace zaaReloaded2.ViewModels
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -76,7 +77,16 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Gets or sets the currently selected element.
 | 
					        /// Gets or sets the currently selected element.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        public ElementViewModel SelectedElement
 | 
					        /// <remarks>
 | 
				
			||||||
 | 
					        /// Due to the way the WPF ListBox (for example) is implemented, selecting
 | 
				
			||||||
 | 
					        /// a list item will trigger an PropertyChanged event twice: Once for the
 | 
				
			||||||
 | 
					        /// item being selected, and once for the item being deselected. Thus we
 | 
				
			||||||
 | 
					        /// can only capture the last item that actually was selected. We cannot
 | 
				
			||||||
 | 
					        /// howeve capture if an item was deselected without a new selection,
 | 
				
			||||||
 | 
					        /// because we cannot logicaly connect two occurrences of the same event
 | 
				
			||||||
 | 
					        /// from different objects.
 | 
				
			||||||
 | 
					        /// </remarks>
 | 
				
			||||||
 | 
					        public ElementViewModel LastSelectedElement
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            get { return _selectedElement; }
 | 
					            get { return _selectedElement; }
 | 
				
			||||||
            set
 | 
					            set
 | 
				
			||||||
@@ -95,7 +105,12 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (_referenceStyle == null)
 | 
					                if (_referenceStyle == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _referenceStyle = new EnumProvider<ReferenceStyle>(_settings.ReferenceStyle);
 | 
					                    _referenceStyle = new EnumProvider<ReferenceStyle>();
 | 
				
			||||||
 | 
					                    _referenceStyle.AsEnum = _settings.ReferenceStyle;
 | 
				
			||||||
 | 
					                    _referenceStyle.PropertyChanged += (sender, args) =>
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        _settings.ReferenceStyle = _referenceStyle.AsEnum;
 | 
				
			||||||
 | 
					                    };
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                return _referenceStyle;
 | 
					                return _referenceStyle;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@@ -113,7 +128,7 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
            : base()
 | 
					            : base()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _settings = settings;
 | 
					            _settings = settings;
 | 
				
			||||||
            Elements = new List<ElementViewModel>();
 | 
					            Elements = new ObservableCollection<ElementViewModel>();
 | 
				
			||||||
            foreach (ElementBase element in settings.Elements)
 | 
					            foreach (ElementBase element in settings.Elements)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                ElementViewModel vm;
 | 
					                ElementViewModel vm;
 | 
				
			||||||
@@ -126,6 +141,7 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
                    vm = new ControlElementViewModel(element as ControlElementBase);
 | 
					                    vm = new ControlElementViewModel(element as ControlElementBase);
 | 
				
			||||||
                    foreach (FormatElementViewModel childVM in ((ControlElementViewModel)vm).Elements)
 | 
					                    foreach (FormatElementViewModel childVM in ((ControlElementViewModel)vm).Elements)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
 | 
					                        childVM.Parent = vm as ControlElementViewModel;
 | 
				
			||||||
                        childVM.PropertyChanged += ElementViewModel_PropertyChanged;
 | 
					                        childVM.PropertyChanged += ElementViewModel_PropertyChanged;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@@ -167,6 +183,30 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public Message<ViewModelMessageContent> EditElementMessage
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            get
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (_editElementMessage == null)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    _editElementMessage = new Message<ViewModelMessageContent>();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                return _editElementMessage;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public Message<ViewModelMessageContent> ChangeControlElementMessage
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            get
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (_changeControlElementMessage == null)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    _changeControlElementMessage = new Message<ViewModelMessageContent>();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                return _changeControlElementMessage;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Commands
 | 
					        #region Commands
 | 
				
			||||||
@@ -198,6 +238,20 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public DelegatingCommand EditElementCommand
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            get
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (_editElementCommand == null)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    _editElementCommand = new DelegatingCommand(
 | 
				
			||||||
 | 
					                        param => DoEditElement(),
 | 
				
			||||||
 | 
					                        param => CanEditElement());
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                return _editElementCommand;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public DelegatingCommand DeleteElementCommand
 | 
					        public DelegatingCommand DeleteElementCommand
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            get
 | 
					            get
 | 
				
			||||||
@@ -226,6 +280,34 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public DelegatingCommand MoveElementUpCommand
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            get
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (_moveElementUpCommand == null)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    _moveElementUpCommand = new DelegatingCommand(
 | 
				
			||||||
 | 
					                        param => DoMoveElementUp(),
 | 
				
			||||||
 | 
					                        param => CanMoveElementUp());
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                return _moveElementUpCommand;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public DelegatingCommand MoveElementDownCommand
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            get
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (_moveElementDownCommand == null)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    _moveElementDownCommand = new DelegatingCommand(
 | 
				
			||||||
 | 
					                        param => DoMoveElementDown(),
 | 
				
			||||||
 | 
					                        param => CanMoveElementDown());
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                return _moveElementDownCommand;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Public methods
 | 
					        #region Public methods
 | 
				
			||||||
@@ -260,11 +342,24 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            // Create a new element picker; it will automatically create and
 | 
					            // Create a new element picker; it will automatically create and
 | 
				
			||||||
            // send us a new element view model if one is chosen by the view.
 | 
					            // send us a new element view model if one is chosen by the view.
 | 
				
			||||||
            ElementPickerViewModel picker = new ElementPickerViewModel(true);
 | 
					            ElementPickerViewModel picker = new ElementPickerViewModel(
 | 
				
			||||||
 | 
					                allowControlElements: IsTopLevelElement());
 | 
				
			||||||
            picker.ElementChosenMessage.Sent += (sender, args) =>
 | 
					            picker.ElementChosenMessage.Sent += (sender, args) =>
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                ElementViewModel newVM = args.Content.ViewModel as ElementViewModel;
 | 
					                ElementViewModel newVM = args.Content.ViewModel as ElementViewModel;
 | 
				
			||||||
 | 
					                if (IsTopLevelElement())
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
                    AddElementViewModel(newVM);
 | 
					                    AddElementViewModel(newVM);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    // If the selected element is on the second level, it
 | 
				
			||||||
 | 
					                    // must be a FormatElementViewModel.
 | 
				
			||||||
 | 
					                    ControlElementViewModel parent = ((FormatElementViewModel)LastSelectedElement).Parent;
 | 
				
			||||||
 | 
					                    AddChildElementViewModel(parent, newVM as FormatElementViewModel);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                newVM.IsSelected = true;
 | 
				
			||||||
 | 
					                if (newVM is FormatElementViewModel) DoEditElement();
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
            AddElementMessage.Send(new ViewModelMessageContent(picker));
 | 
					            AddElementMessage.Send(new ViewModelMessageContent(picker));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -279,7 +374,9 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
                picker.ElementChosenMessage.Sent += (sender, args) =>
 | 
					                picker.ElementChosenMessage.Sent += (sender, args) =>
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    FormatElementViewModel newVM = args.Content.ViewModel as FormatElementViewModel;
 | 
					                    FormatElementViewModel newVM = args.Content.ViewModel as FormatElementViewModel;
 | 
				
			||||||
                    AddChildElementViewModel(SelectedElement as ControlElementViewModel, newVM);
 | 
					                    AddChildElementViewModel(LastSelectedElement as ControlElementViewModel, newVM);
 | 
				
			||||||
 | 
					                    newVM.IsSelected = true;
 | 
				
			||||||
 | 
					                    DoEditElement();
 | 
				
			||||||
                };
 | 
					                };
 | 
				
			||||||
                AddChildElementMessage.Send(new ViewModelMessageContent(picker));
 | 
					                AddChildElementMessage.Send(new ViewModelMessageContent(picker));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@@ -287,30 +384,335 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        bool CanAddChildElement()
 | 
					        bool CanAddChildElement()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            return SelectedElement is ControlElementViewModel;
 | 
					            return LastSelectedElement is ControlElementViewModel &&
 | 
				
			||||||
 | 
					                ((ControlElementViewModel)LastSelectedElement).CanHaveChildren;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        void DoDeleteElement() { }
 | 
					        void DoEditElement()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (CanEditElement())
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (LastSelectedElement is ControlElementViewModel)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    ElementPickerViewModel picker = new ElementPickerViewModel(
 | 
				
			||||||
 | 
					                        LastSelectedElement as ControlElementViewModel);
 | 
				
			||||||
 | 
					                    picker.ElementChosenMessage.Sent += (sender, args) =>
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        // Replace the previously selected element with the new
 | 
				
			||||||
 | 
					                        // one that we get from the ElementPickerViewModel.
 | 
				
			||||||
 | 
					                        int index = Elements.IndexOf(LastSelectedElement);
 | 
				
			||||||
 | 
					                        ElementViewModel newVM = args.Content.ViewModel as ElementViewModel;
 | 
				
			||||||
 | 
					                        ControlElementBase oldModel = LastSelectedElement.RevealModelObject() as ControlElementBase;
 | 
				
			||||||
 | 
					                        ControlElementBase newModel = newVM.RevealModelObject() as ControlElementBase;
 | 
				
			||||||
 | 
					                        // Caveat: once we modify the Elements collection, LastSelectedElement will change!
 | 
				
			||||||
 | 
					                        Elements.RemoveAt(index);
 | 
				
			||||||
 | 
					                        Elements.Insert(index, newVM);
 | 
				
			||||||
 | 
					                        newModel.Children = oldModel.Children;
 | 
				
			||||||
 | 
					                        _settings.Elements.RemoveAt(index);
 | 
				
			||||||
 | 
					                        _settings.Elements.Insert(index, newModel);
 | 
				
			||||||
 | 
					                        newVM.PropertyChanged += ElementViewModel_PropertyChanged;
 | 
				
			||||||
 | 
					                        newVM.IsSelected = true;
 | 
				
			||||||
 | 
					                    };
 | 
				
			||||||
 | 
					                    ChangeControlElementMessage.Send(
 | 
				
			||||||
 | 
					                        new ViewModelMessageContent(picker));
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    EditElementMessage.Send(new ViewModelMessageContent(LastSelectedElement));
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        bool CanDeleteElement() { return _selectedElement != null; }
 | 
					        bool CanEditElement()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
        void DoCopyElement() { }
 | 
					            return LastSelectedElement != null && LastSelectedElement.IsSelected;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        bool CanCopyElement() { return _selectedElement != null; }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Sets or unsets the SelectedElement property whenever the IsSelected
 | 
					        /// Deletes the selected element.
 | 
				
			||||||
        /// property of an ElementViewModel changes.
 | 
					 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <remarks>
 | 
				
			||||||
 | 
					        /// The following algorithm ist used to find out whether the selected
 | 
				
			||||||
 | 
					        /// element is at the first or the second level of the hierarchy:
 | 
				
			||||||
 | 
					        /// If the Element is a ControlElement, it must be at the first level.
 | 
				
			||||||
 | 
					        /// If the Element is a FormatElement, its Parent property will be
 | 
				
			||||||
 | 
					        /// Null if the Element is at the first level.
 | 
				
			||||||
 | 
					        /// </remarks>
 | 
				
			||||||
 | 
					        void DoDeleteElement()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (CanDeleteElement())
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (IsTopLevelElement())
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    // First level of the hierarchy
 | 
				
			||||||
 | 
					                    int index = Elements.IndexOf(LastSelectedElement);
 | 
				
			||||||
 | 
					                    Elements.RemoveAt(index);
 | 
				
			||||||
 | 
					                    _settings.Elements.RemoveAt(index);
 | 
				
			||||||
 | 
					                    if (index == Elements.Count) index--;
 | 
				
			||||||
 | 
					                    LastSelectedElement = null;
 | 
				
			||||||
 | 
					                    if (Elements.Count > 0) Elements[index].IsSelected = true;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    // Second level of the hierarchy
 | 
				
			||||||
 | 
					                    FormatElementViewModel formatVM = LastSelectedElement as FormatElementViewModel;
 | 
				
			||||||
 | 
					                    ControlElementViewModel parent = formatVM.Parent;
 | 
				
			||||||
 | 
					                    int index = parent.Elements.IndexOf(formatVM);
 | 
				
			||||||
 | 
					                    parent.RemoveChildElement(formatVM);
 | 
				
			||||||
 | 
					                    if (index == parent.Elements.Count) index--;
 | 
				
			||||||
 | 
					                    LastSelectedElement = null;
 | 
				
			||||||
 | 
					                    if (parent.Elements.Count > 0) parent.Elements[index].IsSelected = true;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        bool CanDeleteElement() { return LastSelectedElement != null && LastSelectedElement.IsSelected; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        void DoCopyElement()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (CanCopyElement())
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (IsTopLevelElement())
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    ElementViewModel newControlVM = LastSelectedElement.Clone() as ElementViewModel;
 | 
				
			||||||
 | 
					                    AddElementViewModel(newControlVM);
 | 
				
			||||||
 | 
					                    newControlVM.IsSelected = true;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    FormatElementViewModel originalVM = LastSelectedElement as FormatElementViewModel;
 | 
				
			||||||
 | 
					                    FormatElementViewModel newFormatVM = originalVM.Clone() as FormatElementViewModel;
 | 
				
			||||||
 | 
					                    originalVM.Parent.AddChildElement(newFormatVM);
 | 
				
			||||||
 | 
					                    newFormatVM.IsSelected = true;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        bool CanCopyElement() { return LastSelectedElement != null && LastSelectedElement.IsSelected; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        void DoMoveElementUp()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (CanMoveElementUp())
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                // We need to get a hold of the LastSelectedElement because a TreeView
 | 
				
			||||||
 | 
					                // might reset the selection when we move elements around.
 | 
				
			||||||
 | 
					                ElementViewModel lastSelectedElement = LastSelectedElement;
 | 
				
			||||||
 | 
					                // Top-level elements are either control elements or format elements;
 | 
				
			||||||
 | 
					                // child elements on the second level however are always format elements
 | 
				
			||||||
 | 
					                // and must be treated differently.
 | 
				
			||||||
 | 
					                if (IsTopLevelElement())
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    int index = Elements.IndexOf(lastSelectedElement);
 | 
				
			||||||
 | 
					                    if (lastSelectedElement is ControlElementViewModel ||
 | 
				
			||||||
 | 
					                        Elements[index - 1] is FormatElementViewModel ||
 | 
				
			||||||
 | 
					                        !((ControlElementViewModel)Elements[index - 1]).CanHaveChildren
 | 
				
			||||||
 | 
					                        )
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        // Simple case: top-level control element -- just move it up;
 | 
				
			||||||
 | 
					                        // if the selected element is a format element and the element
 | 
				
			||||||
 | 
					                        // above it is a format element too, just move it up as well.
 | 
				
			||||||
 | 
					                        // If the element above the selected element is a control element,
 | 
				
			||||||
 | 
					                        // but cannot have children, move the selected element up as well.
 | 
				
			||||||
 | 
					                        Elements.RemoveAt(index);
 | 
				
			||||||
 | 
					                        Elements.Insert(index - 1, lastSelectedElement);
 | 
				
			||||||
 | 
					                        _settings.Elements.RemoveAt(index);
 | 
				
			||||||
 | 
					                        _settings.Elements.Insert(
 | 
				
			||||||
 | 
					                            index - 1,
 | 
				
			||||||
 | 
					                            lastSelectedElement.RevealModelObject() as ElementBase);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        // If we get here, the selected element is a format element
 | 
				
			||||||
 | 
					                        // and the element above it is a control element that can
 | 
				
			||||||
 | 
					                        // have child elements, i.e. the selected element is demoted
 | 
				
			||||||
 | 
					                        // to a child element of the control element above it.
 | 
				
			||||||
 | 
					                        ControlElementViewModel controlElementAbove =
 | 
				
			||||||
 | 
					                            Elements[index - 1] as ControlElementViewModel;
 | 
				
			||||||
 | 
					                        Elements.RemoveAt(index);
 | 
				
			||||||
 | 
					                        controlElementAbove.IsExpanded = true;
 | 
				
			||||||
 | 
					                        controlElementAbove.AddChildElement(
 | 
				
			||||||
 | 
					                            lastSelectedElement as FormatElementViewModel);
 | 
				
			||||||
 | 
					                        FormatElementBase model = lastSelectedElement.RevealModelObject() as FormatElementBase;
 | 
				
			||||||
 | 
					                        ControlElementBase modelAbove = _settings.Elements[index - 1] as ControlElementBase;
 | 
				
			||||||
 | 
					                        _settings.Elements.RemoveAt(index);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    // The selected element is a child element.
 | 
				
			||||||
 | 
					                    // If it is at the top of the child elements list, promote it
 | 
				
			||||||
 | 
					                    // to a top-level element; if not, just move it up in the
 | 
				
			||||||
 | 
					                    // child elements list.
 | 
				
			||||||
 | 
					                    FormatElementViewModel selected = lastSelectedElement as FormatElementViewModel;
 | 
				
			||||||
 | 
					                    int index = selected.Parent.Elements.IndexOf(selected);
 | 
				
			||||||
 | 
					                    if (index == 0)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        // Promote the element from the top of the children list
 | 
				
			||||||
 | 
					                        // to a top-level element above its parent.
 | 
				
			||||||
 | 
					                        int parentIndex = Elements.IndexOf(selected.Parent);
 | 
				
			||||||
 | 
					                        selected.Parent.Elements.RemoveAt(0);
 | 
				
			||||||
 | 
					                        Elements.Insert(parentIndex, selected);
 | 
				
			||||||
 | 
					                        FormatElementBase model = selected.RevealModelObject() as FormatElementBase;
 | 
				
			||||||
 | 
					                        ControlElementBase parentModel = selected.Parent.RevealModelObject() as ControlElementBase;
 | 
				
			||||||
 | 
					                        parentModel.Children.RemoveAt(0);
 | 
				
			||||||
 | 
					                        _settings.Elements.Insert(parentIndex, model);
 | 
				
			||||||
 | 
					                        selected.Parent = null;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        selected.Parent.Elements.Move(index, index - 1);
 | 
				
			||||||
 | 
					                        ControlElementBase parentModel = selected.Parent.RevealModelObject() as ControlElementBase;
 | 
				
			||||||
 | 
					                        FormatElementBase selectedModel = parentModel.Children[index];
 | 
				
			||||||
 | 
					                        parentModel.Children.RemoveAt(index);
 | 
				
			||||||
 | 
					                        parentModel.Children.Insert(index - 1, selectedModel);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                // Select the last selected element again.
 | 
				
			||||||
 | 
					                lastSelectedElement.IsSelected = true;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        bool CanMoveElementUp()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (IsTopLevelElement())
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                return Elements.IndexOf(LastSelectedElement) > 0;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                // If the selected element is a child element, it can always be moved
 | 
				
			||||||
 | 
					                // up before the parent element.
 | 
				
			||||||
 | 
					                return LastSelectedElement != null && LastSelectedElement.IsSelected;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        void DoMoveElementDown()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (CanMoveElementDown())
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                // We need to get a hold of the LastSelectedElement because a TreeView
 | 
				
			||||||
 | 
					                // might reset the selection when we move elements around.
 | 
				
			||||||
 | 
					                ElementViewModel lastSelectedElement = LastSelectedElement;
 | 
				
			||||||
 | 
					                // Top-level elements are either control elements or format elements;
 | 
				
			||||||
 | 
					                // child elements on the second level however are always format elements
 | 
				
			||||||
 | 
					                // and must be treated differently.
 | 
				
			||||||
 | 
					                if (IsTopLevelElement())
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    int index = Elements.IndexOf(lastSelectedElement);
 | 
				
			||||||
 | 
					                    if (lastSelectedElement is ControlElementViewModel ||
 | 
				
			||||||
 | 
					                        Elements[index + 1 ] is FormatElementViewModel ||
 | 
				
			||||||
 | 
					                        !((ControlElementViewModel)Elements[index + 1]).CanHaveChildren
 | 
				
			||||||
 | 
					                        )
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        // Simple case: top-level control element -- just move it down;
 | 
				
			||||||
 | 
					                        // if the selected element is a format element and the element
 | 
				
			||||||
 | 
					                        // below it is a format element too, just move it down as well.
 | 
				
			||||||
 | 
					                        // If the element below the selected element is a control element,
 | 
				
			||||||
 | 
					                        // but cannot have children, move the selected element down as well.
 | 
				
			||||||
 | 
					                        Elements.RemoveAt(index);
 | 
				
			||||||
 | 
					                        Elements.Insert(index + 1, lastSelectedElement);
 | 
				
			||||||
 | 
					                        _settings.Elements.RemoveAt(index);
 | 
				
			||||||
 | 
					                        _settings.Elements.Insert(
 | 
				
			||||||
 | 
					                            index + 1,
 | 
				
			||||||
 | 
					                            lastSelectedElement.RevealModelObject() as ElementBase);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        // If we get here, the selected element is a format element
 | 
				
			||||||
 | 
					                        // and the element below it is a control element that can
 | 
				
			||||||
 | 
					                        // have child elements, i.e. the selected element is demoted
 | 
				
			||||||
 | 
					                        // to a child element of the control element below it.
 | 
				
			||||||
 | 
					                        ControlElementViewModel controlElementBelow =
 | 
				
			||||||
 | 
					                            Elements[index + 1] as ControlElementViewModel;
 | 
				
			||||||
 | 
					                        Elements.RemoveAt(index);
 | 
				
			||||||
 | 
					                        controlElementBelow.IsExpanded = true;
 | 
				
			||||||
 | 
					                        controlElementBelow.Elements.Insert(
 | 
				
			||||||
 | 
					                            0, 
 | 
				
			||||||
 | 
					                            lastSelectedElement as FormatElementViewModel);
 | 
				
			||||||
 | 
					                        ((FormatElementViewModel)lastSelectedElement).Parent = controlElementBelow;
 | 
				
			||||||
 | 
					                        FormatElementBase model = lastSelectedElement.RevealModelObject() as FormatElementBase;
 | 
				
			||||||
 | 
					                        ControlElementBase modelBelow = _settings.Elements[index + 1] as ControlElementBase;
 | 
				
			||||||
 | 
					                        _settings.Elements.RemoveAt(index);
 | 
				
			||||||
 | 
					                        modelBelow.Children.Insert(0, model);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    // The selected element is a child element.
 | 
				
			||||||
 | 
					                    // If it is at the bottom of the child elements list, promote it
 | 
				
			||||||
 | 
					                    // to a top-level element; if not, just move it down in the
 | 
				
			||||||
 | 
					                    // child elements list.
 | 
				
			||||||
 | 
					                    FormatElementViewModel selected = lastSelectedElement as FormatElementViewModel;
 | 
				
			||||||
 | 
					                    int index = selected.Parent.Elements.IndexOf(selected);
 | 
				
			||||||
 | 
					                    if (index == selected.Parent.Elements.Count - 1)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        // Promote the element from the bottom of the children list
 | 
				
			||||||
 | 
					                        // to a top-level element below its parent.
 | 
				
			||||||
 | 
					                        int parentIndex = Elements.IndexOf(selected.Parent);
 | 
				
			||||||
 | 
					                        selected.Parent.Elements.RemoveAt(selected.Parent.Elements.Count - 1);
 | 
				
			||||||
 | 
					                        Elements.Insert(parentIndex + 1, selected);
 | 
				
			||||||
 | 
					                        FormatElementBase model = selected.RevealModelObject() as FormatElementBase;
 | 
				
			||||||
 | 
					                        ControlElementBase parentModel = selected.Parent.RevealModelObject() as ControlElementBase;
 | 
				
			||||||
 | 
					                        parentModel.Children.RemoveAt(parentModel.Children.Count - 1);
 | 
				
			||||||
 | 
					                        _settings.Elements.Insert(parentIndex + 1, model);
 | 
				
			||||||
 | 
					                        selected.Parent = null;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        selected.Parent.Elements.Move(index, index + 1);
 | 
				
			||||||
 | 
					                        ControlElementBase parentModel = selected.Parent.RevealModelObject() as ControlElementBase;
 | 
				
			||||||
 | 
					                        FormatElementBase selectedModel = parentModel.Children[index];
 | 
				
			||||||
 | 
					                        parentModel.Children.RemoveAt(index);
 | 
				
			||||||
 | 
					                        parentModel.Children.Insert(index + 1, selectedModel);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                // Select the last selected element again.
 | 
				
			||||||
 | 
					                lastSelectedElement.IsSelected = true;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        bool CanMoveElementDown()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (IsTopLevelElement())
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                return Elements.IndexOf(LastSelectedElement) < Elements.Count - 1;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                // If the selected element is a child element, it can always be moved
 | 
				
			||||||
 | 
					                // down after the parent element.
 | 
				
			||||||
 | 
					                return LastSelectedElement != null && LastSelectedElement.IsSelected;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Sets LastSelectedElement property whenever the IsSelected
 | 
				
			||||||
 | 
					        /// property of an ElementViewModel changes
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <remarks>
 | 
				
			||||||
 | 
					        /// Please see the remarks on the LastSelectedElement property.
 | 
				
			||||||
 | 
					        /// </remarks>
 | 
				
			||||||
        void ElementViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
 | 
					        void ElementViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            ElementViewModel vm = sender as ElementViewModel;
 | 
					            ElementViewModel vm = sender as ElementViewModel;
 | 
				
			||||||
            if (vm != null && e.PropertyName == "IsSelected")
 | 
					            if (vm != null && e.PropertyName == "IsSelected")
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                SelectedElement = vm.IsSelected ? vm : null;
 | 
					                if (vm.IsSelected) LastSelectedElement = vm;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Returns true if the selected ElementViewModel is at the top
 | 
				
			||||||
 | 
					        /// level of the hierarchy.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        bool IsTopLevelElement()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return LastSelectedElement != null &&
 | 
				
			||||||
 | 
					                (LastSelectedElement is ControlElementViewModel ||
 | 
				
			||||||
 | 
					                ((FormatElementViewModel)LastSelectedElement).Parent == null);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Implementation of ViewModelBase
 | 
					        #region Implementation of ViewModelBase
 | 
				
			||||||
@@ -336,10 +738,15 @@ namespace zaaReloaded2.ViewModels
 | 
				
			|||||||
        Settings _settings;
 | 
					        Settings _settings;
 | 
				
			||||||
        DelegatingCommand _addElementCommand;
 | 
					        DelegatingCommand _addElementCommand;
 | 
				
			||||||
        DelegatingCommand _addChildElementCommand;
 | 
					        DelegatingCommand _addChildElementCommand;
 | 
				
			||||||
 | 
					        DelegatingCommand _editElementCommand;
 | 
				
			||||||
        DelegatingCommand _deleteElementCommand;
 | 
					        DelegatingCommand _deleteElementCommand;
 | 
				
			||||||
        DelegatingCommand _copyElementCommand;
 | 
					        DelegatingCommand _copyElementCommand;
 | 
				
			||||||
 | 
					        DelegatingCommand _moveElementUpCommand;
 | 
				
			||||||
 | 
					        DelegatingCommand _moveElementDownCommand;
 | 
				
			||||||
        Message<ViewModelMessageContent> _addElementMessage;
 | 
					        Message<ViewModelMessageContent> _addElementMessage;
 | 
				
			||||||
        Message<ViewModelMessageContent> _addChildElementMessage;
 | 
					        Message<ViewModelMessageContent> _addChildElementMessage;
 | 
				
			||||||
 | 
					        Message<ViewModelMessageContent> _editElementMessage;
 | 
				
			||||||
 | 
					        Message<ViewModelMessageContent> _changeControlElementMessage;
 | 
				
			||||||
        ElementViewModel _selectedElement;
 | 
					        ElementViewModel _selectedElement;
 | 
				
			||||||
        EnumProvider<ReferenceStyle> _referenceStyle;
 | 
					        EnumProvider<ReferenceStyle> _referenceStyle;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										52
									
								
								zaaReloaded2/Views/ElementPickerView.xaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						@@ -0,0 +1,52 @@
 | 
				
			|||||||
 | 
					<!--
 | 
				
			||||||
 | 
						ElementPickerView.xaml
 | 
				
			||||||
 | 
						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.
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<Window x:Class="zaaReloaded2.Views.ElementPickerView"
 | 
				
			||||||
 | 
					        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 | 
				
			||||||
 | 
					        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 | 
				
			||||||
 | 
					        xmlns:b="clr-namespace:Bovender.Mvvm.Views.Settings;assembly=Bovender"
 | 
				
			||||||
 | 
					        Width="280" Height="320" ResizeMode="CanResizeWithGrip" ShowInTaskbar="False"
 | 
				
			||||||
 | 
					        WindowStyle="ToolWindow" Topmost="True"
 | 
				
			||||||
 | 
					        b:WindowState.CenterScreen="True" b:WindowState.Save="True"
 | 
				
			||||||
 | 
					        Title="Neues Element auswählen"
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					    <Window.Resources>
 | 
				
			||||||
 | 
					        <ResourceDictionary Source="/zaaReloaded2;component/Style.xaml" />
 | 
				
			||||||
 | 
					    </Window.Resources>
 | 
				
			||||||
 | 
					    <DockPanel Margin="10">
 | 
				
			||||||
 | 
					        <Label DockPanel.Dock="Top" Content="Verfügbare Elemente:" Target="{Binding ElementName=ElementsTreeView}" />
 | 
				
			||||||
 | 
					        <UniformGrid DockPanel.Dock="Bottom" HorizontalAlignment="Right" Columns="2" Rows="1" Margin="0 10 0 0">
 | 
				
			||||||
 | 
					            <Button Content="OK" Command="{Binding ChooseElementCommand}" IsDefault="True" Margin="0 0 5 0" />
 | 
				
			||||||
 | 
					            <Button Content="Abbrechen" Command="{Binding CloseViewCommand}" IsCancel="True" Margin="5 0 0 0" />
 | 
				
			||||||
 | 
					        </UniformGrid>
 | 
				
			||||||
 | 
					        <TreeView ItemsSource="{Binding Categories}">
 | 
				
			||||||
 | 
					            <TreeView.ItemContainerStyle>
 | 
				
			||||||
 | 
					                <Style TargetType="{x:Type TreeViewItem}">
 | 
				
			||||||
 | 
					                    <Setter Property="IsExpanded" Value="True" />
 | 
				
			||||||
 | 
					                    <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
 | 
				
			||||||
 | 
					                </Style>
 | 
				
			||||||
 | 
					            </TreeView.ItemContainerStyle>
 | 
				
			||||||
 | 
					            <TreeView.ItemTemplate>
 | 
				
			||||||
 | 
					                <HierarchicalDataTemplate ItemsSource="{Binding Children}">
 | 
				
			||||||
 | 
					                    <TextBlock Text="{Binding DisplayString}" />
 | 
				
			||||||
 | 
					                </HierarchicalDataTemplate>
 | 
				
			||||||
 | 
					            </TreeView.ItemTemplate>
 | 
				
			||||||
 | 
					        </TreeView>
 | 
				
			||||||
 | 
					    </DockPanel>
 | 
				
			||||||
 | 
					</Window>
 | 
				
			||||||
							
								
								
									
										33
									
								
								zaaReloaded2/Views/ElementPickerView.xaml.cs
									
									
									
									
									
										Executable file
									
								
							
							
						
						@@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					/* ElementPickerView.xaml.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.Windows;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace zaaReloaded2.Views
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// Interaction logic for ElementPickerView.xaml
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
 | 
					    public partial class ElementPickerView : Window
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public ElementPickerView()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            InitializeComponent();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										42
									
								
								zaaReloaded2/Views/ElementView.xaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						@@ -0,0 +1,42 @@
 | 
				
			|||||||
 | 
					<!--
 | 
				
			||||||
 | 
						ElementView.xaml
 | 
				
			||||||
 | 
						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.
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<Window x:Class="zaaReloaded2.Views.ElementView"
 | 
				
			||||||
 | 
					        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 | 
				
			||||||
 | 
					        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 | 
				
			||||||
 | 
					        xmlns:b="clr-namespace:Bovender.Mvvm.Views.Settings;assembly=Bovender"
 | 
				
			||||||
 | 
					        SizeToContent="WidthAndHeight" ResizeMode="CanResizeWithGrip" ShowInTaskbar="False"
 | 
				
			||||||
 | 
					        WindowStyle="ToolWindow" Topmost="True"
 | 
				
			||||||
 | 
					        b:WindowState.CenterScreen="True" b:WindowState.Save="True"
 | 
				
			||||||
 | 
					        Title="Element bearbeiten"
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					    <Window.Resources>
 | 
				
			||||||
 | 
					        <ResourceDictionary Source="/zaaReloaded2;component/Style.xaml" />
 | 
				
			||||||
 | 
					    </Window.Resources>
 | 
				
			||||||
 | 
					    <StackPanel Margin="10">
 | 
				
			||||||
 | 
					        <Label Content="Inhalt:" Target="{Binding ElementName=ContentTextBox}" />
 | 
				
			||||||
 | 
					        <TextBox Text="{Binding Content,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
 | 
				
			||||||
 | 
					                 x:Name="ContentTextBox"  Margin="0 0 0 5"
 | 
				
			||||||
 | 
					                 Width="300" Height="60" TextWrapping="Wrap" />
 | 
				
			||||||
 | 
					        <UniformGrid HorizontalAlignment="Right" Columns="2" Rows="1" Margin="0 10 0 0">
 | 
				
			||||||
 | 
					            <Button Content="OK" Command="{Binding SaveCommand}" IsDefault="True" Margin="0 0 5 0" />
 | 
				
			||||||
 | 
					            <Button Content="Abbrechen" Command="{Binding CloseViewCommand}" IsCancel="True" Margin="5 0 0 0" />
 | 
				
			||||||
 | 
					        </UniformGrid>
 | 
				
			||||||
 | 
					    </StackPanel>
 | 
				
			||||||
 | 
					</Window>
 | 
				
			||||||