To .NET 5 (lot of refactoring)
[master-thesis.git] / Parasitemia / ParasitemiaUI / GUI.fs
index f305687..83e54c2 100644 (file)
@@ -5,23 +5,19 @@ open System.IO
 open System.Linq
 open System.Windows
 open System.Windows.Media
-open System.Windows.Markup
-open System.Windows.Shapes
 open System.Windows.Controls
-open System.Diagnostics
 open Microsoft.Win32 // For the common dialogs.
 
-open Emgu.CV.WPF
-
 open Logger
 
+open ParasitemiaUIControls
 open ParasitemiaCore.Config
 open ParasitemiaCore.Utils
 open Types
 
 let run (defaultConfig : Config) (fileToOpen : string option) =
     let app = new Application ()
-    let win = Views.MainWindow ()
+    let win = MainWindow ()
 
     let state = State.State defaultConfig
     let mutable currentScale = 1.
@@ -47,7 +43,7 @@ let run (defaultConfig : Config) (fileToOpen : string option) =
             )
         )
 
-    let setRBCFrameStyle (srcImg : SourceImage) (rbc : RBC) (frame : Views.RBCFrame) =
+    let setRBCFrameStyle (srcImg : SourceImage) (rbc : RBC) (frame : RBCFrame) =
         frame.Opacity <- if displayHealthy || rbc.setManually || rbc.infected then 1. else 0.
         let color = if rbc.infected then srcImg.InfectedRBCColor else srcImg.HealthyRBCColor
         frame.manuallyAdded.Visibility <- if rbc.setManually then Visibility.Visible else Visibility.Hidden
@@ -60,7 +56,7 @@ let run (defaultConfig : Config) (fileToOpen : string option) =
     let frameFontSize (averageRBCSize : float) =
         max 1. (averageRBCSize / 8.)
 
-    let RBCFrameFromExisting (srcImg : SourceImage) (rbc : RBC) (frame : Views.RBCFrame) (frameThickness : float) (fontSize : float) : Views.RBCFrame =
+    let createRBCFrameFromExisting (srcImg : SourceImage) (rbc : RBC) (frame : RBCFrame) (frameThickness : float) (fontSize : float) : RBCFrame =
         frame.Visibility <- Visibility.Visible
         frame.Width <- rbc.size.Width
         frame.Height <- rbc.size.Height
@@ -84,7 +80,7 @@ let run (defaultConfig : Config) (fileToOpen : string option) =
         statusMessageTimer.Stop ()
         statusMessageTimer.Start ()
 
-    let highlightRBCFrame (frame : Views.RBCFrame) (highlight : bool) =
+    let highlightRBCFrame (frame : RBCFrame) (highlight : bool) =
         let rbc = frame.Tag :?> RBC
         if highlight then
             frame.border.StrokeThickness <- 3. * frame.border.StrokeThickness
@@ -145,7 +141,7 @@ let run (defaultConfig : Config) (fileToOpen : string option) =
             )
 
     let updateViewportPreview () =
-        for preview in win.stackPreviews.Children |> Seq.cast<Views.ImageSourcePreview> do
+        for preview in win.stackPreviews.Children |> Seq.cast<ImageSourcePreview> do
             let srcImg = preview.Tag :?> SourceImage
             if Some srcImg = state.CurrentImage then
                 preview.viewport.Visibility <- Visibility.Visible
@@ -173,7 +169,7 @@ let run (defaultConfig : Config) (fileToOpen : string option) =
     let rec setAsInfected (srcImg : SourceImage) (rbc : RBC) (infected : bool) =
         state.SetAsInfected rbc infected
         win.canvasCurrentImage.Children
-        |> Seq.cast<Views.RBCFrame>
+        |> Seq.cast<RBCFrame>
         |> Seq.iter (
             fun frame ->
                 if (frame.Tag :?> RBC) = rbc then
@@ -183,8 +179,8 @@ let run (defaultConfig : Config) (fileToOpen : string option) =
         updateCurrentImageInformation ()
         updateGlobalParasitemia ()
 
-    and RBCFrame (srcImg : SourceImage) (rbc : RBC) (frameThickness : float) (fontSize : float) : Views.RBCFrame =
-        let frame = RBCFrameFromExisting srcImg rbc (Views.RBCFrame ()) frameThickness fontSize
+    and createRBCFrame (srcImg : SourceImage) (rbc : RBC) (frameThickness : float) (fontSize : float) : RBCFrame =
+        let frame = createRBCFrameFromExisting srcImg rbc (RBCFrame ()) frameThickness fontSize
         frame.SetValue (Panel.ZIndexProperty, Int32.MaxValue - rbc.num) // To be sure the
         frame.menuRBCSetAsHealthy.Click.AddHandler (fun obj args -> setAsInfected srcImg (frame.Tag :?> RBC) false)
         frame.menuRBCSetAsInfected.Click.AddHandler (fun obj args -> setAsInfected srcImg (frame.Tag :?> RBC) true)
@@ -209,9 +205,9 @@ let run (defaultConfig : Config) (fileToOpen : string option) =
             for rbc in srcImg.RBCs |> List.filter (fun rbc -> displayHealthy || rbc.infected) do
                 let previewInfected =
                     if currentPreview < win.stackRBC.Children.Count then
-                        RBCFrameFromExisting srcImg rbc (win.stackRBC.Children.[currentPreview] :?> Views.RBCFrame) 1. 12.
+                        createRBCFrameFromExisting srcImg rbc (win.stackRBC.Children.[currentPreview] :?> RBCFrame) 1. 12.
                     else
-                        let f = RBCFrame srcImg rbc 1. 12.
+                        let f = createRBCFrame srcImg rbc 1. 12.
                         f.MouseLeftButtonUp.AddHandler (fun obj args -> zoomToRBC (f.Tag :?> RBC))
                         win.stackRBC.Children.Add f |> ignore
                         f
@@ -236,9 +232,9 @@ let run (defaultConfig : Config) (fileToOpen : string option) =
             for rbc in srcImg.RBCs do
                 let frame =
                     if currentCanvas < win.canvasCurrentImage.Children.Count then
-                        RBCFrameFromExisting srcImg rbc (win.canvasCurrentImage.Children.[currentCanvas] :?> Views.RBCFrame) strokeThickness fontSize
+                        createRBCFrameFromExisting srcImg rbc (win.canvasCurrentImage.Children.[currentCanvas] :?> RBCFrame) strokeThickness fontSize
                     else
-                        let f = RBCFrame srcImg rbc strokeThickness fontSize
+                        let f = createRBCFrame srcImg rbc strokeThickness fontSize
                         win.canvasCurrentImage.Children.Add f |> ignore
                         f
 
@@ -303,7 +299,7 @@ let run (defaultConfig : Config) (fileToOpen : string option) =
 
             // Highlight the preview.
             win.stackPreviews.Children
-            |> Seq.cast<Views.ImageSourcePreview>
+            |> Seq.cast<ImageSourcePreview>
             |> Seq.iter (fun preview -> preview.border.BorderThickness <- Thickness (if preview.Tag = (srcImg :> Object) then 3. else 0.))
 
             win.canvasCurrentImage.Height <- float srcImg.Img.Height
@@ -328,7 +324,7 @@ let run (defaultConfig : Config) (fileToOpen : string option) =
             updateCurrentImage ()
 
     let addPreview (srcImg : SourceImage) =
-        let imgCtrl = Views.ImageSourcePreview (Margin = Thickness 3.)
+        let imgCtrl = ImageSourcePreview (Margin = Thickness 3.)
 
         imgCtrl.menuRemoveImage.Click.AddHandler (
             fun obj args ->
@@ -342,7 +338,7 @@ let run (defaultConfig : Config) (fileToOpen : string option) =
                 updateGlobalParasitemia ()
 
                 // Update image numbers.
-                win.stackPreviews.Children |> Seq.cast<Views.ImageSourcePreview> |> Seq.iter (fun imgPreview -> imgPreview.txtImageNumber.Text <- (imgPreview.Tag :?> SourceImage).RomanNum)
+                win.stackPreviews.Children |> Seq.cast<ImageSourcePreview> |> Seq.iter (fun imgPreview -> imgPreview.txtImageNumber.Text <- (imgPreview.Tag :?> SourceImage).RomanNum)
         )
 
         imgCtrl.Tag <- srcImg