OSDN Git Service

・TThreadItem クラス、およびクラスの受け渡し処理を追加。
[gikonavigoeson/gikonavi.git] / Kotehan.pas
1 unit Kotehan;
2
3 interface
4
5 uses
6         Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7         Dialogs, StdCtrls, ComCtrls, ExtCtrls,
8         GikoSystem, BoardGroup;
9
10 type
11         TGikoKotehanView = (gkvAll, gkvEntry, gkvBlank);
12
13         TKotehanDialog = class(TForm)
14                 Panel1: TPanel;
15                 Panel2: TPanel;
16     OKButton: TButton;
17     CancelButton: TButton;
18                 Panel3: TPanel;
19                 KotehanListView: TListView;
20                 Panel4: TPanel;
21                 ViewComboBox: TComboBox;
22                 Label1: TLabel;
23                 Label2: TLabel;
24     HandleEdit: TEdit;
25     HandleLabel: TLabel;
26     MailLabel: TLabel;
27     MailEdit: TEdit;
28     ApplyButton: TButton;
29     StatusBar1: TStatusBar;
30                 procedure FormCreate(Sender: TObject);
31     procedure ViewComboBoxChange(Sender: TObject);
32     procedure FormDestroy(Sender: TObject);
33     procedure KotehanListViewChange(Sender: TObject; Item: TListItem;
34       Change: TItemChange);
35     procedure ApplyButtonClick(Sender: TObject);
36     procedure OKButtonClick(Sender: TObject);
37         private
38                 { Private \90é\8c¾ }
39                 FList: TList;
40                 procedure SetKotehanList(View: TGikoKotehanView);
41         public
42                 { Public \90é\8c¾ }
43         end;
44
45         TKotehanData = class
46         private
47                 FBoard: TBoard;
48                 FKotehanName: string;
49                 FKotehanMail: string;
50         end;
51
52 var
53         KotehanDialog: TKotehanDialog;
54
55 implementation
56
57 {$R *.dfm}
58
59 procedure TKotehanDialog.FormCreate(Sender: TObject);
60 var
61         i: Integer;
62         j: Integer;
63         Category: TCategory;
64         Board: TBoard;
65         KoteData: TKotehanData;
66 begin
67         FList := TList.Create;
68
69         for i := 0 to BBS2ch.Count - 1 do begin
70                 Category := BBS2ch.Items[i];
71                 for j := 0 to Category.Count - 1 do begin
72                         Board := Category.Items[j];
73                         KoteData := TKotehanData.Create;
74                         KoteData.FBoard := Board;
75                         KoteData.FKotehanName := Board.KotehanName;
76                         KoteData.FKotehanMail := Board.KotehanMail;
77                         FList.Add(KoteData);
78                 end;
79         end;
80         ViewComboBox.Items.Add('\82·\82×\82Ä\95\\8e¦');
81         ViewComboBox.Items.Add('\90Ý\92è\8dÏ\82Ì\82Ý\95\\8e¦');
82         ViewComboBox.Items.Add('\96¢\90Ý\92è\82Ì\82Ý\95\\8e¦');
83         ViewComboBox.ItemIndex := 0;
84         SetKotehanList(gkvAll);
85 end;
86
87 procedure TKotehanDialog.ViewComboBoxChange(Sender: TObject);
88 var
89         View: TGikoKotehanView;
90 begin
91         View := gkvAll;
92         if ViewComboBox.ItemIndex = 1 then
93                 View := gkvEntry
94         else if ViewComboBox.ItemIndex = 2 then
95                 View := gkvBlank;
96         SetKotehanList(View);
97 end;
98
99 procedure TKotehanDialog.SetKotehanList(View: TGikoKotehanView);
100 var
101         i: Integer;
102         Item: TListItem;
103         KoteData: TKotehanData;
104 begin
105         KotehanListView.Items.BeginUpdate;
106         try
107                 KotehanListView.Items.Clear;
108                 for i := 0 to FList.Count - 1 do begin
109                         if TObject(FList[i]) is TKotehanData then begin
110                                 KoteData := TKotehanData(FList[i]);
111                                 case View of
112                                         gkvEntry:
113                                                 if (KoteData.FKotehanName = '') and (KoteData.FKotehanMail = '') then
114                                                         Continue;
115                                         gkvBlank:
116                                                 if (KoteData.FKotehanName <> '') or (KoteData.FKotehanMail <> '') then
117                                                         Continue;
118                                 end;
119                                 Item := KotehanListView.Items.Add;
120                                 Item.Caption := KoteData.FBoard.Title;
121                                 Item.SubItems.Add(KoteData.FKotehanName);
122                                 Item.SubItems.Add(KoteData.FKotehanMail);
123                                 Item.Data := KoteData;
124                         end;
125                 end;
126         finally
127                 KotehanListView.Items.EndUpdate;
128         end;
129 end;
130
131 procedure TKotehanDialog.FormDestroy(Sender: TObject);
132 var
133         i: Integer;
134 begin
135         for i := 0 to FList.Count - 1 do
136                 TObject(FList[i]).Free;
137         FList.Free;
138 end;
139
140 procedure TKotehanDialog.KotehanListViewChange(Sender: TObject;
141         Item: TListItem; Change: TItemChange);
142 begin
143         HandleLabel.Enabled := KotehanListView.SelCount <> 0;
144         HandleEdit.Enabled := KotehanListView.SelCount <> 0;
145         MailEdit.Enabled := KotehanListView.SelCount <> 0;
146         MailLabel.Enabled := KotehanListView.SelCount <> 0;
147         ApplyButton.Enabled := KotehanListView.SelCount <> 0;
148         if KotehanListView.SelCount = 1 then begin
149                 HandleEdit.Text := Item.SubItems[0];
150                 MailEdit.Text := Item.SubItems[1];
151         end else begin
152                 HandleEdit.Text := '';
153                 MailEdit.Text := '';
154         end;
155 end;
156
157 procedure TKotehanDialog.ApplyButtonClick(Sender: TObject);
158 var
159         Item: TListItem;
160         KoteData: TKotehanData;
161 begin
162         if KotehanListView.SelCount = 0 then
163                 Exit;
164
165         Item := KotehanListView.Selected;
166         while Item <> nil do begin
167                 if TObject(Item.Data) is TKotehanData then begin
168                         KoteData := TKotehanData(Item.Data);
169                         KoteData.FKotehanName := HandleEdit.Text;
170                         KoteData.FKotehanMail := MailEdit.Text;
171                         Item.SubItems[0] := HandleEdit.Text;
172                         Item.SubItems[1] := MailEdit.Text;
173                 end;
174                 Item := KotehanListView.GetNextItem(Item, sdAll, [isSelected]);
175         end;
176
177 end;
178
179 procedure TKotehanDialog.OKButtonClick(Sender: TObject);
180 var
181         i: Integer;
182         KoteData: TKotehanData;
183 begin
184         for i := 0 to FList.Count - 1 do begin
185                 if TObject(FList[i]) is TKotehanData then begin
186                         KoteData := TKotehanData(FList[i]);
187                         KoteData.FBoard.KotehanName := KoteData.FKotehanName;
188                         KoteData.FBoard.KotehanMail := KoteData.FKotehanMail;
189                 end;
190         end;
191 end;
192
193 end.