initial commit
[rofl0r-KOL.git] / mckLVColumnsEditor.inc
blob15144cb38cbdbcf535b465c3cbd7ca27ea2d4e5c
1 type\r
2   TfmLVColumnsEditor = class(TForm)\r
3   private\r
4     pnButtons: TPanel;\r
5     pnView: TPanel;\r
6     btAdd: TButton;\r
7     btDel: TButton;\r
8     btUp: TButton;\r
9     btDown: TButton;\r
10     chkStayOnTop: TCheckBox;\r
11     lvColumns: TListView;\r
12     procedure FormResize(Sender: TObject);\r
13     procedure FormShow(Sender: TObject);\r
14     procedure chkStayOnTopClick(Sender: TObject);\r
15     procedure btAddClick(Sender: TObject);\r
16     procedure btDelClick(Sender: TObject);\r
17     procedure btUpClick(Sender: TObject);\r
18     procedure btDownClick(Sender: TObject);\r
19     procedure FormKeyDown(Sender: TObject; var Key: Word;\r
20       Shift: TShiftState);\r
21     procedure lvColumnsSelectItem(Sender: TObject; Item: TListItem;\r
22       Selected: Boolean);\r
23     {$IFDEF VER90} {$DEFINE OLDDELPHI} {$ENDIF}\r
24     {$IFDEF VER100} {$DEFINE OLDDELPHI} {$ENDIF}\r
25     {$IFDEF OLDDELPHI}\r
26     procedure lvColumnsChange(Sender: TObject; Item: TListItem; Change: TItemChange);\r
27     {$ENDIF}\r
28     procedure lvColumnsEdited(Sender: TObject; Item: TListItem;\r
29       var S: String);\r
30     procedure FormDestroy(Sender: TObject);\r
31     procedure FormClose(Sender: TObject; var Action: TCloseAction);\r
32   private\r
33     { Private declarations }\r
34     FListView: TComponent;\r
35     procedure SetListView(const Value: TComponent);\r
36     procedure AdjustButtons;\r
37     procedure SelectLV;\r
38   public\r
39     { Public declarations }\r
40     property ListView: TComponent read FListView write SetListView;\r
41     procedure MakeActive( SelectAny: Boolean );\r
42     constructor Create( AOwner: TComponent ); override;\r
43   end;\r
45 var\r
46   fmLVColumnsEditor: TfmLVColumnsEditor;\r
48 implementation\r
50 uses mirror, mckCtrls, mckObjs;\r
52 procedure TfmLVColumnsEditor.AdjustButtons;\r
53 var LI: TListItem;\r
54 begin\r
55   LI := lvColumns.Selected;\r
56   if LI = nil then\r
57   begin\r
58     btAdd.Enabled := lvColumns.Items.Count = 0;\r
59     btDel.Enabled := FALSE;\r
60     btUp.Enabled := FALSE;\r
61     btDown.Enabled := FALSE;\r
62   end\r
63     else\r
64   begin\r
65     btAdd.Enabled := TRUE;\r
66     btDel.Enabled := TRUE;\r
67     btUp.Enabled := LI.Index > 0;\r
68     btDown.Enabled := LI.Index < lvColumns.Items.Count - 1;\r
69   end;\r
70 end;\r
72 procedure TfmLVColumnsEditor.FormResize(Sender: TObject);\r
73 begin\r
74   lvColumns.Columns[ 0 ].Width := lvColumns.ClientWidth;\r
75 end;\r
77 procedure TfmLVColumnsEditor.MakeActive(SelectAny: Boolean);\r
78 var F: TForm;\r
79     D: IDesigner;\r
80     FD: IFormDesigner;\r
81     Col: TKOLListViewColumn;\r
82 begin\r
83   if lvColumns.Items.Count > 0 then\r
84   if lvColumns.Selected = nil then\r
85   if SelectAny then\r
86     lvColumns.Selected := lvColumns.Items[ 0 ];\r
87   if lvColumns.Selected <> nil then\r
88   begin\r
89     Col := lvColumns.Selected.Data;\r
90     F := (FListView as TKOLListView).Owner as TForm;\r
91     if F <> nil then\r
92     begin\r
93   {$IFDEF _D6orHigher}\r
94         F.Designer.QueryInterface(IFormDesigner,D);\r
95   {$ELSE}\r
96         D := F.Designer;\r
97   {$ENDIF}\r
98       if D <> nil then\r
99       if QueryFormDesigner( D, FD ) then\r
100       begin\r
101         RemoveSelection( FD );\r
102         FD.SelectComponent( Col );\r
103       end;\r
104     end;\r
105   end;\r
106   AdjustButtons;\r
107 end;\r
109 procedure TfmLVColumnsEditor.SetListView(const Value: TComponent);\r
110 var LV: TKOLListView;\r
111 begin\r
112   FListView := Value;\r
113   LV := FListView as TKOLListView;\r
114   Caption := LV.Name + ' columns';\r
115 end;\r
117 procedure TfmLVColumnsEditor.FormShow(Sender: TObject);\r
118 var I: Integer;\r
119     LI: TListItem;\r
120     Col: TKOLListViewColumn;\r
121     LV: TKOLListView;\r
122 begin\r
123   lvColumns.Items.BeginUpdate;\r
124   TRY\r
126     lvColumns.Items.Clear;\r
127     if FListView <> nil then\r
128     if FListView is TKOLListView then\r
129     begin\r
130       LV := FListView as TKOLListView;\r
131       for I := 0 to LV.Cols.Count-1 do\r
132       begin\r
133         LI := lvColumns.Items.Add;\r
134         Col := LV.Cols[ I ];\r
135         LI.Data := Col;\r
136         LI.Caption := Col.Caption;\r
137       end;\r
138     end;\r
140   FINALLY\r
141     lvColumns.Items.EndUpdate;\r
142   END;\r
143 end;\r
145 procedure TfmLVColumnsEditor.chkStayOnTopClick(Sender: TObject);\r
146 begin\r
147   if chkStayOnTop.Checked then\r
148     FormStyle := fsStayOnTop\r
149   else\r
150     FormStyle := fsNormal;\r
151 end;\r
153 procedure TfmLVColumnsEditor.btAddClick(Sender: TObject);\r
154 var LI: TListItem;\r
155     Col: TKOLListViewColumn;\r
156     LV: TKOLListView;\r
157     I: Integer;\r
158     S: String;\r
159 begin\r
160   if FListView = nil then Exit;\r
161   if not( FListView is TKOLListView ) then Exit;\r
162   LV := FListView as TKOLListView;\r
163   LI := lvColumns.Selected;\r
164   if LI = nil then\r
165   begin\r
166     Col := TKOLListViewColumn.Create( LV );\r
167     LI := lvColumns.Items.Add;\r
168     LI.Data := Col;\r
169   end\r
170     else\r
171   begin\r
172     if LI.Index >= lvColumns.Items.Count then\r
173       Col := TKOLListViewColumn.Create( LV )\r
174     else\r
175     begin\r
176       Col := TKOLListViewColumn.Create( LV );\r
177       LV.Cols.Move( lvColumns.Items.Count, LI.Index + 1 );\r
178     end;\r
179     LI := lvColumns.Items.Insert( LI.Index + 1 );\r
180     LI.Data := Col;\r
181   end;\r
182   if LV <> nil then\r
183   if LV.Owner is TForm then\r
184   for I := 1 to MaxInt do\r
185   begin\r
186     S := 'Col' + IntToStr( I );\r
187     if (LV.Owner as TForm).FindComponent( S ) = nil then\r
188     if LV.FindComponent( S ) = nil then\r
189     begin\r
190       Col.Name := S;\r
191       break;\r
192     end;\r
193   end;\r
194   if LV.HasOrderedColumns then\r
195     Col.LVColOrder := LI.Index;\r
196   lvColumns.Selected := nil;\r
197   lvColumns.Selected := LI;\r
198   lvColumns.ItemFocused := LI;\r
199   LI.MakeVisible( FALSE );\r
200   LI.EditCaption;\r
201 end;\r
203 procedure TfmLVColumnsEditor.btDelClick(Sender: TObject);\r
204 var LI: TListItem;\r
205     J: Integer;\r
206     Col: TKOLListViewColumn;\r
207 begin\r
208   LI := lvColumns.Selected;\r
209   if LI <> nil then\r
210   begin\r
211     J := LI.Index;\r
212     Col := LI.Data;\r
213     Col.Free;\r
214     LI.Free;\r
215     if J >= lvColumns.Items.Count then\r
216       Dec( J );\r
217     if J >= 0 then\r
218     begin\r
219       lvColumns.Selected := lvColumns.Items[ J ];\r
220       lvColumns.ItemFocused := lvColumns.Selected;\r
221     end;\r
222   end;\r
223   AdjustButtons;\r
224   if lvColumns.Items.Count = 0 then\r
225     SelectLV;\r
226 end;\r
228 procedure TfmLVColumnsEditor.btUpClick(Sender: TObject);\r
229 var LI, LI1: TListItem;\r
230     I: Integer;\r
231     LV: TKOLListView;\r
232     Col: TKOLListViewColumn;\r
233 begin\r
234   if FListView = nil then Exit;\r
235   if not(FListView is TKOLListView) then Exit;\r
236   LV := FListView as TKOLListView;\r
237   LI := lvColumns.Selected;\r
238   if LI = nil then Exit;\r
239   I := LI.Index - 1;\r
240   LI1 := lvColumns.Items.Insert( I );\r
241   LI1.Caption := LI.Caption;\r
242   LI1.Data := LI.Data;\r
243   LV.Cols.Move( I + 1, I );\r
244   LI.Free;\r
245   lvColumns.Selected := LI1;\r
246   lvColumns.ItemFocused := LI1;\r
247   Col := LI1.Data;\r
248   if Col.LVColOrder = LI1.Index + 1 then\r
249     Col.LVColOrder := LI1.Index;\r
250   AdjustButtons;\r
251 end;\r
253 procedure TfmLVColumnsEditor.btDownClick(Sender: TObject);\r
254 var LI, LI1: TListItem;\r
255     LV: TKOLListView;\r
256     Col: TKOLListViewColumn;\r
257 begin\r
258   if FListView = nil then Exit;\r
259   if not(FListView is TKOLListView) then Exit;\r
260   LV := FListView as TKOLListView;\r
261   LI := lvColumns.Selected;\r
262   if LI = nil then Exit;\r
263   LV.Cols.Move( LI.Index, LI.Index + 1 );\r
264   LI1 := lvColumns.Items.Insert( LI.Index + 2 );\r
265   LI1.Caption := LI.Caption;\r
266   LI1.Data := LI.Data;\r
267   LI.Free;\r
268   lvColumns.Selected := LI1;\r
269   lvColumns.ItemFocused := LI1;\r
270   Col := LI1.Data;\r
271   if Col.LVColOrder = LI1.Index - 1 then\r
272     Col.LVColOrder := LI1.Index;\r
273   AdjustButtons;\r
274 end;\r
276 procedure TfmLVColumnsEditor.FormKeyDown(Sender: TObject; var Key: Word;\r
277   Shift: TShiftState);\r
278 begin\r
279   case Key of\r
280   VK_INSERT: btAdd.Click;\r
281   VK_DELETE: if not lvColumns.IsEditing then btDel.Click;\r
282   VK_RETURN: if (ActiveControl = lvColumns) and not lvColumns.IsEditing and\r
283                 (lvColumns.Selected <> nil) then\r
284                 lvColumns.Selected.EditCaption;\r
285   VK_UP:     if (GetKeyState( VK_CONTROL ) < 0) then\r
286                 btUp.Click\r
287              else Exit;\r
288   VK_DOWN:   if (GetKeyState( VK_CONTROL ) < 0) then\r
289                 btDown.Click\r
290              else Exit;\r
291   else Exit;\r
292   end;\r
293   Key := 0;\r
294 end;\r
296 procedure TfmLVColumnsEditor.lvColumnsSelectItem(Sender: TObject;\r
297   Item: TListItem; Selected: Boolean);\r
298 begin\r
299   if Selected then\r
300     MakeActive( FALSE );\r
301 end;\r
303 {$IFDEF OLDDELPHI}\r
304 procedure TfmLVColumnsEditor.lvColumnsChange(Sender: TObject; Item: TListItem; Change: TItemChange);\r
305 begin\r
306   if lvColumns.Selected <> nil then\r
307     MakeActive( FALSE );\r
308 end;\r
309 {$ENDIF}\r
311 procedure TfmLVColumnsEditor.lvColumnsEdited(Sender: TObject;\r
312   Item: TListItem; var S: String);\r
313 var Col: TKOLListViewColumn;\r
314 begin\r
315   if Item = nil then Exit;\r
316   Col := Item.Data;\r
317   Col.Caption := S;\r
318   MakeActive( FALSE );\r
319 end;\r
321 procedure TfmLVColumnsEditor.FormDestroy(Sender: TObject);\r
322 var LV: TKOLListView;\r
323 begin\r
324   if FListView = nil then Exit;\r
325   LV := FListView as TKOLListView;\r
326   LV.ActiveDesign := nil;\r
327 end;\r
329 procedure TfmLVColumnsEditor.FormClose(Sender: TObject;\r
330   var Action: TCloseAction);\r
331 begin\r
332   Rpt( 'Closing Listview columns editor' );\r
333   SelectLV;\r
334   modalResult := mrOK;\r
335 end;\r
337 procedure TfmLVColumnsEditor.SelectLV;\r
338 var F: TForm;\r
339     D: IDesigner;\r
340     FD: IFormDesigner;\r
341 begin\r
342   if FListView <> nil then\r
343   begin\r
344     F := (FListView as TKOLListView).Owner as TForm;\r
345     if F <> nil then\r
346     begin\r
347         Rpt( 'Form found: ' + F.Name );\r
349   {$IFDEF _D6orHigher}                                  //\r
350         F.Designer.QueryInterface(IFormDesigner,D);     //\r
351   {$ELSE}                                               //\r
352         D := F.Designer;\r
353   {$ENDIF}                                              //\r
354         if D <> nil then\r
355         begin\r
357           Rpt( 'IDesigner interface returned' );\r
358           if QueryFormDesigner( D, FD ) then\r
359           begin\r
360             Rpt( 'IFormDesigner interface quered' );\r
361             try\r
362               RemoveSelection( FD );\r
363               FD.SelectComponent( FListView );\r
364             except\r
365               Rpt( 'EXCEPTION *** Could not clear selection!' )\r
366             end;\r
367           end;\r
369         end;\r
370     end;\r
371   end;\r
372 end;\r
374 constructor TfmLVColumnsEditor.Create(AOwner: TComponent);\r
375 begin\r
376   CreateNew(AOwner);\r
377   Left := 246;\r
378   Top := 107;\r
379   Width := 268;\r
380   Height := 314;\r
381   HorzScrollBar.Visible := False;\r
382   VertScrollBar.Visible := False;\r
383   BorderIcons := [biSystemMenu];\r
384   Caption := 'Columns';\r
385   //Color := clBtnFace;\r
386   //Font.Charset := DEFAULT_CHARSET;\r
387   //Font.Color := clWindowText;\r
388   //Font.Height := -11;\r
389   Font.Name := 'MS Sans Serif';\r
390   //Font.Style := [];\r
391   KeyPreview := True;\r
392   //OldCreateOrder := False;\r
393   Scaled := False;\r
394   OnClose := FormClose;\r
395   OnDestroy := FormDestroy;\r
396   OnKeyDown := FormKeyDown;\r
397   OnResize := FormResize;\r
398   OnShow := FormShow;\r
399   PixelsPerInch := 96;\r
400   //TextHeight := 13;\r
401   pnButtons := TPanel.Create( Self );\r
402   with pnButtons do\r
403   begin\r
404     Parent := Self;\r
405     Left := 150;\r
406     Top := 0;\r
407     Width := 110;\r
408     Height := 287;\r
409     Align := alRight;\r
410     BevelOuter := bvNone;\r
411     TabOrder := 0;\r
412     btAdd := TButton.Create( pnButtons );\r
413     with btAdd do\r
414     begin\r
415       Parent := pnButtons;\r
416       Left := 4;\r
417       Top := 4;\r
418       Width := 101;\r
419       Height := 25;\r
420       Caption := '&Add';\r
421       TabOrder := 0;\r
422       OnClick := btAddClick;\r
423     end;\r
424     btDel := TButton.Create( pnButtons );\r
425     with btDel do\r
426     begin\r
427       Parent := pnButtons;\r
428       Left := 4;\r
429       Top := 36;\r
430       Width := 101;\r
431       Height := 25;\r
432       Caption := '&Delete';\r
433       TabOrder := 1;\r
434       OnClick := btDelClick;\r
435     end;\r
436     btUp := TButton.Create( pnButtons );\r
437     with btUp do\r
438     begin\r
439       Parent := pnButtons;\r
440       Left := 4;\r
441       Top := 68;\r
442       Width := 49;\r
443       Height := 25;\r
444       Caption := '&Up';\r
445       TabOrder := 2;\r
446       OnClick := btUpClick;\r
447     end;\r
448     btDown := TButton.Create( pnButtons );\r
449     with btDown do\r
450     begin\r
451       Parent := pnButtons;\r
452       Left := 56;\r
453       Top := 68;\r
454       Width := 49;\r
455       Height := 25;\r
456       Caption := '&Down';\r
457       TabOrder := 3;\r
458       OnClick := btDownClick;\r
459     end;\r
460     chkStayOnTop := TCheckBox.Create( pnButtons );\r
461     with chkStayOnTop do\r
462     begin\r
463       Parent := pnButtons;\r
464       Left := 4;\r
465       Top := 100;\r
466       Width := 101;\r
467       Height := 17;\r
468       Caption := 'Stay On &Top';\r
469       TabOrder := 4;\r
470       OnClick := chkStayOnTopClick;\r
471     end;\r
472   end;\r
473   pnView := TPanel.Create( Self );\r
474   with pnView do\r
475   begin\r
476     Parent := Self;\r
477     Left := 0;\r
478     Top := 0;\r
479     Width := 150;\r
480     Height := 287;\r
481     Align := alClient;\r
482     BevelOuter := bvNone;\r
483     BorderWidth := 4;\r
484     TabOrder := 1;\r
485     lvColumns := TListView.Create( pnView );\r
486     with lvColumns do\r
487     begin\r
488       Parent := pnView;\r
489       Left := 4;\r
490       Top := 4;\r
491       Width := 142;\r
492       Height := 279;\r
493       Align := alClient;\r
494       Columns.Add;\r
495       HideSelection := False;\r
496       {$IFNDEF VER90}\r
497       RowSelect := True;\r
498       {$ENDIF}\r
499       ShowColumnHeaders := False;\r
500       TabOrder := 0;\r
501       ViewStyle := vsReport;\r
502       OnEdited := lvColumnsEdited;\r
503       {$IFDEF OLDDELPHI}\r
504       OnChange := lvColumnsChange;\r
505       {$ELSE}\r
506       OnSelectItem := lvColumnsSelectItem;\r
507       {$ENDIF}\r
508     end;\r
509   end;\r
510 end;\r