1{$mode objfpc}{$h+}
2unit lister;
3
4interface
5
6uses glib, gdk, gtk, FPgtk, classes, fpgtkext, sysutils;
7
8type
9
10  TListWindow = class (TFPgtkWindow)
11  private
12    pb : TFPgtkProgressBar;
13    spin : TFPgtkSpinButton;
14    notebook : TFPgtkNotebook;
15    bar : TFPgtkStatusbar;
16    EContext, EMessage : TFPgtkEntry;
17    IDContext, IDMessage : TFPgtkSpinButton;
18    List : TFPgtkScrollList;
19    ListText : TFPgtkScrollText;
20    CList : TFPgtkScrollCList;
21    CListText : TFPgtkScrollText;
22    Key : TFPgtkSpinButton;
23    ModCtrl, ModAlt, ModShift : TFPgtkToggleButton;
24    KeyName : TFPgtkEntry;
25    AKeyName : TFPgtkAccelLabel;
26    TheAG : guint;
27    AccelBut : TFPgtkButton;
28    VButtons, HButtons : TFPgtkButtonBox;
29    TheLayout : TFPgtkLayout;
30    LayoutX, LayoutY : integer;
31    cal : TFPgtkCalendar;
32    MessageButtons : TMsgDlgButtons;
33    Msg : TFPgtkEntry;
34    DialogType : TFPgtkMenu;
35    procedure AddRemoveButton (Sender:TFPgtkObject; data:pointer);
36    procedure ShowMessageDialog (Sender:TFPgtkObject; data:pointer);
37    procedure Calendar_ShowDate (Sender:TFPgtkObject; data:pointer);
38    procedure Layout_runaway (Sender:TFPgtkObject; data:pointer);
39    procedure ButBox_AddThem (Sender:TFPgtkObject; data:pointer);
40    procedure Accel_Parse (Sender : TFPgtkObject; data : pointer);
41    procedure Accel_AddAccel (Sender : TFPgtkObject; data : pointer);
42    procedure Accel_ConvertToName (Sender : TFPgtkObject; data : pointer);
43    procedure ProgressBar_ShowItToMe (Sender : TFPgtkObject; data : pointer);
44    procedure ProgressBar_SetActivityMode (Sender : TFPgtkObject; data : pointer);
45    procedure ProgressBar_FormatString (Sender : TFPgtkObject; data : pointer);
46    procedure Spinbutton_ClimbRate (Sender : TFPgtkObject; data : pointer);
47    procedure Spinbutton_Digits (Sender : TFPgtkObject; data : pointer);
48    procedure Spinbutton_UpdatePolicy (Sender : TFPgtkObject; data : pointer);
49    procedure Spinbutton_Numeric (Sender : TFPgtkObject; data : pointer);
50    procedure Spinbutton_Wrap (Sender : TFPgtkObject; data : pointer);
51    procedure Spinbutton_SnapToTicks (Sender : TFPgtkObject; data : pointer);
52    procedure MemoMessage_Show (Sender : TFPgtkObject; data : pointer);
53    procedure StatusBar_GetContext (Sender : TFPgtkObject; data : pointer);
54    procedure StatusBar_Push (Sender : TFPgtkObject; data : pointer);
55    procedure StatusBar_Pop (Sender : TFPgtkObject; data : pointer);
56    procedure StatusBar_Remove (Sender : TFPgtkObject; data : pointer);
57    procedure List_ShowSignal (Sender : TFPgtkObject; data : pointer);
58    procedure List_ShowWidgetSignal (Sender : TFPgtkObject; Widget:TFPgtkWidget; data : pointer);
59    procedure List_AddToList (Sender : TFPgtkObject; data : pointer);
60    procedure List_SelectionMode (Sender : TFPgtkObject; data : pointer);
61    procedure List_ClearAll (Sender : TFPgtkObject; data : pointer);
62    procedure List_Clear1_5 (Sender : TFPgtkObject; data : pointer);
63    procedure List_AddCount (Sender : TFPgtkObject; data : pointer);
64    procedure CList_AddToList (Sender : TFPgtkObject; data : pointer);
65    procedure CList_SelectionMode (Sender : TFPgtkObject; data : pointer);
66  public
67    constructor create;
68  end;
69
70
71implementation
72
73const
74  Init_ProgressBar_FormatString = '%p%% (%v of %u)';
75
76constructor TListWindow.Create;
77var b, h : TFPgtkBox;
78    but : TFPgtkButton;
79    tbut : TFPgtkToggleButton;
80    e : TFPgtkEntry;
81    sp : TFPgtkSpinButton;
82    t : TFPgtkScrollText;
83    f : TFPgtkFrame;
84    p : TFPgtkPaned;
85    om : TFPgtkOptionMenu;
86    bb : TFPgtkButtonBox;
87begin
88  inherited create (gtk_window_dialog);
89  border := 10;
90  modal := TRUE;
91  Position := gtk_win_pos_mouse;
92
93  Notebook := TFPgtkNotebook.Create;
94  Notebook.homogenous := false;
95  Notebook.scrollable := true;
96  Add (Notebook);
97
98  // ******* MessageDialog
99
100  writeln ('  MessageDialog');
101  b := TFPgtkVBox.Create;
102  Notebook.AppendPage (b, TFPgtkLabel.Create('MessageDialog'));
103
104  Msg := TFpgtkEntry.Create;
105  Msg.Text := 'This is normal message text';
106  b.packstart (msg, false, false, 0);
107
108  om := TFPgtkOptionMenu.Create;
109  DialogType := NewMenu ('DialogType', [NewMenuItem ('Warning'),NewMenuItem ('Error'),
110           NewMenuItem ('Information'),NewMenuItem ('Confirmation'),NewMenuItem ('Custom')]);
111  om.Menu := DialogType;
112  om.SetHistory (0);
113  b.Packstart (om, false, false, 0);
114
115  bb := TFPgtkHButtonBox.create;
116  tbut := TFPgtkCheckedButton.CreateWithLabel ('Yes');
117  tbut.connectClicked (@AddRemoveButton, inttopointer(ord(mbYes)));
118  bb.PackStart (tbut);
119  tbut := TFPgtkCheckedButton.CreateWithLabel ('No');
120  tbut.connectClicked (@AddRemoveButton, inttopointer(ord(mbNo)));
121  bb.PackStart (tbut);
122  tbut := TFPgtkCheckedButton.CreateWithLabel ('Ok');
123  tbut.connectClicked (@AddRemoveButton, inttopointer(ord(mbOk)));
124  bb.PackStart (tbut);
125  tbut := TFPgtkCheckedButton.CreateWithLabel ('Cancel');
126  tbut.connectClicked (@AddRemoveButton, inttopointer(ord(mbCancel)));
127  bb.PackStart (tbut);
128  b.packstart (bb, false, false, 0);
129
130  bb := TFPgtkHButtonBox.create;
131  tbut := TFPgtkCheckedButton.CreateWithLabel ('Abort');
132  tbut.connectClicked (@AddRemoveButton, inttopointer(ord(mbAbort)));
133  bb.PackStart (tbut);
134  tbut := TFPgtkCheckedButton.CreateWithLabel ('Retry');
135  tbut.connectClicked (@AddRemoveButton, inttopointer(ord(mbRetry)));
136  bb.PackStart (tbut);
137  tbut := TFPgtkCheckedButton.CreateWithLabel ('Ignore');
138  tbut.connectClicked (@AddRemoveButton, inttopointer(ord(mbIgnore)));
139  bb.PackStart (tbut);
140  tbut := TFPgtkCheckedButton.CreateWithLabel ('Help');
141  tbut.connectClicked (@AddRemoveButton, inttopointer(ord(mbHelp)));
142  bb.PackStart (tbut);
143  b.packstart (bb, false, false, 0);
144
145  bb := TFPgtkHButtonBox.create;
146  tbut := TFPgtkCheckedButton.CreateWithLabel ('All');
147  tbut.connectClicked (@AddRemoveButton, inttopointer(ord(mbAll)));
148  bb.PackStart (tbut);
149  tbut := TFPgtkCheckedButton.CreateWithLabel ('NoToALl');
150  tbut.connectClicked (@AddRemoveButton, inttopointer(ord(mbNoToAll)));
151  bb.PackStart (tbut);
152  tbut := TFPgtkCheckedButton.CreateWithLabel ('YesToAll');
153  tbut.connectClicked (@AddRemoveButton, inttopointer(ord(mbYesToAll)));
154  bb.PackStart (tbut);
155  b.packstart (bb, false, false, 0);
156
157  bb := TFPgtkHButtonBox.create;
158  but := TFPgtkButton.CreateWithLabel ('Show Message Dialog !!');
159  but.ConnectClicked (@ShowMessageDialog, nil);
160  bb.Packstart (but);
161  b.packstart (bb, false, false, 0);
162
163  // ******* Calendar
164
165  writeln ('  Calendar');
166  b := TFPgtkVBox.Create;
167  Notebook.AppendPage (b, TFPgtkLabel.Create('Calendar'));
168
169  cal := TFPgtkCalendar.Create;
170  cal.date := encodeDate (2000,1,1);
171  b.PackStart (Cal);
172
173  but := TFPgtkButton.CreateWithLabel ('Show Date');
174  but.ConnectClicked (@Calendar_ShowDate, nil);
175  b.PackEnd (but, false, false, 0);
176
177  // ******* Layout
178
179  writeln ('  Layout');
180  TheLayout := TFPgtkLayout.Create;
181  Notebook.AppendPage (TheLayout, TFPgtkLabel.Create('Layout'));
182  TheLayout.Freeze;
183  e := TFPgtkEntry.Create;
184    e.Text := 'Entry on 25,10 to clearly show where the edges end';
185    TheLayout.Put (e, 25,10);
186  e := TFPgtkEntry.Create;
187    e.Text := 'Entry on 5,50';
188    e.SetUSize (300, 24);
189    TheLayout.Put (e, 5,30);
190  but := TFPgtkButton.CreateWithLabel ('Catch me with doubleclick !!');
191    but.ConnectClicked (@Layout_runaway, nil);
192    but.CanDefault:= true;
193    but.SetUSize (200, 50);
194    TheLayout.put (but, 75, 75);
195    LayoutY := 75;
196    LayoutX := 75;
197  TheLayout.SetSize (350, 400);
198  TheLayout.Thaw;
199
200  // ******* ButtonBox
201
202  writeln ('  ButtonBox');
203  b := TFPgtkVBox.Create;
204  Notebook.AppendPage (b, TFPgtkLabel.Create('Buttonboxes'));
205
206  HButtons := TFPgtkHButtonBox.Create;
207  HButtons.Layout := GTK_BUTTONBOX_end;
208  HButtons.Spacing := 3;
209  b.PackEnd (HButtons, false, false, 0);
210
211  h := TFPgtkHBox.Create;
212  b.PackStart (h, true, true, 0);
213
214  but := TFPgtkButton.CreateWithLabel ('Add a button');
215  but.ConnectClicked (@ButBox_AddThem, nil);
216  h.PackStart (but, false, false, 3);
217
218  VButtons := TFPgtkVButtonBox.Create;
219  VButtons.Layout := GTK_Buttonbox_Start;
220  VButtons.Spacing := 15;
221  h.PackEnd (VButtons, false, false,0);
222
223  // ******* Accelerator
224
225  writeln ('  Accelerator');
226  b := TFPgtkVBox.Create;
227  Notebook.AppendPage (b, TFPgtkLabel.Create('Accelorators'));
228
229  TheAG := AccelGroupNew;
230
231  h := TFPgtkHBox.Create;
232  b.PackStart (h, false, false, 0);
233  but := TFPgtkButton.CreateWithLabel('Parse');
234  but.ConnectClicked (@Accel_Parse, nil);
235  h.PackStart (but, false, false, 0);
236  Key := TFPgtkSpinButton.Create;
237  h.PackStart (Key);
238  Key.adjustment.configure (0, $FFFF, GDK_Delete, 1, 256, 0);
239  Key.Configure (nil, 100, 0);
240
241  h := TFPgtkHBox.Create;
242  b.PackStart (h, false, false, 0);
243  h.homogeneous := true;
244  ModShift := TFPgtkCheckedButton.CreateWithLabel('Shift');
245  h.PackStart (ModShift);
246  ModCtrl := TFPgtkCheckedButton.CreateWithLabel('Ctrl');
247  ModCtrl.active := true;
248  h.Packstart(ModCtrl);
249  ModAlt := TFPgtkCheckedButton.CreateWithLabel('Alt');
250  h.Packstart (ModAlt);
251
252  h := TFPgtkHBox.create;
253  b.PackStart (h, false, false, 0);
254  AccelBut := TFPgtkButton.createwithLabel ('Show');
255  Accelbut.ConnectClicked (@Accel_ConvertToName, nil);
256  //AcceleratorAdd (TheAG, Accelbut, sgClicked, Gdk_S, Gdk_Control_mask, GTK_ACCEL_VISIBLE);
257  h.PackStart (Accelbut,false,false,0);
258  KeyName := TFPgtkEntry.Create;
259  h.Packstart (KeyName);
260
261  h := TFPgtkHBox.create;
262  but := TFPgtkButton.CreateWithLabel ('Add');
263  but.ConnectClicked (@Accel_AddAccel, nil);
264  h.PackStart (but, false, false, 0);
265  but := TFPgtkButton.Create;
266  AKeyName := TFPgtkAccelLabel.create ('Accellerators');
267  but.Add (AKeyName);
268  AKeyName.accelwidget := AccelBut;
269  AKeyname.refetch;
270  h.PackStart (but, true, true, 0);
271  b.PackStart (h, false, false, 0);
272
273  // ******* CList
274
275  writeln ('  CList');
276  p := TFPgtkVPaned.Create;
277  Notebook.AppendPage (p, TFPgtkLabel.Create('CList'));
278
279  CList := TFPgtkScrollCList.Create (1);
280  p.Pack1 (CList, true, true);
281  b := TFPgtkVBox.Create;
282  p.Pack2 (b, false, true);
283  p.handleSize := 5;
284  p.ComputePosition (100, 60, 50);
285
286  CListText := TFPgtkScrollText.create;
287  b.Packstart (CListText);
288
289  h := TFPgtkHBox.Create;
290  b.PackStart (h, false, false, 0);
291
292  but := TFPGtkButton.CreateWithLabel('Add');
293  but.ConnectClicked (@CList_AddToList, CListText.TheText);
294  h.PackStart (but, false, false, 0);
295
296  h := TFPgtkHBox.Create;
297  h.PackStart (TFPGtkLabel.Create('Selection Mode'), false, false, 2);
298  om := TFPgtkOptionMenu.Create;
299  om.Menu := NewMenu ('Selection Mode', [
300                 NewMenuItem ('Single',@CList_SelectionMode, inttopointer(0)),
301                 NewMenuItem ('Browse',@CList_SelectionMode, inttopointer(1)),
302                 NewMenuItem ('Mutiple',@CList_SelectionMode, inttopointer(2)),
303                 NewMenuItem ('Extended',@CList_SelectionMode, inttopointer(3))]);
304  om.SetHistory (0);
305  CList.CList.SelectionMode := GTK_SELECTION_SINGLE;
306  h.Packstart (om, true, true, 0);
307
308  b.PackStart (h, false, false, 0);
309
310  // ******* List
311
312  writeln ('  List');
313  p := TFPgtkVPaned.Create;
314  Notebook.AppendPage (p, TFPgtkLabel.Create('List'));
315
316  List := TFPgtkScrollList.Create;
317  p.Pack1 (List, true, true);
318  b := TFPgtkVBox.Create;
319  p.Pack2 (b, false, true);
320  p.handleSize := 5;
321  p.ComputePosition (100, 60, 50);
322
323  ListText := TFPgtkScrollText.create;
324  b.Packstart (ListText);
325
326  h := TFPgtkHBox.Create;
327  b.PackStart (h, false, false, 0);
328
329  but := TFPGtkButton.CreateWithLabel('Add');
330  but.ConnectClicked (@List_AddToList, ListText.TheText);
331  h.PackStart (but, false, false, 0);
332
333  but := TFPGtkButton.CreateWithLabel('Add Count');
334  but.ConnectClicked (@List_AddCount, ListText.TheText);
335  h.PackStart (but, false, false, 0);
336
337  but := TFPGtkButton.CreateWithLabel('Clear 1-5');
338  but.ConnectClicked (@List_Clear1_5, ListText.TheText);
339  h.PackStart (but, false, false, 0);
340
341  but := TFPGtkButton.CreateWithLabel('Clear all');
342  but.ConnectClicked (@List_ClearAll, ListText.TheText);
343  h.PackStart (but, false, false, 0);
344
345  h := TFPgtkHBox.Create;
346  h.PackStart (TFPGtkLabel.Create('Selection Mode'), false, false, 2);
347  om := TFPgtkOptionMenu.Create;
348  om.Menu := NewMenu ('Selection Mode', [
349                 NewMenuItem ('Single','','',@List_SelectionMode, inttopointer(0)),
350                 NewMenuItem ('Browse','','',@List_SelectionMode, inttopointer(1)),
351                 NewMenuItem ('Mutiple','','',@List_SelectionMode, inttopointer(2)),
352                 NewMenuItem ('Extended','','',@List_SelectionMode, inttopointer(3))]);
353  om.SetHistory (0);
354  List.List.SelectionMode := GTK_SELECTION_SINGLE;
355  h.Packstart (om, true, true, 0);
356
357  b.PackStart (h, false, false, 0);
358
359  // ******* Statusbar
360
361  writeln ('  Statusbar');
362  b := TFPgtkVBox.Create;
363  Notebook.appendPage (b, TFPgtkLabel.Create('Statusbar'));
364
365  bar := TFPgtkStatusbar.Create;
366  b.Packend (bar, false, true, 0);
367
368  f := TFPgtkFrame.Create;
369  f.Text := 'Context';
370  h := TFPgtkHbox.Create;
371  IDContext := TFPgtkSpinbutton.Create;
372  IDContext.configure (nil, 1000, 0);
373  IDContext.adjustment.configure (-maxint, maxint, 0, 1, 100,0);
374  EContext := TFPgtkEntry.Create;
375  EContext.ConnectChanged (@StatusBar_GetContext, IDContext);
376  h.Packstart (EContext, true, true, 0);
377  h.packstart (TFPgtkLabel.Create('ID'), false, false, 2);
378  h.packstart (IDContext, false, false, 0);
379  f.add (h);
380  b.Packstart (f, false, true, 0);
381
382  f := TFPgtkFrame.Create;
383  f.Text := 'Message';
384  h := TFPgtkHbox.Create;
385  IDMessage := TFPgtkSpinbutton.Create;
386  IDMessage.configure (nil, 1000, 0);
387  IDMessage.adjustment.configure (-maxint, maxint, 0, 1, 100,0);
388  EMessage := TFPgtkEntry.Create;
389  h.Packstart (EMessage, true, true, 0);
390  h.packstart (TFPgtkLabel.Create('ID'), false, false, 2);
391  h.packstart (IDMessage, false, false, 0);
392  f.add (h);
393  b.Packstart (f, false, true, 0);
394
395  h := TFPgtkHBox.Create;
396  h.homogeneous := true;
397  b.Packstart (h, false, false, 2);
398
399  but := TFPgtkButton.CreateWithLabel ('Push');
400  but.ConnectClicked (@statusbar_Push, EMessage);
401  h.Packstart (but, false, true, 2);
402
403  but := TFPgtkButton.CreateWithLabel ('Pop');
404  but.ConnectClicked (@statusbar_Pop, EMessage);
405  h.Packstart (but, false, true, 2);
406
407  but := TFPgtkButton.CreateWithLabel ('Remove');
408  but.ConnectClicked (@statusbar_Remove, EMessage);
409  h.Packstart (but, false, true, 2);
410
411  // ******* Memo and ShowMessage
412
413  writeln ('  Memo / ShowMessage');
414  b := TFPgtkVBox.Create;
415  Notebook.appendPageFull (b, TFPgtkLabel.Create('Memo Message'), TFPgtkLabel.Create('Memo and ShowMessage'),true);
416
417  t := TFPgtkScrollText.Create;
418  b.PackStart (t, true, true, 10);
419
420  but := TFPgtkButton.CreateWithLabel ('Show text');
421  but.ConnectClicked (@MemoMessage_Show, t);
422  b.PackStart (but, false, false, 2);
423
424  // ******* File Selection
425
426  writeln ('  File selection');
427  b := TFPgtkVBox.Create;
428  Notebook.appendPageFull (b, TFPgtkLabel.Create('File selection'), TFPgtkLabel.Create('File selection dialog'),true);
429
430  b.PackStart (TFPgtkFileEntry.Create, false, true, 10);
431
432  // ******* Progress bar page
433
434  b := TFPgtkVBox.Create;
435  Notebook.appendPageFull (b, TFPgtkLabel.Create('Progress'), TFPgtkLabel.Create('The Progressbar'),true);
436
437  pb := TFPgtkProgressBar.Create (nil);
438  with pb do
439    begin
440    formatstring := Init_ProgressBar_FormatString;
441    showText := true;
442    configure (50.0, 0.0, 500.0);
443    end;
444  b.Packstart (pb, false, false, 3);
445
446  but := TFPgtkButton.createWithLabel ('Run the bar');
447  but.ConnectClicked (@ProgressBar_ShowItToMe, nil);
448  b.PackStart (but, false, false, 3);
449
450  but := TFPgtkCheckbutton.CreateWithLabel ('Activity mode');
451  but.ConnectClicked (@ProgressBar_SetActivityMode, pb);
452  b.PackStart (but, false, false, 3);
453
454  b.Packstart (TFPgtkLabel.Create ('Format text'), false, false, 10);
455
456  e := TFPgtkEntry.Create;
457  e.Text := Init_ProgressBar_FormatString;
458  e.ConnectChanged (@ProgressBar_FormatString, pb);
459  b.Packstart(e, false, false, 0);
460
461  // ******* Spinbutton
462  writeln ('  page creation');
463  b := TFPgtkVBox.Create;
464  Notebook.appendPageFull (b, TFPgtkLabel.Create('SpinButton'), TFPgtkLabel.Create('Spinbuttons'),true);
465
466  Spin := TFPgtkSPinButton.Create;
467  Spin.Configure (nil,0.01,3);
468  Spin.Adjustment.configure (-100.0, 100.0, 10.25, 0.01, 0.1, 1.0);
469  Spin.digits := 2;
470  Spin.numeric := false;
471  Spin.Wrap := false;
472  Spin.SnapToTicks := false;
473  b.PackStart (spin, false, false, 0);
474
475  b.PackStart (TFPgtkLabel.Create('Climb rate'), false, false, 0);
476  sp := TFPgtkSpinButton.Create;
477  with sp do
478    begin
479    with Adjustment do
480      begin
481      Configure (0.0, 1.0, 0.01, 0.01, 0.20, 0.0);
482      ConnectValueChanged (@Spinbutton_ClimbRate, sp);
483      end;
484    digits := 3;
485    ClimbRate := 0.01;
486    SnapToTicks := False;
487    end;
488  b.PackStart (sp, false, false, 0);
489
490  b.PackStart (TFPgtkLabel.Create('Digits'), false, false, 0);
491  sp := TFPgtkSpinButton.Create;
492  with sp do
493    begin
494    with adjustment do
495      begin
496      Configure (0.0, 5.0, 2.0, 1.0, 1.0, 0.0);
497      ConnectValueChanged (@Spinbutton_Digits, sp);
498      end;
499    Configure (nil,1,0);
500    SnapToTicks := True;
501    end;
502  b.PackStart (sp, false, false, 0);
503
504  tbut := TFPgtkToggleButton.CreateWithLabel ('Numeric');
505  tbut.ConnectToggled (@SpinButton_numeric, Spin);
506  b.PackStart (tbut, false, false, 0);
507
508  tbut := TFPgtkToggleButton.CreateWithLabel ('Wrap');
509  tbut.ConnectToggled (@SpinButton_Wrap, Spin);
510  b.PackStart (tbut, false, false, 0);
511
512  tbut := TFPgtkToggleButton.CreateWithLabel ('Snap to ticks');
513  tbut.ConnectToggled (@SpinButton_SnapToTicks, Spin);
514  b.PackStart (tbut, false, false, 0);
515
516  // ******* Last empty page
517
518  writeln ('  Empty page');
519  Notebook.appendPageFull (TFPgtkLabel.Create('This page is left intentionally blank'), TFPgtkLabel.Create('Empty'), nil, true);
520
521  Notebook.enablePopup;
522
523end;
524
525// ******* Progressbar
526
527procedure TListWindow.ProgressBar_ShowItToMe (Sender : TFPgtkObject; data : pointer);
528var k, r, t : integer;
529begin
530  for r := 0 to 500 do
531    begin
532    pb.CurrentValue := (r + 0.1);
533    for t := 0 to random(5) do
534      k := random(1000)*5 div 2542 + 15;
535    end;
536end;
537
538procedure TListWindow.ProgressBar_SetActivityMode (Sender : TFPgtkObject; data : pointer);
539begin
540  TFPgtkProgressBar(data).ActivityMode := TFPgtkCheckButton(Sender).Active;
541end;
542
543procedure TListWindow.ProgressBar_FormatString (Sender : TFPgtkObject; data : pointer);
544begin
545  TFPgtkProgressBar(data).Formatstring := TFPgtkEntry(Sender).Text;
546end;
547
548// ******* Spinbutton
549
550procedure TListWindow.Spinbutton_ClimbRate (Sender : TFPgtkObject; data : pointer);
551begin
552  spin.climbrate := TFPgtkSpinbutton(data).asFloat;
553end;
554
555procedure TListWindow.Spinbutton_Digits (Sender : TFPgtkObject; data : pointer);
556begin
557  spin.digits := TFPgtkSpinbutton(data).asinteger;
558end;
559
560procedure TListWindow.Spinbutton_UpdatePolicy (Sender : TFPgtkObject; data : pointer);
561begin
562end;
563
564procedure TListWindow.Spinbutton_Numeric (Sender : TFPgtkObject; data : pointer);
565begin
566  TFPgtkSpinbutton(data).Numeric := (Sender as TFPgtkToggleButton).Active;
567end;
568
569procedure TListWindow.Spinbutton_Wrap (Sender : TFPgtkObject; data : pointer);
570begin
571  TFPgtkSpinbutton(data).Wrap := (Sender as TFPgtkToggleButton).Active;
572end;
573
574procedure TListWindow.Spinbutton_SnapToTicks (Sender : TFPgtkObject; data : pointer);
575begin
576  TFPgtkSpinbutton(data).SnapToTicks := (Sender as TFPgtkToggleButton).Active;
577end;
578
579{ Memo and ShowMessage }
580
581procedure TListWindow.MemoMessage_Show (Sender : TFPgtkObject; data : pointer);
582begin
583  ShowMessage ('You typed:', TFPgtkScrollText(data).Text);
584end;
585
586{ Statusbar }
587
588procedure TListWindow.StatusBar_Push (Sender : TFPgtkObject; data : pointer);
589begin
590  IDMessage.asinteger := bar.push (IDContext.asinteger, EMessage.Text);
591end;
592
593procedure TListWindow.StatusBar_Pop (Sender : TFPgtkObject; data : pointer);
594begin
595  bar.pop (IDContext.asinteger);
596end;
597
598procedure TListWindow.StatusBar_Remove (Sender : TFPgtkObject; data : pointer);
599begin
600  bar.Remove (IDContext.asinteger, IDMessage.asinteger);
601end;
602
603procedure TListWindow.StatusBar_GetContext (Sender : TFPgtkObject; data : pointer);
604begin
605  IDContext.asinteger := bar.GetContextID (EContext.Text);
606end;
607
608{ List }
609
610const ListSignalNames : array[0..15] of string =
611        (sgSelectionChanged,sgSelectChild,sgUnselectChild,
612         sgToggleFocusRow,sgSelectAll,sgUnselectAll,sgUndoSelection,
613         sgStartSelection,sgEndSelection,sgToggleAddMode,
614         sgExtendSelection,sgScrollVertical,sgScrollHorizontal,
615         sgSelect,sgDeselect,sgToggle);
616
617procedure TListWindow.List_ShowSignal (Sender : TFPgtkObject; data : pointer);
618var r : integer;
619begin
620  r := PointerToInt (data);
621  writeln (Sender.Classname, ' emitted signal ',ListSignalNames[r]);
622end;
623
624procedure TListWindow.List_ShowWidgetSignal (Sender : TFPgtkObject; widget:TFPgtkWidget; data : pointer);
625var r : integer;
626begin
627  r := PointerToInt (data);
628  writeln (Sender.Classname, ' emitted signal ',ListSignalNames[r]);
629end;
630
631procedure TListWindow.List_AddToList (Sender : TFPgtkObject; data : pointer);
632var t : TFPgtkText;
633    l : TFPgtkListItemGroup;
634begin
635  l := TFPgtkListItemGroup.Create;
636  try
637    t := TFPgtkText(data);
638    l.FillFromList (t.Lines);
639    List.List.AppendItems (l);
640  finally
641    l.free;
642  end;
643end;
644
645procedure TListWindow.List_SelectionMode (Sender : TFPgtkObject; data : pointer);
646var r : integer;
647begin
648  r := pointertoint(data);
649  List.List.SelectionMode := TGtkSelectionMode(r);
650end;
651
652procedure TListWindow.List_ClearAll (Sender : TFPgtkObject; data : pointer);
653begin
654  List.List.ClearAll;
655end;
656
657procedure TListWindow.List_Clear1_5 (Sender : TFPgtkObject; data : pointer);
658begin
659  List.List.ClearItems(1,5);
660end;
661
662procedure TListWindow.List_AddCount (Sender : TFPgtkObject; data : pointer);
663var li : TFPgtkListItem;
664begin
665  li := TFPgtkListItem.CreateWithLabel ('Count');
666  List.List.Add (li);
667end;
668
669{ CList }
670
671procedure TListWindow.CList_AddToList (Sender : TFPgtkObject; data : pointer);
672var t : TFPgtkText;
673    l : TStrings;
674    r : integer;
675begin
676  t := TFPgtkText(data);
677  l := t.Lines;
678  writeln ('Going to add... (',l.commatext,')');
679  with l do
680    for r := 0 to count-1 do
681      CList.CList.Append (l[r],'');
682end;
683
684procedure TListWindow.CList_SelectionMode (Sender : TFPgtkObject; data : pointer);
685var r : integer;
686begin
687  r := pointertoint(data);
688  CList.CList.SelectionMode := TGtkSelectionMode(r);
689end;
690
691{ Accelerators }
692
693procedure Tlistwindow.Accel_ConvertToName (Sender : TFPgtkObject; data : pointer);
694var Mods : TGdkModifierType;
695begin
696  Mods := 0;
697  if ModCtrl.active then
698    Mods := Mods + Gdk_Control_Mask;
699  if ModShift.active then
700    Mods := Mods + Gdk_Shift_Mask;
701  if ModAlt.active then
702    Mods := Mods + Gdk_Mod1_Mask;
703  KeyName.Text := AccelKeyName (Key.asinteger, mods);
704end;
705
706procedure TListWindow.Accel_Parse (Sender : TFPgtkObject; data : pointer);
707var Mods : TGdkModifierType;
708    K : guint;
709begin
710  AccelKeyParse (KeyName.Text, K, Mods);
711  ModCtrl.active := (Mods and Gdk_Control_mask) <> 0;
712  ModShift.active := (Mods and Gdk_Shift_mask) <> 0;
713  ModAlt.active := (Mods and Gdk_Mod1_mask) <> 0;
714  Key.Asinteger := k;
715end;
716
717procedure TListWindow.Accel_AddAccel (Sender : TFPgtkObject; data : pointer);
718var Mods : TGdkModifierType;
719begin
720  Mods := 0;
721  if ModCtrl.active then
722    Mods := Mods + Gdk_Control_Mask;
723  if ModShift.active then
724    Mods := Mods + Gdk_Shift_Mask;
725  if ModAlt.active then
726    Mods := Mods + Gdk_Mod1_Mask;
727  AcceleratorAdd (TheAG, AccelBut, sgClicked, Key.Asinteger, mods, GTK_ACCEL_VISIBLE);
728  AKeyName.refetch;
729end;
730
731const ButBoxCount : integer = 0;
732
733procedure TListWindow.ButBox_AddThem (Sender:TFPgtkObject; data:pointer);
734begin
735  inc (ButBoxCount);
736  VButtons.PackStart (TFPgtkButton.CreateWithLabel (format ('But %d',[ButBoxCount])),false,false,1);
737  HButtons.PackStart (TFPgtkButton.CreateWithLabel (format ('But %d',[ButBoxCount])),false,false,1);
738end;
739
740procedure TListWindow.Layout_runaway (Sender:TFPgtkObject; data:pointer);
741begin
742  randomize;
743  LayoutX := LayoutX + 100 - random(200);
744  if LayoutX < 0 then
745    LayoutX := random(200);
746  LayoutY := LayoutY + 100 - random(200);
747  if LayoutY < 0 then
748    LayoutY := random(200);
749  TheLayout.move (Sender as TFPgtkWidget, LayoutX, LayoutY);
750end;
751
752procedure TListWindow.Calendar_ShowDate (Sender:TFPgtkObject; data:pointer);
753begin
754  ShowMessage ('Calendar', 'Date selected: ' + formatdatetime ('dd/mm/yyyy', cal.date));
755end;
756
757procedure TlistWindow.AddRemoveButton (Sender:TFPgtkObject; data:pointer);
758var mdb : TMsgDlgBtn;
759begin
760  mdb := TMsgDlgBtn(data);
761  if (Sender as TFPgtkToggleButton).Active then
762    MessageButtons := MessageButtons + [mdb]
763  else
764    MessageButtons := MessageButtons - [mdb];
765end;
766
767procedure TlistWindow.ShowMessageDialog (Sender:TFPgtkObject; data:pointer);
768begin
769  MessageDlg (Msg.Text, TMsgDlgType(DialogType.ActiveIndex), MessageButtons, 0);
770end;
771
772end.
773