/// <summary> /// A new marker associated with a counter control has been created /// Increment the counter and add the marker to all data structures (including the database) /// </summary> private void MarkableCanvas_AddMarker(DataEntryCounter counter, Marker marker) { // increment the counter to reflect the new marker int count; if (Int32.TryParse(counter.Content, out count) == false) { // if the current value's not parseable assume that // 1) the default value is set to a non-integer in the template // 2) or it's a space // In either case, revert to zero. count = 0; } ++count; string counterContent = count.ToString(); this.dataHandler.IsProgrammaticControlUpdate = true; this.dataHandler.FileDatabase.UpdateFile(this.dataHandler.ImageCache.Current.ID, counter.DataLabel, counterContent); counter.SetContentAndTooltip(counterContent); this.dataHandler.IsProgrammaticControlUpdate = false; // Find markers associated with this particular control MarkersForCounter markersForCounter = null; foreach (MarkersForCounter markers in this.markersOnCurrentFile) { if (markers.DataLabel == counter.DataLabel) { markersForCounter = markers; break; } } // fill in marker information marker.ShowLabel = true; // show label on creation, cleared on next refresh marker.LabelShownPreviously = false; marker.Brush = Brushes.Red; // Make it Red (for now) marker.DataLabel = counter.DataLabel; marker.Tooltip = counter.Label; // The tooltip will be the counter label plus its data label marker.Tooltip += "\n" + counter.DataLabel; markersForCounter.AddMarker(marker); // update this counter's list of points in the database this.dataHandler.FileDatabase.SetMarkerPositions(this.dataHandler.ImageCache.Current.ID, markersForCounter); this.MarkableCanvas.Markers = this.GetDisplayMarkers(true); this.Speak(counter.Content + " " + counter.Label); // Speak the current count }
public MarkerEventArgs(Marker marker, bool isNew) { this.Marker = marker; this.IsNew = isNew; }
public void RemoveMarker(Marker marker) { int index = this.Markers.IndexOf(marker); Debug.Assert(index != -1, "Expected marker to be present in list."); this.Markers.RemoveAt(index); }
public void AddMarker(Marker marker) { this.Markers.Add(marker); }
private void ImageOrCanvas_MouseUp(object sender, MouseButtonEventArgs e) { // Make sure the cursor reverts to the normal arrow cursor this.Cursor = Cursors.Arrow; // Get the current position Point mousePosition = e.GetPosition(this.ImageToDisplay); // Is this the end of a translate operation or of placing a maker? // Create a marker if the left button has been released, the mouse movement is below threshold, and less than 200 ms have passed since the original // mouse down. if ((e.LeftButton == MouseButtonState.Released) && (sender == this.mouseDownSender) && (this.mouseDownLocation - mousePosition).Length <= 2.0) { TimeSpan timeSinceDown = DateTime.UtcNow - this.mouseDownTime; if (timeSinceDown.TotalMilliseconds < 200) { // Get the current point, and create a marker on it. Point position = e.GetPosition(this.ImageToDisplay); position = Marker.ConvertPointToRatio(position, this.ImageToDisplay.ActualWidth, this.ImageToDisplay.ActualHeight); Marker marker = new Marker(null, position); // don't add marker to the marker list // Main window is responsible for filling in remaining properties and adding it. this.SendMarkerEvent(new MarkerEventArgs(marker, true)); } } // show the magnifying glass again if it was hidden during a pan this.RedrawMagnifyingGlassIfVisible(); }
private Canvas DrawMarker(Marker marker, Size canvasRenderSize, bool imageToDisplayMarkers) { Canvas markerCanvas = new Canvas(); if (marker.Tooltip.Trim() == String.Empty) { markerCanvas.ToolTip = null; } else { markerCanvas.ToolTip = marker.Tooltip; } markerCanvas.Tag = marker; // Create a marker Ellipse mark = new Ellipse(); mark.Width = Constant.MarkableCanvas.MarkerDiameter; mark.Height = Constant.MarkableCanvas.MarkerDiameter; mark.Stroke = marker.Brush; mark.StrokeThickness = Constant.MarkableCanvas.MarkerStrokeThickness; mark.Fill = MarkableCanvas.MarkerFillBrush; markerCanvas.Children.Add(mark); // Draw another Ellipse as a black outline around it Ellipse blackOutline = new Ellipse(); blackOutline.Stroke = Brushes.Black; blackOutline.Width = mark.Width + 1; blackOutline.Height = mark.Height + 1; blackOutline.StrokeThickness = 1; markerCanvas.Children.Add(blackOutline); // And another Ellipse as a white outline around it Ellipse whiteOutline = new Ellipse(); whiteOutline.Stroke = Brushes.White; whiteOutline.Width = blackOutline.Width + 1; whiteOutline.Height = blackOutline.Height + 1; whiteOutline.StrokeThickness = 1; markerCanvas.Children.Add(whiteOutline); // maybe add emphasis double outerDiameter = whiteOutline.Width; Ellipse glow = null; if (marker.Emphasise) { glow = new Ellipse(); glow.Width = whiteOutline.Width + Constant.MarkableCanvas.MarkerGlowDiameterIncrease; glow.Height = whiteOutline.Height + Constant.MarkableCanvas.MarkerGlowDiameterIncrease; glow.StrokeThickness = Constant.MarkableCanvas.MarkerGlowStrokeThickness; glow.Stroke = mark.Stroke; glow.Opacity = Constant.MarkableCanvas.MarkerGlowOpacity; markerCanvas.Children.Add(glow); outerDiameter = glow.Width; } markerCanvas.Width = outerDiameter; markerCanvas.Height = outerDiameter; double position = (markerCanvas.Width - mark.Width) / 2.0; Canvas.SetLeft(mark, position); Canvas.SetTop(mark, position); position = (markerCanvas.Width - blackOutline.Width) / 2.0; Canvas.SetLeft(blackOutline, position); Canvas.SetTop(blackOutline, position); position = (markerCanvas.Width - whiteOutline.Width) / 2.0; Canvas.SetLeft(whiteOutline, position); Canvas.SetTop(whiteOutline, position); if (marker.Emphasise) { position = (markerCanvas.Width - glow.Width) / 2.0; Canvas.SetLeft(glow, position); Canvas.SetTop(glow, position); } if (marker.ShowLabel) { Label label = new Label(); label.Content = marker.Tooltip; label.Opacity = 0.6; label.Background = Brushes.White; label.Padding = new Thickness(0, 0, 0, 0); label.Margin = new Thickness(0, 0, 0, 0); markerCanvas.Children.Add(label); position = (markerCanvas.Width / 2.0) + (whiteOutline.Width / 2.0); Canvas.SetLeft(label, position); Canvas.SetTop(label, markerCanvas.Height / 2); } // Get the point from the marker, and convert it so that the marker will be in the right place Point screenPosition = Marker.ConvertRatioToPoint(marker.Position, canvasRenderSize.Width, canvasRenderSize.Height); if (imageToDisplayMarkers) { screenPosition = this.ImageToDisplay.RenderTransform.Transform(screenPosition); } Canvas.SetLeft(markerCanvas, screenPosition.X - markerCanvas.Width / 2.0); Canvas.SetTop(markerCanvas, screenPosition.Y - markerCanvas.Height / 2.0); Canvas.SetZIndex(markerCanvas, 0); markerCanvas.MouseDown += this.ImageOrCanvas_MouseDown; markerCanvas.MouseMove += this.MarkableCanvas_MouseMove; markerCanvas.MouseRightButtonUp += this.Marker_MouseRightButtonUp; markerCanvas.MouseUp += this.ImageOrCanvas_MouseUp; markerCanvas.MouseWheel += this.ImageOrCanvas_MouseWheel; // Make the mouse wheel work over marks as well as the image return markerCanvas; }