OSDN Git Service

カラムクリックでソートできるようにした。
[gikonavigoeson/gikonavi.git] / Round.pas
index 19fae85..ba706f0 100644 (file)
--- a/Round.pas
+++ b/Round.pas
@@ -27,7 +27,7 @@ type
     Button1: TButton;
     RoundButton: TButton;
     StatusBar1: TStatusBar;
-    RoundListView: TListView;
+       RoundListView: TListView;
                procedure RoundButtonClick(Sender: TObject);
                procedure FormCreate(Sender: TObject);
                procedure RoundListViewChange(Sender: TObject; Item: TListItem;
@@ -36,8 +36,14 @@ type
                procedure AllCancelButtonClick(Sender: TObject);
                procedure RoundNameComboBoxChange(Sender: TObject);
                procedure RoundDeleteButtonClick(Sender: TObject);
+    procedure RoundListViewColumnClick(Sender: TObject;
+      Column: TListColumn);
+    procedure RoundListViewCompare(Sender: TObject; Item1,
+      Item2: TListItem; Data: Integer; var Compare: Integer);
        private
                { Private \90é\8c¾ }
+               FColumnToSort: Integer;
+               FSortOrder:     Boolean;
                function GetRoundCount: Integer;
                procedure SetRoundItem(RoundName: string);
                function CompareTime(Time1: TDateTime; Time2: TDateTime; MarginMin: Integer): Boolean;
@@ -51,7 +57,7 @@ type
 implementation
 
 uses
-       Giko, BoardGroup, RoundData;
+       Giko, BoardGroup, RoundData, Math;
 
 {$R *.DFM}
 
@@ -161,6 +167,7 @@ procedure TRoundDialog.FormCreate(Sender: TObject);
 var
        i: Integer;
 begin
+    FColumnToSort := -1;
        RoundNameComboBox.Items.Add('\81i\82·\82×\82Ä\81j');
        for i := 0 to RoundList.RoundNameList.Count - 1 do
                RoundNameComboBox.Items.Add(RoundList.RoundNameList[i]);
@@ -306,4 +313,53 @@ begin
        end;
 end;
 
+procedure TRoundDialog.RoundListViewColumnClick(Sender: TObject;
+  Column: TListColumn);
+begin
+       if FColumnToSort > -1 then
+               (Sender as TCustomListView).Column[FColumnToSort].ImageIndex := -1;
+
+       if FColumnToSort = Column.Index then
+               FSortOrder := not FSortOrder
+       else
+               FSortOrder := false;
+
+       if FSortOrder then
+               Column.ImageIndex := 3
+       else
+               Column.ImageIndex := 2;
+
+       FColumnToSort := Column.Index;
+       (Sender as TCustomListView).AlphaSort;
+end;
+
+procedure TRoundDialog.RoundListViewCompare(Sender: TObject; Item1,
+  Item2: TListItem; Data: Integer; var Compare: Integer);
+var
+  ix: Integer;
+begin
+       if FColumnToSort = 0 then begin
+               if not FSortOrder then begin
+                       Compare := CompareText(Item1.Caption,Item2.Caption);
+                       if Compare = 0 then
+                               Compare := CompareValue(Item1.ImageIndex, item2.ImageIndex);
+               end else begin
+                       Compare := -CompareText(Item1.Caption,Item2.Caption);
+                       if Compare = 0 then
+                               Compare := -CompareValue(Item1.ImageIndex,item2.ImageIndex);
+               end;
+       end else begin
+               ix := FColumnToSort - 1;
+               if not FSortOrder then begin
+                       Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
+                       if Compare = 0 then
+                               Compare := CompareValue(Item1.ImageIndex, item2.ImageIndex);
+               end else begin
+                       Compare := -CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
+                       if Compare = 0 then
+                               Compare := -CompareValue(Item1.ImageIndex, item2.ImageIndex);
+               end;
+       end;
+end;
+
 end.