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
let scrollRBC: ScrollViewer = ctrl "scrollRBC"
let stackRBC: StackPanel = ctrl "stackRBC"
+ let imgLogos: Border = ctrl "imgLogos"
+
// Initializations.
+ let canvasCurrentImageColor = canvasCurrentImage.Background
menuHightlightRBC.IsChecked <- displayHealthy
// Utils.
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
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())
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))
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>
(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
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
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
let updateCurrentImage () =
match state.CurrentImage with
| Some srcImg ->
+ imgLogos.Visibility <- Visibility.Collapsed
+
// Highlight the preview.
stackPreviews.Children
|> Seq.cast<Views.ImageSourcePreview>
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
| Some filepath -> loadFile filepath
| None -> ()
- app.Run()
\ No newline at end of file
+ app.Run()