X-Git-Url: http://git.euphorik.ch/?p=master-thesis.git;a=blobdiff_plain;f=Parasitemia%2FParasitemia%2FGUI%2FGUI.fs;h=65c3cdc561648022c7003f6ac220aaae0768fcb1;hp=2132363b1a7cda6378803185d4e0a11445084c1b;hb=05be8164d308447b916544ae3ce4211500dfd8da;hpb=be36fca8c64100b448f268077bcb0726e19f05f7 diff --git a/Parasitemia/Parasitemia/GUI/GUI.fs b/Parasitemia/Parasitemia/GUI/GUI.fs index 2132363..65c3cdc 100644 --- a/Parasitemia/Parasitemia/GUI/GUI.fs +++ b/Parasitemia/Parasitemia/GUI/GUI.fs @@ -61,7 +61,6 @@ let run (defaultConfig: Config) = let y = rbc.center.Y - rbcHeight / 2. |> Utils.roundInt let w = Utils.roundInt rbcWidth let h = Utils.roundInt rbcHeight - //Utils.dprintfn "w: %A, h: %A, cx: %A, cy: %A, img.w: %A, img.h: %A" w h x y img.Width img.Height img.GetSubRect(System.Drawing.Rectangle(System.Drawing.Point((if x < 0 then 0 else x), (if y < 0 then 0 else y)), 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)))) @@ -115,8 +114,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)) @@ -126,6 +124,31 @@ let run (defaultConfig: Config) = let updateGlobalParasitemia () = txtGlobalParasitemia.Text <- parasitemiaText state.GlobalParasitemia + let updateViewportPreview () = + for preview in stackPreviews.Children |> Seq.cast do + let srcImg = preview.Tag :?> SourceImage + if Some srcImg = state.CurrentImage then + preview.viewport.Visibility <- Visibility.Visible + + let canvasWidth = canvasCurrentImage.ActualWidth * currentScale + let canvasHeight = canvasCurrentImage.ActualHeight * currentScale + let previewWidth = (preview.ActualWidth - preview.BorderThickness.Left - preview.BorderThickness.Right) + let previewHeight = (preview.ActualHeight - preview.BorderThickness.Top - preview.BorderThickness.Bottom) + + let marginLeft = previewWidth * (scrollViewCurrentImage.HorizontalOffset - borderCurrentImage.BorderThickness.Left) / canvasWidth - 2. + let marginRight = previewWidth * (canvasWidth - (scrollViewCurrentImage.HorizontalOffset - borderCurrentImage.BorderThickness.Right) - scrollViewCurrentImage.ViewportWidth) / canvasWidth - 2. + let marginTop = previewHeight * (scrollViewCurrentImage.VerticalOffset - borderCurrentImage.BorderThickness.Top) / canvasHeight - 2. + let marginBottom = previewHeight * (canvasHeight - (scrollViewCurrentImage.VerticalOffset - borderCurrentImage.BorderThickness.Bottom) - scrollViewCurrentImage.ViewportHeight) / canvasHeight - 2. + + preview.viewport.Margin <- + Thickness( + marginLeft, + marginTop, + marginRight, + marginBottom) + else + preview.viewport.Visibility <- Visibility.Hidden + let rec setAsInfected (rbc: RBC) (infected: bool) = state.SetAsInfected rbc infected canvasCurrentImage.Children @@ -140,23 +163,24 @@ let run (defaultConfig: Config) = updateGlobalParasitemia () and RBCFrame (rbc: RBC) : Views.RBCFrame = - let f = RBCFrameFromExisting rbc (Views.RBCFrame()) - f.menuRBCSetAsHealthy.Click.AddHandler(fun obj args -> setAsInfected (f.Tag :?> RBC) false) - f.menuRBCSetAsInfected.Click.AddHandler(fun obj args -> setAsInfected (f.Tag :?> RBC) true) - f.ContextMenuOpening.AddHandler( + let frame = RBCFrameFromExisting 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.ContextMenuOpening.AddHandler( fun obj args -> - if (f.Tag :?> RBC).infected + if (frame.Tag :?> RBC).infected then - f.menuRBCSetAsHealthy.Visibility <- Visibility.Visible - f.menuRBCSetAsInfected.Visibility <- Visibility.Collapsed + frame.menuRBCSetAsHealthy.Visibility <- Visibility.Visible + frame.menuRBCSetAsInfected.Visibility <- Visibility.Collapsed else - f.menuRBCSetAsHealthy.Visibility <- Visibility.Collapsed - f.menuRBCSetAsInfected.Visibility <- Visibility.Visible) + frame.menuRBCSetAsHealthy.Visibility <- Visibility.Collapsed + frame.menuRBCSetAsInfected.Visibility <- Visibility.Visible) - f.ContextMenuClosing.AddHandler(fun obj args -> if not f.IsMouseOver then highlightRBCFrame f false ) - f.MouseEnter.AddHandler(fun obj args -> highlightRBCFrame f true) - f.MouseLeave.AddHandler(fun obj args -> if not f.grid.ContextMenu.IsOpen then highlightRBCFrame f false) - f + frame.ContextMenuClosing.AddHandler(fun obj args -> if not frame.IsMouseOver then highlightRBCFrame frame false ) + frame.MouseEnter.AddHandler(fun obj args -> highlightRBCFrame frame true) + frame.MouseLeave.AddHandler(fun obj args -> if not frame.grid.ContextMenu.IsOpen then highlightRBCFrame frame false) + frame and updateRBCFramesPreview () = match state.CurrentImage with @@ -182,6 +206,8 @@ let run (defaultConfig: Config) = stackRBC.Children.RemoveRange(currentPreview, stackRBC.Children.Count - currentPreview) | _ -> () + updateViewportPreview () + let updateRBCFramesCurrent () = match state.CurrentImage with | Some srcImg -> @@ -193,6 +219,7 @@ let run (defaultConfig: Config) = RBCFrameFromExisting rbc (canvasCurrentImage.Children.[currentCanvas] :?> Views.RBCFrame) else let f = RBCFrame rbc + f.Root.Opacity <- 0.7 canvasCurrentImage.Children.Add(f) |> ignore f @@ -251,31 +278,6 @@ let run (defaultConfig: Config) = state.CurrentImage <- Some srcImg updateCurrentImage () - let updateViewportPreview () = - for preview in stackPreviews.Children |> Seq.cast do - let srcImg = preview.Tag :?> SourceImage - if Some srcImg = state.CurrentImage then - preview.viewport.Visibility <- Visibility.Visible - - let canvasWidth = canvasCurrentImage.ActualWidth * currentScale - let canvasHeight = canvasCurrentImage.ActualHeight * currentScale - let previewWidth = (preview.ActualWidth - preview.BorderThickness.Left - preview.BorderThickness.Right) - let previewHeight = (preview.ActualHeight - preview.BorderThickness.Top - preview.BorderThickness.Bottom) - - let marginLeft = previewWidth * (scrollViewCurrentImage.HorizontalOffset - borderCurrentImage.BorderThickness.Left) / canvasWidth - 2. - let marginRight = previewWidth * (canvasWidth - (scrollViewCurrentImage.HorizontalOffset - borderCurrentImage.BorderThickness.Right) - scrollViewCurrentImage.ViewportWidth) / canvasWidth - 2. - let marginTop = previewHeight * (scrollViewCurrentImage.VerticalOffset - borderCurrentImage.BorderThickness.Top) / canvasHeight - 2. - let marginBottom = previewHeight * (canvasHeight - (scrollViewCurrentImage.VerticalOffset - borderCurrentImage.BorderThickness.Bottom) - scrollViewCurrentImage.ViewportHeight) / canvasHeight - 2. - - preview.viewport.Margin <- - Thickness( - marginLeft, - marginTop, - marginRight, - marginBottom) - else - preview.viewport.Visibility <- Visibility.Hidden - let addPreview (srcImg: SourceImage) = let imgCtrl = Views.ImageSourcePreview(Margin = Thickness(3.)) @@ -321,7 +323,6 @@ let run (defaultConfig: Config) = then imgCtrl.ReleaseMouseCapture()) - let updatePreviews () = stackPreviews.Children.Clear () for srcImg in state.SourceImages do @@ -333,7 +334,7 @@ let run (defaultConfig: Config) = updatePreviews () updateGlobalParasitemia () - txtPatient.TextChanged.AddHandler(fun obj args -> state.PatientID <- txtPatient.Text) + txtPatient.LostFocus.AddHandler(fun obj args -> state.PatientID <- txtPatient.Text) menuExit.Click.AddHandler(fun obj args -> askSaveCurrent () @@ -362,7 +363,7 @@ 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 @@ -370,7 +371,7 @@ let run (defaultConfig: Config) = updateCurrentImage ()) menuStartAnalysis.Click.AddHandler(fun obj args -> - if Analysis.showWindow mainWindow.Root state defaultConfig + if Analysis.showWindow mainWindow.Root state then updateGlobalParasitemia () updateCurrentImage ())