フラグでソートすると色々と問題がありそう(2.1.xでもマクロを書けば出来るけど)。というのは、ソートをリアルタイムでやっていないから。ソートされるのは、ソート方向を変更されたときとか、フォルダを開いたときとか。でも、フラグは始終変わるわけで、そうするとソート条件を指定しているにもかかわらずそのとおりにソートされていないという状態になってしまう。ので、そのソート条件をベースに二分検索とかをするとメッセージが見つからないことになってしまう。かといってフラグを変えるたびにソートするとリストビュー上でメッセージが移動しまくってしまうし。
一応、二分検索で見つからないときは線形検索するようにして対処したけれど、そもそもフラグでソートできてうれしいかというのも含めてちょっと検討の余地ありかも。
しかも、フラグでのソートは単純にフラグの数値でソートしているのでますます意味がない。フラグでソートしたいときっていうのは、たとえば、マークしたメールとそうじゃないメールを分割するためにソートするとか、返信済みかどうかでソートしてみるとか、検索の一手段として使うわけで、数値でソートしても意味ない。でも、単にフラグでソートっていわれても、マークでグループ化したいのか、返信済みかどうかでグループ化したいかはプログラムとしてはわからないわけで、これはしょうがないかな。
@Marked()を列に追加してそれでソートとかすれば上の目的は叶えられる。当然、これも変化するので最初の問題が片付くわけじゃないけれど、これなら使う意味があるということで。
常にソートされていることに期待できないとすると、メッセージを追加する場合とかはどうすればいいのだろう。二分検索の結果から挿入位置を決定すると間違っている場合があるわけで、挿入前にソートしなおすのが吉?
ひとつのメッセージがあるときにリストビューからメッセージを削除したら次のメッセージが選択されるのが普通?
リストビューで選択されているメッセージが、メッセージビューから削除された場合は?。もしくは、同期したらサーバ上から消えていて削除された場合は?
複数のメッセージが選択されているときに削除された場合は?
などなど、2.xでもちょっと動作があやふやなところをちゃんと決めなくちゃいけないけれど、どんな感じが使いやすいでしょう?
何も選択していない状態、っていうのはアリなのかしらん。