OSDN Git Service

板更新中に除外カテゴリー編集ボタンを押せないようにした
[gikonavigoeson/gikonavi.git] / Sort.pas
1 unit Sort;
2
3 interface
4 uses
5         Windows, Messages, SysUtils, Classes, Controls, Forms,
6         BoardGroup,DateUtils,
7         Setting;
8
9         function CategorySortProc(Item1, Item2: Pointer): integer;
10         function BoardSortProc(List: TStringList; Item1, Item2: Integer): integer;
11         function ThreadItemSortProc(List: TStringList; Item1, Item2: Integer): integer;
12         function CompareBool(Item1, Item2: Boolean): integer;
13         function CompareInt(Item1, Item2: Integer): Integer;
14         function CompareDate(Item1, Item2: TDateTime): Integer;
15
16 var
17         SortOrder: Boolean;
18         SortIndex: Integer;
19         SortNoFlag: Boolean;
20
21 implementation
22
23 function CategorySortProc(Item1, Item2: Pointer): integer;
24 var
25         CategoryItem1: TCategory;
26         CategoryItem2: TCategory;
27 begin
28         CategoryItem1 := TCategory(Item1);
29         CategoryItem2 := TCategory(Item2);
30
31         case TGikoBBSColumnID( SortIndex ) of
32         gbbscTitle:
33                 if SortNoFlag then
34                         Result := CompareInt(CategoryItem1.No, CategoryItem2.No)
35                 else
36                         Result := AnsiCompareText(CategoryItem1.Title, CategoryItem2.Title);
37         else
38                 Result := CompareInt(CategoryItem1.No, CategoryItem2.No)
39         end;
40
41         if not SortOrder then
42                 Result := Result * -1;
43 end;
44
45 function BoardSortProc(List: TStringList; Item1, Item2: Integer): integer;
46 var
47         BoardItem1: TBoard;
48         BoardItem2: TBoard;
49 begin
50         BoardItem1 := TBoard(List.Objects[Item1]);
51         BoardItem2 := TBoard(List.Objects[Item2]);
52         case TGikoCategoryColumnID( SortIndex ) of
53         gccTitle:
54                 if SortNoFlag then
55                         Result := CompareInt(BoardItem1.No, BoardItem2.No)
56                 else
57                         Result := AnsiCompareText(BoardItem1.Title, BoardItem2.Title);
58
59         gccRoundName:
60                 Result := CompareInt(BoardItem1.Count, BoardItem2.Count);
61
62         gccLastModified:
63                 Result := CompareDate(BoardItem1.RoundDate, BoardItem2.RoundDate);
64         else
65                 Result := CompareInt(BoardItem1.No, BoardItem2.No)
66         end;
67
68         if not SortOrder then
69                 Result := Result * -1;
70 end;
71
72 function ThreadItemSortProc(List: TStringList; Item1, Item2: Integer): integer;
73 var
74         ThreadItem1: TThreadItem;
75         ThreadItem2: TThreadItem;
76 begin
77         ThreadItem1 := TThreadItem(List.Objects[ Item1 ]);
78         ThreadItem2 := TThreadItem(List.Objects[ Item2 ]);
79         case TGikoBoardColumnID( SortIndex ) of
80                 gbcTitle:
81                         begin
82                                 if SortNoFlag then
83                                         Result := CompareInt(ThreadItem1.No, ThreadItem2.No)
84                                 else
85                                         Result := AnsiCompareText(ThreadItem1.Title, ThreadItem2.Title)
86                         end;
87
88                 gbcAllCount:                    Result := CompareInt(ThreadItem1.AllResCount, ThreadItem2.AllResCount);
89                 gbcLocalCount:          Result := CompareInt(ThreadItem1.Count, ThreadItem2.Count);
90                 gbcNonAcqCount:
91                         begin
92                                 if ThreadItem1.IsLogFile and ThreadItem2.IsLogFile then
93                                         Result := CompareInt(ThreadItem1.AllResCount - ThreadItem1.Count, ThreadItem2.AllResCount - ThreadItem2.Count)
94                                 else if ThreadItem1.IsLogFile then
95                                         Result := 1
96                                 else if ThreadItem2.IsLogFile then
97                                         Result := -1
98                                 else
99                                         Result := 0;
100                         end;
101
102                 gbcNewCount:                    Result := CompareInt(ThreadItem1.NewResCount, ThreadItem2.NewResCount);
103                 gbcUnReadCount:         Result := 0;
104                 gbcRoundName:           Result := AnsiCompareText(ThreadItem1.RoundName, ThreadItem2.RoundName);
105                 gbcRoundDate:   Result := CompareDateTime(ThreadItem1.RoundDate, ThreadItem2.RoundDate); {gbcLastModified:}
106                 gbcCreated:                             Result := CompareDateTime(ThreadItem1.CreateDate, ThreadItem2.CreateDate);
107                 gbcLastModified:        Result := CompareDateTime(ThreadItem1.LastModified, ThreadItem2.LastModified); {gbcLastModified:}
108         else
109                 Result := 0;
110         end;
111
112 {       if SortIndex = 0 then
113                 if SortNoFlag then
114                         Result := CompareInt(ThreadItem1.No, ThreadItem2.No)
115                 else
116                         Result := CompareText(ThreadItem1.Title, ThreadItem2.Title)
117         else if SortIndex = 1 then
118                 Result := CompareInt(ThreadItem1.Count, ThreadItem2.Count)
119         else if SortIndex = 2 then
120 //              Result := CompareInt(ThreadItem1.RoundNo, ThreadItem2.RoundNo)
121                 Result := CompareText(ThreadItem1.RoundName, ThreadItem2.RoundName)
122         else
123                 Result := CompareDate(ThreadItem1.LastModified, ThreadItem2.LastModified);
124 }
125         if not SortOrder then
126                 Result := Result * -1;
127
128         // \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
129         if Result = 0 then begin
130                 if SortNoFlag then
131                         Result := CompareInt(ThreadItem1.No, ThreadItem2.No)
132                 else
133                         Result := AnsiCompareText(ThreadItem1.Title, ThreadItem2.Title)
134         end;
135 end;
136
137 function CompareBool(Item1, Item2: Boolean): Integer;
138 begin
139         if (Item1 = True) and (Item2 = False) then
140                 Result := 1
141         else if (Item2 = False) and (Item2 = True) then
142                 Result := -1
143         else
144                 Result := 0;
145 end;
146
147 function CompareInt(Item1, Item2: Integer): Integer;
148 begin
149         if Item1 > Item2 then
150                 Result := 1
151         else if Item1 < Item2 then
152                 Result := -1
153         else
154                 Result := 0;
155 end;
156
157 function CompareDate(Item1, Item2: TDateTime): Integer;
158 begin
159         if Item1 > Item2 then
160                 Result := 1
161         else if Item1 < Item2 then
162                 Result := -1
163         else
164                 Result := 0;
165 end;
166
167 end.