public StatusBarControl () { InitializeComponent (); DataContext = this; ctxHandler = new StatusBarContextHandler (this); ShowReady (); updateHandler = delegate { int ec = 0, wc = 0; foreach (MonoDevelop.Ide.Tasks.TaskListEntry t in TaskService.Errors) { if (t.Severity == TaskSeverity.Error) ec++; else if (t.Severity == TaskSeverity.Warning) wc++; } DispatchService.GuiDispatch (delegate { if (ec > 0) { BuildResultPanelVisibility = Visibility.Visible; BuildResultCount = ec; BuildResultIcon = Stock.Error.GetImageSource (Xwt.IconSize.Small); } else if (wc > 0) { BuildResultPanelVisibility = Visibility.Visible; BuildResultCount = wc; BuildResultIcon = Stock.Warning.GetImageSource (Xwt.IconSize.Small); } else BuildResultPanelVisibility = Visibility.Collapsed; }); }; TaskService.Errors.TasksAdded += updateHandler; TaskService.Errors.TasksRemoved += updateHandler; }
public StatusBarControl () { InitializeComponent (); DataContext = this; ctxHandler = new StatusBarContextHandler (this); ShowReady (); updateHandler = delegate { int ec = 0, wc = 0; foreach (MonoDevelop.Ide.Tasks.TaskListEntry t in TaskService.Errors) { if (t.Severity == TaskSeverity.Error) ec++; else if (t.Severity == TaskSeverity.Warning) wc++; } Runtime.RunInMainThread (delegate { if (ec > 0) { BuildResultPanelVisibility = Visibility.Visible; BuildResultCount = ec; BuildResultIcon = Stock.Error.GetStockIcon ().WithSize (Xwt.IconSize.Small); } else if (wc > 0) { BuildResultPanelVisibility = Visibility.Visible; BuildResultCount = wc; BuildResultIcon = Stock.Warning.GetStockIcon ().WithSize (Xwt.IconSize.Small); } else BuildResultPanelVisibility = Visibility.Collapsed; }); }; TaskService.Errors.TasksAdded += updateHandler; TaskService.Errors.TasksRemoved += updateHandler; BrandingService.ApplicationNameChanged += ApplicationNameChanged; StatusText.ToolTipOpening += (o, e) => { e.Handled = !TextTrimmed (); }; }
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); }
public StatusBar () { AllowsEditingTextAttributes = Selectable = Editable = false; textField.Cell = new VerticallyCenteredTextFieldCell (yOffset: -0.5f); textField.Cell.StringValue = ""; textField.Cell.PlaceholderAttributedString = GetStatusString (BrandingService.ApplicationName, NSColor.DisabledControlText); imageView.Image = ImageService.GetIcon (Stock.StatusSteady).ToNSImage (); // Fixes a render glitch of a whiter bg than the others. if (MacSystemInformation.OsVersion >= MacSystemInformation.Yosemite) BezelStyle = NSTextFieldBezelStyle.Rounded; WantsLayer = true; Layer.CornerRadius = 4; ctxHandler = new StatusBarContextHandler (this); updateHandler = delegate { int ec=0, wc=0; foreach (Task t in TaskService.Errors) { if (t.Severity == TaskSeverity.Error) ec++; else if (t.Severity == TaskSeverity.Warning) wc++; } DispatchService.GuiDispatch (delegate { if (ec > 0) { buildResultVisible = true; buildResultText.AttributedString = new NSAttributedString (ec.ToString (), foregroundColor: NSColor.Text, font: NSFont.SystemFontOfSize (NSFont.SmallSystemFontSize - 1)); buildResultText.ContentsScale = Window.BackingScaleFactor; buildResultIcon.SetImage (buildImageId = "md-status-error-count", Window.BackingScaleFactor); } else if (wc > 0) { buildResultVisible = true; buildResultText.AttributedString = new NSAttributedString (wc.ToString (), foregroundColor: NSColor.Text, font: NSFont.SystemFontOfSize (NSFont.SmallSystemFontSize - 1)); buildResultText.ContentsScale = Window.BackingScaleFactor; buildResultIcon.SetImage (buildImageId = "md-status-warning-count", Window.BackingScaleFactor); } else buildResultVisible = false; CATransaction.DisableActions = true; nfloat buildResultPosition = DrawBuildResults (); CATransaction.DisableActions = false; if (buildResultPosition == nfloat.PositiveInfinity) return; textField.SetFrameSize (new CGSize (buildResultPosition - 6 - textField.Frame.Left, Frame.Height)); }); }; updateHandler (null, null); TaskService.Errors.TasksAdded += updateHandler; TaskService.Errors.TasksRemoved += updateHandler; NSNotificationCenter.DefaultCenter.AddObserver (NSWindow.DidChangeBackingPropertiesNotification, notif => DispatchService.GuiDispatch (() => { if (Window == null) return; ReconstructString (); foreach (var layer in Layer.Sublayers) { if (layer.Name != null && layer.Name.StartsWith (StatusIconPrefixId, StringComparison.Ordinal)) layer.SetImage (layerToStatus [layer.Name].Image, Window.BackingScaleFactor); } if (buildResultVisible) { buildResultIcon.SetImage (buildImageId, Window.BackingScaleFactor); buildResultText.ContentsScale = Window.BackingScaleFactor; } })); AddSubview (imageView); AddSubview (textField); }
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); }
public StatusArea() { theme = new StatusAreaTheme(); renderArg = new RenderArg(); ctxHandler = new StatusBarContextHandler(this); VisibleWindow = false; NoShowAll = true; WidgetFlags |= Gtk.WidgetFlags.AppPaintable; statusIconBox.BorderWidth = 0; statusIconBox.Spacing = 3; Action <bool> animateProgressBar = showing => this.Animate("ProgressBarFade", val => renderArg.ProgressBarAlpha = val, renderArg.ProgressBarAlpha, showing ? 1.0f : 0.0f, easing: Easing.CubicInOut); ProgressBegin += delegate { renderArg.ShowProgressBar = true; // StartBuildAnimation (); renderArg.ProgressBarFraction = 0; QueueDraw(); animateProgressBar(true); }; ProgressEnd += delegate { renderArg.ShowProgressBar = false; // StopBuildAnimation (); QueueDraw(); animateProgressBar(false); }; ProgressFraction += delegate(object sender, FractionEventArgs e) { renderArg.ProgressBarFraction = (float)e.Work; QueueDraw(); }; contentBox.PackStart(messageBox, true, true, 0); contentBox.PackEnd(statusIconBox, false, false, 0); contentBox.PackEnd(statusIconSeparator = new StatusAreaSeparator(), false, false, 0); contentBox.PackEnd(buildResultWidget = CreateBuildResultsWidget(Orientation.Horizontal), false, false, 0); HasTooltip = true; QueryTooltip += messageBoxToolTip; mainAlign = new Alignment(0, 0.5f, 1, 0); mainAlign.LeftPadding = 12; mainAlign.RightPadding = 8; mainAlign.Add(contentBox); Add(mainAlign); mainAlign.ShowAll(); statusIconBox.Hide(); statusIconSeparator.Hide(); buildResultWidget.Hide(); Show(); this.ButtonPressEvent += delegate { if (sourcePad != null) { sourcePad.BringToFront(true); } }; statusIconBox.Shown += delegate { UpdateSeparators(); }; statusIconBox.Hidden += delegate { UpdateSeparators(); }; messageQueue = new Queue <Message> (); tracker = new MouseTracker(this); tracker.MouseMoved += (sender, e) => QueueDraw(); tracker.HoveredChanged += (sender, e) => { this.Animate("Hovered", x => renderArg.HoverProgress = x, renderArg.HoverProgress, tracker.Hovered ? 1.0f : 0.0f, easing: Easing.SinInOut); }; IdeApp.FocusIn += delegate { // If there was an error while the application didn't have the focus, // trigger the error animation again when it gains the focus if (errorAnimPending) { errorAnimPending = false; TriggerErrorAnimation(); } }; }
internal StatusBarContextImpl (StatusBarContextHandler statusHandler) { this.statusHandler = statusHandler; this.statusBar = statusHandler.StatusBar; }
public MainStatusBarContextImpl(StatusBarContextHandler statusHandler) : base(statusHandler) { StatusChanged = true; }
public MainStatusBarContextImpl (StatusBarContextHandler statusHandler): base (statusHandler) { StatusChanged = true; }
public StatusArea () { theme = new StatusAreaTheme (); renderArg = new RenderArg (); ctxHandler = new StatusBarContextHandler (this); VisibleWindow = false; NoShowAll = true; WidgetFlags |= Gtk.WidgetFlags.AppPaintable; statusIconBox.BorderWidth = 0; statusIconBox.Spacing = 3; Action<bool> animateProgressBar = showing => this.Animate ("ProgressBarFade", val => renderArg.ProgressBarAlpha = val, renderArg.ProgressBarAlpha, showing ? 1.0f : 0.0f, easing: Easing.CubicInOut); ProgressBegin += delegate { renderArg.ShowProgressBar = true; // StartBuildAnimation (); renderArg.ProgressBarFraction = 0; QueueDraw (); animateProgressBar (true); }; ProgressEnd += delegate { renderArg.ShowProgressBar = false; // StopBuildAnimation (); QueueDraw (); animateProgressBar (false); }; ProgressFraction += delegate(object sender, FractionEventArgs e) { renderArg.ProgressBarFraction = (float)e.Work; QueueDraw (); }; contentBox.PackStart (messageBox, true, true, 0); contentBox.PackEnd (statusIconBox, false, false, 0); contentBox.PackEnd (statusIconSeparator = new StatusAreaSeparator (), false, false, 0); contentBox.PackEnd (buildResultWidget = CreateBuildResultsWidget (Orientation.Horizontal), false, false, 0); HasTooltip = true; QueryTooltip += messageBoxToolTip; mainAlign = new Alignment (0, 0.5f, 1, 0); mainAlign.LeftPadding = 12; mainAlign.RightPadding = 8; mainAlign.Add (contentBox); Add (mainAlign); mainAlign.ShowAll (); statusIconBox.Hide (); statusIconSeparator.Hide (); buildResultWidget.Hide (); Show (); this.ButtonPressEvent += delegate { if (sourcePad != null) sourcePad.BringToFront (true); }; statusIconBox.Shown += delegate { UpdateSeparators (); }; statusIconBox.Hidden += delegate { UpdateSeparators (); }; messageQueue = new Queue<Message> (); tracker = new MouseTracker(this); tracker.MouseMoved += (sender, e) => QueueDraw (); tracker.HoveredChanged += (sender, e) => { this.Animate ("Hovered", x => renderArg.HoverProgress = x, renderArg.HoverProgress, tracker.Hovered ? 1.0f : 0.0f, easing: Easing.SinInOut); }; IdeApp.FocusIn += delegate { // If there was an error while the application didn't have the focus, // trigger the error animation again when it gains the focus if (errorAnimPending) { errorAnimPending = false; TriggerErrorAnimation (); } }; }