X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=Sort.pas;h=d013076ca50e89c42c1626bf5663a772bd42093d;hb=7baa21e0173d12410e35841253e9f98412f25679;hp=00038d8735e66d93692f778e5a76263b4e1d9e9b;hpb=a3abda0ca1a46271aca991b45c64d4be2d8e37a7;p=gikonavigoeson%2Fgikonavi.git diff --git a/Sort.pas b/Sort.pas index 00038d8..d013076 100644 --- a/Sort.pas +++ b/Sort.pas @@ -4,7 +4,7 @@ interface uses Windows, Messages, SysUtils, Classes, Controls, Forms, BoardGroup,DateUtils, - Setting; + Setting, Math; function CategorySortProc(Item1, Item2: Pointer): integer; function BoardSortProc(List: TStringList; Item1, Item2: Integer): integer; @@ -12,14 +12,62 @@ uses function CompareBool(Item1, Item2: Boolean): integer; function CompareInt(Item1, Item2: Integer): Integer; function CompareDate(Item1, Item2: TDateTime): Integer; + procedure SetSortDate(Date: TDateTime); + function GetSortDate(): TDateTime; + procedure SetSortOrder(Order: Boolean); + function GetSortOrder: Boolean; + procedure SetSortIndex(Index: Integer); + function GetSortIndex: Integer; + procedure SetSortNoFlag(Flag: Boolean); + function GetSortNoFlag: Boolean; + +implementation var - SortOrder: Boolean; - SortIndex: Integer; - SortNoFlag: Boolean; - SortNonAcquiredCountFlag: Boolean; + FSortDate: TDateTime; + FSortOrder: Boolean; + FSortIndex: Integer; + FSortNoFlag: Boolean; -implementation +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 @@ -29,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); @@ -39,7 +87,7 @@ begin Result := CompareInt(CategoryItem1.No, CategoryItem2.No) end; - if not SortOrder then + if not FSortOrder then Result := Result * -1; end; @@ -50,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); @@ -66,7 +114,7 @@ begin Result := CompareInt(BoardItem1.No, BoardItem2.No) end; - if not SortOrder then + if not FSortOrder then Result := Result * -1; end; @@ -77,10 +125,10 @@ var 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) @@ -105,6 +153,8 @@ begin gbcRoundName: Result := AnsiCompareText(ThreadItem1.RoundName, ThreadItem2.RoundName); gbcRoundDate: Result := CompareDateTime(ThreadItem1.RoundDate, ThreadItem2.RoundDate); {gbcLastModified:} gbcCreated: Result := CompareDateTime(ThreadItem1.CreateDate, ThreadItem2.CreateDate); + gbcLastModified: Result := CompareDateTime(ThreadItem1.LastModified, ThreadItem2.LastModified); {gbcLastModified:} + gbcVigor: Result := CompareValue(CaclVigor(ThreadItem1), CaclVigor(ThreadItem2)); else Result := 0; end; @@ -122,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) @@ -163,5 +213,12 @@ begin else Result := 0; end; - +procedure SetSortDate(Date: TDateTime); +begin + FSortDate := Date; +end; +function GetSortDate(): TDateTime; +begin + Result := FSortDate; +end; end.