X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=Sort.pas;h=d013076ca50e89c42c1626bf5663a772bd42093d;hb=refs%2Fheads%2FBb57;hp=a795b36ec318eb6257ab318a21d66a35b556902e;hpb=0858f8ac44ee05fd0e03dbbb1d6ef050f119d8a5;p=gikonavigoeson%2Fgikonavi.git diff --git a/Sort.pas b/Sort.pas index a795b36..d013076 100644 --- 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; // ƒ\[ƒg•]‰¿‚ª“¯‚¶ê‡‚́A‘æ1ƒJƒ‰ƒ€‚̏¸‡‚Ƀ\[ƒg if Result = 0 then begin - if SortNoFlag then + if FSortNoFlag then Result := CompareInt(ThreadItem1.No, ThreadItem2.No) else Result := AnsiCompareText(ThreadItem1.Title, ThreadItem2.Title)