Skip to content

Commit

Permalink
Fixed list sort descending view problems - would only sort ascending
Browse files Browse the repository at this point in the history
  • Loading branch information
leenetpoint committed Jul 16, 2005
1 parent 9cbfc2b commit 84901cc
Show file tree
Hide file tree
Showing 4 changed files with 476 additions and 338 deletions.
128 changes: 115 additions & 13 deletions mediaportal/Configuration/Sections/RadioStations.cs
Expand Up @@ -62,6 +62,7 @@ public override string ToString()
private System.Windows.Forms.ListView listViewRadioChannels;
ListViewItem currentlyCheckedItem = null;
static bool reloadList=false;
ListViewColumnSorter _columnSorter;

public RadioStations() : this("Stations")
{
Expand Down Expand Up @@ -472,8 +473,6 @@ private void deleteButton_Click(object sender, System.EventArgs e)
}
}



public override void LoadSettings()
{
LoadRadioStations();
Expand Down Expand Up @@ -844,21 +843,124 @@ protected override void OnPaint(PaintEventArgs e)

private void stationsListView_ColumnClick(object sender, System.Windows.Forms.ColumnClickEventArgs e)
{

switch (stationsListView.Sorting)
if(_columnSorter == null)
stationsListView.ListViewItemSorter = _columnSorter = new ListViewColumnSorter();

// Determine if clicked column is already the column that is being sorted.
if(e.Column == _columnSorter.SortColumn)
{
case SortOrder.Ascending: stationsListView.Sorting = SortOrder.Descending; break;
case SortOrder.Descending: stationsListView.Sorting = SortOrder.Ascending; break;
case SortOrder.None: stationsListView.Sorting = SortOrder.Ascending; break;
}
if (e.Column==1)
stationsListView.ListViewItemSorter = new ListViewItemComparerInt(e.Column);
_columnSorter.Order = _columnSorter.Order == SortOrder.Ascending ? SortOrder.Descending : SortOrder.Ascending;
}
else
stationsListView.ListViewItemSorter = new ListViewItemComparer(e.Column);
{
// Set the column number that is to be sorted; default to ascending.
_columnSorter.SortColumn = e.Column;
_columnSorter.Order = SortOrder.Ascending;
}

// Perform the sort with these new sort options.
stationsListView.Sort();
stationsListView.Update();
}
}

/// <summary>
/// This class is an implementation of the 'IComparer' interface.
/// </summary>
public class ListViewColumnSorter : IComparer
{
/// <summary>
/// Specifies the column to be sorted
/// </summary>
private int ColumnToSort;
/// <summary>
/// Specifies the order in which to sort (i.e. 'Ascending').
/// </summary>
private SortOrder OrderOfSort;
/// <summary>
/// Case insensitive comparer object
/// </summary>
private CaseInsensitiveComparer ObjectCompare;

}
/// <summary>
/// Class constructor. Initializes various elements
/// </summary>
public ListViewColumnSorter()
{
// Initialize the column to '0'
ColumnToSort = 0;

// Initialize the sort order to 'none'
OrderOfSort = SortOrder.None;

// Initialize the CaseInsensitiveComparer object
ObjectCompare = new CaseInsensitiveComparer();
}

/// <summary>
/// This method is inherited from the IComparer interface. It compares the two objects passed using a case insensitive comparison.
/// </summary>
/// <param name="x">First object to be compared</param>
/// <param name="y">Second object to be compared</param>
/// <returns>The result of the comparison. "0" if equal, negative if 'x' is less than 'y' and positive if 'x' is greater than 'y'</returns>
public int Compare(object x, object y)
{
int compareResult;
ListViewItem listviewX, listviewY;

// Cast the objects to be compared to ListViewItem objects
listviewX = (ListViewItem)x;
listviewY = (ListViewItem)y;

// Compare the two items
compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text,listviewY.SubItems[ColumnToSort].Text);

// Calculate correct return value based on object comparison
if (OrderOfSort == SortOrder.Ascending)
{
// Ascending sort is selected, return normal result of compare operation
return compareResult;
}
else if (OrderOfSort == SortOrder.Descending)
{
// Descending sort is selected, return negative result of compare operation
return (-compareResult);
}
else
{
// Return '0' to indicate they are equal
return 0;
}
}

/// <summary>
/// Gets or sets the number of the column to which to apply the sorting operation (Defaults to '0').
/// </summary>
public int SortColumn
{
set
{
ColumnToSort = value;
}
get
{
return ColumnToSort;
}
}

/// <summary>
/// Gets or sets the order of sorting to apply (for example, 'Ascending' or 'Descending').
/// </summary>
public SortOrder Order
{
set
{
OrderOfSort = value;
}
get
{
return OrderOfSort;
}
}

}
}
23 changes: 15 additions & 8 deletions mediaportal/Configuration/Sections/TVChannels.cs
Expand Up @@ -63,6 +63,7 @@ public override string ToString()
private System.Windows.Forms.ColumnHeader columnHeader4;
private System.Windows.Forms.ColumnHeader columnHeader10;
private System.Windows.Forms.ColumnHeader columnHeader11;
ListViewColumnSorter _columnSorter;

//
// Private members
Expand Down Expand Up @@ -963,16 +964,22 @@ protected override void OnPaint(PaintEventArgs e)

private void channelsListView_ColumnClick(object sender, System.Windows.Forms.ColumnClickEventArgs e)
{
switch (channelsListView.Sorting)
if(_columnSorter == null)
channelsListView.ListViewItemSorter = _columnSorter = new ListViewColumnSorter();

// Determine if clicked column is already the column that is being sorted.
if(e.Column == _columnSorter.SortColumn)
{
case SortOrder.Ascending: channelsListView.Sorting = SortOrder.Descending; break;
case SortOrder.Descending: channelsListView.Sorting = SortOrder.Ascending; break;
case SortOrder.None: channelsListView.Sorting = SortOrder.Ascending; break;
}
if (e.Column==1)
channelsListView.ListViewItemSorter = new ListViewItemComparerInt(e.Column);
_columnSorter.Order = _columnSorter.Order == SortOrder.Ascending ? SortOrder.Descending : SortOrder.Ascending;
}
else
channelsListView.ListViewItemSorter = new ListViewItemComparer(e.Column);
{
// Set the column number that is to be sorted; default to ascending.
_columnSorter.SortColumn = e.Column;
_columnSorter.Order = SortOrder.Ascending;
}

// Perform the sort with these new sort options.
channelsListView.Sort();
channelsListView.Update();
}
Expand Down

0 comments on commit 84901cc

Please sign in to comment.