6 Windows, Classes, Controls, Forms, StdCtrls, ComCtrls, Menus,
7 SysUtils, ImgList, ExtCtrls, GikoSystem, GikoUtil;
10 TRoundDialog = class(TForm)
11 RoundPopupMenu: TPopupMenu;
16 ItemIcon16: TImageList;
20 RoundNameComboBox: TComboBox;
23 AllSelectButton: TButton;
24 AllCancelButton: TButton;
25 RoundDeleteButton: TButton;
29 StatusBar1: TStatusBar;
30 RoundListView: TListView;
31 procedure RoundButtonClick(Sender: TObject);
32 procedure FormCreate(Sender: TObject);
33 procedure RoundListViewChange(Sender: TObject; Item: TListItem;
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;
41 procedure RoundListViewCompare(Sender: TObject; Item1,
42 Item2: TListItem; Data: Integer; var Compare: Integer);
45 FColumnToSort: Integer;
47 function GetRoundCount: Integer;
48 procedure SetRoundItem(RoundName: string);
49 function CompareTime(Time1: TDateTime; Time2: TDateTime; MarginMin: Integer): Boolean;
55 // RoundDialog: TRoundDialog;
60 Giko, BoardGroup, RoundData, Math;
64 procedure TRoundDialog.RoundButtonClick(Sender: TObject);
70 ThreadItem: TThreadItem;
71 RoundItem: TRoundItem;
73 // if CompareTime(GikoForm.LastRoundTime, Now, 5) then begin
74 // msg := '
\88ê
\93x
\8f\84\89ñ
\82·
\82é
\82Æ
\82T
\95ª
\8aÔ
\8f\84\89ñ
\82Í
\8fo
\97\88\82Ü
\82¹
\82ñ';
75 // GikoSys.MsgBox(msg, '
\83G
\83\89\81[', MB_OK or MB_ICONSTOP);
78 {$IF Defined(FRCRND) }
79 Giko.GikoForm.LoginAction.Checked := true; //
\93®
\8dì
\8e\8e\8c±
\97p
\93r
82 if not Giko.GikoForm.LoginAction.Checked then begin
83 if GikoSys.Setting.UserID <> '' then begin
84 msg := '
\83\8d\83O
\83C
\83\93\82µ
\82È
\82¢
\82Æ
\8f\84\89ñ
\82Í
\8fo
\97\88\82Ü
\82¹
\82ñ' + #13#10
85 + '
\8d¡
\83\8d\83O
\83C
\83\93\82µ
\82Ü
\82·
\82©';
86 if MsgBox(Handle, msg, '
\8am
\94F', MB_YESNO or MB_ICONQUESTION or MB_DEFBUTTON2) <> IDYES then begin
89 Giko.GikoForm.LoginAction.Execute;
93 if not Giko.GikoForm.LoginAction.Checked then begin
94 msg := '
\83\8d\83O
\83C
\83\93\82µ
\82È
\82¢
\82Æ
\8f\84\89ñ
\82Í
\8fo
\97\88\82Ü
\82¹
\82ñ';// + #13#10
95 // + '
\95ª
\82©
\82ç
\82È
\82¢
\90l
\82Í
\83M
\83R
\83i
\83r
\83X
\83\8c\83b
\83h
\82Å
\95·
\82¢
\82Ä
\82
\82¾
\82³
\82¢';
96 MsgBox(Handle, msg, '
\83G
\83\89\81[', MB_OK or MB_ICONSTOP);
100 cnt := GetRoundCount;
101 if cnt = 0 then begin
102 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¢';
103 MsgBox(Handle, msg, '
\83G
\83\89\81[', MB_OK or MB_ICONSTOP);
107 for i := 0 to RoundList.Count[grtBoard] - 1 do begin
108 RoundItem := RoundList.Items[i, grtBoard];
109 if not RoundItem.BoolData then Continue;
110 if not Giko.GikoForm.LoginAction.Checked then Exit;
111 if RoundItem.RoundType = grtBoard then begin
112 //Board := TBoard( RoundItem.Item );
113 Board := BBSsFindBoardFromURL(RoundItem.URL);
114 if Board <> nil then begin
115 if not Board.IsThreadDatRead then
116 GikoSys.ReadSubjectFile(Board);
117 GikoForm.DownloadList(Board);
121 for i := 0 to RoundList.Count[grtItem] - 1 do begin
122 RoundItem := RoundList.Items[i, grtItem];
123 if not RoundItem.BoolData then Continue;
124 if not Giko.GikoForm.LoginAction.Checked then Exit;
125 if RoundItem.RoundType = grtItem then begin
126 //ThreadItem := TThreadItem( RoundItem.Item );
127 ThreadItem := BBSsFindThreadFromURL(RoundItem.URL);
128 if ThreadItem <> nil then begin
129 // GikoForm.AddMessageList('debug2:' + IntToStr(i), nil);
130 GikoForm.DownloadContent(ThreadItem);
134 // GikoForm.LastRoundTime := Now;
138 function TRoundDialog.GetRoundCount: Integer;
141 RoundItem: TRoundItem;
144 for i := 0 to RoundList.Count[grtBoard] - 1 do begin
145 RoundItem := RoundList.Items[i, grtBoard];
146 if RoundItem.BoolData then
147 Result := Result + 1;
149 for i := 0 to RoundList.Count[grtItem] - 1 do begin
150 RoundItem := RoundList.Items[i, grtItem];
151 if RoundItem.BoolData then
152 Result := Result + 1;
156 function TRoundDialog.CompareTime(Time1: TDateTime; Time2: TDateTime; MarginMin: Integer): Boolean;
158 AMin: Double = (1 / 24 / 60);
162 d := Time1 + (AMin * MarginMin);
166 procedure TRoundDialog.FormCreate(Sender: TObject);
171 RoundNameComboBox.Items.Add('
\81i
\82·
\82×
\82Ä
\81j');
172 for i := 0 to RoundList.RoundNameList.Count - 1 do
173 RoundNameComboBox.Items.Add(RoundList.RoundNameList[i]);
174 for i := 0 to RoundList.Count[grtBoard] - 1 do
175 RoundList.Items[i, grtBoard].BoolData := False;
176 for i := 0 to RoundList.Count[grtItem] - 1 do
177 RoundList.Items[i, grtItem].BoolData := False;
178 RoundNameComboBox.ItemIndex := 0;
182 procedure TRoundDialog.RoundListViewChange(Sender: TObject;
183 Item: TListItem; Change: TItemChange);
185 RoundItem: TRoundItem;
187 if TObject(Item.Data) is TRoundItem then begin
188 RoundItem := TRoundItem(Item.Data);
189 RoundItem.BoolData := Item.Checked;
193 procedure TRoundDialog.AllSelectButtonClick(Sender: TObject);
196 RoundItem: TRoundItem;
197 ListChangeEvent: TLVChangeEvent;
199 ListChangeEvent := RoundListView.OnChange;
200 RoundListView.OnChange := nil;
202 for i := 0 to RoundListView.Items.Count - 1 do begin
203 if TObject(RoundListView.Items[i].Data) is TRoundItem then begin
204 RoundItem := TRoundItem(RoundListView.Items[i].Data);
205 RoundItem.BoolData := True;
206 RoundListView.Items[i].Checked := True;
210 RoundListView.OnChange := ListChangeEvent;
214 procedure TRoundDialog.AllCancelButtonClick(Sender: TObject);
217 RoundItem: TRoundItem;
218 ListChangeEvent: TLVChangeEvent;
220 ListChangeEvent := RoundListView.OnChange;
221 RoundListView.OnChange := nil;
223 for i := 0 to RoundListView.Items.Count - 1 do begin
224 if TObject(RoundListView.Items[i].Data) is TRoundItem then begin
225 RoundItem := TRoundItem(RoundListView.Items[i].Data);
226 RoundItem.BoolData := False;
227 RoundListView.Items[i].Checked := False;
231 RoundListView.OnChange := ListChangeEvent;
235 procedure TRoundDialog.RoundNameComboBoxChange(Sender: TObject);
237 if RoundNameComboBox.ItemIndex = 0 then
240 SetRoundItem(RoundNameComboBox.Items[RoundNameComboBox.itemIndex]);
243 procedure TRoundDialog.SetRoundItem(RoundName: string);
247 ListChangeEvent: TLVChangeEvent;
249 ListChangeEvent := RoundListView.OnChange;
250 RoundListView.OnChange := nil;
253 for i := 0 to RoundList.Count[grtBoard] - 1 do begin
254 if (RoundList.Items[i, grtBoard].RoundName = RoundName) or (RoundName = '') then begin
255 ListItem := RoundListView.Items.Add;
256 ListItem.Data := RoundList.Items[i, grtBoard];
257 ListItem.Caption := RoundList.Items[i, grtBoard].RoundName;
258 ListItem.SubItems.Add(RoundList.Items[i, grtBoard].BoardTitle);
259 ListItem.SubItems.Add('-');
260 ListItem.Checked := RoundList.Items[i, grtBoard].BoolData;
261 ListItem.ImageIndex := 0;
264 for i := 0 to RoundList.Count[grtItem] - 1 do begin
265 if (RoundList.Items[i, grtItem].RoundName = RoundName) or (RoundName = '') then begin
266 ListItem := RoundListView.Items.Add;
267 ListItem.Data := RoundList.Items[i, grtItem];
268 ListItem.Caption := RoundList.Items[i, grtItem].RoundName;
269 ListItem.SubItems.Add(RoundList.Items[i, grtItem].BoardTitle);
270 ListItem.SubItems.Add(RoundList.Items[i, grtItem].ThreadTitle);
271 ListItem.Checked := RoundList.Items[i, grtItem].BoolData;
272 ListItem.ImageIndex := 1;
276 RoundListView.OnChange := ListChangeEvent;
280 procedure TRoundDialog.RoundDeleteButtonClick(Sender: TObject);
283 // ThreadItem: TThreadItem;
284 RoundItem: TRoundItem;
285 ListChangeEvent: TLVChangeEvent;
287 ListChangeEvent := RoundListView.OnChange;
288 RoundListView.OnChange := nil;
290 if RoundListView.Selected = nil then
292 if TObject(RoundListView.Selected.Data) is TRoundItem then begin
293 RoundItem := TRoundItem(RoundListView.Selected.Data);
294 RoundList.Delete(RoundItem.URL,RoundItem.RoundType);
296 if RoundItem.RoundType = grtBoard then begin
297 //Board := TBoard( RoundItem.Item );
298 RoundList.Delete(RoundItem.URL,RoundItem.RoundType);
299 Board.Round := False;
300 Board.RoundName := '';
302 //ThreadItem := TThreadItem( RoundItem.Item );
303 RoundList.Delete(ThreadItem);
304 ThreadItem.Round := False;
305 ThreadItem.RoundName := '';
308 GikoForm.ListView.Refresh;
310 RoundListView.Selected.Delete;
312 RoundListView.OnChange := ListChangeEvent;
316 procedure TRoundDialog.RoundListViewColumnClick(Sender: TObject;
317 Column: TListColumn);
319 if FColumnToSort > -1 then
320 (Sender as TCustomListView).Column[FColumnToSort].ImageIndex := -1;
322 if FColumnToSort = Column.Index then
323 FSortOrder := not FSortOrder
328 Column.ImageIndex := 3
330 Column.ImageIndex := 2;
332 FColumnToSort := Column.Index;
333 (Sender as TCustomListView).AlphaSort;
336 procedure TRoundDialog.RoundListViewCompare(Sender: TObject; Item1,
337 Item2: TListItem; Data: Integer; var Compare: Integer);
341 if FColumnToSort = 0 then begin
342 if not FSortOrder then begin
343 Compare := CompareText(Item1.Caption,Item2.Caption);
345 Compare := CompareValue(Item1.ImageIndex, item2.ImageIndex);
347 Compare := -CompareText(Item1.Caption,Item2.Caption);
349 Compare := -CompareValue(Item1.ImageIndex,item2.ImageIndex);
352 ix := FColumnToSort - 1;
353 if not FSortOrder then begin
354 Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
356 Compare := CompareValue(Item1.ImageIndex, item2.ImageIndex);
358 Compare := -CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
360 Compare := -CompareValue(Item1.ImageIndex, item2.ImageIndex);