OSDN Git Service

・Windows 95 でもお気に入りが使えるようになった。
[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 //var
49 //      RoundDialog: TRoundDialog;
50
51 implementation
52
53 uses
54         Giko, BoardGroup, RoundData;
55
56 {$R *.DFM}
57
58 procedure TRoundDialog.RoundButtonClick(Sender: TObject);
59 var
60         i: Integer;
61         cnt: Integer;
62         msg: string;
63         Board: TBoard;
64         ThreadItem: TThreadItem;
65         RoundItem: TRoundItem;
66 begin
67 //      if CompareTime(GikoForm.LastRoundTime, Now, 5) then begin
68 //              msg := '\88ê\93x\8f\84\89ñ\82·\82é\82Æ\82T\95ª\8aÔ\8f\84\89ñ\82Í\8fo\97\88\82Ü\82¹\82ñ';
69 //              GikoSys.MsgBox(msg, '\83G\83\89\81[', MB_OK or MB_ICONSTOP);
70 //              Exit;
71 //      end;
72
73         if not Giko.GikoForm.LoginAction.Checked then begin
74                 msg := '\83\8d\83O\83C\83\93\82µ\82È\82¢\82Æ\8f\84\89ñ\82Í\8fo\97\88\82Ü\82¹\82ñ' + #13#10
75                                  + '\95ª\82©\82ç\82È\82¢\90l\82Í\83M\83R\83i\83r\83X\83\8c\83b\83h\82Å\95·\82¢\82Ä\82­\82¾\82³\82¢';
76                 MsgBox(Handle, msg, '\83G\83\89\81[', MB_OK or MB_ICONSTOP);
77                 Exit;
78         end;
79
80         cnt := GetRoundCount;
81         if cnt = 0 then begin
82                 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¢';
83                 MsgBox(Handle, msg, '\83G\83\89\81[', MB_OK or MB_ICONSTOP);
84                 Exit;
85         end;
86
87         for i := 0 to RoundList.Count[grtBoard] - 1 do begin
88                 RoundItem := RoundList.Items[i, grtBoard];
89                 if not RoundItem.BoolData then Continue;
90                 if not Giko.GikoForm.LoginAction.Checked then Exit;
91                 if RoundItem.RoundType = grtBoard then begin
92                         Board := BBS2ch.FindBBSID(RoundItem.BBSID);
93                         if Board <> nil then begin
94                                 if not Board.IsThreadDatRead then
95                                         GikoSys.ReadSubjectFile(Board);
96                                 GikoForm.DownloadList(Board);
97                         end;
98                 end;
99         end;
100         for i := 0 to RoundList.Count[grtItem] - 1 do begin
101                 RoundItem := RoundList.Items[i, grtItem];
102                 if not RoundItem.BoolData then Continue;
103                 if not Giko.GikoForm.LoginAction.Checked then Exit;
104                 Board := BBS2ch.FindBBSID(RoundItem.BBSID);
105                 if Board <> nil then begin
106                         if not Board.IsThreadDatRead then
107                                 GikoSys.ReadSubjectFile(Board);
108                         ThreadItem := BBS2ch.FindThreadItem(RoundItem.BBSID, RoundItem.FileName);
109                         if ThreadItem <> nil then begin
110 //                              GikoForm.AddMessageList('debug2:' + IntToStr(i), nil);
111                                 GikoForm.DownloadContent(ThreadItem);
112                         end;
113                 end;
114         end;
115 //      GikoForm.LastRoundTime := Now;
116         Close;
117 end;
118
119 function TRoundDialog.GetRoundCount: Integer;
120 var
121         i: Integer;
122         RoundItem: TRoundItem;
123 begin
124         Result := 0;
125         for i := 0 to RoundList.Count[grtBoard] - 1 do begin
126                 RoundItem := RoundList.Items[i, grtBoard];
127                 if RoundItem.BoolData then
128                         Result := Result + 1;
129         end;
130         for i := 0 to RoundList.Count[grtItem] - 1 do begin
131                 RoundItem := RoundList.Items[i, grtItem];
132                 if RoundItem.BoolData then
133                         Result := Result + 1;
134         end;
135 end;
136
137 function TRoundDialog.CompareTime(Time1: TDateTime; Time2: TDateTime; MarginMin: Integer): Boolean;
138 const
139         AMin: Double = (1 / 24 / 60);
140 var
141         d: TDateTime;
142 begin
143         d := Time1 + (AMin * MarginMin);
144         Result := Time2 < d;
145 end;
146
147 procedure TRoundDialog.FormCreate(Sender: TObject);
148 var
149         i: Integer;
150 begin
151         RoundNameComboBox.Items.Add('\81i\82·\82×\82Ä\81j');
152         for i := 0 to RoundList.RoundNameList.Count - 1 do
153                 RoundNameComboBox.Items.Add(RoundList.RoundNameList[i]);
154         for i := 0 to RoundList.Count[grtBoard] - 1 do
155                 RoundList.Items[i, grtBoard].BoolData := False;
156         for i := 0 to RoundList.Count[grtItem] - 1 do
157                 RoundList.Items[i, grtItem].BoolData := False;
158         RoundNameComboBox.ItemIndex := 0;
159         SetRoundItem('');
160 end;
161
162 procedure TRoundDialog.RoundListViewChange(Sender: TObject;
163         Item: TListItem; Change: TItemChange);
164 var
165         RoundItem: TRoundItem;
166 begin
167         if TObject(Item.Data) is TRoundItem then begin
168                 RoundItem := TRoundItem(Item.Data);
169                 RoundItem.BoolData := Item.Checked;
170         end;
171 end;
172
173 procedure TRoundDialog.AllSelectButtonClick(Sender: TObject);
174 var
175         i: Integer;
176         RoundItem: TRoundItem;
177         ListChangeEvent: TLVChangeEvent;
178 begin
179         ListChangeEvent := RoundListView.OnChange;
180         RoundListView.OnChange := nil;
181         try
182                 for i := 0 to RoundListView.Items.Count - 1 do begin
183                         if TObject(RoundListView.Items[i].Data) is TRoundItem then begin
184                                 RoundItem := TRoundItem(RoundListView.Items[i].Data);
185                                 RoundItem.BoolData := True;
186                                 RoundListView.Items[i].Checked := True;
187                         end;
188                 end;
189         finally
190                 RoundListView.OnChange := ListChangeEvent;
191         end;
192 end;
193
194 procedure TRoundDialog.AllCancelButtonClick(Sender: TObject);
195 var
196         i: Integer;
197         RoundItem: TRoundItem;
198         ListChangeEvent: TLVChangeEvent;
199 begin
200         ListChangeEvent := RoundListView.OnChange;
201         RoundListView.OnChange := nil;
202         try
203                 for i := 0 to RoundListView.Items.Count - 1 do begin
204                         if TObject(RoundListView.Items[i].Data) is TRoundItem then begin
205                                 RoundItem := TRoundItem(RoundListView.Items[i].Data);
206                                 RoundItem.BoolData := False;
207                                 RoundListView.Items[i].Checked := False;
208                         end;
209                 end;
210         finally
211                 RoundListView.OnChange := ListChangeEvent;
212         end;
213 end;
214
215 procedure TRoundDialog.RoundNameComboBoxChange(Sender: TObject);
216 begin
217         if RoundNameComboBox.ItemIndex = 0 then
218                 SetRoundItem('')
219         else
220                 SetRoundItem(RoundNameComboBox.Items[RoundNameComboBox.itemIndex]);
221 end;
222
223 procedure TRoundDialog.SetRoundItem(RoundName: string);
224 var
225         ListItem: TListItem;
226         i: Integer;
227         ListChangeEvent: TLVChangeEvent;
228 begin
229         ListChangeEvent := RoundListView.OnChange;
230         RoundListView.OnChange := nil;
231         try
232                 RoundListView.Clear;
233                 for i := 0 to RoundList.Count[grtBoard] - 1 do begin
234                         if (RoundList.Items[i, grtBoard].RoundName = RoundName) or (RoundName = '') then begin
235                                 ListItem := RoundListView.Items.Add;
236                                 ListItem.Data := RoundList.Items[i, grtBoard];
237                                 ListItem.Caption := RoundList.Items[i, grtBoard].RoundName;
238                                 ListItem.SubItems.Add(RoundList.Items[i, grtBoard].BoardTitle);
239                                 ListItem.SubItems.Add('-');
240                                 ListItem.Checked := RoundList.Items[i, grtBoard].BoolData;
241                                 ListItem.ImageIndex := 0;
242                         end;
243                 end;
244                 for i := 0 to RoundList.Count[grtItem] - 1 do begin
245                         if (RoundList.Items[i, grtItem].RoundName = RoundName) or (RoundName = '') then begin
246                                 ListItem := RoundListView.Items.Add;
247                                 ListItem.Data := RoundList.Items[i, grtItem];
248                                 ListItem.Caption := RoundList.Items[i, grtItem].RoundName;
249                                 ListItem.SubItems.Add(RoundList.Items[i, grtItem].BoardTitle);
250                                 ListItem.SubItems.Add(RoundList.Items[i, grtItem].ThreadTitle);
251                                 ListItem.Checked := RoundList.Items[i, grtItem].BoolData;
252                                 ListItem.ImageIndex := 1;
253                         end;
254                 end;
255         finally
256                 RoundListView.OnChange := ListChangeEvent;
257         end;
258 end;
259
260 procedure TRoundDialog.RoundDeleteButtonClick(Sender: TObject);
261 var
262         Board: TBoard;
263         ThreadItem: TThreadItem;
264         RoundItem: TRoundItem;
265         ListChangeEvent: TLVChangeEvent;
266 begin
267         ListChangeEvent := RoundListView.OnChange;
268         RoundListView.OnChange := nil;
269         try
270                 if RoundListView.Selected = nil then
271                         Exit;
272                 if TObject(RoundListView.Selected.Data) is TRoundItem then begin
273                         RoundItem := TRoundItem(RoundListView.Selected.Data);
274                         Board := BBS2ch.FindBBSID(RoundItem.BBSID);
275                         if RoundItem.RoundType = grtBoard then begin
276                                 RoundList.Delete(Board);
277                                 Board.Round := False;
278                                 Board.RoundName := '';
279                         end else begin
280                                 if not Board.IsThreadDatRead then
281                                         GikoSys.ReadSubjectFile(Board);
282                                 ThreadItem := BBS2ch.FindThreadItem(RoundItem.BBSID, RoundItem.FileName);
283                                 RoundList.Delete(ThreadItem);
284                                 ThreadItem.Round := False;
285                                 ThreadItem.RoundName := '';
286                         end;
287                         GikoForm.ListView.Refresh;
288                 end;
289                 RoundListView.Selected.Delete;
290         finally
291                 RoundListView.OnChange := ListChangeEvent;
292         end;
293 end;
294
295 end.