ListViewItemComparer.cpp
#include "StdAfx.h"
#include "ListViewItemComparer.h"
using namespace Core;
using namespace System;
using namespace System::Diagnostics;
/// [ Constructor ]
ListViewItemComparer::ListViewItemComparer() :
m_column( 0 ),
m_sortOrder( Windows::Forms::SortOrder::Ascending )
{
}
/// [ Constructor ]
ListViewItemComparer::ListViewItemComparer( int column ) :
m_column( column ),
m_sortOrder( Windows::Forms::SortOrder::Ascending )
{
}
/// 2つのオブジェクトを比較し、一方が他方より小さいか、等しいか、大きいかを示す値を返す
int ListViewItemComparer::Compare( System::Object^ x, System::Object^ y )
{
// ListViewItem にキャストする
Windows::Forms::ListViewItem^ itemX = safe_cast< Windows::Forms::ListViewItem^ >( x );
Windows::Forms::ListViewItem^ itemY = safe_cast< Windows::Forms::ListViewItem^ >( y );
// ... それらを文字列として比較する
int result = String::Compare(
itemX->SubItems[ m_column ]->Text,
itemY->SubItems[ m_column ]->Text
);
if( m_sortOrder == Windows::Forms::SortOrder::Descending )
{
// 並べ替え方法が降順に指定されているならば、結果を反転する
result = -result;
}
return result;
}
/// 列を設定する [ Property ]
void ListViewItemComparer::Column::set( int value )
{
if( m_column == value )
{
// 現在と同じ値を指定されたならば、並べ替え方法を変更する
if( m_sortOrder == Windows::Forms::SortOrder::Ascending )
{
// 昇順に設定されていたならば、降順にする
m_sortOrder = Windows::Forms::SortOrder::Descending;
}
else
{
// 昇順にする
m_sortOrder = Windows::Forms::SortOrder::Ascending;
}
}
else
{
m_column = value;
}
}