OSDN Git Service

IdAntiFreezeを貼り付けた (ToDo #347)
[winbottle/winbottle.git] / bottleclient / ChannelListForm.pas
1 unit ChannelListForm;
2
3 interface
4
5 uses
6   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
7   StdCtrls, ExtCtrls, ComCtrls, BottleDef;
8
9 type
10   TfrmChannelList = class(TForm)
11     lvwChannels: TListView;
12     pnlTop: TPanel;
13     pnlBottom: TPanel;
14     btnOk: TButton;
15     btnSelectAll: TButton;
16     btnCancel: TButton;
17     btnSelectNone: TButton;
18     procedure FormCreate(Sender: TObject);
19     procedure FormDestroy(Sender: TObject);
20     procedure btnOkClick(Sender: TObject);
21     procedure btnSelectAllClick(Sender: TObject);
22     procedure btnSelectNoneClick(Sender: TObject);
23     procedure lvwChannelsColumnClick(Sender: TObject; Column: TListColumn);
24     procedure lvwChannelsCompare(Sender: TObject; Item1, Item2: TListItem;
25       Data: Integer; var Compare: Integer);
26   private
27     { Private \90é\8c¾ }
28     FTempJoinList: TStringList;
29     SortColumn: integer;  //\97ñ\83N\83\8a\83b\83N\83\\81[\83g\97p
30     SortDesc: boolean;    //\97ñ\83N\83\8a\83b\83N\83\\81[\83g\97p
31   public
32     { Public \90é\8c¾ }
33     function Execute(List: TChannelList; Join: TStringList): boolean;
34     property JoinList: TStringList read FTempJoinList;
35   end;
36
37 var
38   frmChannelList: TfrmChannelList;
39
40 implementation
41
42 {$R *.DFM}
43
44 { TfrmChannelList }
45
46 function TfrmChannelList.Execute(List: TChannelList; Join: TStringList): boolean;
47 var i, count: integer;
48     Item: TListItem;
49 begin
50   lvwChannels.Items.Clear;
51   count := 0;
52   for i := 0 to List.Count-1 do begin
53     Item := lvwChannels.Items.Add;
54     Item.Caption := List.ChannelItem[i].Name;
55     Item.SubItems.Add(IntToStr(List.ChannelItem[i].Members));
56     Item.SubItems.Add(List.ChannelItem[i].Info);
57     Item.SubItems.Add(List.ChannelItem[i].Ghost);
58     if List.ChannelItem[i].NoPost then
59       Item.SubItems.Add('\8eó\90M\90ê\97p')
60     else
61       Item.SubItems.Add('\92Ê\8fí');
62     if Join.IndexOf(Item.Caption) >= 0 then begin
63       Item.Checked := true;
64       Inc(count);
65     end;
66   end;
67
68   // \83`\83\83\83\93\83l\83\8b\82É1\8cÂ\82à\8eQ\89Á\82µ\82Ä\82¢\82È\82¢\8fó\91Ô\82È\82ç\91S\90\94\8eQ\89Á\82ð\83f\83t\83H\83\8b\83g\82É\82·\82é
69   if count = 0 then
70     for i := 0 to lvwChannels.Items.Count-1 do
71       lvwChannels.Items[i].Checked := true;
72   Result := (ShowModal = mrOk);
73 end;
74
75 procedure TfrmChannelList.FormCreate(Sender: TObject);
76 begin
77   FTempJoinList := TStringList.Create;
78 end;
79
80 procedure TfrmChannelList.FormDestroy(Sender: TObject);
81 begin
82   FTempJoinList.Free;
83 end;
84
85 procedure TfrmChannelList.btnOkClick(Sender: TObject);
86 var i: integer;
87 begin
88   FTempJoinList.Clear;
89   for i := 0 to lvwChannels.Items.Count-1 do begin
90     if lvwChannels.Items[i].Checked then
91       FTempJoinList.Add(lvwChannels.Items[i].Caption);
92   end;
93 end;
94
95 procedure TfrmChannelList.btnSelectAllClick(Sender: TObject);
96 var i: integer;
97 begin
98   for i := 0 to lvwChannels.Items.Count-1 do begin
99     lvwChannels.Items[i].Checked := true;
100   end;
101 end;
102
103 procedure TfrmChannelList.btnSelectNoneClick(Sender: TObject);
104 var i: integer;
105 begin
106   for i := 0 to lvwChannels.Items.Count-1 do begin
107     lvwChannels.Items[i].Checked := false;
108   end;
109 end;
110
111 procedure TfrmChannelList.lvwChannelsColumnClick(Sender: TObject;
112   Column: TListColumn);
113 begin
114   if SortColumn = Column.Index then
115     SortDesc := not SortDesc
116   else begin
117     SortColumn := Column.Index;
118     SortDesc := false;
119   end;
120   lvwChannels.AlphaSort;
121 end;
122
123 procedure TfrmChannelList.lvwChannelsCompare(Sender: TObject; Item1,
124   Item2: TListItem; Data: Integer; var Compare: Integer);
125 var
126   ix: Integer;
127 begin
128   if SortColumn = 0 then
129     Compare := CompareText(Item1.Caption,Item2.Caption)
130   else begin
131    ix := SortColumn - 1;
132    Compare := AnsiCompareStr(Item1.SubItems[ix],Item2.SubItems[ix]);
133   end;
134   if SortDesc then Compare := -Compare; //\8f¸\8f\87
135 end;
136
137 end.