menu toolbar

 給菜單加熱鍵的函數: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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章