~ubuntu-branches/debian/lenny/fpc/lenny

« back to all changes in this revision

Viewing changes to fpcsrc/packages/extra/gtk2/examples/gtk_demo/menus.inc

  • Committer: Bazaar Package Importer
  • Author(s): Mazen Neifer, Torsten Werner, Mazen Neifer
  • Date: 2008-05-17 17:12:11 UTC
  • mfrom: (3.1.9 intrepid)
  • Revision ID: james.westby@ubuntu.com-20080517171211-9qi33xhd9evfa0kg
Tags: 2.2.0-dfsg1-9
[ Torsten Werner ]
* Add Mazen Neifer to Uploaders field.

[ Mazen Neifer ]
* Moved FPC sources into a version dependent directory from /usr/share/fpcsrc
  to /usr/share/fpcsrc/${FPCVERSION}. This allow installing more than on FPC
  release.
* Fixed far call issue in compiler preventing building huge binearies.
  (closes: #477743)
* Updated building dependencies, recomennded and suggested packages.
* Moved fppkg to fp-utils as it is just a helper tool and is not required by
  compiler.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
(* Menus
 
2
 *
 
3
 * There are several widgets involved in displaying menus. The
 
4
 * GtkMenuBar widget is a horizontal menu bar, which normally appears
 
5
 * at the top of an application. The GtkMenu widget is the actual menu
 
6
 * that pops up. Both GtkMenuBar and GtkMenu are subclasses of
 
7
 * GtkMenuShell; a GtkMenuShell contains menu items
 
8
 * (GtkMenuItem). Each menu item contains text and/or images and can
 
9
 * be selected by the user.
 
10
 *
 
11
 * There are several kinds of menu item, including plain GtkMenuItem,
 
12
 * GtkCheckMenuItem which can be checked/unchecked, GtkRadioMenuItem
 
13
 * which is a check menu item that's in a mutually exclusive group,
 
14
 * GtkSeparatorMenuItem which is a separator bar, GtkTearoffMenuItem
 
15
 * which allows a GtkMenu to be torn off, and GtkImageMenuItem which
 
16
 * can place a GtkImage or other widget next to the menu text.
 
17
 *
 
18
 * A GtkMenuItem can have a submenu, which is simply a GtkMenu to pop
 
19
 * up when the menu item is selected. Typically, all menu items in a menu bar
 
20
 * have submenus.
 
21
 *
 
22
 * The GtkOptionMenu widget is a button that pops up a GtkMenu when clicked.
 
23
 * It's used inside dialogs and such.
 
24
 *
 
25
 * GtkItemFactory provides a higher-level interface for creating menu bars
 
26
 * and menus; while you can construct menus manually, most people don't
 
27
 * do that. There's a separate demo for GtkItemFactory.
 
28
 *
 
29
 *)
 
30
 
 
31
 
 
32
var
 
33
  menu_window : PGtkWidget;
 
34
 
 
35
function create_menu (depth   : gint;
 
36
                      tearoff : gboolean): PGtkWidget;
 
37
var
 
38
  menu,
 
39
  menuitem : PGtkWidget;
 
40
 
 
41
  group    : PGSList;
 
42
  buf      : pgchar;
 
43
  i, j     : gint;
 
44
 
 
45
begin
 
46
 
 
47
  if depth < 1 then
 
48
    exit (NULL);
 
49
 
 
50
  menu  := gtk_menu_new ();
 
51
  group := NULL;
 
52
 
 
53
  if tearoff then
 
54
  begin
 
55
    menuitem := gtk_tearoff_menu_item_new ();
 
56
    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
 
57
    gtk_widget_show (menuitem);
 
58
  end;
 
59
 
 
60
  j:=1;
 
61
  for i:=0 to 4 do
 
62
  begin
 
63
    buf := g_strdup_printf ('item %2d - %d', [depth, j]);
 
64
    menuitem := gtk_radio_menu_item_new_with_label (group, buf);
 
65
    group := gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menuitem));
 
66
 
 
67
    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
 
68
    gtk_widget_show (menuitem);
 
69
 
 
70
    if i = 3 then
 
71
      gtk_widget_set_sensitive (menuitem, FALSE);
 
72
 
 
73
    gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (depth - 1, TRUE));
 
74
 
 
75
    g_free (buf);
 
76
    inc (j);
 
77
  end;
 
78
 
 
79
  create_menu := menu;
 
80
end;
 
81
 
 
82
function do_menus          : PGtkWidget;
 
83
var
 
84
  box1,
 
85
  box2,
 
86
  button,
 
87
  optionmenu,
 
88
  separator,
 
89
  menubar,
 
90
  menu,
 
91
  menuitem     : PGtkWidget;
 
92
 
 
93
  accel_group  : PGtkAccelGroup;
 
94
 
 
95
begin
 
96
  if menu_window = NULL then
 
97
  begin
 
98
    menu_window := gtk_window_new (GTK_WINDOW_TOPLEVEL);
 
99
 
 
100
    g_signal_connect (menu_window, 'destroy',
 
101
                        G_CALLBACK(@gtk_widget_destroyed), @menu_window);
 
102
    g_signal_connect (menu_window, 'delete-event',
 
103
                        G_CALLBACK (@gtk_true), NULL);
 
104
 
 
105
    accel_group := gtk_accel_group_new ();
 
106
    gtk_window_add_accel_group (GTK_WINDOW (menu_window), accel_group);
 
107
 
 
108
    gtk_window_set_title (GTK_WINDOW (menu_window), 'Menus');
 
109
    gtk_container_set_border_width (GTK_CONTAINER (menu_window), 0);
 
110
 
 
111
 
 
112
    box1 := gtk_vbox_new (FALSE, 0);
 
113
    gtk_container_add (GTK_CONTAINER (menu_window), box1);
 
114
    gtk_widget_show (box1);
 
115
 
 
116
    menubar := gtk_menu_bar_new ();
 
117
    gtk_box_pack_start (GTK_BOX (box1), menubar, FALSE, TRUE, 0);
 
118
    gtk_widget_show (menubar);
 
119
 
 
120
    menu := create_menu (2, TRUE);
 
121
 
 
122
    menuitem := gtk_menu_item_new_with_label ('test'#13#10'line2');
 
123
    gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
 
124
    gtk_menu_shell_append (GTK_MENU_SHELL (menubar), menuitem);
 
125
    gtk_widget_show (menuitem);
 
126
 
 
127
    menuitem := gtk_menu_item_new_with_label ('foo');
 
128
    gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (3, TRUE));
 
129
    gtk_menu_shell_append (GTK_MENU_SHELL (menubar), menuitem);
 
130
    gtk_widget_show (menuitem);
 
131
 
 
132
    menuitem := gtk_menu_item_new_with_label ('bar');
 
133
    gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (4, TRUE));
 
134
    gtk_menu_item_set_right_justified (GTK_MENU_ITEM (menuitem), TRUE);
 
135
    gtk_menu_shell_append (GTK_MENU_SHELL (menubar), menuitem);
 
136
    gtk_widget_show (menuitem);
 
137
 
 
138
    box2 := gtk_vbox_new (FALSE, 10);
 
139
    gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
 
140
    gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
 
141
    gtk_widget_show (box2);
 
142
 
 
143
    menu := create_menu (1, FALSE);
 
144
    gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
 
145
 
 
146
    menuitem := gtk_separator_menu_item_new ();
 
147
    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
 
148
    gtk_widget_show (menuitem);
 
149
 
 
150
    menuitem := gtk_check_menu_item_new_with_label ('Accelerate Me');
 
151
    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
 
152
    gtk_widget_show (menuitem);
 
153
    gtk_widget_add_accelerator (menuitem,
 
154
                 'activate',
 
155
                  accel_group,
 
156
                  GDK_KEY_F1,
 
157
                  0,
 
158
                  GTK_ACCEL_VISIBLE);
 
159
 
 
160
    menuitem := gtk_check_menu_item_new_with_label ('Accelerator Locked');
 
161
    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
 
162
    gtk_widget_show (menuitem);
 
163
    gtk_widget_add_accelerator (menuitem,
 
164
                 'activate',
 
165
                  accel_group,
 
166
                  GDK_KEY_F2,
 
167
                  0,
 
168
                  GTK_ACCEL_VISIBLE or GTK_ACCEL_LOCKED);
 
169
 
 
170
    menuitem := gtk_check_menu_item_new_with_label ('Accelerators Frozen');
 
171
    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
 
172
    gtk_widget_show (menuitem);
 
173
    gtk_widget_add_accelerator (menuitem,
 
174
                 'activate',
 
175
                  accel_group,
 
176
                  GDK_KEY_F2,
 
177
                  0,
 
178
                  GTK_ACCEL_VISIBLE);
 
179
 
 
180
    gtk_widget_add_accelerator (menuitem,
 
181
                 'activate',
 
182
                  accel_group,
 
183
                  GDK_KEY_F3,
 
184
                  0,
 
185
                  GTK_ACCEL_VISIBLE);
 
186
 
 
187
    optionmenu := gtk_option_menu_new ();
 
188
    gtk_option_menu_set_menu (GTK_OPTION_MENU (optionmenu), menu);
 
189
    gtk_option_menu_set_history (GTK_OPTION_MENU (optionmenu), 3);
 
190
    gtk_box_pack_start (GTK_BOX (box2), optionmenu, TRUE, TRUE, 0);
 
191
    gtk_widget_show (optionmenu);
 
192
 
 
193
    separator := gtk_hseparator_new ();
 
194
    gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
 
195
    gtk_widget_show (separator);
 
196
 
 
197
    box2 := gtk_vbox_new (FALSE, 10);
 
198
    gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
 
199
    gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
 
200
    gtk_widget_show (box2);
 
201
 
 
202
    button := gtk_button_new_with_label ('close');
 
203
    g_signal_connect_swapped (button, 'clicked',
 
204
                                G_CALLBACK(@gtk_widget_destroy), menu_window);
 
205
 
 
206
    gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
 
207
    GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
 
208
    gtk_widget_grab_default (button);
 
209
    gtk_widget_show (button);
 
210
  end;
 
211
 
 
212
  if not GTK_WIDGET_VISIBLE (menu_window) then
 
213
    gtk_widget_show (menu_window)
 
214
  else begin
 
215
    gtk_widget_destroy (menu_window);
 
216
    menu_window := NULL;
 
217
  end;
 
218
 
 
219
  do_menus := menu_window;
 
220
end;