Skip to content

Commit

Permalink
True Color File Icons (Requires True Color branch) (#2736)
Browse files Browse the repository at this point in the history
* Added ClipRegion; cleaned up driver code

* clip region unit tests

* api docs

* Moved color stuff from ConsoleDriver to Color.cs

* Removes unused ConsoleDriver APIs

* Code cleanup and Removes unused ConsoleDriver APIs

* Code cleanup and Removes unused ConsoleDriver APIs

* Work around #2610

* adjusted unit tests

* initial commit

* Made Rows, Cols, Top, Left virtual

* Made Clipboard non-virtual

* Made EnableConsoleScrolling  non-virtual

* Made Contents non-virtual

* Pulled Row/Col up

* Made MoveTo virtual; fixed stupid FakeDriver cursor issue

* Made CurrentAttribute non-virtual

* Made SetAttribute  non-virtual

* Moved clipboard code out

* Code cleanup

* Removes dependecy on NStack from ConsoleDrivers - WIP

* Fixed unit tests

* Fixed unit tests

* Added list of unit tests needed

* Did some perf testing; tweaked code and charmap to address

* Brough in code from PR #2264 (but commented)

* Tons of code cleanup

* Fighting with ScrollView

* Fixing bugs

* Fixed TabView tests

* Fixed View.Visible test that was not really working

* Fixed unit tests

* Cleaned up clipboard APIs in attempt to track down unit test failure

* Add Cut_Preserves_Selection test

* Removed invalid code

* Removed invalid test code; unit tests now pass

* EscSeq* - Adjusted naming, added more sequences, made code more consistent, simplified, etc...

* Added CSI_SetGraphicsRendition

* NetDriver code cleanup

* code cleanup

* Cleaned up color handling in NetDriver

* refixed tabview unit test

* WindowsDriver color code cleanup

* WindowsDriver color code cleanup

* CursesDriver color code cleanup

* CursesDriver - Adding _BOLD has no effect. Further up the stack we cast the return of ColorToCursesColor from int to short and the _BOLD values don't fit in a short.

* CursesDriver color code - make code more accurate

* CursesDriver color code - make code more accurate

* Simplified ConsoleDriver.GetColors API

* Simplified ConsoleDriver.GetColors API further

* Improved encapslation of Attribute; prep for TrueColor & other attributes like blink

* Fixes #2249. CharacterMap isn't refreshing well non-BMP code points on scroll.

* Use GetRange to take some of the runes before convert to string.

* Attempting to fix unit tests not being cleaned up

* Fixes #2658 - ConsoleDriver.IsRuneSupported

* Fixes #2658 - ConsoleDriver.IsRuneSupported (for WindowsDriver)

* Check all the range values and not only the max value.

* Reducing code.

* Fixes #2674 - Unit test process doesn't exit

* Changed Cell to support IsDirty and list of Runes

* add support for rendering TrueColor output on Windows merging veeman & tznind code

* add colorconverter changes

* fixed merged v2_develop

* Fixing merge bugs

* Fixed merge bugs

* Add outline for FileSystemColorProvider

* Add other known folders

* Added remaining cases and test for file colors

* Use color provider in FileDialog

* Fix default color when UseColors to white

* Remove `TestDirectoryContents_Windows_Colors`

* Remove unused helper method

* Fix formatting

* Fixed merge bugs - all unit tests pass

* Debugging netdriver

* More netdriver diag

* API docs for escutils

* Update unicode scenario to stress more stuff

* Contents: Now a 2D array of Cells; WIP

* AddRune and ClearContents no longer virtual/abstract

* WindowsDriver renders correctly again

* Progress on Curses

* Progress on Curses

* broke windowsdriver

* Cleaned up FakeMainLoop

* Cleaned up some build warnings

* Removed _init from AutoInitShutdown as it's not needed anymore

* Removed unused var

* Removed unused var

* Fixed nullabiltiy warning in LineCanvas

* Fixed charmap crash

* Fixes #2758 in v2

* Remove accidentally re-added test

* Removed unit test xml file

* Remove redundant test

---------

Co-authored-by: Tig Kindel <tig@users.noreply.github.com>
Co-authored-by: BDisp <bd.bdisp@gmail.com>
Co-authored-by: adstep <stephensonadamj@gmail.com>
  • Loading branch information
4 people authored Aug 11, 2023
1 parent 0df485a commit 52ea950
Show file tree
Hide file tree
Showing 6 changed files with 479 additions and 105 deletions.
58 changes: 7 additions & 51 deletions Terminal.Gui/FileServices/FileDialogStyle.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,34 +45,17 @@ public class FileDialogStyle {
public FileSystemIconProvider IconProvider { get; set;} = new FileSystemIconProvider();

/// <summary>
/// Gets or sets the culture to use (e.g. for number formatting).
/// Defaults to <see cref="CultureInfo.CurrentUICulture"/>.
/// </summary>
public CultureInfo Culture {get;set;} = CultureInfo.CurrentUICulture;

/// <summary>
/// Sets a <see cref="ColorScheme"/> to use for directories rows of
/// the <see cref="TableView"/>.
/// </summary>
public ColorScheme ColorSchemeDirectory { get; set; }

/// <summary>
/// Sets a <see cref="ColorScheme"/> to use for file rows with an image extension
/// of the <see cref="TableView"/>. Defaults to White text on Black background.
/// </summary>
public ColorScheme ColorSchemeImage { get; set; }

/// <summary>
/// Sets a <see cref="ColorScheme"/> to use for file rows with an executable extension
/// or that match <see cref="FileDialog.AllowedTypes"/> in the <see cref="TableView"/>.
/// Gets or sets the class thatis responsible for determining which color
/// to use to represent files and directories when <see cref="UseColors"/> is
/// <see langword="true"/>.
/// </summary>
public ColorScheme ColorSchemeExeOrRecommended { get; set; }
public FileSystemColorProvider ColorProvider { get;set;} = new FileSystemColorProvider();

/// <summary>
/// Colors to use when <see cref="UseColors"/> is true but file does not match any other
/// classification (<see cref="ColorSchemeDirectory"/>, <see cref="ColorSchemeImage"/> etc).
/// Gets or sets the culture to use (e.g. for number formatting).
/// Defaults to <see cref="CultureInfo.CurrentUICulture"/>.
/// </summary>
public ColorScheme ColorSchemeOther { get; set; }
public CultureInfo Culture {get;set;} = CultureInfo.CurrentUICulture;

/// <summary>
/// Gets or sets the header text displayed in the Filename column of the files table.
Expand Down Expand Up @@ -186,33 +169,6 @@ public FileDialogStyle (IFileSystem fileSystem)
TreeRootGetter = DefaultTreeRootGetter;

DateFormat = CultureInfo.CurrentCulture.DateTimeFormat.SortableDateTimePattern;

ColorSchemeDirectory = new ColorScheme {
Normal = Application.Driver.MakeAttribute (Color.Blue, Color.Black),
HotNormal = Application.Driver.MakeAttribute (Color.Blue, Color.Black),
Focus = Application.Driver.MakeAttribute (Color.Black, Color.Blue),
HotFocus = Application.Driver.MakeAttribute (Color.Black, Color.Blue),

};

ColorSchemeImage = new ColorScheme {
Normal = Application.Driver.MakeAttribute (Color.Magenta, Color.Black),
HotNormal = Application.Driver.MakeAttribute (Color.Magenta, Color.Black),
Focus = Application.Driver.MakeAttribute (Color.Black, Color.Magenta),
HotFocus = Application.Driver.MakeAttribute (Color.Black, Color.Magenta),
};
ColorSchemeExeOrRecommended = new ColorScheme {
Normal = Application.Driver.MakeAttribute (Color.Green, Color.Black),
HotNormal = Application.Driver.MakeAttribute (Color.Green, Color.Black),
Focus = Application.Driver.MakeAttribute (Color.Black, Color.Green),
HotFocus = Application.Driver.MakeAttribute (Color.Black, Color.Green),
};
ColorSchemeOther = new ColorScheme {
Normal = Application.Driver.MakeAttribute (Color.White, Color.Black),
HotNormal = Application.Driver.MakeAttribute (Color.White, Color.Black),
Focus = Application.Driver.MakeAttribute (Color.Black, Color.White),
HotFocus = Application.Driver.MakeAttribute (Color.Black, Color.White),
};
}


Expand Down
24 changes: 11 additions & 13 deletions Terminal.Gui/Views/FileDialog.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1172,20 +1172,18 @@ private ColorScheme ColorGetter (CellColorGetterArgs args)
return tableView.ColorScheme;
}

if (stats.IsDir ()) {
return Style.ColorSchemeDirectory;
}
if (stats.IsImage ()) {
return Style.ColorSchemeImage;
}
if (stats.IsExecutable ()) {
return Style.ColorSchemeExeOrRecommended;
}
if (stats.FileSystemInfo is IFileInfo f && this.MatchesAllowedTypes (f)) {
return Style.ColorSchemeExeOrRecommended;
}

return Style.ColorSchemeOther;
var color = Style.ColorProvider.GetTrueColor(stats.FileSystemInfo)
?? TrueColor.FromConsoleColor(Color.White);
var black = TrueColor.FromConsoleColor(Color.Black);

// TODO: Add some kind of cache for this
return new ColorScheme{
Normal = new Attribute (color,black),
HotNormal = new Attribute (color, black),
Focus = new Attribute (black, color),
HotFocus = new Attribute (black, color),
};
}

/// <summary>
Expand Down
Loading

0 comments on commit 52ea950

Please sign in to comment.