OSDN Git Service

・板一覧更新の処理メッセージを追加
[gikonavigoeson/gikonavi.git] / BbsThrSel.pas
1 unit BbsThrSel;
2
3 interface
4
5 uses
6   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7   Dialogs, ExtCtrls, StdCtrls;
8
9 type
10   TBbsThreadSel = class(TForm)
11     PanelLeft: TPanel;
12     PanelCat: TPanel;
13     PanelCatHead: TPanel;
14     ListCat: TListBox;
15     PanelBrd: TPanel;
16     PanelBrdHead: TPanel;
17     ListBrd: TListBox;
18     PanelRight: TPanel;
19     PanelThr: TPanel;
20     EditFilter: TEdit;
21     ButtonFilter: TButton;
22     PanelThrHead: TPanel;
23     ListThr: TListBox;
24     procedure FormShow(Sender: TObject);
25     procedure ListCatClick(Sender: TObject);
26     procedure ListBrdClick(Sender: TObject);
27     procedure ListThrClick(Sender: TObject);
28     procedure ButtonFilterClick(Sender: TObject);
29     procedure PanelThrResize(Sender: TObject);
30     procedure EditFilterKeyPress(Sender: TObject; var Key: Char);
31   private
32     { Private \90é\8c¾ }
33     FThreadMode: Boolean;   // True:\83X\83\8c\91I\91ð\81AFalse:\94Â\91I\91ð
34     FBoardID: String;       // \94ÂID\81i\97á\81Fsoftware\81j
35     FBoardTitle: String;    // \94Â\83^\83C\83g\83\8b\81i\97á\81F\83\\83t\83g\83E\83F\83A\81j
36     FThreadID: String;      // \83X\83\8cID\81i\97á\81F1410888356\81j
37     FThreadTitle: String;   // \83X\83\8c\83^\83C\83g\83\8b\81i\97á\81F2\82¿\82á\82ñ\82Ë\82é\97p\83u\83\89\83E\83U\81u\83M\83R\83i\83r\81v Part67\81j
38     FInit: Boolean;
39   public
40     { Public \90é\8c¾ }
41     property ThreadMode:  Boolean                  write FThreadMode default False;
42     property BoardID:     String read FBoardID     write FBoardID;
43     property BoardTitle:  String read FBoardTitle  write FBoardTitle;
44     property ThreadID:    String read FThreadID    write FThreadID;
45     property ThreadTitle: String read FThreadTitle write FThreadTitle;
46   end;
47
48 var
49   BbsThreadSel: TBbsThreadSel;
50
51 implementation
52
53 uses BoardGroup, GikoSystem, MojuUtils;
54
55 {$R *.dfm}
56
57 procedure TBbsThreadSel.FormShow(Sender: TObject);
58 var
59     CenterForm: TCustomForm;
60     i: Integer;
61     j: Integer;
62     Sel: Integer;
63 begin
64     FInit := True;
65
66     if (FThreadMode = False) then begin
67         Caption := '\94Â\91I\91ð';
68         Self.Constraints.MinWidth := 330;
69         PanelRight.Visible := False;
70         Width := 326;
71         PanelLeft.Align := alClient;
72     end else begin
73         Caption := '\83X\83\8c\83b\83h\91I\91ð';
74     end;
75
76     CenterForm := TCustomForm(Owner);
77     if Assigned(CenterForm) then begin
78         Left := ((CenterForm.Width - Width) div 2) + CenterForm.Left;
79         Top := ((CenterForm.Height - Height) div 2) + CenterForm.Top;
80     end else begin
81         Left := (Screen.Width - Width) div 2;
82         Top := (Screen.Height - Height) div 2;
83     end;
84
85     Sel := -1;
86     if (BBSs[0].IsBoardFileRead = False) then
87         GikoSys.ReadBoardFile(BBSs[0]);
88     for i := 0 to BBSs[0].Count - 1 do begin
89         ListCat.Items.Add(BBSs[0].Items[i].Title);
90         if (Sel = -1) and (FBoardID <> '') then begin
91             for j := 0 to BBSs[0].Items[i].Count - 1 do begin
92                 if (FBoardID = BBSs[0].Items[i].Items[j].BBSID) then begin
93                     Sel := i;
94                     Break;
95                 end;
96             end;
97         end;
98     end;
99
100     if (Sel >= 0) then begin
101         ListCat.ItemIndex := Sel;
102         ListCatClick(ListCat);
103     end;
104
105     FInit := False;
106 end;
107
108 procedure TBbsThreadSel.ListCatClick(Sender: TObject);
109 var
110     i: Integer;
111     Idx: Integer;
112     Sel: Integer;
113     SelBrd: Boolean;
114 begin
115     Idx := ListCat.ItemIndex;
116     if (Idx >= 0) and (Idx < ListCat.Count) then begin
117         if (FInit = True) and (FBoardID <> '') then
118             SelBrd := True
119         else
120             SelBrd := False;
121         Sel := -1;
122         ListBrd.Clear;
123         if (FThreadMode = True) then
124             ListThr.Clear;
125         for i := 0 to BBSs[0].Items[Idx].Count - 1 do begin
126             ListBrd.Items.Add(BBSs[0].Items[Idx].Items[i].Title);
127             if (SelBrd = True) and (Sel = -1) then begin
128                 if (FBoardID = BBSs[0].Items[Idx].Items[i].BBSID) then
129                     Sel := i;
130             end;
131         end;
132         if (Sel >= 0) then begin
133             ListBrd.ItemIndex := Sel;
134             ListBrdClick(ListBrd);
135         end;
136     end;
137 end;
138
139 procedure TBbsThreadSel.ListBrdClick(Sender: TObject);
140 var
141     i: Integer;
142     Idx1: Integer;
143     Idx2: Integer;
144     Brd: TBoard;
145     IsFilt: Boolean;
146     Filt: String;
147     OldThr: TStringList;
148 begin
149     Idx1 := ListCat.ItemIndex;
150     Idx2 := ListBrd.ItemIndex;
151     if (Idx1 >= 0) and (Idx1 < ListCat.Count) and
152        (Idx2 >= 0) and (Idx2 < ListBrd.Count) then begin
153         Brd := BBSs[0].Items[Idx1].Items[Idx2];
154
155         if (FThreadMode = False) then begin
156             if (FInit = False) then begin
157                 FBoardID    := Brd.BBSID;
158                 FBoardTitle := Brd.Title;
159                 ModalResult := mrOk;
160             end;
161         end else begin
162             ListThr.Clear;
163             OldThr := TStringList.Create;
164             if (EditFilter.Text = '') then begin
165                 IsFilt := False;
166             end else begin
167                 IsFilt := True;
168                 Filt := ZenToHan(EditFilter.Text);
169             end;
170
171             if (Brd.IsThreadDatRead = False) then
172                 GikoSys.ReadSubjectFile(Brd);
173             for i := 0 to Brd.Count - 1 do begin
174                 if (IsFilt = False) or
175                   ((IsFilt = True) and (AnsiPos(Filt, ZenToHan(Brd.Items[i].Title)) > 0)) then begin
176                     if (Brd.Items[i].AgeSage = gasArch) then    // \89ß\8b\8e\83\8d\83O
177                         OldThr.AddObject(Brd.Items[i].Title, TObject(i))
178                     else
179                         ListThr.Items.AddObject(Brd.Items[i].Title, TObject(i));
180                 end;
181             end;
182             for i := OldThr.Count - 1 downto 0 do begin
183                 ListThr.Items.AddObject(OldThr.Strings[i], OldThr.Objects[i]);
184             end;
185             OldThr.Free;
186             if (FInit = True) and (FThreadMode = True) and (FThreadID <> '') then begin
187                 for i := 0 to ListThr.Count - 1 do begin
188                     if (FThreadID = ChangeFileExt(Brd.Items[Integer(ListThr.Items.Objects[i])].FileName, '')) then begin
189                         ListThr.ItemIndex := i;
190                         Break;
191                     end;
192                 end;
193             end;
194         end;
195     end;
196 end;
197
198 procedure TBbsThreadSel.ListThrClick(Sender: TObject);
199 var
200     Idx1: Integer;
201     Idx2: Integer;
202     Idx3: Integer;
203     Idx4: Integer;
204     Brd: TBoard;
205 begin
206     if (FThreadMode = True) then begin
207         Idx1 := ListCat.ItemIndex;
208         Idx2 := ListBrd.ItemIndex;
209         Idx3 := ListThr.ItemIndex;
210         if (Idx1 >= 0) and (Idx1 < ListCat.Count) and
211            (Idx2 >= 0) and (Idx2 < ListBrd.Count) and
212            (Idx3 >= 0) and (Idx3 < ListThr.Count) then begin
213             Brd := BBSs[0].Items[Idx1].Items[Idx2];
214             Idx4 := Integer(ListThr.Items.Objects[Idx3]);
215             if (Idx4 >= 0) and (Idx4 < Brd.Count) then begin
216                 FBoardID     := Brd.BBSID;
217                 FBoardTitle  := Brd.Title;
218                 FThreadID    := ChangeFileExt(Brd.Items[Idx4].FileName, '');
219                 FThreadTitle := Brd.Items[Idx4].Title;
220                 ModalResult := mrOk;
221             end;
222         end;
223     end;
224 end;
225
226 procedure TBbsThreadSel.ButtonFilterClick(Sender: TObject);
227 begin
228     ListBrdClick(ListBrd);
229 end;
230
231 procedure TBbsThreadSel.PanelThrResize(Sender: TObject);
232 begin
233     ButtonFilter.Left := PanelThr.Width - ButtonFilter.Width - 2;
234     EditFilter.Width := ButtonFilter.Left - 4;
235 end;
236
237 procedure TBbsThreadSel.EditFilterKeyPress(Sender: TObject; var Key: Char);
238 begin
239     if (Integer(Key) = VK_RETURN) then begin
240         Key := #0;
241         ListBrdClick(ListBrd);
242     end;
243 end;
244
245 end.