void create_gtkprint_session(GtkTextView *text_view, const gchar *title) { GtkPrintOperation *op; GtkPrintOperationResult res; GError *err = NULL; page_title = title; op = create_print_operation(text_view); res = gtk_print_operation_run(op, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(text_view))), &err); switch (res) { case GTK_PRINT_OPERATION_RESULT_ERROR: create_error_dialog(text_view, err->message); g_error_free(err); case GTK_PRINT_OPERATION_RESULT_APPLY: if (settings) g_object_unref(settings); settings = g_object_ref(gtk_print_operation_get_print_settings(op)); default: break; } g_object_unref(op); }
void create_gtkprint_preview_session(GtkTextView *text_view, const gchar *title) { GtkPrintOperation *op; GtkPrintOperationResult res; GError *err = NULL; page_title = title; op = create_print_operation(text_view); res = gtk_print_operation_run(op, GTK_PRINT_OPERATION_ACTION_PREVIEW, GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(text_view))), &err); if (res == GTK_PRINT_OPERATION_RESULT_ERROR) { create_error_dialog(text_view, err->message); g_error_free(err); } g_object_unref(op); }
/* * CTK VCS (Visual Computing System) widget creation * */ GtkWidget* ctk_vcs_new(NvCtrlAttributeHandle *handle, CtkConfig *ctk_config) { GObject *object; CtkVcs *ctk_object; GtkWidget *label; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *event; GtkWidget *banner; GtkWidget *hseparator; GtkWidget *table; GtkWidget *scrollWin; GtkWidget *checkbutton; gchar *product_name; gchar *serial_number; gchar *build_date; gchar *product_id; gchar *firmware_version; gchar *hardware_version; gint current_row; gboolean high_perf_mode; ReturnStatus ret; gchar *s; char *psu_str = NULL; PSUEntry psuEntry; GtkWidget *vbox_scroll, *hbox_scroll; /* * get the static string data that we will display below */ /* Product Name */ ret = NvCtrlGetStringAttribute(handle, NV_CTRL_STRING_VCSC_PRODUCT_NAME, &product_name); if (ret != NvCtrlSuccess) { product_name = g_strdup("Unable to determine"); } /* Serial Number */ ret = NvCtrlGetStringAttribute(handle, NV_CTRL_STRING_VCSC_SERIAL_NUMBER, &serial_number); if (ret != NvCtrlSuccess) { serial_number = g_strdup("Unable to determine"); } /* Build Date */ ret = NvCtrlGetStringAttribute(handle, NV_CTRL_STRING_VCSC_BUILD_DATE, &build_date); if (ret != NvCtrlSuccess) { build_date = g_strdup("Unable to determine"); } /* Product ID */ ret = NvCtrlGetStringAttribute(handle, NV_CTRL_STRING_VCSC_PRODUCT_ID, &product_id); if (ret != NvCtrlSuccess) { product_id = g_strdup("Unable to determine"); } /* Firmware Version */ ret = NvCtrlGetStringAttribute(handle, NV_CTRL_STRING_VCSC_FIRMWARE_VERSION, &firmware_version); if (ret != NvCtrlSuccess) { firmware_version = g_strdup("Unable to determine"); } /* Hardware Version */ ret = NvCtrlGetStringAttribute(handle, NV_CTRL_STRING_VCSC_HARDWARE_VERSION, &hardware_version); if (ret != NvCtrlSuccess) { hardware_version = g_strdup("Unable to determine"); } /* now, create the object */ object = g_object_new(CTK_TYPE_VCS, NULL); ctk_object = CTK_VCS(object); /* cache the attribute handle */ ctk_object->handle = handle; ctk_object->ctk_config = ctk_config; /* set container properties of the object */ gtk_box_set_spacing(GTK_BOX(ctk_object), 10); /* banner */ banner = ctk_banner_image_new(BANNER_ARTWORK_VCS); gtk_box_pack_start(GTK_BOX(ctk_object), banner, FALSE, FALSE, 0); /* * This displays basic System information, including * display name, Operating system type and the NVIDIA driver version. */ vbox = gtk_vbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(ctk_object), vbox, TRUE, TRUE, 0); /* General purpose error dialog */ ctk_object->error_dialog = create_error_dialog(ctk_object); if (NvCtrlGetAttribute(ctk_object->handle, NV_CTRL_VCSC_HIGH_PERF_MODE, &high_perf_mode) == NvCtrlSuccess) { hbox = gtk_hbox_new(FALSE, 0); checkbutton = gtk_check_button_new_with_label("Enable High Performance Mode"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton), high_perf_mode); g_signal_connect(G_OBJECT(checkbutton), "toggled", G_CALLBACK(vcs_perf_checkbox_toggled), (gpointer) ctk_object); gtk_box_pack_start(GTK_BOX(hbox), checkbutton, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); } /* Create the Scrolling Window */ scrollWin = gtk_scrolled_window_new(NULL, NULL); hbox_scroll = gtk_hbox_new(FALSE, 0); vbox_scroll = gtk_vbox_new(FALSE, 5); event = gtk_event_box_new(); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollWin), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); gtk_widget_modify_fg(event, GTK_STATE_NORMAL, &(event->style->text[GTK_STATE_NORMAL])); gtk_widget_modify_bg(event, GTK_STATE_NORMAL, &(event->style->base[GTK_STATE_NORMAL])); gtk_container_add(GTK_CONTAINER(event), hbox_scroll); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrollWin), event); gtk_box_pack_start(GTK_BOX(hbox_scroll), vbox_scroll, TRUE, TRUE, 5); gtk_widget_set_size_request(scrollWin, -1, 50); gtk_box_pack_start(GTK_BOX(vbox), scrollWin, TRUE, TRUE, 0); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_scroll), hbox, FALSE, FALSE, 0); label = gtk_label_new("VCS Information"); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); hseparator = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(hbox), hseparator, TRUE, TRUE, 5); table = gtk_table_new(5, 2, FALSE); gtk_box_pack_start(GTK_BOX(vbox_scroll), table, FALSE, FALSE, 0); gtk_table_set_row_spacings(GTK_TABLE(table), 3); gtk_table_set_col_spacings(GTK_TABLE(table), 15); gtk_container_set_border_width(GTK_CONTAINER(table), 5); add_table_row(table, 0, 0, 0.5, "Product Name:", 0, 0.5, product_name); add_table_row(table, 1, 0, 0.5, "Serial Number:", 0, 0.5, serial_number); add_table_row(table, 2, 0, 0.5, "Build Date:", 0, 0.5, build_date); add_table_row(table, 3, 0, 0.5, "Product ID:", 0, 0.5, product_id); add_table_row(table, 4, 0, 0.5, "Firmware version:", 0, 0.5, firmware_version); add_table_row(table, 5, 0, 0.5, "Hardware version:", 0, 0.5, hardware_version); g_free(product_name); g_free(serial_number); g_free(build_date); g_free(product_id); g_free(firmware_version); g_free(hardware_version); /* Query Canoas 2.0 specific details */ if ((NvCtrlGetAttribute(ctk_object->handle, NV_CTRL_VCSC_HIGH_PERF_MODE, &high_perf_mode) == NvCtrlSuccess) && (NvCtrlGetStringAttribute(ctk_object->handle, NV_CTRL_STRING_VCSC_PSU_INFO, &psu_str) == NvCtrlSuccess)) { GtkWidget *vbox_padding; /* Show the additonal queried information */ /* Populate scrolling window with data */ vbox_padding = gtk_vbox_new(FALSE, 0); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_scroll), vbox_padding, FALSE, FALSE, 1); gtk_box_pack_start(GTK_BOX(vbox_scroll), hbox, FALSE, FALSE, 0); label = gtk_label_new("VCS Thermal Information"); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); hseparator = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(hbox), hseparator, TRUE, TRUE, 5); table = gtk_table_new(3, 2, FALSE); gtk_box_pack_start(GTK_BOX(vbox_scroll), table, FALSE, FALSE, 0); gtk_table_set_row_spacings(GTK_TABLE(table), 3); gtk_table_set_col_spacings(GTK_TABLE(table), 15); gtk_container_set_border_width(GTK_CONTAINER(table), 5); label = gtk_label_new("Intake Temperature:"); gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0); label = gtk_label_new(NULL); gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f); gtk_table_attach(GTK_TABLE(table), label, 1, 2, 0, 1, GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0); ctk_object->intake_temp = label; label = gtk_label_new("Exhaust Temperature:"); /* This is the current largest label. Get its size */ gtk_widget_size_request(label, &ctk_object->req); gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2, GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0); label = gtk_label_new(NULL); gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f); gtk_table_attach(GTK_TABLE(table), label, 1, 2, 1, 2, GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0); ctk_object->exhaust_temp = label; label = gtk_label_new("Board Temperature:"); gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3, GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0); label = gtk_label_new(NULL); gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f); gtk_table_attach(GTK_TABLE(table), label, 1, 2, 2, 3, GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0); ctk_object->board_temp = label; /* Populate table for PSU information */ psuEntry.psu_current = -1; psuEntry.psu_power = -1; psuEntry.psu_voltage = -1; psuEntry.psu_state = -1; if (psu_str) { parse_token_value_pairs(psu_str, apply_psu_entry_token, &psuEntry); } vbox_padding = gtk_vbox_new(FALSE, 0); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_scroll), vbox_padding, FALSE, FALSE, 1); gtk_box_pack_start(GTK_BOX(vbox_scroll), hbox, FALSE, FALSE, 0); label = gtk_label_new("VCS Power Supply Unit Information"); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); hseparator = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(hbox), hseparator, TRUE, TRUE, 5); table = gtk_table_new(4, 2, FALSE); gtk_box_pack_start(GTK_BOX(vbox_scroll), table, FALSE, FALSE, 0); gtk_table_set_row_spacings(GTK_TABLE(table), 3); gtk_table_set_col_spacings(GTK_TABLE(table), 15); gtk_container_set_border_width(GTK_CONTAINER(table), 5); label = gtk_label_new("PSU State:"); gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f); gtk_widget_set_size_request(label, ctk_object->req.width, -1); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0); label = gtk_label_new(NULL); gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f); gtk_table_attach(GTK_TABLE(table), label, 1, 2, 0, 1, GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0); ctk_object->psu_state = label; label = gtk_label_new("PSU Current:"); gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f); gtk_widget_set_size_request(label, ctk_object->req.width, -1); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2, GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0); label = gtk_label_new(NULL); gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f); gtk_table_attach(GTK_TABLE(table), label, 1, 2, 1, 2, GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0); ctk_object->psu_current = label; current_row = 2; if (psuEntry.psu_power != -1) { label = gtk_label_new("PSU Power:"); gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f); gtk_widget_set_size_request(label, ctk_object->req.width, -1); gtk_table_attach(GTK_TABLE(table), label, 0, 1, current_row, current_row + 1, GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0); label = gtk_label_new(NULL); gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f); gtk_table_attach(GTK_TABLE(table), label, 1, 2, current_row, current_row + 1, GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0); ctk_object->psu_power = label; current_row++; } if (psuEntry.psu_voltage != -1) { label = gtk_label_new("PSU Voltage:"); gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f); gtk_widget_set_size_request(label, ctk_object->req.width, -1); gtk_table_attach(GTK_TABLE(table), label, 0, 1, current_row, current_row + 1, GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0); label = gtk_label_new(NULL); gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f); gtk_table_attach(GTK_TABLE(table), label, 1, 2, current_row, current_row + 1, GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0); ctk_object->psu_voltage = label; } /* Create container for fan status table */ vbox_padding = gtk_vbox_new(FALSE, 0); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_scroll), vbox_padding, FALSE, FALSE, 1); gtk_box_pack_start(GTK_BOX(vbox_scroll), hbox, FALSE, FALSE, 0); label = gtk_label_new("VCS Fan Status"); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); hseparator = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(hbox), hseparator, TRUE, TRUE, 5); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_scroll), hbox, FALSE, FALSE, 0); ctk_object->fan_status_container = hbox; /* Register a timer callback to update the dynamic information */ s = g_strdup_printf("VCS Monitor (VCS %d)", NvCtrlGetTargetId(ctk_object->handle)); ctk_config_add_timer(ctk_object->ctk_config, DEFAULT_UPDATE_VCS_INFO_TIME_INTERVAL, s, (GSourceFunc) update_vcs_info, (gpointer) ctk_object); g_free(s); update_vcs_info(ctk_object); } gtk_widget_show_all(GTK_WIDGET(object)); return GTK_WIDGET(object); }