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.
|