OSDN Git Service

This commit was manufactured by cvs2svn to create branch 'Bb62'.
[gikonavigoeson/gikonavi.git] / Round.pas
1 unit Round;
2
3 interface
4
5 uses
6         Windows, Classes, Controls, Forms, StdCtrls, ComCtrls, Menus,
7         SysUtils, ImgList, ExtCtrls, GikoSystem, GikoUtil;
8
9 type
10         TRoundDialog = class(TForm)
11         RoundPopupMenu: TPopupMenu;
12         C1: TMenuItem;
13         P1: TMenuItem;
14                 N1: TMenuItem;
15         D1: TMenuItem;
16                 ItemIcon16: TImageList;
17         Panel1: TPanel;
18         Label1: TLabel;
19         Label2: TLabel;
20         RoundNameComboBox: TComboBox;
21         Panel2: TPanel;
22         Panel3: TPanel;
23         AllSelectButton: TButton;
24         AllCancelButton: TButton;
25         RoundDeleteButton: TButton;
26         Panel4: TPanel;
27         Button1: TButton;
28         RoundButton: TButton;
29         StatusBar1: TStatusBar;
30         RoundListView: TListView;
31                 procedure RoundButtonClick(Sender: TObject);
32                 procedure FormCreate(Sender: TObject);
33                 procedure RoundListViewChange(Sender: TObject; Item: TListItem;
34                         Change: TItemChange);
35                 procedure AllSelectButtonClick(Sender: TObject);
36                 procedure AllCancelButtonClick(Sender: TObject);
37                 procedure RoundNameComboBoxChange(Sender: TObject);
38                 procedure RoundDeleteButtonClick(Sender: TObject);
39     procedure RoundListViewColumnClick(Sender: TObject;
40       Column: TListColumn);
41     procedure RoundListViewCompare(Sender: TObject; Item1,
42       Item2: TListItem; Data: Integer; var Compare: Integer);
43     procedure RoundListViewColumnRightClick(Sender: TObject;
44       Column: TListColumn; Point: TPoint);
45         private
46                 { Private \90é\8c¾ }
47                 FColumnToSort: Integer;
48                 FSortOrder:     Boolean;
49                 function GetRoundCount: Integer;
50                 procedure SetRoundItem(RoundName: string);
51                 function CompareTime(Time1: TDateTime; Time2: TDateTime; MarginMin: Integer): Boolean;
52         public
53                 { Public \90é\8c¾ }
54         end;
55
56
57 implementation
58
59 uses
60         Giko, BoardGroup, RoundData, Math, GikoDataModule;
61
62 {$R *.DFM}
63
64 procedure TRoundDialog.RoundButtonClick(Sender: TObject);
65 var
66         i: Integer;
67         cnt: Integer;
68         msg: string;
69         Board: TBoard;
70         ThreadItem: TThreadItem;
71         RoundItem: TRoundItem;
72 begin
73 {$IF Defined(FRCRND) }
74         GikoDM.LoginAction.Checked := true; // \93®\8dì\8e\8e\8c±\97p\93r
75 {$IFEND}
76
77 {$IFNDEF LOOSENUP}      //\8f\84\89ñ\90§\8cÀ\82ð\8aÉ\82ß\82é\82±\82Æ\82É\82µ\82Ä\82½\82ç{$ELSE}\82Ì\95û\82ð\8eg\82¤
78         if not GikoDM.LoginAction.Checked then begin
79                 if GikoSys.Setting.UserID <> '' then begin
80                         msg := '\83\8d\83O\83C\83\93\82µ\82È\82¢\82Æ\8f\84\89ñ\82Í\8fo\97\88\82Ü\82¹\82ñ' + #13#10
81                                 + '\8d¡\83\8d\83O\83C\83\93\82µ\82Ü\82·\82©';
82                         if MsgBox(Handle, msg, '\8am\94F', MB_YESNO or MB_ICONQUESTION or MB_DEFBUTTON2) <> IDYES then begin
83                                 Exit;
84                         end;
85                         GikoDM.LoginAction.Execute;
86                 end;
87                 if not GikoDM.LoginAction.Checked then begin
88                         msg := '\83\8d\83O\83C\83\93\82µ\82È\82¢\82Æ\8f\84\89ñ\82Í\8fo\97\88\82Ü\82¹\82ñ';
89                         MsgBox(Handle, msg, '\83G\83\89\81[', MB_OK or MB_ICONSTOP);
90                         Exit;
91                 end;
92         end;
93 {$ELSE}
94         //\8bK\90§\82ð\8aÉ\82ß\82½\82Ù\82¤\82Í\81A\83X\83\8c\88ê\97\97\82Ì\82Ý\8f\84\89ñ\89Â\94\
95         if not GikoDM.LoginAction.Checked then begin
96                 if GikoSys.Setting.UserID <> '' then begin
97                         msg := '\83\8d\83O\83C\83\93\82µ\82È\82¢\82Æ\83X\83\8c\83b\83h\82Ì\8f\84\89ñ\82Í\8fo\97\88\82Ü\82¹\82ñ' + #13#10
98                                 + '\8d¡\83\8d\83O\83C\83\93\82µ\82Ü\82·\82©';
99                         if MsgBox(Handle, msg, '\8am\94F', MB_YESNO or MB_ICONQUESTION or MB_DEFBUTTON2) <> IDYES then begin
100                                 Exit;
101                         end;
102                         GikoDM.LoginAction.Execute;
103                 end;
104         end;
105         //\81\9c\82È\82µ\8f\84\89ñ\82Í15\95ª\88È\8fã\82Ì\8aÔ\8au\82ð\95K\97v\82Æ\82·\82é
106         if not GikoDM.LoginAction.Checked then begin
107                 if CompareTime(GikoForm.LastRoundTime, Now, 30) then begin
108                         msg := '\88ê\93x\8f\84\89ñ\82·\82é\82Æ\82R\82O\95ª\8aÔ\8f\84\89ñ\82Í\8fo\97\88\82Ü\82¹\82ñ';
109                         MsgBox(Handle, msg, '\83G\83\89\81[', MB_OK or MB_ICONSTOP);
110                         Exit;
111                 end;
112         end;
113 {$ENDIF}
114
115         //\88ê\82Â\82à\8f\84\89ñ\82É\90Ý\92è\82µ\82Ä\82¢\82È\82©\82Á\82½\82ç\83G\83\89\81[\82É\82·\82é
116         cnt := GetRoundCount;
117         if cnt = 0 then begin
118                 msg := '\8f\84\89ñ\82µ\82½\82¢\8d\80\96Ú\82É\82P\82Â\88È\8fã\83`\83F\83b\83N\82ð\93ü\82ê\82Ä\82­\82¾\82³\82¢';
119                 MsgBox(Handle, msg, '\83G\83\89\81[', MB_OK or MB_ICONSTOP);
120                 Exit;
121         end;
122
123 {$IFNDEF LOOSENUP}
124         //\81\9c\82È\82µ\8f\84\89ñ\82Í\82P\93x\82É100\8cÂ\82Ü\82Å\82É\82·\82é
125         if not GikoDM.LoginAction.Checked then begin
126                 if cnt > 100 then begin
127                         msg := '\82P\82O\82O\8cÂ\88È\8fã\82Í\88ê\93x\82É\8f\84\89ñ\82Å\82«\82Ü\82¹\82ñ';
128                         MsgBox(Handle, msg, '\83G\83\89\81[', MB_OK or MB_ICONSTOP);
129                         Exit;
130                 end;
131         end;
132 {$ENDIF}
133
134         //\8f\84\89ñ\82É\93o\98^\82³\82ê\82Ä\82¢\82é\94Â\82Ì\90\94\82¾\82¯\82Ü\82í\82·
135         for i := 0 to RoundList.Count[grtBoard] - 1 do begin
136                 RoundItem := RoundList.Items[i, grtBoard];
137                 //\8f\84\89ñ\82Ì\83`\83F\83b\83N\82ª\82Â\82¢\82Ä\82¢\82È\82¯\82ê\82Î\83X\83\8b\81[
138                 if not RoundItem.BoolData then Continue;
139                 //\8am\8eÀ\82É\94Â\82Ì\82Í\82¸\82¾\82¯\82Ç\83`\83F\83b\83N
140                 if RoundItem.RoundType = grtBoard then begin
141                         Board := TBoard( RoundItem.Item );
142                         //Board\82Ì\83I\83u\83W\83F\83N\83g\82ª\91\8dÝ\82·\82ê\82Î\81ADL\82·\82é
143                         if Board <> nil then begin
144                                 if not Board.IsThreadDatRead then
145                                         GikoSys.ReadSubjectFile(Board);
146                                 GikoForm.DownloadList(Board);
147                         end;
148                 end;
149         end;
150         for i := 0 to RoundList.Count[grtItem] - 1 do begin
151                 RoundItem := RoundList.Items[i, grtItem];
152                 //\8f\84\89ñ\82Ì\83`\83F\83b\83N\82ª\82Â\82¢\82Ä\82¢\82È\82¯\82ê\82Î\83X\83\8b\81[
153                 if not RoundItem.BoolData then Continue;
154 {$IFDEF LOOSENUP}
155                 //\81\9c\82È\82µ\8f\84\89ñ\82Í\83X\83\8c\83b\83h\82Í\82Å\82«\82È\82¢\82±\82Æ\82É\82·\82é
156                 if not GikoDM.LoginAction.Checked then begin
157                         msg := '\83\8d\83O\83C\83\93\82µ\82È\82¢\82Æ\83X\83\8c\83b\83h\82Ì\8f\84\89ñ\82Í\82Å\82«\82Ü\82¹\82ñ\81B';
158                         MsgBox(Handle, msg, '\83G\83\89\81[', MB_OK or MB_ICONSTOP);
159                         break;
160                 end;
161 {$ENDIF}
162                 if RoundItem.RoundType = grtItem then begin
163                         ThreadItem := TThreadItem( RoundItem.Item );
164                         if ThreadItem <> nil then begin
165                                 GikoForm.DownloadContent(ThreadItem);
166                         end;
167                 end;
168         end;
169         GikoForm.LastRoundTime := Now;
170         Close;
171 end;
172
173 function TRoundDialog.GetRoundCount: Integer;
174 var
175         i: Integer;
176         RoundItem: TRoundItem;
177 begin
178         Result := 0;
179         for i := 0 to RoundList.Count[grtBoard] - 1 do begin
180                 RoundItem := RoundList.Items[i, grtBoard];
181                 if RoundItem.BoolData then
182                         Result := Result + 1;
183         end;
184         for i := 0 to RoundList.Count[grtItem] - 1 do begin
185                 RoundItem := RoundList.Items[i, grtItem];
186                 if RoundItem.BoolData then
187                         Result := Result + 1;
188         end;
189 end;
190
191 function TRoundDialog.CompareTime(Time1: TDateTime; Time2: TDateTime; MarginMin: Integer): Boolean;
192 const
193         AMin: Double = (1 / 24 / 60);
194 var
195         d: TDateTime;
196 begin
197         d := Time1 + (AMin * MarginMin);
198         Result := Time2 < d;
199 end;
200
201 procedure TRoundDialog.FormCreate(Sender: TObject);
202 var
203         i: Integer;
204 begin
205         //\8c»\8dÝ\82Ì\8f\84\89ñ\83f\81[\83^\82ð\83t\83@\83C\83\8b\83A\83E\83g\82·\82é
206         RoundList.SaveRoundFile;
207         RoundNameComboBox.Items.Add('\81i\82·\82×\82Ä\81j');
208         for i := 0 to RoundList.RoundNameList.Count - 1 do
209                 RoundNameComboBox.Items.Add(RoundList.RoundNameList[i]);
210         for i := 0 to RoundList.Count[grtBoard] - 1 do
211                 RoundList.Items[i, grtBoard].BoolData := False;
212         for i := 0 to RoundList.Count[grtItem] - 1 do
213                 RoundList.Items[i, grtItem].BoolData := False;
214         RoundNameComboBox.ItemIndex := 0;
215         SetRoundItem('');
216 end;
217
218 procedure TRoundDialog.RoundListViewChange(Sender: TObject;
219         Item: TListItem; Change: TItemChange);
220 var
221         RoundItem: TRoundItem;
222 begin
223         if TObject(Item.Data) is TRoundItem then begin
224                 RoundItem := TRoundItem(Item.Data);
225                 RoundItem.BoolData := Item.Checked;
226         end;
227 end;
228
229 procedure TRoundDialog.AllSelectButtonClick(Sender: TObject);
230 var
231         i: Integer;
232         RoundItem: TRoundItem;
233         ListChangeEvent: TLVChangeEvent;
234 begin
235         ListChangeEvent := RoundListView.OnChange;
236         RoundListView.OnChange := nil;
237         try
238                 for i := 0 to RoundListView.Items.Count - 1 do begin
239                         if TObject(RoundListView.Items[i].Data) is TRoundItem then begin
240                                 RoundItem := TRoundItem(RoundListView.Items[i].Data);
241                                 RoundItem.BoolData := True;
242                                 RoundListView.Items[i].Checked := True;
243                         end;
244                 end;
245         finally
246                 RoundListView.OnChange := ListChangeEvent;
247         end;
248 end;
249
250 procedure TRoundDialog.AllCancelButtonClick(Sender: TObject);
251 var
252         i: Integer;
253         RoundItem: TRoundItem;
254         ListChangeEvent: TLVChangeEvent;
255 begin
256         ListChangeEvent := RoundListView.OnChange;
257         RoundListView.OnChange := nil;
258         try
259                 for i := 0 to RoundListView.Items.Count - 1 do begin
260                         if TObject(RoundListView.Items[i].Data) is TRoundItem then begin
261                                 RoundItem := TRoundItem(RoundListView.Items[i].Data);
262                                 RoundItem.BoolData := False;
263                                 RoundListView.Items[i].Checked := False;
264                         end;
265                 end;
266         finally
267                 RoundListView.OnChange := ListChangeEvent;
268         end;
269 end;
270
271 procedure TRoundDialog.RoundNameComboBoxChange(Sender: TObject);
272 begin
273         //\83J\83\89\83\80\82Ì\83\\81[\83g\8bL\8d\86\83C\83\81\81[\83W\82ð\89ð\8f\9c\82·\82é
274         if FColumnToSort > -1 then
275                 RoundListView.Column[FColumnToSort].ImageIndex := -1;
276         FColumnToSort := -1;
277         if RoundNameComboBox.ItemIndex = 0 then
278                 SetRoundItem('')
279         else
280                 SetRoundItem(RoundNameComboBox.Items[RoundNameComboBox.itemIndex]);
281
282 end;
283
284 procedure TRoundDialog.SetRoundItem(RoundName: string);
285 var
286         ListItem: TListItem;
287         i: Integer;
288         ListChangeEvent: TLVChangeEvent;
289 begin
290         ListChangeEvent := RoundListView.OnChange;
291         RoundListView.OnChange := nil;
292         try
293                 RoundListView.Clear;
294                 for i := 0 to RoundList.Count[grtBoard] - 1 do begin
295                         if (RoundList.Items[i, grtBoard].RoundName = RoundName) or (RoundName = '') then begin
296                                 ListItem := RoundListView.Items.Add;
297                                 ListItem.Data := RoundList.Items[i, grtBoard];
298                                 ListItem.Caption := RoundList.Items[i, grtBoard].RoundName;
299                                 ListItem.SubItems.Add(RoundList.Items[i, grtBoard].BoardTitle);
300                                 ListItem.SubItems.Add('-');
301                                 ListItem.Checked := RoundList.Items[i, grtBoard].BoolData;
302                                 ListItem.ImageIndex := 0;
303                         end;
304                 end;
305                 for i := 0 to RoundList.Count[grtItem] - 1 do begin
306                         if (RoundList.Items[i, grtItem].RoundName = RoundName) or (RoundName = '') then begin
307                                 ListItem := RoundListView.Items.Add;
308                                 ListItem.Data := RoundList.Items[i, grtItem];
309                                 ListItem.Caption := RoundList.Items[i, grtItem].RoundName;
310                                 ListItem.SubItems.Add(RoundList.Items[i, grtItem].BoardTitle);
311                                 ListItem.SubItems.Add(RoundList.Items[i, grtItem].ThreadTitle);
312                                 ListItem.Checked := RoundList.Items[i, grtItem].BoolData;
313                                 ListItem.ImageIndex := 1;
314                         end;
315                 end;
316         finally
317                 RoundListView.OnChange := ListChangeEvent;
318         end;
319 end;
320
321 procedure TRoundDialog.RoundDeleteButtonClick(Sender: TObject);
322 var
323 //      Board: TBoard;
324 //      ThreadItem: TThreadItem;
325         RoundItem: TRoundItem;
326         ListChangeEvent: TLVChangeEvent;
327 begin
328         ListChangeEvent := RoundListView.OnChange;
329         RoundListView.OnChange := nil;
330         try
331                 if RoundListView.Selected = nil then
332                         Exit;
333                 if TObject(RoundListView.Selected.Data) is TRoundItem then begin
334                         RoundItem := TRoundItem(RoundListView.Selected.Data);
335                         if( RoundItem.Item is TBoard ) then begin
336                                 TBoard(RoundItem.Item).Round := false;
337                         end else if( RoundItem.Item is TThreadItem ) then begin
338                                 TThreadItem(RoundItem.Item).Round := false;
339                         end;
340                         //RoundList.Delete(RoundItem.URL,RoundItem.RoundType);
341                         {
342                         if RoundItem.RoundType = grtBoard then begin
343                                 //Board := TBoard( RoundItem.Item );
344                                 RoundList.Delete(RoundItem.URL,RoundItem.RoundType);
345                                 Board.Round := False;
346                                 Board.RoundName := '';
347                         end else begin
348                                 //ThreadItem := TThreadItem( RoundItem.Item );
349                                 RoundList.Delete(ThreadItem);
350                                 ThreadItem.Round := False;
351                                 ThreadItem.RoundName := '';
352                         end;
353                         }
354                         GikoForm.ListView.Refresh;
355                 end;
356                 RoundListView.Selected.Delete;
357         finally
358                 RoundListView.OnChange := ListChangeEvent;
359         end;
360 end;
361
362 procedure TRoundDialog.RoundListViewColumnClick(Sender: TObject;
363   Column: TListColumn);
364 begin
365         if (Sender is TCustomListView) then begin
366
367                 if FColumnToSort > -1 then
368                         (Sender as TCustomListView).Column[FColumnToSort].ImageIndex := -1;
369
370                 if FColumnToSort = Column.Index then
371                         FSortOrder := not FSortOrder
372                 else
373                         FSortOrder := false;
374
375                 if FSortOrder then
376                         Column.ImageIndex := 3
377                 else
378                         Column.ImageIndex := 2;
379
380                 FColumnToSort := Column.Index;
381                 (Sender as TCustomListView).AlphaSort;
382         end;
383 end;
384
385 procedure TRoundDialog.RoundListViewCompare(Sender: TObject; Item1,
386   Item2: TListItem; Data: Integer; var Compare: Integer);
387 var
388   ix: Integer;
389 begin
390         if FColumnToSort = 0 then begin
391                 if not FSortOrder then begin
392                         Compare := CompareText(Item1.Caption,Item2.Caption);
393                         if Compare = 0 then
394                                 Compare := CompareValue(Item1.ImageIndex, item2.ImageIndex);
395                 end else begin
396                         Compare := -CompareText(Item1.Caption,Item2.Caption);
397                         if Compare = 0 then
398                                 Compare := -CompareValue(Item1.ImageIndex,item2.ImageIndex);
399                 end;
400         end else begin
401                 ix := FColumnToSort - 1;
402                 if not FSortOrder then begin
403                         Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
404                         if Compare = 0 then
405                                 Compare := CompareValue(Item1.ImageIndex, item2.ImageIndex);
406                 end else begin
407                         Compare := -CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
408                         if Compare = 0 then
409                                 Compare := -CompareValue(Item1.ImageIndex, item2.ImageIndex);
410                 end;
411         end;
412 end;
413 (*
414\83J\83\89\83\80\8fã\82Å\89E\83N\83\8a\83b\83N\82µ\82½\82ç\83\\81[\83g\82ð\89ð\8f\9c\82µ\82Ä\8f\89\8aú\8fó\91Ô\82É\96ß\82·
415 *)
416 procedure TRoundDialog.RoundListViewColumnRightClick(Sender: TObject;
417   Column: TListColumn; Point: TPoint);
418 begin
419         RoundNameComboBox.OnChange(Sender);
420 end;
421
422 end.