* Add an exact method to compute an ellipse from three points and two tangents.
[master-thesis.git] / Parasitemia / Parasitemia / GUI / GUI.fs
index a7bed54..8c57e20 100644 (file)
@@ -16,7 +16,7 @@ open Emgu.CV.WPF
 open Config
 open Types
 
-let run (defaultConfig: Config) =
+let run (defaultConfig: Config) (fileToOpen: string option) =
     let app = new Application()
     let mainWindow = Views.MainWindow()
     let ctrl (name: string): 'a =
@@ -34,7 +34,9 @@ let run (defaultConfig: Config) =
     let menuLoadFile: MenuItem = ctrl "menuOpen"
     let menuNewFile: MenuItem = ctrl "menuNew"
     let menuAddSourceImage: MenuItem = ctrl "menuAddSourceImage"
+    let menuAnalysis: MenuItem = ctrl "menuAnalysis"
     let menuStartAnalysis: MenuItem = ctrl "menuStartAnalysis"
+    let menuView: MenuItem = ctrl "menuView"
     let menuHightlightRBC: MenuItem = ctrl "menuHightlightRBC"
 
     let txtPatient: TextBox = ctrl "txtPatient"
@@ -114,8 +116,7 @@ let run (defaultConfig: Config) =
             txtImageInformation.Inlines.Add(Documents.LineBreak())
 
             txtImageInformation.Inlines.Add(Documents.Run("Average erytrocyte diameter: ", FontWeight = FontWeights.Bold))
-            txtImageInformation.Inlines.Add(Documents.Run(string (Utils.roundInt <| 2. * srcImg.rbcRadius)))
-            txtImageInformation.Inlines.Add(Documents.Run(" px"))
+            txtImageInformation.Inlines.Add(Documents.Run(srcImg.config.RBCRadius.ToString()))
             txtImageInformation.Inlines.Add(Documents.LineBreak())
 
             txtImageInformation.Inlines.Add(Documents.Run("Last analysis: ", FontWeight = FontWeights.Bold))
@@ -324,7 +325,6 @@ let run (defaultConfig: Config) =
             then
                 imgCtrl.ReleaseMouseCapture())
 
-
     let updatePreviews () =
         stackPreviews.Children.Clear ()
         for srcImg in state.SourceImages do
@@ -336,7 +336,13 @@ let run (defaultConfig: Config) =
         updatePreviews ()
         updateGlobalParasitemia ()
 
-    txtPatient.TextChanged.AddHandler(fun obj args -> state.PatientID <- txtPatient.Text)
+    let loadFile (filepath: string) =
+        askSaveCurrent ()
+        state.FilePath <- filepath
+        state.Load()
+        updateGUI ()
+
+    txtPatient.LostFocus.AddHandler(fun obj args -> state.PatientID <- txtPatient.Text)
 
     menuExit.Click.AddHandler(fun obj args ->
         askSaveCurrent ()
@@ -349,11 +355,7 @@ let run (defaultConfig: Config) =
         let dialog = OpenFileDialog(Filter = PiaZ.filter)
         let res = dialog.ShowDialog()
         if res.HasValue && res.Value
-        then
-            askSaveCurrent ()
-            state.FilePath <- dialog.FileName
-            state.Load()
-            updateGUI ())
+        then loadFile dialog.FileName)
 
     menuNewFile.Click.AddHandler(fun obj args ->
         askSaveCurrent ()
@@ -365,15 +367,18 @@ let run (defaultConfig: Config) =
         let res = dialog.ShowDialog()
         if res.HasValue && res.Value
         then
-            let srcImg = state.AddSourceImage(dialog.FileName)
+            let srcImg = state.AddSourceImage dialog.FileName defaultConfig
             addPreview srcImg
             updateGlobalParasitemia ()
             if state.SourceImages.Count() = 1
             then
                 updateCurrentImage ())
 
+
+    menuAnalysis.SubmenuOpened.AddHandler(fun obj args -> menuStartAnalysis.IsEnabled <- state.SourceImages.Count() > 0)
+
     menuStartAnalysis.Click.AddHandler(fun obj args ->
-        if Analysis.showWindow mainWindow.Root state defaultConfig
+        if Analysis.showWindow mainWindow.Root state
         then
             updateGlobalParasitemia ()
             updateCurrentImage ())
@@ -469,4 +474,9 @@ let run (defaultConfig: Config) =
     scrollViewCurrentImage.ScrollChanged.AddHandler(fun obj args -> updateViewportPreview ())
 
     mainWindow.Root.Show()
+
+    match fileToOpen with
+    | Some filepath -> loadFile filepath
+    | None -> ()
+
     app.Run()
\ No newline at end of file