OSDN Git Service

1.57.2.749
[gikonavigoeson/gikonavi.git] / Sort.pas
index a795b36..d013076 100644 (file)
--- a/Sort.pas
+++ b/Sort.pas
@@ -14,14 +14,60 @@ uses
        function CompareDate(Item1, Item2: TDateTime): Integer;
        procedure SetSortDate(Date: TDateTime);
        function GetSortDate(): TDateTime;
-var
-       SortOrder: Boolean;
-       SortIndex: Integer;
-       SortNoFlag: Boolean;
+       procedure SetSortOrder(Order: Boolean);
+       function GetSortOrder: Boolean;
+       procedure SetSortIndex(Index: Integer);
+       function GetSortIndex: Integer;
+       procedure SetSortNoFlag(Flag: Boolean);
+       function GetSortNoFlag: Boolean;
 
 implementation
+
 var
        FSortDate: TDateTime;
+       FSortOrder: Boolean;
+       FSortIndex: Integer;
+       FSortNoFlag: Boolean;
+
+function CaclVigor(Thread: TThreadItem): Double;
+var
+       span : Double;
+begin
+       if (Thread.AgeSage <> gasArch) then begin
+               span := DaySpan(Sort.GetSortDate, Thread.CreateDate);
+       end else begin
+               span := DaySpan(Thread.LastModified, Thread.CreateDate);
+       end;
+       if (span > 0) then begin
+               Result := Thread.AllResCount / span;
+       end else begin
+               Result := 0;
+       end;
+end;
+procedure SetSortOrder(Order: Boolean);
+begin
+       FSortOrder := Order;
+end;
+function GetSortOrder: Boolean;
+begin
+       Result := FSortOrder;
+end;
+procedure SetSortIndex(Index: Integer);
+begin
+       FSortIndex := Index;
+end;
+function GetSortIndex: Integer;
+begin
+       Result := FSortIndex;
+end;
+procedure SetSortNoFlag(Flag: Boolean);
+begin
+       FSortNoFlag := Flag;
+end;
+function GetSortNoFlag: Boolean;
+begin
+       Result := FSortNoFlag;
+end;
 
 function CategorySortProc(Item1, Item2: Pointer): integer;
 var
@@ -31,9 +77,9 @@ begin
        CategoryItem1 := TCategory(Item1);
        CategoryItem2 := TCategory(Item2);
 
-       case TGikoBBSColumnID( SortIndex ) of
+       case TGikoBBSColumnID( FSortIndex ) of
        gbbscTitle:
-               if SortNoFlag then
+               if FSortNoFlag then
                        Result := CompareInt(CategoryItem1.No, CategoryItem2.No)
                else
                        Result := AnsiCompareText(CategoryItem1.Title, CategoryItem2.Title);
@@ -41,7 +87,7 @@ begin
                Result := CompareInt(CategoryItem1.No, CategoryItem2.No)
        end;
 
-       if not SortOrder then
+       if not FSortOrder then
                Result := Result * -1;
 end;
 
@@ -52,9 +98,9 @@ var
 begin
        BoardItem1 := TBoard(List.Objects[Item1]);
        BoardItem2 := TBoard(List.Objects[Item2]);
-       case TGikoCategoryColumnID( SortIndex ) of
+       case TGikoCategoryColumnID( FSortIndex ) of
        gccTitle:
-               if SortNoFlag then
+               if FSortNoFlag then
                        Result := CompareInt(BoardItem1.No, BoardItem2.No)
                else
                        Result := AnsiCompareText(BoardItem1.Title, BoardItem2.Title);
@@ -68,7 +114,7 @@ begin
                Result := CompareInt(BoardItem1.No, BoardItem2.No)
        end;
 
-       if not SortOrder then
+       if not FSortOrder then
                Result := Result * -1;
 end;
 
@@ -76,14 +122,13 @@ function ThreadItemSortProc(List: TStringList; Item1, Item2: Integer): integer;
 var
        ThreadItem1: TThreadItem;
        ThreadItem2: TThreadItem;
-       SpanDay1, SpanDay2: Double;
 begin
        ThreadItem1 := TThreadItem(List.Objects[ Item1 ]);
        ThreadItem2 := TThreadItem(List.Objects[ Item2 ]);
-       case TGikoBoardColumnID( SortIndex ) of
+       case TGikoBoardColumnID( FSortIndex ) of
                gbcTitle:
                        begin
-                               if SortNoFlag then
+                               if FSortNoFlag then
                                        Result := CompareInt(ThreadItem1.No, ThreadItem2.No)
                                else
                                        Result := AnsiCompareText(ThreadItem1.Title, ThreadItem2.Title)
@@ -109,22 +154,7 @@ begin
                gbcRoundDate:   Result := CompareDateTime(ThreadItem1.RoundDate, ThreadItem2.RoundDate); {gbcLastModified:}
                gbcCreated:                             Result := CompareDateTime(ThreadItem1.CreateDate, ThreadItem2.CreateDate);
                gbcLastModified:        Result := CompareDateTime(ThreadItem1.LastModified, ThreadItem2.LastModified); {gbcLastModified:}
-               gbcVigor:
-                       begin
-                               SpanDay1 := DaySpan(FSortDate, ThreadItem1.CreateDate);
-                               SpanDay2 := DaySpan(FSortDate, ThreadItem2.CreateDate);
-                               if (SpanDay1 > 0) and (SpanDay2 > 0) then begin
-                                       Result := CompareValue(
-                                                               ThreadItem1.AllResCount / SpanDay1,
-                                                               ThreadItem2.AllResCount / SpanDay2);
-                               end else if (SpanDay1 > 0) then begin
-                                       Result := 1;
-                               end else if (SpanDay2 > 0) then begin
-                                       Result := -1;
-                               end else begin
-                                       Result := 0;
-                               end;
-                       end;
+               gbcVigor:       Result := CompareValue(CaclVigor(ThreadItem1), CaclVigor(ThreadItem2));
        else
                Result := 0;
        end;
@@ -142,12 +172,12 @@ begin
        else
                Result := CompareDate(ThreadItem1.LastModified, ThreadItem2.LastModified);
 }
-       if not SortOrder then
+       if not FSortOrder then
                Result := Result * -1;
 
        // \83\\81[\83g\95]\89¿\82ª\93¯\82\8fê\8d\87\82Í\81A\91æ1\83J\83\89\83\80\82Ì\8f¸\8f\87\82É\83\\81[\83g
        if Result = 0 then begin
-               if SortNoFlag then
+               if FSortNoFlag then
                        Result := CompareInt(ThreadItem1.No, ThreadItem2.No)
                else
                        Result := AnsiCompareText(ThreadItem1.Title, ThreadItem2.Title)