给菜单加热键的函数:gtk_widget_add_accelerator()
/*
* Build menubar
*/
static GtkWidget *
build_menubar(GtkWidget *window, AppUIData * app_ui_data)
{
GtkWidget* menubar;
GtkWidget* filemenu;
GtkWidget* editmenu;
GtkWidget* helpmenu;
GtkWidget* rootmenu;
GtkWidget* menuitem;
GtkAccelGroup* accel_group;
accel_group = gtk_accel_group_new();
gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);
menubar = gtk_menu_bar_new();
//文件
rootmenu = gtk_menu_item_new_with_mnemonic("_File");
filemenu = gtk_menu_new();
//open
menuitem = gtk_image_menu_item_new_from_stock(GTK_STOCK_OPEN, accel_group);
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), menuitem);
g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(on_document_open), app_ui_data);
//save
menuitem = gtk_image_menu_item_new_from_stock(GTK_STOCK_SAVE, accel_group);
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), menuitem);
g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(on_document_save), app_ui_data);
//separator
menuitem = gtk_separator_menu_item_new();
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), menuitem);
//recent open
const gchar *exts[] = { PDFV_FILE_EXTENSION_DOT, NULL };
menuitem =
comapp_recent_new("osso_pdf_viewer", "application/pdf", exts,
TRUE);
app_ui_data->recent_menu = menuitem;
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), menuitem);
g_signal_connect(G_OBJECT(menuitem), "recent_selected",
G_CALLBACK(on_recent_item_cb), app_ui_data);
//separator
menuitem = gtk_separator_menu_item_new();
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), menuitem);
//exit
menuitem = gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, accel_group);
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), menuitem);
g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(on_close), app_ui_data);
//
gtk_menu_item_set_submenu(GTK_MENU_ITEM(rootmenu), filemenu);
gtk_menu_shell_append(GTK_MENU_SHELL(menubar), rootmenu);
//view
rootmenu = gtk_menu_item_new_with_mnemonic("_view");
filemenu = gtk_menu_new();
//zoom in
menuitem = gtk_image_menu_item_new_from_stock(GTK_STOCK_ZOOM_IN, accel_group);
gtk_widget_add_accelerator(menuitem, "activate", accel_group, GDK_i, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), menuitem);
g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(on_screen_zoom_in), app_ui_data);
//zoom out
menuitem = gtk_image_menu_item_new_from_stock(GTK_STOCK_ZOOM_OUT, accel_group);
gtk_widget_add_accelerator(menuitem, "activate", accel_group, GDK_o, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), menuitem);
g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(on_screen_zoom_out), app_ui_data);
//separator
menuitem = gtk_separator_menu_item_new();
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), menuitem);
//zoom page
// menuitem = gtk_image_menu_item_new_with_label("Zoom Page");
menuitem = gtk_image_menu_item_new_from_stock(GTK_STOCK_ZOOM_FIT, accel_group);
gtk_widget_add_accelerator(menuitem, "activate", accel_group, GDK_f, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), menuitem);
g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(on_screen_zoom_page), app_ui_data);
//zoom width
menuitem = gtk_image_menu_item_new_with_label("Fit Width");
gtk_widget_add_accelerator(menuitem, "activate", accel_group, GDK_w, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), menuitem);
g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(on_screen_zoom_width), app_ui_data);
//separator
menuitem = gtk_separator_menu_item_new();
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), menuitem);
//fullscreen
menuitem = gtk_image_menu_item_new_from_stock(GTK_STOCK_FULLSCREEN, accel_group);
gtk_widget_add_accelerator(menuitem, "activate", accel_group, GDK_F11, 0, GTK_ACCEL_VISIBLE);
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), menuitem);
g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(on_screen_full_screen), app_ui_data);
//
gtk_menu_item_set_submenu(GTK_MENU_ITEM(rootmenu), filemenu);
gtk_menu_shell_append(GTK_MENU_SHELL(menubar), rootmenu);
//GO
rootmenu = gtk_menu_item_new_with_mnemonic("_Go");
filemenu = gtk_menu_new();
//previous
menuitem = gtk_image_menu_item_new_from_stock(GTK_STOCK_GO_BACK, accel_group);
gtk_widget_add_accelerator(menuitem, "activate", accel_group, GDK_Left, 0, GTK_ACCEL_VISIBLE);
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), menuitem);
g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(on_page_previous), app_ui_data);
//next
menuitem = gtk_image_menu_item_new_from_stock(GTK_STOCK_GO_FORWARD, accel_group);
gtk_widget_add_accelerator(menuitem, "activate", accel_group, GDK_Right, 0, GTK_ACCEL_VISIBLE);
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), menuitem);
g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(on_page_next), app_ui_data);
//separator
menuitem = gtk_separator_menu_item_new();
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), menuitem);
//first page
menuitem = gtk_image_menu_item_new_from_stock(GTK_STOCK_GOTO_FIRST, accel_group);
gtk_widget_add_accelerator(menuitem, "activate", accel_group, GDK_Home, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), menuitem);
g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(on_page_first), app_ui_data);
//last
menuitem = gtk_image_menu_item_new_from_stock(GTK_STOCK_GOTO_LAST, accel_group);
gtk_widget_add_accelerator(menuitem, "activate", accel_group, GDK_End, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), menuitem);
g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(on_page_last), app_ui_data);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(rootmenu), filemenu);
gtk_menu_shell_append(GTK_MENU_SHELL(menubar), rootmenu);
//help
rootmenu = gtk_menu_item_new_with_mnemonic("_Help");
filemenu = gtk_menu_new();
menuitem = gtk_image_menu_item_new_from_stock(GTK_STOCK_HELP, accel_group);
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), menuitem);
g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(on_tools_help), app_ui_data);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(rootmenu), filemenu);
gtk_menu_shell_append(GTK_MENU_SHELL(menubar), rootmenu);
return menubar;
}
/**
Builds main toolbar.
Uses ui manager created toolbar as a basis and adds
any custom widgets to it.
AppUIData ui_manager needs to be initialized.
@param ui_manager UI manager
@param actions Initialized action group
@return initialized toolbar if successfull; NULL otherwise
*/
static GtkToolbar *
build_toolbar(GtkActionGroup * actions, AppUIData * app_ui_data)
{
GtkToolbar *toolbar = NULL;
GtkToolItem *tool_item;
GtkWidget *label, *image, *box;
GtkWidget *button;
GtkAction *action;
gint i, nitems;
/* Get toolbar widget from ui manager */
// toolbar =
// GTK_TOOLBAR(gtk_ui_manager_get_widget
// (app_ui_data->ui_manager, "/ToolBar"));
toolbar = gtk_toolbar_new();
image = gtk_image_new_from_stock(GTK_STOCK_OPEN, GTK_ICON_SIZE_SMALL_TOOLBAR );
gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), NULL, "Open a pdf file", NULL, image, (GtkSignalFunc)on_document_open, app_ui_data);
gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
image = gtk_image_new_from_stock(GTK_STOCK_GOTO_FIRST, GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), NULL, "Go to first page", NULL, image, (GtkSignalFunc)on_page_first, app_ui_data);
image = gtk_image_new_from_stock(GTK_STOCK_GO_BACK, GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), NULL, "Open a pdf file", NULL, image, (GtkSignalFunc)on_page_previous, app_ui_data);
/* Create "current page" widget */
GtkWidget *entry = gtk_entry_new_with_max_length(6);
gtk_entry_set_text(entry, "0");
gtk_entry_set_alignment(GTK_ENTRY(entry), 1.0f);
gtk_entry_set_width_chars(GTK_ENTRY(entry),6);
gtk_toolbar_append_widget(GTK_TOOLBAR(toolbar), entry, NULL, NULL);
g_signal_connect(G_OBJECT(entry), "activate", G_CALLBACK(on_page_switch_to), app_ui_data);
app_ui_data->current_page = entry;
/* Create "total pages" widget */
tool_item = gtk_tool_item_new();
label = gtk_label_new(NULL);
gtk_container_add(GTK_CONTAINER(tool_item), label);
gtk_toolbar_append_widget(GTK_TOOLBAR(toolbar), tool_item, NULL, NULL);
app_ui_data->total_pages = label;
gtk_label_set_width_chars(GTK_LABEL(label), 6);
/* Set initial page numbers */
ui_set_current_page(app_ui_data, PDF_PAGE_INIT);
ui_set_total_pages(app_ui_data, PDF_PAGE_INIT);
image = gtk_image_new_from_stock(GTK_STOCK_GO_FORWARD, GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), NULL, "Go to next page", NULL, image, (GtkSignalFunc)on_page_next, app_ui_data);
image = gtk_image_new_from_stock(GTK_STOCK_GOTO_LAST, GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), NULL, "Go to last page", NULL, image, (GtkSignalFunc)on_page_last, app_ui_data);
gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
image = gtk_image_new_from_stock(GTK_STOCK_ZOOM_OUT, GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), NULL, "Zoom in", NULL, image, (GtkSignalFunc)on_screen_zoom_out, app_ui_data);
/* create Current Zoom widget */
tool_item = gtk_tool_item_new();
gtk_tool_item_set_homogeneous(tool_item, FALSE);
gtk_tool_item_set_expand(tool_item, FALSE);
box = gtk_hbox_new(FALSE, 0);
label = gtk_label_new(NULL);
/* width of the widget */
gtk_box_pack_end(GTK_BOX(box), label, TRUE, FALSE, 0);
gtk_label_set_single_line_mode(GTK_LABEL(label), TRUE);
gtk_widget_set_size_request(GTK_WIDGET(box), 60, -1);
gtk_container_add(GTK_CONTAINER(tool_item), box);
gtk_toolbar_append_widget(GTK_TOOLBAR(toolbar), tool_item, NULL, NULL);
app_ui_data->current_zoom_value = label;
app_ui_data->current_zoom_item = GTK_WIDGET(tool_item);
image = gtk_image_new_from_stock(GTK_STOCK_ZOOM_IN, GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), NULL, "Zoom out", NULL, image, (GtkSignalFunc)on_screen_zoom_in, app_ui_data);
image = gtk_image_new_from_stock(GTK_STOCK_ZOOM_FIT, GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), NULL, "Zoom page", NULL, image, (GtkSignalFunc)on_screen_zoom_page, app_ui_data);
image = gtk_image_new_from_file("/usr/share/pdf-viewer/pixmaps/stock_zoom-page-width.png");
gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), NULL, "Zoom width", NULL, image, (GtkSignalFunc)on_screen_zoom_width, app_ui_data);
gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
image = gtk_image_new_from_stock(GTK_STOCK_FULLSCREEN, GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), NULL, "Fullscreen", NULL, image, (GtkSignalFunc)on_screen_full_screen, app_ui_data);
return toolbar;
}
menu toolbar
最新推荐文章于 2020-12-01 16:21:15 发布