diff --git a/zaaReloaded2/AutoDetect.cs b/zaaReloaded2/AutoDetect.cs
deleted file mode 100755
index d7a1b53..0000000
--- a/zaaReloaded2/AutoDetect.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-/* AutoDetect.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;
-
-namespace zaaReloaded2
-{
- class AutoDetect
- {
-
- ///
- /// Attempts to automatically detect laboratory data in the Word
- /// document.
- ///
- public void AutoDetect()
- {
- if (Document == null)
- {
- throw new InvalidOperationException(
- "Automatic laboratory detection requires a document.");
- }
-
- // If the 'Labor' bookmark exists, go to it.
- if (Document.Bookmarks.Exists("Labor"))
- {
- Document.Bookmarks["Labor"].Range.Collapse(WdCollapseDirection.wdCollapseStart);
- }
-
- // If the current paragraph looks like a Lauris paragraph, fine.
- // If it does not look like a Lauris paragraph, move the cursor
- // up until we find one.
- string s = Document.ActiveWindow.Selection.Paragraphs[1].Range.Text;
-
- // If we found a Lauris paragraph by moving up, start extending the
- // selection upwards until we encounter a paragraph that is not a
- // Lauris paragraph.
-
- // If we have previously reached the start of the document without finding
- // a Lauris paragraph, go back to where we started and move the
- // cursor down paragraph by paragraph until we find a Lauris
- // paragraph.
-
- // If we found a Lauris paragraph by moving down, start extending the
- // selection downwards until we encounter a paragraph that is not a
- // Lauris paragraph.
- }
- }
-}
diff --git a/zaaReloaded2/Importer/ZaaImporter/AutoDetect.cs b/zaaReloaded2/Importer/ZaaImporter/AutoDetect.cs
new file mode 100755
index 0000000..ac9a129
--- /dev/null
+++ b/zaaReloaded2/Importer/ZaaImporter/AutoDetect.cs
@@ -0,0 +1,91 @@
+using Microsoft.Office.Interop.Word;
+/* AutoDetect.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;
+
+namespace zaaReloaded2.Importer.ZaaImporter
+{
+ static class AutoDetect
+ {
+ ///
+ /// Attempts to automatically detect laboratory data in the Word
+ /// document.
+ ///
+ /// Document which to parse for laboratory
+ /// data.
+ /// True if laboratory data was detected, false if not.
+ /// if
+ /// is null.
+ public static bool Detect(Document document)
+ {
+ if (document == null)
+ {
+ throw new ArgumentNullException(
+ "Automatic laboratory detection requires a document.");
+ }
+
+ // TODO: Try to make this algorithm more elegant.
+ Paragraph start = null;
+ Paragraph end = null;
+ int i = 1;
+ while (i <= document.Paragraphs.Count)
+ {
+ if (IsLabParagraph(document.Paragraphs[i]))
+ {
+ start = document.Paragraphs[i];
+ break;
+ }
+ i++;
+ }
+
+ if (start != null)
+ {
+ end = start;
+ while (i <= document.Paragraphs.Count - 1)
+ {
+ if (!IsLabParagraph(document.Paragraphs[i+1]))
+ {
+ end = document.Paragraphs[i];
+ break;
+ }
+ i++;
+ }
+
+ document.Range(start.Range.Start, end.Range.End).Select();
+ return true;
+ }
+ return false;
+ }
+
+ ///
+ /// Returns true if a paragraph is either a time stamp line
+ /// or a paragraph with laboratory items.
+ ///
+ ///
+ ///
+ private static bool IsLabParagraph(Paragraph paragraph)
+ {
+ string text = paragraph.Range.Text;
+ return (LaurisParagraph.ResemblesLaurisParagraph(text)
+ || LaurisTimePoint.IsTimeStampLine(text));
+ }
+ }
+}
diff --git a/zaaReloaded2/Ribbon.cs b/zaaReloaded2/Ribbon.cs
index a556054..7408777 100755
--- a/zaaReloaded2/Ribbon.cs
+++ b/zaaReloaded2/Ribbon.cs
@@ -16,12 +16,9 @@
* limitations under the License.
*/
using System;
-using System.Collections.Generic;
using System.IO;
-using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
-using System.Text;
using System.Windows;
using System.Drawing;
using System.Windows.Resources;
@@ -33,7 +30,6 @@ using zaaReloaded2.Formatter;
using zaaReloaded2.Controller;
using Word = Microsoft.Office.Interop.Word;
using Bovender.Mvvm.Actions;
-using Bovender.Mvvm.Messaging;
// TODO: Follow these steps to enable the Ribbon (XML) item:
@@ -166,9 +162,10 @@ namespace zaaReloaded2
///
public bool CanFormat(Office.IRibbonControl control)
{
- Word.Selection s = Globals.ThisAddIn.Application.ActiveWindow.Selection;
- return s.Paragraphs.Count > 1 ||
- (s.Text.Length > 1 && s.Text.EndsWith("\r"));
+ return Globals.ThisAddIn.Application.ActiveDocument != null;
+ //Word.Selection s = Globals.ThisAddIn.Application.ActiveWindow.Selection;
+ //return s.Paragraphs.Count > 1 ||
+ // (s.Text.Length > 1 && s.Text.EndsWith("\r"));
}
#endregion
@@ -177,6 +174,24 @@ namespace zaaReloaded2
void DoFormat()
{
+ // If no "real" selection exists, attempt to auto-detect the lab data.
+ // (NB Technically, there is never _no_ selection in a document.)
+ Word.Window activeWindow = Globals.ThisAddIn.Application.ActiveWindow;
+ Word.Selection sel = activeWindow.Selection;
+ if (!(sel.Paragraphs.Count > 1
+ || (sel.Text.Length > 1 && sel.Text.EndsWith("\r"))))
+ {
+ if (!AutoDetect.Detect(activeWindow.Document))
+ {
+ NotificationAction a = new NotificationAction();
+ a.Caption = "Formatieren nicht möglich";
+ a.Message = "Das Dokument scheint keine Lauris-Labordaten zu enthalten.";
+ a.OkButtonLabel = "Schließen";
+ a.Invoke();
+ return;
+ }
+ }
+
if (CanFormat(null))
{
SettingsRepository repository = SettingsRepository.Load();
diff --git a/zaaReloaded2/zaaReloaded2.csproj b/zaaReloaded2/zaaReloaded2.csproj
index bfdc26d..66f0c5c 100755
--- a/zaaReloaded2/zaaReloaded2.csproj
+++ b/zaaReloaded2/zaaReloaded2.csproj
@@ -192,7 +192,7 @@
can be found.
-->
-
+