Add an option to change the brightness of the highlight box color (healthy/infected...
[master-thesis.git] / Parasitemia / ParasitemiaUI / GUI.fs
index 921654a..2ff3116 100644 (file)
@@ -24,9 +24,6 @@ let run (defaultConfig: Config) (fileToOpen: string option) =
     let mainWindow = Views.MainWindow()
     let ctrl (name: string): 'a = mainWindow.Root.FindName(name) :?> 'a
 
-    let colorRBCHealthy = Brushes.YellowGreen
-    let colorRBCInfected = Brushes.Red
-
     let state = State.State()
     let mutable currentScale = 1.
     let mutable displayHealthy = false
@@ -60,7 +57,10 @@ let run (defaultConfig: Config) (fileToOpen: string option) =
     let scrollRBC: ScrollViewer = ctrl "scrollRBC"
     let stackRBC: StackPanel = ctrl "stackRBC"
 
+    let imgLogos: Border = ctrl "imgLogos"
+
     // Initializations.
+    let canvasCurrentImageColor = canvasCurrentImage.Background
     menuHightlightRBC.IsChecked <- displayHealthy
 
     // Utils.
@@ -75,19 +75,19 @@ let run (defaultConfig: Config) (fileToOpen: string option) =
                                                 System.Drawing.Size((if x + w >= img.Width then img.Width - x else w),
                                                                     (if y + h >= img.Height then img.Height - y else h))))
 
-    let setRBCFrameStyle (rbc: RBC) (frame: Views.RBCFrame) =
+    let setRBCFrameStyle (srcImg: SourceImage) (rbc: RBC) (frame: Views.RBCFrame) =
         frame.Opacity <- if displayHealthy || rbc.setManually || rbc.infected then 1. else 0.
-        let color = if rbc.infected then colorRBCInfected else colorRBCHealthy
+        let color = if rbc.infected then srcImg.InfectedRBCColor else srcImg.HealthyRBCColor
         frame.manuallyAdded.Visibility <- if rbc.setManually then Visibility.Visible else Visibility.Hidden
         frame.manuallyAdded.Fill <- color
         frame.border.Stroke <- color
 
-    let RBCFrameFromExisting (rbc: RBC) (frame: Views.RBCFrame) : Views.RBCFrame =
+    let RBCFrameFromExisting (srcImg: SourceImage) (rbc: RBC) (frame: Views.RBCFrame) : Views.RBCFrame =
         frame.Visibility <- Visibility.Visible
         frame.Height <- rbc.size.Height
         frame.Width <- rbc.size.Width
         frame.Tag <- rbc
-        setRBCFrameStyle rbc frame
+        setRBCFrameStyle srcImg rbc frame
         frame.border.StrokeThickness <- 1.
         frame.txtRBCNumber.Text <- rbc.num.ToString()
         frame
@@ -126,10 +126,12 @@ let run (defaultConfig: Config) (fileToOpen: string option) =
             sprintf "%.1f %% (%d / %d)" percent nb nbTotal
 
     let updateCurrentImageInformation () =
+        txtImageInformation1.Inlines.Clear()
+        txtImageInformation2.Inlines.Clear()
+
         match state.CurrentImage with
         | Some srcImg ->
             let parasitemiaStr = percentText (state.ImageParasitemia srcImg)
-            txtImageInformation1.Inlines.Clear()
             txtImageInformation1.Inlines.Add(Documents.Run("Parasitemia: ", FontWeight = FontWeights.Bold))
             txtImageInformation1.Inlines.Add(parasitemiaStr)
             txtImageInformation1.Inlines.Add(Documents.LineBreak())
@@ -137,7 +139,6 @@ let run (defaultConfig: Config) (fileToOpen: string option) =
             txtImageInformation1.Inlines.Add(Documents.Run("Last analysis: ", FontWeight = FontWeights.Bold))
             txtImageInformation1.Inlines.Add(Documents.Run(if srcImg.dateLastAnalysis.Ticks = 0L then "<Never>" else srcImg.dateLastAnalysis.ToLocalTime().ToString()))
 
-            txtImageInformation2.Inlines.Clear()
             let alteredStr = percentText (state.ImageNbAltered srcImg)
             txtImageInformation2.Inlines.Add(Documents.Run("Number of erytrocytes manually altered: ", FontWeight = FontWeights.Bold))
             txtImageInformation2.Inlines.Add(Documents.Run(alteredStr))
@@ -175,7 +176,7 @@ let run (defaultConfig: Config) (fileToOpen: string option) =
             else
                 preview.viewport.Visibility <- Visibility.Hidden
 
-    let rec setAsInfected (rbc: RBC) (infected: bool) =
+    let rec setAsInfected (srcImg: SourceImage) (rbc: RBC) (infected: bool) =
         state.SetAsInfected rbc infected
         canvasCurrentImage.Children
         |> Seq.cast<Views.RBCFrame>
@@ -183,16 +184,16 @@ let run (defaultConfig: Config) (fileToOpen: string option) =
             (fun frame ->
                 if (frame.Tag :?> RBC) = rbc
                 then
-                    setRBCFrameStyle rbc frame)
+                    setRBCFrameStyle srcImg rbc frame)
         updateRBCFramesPreview ()
         updateCurrentImageInformation ()
         updateGlobalParasitemia ()
 
-    and RBCFrame (rbc: RBC) : Views.RBCFrame =
-        let frame = RBCFrameFromExisting rbc (Views.RBCFrame())
+    and RBCFrame (srcImg: SourceImage) (rbc: RBC) : Views.RBCFrame =
+        let frame = RBCFrameFromExisting srcImg rbc (Views.RBCFrame())
         frame.SetValue(Panel.ZIndexProperty, Int32.MaxValue - rbc.num) // To be sure the
-        frame.menuRBCSetAsHealthy.Click.AddHandler(fun obj args -> setAsInfected (frame.Tag :?> RBC) false)
-        frame.menuRBCSetAsInfected.Click.AddHandler(fun obj args -> setAsInfected (frame.Tag :?> RBC) true)
+        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)
         frame.ContextMenuOpening.AddHandler(
             fun obj args ->
                 if (frame.Tag :?> RBC).infected
@@ -216,9 +217,9 @@ let run (defaultConfig: Config) (fileToOpen: string option) =
                 let previewInfected =
                     if currentPreview < stackRBC.Children.Count
                     then
-                        RBCFrameFromExisting rbc (stackRBC.Children.[currentPreview] :?> Views.RBCFrame)
+                        RBCFrameFromExisting srcImg rbc (stackRBC.Children.[currentPreview] :?> Views.RBCFrame)
                     else
-                        let f = RBCFrame rbc
+                        let f = RBCFrame srcImg rbc
                         f.MouseLeftButtonUp.AddHandler(fun obj args -> zoomToRBC (f.Tag :?> RBC))
                         stackRBC.Children.Add(f) |> ignore
                         f
@@ -242,9 +243,9 @@ let run (defaultConfig: Config) (fileToOpen: string option) =
                 let frame =
                     if currentCanvas < canvasCurrentImage.Children.Count
                     then
-                        RBCFrameFromExisting rbc (canvasCurrentImage.Children.[currentCanvas] :?> Views.RBCFrame)
+                        RBCFrameFromExisting srcImg rbc (canvasCurrentImage.Children.[currentCanvas] :?> Views.RBCFrame)
                     else
-                        let f = RBCFrame rbc
+                        let f = RBCFrame srcImg rbc
                         f.Root.Opacity <- 0.7
                         canvasCurrentImage.Children.Add(f) |> ignore
                         f
@@ -310,6 +311,8 @@ let run (defaultConfig: Config) (fileToOpen: string option) =
     let updateCurrentImage () =
         match state.CurrentImage with
         | Some srcImg ->
+            imgLogos.Visibility <- Visibility.Collapsed
+
             // Highlight the preview.
             stackPreviews.Children
             |> Seq.cast<Views.ImageSourcePreview>
@@ -321,11 +324,15 @@ let run (defaultConfig: Config) (fileToOpen: string option) =
 
             updateRBCFramesCurrent ()
             updateRBCFramesPreview ()
-            updateCurrentImageInformation ()
+
         | None ->
+            imgLogos.Visibility <- Visibility.Visible
+
             stackRBC.Children.Clear()
             canvasCurrentImage.Children.Clear()
-            canvasCurrentImage.Background <- Brushes.Black
+            canvasCurrentImage.Background <- canvasCurrentImageColor
+
+        updateCurrentImageInformation ()
 
     let setCurrentImage (srcImg: SourceImage) =
         if state.CurrentImage.IsNone || state.CurrentImage.Value <> srcImg
@@ -583,4 +590,4 @@ let run (defaultConfig: Config) (fileToOpen: string option) =
     | Some filepath -> loadFile filepath
     | None -> ()
 
-    app.Run()
\ No newline at end of file
+    app.Run()