diff --git a/BizHawk.Client.EmuHawk/movie/MovieDetails.cs b/BizHawk.Client.EmuHawk/movie/MovieDetails.cs index 140ff2fa5c..84e4897bd1 100644 --- a/BizHawk.Client.EmuHawk/movie/MovieDetails.cs +++ b/BizHawk.Client.EmuHawk/movie/MovieDetails.cs @@ -3,20 +3,20 @@ using System.Drawing; namespace BizHawk.Client.EmuHawk { - /// - /// Used for the sorting of the moviedetails in PlayMovie.cs - /// - public class MovieDetails - { - public String keys { get; set; } - public String values { get; set; } - public Color backgroundColor { get; set; } + /// + /// Used for the sorting of the moviedetails in PlayMovie.cs + /// + public class MovieDetails + { + public string Keys { get; set; } + public string Values { get; set; } + public Color BackgroundColor { get; set; } - public MovieDetails() - { - keys = String.Empty; - values = String.Empty; - backgroundColor = Color.White; - } - } + public MovieDetails() + { + Keys = string.Empty; + Values = string.Empty; + BackgroundColor = Color.White; + } + } } diff --git a/BizHawk.Client.EmuHawk/movie/PlayMovie.Designer.cs b/BizHawk.Client.EmuHawk/movie/PlayMovie.Designer.cs index f884acbd6f..41fbc5f761 100644 --- a/BizHawk.Client.EmuHawk/movie/PlayMovie.Designer.cs +++ b/BizHawk.Client.EmuHawk/movie/PlayMovie.Designer.cs @@ -76,7 +76,7 @@ this.OK.Text = "&Ok"; this.toolTip1.SetToolTip(this.OK, "Load selected movie"); this.OK.UseVisualStyleBackColor = true; - this.OK.Click += new System.EventHandler(this.OK_Click); + this.OK.Click += new System.EventHandler(this.Ok_Click); // // BrowseMovies // @@ -144,7 +144,7 @@ this.SubtitlesBtn.TabIndex = 20; this.SubtitlesBtn.Text = "Subtitles"; this.SubtitlesBtn.UseVisualStyleBackColor = true; - this.SubtitlesBtn.Click += new System.EventHandler(this.button2_Click); + this.SubtitlesBtn.Click += new System.EventHandler(this.SubtitlesBtn_Click); // // CommentsBtn // @@ -156,7 +156,7 @@ this.CommentsBtn.TabIndex = 15; this.CommentsBtn.Text = "Comments"; this.CommentsBtn.UseVisualStyleBackColor = true; - this.CommentsBtn.Click += new System.EventHandler(this.button1_Click); + this.CommentsBtn.Click += new System.EventHandler(this.CommentsBtn_Click); // // MovieCount // diff --git a/BizHawk.Client.EmuHawk/movie/PlayMovie.cs b/BizHawk.Client.EmuHawk/movie/PlayMovie.cs index 484e9c170b..fe4d1ffc29 100644 --- a/BizHawk.Client.EmuHawk/movie/PlayMovie.cs +++ b/BizHawk.Client.EmuHawk/movie/PlayMovie.cs @@ -1,13 +1,13 @@ using System; using System.Collections.Generic; using System.Drawing; +using System.IO; using System.Linq; using System.Text; using System.Windows.Forms; -using System.IO; -using BizHawk.Common; using BizHawk.Client.Common; +using BizHawk.Common; namespace BizHawk.Client.EmuHawk { @@ -26,93 +26,54 @@ namespace BizHawk.Client.EmuHawk MovieView.QueryItemText += MovieView_QueryItemText; MovieView.VirtualMode = true; _sortReverse = false; - _sortedCol = String.Empty; + _sortedCol = string.Empty; _sortDetailsReverse = false; - _sortedDetailsCol = String.Empty; + _sortedDetailsCol = string.Empty; } - void MovieView_QueryItemText(int index, int column, out string text) + private void PlayMovie_Load(object sender, EventArgs e) { - text = String.Empty; - if (column == 0) //File + IncludeSubDirectories.Checked = Global.Config.PlayMovie_IncludeSubdir; + ShowStateFiles.Checked = Global.Config.PlayMovie_ShowStateFiles; + MatchGameNameCheckBox.Checked = Global.Config.PlayMovie_MatchGameName; + ScanFiles(); + PreHighlightMovie(); + } + + private void MovieView_QueryItemText(int index, int column, out string text) + { + text = string.Empty; + if (column == 0) // File { text = Path.GetFileName(_movieList[index].Filename); } - if (column == 1) //System + + if (column == 1) // System { text = _movieList[index].Header.SystemID; } - if (column == 2) //Game + + if (column == 2) // Game { text = _movieList[index].Header.GameName; } - if (column == 3) //Time + + if (column == 3) // Time { text = _movieList[index].Time.ToString(@"hh\:mm\:ss\.fff"); } } - private void Cancel_Click(object sender, EventArgs e) - { - Close(); - } - private void Run() { var indices = MovieView.SelectedIndices; - if (indices.Count > 0) //Import file if necessary + if (indices.Count > 0) // Import file if necessary { GlobalWin.MainForm.StartNewMovie(_movieList[MovieView.SelectedIndices[0]], false); } } - private void OK_Click(object sender, EventArgs e) - { - Run(); - Global.MovieSession.ReadOnly = ReadOnlyCheckBox.Checked; - Close(); - } - - private void BrowseMovies_Click(object sender, EventArgs e) - { - var ofd = new OpenFileDialog { InitialDirectory = PathManager.MakeAbsolutePath(Global.Config.PathEntries.MoviesPathFragment, null) }; - var filter = "Movie Files (*." + Global.Config.MovieExtension + ")|*." + Global.Config.MovieExtension + "|Savestates|*.state|All Files|*.*"; - ofd.Filter = filter; - - var result = ofd.ShowHawkDialog(); - if (result == DialogResult.OK) - { - var file = new FileInfo(ofd.FileName); - if (!file.Exists) - { - return; - } - else - { - if (file.Extension.ToUpper() == "STATE") - { - var movie = new Movie(file.FullName); - movie.Load(); //State files will have to load everything unfortunately - if (movie.FrameCount == 0) - { - MessageBox.Show("No input log detected in this savestate, aborting", "Can not load file", MessageBoxButtons.OK, - MessageBoxIcon.Hand); - return; - } - } - - int? index = AddMovieToList(ofd.FileName, true); - if (index.HasValue) - { - MovieView.SelectedIndices.Clear(); - MovieView.setSelection(index.Value); - MovieView.SelectItem(index.Value, true); - } - } - } - } - private void AddStateToList(string filename) { using (var file = new HawkFile(filename)) @@ -122,12 +83,12 @@ namespace BizHawk.Client.EmuHawk if (!IsDuplicateOf(filename).HasValue) { var movie = new Movie(file.CanonicalFullPath); - movie.Load(); //State files will have to load everything unfortunately + movie.Load(); // State files will have to load everything unfortunately if (movie.FrameCount > 0) { _movieList.Add(movie); _sortReverse = false; - _sortedCol = String.Empty; + _sortedCol = string.Empty; } } } @@ -142,27 +103,26 @@ namespace BizHawk.Client.EmuHawk { return null; } - else + + var index = IsDuplicateOf(filename); + if (!index.HasValue) { - int? index = IsDuplicateOf(filename); - if (!index.HasValue) - { - PreLoadMovieFile(file, force); - MovieView.ItemCount = _movieList.Count; - UpdateList(); + PreLoadMovieFile(file, force); + MovieView.ItemCount = _movieList.Count; + UpdateList(); - _sortReverse = false; - _sortedCol = String.Empty; - index = _movieList.Count - 1; - } - return index; + _sortReverse = false; + _sortedCol = string.Empty; + index = _movieList.Count - 1; } + + return index; } } private int? IsDuplicateOf(string filename) { - for (int i = 0; i < _movieList.Count; i++) + for (var i = 0; i < _movieList.Count; i++) { if (_movieList[i].Filename == filename) { @@ -179,7 +139,7 @@ namespace BizHawk.Client.EmuHawk movie.PreLoadText(hf); try { - //Don't do this from browse + // Don't do this from browse if (movie.Header[HeaderKeys.GAMENAME] == Global.Game.Name || Global.Config.PlayMovie_MatchGameName == false || force) { @@ -195,72 +155,76 @@ namespace BizHawk.Client.EmuHawk private void UpdateList() { MovieView.Refresh(); - UpdateMovieCount(); - } - - private void UpdateMovieCount() - { MovieCount.Text = _movieList.Count + " movie" - + (_movieList.Count != 1 ? "s" : String.Empty); + + (_movieList.Count != 1 ? "s" : string.Empty); } private void PreHighlightMovie() { - if (Global.Game == null) return; - var Indices = new List(); + if (Global.Game == null) + { + return; + } - //Pull out matching names - for (int i = 0; i < _movieList.Count; i++) + var indices = new List(); + + // Pull out matching names + for (var i = 0; i < _movieList.Count; i++) { if (PathManager.FilesystemSafeName(Global.Game) == _movieList[i].Header.GameName) { - Indices.Add(i); + indices.Add(i); } } - if (Indices.Count == 0) return; - if (Indices.Count == 1) + + if (indices.Count == 0) { - HighlightMovie(Indices[0]); return; } - //Prefer tas files - var TAS = new List(); - for (int i = 0; i < Indices.Count; i++) + if (indices.Count == 1) { - if (Path.GetExtension(_movieList[Indices[i]].Filename).ToUpper() == "." + Global.Config.MovieExtension) + HighlightMovie(indices[0]); + return; + } + + // Prefer tas files + var tas = new List(); + for (var i = 0; i < indices.Count; i++) + { + if (Path.GetExtension(_movieList[indices[i]].Filename).ToUpper() == "." + Global.Config.MovieExtension) { - TAS.Add(i); + tas.Add(i); } } - if (TAS.Count == 1) + if (tas.Count == 1) { - HighlightMovie(TAS[0]); + HighlightMovie(tas[0]); return; } - else if (TAS.Count > 1) + + if (tas.Count > 1) { - Indices = new List(TAS); + indices = new List(tas); } - //Final tie breaker - Last used file - var file = new FileInfo(_movieList[Indices[0]].Filename); + // Final tie breaker - Last used file + var file = new FileInfo(_movieList[indices[0]].Filename); var time = file.LastAccessTime; - int mostRecent = Indices.First(); - for (int i = 1; i < Indices.Count; i++) + var mostRecent = indices.First(); + for (var i = 1; i < indices.Count; i++) { - file = new FileInfo(_movieList[Indices[0]].Filename); + file = new FileInfo(_movieList[indices[0]].Filename); if (file.LastAccessTime > time) { time = file.LastAccessTime; - mostRecent = Indices[i]; + mostRecent = indices[i]; } } HighlightMovie(mostRecent); return; - } private void HighlightMovie(int index) @@ -270,16 +234,11 @@ namespace BizHawk.Client.EmuHawk MovieView.SelectItem(index, true); } - private void ClearList() + private void ScanFiles() { _movieList.Clear(); MovieView.ItemCount = 0; MovieView.Update(); - } - - private void ScanFiles() - { - ClearList(); var directory = PathManager.MakeAbsolutePath(Global.Config.PathEntries.MoviesPathFragment, null); if (!Directory.Exists(directory)) @@ -295,7 +254,7 @@ namespace BizHawk.Client.EmuHawk { Directory.GetFiles(directory, "*.state") .ToList() - .ForEach(file => AddStateToList(file)); + .ForEach(AddStateToList); } if (Global.Config.PlayMovie_IncludeSubdir) @@ -309,113 +268,14 @@ namespace BizHawk.Client.EmuHawk Directory.GetFiles(dir, "*.state") .ToList() - .ForEach(file => AddStateToList(file)); + .ForEach(AddStateToList); } } } - private void PlayMovie_Load(object sender, EventArgs e) - { - IncludeSubDirectories.Checked = Global.Config.PlayMovie_IncludeSubdir; - ShowStateFiles.Checked = Global.Config.PlayMovie_ShowStateFiles; - MatchGameNameCheckBox.Checked = Global.Config.PlayMovie_MatchGameName; - ScanFiles(); - PreHighlightMovie(); - } + #region Events - private void MovieView_SelectedIndexChanged(object sender, EventArgs e) - { - toolTip1.SetToolTip(DetailsView, String.Empty); - DetailsView.Items.Clear(); - if (MovieView.SelectedIndices.Count < 1) - { - OK.Enabled = false; - return; - } - else - { - OK.Enabled = true; - } - - int firstIndex = MovieView.SelectedIndices[0]; - MovieView.ensureVisible(firstIndex); - - foreach (var kvp in _movieList[firstIndex].Header) - { - var item = new ListViewItem(kvp.Key); - item.SubItems.Add(kvp.Value); - - switch (kvp.Key) - { - case HeaderKeys.SHA1: - if (kvp.Value != Global.Game.Hash) - { - item.BackColor = Color.Pink; - toolTip1.SetToolTip(DetailsView, "Current SHA1: " + Global.Game.Hash); - } - break; - case HeaderKeys.MOVIEVERSION: - if (kvp.Value != HeaderKeys.MovieVersion1) - { - item.BackColor = Color.Yellow; - } - break; - case HeaderKeys.EMULATIONVERSION: - if (kvp.Value != VersionInfo.GetEmuVersion()) - { - item.BackColor = Color.Yellow; - } - break; - case HeaderKeys.PLATFORM: - if (kvp.Value != Global.Game.System) - { - item.BackColor = Color.Pink; - } - break; - } - - DetailsView.Items.Add(item); - } - - var FpsItem = new ListViewItem("Fps"); - FpsItem.SubItems.Add(String.Format("{0:0.#######}", _movieList[firstIndex].Fps)); - DetailsView.Items.Add(FpsItem); - - var FramesItem = new ListViewItem("Frames"); - FramesItem.SubItems.Add(_movieList[firstIndex].FrameCount.ToString()); - DetailsView.Items.Add(FramesItem); - CommentsBtn.Enabled = _movieList[firstIndex].Header.Comments.Any(); - SubtitlesBtn.Enabled = _movieList[firstIndex].Header.Subtitles.Any(); - } - - - private void button1_Click(object sender, EventArgs e) - { - var indices = MovieView.SelectedIndices; - if (indices.Count > 0) - { - var form = new EditCommentsForm(); - form.GetMovie(_movieList[MovieView.SelectedIndices[0]]); - form.Show(); - } - } - - private void button2_Click(object sender, EventArgs e) - { - var indices = MovieView.SelectedIndices; - if (indices.Count > 0) - { - var s = new EditSubtitlesForm { ReadOnly = true }; - s.GetMovie(_movieList[MovieView.SelectedIndices[0]]); - s.Show(); - } - } - - private void MovieView_DoubleClick(object sender, EventArgs e) - { - Run(); - Close(); - } + #region Movie List private void MovieView_DragEnter(object sender, DragEventArgs e) { @@ -432,14 +292,38 @@ namespace BizHawk.Client.EmuHawk .ForEach(path => AddMovieToList(path, force: true)); } - private void MovieView_ColumnClick(object sender, ColumnClickEventArgs e) + private void MovieView_KeyDown(object sender, KeyEventArgs e) { - OrderColumn(e.Column); + if (e.Control && e.KeyCode == Keys.C) + { + var indexes = MovieView.SelectedIndices; + if (indexes.Count > 0) + { + var copyStr = new StringBuilder(); + foreach (int index in indexes) + { + copyStr + .Append(_movieList[index].Filename).Append('\t') + .Append(_movieList[index].Header.SystemID).Append('\t') + .Append(_movieList[index].Header.GameName).Append('\t') + .Append(_movieList[index].Time.ToString(@"hh\:mm\:ss\.fff")) + .AppendLine(); + + Clipboard.SetDataObject(copyStr.ToString()); + } + } + } } - private void OrderColumn(int columnToOrder) + private void MovieView_DoubleClick(object sender, EventArgs e) { - var columnName = MovieView.Columns[columnToOrder].Text; + Run(); + Close(); + } + + private void MovieView_ColumnClick(object sender, ColumnClickEventArgs e) + { + var columnName = MovieView.Columns[e.Column].Text; if (_sortedCol != columnName) { _sortReverse = false; @@ -534,6 +418,214 @@ namespace BizHawk.Client.EmuHawk MovieView.Refresh(); } + private void MovieView_SelectedIndexChanged(object sender, EventArgs e) + { + toolTip1.SetToolTip(DetailsView, string.Empty); + DetailsView.Items.Clear(); + if (MovieView.SelectedIndices.Count < 1) + { + OK.Enabled = false; + return; + } + + OK.Enabled = true; + + var firstIndex = MovieView.SelectedIndices[0]; + MovieView.ensureVisible(firstIndex); + + foreach (var kvp in _movieList[firstIndex].Header) + { + var item = new ListViewItem(kvp.Key); + item.SubItems.Add(kvp.Value); + + switch (kvp.Key) + { + case HeaderKeys.SHA1: + if (kvp.Value != Global.Game.Hash) + { + item.BackColor = Color.Pink; + toolTip1.SetToolTip(DetailsView, "Current SHA1: " + Global.Game.Hash); + } + break; + case HeaderKeys.MOVIEVERSION: + if (kvp.Value != HeaderKeys.MovieVersion1) + { + item.BackColor = Color.Yellow; + } + break; + case HeaderKeys.EMULATIONVERSION: + if (kvp.Value != VersionInfo.GetEmuVersion()) + { + item.BackColor = Color.Yellow; + } + break; + case HeaderKeys.PLATFORM: + if (kvp.Value != Global.Game.System) + { + item.BackColor = Color.Pink; + } + break; + } + + DetailsView.Items.Add(item); + } + + var FpsItem = new ListViewItem("Fps"); + FpsItem.SubItems.Add(string.Format("{0:0.#######}", _movieList[firstIndex].Fps)); + DetailsView.Items.Add(FpsItem); + + var FramesItem = new ListViewItem("Frames"); + FramesItem.SubItems.Add(_movieList[firstIndex].FrameCount.ToString()); + DetailsView.Items.Add(FramesItem); + CommentsBtn.Enabled = _movieList[firstIndex].Header.Comments.Any(); + SubtitlesBtn.Enabled = _movieList[firstIndex].Header.Subtitles.Any(); + } + + #endregion + + #region Details + + private void DetailsView_ColumnClick(object sender, ColumnClickEventArgs e) + { + var detailsList = new List(); + for (var i = 0; i < DetailsView.Items.Count; i++) + { + detailsList.Add(new MovieDetails + { + Keys = DetailsView.Items[i].Text, + Values = DetailsView.Items[i].SubItems[1].Text, + BackgroundColor = DetailsView.Items[i].BackColor + }); + } + + var columnName = DetailsView.Columns[e.Column].Text; + if (_sortedDetailsCol != columnName) + { + _sortDetailsReverse = false; + } + + switch (columnName) + { + // Header, Value + case "Header": + if (_sortDetailsReverse) + { + detailsList = detailsList + .OrderByDescending(x => x.Keys) + .ThenBy(x => x.Values).ToList(); + } + else + { + detailsList = detailsList + .OrderBy(x => x.Keys) + .ThenBy(x => x.Values).ToList(); + } + + break; + case "Value": + if (_sortDetailsReverse) + { + detailsList = detailsList + .OrderByDescending(x => x.Values) + .ThenBy(x => x.Keys).ToList(); + } + else + { + detailsList = detailsList + .OrderBy(x => x.Values) + .ThenBy(x => x.Keys).ToList(); + } + + break; + } + + DetailsView.Items.Clear(); + foreach (var detail in detailsList) + { + var item = new ListViewItem { Text = detail.Keys, BackColor = detail.BackgroundColor }; + item.SubItems.Add(detail.Values); + DetailsView.Items.Add(item); + } + + _sortedDetailsCol = columnName; + _sortDetailsReverse = !_sortDetailsReverse; + } + + private void CommentsBtn_Click(object sender, EventArgs e) + { + var indices = MovieView.SelectedIndices; + if (indices.Count > 0) + { + var form = new EditCommentsForm(); + form.GetMovie(_movieList[MovieView.SelectedIndices[0]]); + form.Show(); + } + } + + private void SubtitlesBtn_Click(object sender, EventArgs e) + { + var indices = MovieView.SelectedIndices; + if (indices.Count > 0) + { + var s = new EditSubtitlesForm { ReadOnly = true }; + s.GetMovie(_movieList[MovieView.SelectedIndices[0]]); + s.Show(); + } + } + + #endregion + + #region Misc Widgets + + private void BrowseMovies_Click(object sender, EventArgs e) + { + var ofd = new OpenFileDialog + { + Filter = "Movie Files (*." + Global.Config.MovieExtension + ")|*." + Global.Config.MovieExtension + "|Savestates|*.state|All Files|*.*", + InitialDirectory = PathManager.MakeAbsolutePath(Global.Config.PathEntries.MoviesPathFragment, null) + }; + + var result = ofd.ShowHawkDialog(); + if (result == DialogResult.OK) + { + var file = new FileInfo(ofd.FileName); + if (!file.Exists) + { + return; + } + + if (file.Extension.ToUpper() == "STATE") + { + var movie = new Movie(file.FullName); + movie.Load(); // State files will have to load everything unfortunately + if (movie.FrameCount == 0) + { + MessageBox.Show( + "No input log detected in this savestate, aborting", + "Can not load file", + MessageBoxButtons.OK, + MessageBoxIcon.Hand); + + return; + } + } + + var index = AddMovieToList(ofd.FileName, true); + if (index.HasValue) + { + MovieView.SelectedIndices.Clear(); + MovieView.setSelection(index.Value); + MovieView.SelectItem(index.Value, true); + } + } + } + + private void Scan_Click(object sender, EventArgs e) + { + ScanFiles(); + PreHighlightMovie(); + } + private void IncludeSubDirectories_CheckedChanged(object sender, EventArgs e) { Global.Config.PlayMovie_IncludeSubdir = IncludeSubDirectories.Checked; @@ -548,12 +640,6 @@ namespace BizHawk.Client.EmuHawk PreHighlightMovie(); } - private void Scan_Click(object sender, EventArgs e) - { - ScanFiles(); - PreHighlightMovie(); - } - private void MatchGameNameCheckBox_CheckedChanged(object sender, EventArgs e) { Global.Config.PlayMovie_MatchGameName = MatchGameNameCheckBox.Checked; @@ -561,92 +647,20 @@ namespace BizHawk.Client.EmuHawk PreHighlightMovie(); } - private void MovieView_KeyDown(object sender, KeyEventArgs e) + private void Ok_Click(object sender, EventArgs e) { - if (e.Control && e.KeyCode == Keys.C) - { - var indexes = MovieView.SelectedIndices; - if (indexes.Count > 0) - { - var copyStr = new StringBuilder(); - foreach (int index in indexes) - { - copyStr - .Append(_movieList[index].Filename).Append('\t') - .Append(_movieList[index].Header.SystemID).Append('\t') - .Append(_movieList[index].Header.GameName).Append('\t') - .Append(_movieList[index].Time.ToString(@"hh\:mm\:ss\.fff")) - .AppendLine(); - - Clipboard.SetDataObject(copyStr.ToString()); - } - } - } + Run(); + Global.MovieSession.ReadOnly = ReadOnlyCheckBox.Checked; + Close(); } - private void DetailsView_ColumnClick(object sender, ColumnClickEventArgs e) + private void Cancel_Click(object sender, EventArgs e) { - OrderDetailsColumn(e.Column); + Close(); } - /// - /// Takes the values from DetailView and puts them in a List of Detail classes, this list is then sorted and put back in the DetailView - /// - /// - private void OrderDetailsColumn(int columnToOrder) - { - List detailsList = new List(); - for (int i = 0; i < DetailsView.Items.Count; i++) - { - detailsList.Add(new MovieDetails { keys = DetailsView.Items[i].Text, values = DetailsView.Items[i].SubItems[1].Text, backgroundColor = DetailsView.Items[i].BackColor }); - } - var columnName = DetailsView.Columns[columnToOrder].Text; - if (_sortedDetailsCol != columnName) - { - _sortDetailsReverse = false; - } - switch (columnName) - { - //Header, Value - case "Header": - if (_sortDetailsReverse) - { - detailsList = detailsList - .OrderByDescending(x => x.keys) - .ThenBy(x => x.values).ToList(); - } - else - { - detailsList = detailsList - .OrderBy(x => x.keys) - .ThenBy(x => x.values).ToList(); - } - break; - case "Value": - if (_sortDetailsReverse) - { - detailsList = detailsList - .OrderByDescending(x => x.values) - .ThenBy(x => x.keys).ToList(); - } - else - { - detailsList = detailsList - .OrderBy(x => x.values) - .ThenBy(x => x.keys).ToList(); - } - break; - } - int firstIndex = MovieView.SelectedIndices[0]; - DetailsView.Items.Clear(); - foreach (var detail in detailsList) - { - ListViewItem item = new ListViewItem { Text = detail.keys, BackColor = detail.backgroundColor }; - item.SubItems.Add(detail.values); - DetailsView.Items.Add(item); - } - _sortedDetailsCol = columnName; - _sortDetailsReverse = !_sortDetailsReverse; - } + #endregion + + #endregion } }