// Returns all unused colors in the Palette. public static IEnumerable <ColorPair> GetUnusedColors(ColorDriver driver) { var result = Palette.Except(UsedSubitemColors); if (driver != ColorDriver.Custom) { HashSet <ColorPair> usedRowColors = new HashSet <ColorPair>(); foreach (IFilterable item in GetAllDriverItems(driver)) { if (item.RowColors != null) { usedRowColors.Add(item.RowColors); } } result = result.Except(usedRowColors); } if (!result.Any() && !_recursing) { // Refresh UsedSubitemColors to make sure it's accurate, then try again with a recursive call. // Use _recursing to prevent the recursion from going more than one level deep. _recursing = true; RefreshUsedSubItemColors(); result = GetUnusedColors(driver); _recursing = false; } return(result); }
// Gets the IFilterable object whose Colors property determines // this Record's colors. public IFilterable GetColorableItem(ColorDriver driver) { switch (driver) { case ColorDriver.Loggers: return(this.Logger); case ColorDriver.Methods: return(this.MethodName); case ColorDriver.ThreadIDs: return(this.Thread); case ColorDriver.Sessions: return(this.Session); case ColorDriver.ThreadNames: return(this.ThreadName); case ColorDriver.TraceLevels: return(this.TLevel); case ColorDriver.Custom: return(null); default: return(null); } }
private static IEnumerable <IFilterable> GetAllDriverItems(ColorDriver driver) { // TODO: These calls aren't thread-safe! switch (driver) { case ColorDriver.Loggers: return(LoggerObjects.AllLoggers.Cast <IFilterable>()); case ColorDriver.Methods: return(MethodObjects.AllMethods.Cast <IFilterable>()); case ColorDriver.Sessions: return(SessionObjects.AllSessionObjects.Cast <IFilterable>()); case ColorDriver.ThreadIDs: return(ThreadObjects.AllThreadObjects.Cast <IFilterable>()); case ColorDriver.ThreadNames: return(ThreadNames.AllThreadNames.Cast <IFilterable>()); case ColorDriver.TraceLevels: return(TraceLevelObjects.AllTraceLevels.Values.Cast <IFilterable>()); default: return(null); } }