OSDN Git Service

9192255e3a8cd5c3e1e80bb8bc4a1f943dc82bd0
[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         private
40                 { Private \90é\8c¾ }
41                 function GetRoundCount: Integer;
42                 procedure SetRoundItem(RoundName: string);
43                 function CompareTime(Time1: TDateTime; Time2: TDateTime; MarginMin: Integer): Boolean;
44         public
45                 { Public \90é\8c¾ }
46         end;
47
48
49 implementation
50
51 uses
52         Giko, BoardGroup, RoundData;
53
54 {$R *.DFM}
55
56 procedure TRoundDialog.RoundButtonClick(Sender: TObject);
57 var
58         i: Integer;
59         cnt: Integer;
60         msg: string;
61         Board: TBoard;
62         ThreadItem: TThreadItem;
63         RoundItem: TRoundItem;
64 begin
65 {$IF Defined(FRCRND) }
66         Giko.GikoForm.LoginAction.Checked := true; // \93®\8dì\8e\8e\8c±\97p\93r
67 {$IFEND}
68
69 {$IFNDEF LOOSENUP}      //\8f\84\89ñ\90§\8cÀ\82ð\8aÉ\82ß\82é\82±\82Æ\82É\82µ\82Ä\82½\82ç{$ELSE}\82Ì\95û\82ð\8eg\82¤
70         if not Giko.GikoForm.LoginAction.Checked then begin
71                 if GikoSys.Setting.UserID <> '' then begin
72                         msg := '\83\8d\83O\83C\83\93\82µ\82È\82¢\82Æ\8f\84\89ñ\82Í\8fo\97\88\82Ü\82¹\82ñ' + #13#10
73                                 + '\8d¡\83\8d\83O\83C\83\93\82µ\82Ü\82·\82©';
74                         if MsgBox(Handle, msg, '\8am\94F', MB_YESNO or MB_ICONQUESTION or MB_DEFBUTTON2) <> IDYES then begin
75                                 Exit;
76                         end;
77                         Giko.GikoForm.LoginAction.Execute;
78                 end;
79                 if not Giko.GikoForm.LoginAction.Checked then begin
80                         msg := '\83\8d\83O\83C\83\93\82µ\82È\82¢\82Æ\8f\84\89ñ\82Í\8fo\97\88\82Ü\82¹\82ñ';
81                         MsgBox(Handle, msg, '\83G\83\89\81[', MB_OK or MB_ICONSTOP);
82                         Exit;
83                 end;
84         end;
85 {$ELSE}
86         //\8bK\90§\82ð\8aÉ\82ß\82½\82Ù\82¤\82Í\81A\83X\83\8c\88ê\97\97\82Ì\82Ý\8f\84\89ñ\89Â\94\
87         if not Giko.GikoForm.LoginAction.Checked then begin
88                 if GikoSys.Setting.UserID <> '' then begin
89                         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
90                                 + '\8d¡\83\8d\83O\83C\83\93\82µ\82Ü\82·\82©';
91                         if MsgBox(Handle, msg, '\8am\94F', MB_YESNO or MB_ICONQUESTION or MB_DEFBUTTON2) <> IDYES then begin
92                                 Exit;
93                         end;
94                         Giko.GikoForm.LoginAction.Execute;
95                 end;
96         end;
97         //\81\9c\82È\82µ\8f\84\89ñ\82Í15\95ª\88È\8fã\82Ì\8aÔ\8au\82ð\95K\97v\82Æ\82·\82é
98         if not Giko.GikoForm.LoginAction.Checked then begin
99                 if CompareTime(GikoForm.LastRoundTime, Now, 30) then begin
100                         msg := '\88ê\93x\8f\84\89ñ\82·\82é\82Æ\82R\82O\95ª\8aÔ\8f\84\89ñ\82Í\8fo\97\88\82Ü\82¹\82ñ';
101                         MsgBox(Handle, msg, '\83G\83\89\81[', MB_OK or MB_ICONSTOP);
102                         Exit;
103                 end;
104         end;
105 {$ENDIF}
106
107         //\88ê\82Â\82à\8f\84\89ñ\82É\90Ý\92è\82µ\82Ä\82¢\82È\82©\82Á\82½\82ç\83G\83\89\81[\82É\82·\82é
108         cnt := GetRoundCount;
109         if cnt = 0 then begin
110                 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¢';
111                 MsgBox(Handle, msg, '\83G\83\89\81[', MB_OK or MB_ICONSTOP);
112                 Exit;
113         end;
114
115 {$IFNDEF LOOSENUP}
116         //\81\9c\82È\82µ\8f\84\89ñ\82Í\82P\93x\82É100\8cÂ\82Ü\82Å\82É\82·\82é
117         if not Giko.GikoForm.LoginAction.Checked then begin
118                 if cnt > 100 then begin
119                         msg := '\82P\82O\82O\8cÂ\88È\8fã\82Í\88ê\93x\82É\8f\84\89ñ\82Å\82«\82Ü\82¹\82ñ';
120                         MsgBox(Handle, msg, '\83G\83\89\81[', MB_OK or MB_ICONSTOP);
121                         Exit;
122                 end;
123         end;
124 {$ENDIF}
125
126         //\8f\84\89ñ\82É\93o\98^\82³\82ê\82Ä\82¢\82é\94Â\82Ì\90\94\82¾\82¯\82Ü\82í\82·
127         for i := 0 to RoundList.Count[grtBoard] - 1 do begin
128                 RoundItem := RoundList.Items[i, grtBoard];
129                 //\8f\84\89ñ\82Ì\83`\83F\83b\83N\82ª\82Â\82¢\82Ä\82¢\82È\82¯\82ê\82Î\83X\83\8b\81[
130                 if not RoundItem.BoolData then Continue;
131                 //\8am\8eÀ\82É\94Â\82Ì\82Í\82¸\82¾\82¯\82Ç\83`\83F\83b\83N
132                 if RoundItem.RoundType = grtBoard then begin
133                         Board := TBoard( RoundItem.Item );
134                         //Board\82Ì\83I\83u\83W\83F\83N\83g\82ª\91\8dÝ\82·\82ê\82Î\81ADL\82·\82é
135                         if Board <> nil then begin
136                                 if not Board.IsThreadDatRead then
137                                         GikoSys.ReadSubjectFile(Board);
138                                 GikoForm.DownloadList(Board);
139                         end;
140                 end;
141         end;
142         for i := 0 to RoundList.Count[grtItem] - 1 do begin
143                 RoundItem := RoundList.Items[i, grtItem];
144                 //\8f\84\89ñ\82Ì\83`\83F\83b\83N\82ª\82Â\82¢\82Ä\82¢\82È\82¯\82ê\82Î\83X\83\8b\81[
145                 if not RoundItem.BoolData then Continue;
146 {$IFDEF LOOSENUP}
147                 //\81\9c\82È\82µ\8f\84\89ñ\82Í\83X\83\8c\83b\83h\82Í\82Å\82«\82È\82¢\82±\82Æ\82É\82·\82é
148                 if not Giko.GikoForm.LoginAction.Checked then begin
149                         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';
150                         MsgBox(Handle, msg, '\83G\83\89\81[', MB_OK or MB_ICONSTOP);
151                         break;
152                 end;
153 {$ENDIF}
154                 if RoundItem.RoundType = grtItem then begin
155                         ThreadItem := TThreadItem( RoundItem.Item );
156                         if ThreadItem <> nil then begin
157                                 GikoForm.DownloadContent(ThreadItem);
158                         end;
159                 end;
160         end;
161         GikoForm.LastRoundTime := Now;
162         Close;
163 end;
164
165 function TRoundDialog.GetRoundCount: Integer;
166 var
167         i: Integer;
168         RoundItem: TRoundItem;
169 begin
170         Result := 0;
171         for i := 0 to RoundList.Count[grtBoard] - 1 do begin
172                 RoundItem := RoundList.Items[i, grtBoard];
173                 if RoundItem.BoolData then
174                         Result := Result + 1;
175         end;
176         for i := 0 to RoundList.Count[grtItem] - 1 do begin
177                 RoundItem := RoundList.Items[i, grtItem];
178                 if RoundItem.BoolData then
179                         Result := Result + 1;
180         end;
181 end;
182
183 function TRoundDialog.CompareTime(Time1: TDateTime; Time2: TDateTime; MarginMin: Integer): Boolean;
184 const
185         AMin: Double = (1 / 24 / 60);
186 var
187         d: TDateTime;
188 begin
189         d := Time1 + (AMin * MarginMin);
190         Result := Time2 < d;
191 end;
192
193 procedure TRoundDialog.FormCreate(Sender: TObject);
194 var
195         i: Integer;
196 begin
197         RoundNameComboBox.Items.Add('\81i\82·\82×\82Ä\81j');
198         for i := 0 to RoundList.RoundNameList.Count - 1 do
199                 RoundNameComboBox.Items.Add(RoundList.RoundNameList[i]);
200         for i := 0 to RoundList.Count[grtBoard] - 1 do
201                 RoundList.Items[i, grtBoard].BoolData := False;
202         for i := 0 to RoundList.Count[grtItem] - 1 do
203                 RoundList.Items[i, grtItem].BoolData := False;
204         RoundNameComboBox.ItemIndex := 0;
205         SetRoundItem('');
206 end;
207
208 procedure TRoundDialog.RoundListViewChange(Sender: TObject;
209         Item: TListItem; Change: TItemChange);
210 var
211         RoundItem: TRoundItem;
212 begin
213         if TObject(Item.Data) is TRoundItem then begin
214                 RoundItem := TRoundItem(Item.Data);
215                 RoundItem.BoolData := Item.Checked;
216         end;
217 end;
218
219 procedure TRoundDialog.AllSelectButtonClick(Sender: TObject);
220 var
221         i: Integer;
222         RoundItem: TRoundItem;
223         ListChangeEvent: TLVChangeEvent;
224 begin
225         ListChangeEvent := RoundListView.OnChange;
226         RoundListView.OnChange := nil;
227         try
228                 for i := 0 to RoundListView.Items.Count - 1 do begin
229                         if TObject(RoundListView.Items[i].Data) is TRoundItem then begin
230                                 RoundItem := TRoundItem(RoundListView.Items[i].Data);
231                                 RoundItem.BoolData := True;
232                                 RoundListView.Items[i].Checked := True;
233                         end;
234                 end;
235         finally
236                 RoundListView.OnChange := ListChangeEvent;
237         end;
238 end;
239
240 procedure TRoundDialog.AllCancelButtonClick(Sender: TObject);
241 var
242         i: Integer;
243         RoundItem: TRoundItem;
244         ListChangeEvent: TLVChangeEvent;
245 begin
246         ListChangeEvent := RoundListView.OnChange;
247         RoundListView.OnChange := nil;
248         try
249                 for i := 0 to RoundListView.Items.Count - 1 do begin
250                         if TObject(RoundListView.Items[i].Data) is TRoundItem then begin
251                                 RoundItem := TRoundItem(RoundListView.Items[i].Data);
252                                 RoundItem.BoolData := False;
253                                 RoundListView.Items[i].Checked := False;
254                         end;
255                 end;
256         finally
257                 RoundListView.OnChange := ListChangeEvent;
258         end;
259 end;
260
261 procedure TRoundDialog.RoundNameComboBoxChange(Sender: TObject);
262 begin
263         if RoundNameComboBox.ItemIndex = 0 then
264                 SetRoundItem('')
265         else
266                 SetRoundItem(RoundNameComboBox.Items[RoundNameComboBox.itemIndex]);
267 end;
268
269 procedure TRoundDialog.SetRoundItem(RoundName: string);
270 var
271         ListItem: TListItem;
272         i: Integer;
273         ListChangeEvent: TLVChangeEvent;
274 begin
275         ListChangeEvent := RoundListView.OnChange;
276         RoundListView.OnChange := nil;
277         try
278                 RoundListView.Clear;
279                 for i := 0 to RoundList.Count[grtBoard] - 1 do begin
280                         if (RoundList.Items[i, grtBoard].RoundName = RoundName) or (RoundName = '') then begin
281                                 ListItem := RoundListView.Items.Add;
282                                 ListItem.Data := RoundList.Items[i, grtBoard];
283                                 ListItem.Caption := RoundList.Items[i, grtBoard].RoundName;
284                                 ListItem.SubItems.Add(RoundList.Items[i, grtBoard].BoardTitle);
285                                 ListItem.SubItems.Add('-');
286                                 ListItem.Checked := RoundList.Items[i, grtBoard].BoolData;
287                                 ListItem.ImageIndex := 0;
288                         end;
289                 end;
290                 for i := 0 to RoundList.Count[grtItem] - 1 do begin
291                         if (RoundList.Items[i, grtItem].RoundName = RoundName) or (RoundName = '') then begin
292                                 ListItem := RoundListView.Items.Add;
293                                 ListItem.Data := RoundList.Items[i, grtItem];
294                                 ListItem.Caption := RoundList.Items[i, grtItem].RoundName;
295                                 ListItem.SubItems.Add(RoundList.Items[i, grtItem].BoardTitle);
296                                 ListItem.SubItems.Add(RoundList.Items[i, grtItem].ThreadTitle);
297                                 ListItem.Checked := RoundList.Items[i, grtItem].BoolData;
298                                 ListItem.ImageIndex := 1;
299                         end;
300                 end;
301         finally
302                 RoundListView.OnChange := ListChangeEvent;
303         end;
304 end;
305
306 procedure TRoundDialog.RoundDeleteButtonClick(Sender: TObject);
307 var
308 //      Board: TBoard;
309 //      ThreadItem: TThreadItem;
310         RoundItem: TRoundItem;
311         ListChangeEvent: TLVChangeEvent;
312 begin
313         ListChangeEvent := RoundListView.OnChange;
314         RoundListView.OnChange := nil;
315         try
316                 if RoundListView.Selected = nil then
317                         Exit;
318                 if TObject(RoundListView.Selected.Data) is TRoundItem then begin
319                         RoundItem := TRoundItem(RoundListView.Selected.Data);
320                         if( RoundItem.Item is TBoard ) then begin
321                                 TBoard(RoundItem.Item).Round := false;
322                         end else if( RoundItem.Item is TThreadItem ) then begin
323                                 TThreadItem(RoundItem.Item).Round := false;
324                         end;
325                         //RoundList.Delete(RoundItem.URL,RoundItem.RoundType);
326             {
327                         if RoundItem.RoundType = grtBoard then begin
328                                 //Board := TBoard( RoundItem.Item );
329                                 RoundList.Delete(RoundItem.URL,RoundItem.RoundType);
330                                 Board.Round := False;
331                                 Board.RoundName := '';
332                         end else begin
333                                 //ThreadItem := TThreadItem( RoundItem.Item );
334                                 RoundList.Delete(ThreadItem);
335                                 ThreadItem.Round := False;
336                                 ThreadItem.RoundName := '';
337                         end;
338             }
339                         GikoForm.ListView.Refresh;
340                 end;
341                 RoundListView.Selected.Delete;
342         finally
343                 RoundListView.OnChange := ListChangeEvent;
344         end;
345 end;
346
347 end.