| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 | {  Converted from C to Pascal by Artur Bac with liitle additions by me  <[email protected]>  Reda Poland}{$MODE objfpc}{$H+}{$S+}{$HINTS ON}{$ifdef win32}  {$define extdecl := stdcall;}  {$APPTYPE GUI}{$endif}{$ifdef unix}  {$define extdecl := cdecl;}{$endif}Program spinbutton;Uses glib,gtk;Type    PGInt = ^gint;Const    a : gint = 1;    b : gint = 2;Var spinner1 , spinner2 : PGtkWidget;Function  GPOINTER_TO_INT (data : pgint) : gint;Begin    GPOINTER_TO_INT := data^;End;Procedure toggle_snap( widget : PGtkWidget;                         spin : PGtkSpinButton ); cdecl;Begin  gtk_spin_button_set_snap_to_ticks (spin,            gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)));End ;Procedure toggle_numeric( widget : PGtkWidget;                         spin : PGtkSpinButton ); cdecl;Begin  gtk_spin_button_set_numeric (spin,                            gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)));End;Procedure change_digits( widget : PGtkWidget;                    spin : PGtkSpinButton ); cdecl;Begin  gtk_spin_button_set_digits (GTK_SPIN_BUTTON (spinner1),                              gtk_spin_button_get_value_as_int (spin));End;Procedure  get_value( widget : PGtkWidget;                    data : gpointer ) ; cdecl;Var  Ptr_buf   : PGchar;  buf       : string;  label_l   : PGtkLabel ;  spin,spin2: PGtkSpinButton;Begin  spin := GTK_SPIN_BUTTON (spinner1);  spin2 := GTK_SPIN_BUTTON (spinner2);  label_l := GTK_LABEL (gtk_object_get_user_data (GTK_OBJECT (widget)));  if (GPOINTER_TO_INT (data) = 1) then    str(gtk_spin_button_get_value_as_int (spin),buf)  else    Str(gtk_spin_button_get_value_as_float (spin)                    :10:gtk_spin_button_get_value_as_int(spin2)  //This checks how many digits we have                    ,buf);  Ptr_buf:=PChar(buf); //We have to change ansistring to a pointer to char PChar == PGChar  gtk_label_set_text (label_l, Ptr_buf);End;Var  window,  frame,  hbox,  main_vbox,  vbox,  vbox2,  spinner,  button,  label_l,  val_label : PGtkWidget;  adj : PGtkAdjustment;Begin  // Initialise GTK  gtk_set_locale ();  gtk_init(@argc, @argv);  gtk_rc_init;  window := gtk_window_new (GTK_WINDOW_TOPLEVEL);  gtk_signal_connect (GTK_OBJECT (window), 'destroy',                      GTK_SIGNAL_FUNC (@gtk_main_quit),                      NULL);  gtk_window_set_title (GTK_WINDOW (window), 'Spin Button');  main_vbox := gtk_vbox_new (FALSE, 5);  gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 10);  gtk_container_add (GTK_CONTAINER (window), main_vbox);  frame := gtk_frame_new ('Not accelerated');  gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);  vbox := gtk_vbox_new (FALSE, 0);  gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);  gtk_container_add (GTK_CONTAINER (frame), vbox);  // Day, month, year spinners  hbox := gtk_hbox_new (FALSE, 0);  gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);  vbox2 := gtk_vbox_new (FALSE, 0);  gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);  label_l := gtk_label_new ('Day :');  gtk_misc_set_alignment (GTK_MISC (label_l), 0, 0.5);  gtk_box_pack_start (GTK_BOX (vbox2), label_l, FALSE, TRUE, 0);  adj := PGtkAdjustment ( gtk_adjustment_new (1.0, 1.0, 31.0, 1.0,                                              5.0, 0.0));  spinner := gtk_spin_button_new (adj, 0, 0);  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);  gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinner),                                   GTK_SHADOW_OUT);  gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);  vbox2 := gtk_vbox_new (FALSE, 0);  gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);  label_l := gtk_label_new ('Month :');  gtk_misc_set_alignment (GTK_MISC (label_l), 0, 0.5);  gtk_box_pack_start (GTK_BOX (vbox2), label_l, FALSE, TRUE, 0);  adj := PGtkAdjustment (gtk_adjustment_new (1.0, 1.0, 12.0, 1.0,                                              5.0, 0.0));  spinner := gtk_spin_button_new (adj, 0, 0);  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);  gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinner),                                   GTK_SHADOW_ETCHED_IN);  gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);  vbox2 := gtk_vbox_new (FALSE, 0);  gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);  label_l := gtk_label_new ('Year :');  gtk_misc_set_alignment (GTK_MISC (label_l), 0, 0.5);  gtk_box_pack_start (GTK_BOX (vbox2), label_l, FALSE, TRUE, 0);  adj := PGtkAdjustment (gtk_adjustment_new (1998.0, 0.0, 2100.0,                                              1.0, 100.0, 0.0));  spinner := gtk_spin_button_new (adj, 0, 0);  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), FALSE);  gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinner),                                   GTK_SHADOW_IN);  gtk_widget_set_usize (spinner, 55, 0);  gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);  frame := gtk_frame_new ('Accelerated');  gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);  vbox := gtk_vbox_new (FALSE, 0);  gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);  gtk_container_add (GTK_CONTAINER (frame), vbox);  hbox := gtk_hbox_new (FALSE, 0);  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);  vbox2 := gtk_vbox_new (FALSE, 0);  gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);  label_l := gtk_label_new ('Value :');  gtk_misc_set_alignment (GTK_MISC (label_l), 0, 0.5);  gtk_box_pack_start (GTK_BOX (vbox2), label_l, FALSE, TRUE, 0);  adj := PGtkAdjustment (gtk_adjustment_new (0.0, -10000.0, 10000.0,                                              0.5, 100.0, 0.0));  spinner1 := gtk_spin_button_new (adj, 1.0, 2);  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner1), TRUE);  gtk_widget_set_usize (spinner1, 100, 0);  gtk_box_pack_start (GTK_BOX (vbox2), spinner1, FALSE, TRUE, 0);  vbox2 := gtk_vbox_new (FALSE, 0);  gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);  label_l := gtk_label_new ('Digits :');  gtk_misc_set_alignment (GTK_MISC (label_l), 0, 0.5);  gtk_box_pack_start (GTK_BOX (vbox2), label_l, FALSE, TRUE, 0);  adj := PGtkAdjustment (gtk_adjustment_new (2, 1, 5, 1, 1, 0));  spinner2 := gtk_spin_button_new (adj, 0.0, 0);  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner2), TRUE);  gtk_signal_connect (GTK_OBJECT (adj), 'value_changed',                      GTK_SIGNAL_FUNC (@change_digits),                      gpointer (spinner2));  gtk_box_pack_start (GTK_BOX (vbox2), spinner2, FALSE, TRUE, 0);  hbox := gtk_hbox_new (FALSE, 0);  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);  button := gtk_check_button_new_with_label ('Snap to 0.5-ticks');  gtk_signal_connect (GTK_OBJECT (button), 'clicked',                      GTK_SIGNAL_FUNC (@toggle_snap),                      spinner1);  gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);  button := gtk_check_button_new_with_label ('Numeric only input mode');  gtk_signal_connect (GTK_OBJECT (button), 'clicked',                      GTK_SIGNAL_FUNC (@toggle_numeric),                      spinner1);  gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);  val_label := gtk_label_new ('');  hbox := gtk_hbox_new (FALSE, 0);  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);  button := gtk_button_new_with_label ('Value as Int');  gtk_object_set_user_data (GTK_OBJECT (button), val_label);  gtk_signal_connect (GTK_OBJECT (button), 'clicked',          GTK_SIGNAL_FUNC (@get_value),@a);  gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);  button := gtk_button_new_with_label ('Value as Float');  gtk_object_set_user_data (GTK_OBJECT (button), val_label);  gtk_signal_connect (GTK_OBJECT (button), 'clicked',              GTK_SIGNAL_FUNC (@get_value),@b);  gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);  gtk_box_pack_start (GTK_BOX (vbox), val_label, TRUE, TRUE, 0);  gtk_label_set_text (GTK_LABEL (val_label), '0');  hbox := gtk_hbox_new (FALSE, 0);  gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);  button := gtk_button_new_with_label ('Close');  gtk_signal_connect_object (GTK_OBJECT (button), 'clicked',                             GTK_SIGNAL_FUNC (@gtk_widget_destroy),                             GTK_OBJECT (window));  gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);  gtk_widget_show_all (window);  // Enter the event loop  gtk_main ();End.
 |