mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-05-02 08:53:42 +02:00
209 lines
7.4 KiB
ObjectPascal
209 lines
7.4 KiB
ObjectPascal
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. |