123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- Unit menus;
- {$mode objfpc}
- Interface
- Uses Gtk,Gdk,Glib;
- Function AddMenuToMenuBar (MenuBar : PGtkMenuBar;
- ShortCuts : PGtkAccelGroup;
- Caption : AnsiString;
- CallBack : TgtkSignalFunc;
- CallBackdata : Pointer;
- AlignRight : Boolean;
- Var MenuItem : PgtkMenuItem
- ) : PGtkMenu;
- Function AddItemToMenu (Menu : PGtkMenu;
- ShortCuts : PGtkAccelGroup;
- Caption : AnsiString;
- ShortCut : AnsiString;
- CallBack : TgtkSignalFunc;
- CallBackdata : Pointer
- ) : PGtkMenuItem;
- Function AddCheckItemToMenu (Menu : PGtkMenu;
- ShortCuts : PGtkAccelGroup;
- Caption : AnsiString;
- ShortCut : AnsiString;
- CallBack : TgtkSignalFunc;
- CallBackdata : Pointer
- ) : PGtkCheckMenuItem;
- Function AddImageItemToMenu (Menu : PGtkMenu;
- ShortCuts : PGtkAccelGroup;
- Caption : AnsiString;
- ShortCut : AnsiString;
- Bitmap : AnsiString;
- CallBack : TgtkSignalFunc;
- CallBackdata : Pointer
- ) : PGtkMenuItem;
- Function AddSeparatorToMenu(Menu : PgtkMenu) : PgtkMenuItem;
- Implementation
- Function AddMenuToMenuBar (MenuBar : PGtkMenuBar;
- ShortCuts : PGtkAccelGroup;
- Caption : AnsiString;
- CallBack : TgtkSignalFunc;
- CallBackdata : Pointer;
- AlignRight : Boolean;
- Var MenuItem : PgtkMenuItem
- ) : PGtkMenu;
- Var
- Key : guint;
- TheLabel : PGtkLabel;
- begin
- MenuItem:=pgtkmenuitem(gtk_menu_item_new_with_label(''));
- If AlignRight Then
- gtk_menu_item_right_justify(MenuItem);
- TheLabel:=GTK_LABEL(GTK_BIN(MenuItem)^.child);
- Key:=gtk_label_parse_uline(TheLabel,Pchar(Caption));
- If Key<>0 then
- gtk_widget_add_accelerator(PGtkWidget(MenuItem),'activate_item',
- Shortcuts,Key,
- GDK_MOD1_MASK,GTK_ACCEL_LOCKED);
- Result:=PGtkMenu(gtk_menu_new);
- If CallBack<>Nil then
- gtk_signal_connect(PGtkObject(result),'activate',
- CallBack,CallBackdata);
- gtk_widget_show(PgtkWidget(MenuItem));
- gtk_menu_item_set_submenu(MenuItem, PgtkWidget(Result));
- gtk_menu_bar_append(MenuBar,PgtkWidget(MenuItem));
- end;
- Function AddItemToMenu (Menu : PGtkMenu;
- ShortCuts : PGtkAccelGroup;
- Caption : AnsiString;
- ShortCut : AnsiString;
- CallBack : TgtkSignalFunc;
- CallBackdata : Pointer
- ) : PGtkMenuItem;
- Var
- Key,Modifiers : guint;
- LocalAccelGroup : PGtkAccelGroup;
- TheLabel : PGtkLabel;
-
- begin
- Result:=pgtkmenuitem(gtk_menu_item_new_with_label(''));
- TheLabel:=GTK_LABEL(GTK_BIN(Result)^.child);
- Key:=gtk_label_parse_uline(TheLabel,Pchar(Caption));
- If Key<>0 then
- begin
- { $ifndef win32}
- LocalAccelGroup:=gtk_menu_ensure_uline_accel_group(Menu);
- { $endif}
- gtk_widget_add_accelerator(PGtkWidget(result),'activate_item',
- LocalAccelGroup,Key,
- 0,TGtkAccelFlags(0));
- end;
- gtk_menu_append(Menu,pgtkWidget(result));
- If (ShortCut<>'') and (ShortCuts<>Nil) then
- begin
- gtk_accelerator_parse (pchar(ShortCut), @key, @modifiers);
- gtk_widget_add_accelerator(PGtkWidget(result),'activate_item',
- ShortCuts,Key,
- modifiers, GTK_ACCEL_VISIBLE);
- end;
- If CallBack<>Nil then
- gtk_signal_connect(PGtkObject(result),'activate',
- CallBack,CallBackdata);
- gtk_widget_show(PgtkWidget(result));
- end;
- Function AddCheckItemToMenu (Menu : PGtkMenu;
- ShortCuts : PGtkAccelGroup;
- Caption : AnsiString;
- ShortCut : AnsiString;
- CallBack : TgtkSignalFunc;
- CallBackdata : Pointer
- ) : PGtkCheckMenuItem;
- Var
- Key,Modifiers : guint;
- LocalAccelGroup : PGtkAccelGroup;
- TheLabel : PGtkLabel;
-
- begin
- Result:=pgtkcheckmenuitem(gtk_check_menu_item_new_with_label(PChar(Caption)));
- gtk_check_menu_item_set_show_toggle(Result,True);
- gtk_menu_append(Menu,pgtkWidget(result));
- If (ShortCut<>'') and (ShortCuts<>Nil) then
- begin
- gtk_accelerator_parse (pchar(ShortCut), @key, @modifiers);
- gtk_widget_add_accelerator(PGtkWidget(result),'activate_item',
- ShortCuts,Key,
- modifiers, GTK_ACCEL_VISIBLE);
- end;
- If CallBack<>Nil then
- gtk_signal_connect(PGtkObject(result),'toggled',
- CallBack,CallBackdata);
- gtk_widget_show(PgtkWidget(result));
- end;
- Function AddImageItemToMenu (Menu : PGtkMenu;
- ShortCuts : PGtkAccelGroup;
- Caption : AnsiString;
- ShortCut : AnsiString;
- Bitmap : AnsiString;
- CallBack : TgtkSignalFunc;
- CallBackdata : Pointer
- ) : PGtkMenuItem;
- Var
- Key,Modifiers : guint;
- LocalAccelGroup : PGtkAccelGroup;
- TheLabel : PGtkLabel;
- Image : PGtkPixmap;
- hbox : PGtkHBox;
- pixmap : PGdkPixmap;
- BitMapdata : PGdkBitmap;
-
- begin
- Result:=pgtkmenuitem(gtk_menu_item_new);
- hbox:=PGtkHBox(gtk_hbox_new(false,0));
- gtk_container_add(pgtkcontainer(result),pgtkWidget(hbox));
- pixmap:=gdk_pixmap_create_from_xpm(Nil,@BitmapData,Nil,pchar(BitMap));
- Image := PgtkPixMap(gtk_pixmap_new(Pixmap,BitmapData));
- gtk_box_pack_start(PGtkBox(hbox),pgtkWidget(image),false,false,0);
- TheLabel:=PgtkLabel(gtk_label_new(''));
- gtk_box_pack_start(PGtkBox(hbox),pgtkWidget(TheLabel),True,True,0);
- Key:=gtk_label_parse_uline(TheLabel,Pchar(Caption));
- If Key<>0 then
- begin
- { $ifndef win32}
- LocalAccelGroup:=gtk_menu_ensure_uline_accel_group(Menu);
- { $endif}
- gtk_widget_add_accelerator(PGtkWidget(result),'activate_item',
- LocalAccelGroup,Key,
- 0,TGtkAccelFlags(0));
- end;
- gtk_menu_append(Menu,pgtkWidget(result));
- If (ShortCut<>'') and (ShortCuts<>Nil) then
- begin
- gtk_accelerator_parse (pchar(ShortCut), @key, @modifiers);
- gtk_widget_add_accelerator(PGtkWidget(result),'activate_item',
- ShortCuts,Key,
- modifiers, GTK_ACCEL_VISIBLE);
- end;
- If CallBack<>Nil then
- gtk_signal_connect(PGtkObject(result),'activate',
- CallBack,CallBackdata);
- gtk_widget_show_all(PgtkWidget(result));
- end;
- Function AddSeparatorToMenu(Menu : PgtkMenu) : PgtkMenuItem;
- begin
- Result:=pgtkmenuitem(gtk_menu_item_new());
- gtk_menu_append(Menu,pgtkWidget(result));
- gtk_widget_show(PgtkWidget(result));
- end;
- end.
|