public override void AwakeFromNib () { base.AwakeFromNib (); WantsLayer = true; Layer.BackgroundColor = new CGColor (1, 0, 0); trackingArea = new NSTrackingArea (Frame, NSTrackingAreaOptions.ActiveInKeyWindow | NSTrackingAreaOptions.MouseEnteredAndExited | NSTrackingAreaOptions.MouseMoved , this, null); this.AddTrackingArea (trackingArea); }
public StatusIcon (StatusBar bar) : base (CGRect.Empty) { imageView = new NSImageView (CGRect.Empty); AddSubview (imageView); var trackingArea = new NSTrackingArea (CGRect.Empty, NSTrackingAreaOptions.ActiveInKeyWindow | NSTrackingAreaOptions.InVisibleRect | NSTrackingAreaOptions.MouseEnteredAndExited, this, null); AddTrackingArea (trackingArea); this.bar = bar; }
protected override void CreateHandle () { m_helper = new PanelMouseView(); m_view = m_helper; m_helper.Host = this; trackingArea = new NSTrackingArea(m_helper.Frame,(NSTrackingAreaOptions.MouseEnteredAndExited | NSTrackingAreaOptions.MouseMoved | NSTrackingAreaOptions.ActiveInKeyWindow), m_helper,new NSDictionary()); m_helper.AddTrackingArea( trackingArea); }
public override void UpdateTrackingAreas () { if (trackingArea != null) { RemoveTrackingArea (trackingArea); trackingArea.Dispose (); } System.Drawing.RectangleF viewBounds = this.Bounds; var options = NSTrackingAreaOptions.MouseMoved | NSTrackingAreaOptions.ActiveInKeyWindow | NSTrackingAreaOptions.MouseEnteredAndExited; trackingArea = new NSTrackingArea (viewBounds, options, this, null); AddTrackingArea (trackingArea); }
private void Initialize() { // Add tracking area to receive mouse move and mouse dragged events var opts = NSTrackingAreaOptions.ActiveAlways | NSTrackingAreaOptions.InVisibleRect | NSTrackingAreaOptions.MouseMoved | NSTrackingAreaOptions.EnabledDuringMouseDrag; var trackingArea = new NSTrackingArea(Bounds, opts, this, new NSDictionary()); AddTrackingArea(trackingArea); _control = new CircularProgressBarControl(); _control.OnInvalidateVisual += () => InvokeOnMainThread(() => SetNeedsDisplayInRect(Bounds)); _control.OnInvalidateVisualInRect += (rect) => InvokeOnMainThread(() => SetNeedsDisplayInRect(GenericControlHelper.ToRect(rect))); }
private void Initialize() { // Add tracking area to receive mouse move and mouse dragged events var opts = NSTrackingAreaOptions.ActiveAlways | NSTrackingAreaOptions.InVisibleRect | NSTrackingAreaOptions.MouseMoved | NSTrackingAreaOptions.EnabledDuringMouseDrag; var trackingArea = new NSTrackingArea(Bounds, opts, this, new NSDictionary()); AddTrackingArea(trackingArea); _control = new FaderControl(); _control.OnFaderValueChanged += (sender, args) => { if (OnFaderValueChanged != null) OnFaderValueChanged(this, args); }; // TODO: Could these be moved inside a generic helper or something? _control.OnInvalidateVisual += () => InvokeOnMainThread(() => SetNeedsDisplayInRect(Bounds)); _control.OnInvalidateVisualInRect += (rect) => InvokeOnMainThread(() => SetNeedsDisplayInRect(GenericControlHelper.ToRect(rect))); }
private void Initialize() { WantsLayer = true; DoubleClick += (sender, e) => { }; MenuItemClicked += (menuItemType) => { }; // Add tracking area to receive mouse move and mouse dragged events var opts = NSTrackingAreaOptions.ActiveAlways | NSTrackingAreaOptions.InVisibleRect | NSTrackingAreaOptions.MouseMoved | NSTrackingAreaOptions.MouseEnteredAndExited | NSTrackingAreaOptions.EnabledDuringMouseDrag; var trackingArea = new NSTrackingArea(Bounds, opts, this, new NSDictionary()); AddTrackingArea(trackingArea); _horizontalScrollBar = new HorizontalScrollBarWrapper(); AddSubview(_horizontalScrollBar); _verticalScrollBar = new VerticalScrollBarWrapper(); AddSubview(_verticalScrollBar); var disposableImageFactory = Bootstrapper.GetContainer().Resolve<IDisposableImageFactory>(); _control = new SongGridViewControl(_horizontalScrollBar, _verticalScrollBar, disposableImageFactory); _control.OnChangeMouseCursorType += GenericControlHelper.ChangeMouseCursor; _control.OnItemDoubleClick += (id, index) => DoubleClick(this, new EventArgs()); _control.OnInvalidateVisual += () => InvokeOnMainThread(() => SetNeedsDisplayInRect(Bounds)); _control.OnInvalidateVisualInRect += (rect) => InvokeOnMainThread(() => SetNeedsDisplayInRect(GenericControlHelper.ToRect(rect))); _control.OnDisplayContextMenu += (contextMenuType, x, y) => { switch (contextMenuType) { case SongGridViewControl.ContextMenuType.Item: NSMenu.PopUpContextMenu(_menuItems, _rightClickEvent, this); break; case SongGridViewControl.ContextMenuType.Header: NSMenu.PopUpContextMenu(_menuHeader, _rightClickEvent, this); break; default: throw new ArgumentOutOfRangeException(); } }; SetFrame(); PostsBoundsChangedNotifications = true; NSNotificationCenter.DefaultCenter.AddObserver(NSView.FrameChangedNotification, FrameDidChangeNotification, this); CreateContextualMenu(); }
public StatusBar () { AllowsEditingTextAttributes = Selectable = Editable = false; textField.Cell = new VerticallyCenteredTextFieldCell (yOffset: -0.5f); textField.Cell.StringValue = ""; textField.Cell.PlaceholderAttributedString = GetStatusString (BrandingService.ApplicationName, NSColor.DisabledControlText); // The rect is empty because we use InVisibleRect to track the whole of the view. textFieldArea = new NSTrackingArea (CGRect.Empty, NSTrackingAreaOptions.MouseEnteredAndExited | NSTrackingAreaOptions.ActiveInKeyWindow | NSTrackingAreaOptions.InVisibleRect, this, null); textField.AddTrackingArea (textFieldArea); imageView.Image = ImageService.GetIcon (Stock.StatusSteady).ToNSImage (); buildResults = new BuildResultsView (); buildResults.Hidden = true; AddSubview (buildResults); // Fixes a render glitch of a whiter bg than the others. if (MacSystemInformation.OsVersion >= MacSystemInformation.Yosemite) BezelStyle = NSTextFieldBezelStyle.Rounded; WantsLayer = true; Layer.CornerRadius = MacSystemInformation.OsVersion >= MacSystemInformation.ElCapitan ? 6 : 4; ctxHandler = new StatusBarContextHandler (this); updateHandler = delegate { int ec = 0, wc = 0; foreach (var t in TaskService.Errors) { if (t.Severity == TaskSeverity.Error) ec++; else if (t.Severity == TaskSeverity.Warning) wc++; } Runtime.RunInMainThread (delegate { buildResults.Hidden = (ec == 0 && wc == 0); buildResults.ResultCount = ec > 0 ? ec : wc; buildImageId = ec > 0 ? "md-status-error-count" : "md-status-warning-count"; buildResults.IconImage = ImageService.GetIcon (buildImageId, Gtk.IconSize.Menu).ToNSImage (); RepositionStatusIcons (); }); }; updateHandler (null, null); TaskService.Errors.TasksAdded += updateHandler; TaskService.Errors.TasksRemoved += updateHandler; AddSubview (imageView); AddSubview (textField); }
// Shared initialization code void Initialize() { NSTrackingArea tracker = new NSTrackingArea (CoreGraphics.CGRect.Empty, NSTrackingAreaOptions.ActiveInActiveApp | NSTrackingAreaOptions.InVisibleRect | NSTrackingAreaOptions.MouseMoved, this, null); TranslatesAutoresizingMaskIntoConstraints = false; AddTrackingArea (tracker); overlay = new MapViewOverlay (); overlay.TranslatesAutoresizingMaskIntoConstraints = false; AddSubview (overlay); var viewsDict = new NSDictionary ("overlay", overlay); var constraints = NSLayoutConstraint.FromVisualFormat ("|[overlay]|", 0, null, viewsDict); AddConstraints (constraints); constraints = NSLayoutConstraint.FromVisualFormat ("V:|[overlay]|", 0, null, viewsDict); AddConstraints (constraints); }
public override void UpdateTrackingAreas() { System.Diagnostics.Debug.WriteLine("Update tracking area"); base.UpdateTrackingAreas(); if (_trackingArea != null) { RemoveTrackingArea(_trackingArea); } _trackingArea = new NSTrackingArea(Frame, NSTrackingAreaOptions.MouseMoved | NSTrackingAreaOptions.MouseEnteredAndExited | NSTrackingAreaOptions.ActiveAlways, this, null); AddTrackingArea(_trackingArea); ResetMouseClick(); }
public StatusBarIcon ShowStatusIcon (Xwt.Drawing.Image pixbuf) { nfloat right = layerToStatus.Count == 0 ? Layer.Frame.Width : Layer.Sublayers.Last (i => i.Name != null && i.Name.StartsWith (StatusIconPrefixId, StringComparison.Ordinal)).Frame.Left; right -= (nfloat)pixbuf.Width + 6; var layer = CALayer.Create (); layer.Name = StatusIconPrefixId + (++statusCounter); layer.Bounds = new CGRect (0, 0, (nfloat)pixbuf.Width, (nfloat)pixbuf.Height); layer.Frame = new CGRect (right, 3, (nfloat)pixbuf.Width, (nfloat)pixbuf.Height); var area = new NSTrackingArea (layer.Frame, NSTrackingAreaOptions.MouseEnteredAndExited | NSTrackingAreaOptions.ActiveInKeyWindow, this, null); AddTrackingArea (area); var statusIcon = new StatusIcon (this, layer, area) { Image = pixbuf, }; layerToStatus [layer.Name] = statusIcon; Layer.AddSublayer (layer); textField.SetFrameSize (new CGSize (right - 6 - textField.Frame.Left, Frame.Height)); return statusIcon; }
public StatusBar() { var nsa = (INSAccessibility)this; // Pretend that this button is a Group AccessibilityRole = NSAccessibilityRoles.GroupRole; nsa.AccessibilityIdentifier = "MainToolbar.StatusDisplay"; Cell = new ColoredButtonCell(); BezelStyle = NSBezelStyle.TexturedRounded; Title = ""; Enabled = false; LoadStyles(); // We don't need to resize the Statusbar here as a style change will trigger a complete relayout of the Awesomebar Ide.Gui.Styles.Changed += LoadStyles; textField.Cell = new VerticallyCenteredTextFieldCell(0f); textField.Cell.StringValue = ""; textField.AccessibilityRole = NSAccessibilityRoles.StaticTextRole; textField.AccessibilityEnabled = true; textField.AccessibilityHelp = GettextCatalog.GetString("Status of the current operation"); var tfNSA = (INSAccessibility)textField; tfNSA.AccessibilityIdentifier = "MainToolbar.StatusDisplay.Status"; UpdateApplicationNamePlaceholderText(); // The rect is empty because we use InVisibleRect to track the whole of the view. textFieldArea = new NSTrackingArea(CGRect.Empty, NSTrackingAreaOptions.MouseEnteredAndExited | NSTrackingAreaOptions.ActiveInKeyWindow | NSTrackingAreaOptions.InVisibleRect, this, null); textField.AddTrackingArea(textFieldArea); imageView.Frame = new CGRect(0.5, 0, 0, 0); imageView.Image = ImageService.GetIcon(Stock.StatusSteady).ToNSImage(); // Hide this image from accessibility imageView.AccessibilityElement = false; buildResults = new BuildResultsView(); buildResults.Hidden = true; cancelButton = new CancelButton(); cancelButton.Activated += (o, e) => { cts?.Cancel(); }; ctxHandler = new StatusBarContextHandler(this); updateHandler = delegate { int ec = 0, wc = 0; foreach (var t in TaskService.Errors) { if (t.Severity == TaskSeverity.Error) { ec++; } else if (t.Severity == TaskSeverity.Warning) { wc++; } } Runtime.RunInMainThread(delegate { buildResults.Hidden = (ec == 0 && wc == 0); buildResults.ResultCount = ec > 0 ? ec : wc; buildResults.Type = ec > 0 ? BuildResultsView.ResultsType.Error : BuildResultsView.ResultsType.Warning; buildImageId = ec > 0 ? "md-status-error-count" : "md-status-warning-count"; buildResults.IconImage = ImageService.GetIcon(buildImageId, Gtk.IconSize.Menu).ToNSImage(); RepositionStatusIcons(); }); }; updateHandler(null, null); TaskService.Errors.TasksAdded += updateHandler; TaskService.Errors.TasksRemoved += updateHandler; BrandingService.ApplicationNameChanged += ApplicationNameChanged; AddSubview(cancelButton); AddSubview(buildResults); AddSubview(imageView); AddSubview(textField); progressView = new ProgressView(); AddSubview(progressView); var newChildren = new NSObject [] { textField, buildResults, progressView }; AccessibilityChildren = newChildren; }
public StatusBar() { Cell = new ColoredButtonCell(); BezelStyle = NSBezelStyle.TexturedRounded; Title = ""; Enabled = false; LoadStyles(); // We don't need to resize the Statusbar here as a style change will trigger a complete relayout of the Awesomebar Ide.Gui.Styles.Changed += LoadStyles; textField.Cell = new VerticallyCenteredTextFieldCell(0f); textField.Cell.StringValue = ""; UpdateApplicationNamePlaceholderText(); // The rect is empty because we use InVisibleRect to track the whole of the view. textFieldArea = new NSTrackingArea(CGRect.Empty, NSTrackingAreaOptions.MouseEnteredAndExited | NSTrackingAreaOptions.ActiveInKeyWindow | NSTrackingAreaOptions.InVisibleRect, this, null); textField.AddTrackingArea(textFieldArea); imageView.Frame = new CGRect(0.5, 0, 0, 0); imageView.Image = ImageService.GetIcon(Stock.StatusSteady).ToNSImage(); buildResults = new BuildResultsView(); buildResults.Hidden = true; ctxHandler = new StatusBarContextHandler(this); updateHandler = delegate { int ec = 0, wc = 0; foreach (var t in TaskService.Errors) { if (t.Severity == TaskSeverity.Error) { ec++; } else if (t.Severity == TaskSeverity.Warning) { wc++; } } Runtime.RunInMainThread(delegate { buildResults.Hidden = (ec == 0 && wc == 0); buildResults.ResultCount = ec > 0 ? ec : wc; buildImageId = ec > 0 ? "md-status-error-count" : "md-status-warning-count"; buildResults.IconImage = ImageService.GetIcon(buildImageId, Gtk.IconSize.Menu).ToNSImage(); RepositionStatusIcons(); }); }; updateHandler(null, null); TaskService.Errors.TasksAdded += updateHandler; TaskService.Errors.TasksRemoved += updateHandler; BrandingService.ApplicationNameChanged += ApplicationNameChanged; AddSubview(buildResults); AddSubview(imageView); AddSubview(textField); progressView = new ProgressView(); AddSubview(progressView); }
public override void ViewWillMoveToWindow(NSWindow newWindow) { if (_trackingArea != null) RemoveTrackingArea(_trackingArea); _trackingArea = new NSTrackingArea(Frame, NSTrackingAreaOptions.MouseMoved | NSTrackingAreaOptions.MouseEnteredAndExited | NSTrackingAreaOptions.EnabledDuringMouseDrag | NSTrackingAreaOptions.ActiveAlways | NSTrackingAreaOptions.InVisibleRect, this, new NSDictionary()); AddTrackingArea(_trackingArea); }
public override void UpdateTrackingAreas() { base.UpdateTrackingAreas(); if (_mouseTrackingArea != null) { RemoveTrackingArea(_mouseTrackingArea); } _mouseTrackingArea = new NSTrackingArea(new RectangleF(-4, -4, Bounds.Width, Bounds.Height), NSTrackingAreaOptions.MouseEnteredAndExited | NSTrackingAreaOptions.ActiveAlways, this, null ); AddTrackingArea(_mouseTrackingArea); }
public static void Destroy(NSView aView, NSTrackingArea aTrackingArea) { aView.RemoveTrackingArea(aTrackingArea); aTrackingArea.Release(); }
void ReconstructString () { if (string.IsNullOrEmpty (text)) { textField.AttributedStringValue = new NSAttributedString (""); imageView.Image = ImageService.GetIcon (Stock.StatusSteady).ToNSImage (); } else { textField.AttributedStringValue = GetStatusString (text, textColor); imageView.Image = image; } var width = textField.AttributedStringValue.BoundingRectWithSize (new CGSize (nfloat.MaxValue, textField.Frame.Height), NSStringDrawingOptions.UsesFontLeading | NSStringDrawingOptions.UsesLineFragmentOrigin).Width; if (textFieldArea != null) { RemoveTrackingArea (textFieldArea); DestroyPopover (); } if (width > textField.Frame.Width) { textFieldArea = new NSTrackingArea (textField.Frame, NSTrackingAreaOptions.MouseEnteredAndExited | NSTrackingAreaOptions.ActiveInKeyWindow, this, null); AddTrackingArea (textFieldArea); } else textFieldArea = null; }
public StatusBar () { Cell = new ColoredButtonCell (); BezelStyle = NSBezelStyle.TexturedRounded; Title = ""; Enabled = false; LoadStyles (); // We don't need to resize the Statusbar here as a style change will trigger a complete relayout of the Awesomebar Ide.Gui.Styles.Changed += LoadStyles; textField.Cell = new VerticallyCenteredTextFieldCell (0f); textField.Cell.StringValue = ""; UpdateApplicationNamePlaceholderText (); // The rect is empty because we use InVisibleRect to track the whole of the view. textFieldArea = new NSTrackingArea (CGRect.Empty, NSTrackingAreaOptions.MouseEnteredAndExited | NSTrackingAreaOptions.ActiveInKeyWindow | NSTrackingAreaOptions.InVisibleRect, this, null); textField.AddTrackingArea (textFieldArea); imageView.Frame = new CGRect (0.5, 0, 0, 0); imageView.Image = ImageService.GetIcon (Stock.StatusSteady).ToNSImage (); buildResults = new BuildResultsView (); buildResults.Hidden = true; cancelButton = new CancelButton (); cancelButton.Activated += (o, e) => { cts?.Cancel (); }; ctxHandler = new StatusBarContextHandler (this); updateHandler = delegate { int ec = 0, wc = 0; foreach (var t in TaskService.Errors) { if (t.Severity == TaskSeverity.Error) ec++; else if (t.Severity == TaskSeverity.Warning) wc++; } Runtime.RunInMainThread (delegate { buildResults.Hidden = (ec == 0 && wc == 0); buildResults.ResultCount = ec > 0 ? ec : wc; buildImageId = ec > 0 ? "md-status-error-count" : "md-status-warning-count"; buildResults.IconImage = ImageService.GetIcon (buildImageId, Gtk.IconSize.Menu).ToNSImage (); RepositionStatusIcons (); }); }; updateHandler (null, null); TaskService.Errors.TasksAdded += updateHandler; TaskService.Errors.TasksRemoved += updateHandler; BrandingService.ApplicationNameChanged += ApplicationNameChanged; AddSubview (cancelButton); AddSubview (buildResults); AddSubview (imageView); AddSubview (textField); progressView = new ProgressView (); AddSubview (progressView); }
internal void RepositionStatusLayers () { nfloat right = Layer.Frame.Width; CATransaction.DisableActions = true; foreach (var item in Layer.Sublayers) { if (item.Name != null && item.Name.StartsWith (StatusIconPrefixId, StringComparison.Ordinal)) { var icon = layerToStatus [item.Name]; RemoveTrackingArea (icon.TrackingArea); right -= item.Bounds.Width + 6; item.Frame = new CGRect (right, 3, item.Bounds.Width, item.Bounds.Height); var area = new NSTrackingArea (item.Frame, NSTrackingAreaOptions.MouseEnteredAndExited | NSTrackingAreaOptions.ActiveInKeyWindow, this, null); AddTrackingArea (area); icon.TrackingArea = area; } } nfloat buildResultPosition = DrawBuildResults (); CATransaction.DisableActions = false; if (buildResultPosition < right) { // We have a build result layer. textField.SetFrameSize (new CGSize (buildResultPosition - 6 - textField.Frame.Left, Frame.Height)); } else textField.SetFrameSize (new CGSize (right - 6 - textField.Frame.Left, Frame.Height)); }
private void InitializeTrackingArea() { var area = new NSTrackingArea(Frame, NSTrackingAreaOptions.ActiveInKeyWindow | NSTrackingAreaOptions.MouseEnteredAndExited, this, null); AddTrackingArea(area); }
public StatusIcon (StatusBar bar, CALayer layer, NSTrackingArea trackingArea) { this.bar = bar; this.layer = layer; TrackingArea = trackingArea; }
public StatusIcon(StatusBar bar, CALayer layer, NSTrackingArea trackingArea) { this.bar = bar; this.layer = layer; TrackingArea = trackingArea; }
public override void WindowDidLoad() { NSView containingView = this.Window.ContentView.Superview; NSTrackingArea area = new NSTrackingArea(containingView.Frame, NSTrackingAreaOptions.NSTrackingMouseEnteredAndExited | NSTrackingAreaOptions.NSTrackingActiveInActiveApp | NSTrackingAreaOptions.NSTrackingInVisibleRect, this, null); containingView.AddTrackingArea(area); area.Release(); NSTimer timer = NSTimer.ScheduledTimerWithTimeIntervalTargetSelectorUserInfoRepeats(4.0f, this, ObjectiveCRuntime.Selector("startFade:"), null, false); this.SetFadeTimer(timer); }
private void Initialize() { WantsLayer = true; OnTrackBarValueChanged += () => {}; OnTrackBarMouseDown += () => {}; OnTrackBarMouseUp += () => {}; // Add tracking area to receive mouse move and mouse dragged events var opts = NSTrackingAreaOptions.ActiveAlways | NSTrackingAreaOptions.InVisibleRect | NSTrackingAreaOptions.MouseMoved | NSTrackingAreaOptions.EnabledDuringMouseDrag; var trackingArea = new NSTrackingArea(Bounds, opts, this, new NSDictionary()); AddTrackingArea(trackingArea); _control = new TrackBarControl(); _control.OnTrackBarValueChanged += () => { OnTrackBarValueChanged(); }; _control.OnInvalidateVisual += () => InvokeOnMainThread(() => SetNeedsDisplayInRect(Bounds)); _control.OnInvalidateVisualInRect += (rect) => InvokeOnMainThread(() => SetNeedsDisplayInRect(GenericControlHelper.ToRect(rect))); }
public override void ViewWillMoveToWindow (NSWindow newWindow) { //Console.WriteLine("View will move to window"); if (_trackingArea != null) RemoveTrackingArea(_trackingArea); _trackingArea = new NSTrackingArea(Frame, NSTrackingAreaOptions.MouseMoved | NSTrackingAreaOptions.MouseEnteredAndExited | NSTrackingAreaOptions.EnabledDuringMouseDrag | NSTrackingAreaOptions.ActiveWhenFirstResponder | NSTrackingAreaOptions.InVisibleRect | NSTrackingAreaOptions.CursorUpdate, this, new NSDictionary()); AddTrackingArea(_trackingArea); }
public StatusBar() { AllowsEditingTextAttributes = Selectable = Editable = false; textField.Cell = new VerticallyCenteredTextFieldCell(yOffset: -0.5f); textField.Cell.StringValue = ""; textField.Cell.PlaceholderAttributedString = GetStatusString(BrandingService.ApplicationName, NSColor.DisabledControlText); // The rect is empty because we use InVisibleRect to track the whole of the view. textFieldArea = new NSTrackingArea(CGRect.Empty, NSTrackingAreaOptions.MouseEnteredAndExited | NSTrackingAreaOptions.ActiveInKeyWindow | NSTrackingAreaOptions.InVisibleRect, this, null); textField.AddTrackingArea(textFieldArea); imageView.Image = ImageService.GetIcon(Stock.StatusSteady).ToNSImage(); buildResults = new BuildResultsView(); buildResults.Hidden = true; AddSubview(buildResults); // Fixes a render glitch of a whiter bg than the others. if (MacSystemInformation.OsVersion >= MacSystemInformation.Yosemite) { BezelStyle = NSTextFieldBezelStyle.Rounded; } WantsLayer = true; Layer.CornerRadius = MacSystemInformation.OsVersion >= MacSystemInformation.ElCapitan ? 6 : 4; ctxHandler = new StatusBarContextHandler(this); updateHandler = delegate { int ec = 0, wc = 0; foreach (var t in TaskService.Errors) { if (t.Severity == TaskSeverity.Error) { ec++; } else if (t.Severity == TaskSeverity.Warning) { wc++; } } Runtime.RunInMainThread(delegate { buildResults.Hidden = (ec == 0 && wc == 0); buildResults.ResultCount = ec > 0 ? ec : wc; buildImageId = ec > 0 ? "md-status-error-count" : "md-status-warning-count"; buildResults.IconImage = ImageService.GetIcon(buildImageId, Gtk.IconSize.Menu).ToNSImage(); RepositionStatusIcons(); }); }; updateHandler(null, null); TaskService.Errors.TasksAdded += updateHandler; TaskService.Errors.TasksRemoved += updateHandler; AddSubview(imageView); AddSubview(textField); }