GtkWidget * reader_window_new(GtkApplication *application, CainteoirSettings *settings, CainteoirSpeechSynthesizers *synthesizers, const gchar *filename) { ReaderWindow *reader = READER_WINDOW(g_object_new(READER_TYPE_WINDOW, "application", application, nullptr)); ReaderWindowPrivate *priv = READER_WINDOW_PRIVATE(reader); priv->self = GTK_WIDGET(reader); priv->settings = CAINTEOIR_SETTINGS(g_object_ref(G_OBJECT(settings))); priv->tts = CAINTEOIR_SPEECH_SYNTHESIZERS(g_object_ref(G_OBJECT(synthesizers))); priv->application = READER_APPLICATION(application); gtk_window_set_default_size(GTK_WINDOW(reader), INDEX_PANE_WIDTH + DOCUMENT_PANE_WIDTH + 5, 300); gtk_window_set_title(GTK_WINDOW(reader), i18n("Cainteoir Text-to-Speech")); GtkWidget *layout = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(reader), layout); priv->header = gtk_header_bar_new(); gtk_header_bar_set_title(GTK_HEADER_BAR(priv->header), i18n("Cainteoir Text-to-Speech")); if (cainteoir_settings_get_boolean(priv->settings, "window", "have-csd", TRUE)) { // Use client-side decorations (e.g. on Gnome Shell and Unity) ... gtk_header_bar_set_show_close_button(GTK_HEADER_BAR(priv->header), TRUE); gtk_window_set_titlebar(GTK_WINDOW(reader), priv->header); } else { // Don't use client-side decorations (e.g. on KDE) ... gtk_box_pack_start(GTK_BOX(layout), priv->header, FALSE, FALSE, 0); } priv->actions = create_action_group(priv); gtk_widget_insert_action_group(GTK_WIDGET(reader), "cainteoir", G_ACTION_GROUP(priv->actions)); priv->view = reader_document_view_new(priv->settings); gtk_box_pack_start(GTK_BOX(layout), priv->view, TRUE, TRUE, 0); reader_document_view_set_index_pane_close_action_name(READER_DOCUMENT_VIEW(priv->view), "cainteoir.side-pane"); GtkWidget *bottombar = gtk_toolbar_new(); gtk_widget_set_size_request(bottombar, -1, 45); gtk_style_context_add_class(gtk_widget_get_style_context(bottombar), "bottombar"); gtk_box_pack_start(GTK_BOX(layout), bottombar, FALSE, FALSE, 0); GtkToolItem *record = gtk_tool_button_new(gtk_image_new_from_icon_name("media-record-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR), nullptr); gtk_toolbar_insert(GTK_TOOLBAR(bottombar), record, -1); gtk_actionable_set_action_name(GTK_ACTIONABLE(record), "cainteoir.record"); priv->play_stop = gtk_tool_button_new(nullptr, nullptr); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(priv->play_stop), "media-playback-start-symbolic"); gtk_toolbar_insert(GTK_TOOLBAR(bottombar), priv->play_stop, -1); gtk_actionable_set_action_name(GTK_ACTIONABLE(priv->play_stop), "cainteoir.play-stop"); GtkToolItem *open = gtk_tool_button_new(gtk_image_new_from_icon_name("document-open-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR), nullptr); gtk_toolbar_insert(GTK_TOOLBAR(bottombar), open, -1); gtk_actionable_set_action_name(GTK_ACTIONABLE(open), "cainteoir.open"); GtkToolItem *timebar = gtk_tool_item_new(); gtk_tool_item_set_expand(GTK_TOOL_ITEM(timebar), TRUE); gtk_toolbar_insert(GTK_TOOLBAR(bottombar), timebar, -1); priv->timebar = cainteoir_timebar_new(); gtk_style_context_add_class(gtk_widget_get_style_context(priv->timebar), "timebar"); gtk_container_add(GTK_CONTAINER(timebar), priv->timebar); priv->previous = gtk_button_new(); gtk_button_set_image(GTK_BUTTON(priv->previous), gtk_image_new_from_icon_name("go-previous-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR)); gtk_header_bar_pack_start(GTK_HEADER_BAR(priv->header), priv->previous); gtk_actionable_set_action_name(GTK_ACTIONABLE(priv->previous), "cainteoir.view-previous"); GtkWidget *menu_button = gtk_menu_button_new(); gtk_button_set_image(GTK_BUTTON(menu_button), gtk_image_new_from_icon_name(HAMBURGER_MENU_ICON, GTK_ICON_SIZE_SMALL_TOOLBAR)); gtk_menu_button_set_menu_model(GTK_MENU_BUTTON(menu_button), create_main_menu()); gtk_header_bar_pack_end(GTK_HEADER_BAR(priv->header), menu_button); g_signal_connect(reader, "window-state-event", G_CALLBACK(on_window_state_changed), priv->settings); g_signal_connect(reader, "delete_event", G_CALLBACK(on_window_delete), priv); g_signal_connect(reader, "show", G_CALLBACK(on_window_show), priv); g_signal_connect(priv->tts, "speaking", G_CALLBACK(on_speaking), priv); g_signal_connect(priv->tts, "text-range-changed", G_CALLBACK(on_text_range_changed), priv); gtk_window_resize(GTK_WINDOW(reader), cainteoir_settings_get_integer(priv->settings, "window", "width", 700), cainteoir_settings_get_integer(priv->settings, "window", "height", 445)); gtk_window_move(GTK_WINDOW(reader), cainteoir_settings_get_integer(priv->settings, "window", "left", 0), cainteoir_settings_get_integer(priv->settings, "window", "top", 0)); if (cainteoir_settings_get_boolean(priv->settings, "window", "maximized", FALSE)) gtk_window_maximize(GTK_WINDOW(reader)); if (filename) reader_window_load_document(reader, filename); else { gchar *prev_filename = cainteoir_settings_get_string(priv->settings, "document", "filename", nullptr); if (prev_filename) { reader_window_load_document(reader, prev_filename); g_free(prev_filename); } } gchar *anchor = cainteoir_settings_get_string(priv->settings, "highlight", "anchor", "none"); if (anchor) { if (!strcmp(anchor, "top")) reader_window_set_highlight_anchor(reader, GTK_ALIGN_START); else if (!strcmp(anchor, "middle")) reader_window_set_highlight_anchor(reader, GTK_ALIGN_CENTER); else if (!strcmp(anchor, "bottom")) reader_window_set_highlight_anchor(reader, GTK_ALIGN_END); g_free(anchor); } return GTK_WIDGET(reader); }
static action_list * complete_action_list( void ) { action_list *ac_list = init_action_list(); // expect_value( mock_is_valid_port_no, port_no, PORT_NO ); action *ac_output = create_action_output( PORT_NO, MAX_LEN ); append_action( ac_list, ac_output ); const uint32_t group_id = GROUP_ID; action *ac_group = create_action_group( group_id ); append_action( ac_list, ac_group ); const uint32_t queue_id = QUEUE_ID; action *ac_set_queue = create_action_set_queue( queue_id ); append_action( ac_list, ac_set_queue ); const uint8_t mpls_ttl = MPLS_TTL; action *ac_set_mpls_ttl = create_action_set_mpls_ttl( mpls_ttl ); append_action( ac_list, ac_set_mpls_ttl ); action *ac_dec_mpls_ttl = create_action_dec_mpls_ttl(); append_action( ac_list, ac_dec_mpls_ttl ); const uint8_t nw_ttl = NW_TTL; action *ac_set_ipv4_ttl = create_action_set_ipv4_ttl( nw_ttl ); append_action( ac_list, ac_set_ipv4_ttl ); action *ac_dec_ipv4_ttl = create_action_dec_ipv4_ttl(); append_action( ac_list, ac_dec_ipv4_ttl ); action *ac_copy_ttl_out = create_action_copy_ttl_out(); append_action( ac_list, ac_copy_ttl_out ); action *ac_copy_ttl_in = create_action_copy_ttl_in(); append_action( ac_list, ac_copy_ttl_in ); const uint16_t ether_type = VLAN_ETHERTYPE; action *ac_action_push_vlan = create_action_push_vlan( ether_type ); append_action( ac_list, ac_action_push_vlan ); const uint16_t mpls_type = MPLS_ETHERTYPE; action *ac_action_push_mpls = create_action_push_mpls( mpls_type ); append_action( ac_list, ac_action_push_mpls ); const uint16_t pbb_type = PBB_ETHERTYPE; action *ac_action_push_pbb = create_action_push_pbb( pbb_type ); append_action( ac_list, ac_action_push_pbb ); action *ac_action_pop_vlan = create_action_pop_vlan(); append_action( ac_list, ac_action_pop_vlan ); action *ac_action_pop_mpls = create_action_pop_mpls( mpls_type ); append_action( ac_list, ac_action_pop_mpls ); action *ac_action_pop_pbb = create_action_pop_pbb(); append_action( ac_list, ac_action_pop_pbb ); match *match = init_match(); action *ac_action_set_field = create_action_set_field( match ); append_action( ac_list, ac_action_set_field ); return ac_list; }
void create_main_window () { window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkUIManager *ui_manager = gtk_ui_manager_new (); GtkActionGroup *action_group = create_action_group (); GError *error = NULL; gchar *ui_path = rookie_misc_get_ui_path ("AppUI.ui"); gtk_ui_manager_insert_action_group (ui_manager, action_group, 0); gtk_ui_manager_add_ui_from_file (ui_manager, ui_path, &error); handle_critical_error (error); g_free (ui_path); eggicon = gtk_status_icon_new_from_icon_name ("rookie"); init_actions (action_group); menubar = gtk_ui_manager_get_widget (ui_manager, "/menubar"); toolbar = gtk_ui_manager_get_widget (ui_manager, "/toolbar"); statbar = create_statusbar (); mainbox = gtk_vbox_new (FALSE, 0); mainpopup = gtk_ui_manager_get_widget (ui_manager, "/m_popup"); viewpopup = gtk_ui_manager_get_widget (ui_manager, "/v_popup"); statpopup = gtk_ui_manager_get_widget (ui_manager, "/s_popup"); gtk_toolbar_set_icon_size (GTK_TOOLBAR(toolbar), GTK_ICON_SIZE_LARGE_TOOLBAR); gtk_toolbar_set_style (GTK_TOOLBAR(toolbar), GTK_TOOLBAR_BOTH); sw1 = gtk_scrolled_window_new (NULL, NULL); sw2 = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(sw1), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(sw2), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); sidepane = create_sidepane (); gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW(sw1), sidepane); view = g_download_list_controller_get_view (); gtk_container_add (GTK_CONTAINER (sw2), view); bottompane = create_bottom_pane (); vpaned = gtk_vpaned_new (); gtk_paned_add1 (GTK_PANED(vpaned), sw2); gtk_paned_add2 (GTK_PANED(vpaned), bottompane); hpaned = gtk_hpaned_new (); gtk_paned_add1 (GTK_PANED(hpaned), sw1); gtk_paned_add2 (GTK_PANED(hpaned), vpaned); gtk_paned_set_position (GTK_PANED(hpaned), rookie_settings_get_sidepane_width ()); gtk_paned_set_position (GTK_PANED(vpaned), rookie_settings_get_bottompane_width ()); gtk_window_add_accel_group (GTK_WINDOW(window), gtk_ui_manager_get_accel_group(ui_manager)); gtk_window_set_title (GTK_WINDOW(window), _("Rookie Download Manager")); gtk_window_set_icon_name (GTK_WINDOW(window), "rookie"); gtk_box_pack_start (GTK_BOX(mainbox), menubar, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(mainbox), toolbar, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(mainbox), hpaned, TRUE, TRUE, 0); gtk_box_pack_end (GTK_BOX(mainbox), statbar, FALSE, FALSE, 0); relayout_mainbox (); gtk_container_add (GTK_CONTAINER(window), mainbox); gtk_window_set_geometry_hints (GTK_WINDOW (window), window, NULL, GDK_HINT_USER_SIZE | GDK_HINT_USER_POS | GDK_HINT_POS); gtk_window_resize (GTK_WINDOW(window), rookie_settings_get_window_width (), rookie_settings_get_window_height()); rookie_settings_bind (ROOKIE_TOOLBAR_VISIBLE, toolbar, "visible"); rookie_settings_bind (ROOKIE_STATUSBAR_VISIBLE, statbar, "visible"); /* Signals */ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(view)); g_download_list_foreach ((GFunc)g_downloadable_connect_signals, NULL); g_signal_connect (eggicon, "activate", G_CALLBACK(on_egg_icon_activate), NULL); g_signal_connect (eggicon, "popup-menu", G_CALLBACK(on_egg_icon_popup_menu), NULL); g_signal_connect (window, "delete-event", G_CALLBACK(on_window_delete), NULL); g_signal_connect (g_download_list_get (), "download-added", G_CALLBACK (on_download_added), NULL); g_signal_connect (g_download_list_get (), "download-removed", G_CALLBACK (on_download_removed), NULL); g_signal_connect (view, "button-press-event", G_CALLBACK(on_view_button_press), selection); g_signal_connect (selection, "changed", G_CALLBACK(on_selection_change), NULL); }