static void OnShowLogPad(object s, EventArgs a) { Pad pad = IdeApp.Workbench.GetPad <InternalLogPad> (); pad.BringToFront(); ClearErrorIcon(); }
public SearchProgressMonitor GetSearchProgressMonitor(bool bringToFront, bool focusPad = false, CancellationTokenSource cancellationTokenSource = null) { Pad pad = null; string title = GettextCatalog.GetString("Search Results"); int instanceNum = -1; lock (searchMonitors) { // Look for an available pad for (int n = 0; n < searchMonitors.Count; n++) { Pad mpad = (Pad)searchMonitors [n]; SearchResultPad rp = (SearchResultPad)mpad.Content; if (rp.InstanceNum > instanceNum) { instanceNum = rp.InstanceNum; } if (rp.AllowReuse) { pad = mpad; break; } } } if (pad != null) { if (bringToFront) { pad.BringToFront(focusPad); } return(new SearchProgressMonitor(pad, cancellationTokenSource)); } instanceNum++; string newPadId = "SearchPad - " + title + " - " + instanceNum; string basePadId = "SearchPad - " + title + " - 0"; if (instanceNum > 0) { title += " (" + (instanceNum + 1) + ")"; } SearchResultPad monitorPad = new SearchResultPad(instanceNum) { FocusPad = focusPad }; pad = IdeApp.Workbench.ShowPad(monitorPad, newPadId, title, basePadId + "/Center Bottom", Stock.FindIcon); pad.Sticky = true; lock (searchMonitors) { searchMonitors.Add(pad); if (searchMonitors.Count > 1) { // This is needed due to ContextBoundObject not being able to do a reflection access on private fields var searchMonitorsCopy = searchMonitors; // Additional search pads will be destroyed when hidden pad.Window.PadHidden += delegate { lock (searchMonitorsCopy) { searchMonitorsCopy.Remove(pad); } pad.Destroy(); }; } } if (bringToFront) { pad.BringToFront(focusPad); } return(new SearchProgressMonitor(pad, cancellationTokenSource)); }
Pad CreateMonitorPad(string id, string title, string icon, bool bringToFront, bool allowMonitorReuse, bool show) { Pad pad = null; if (icon == null) { icon = Stock.OutputIcon; } if (id == null) { id = title; } int instanceCount = -1; if (allowMonitorReuse) { lock (outputMonitors) { // Look for an available pad for (int n = 0; n < outputMonitors.Count; n++) { Pad mpad = (Pad)outputMonitors [n]; DefaultMonitorPad mon = (DefaultMonitorPad)mpad.Content; if (mon.TypeTag == id) { if (mon.InstanceNum > instanceCount) { instanceCount = mon.InstanceNum; } if (mon.AllowReuse) { pad = mpad; break; } } } } if (pad != null) { if (bringToFront) { pad.BringToFront(); } return(pad); } } instanceCount++; DefaultMonitorPad monitorPad = new DefaultMonitorPad(id, icon, instanceCount); string newPadId = "OutputPad-" + id + "-" + instanceCount; string basePadId = "OutputPad-" + id + "-0"; if (instanceCount > 0) { // Translate the title before adding the count title = GettextCatalog.GetString(title); title += " (" + (instanceCount + 1) + ")"; } if (show) { pad = IdeApp.Workbench.ShowPad(monitorPad, newPadId, title, basePadId + "/Center Bottom", DockItemStatus.AutoHide, icon); } else { pad = IdeApp.Workbench.AddPad(monitorPad, newPadId, title, basePadId + "/Center Bottom", DockItemStatus.AutoHide, icon); } monitorPad.StatusSourcePad = pad; pad.Sticky = true; lock (outputMonitors) { outputMonitors.Add(pad); } if (instanceCount > 0) { // Additional output pads will be destroyed when hidden pad.Window.PadHidden += (s, a) => { // Workaround for crash reported in bug #18096. Look like MS.NET can't access private fields // when the delegate is invoked through the remoting chain. if (!a.SwitchingLayout) { DestroyPad(pad); } }; } if (bringToFront) { pad.Visible = true; pad.BringToFront(); } return(pad); }
Pad CreateMonitorPad(string id, string title, string icon, bool bringToFront, bool allowMonitorReuse, bool show) { Pad pad = null; if (icon == null) { icon = Stock.OutputIcon; } if (id == null) { id = title; } int instanceCount = -1; if (allowMonitorReuse) { lock (outputMonitors) { // Look for an available pad for (int n = 0; n < outputMonitors.Count; n++) { Pad mpad = (Pad)outputMonitors [n]; DefaultMonitorPad mon = (DefaultMonitorPad)mpad.Content; if (mon.TypeTag == id) { if (mon.InstanceNum > instanceCount) { instanceCount = mon.InstanceNum; } if (mon.AllowReuse) { pad = mpad; break; } } } } if (pad != null) { if (bringToFront) { pad.BringToFront(); } return(pad); } } instanceCount++; DefaultMonitorPad monitorPad = new DefaultMonitorPad(id, icon, instanceCount); string newPadId = "OutputPad-" + id + "-" + instanceCount; string basePadId = "OutputPad-" + id + "-0"; if (instanceCount > 0) { // Translate the title before adding the count title = GettextCatalog.GetString(title); title += " (" + (instanceCount + 1) + ")"; } if (show) { pad = IdeApp.Workbench.ShowPad(monitorPad, newPadId, title, basePadId + "/Center Bottom", icon); } else { pad = IdeApp.Workbench.AddPad(monitorPad, newPadId, title, basePadId + "/Center Bottom", icon); } monitorPad.StatusSourcePad = pad; pad.Sticky = true; outputMonitors.Add(pad); if (instanceCount > 0) { // Additional output pads will be destroyed when hidden pad.Window.PadHidden += delegate { outputMonitors.Remove(pad); pad.Destroy(); }; } pad.AutoHide = true; if (bringToFront) { pad.Visible = true; pad.BringToFront(); } return(pad); }
Pad CreateMonitorPad(string id, string title, string icon, bool bringToFront, bool allowMonitorReuse, bool show) { Pad pad = null; if (icon == null) { icon = Stock.OutputIcon; } string originalTitle = title; if (id == null) { id = originalTitle; } int instanceCount = -1; int titleInstanceCount = 0; if (allowMonitorReuse) { var usedTitleIds = new List <int> (); lock (outputMonitors) { // Look for an available pad for (int n = 0; n < outputMonitors.Count; n++) { var mpad = outputMonitors [n]; DefaultMonitorPad mon = (DefaultMonitorPad)mpad.Content; if (mon.TypeTag == id) { if (mon.InstanceNum > instanceCount) { instanceCount = mon.InstanceNum; } if (mon.Title == originalTitle && !mon.AllowReuse) { usedTitleIds.Add(mon.TitleInstanceNum); } if (mon.AllowReuse && (pad == null || mon.Title == originalTitle)) //Prefer reusing output with same title(project) { pad = mpad; } } } } titleInstanceCount = usedTitleIds.Count; //Set pesimisticly to largest possible number for (int i = 0; i < usedTitleIds.Count; i++) { if (!usedTitleIds.Contains(i)) { titleInstanceCount = i; //Find smallest free number break; } } if (titleInstanceCount > 0) { title = originalTitle + $" ({titleInstanceCount})"; } else { title = originalTitle; } if (pad != null) { if (bringToFront) { pad.BringToFront(); } pad.Window.Title = title; var mon = (DefaultMonitorPad)pad.Content; mon.Title = originalTitle; mon.TitleInstanceNum = titleInstanceCount; return(pad); } } instanceCount++; DefaultMonitorPad monitorPad = new DefaultMonitorPad(id, icon, instanceCount, originalTitle, titleInstanceCount); string newPadId = "OutputPad-" + id + "-" + instanceCount; string basePadId = "OutputPad-" + id + "-0"; if (show) { pad = IdeApp.Workbench.ShowPad(monitorPad, newPadId, title, basePadId + "/Center Bottom", DockItemStatus.AutoHide, icon); } else { pad = IdeApp.Workbench.AddPad(monitorPad, newPadId, title, basePadId + "/Center Bottom", DockItemStatus.AutoHide, icon); } monitorPad.StatusSourcePad = pad; pad.Sticky = true; lock (outputMonitors) { outputMonitors.Add(pad); } if (instanceCount > 0) { // Additional output pads will be destroyed when hidden pad.Window.PadHidden += (s, a) => { // Workaround for crash reported in bug #18096. Look like MS.NET can't access private fields // when the delegate is invoked through the remoting chain. if (!a.SwitchingLayout) { DestroyPad(pad); } }; } if (bringToFront) { pad.Visible = true; pad.BringToFront(); } return(pad); }