OSDN Git Service

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