📄 gsegyfileinfo.c
字号:
if (private->trace_header_labels) { g_ptr_array_free (private->trace_header_labels, TRUE); private->trace_header_labels = NULL; } g_segy_format_wizard_get_labels_for_trace_header (format_wizard, decoded_trace_header, &private->trace_header_chunk, &private->trace_header_labels); if (private->trace_header_chunk) { g_segy_trace_info_set_fields_values (private->trace_info, private->trace_header_labels);#ifdef DEBUG } else { g_printf ("Trace header values extraction failed in the file info.\n");#endif }}static void g_segy_file_info_trace_number_change_handler (GtkWidget *widget, gpointer data) { GSEGYFileInfoPrivate *private = G_SEGY_FILE_INFO_GET_PRIVATE (G_SEGY_FILE_INFO (data)); private->trace_index = gtk_spin_button_get_value (GTK_SPIN_BUTTON (private->trace_spin)) - 1; g_segy_file_info_fill_trace_header_values (G_SEGY_FILE_INFO (data));}GtkWidget* g_segy_file_info_get_main_widget (GSEGYFileInfo *self) { GSEGYFileInfoPrivate *private = G_SEGY_FILE_INFO_GET_PRIVATE (self); gchar gbuffer[120]; if (NULL == private->window) { private->window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (private->window), 7); gtk_window_set_modal (GTK_WINDOW (private->window), FALSE); gtk_window_set_resizable (GTK_WINDOW (private->window), FALSE); gtk_window_set_title (GTK_WINDOW (private->window), _("File info")); gtk_widget_set_size_request (GTK_WIDGET (private->window), 500, 600); gtk_signal_connect (GTK_OBJECT (private->window), "delete_event", GTK_SIGNAL_FUNC (g_segy_file_info_window_close_handler), (gpointer)G_OBJECT (self)); private->vbox = gtk_vbox_new (FALSE, 3); gtk_container_add (GTK_CONTAINER (private->window), private->vbox); private->notebook = gtk_notebook_new (); g_object_set (G_OBJECT (private->notebook), "tab-hborder", 5, "tab-vborder", 3, NULL); gtk_box_pack_start (GTK_BOX (private->vbox), private->notebook, TRUE, TRUE, 5); if (g_segy_format_wizard_get_ebcdic_header_size (g_segy_file_accessor_get_format_wizard (private->file_accessor))) { private->text_vbox = gtk_vbox_new (FALSE, 3); gtk_container_set_border_width (GTK_CONTAINER (private->text_vbox), 5); gtk_notebook_append_page (GTK_NOTEBOOK (private->notebook), private->text_vbox, gtk_label_new (_("Text header"))); private->text_frame = gtk_frame_new (NULL); gtk_box_pack_start (GTK_BOX (private->text_vbox), private->text_frame, TRUE, TRUE, 3); private->text_scrolled = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (private->text_scrolled), GTK_SHADOW_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (private->text_scrolled), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER (private->text_frame), private->text_scrolled); private->text_view = gtk_text_view_new (); gtk_text_view_set_editable (GTK_TEXT_VIEW (private->text_view), FALSE); gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (private->text_view), FALSE); GtkTextBuffer *text_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (private->text_view)); GtkTextIter iter; gtk_text_buffer_get_iter_at_offset (text_buffer, &iter, 0); gtk_text_buffer_insert (text_buffer, &iter, g_segy_file_accessor_get_ebcdic_header (private->file_accessor), -1); gint buffer_length = gtk_text_buffer_get_char_count (text_buffer); gint line_length = 80, i = 0, n = buffer_length / line_length; while (i < n) { gtk_text_buffer_get_iter_at_offset (text_buffer, &iter, (i + 1) * line_length + i); gtk_text_buffer_insert (text_buffer, &iter, "\n", 1); i++; } gtk_text_view_set_left_margin (GTK_TEXT_VIEW (private->text_view), 3); gtk_text_view_set_right_margin (GTK_TEXT_VIEW (private->text_view), 3); gtk_container_add (GTK_CONTAINER (private->text_scrolled), private->text_view); } if (g_segy_format_wizard_get_binary_header_size (g_segy_file_accessor_get_format_wizard (private->file_accessor))) { private->binary_vbox = gtk_vbox_new (FALSE, 3); gtk_container_set_border_width (GTK_CONTAINER (private->binary_vbox), 5); gtk_notebook_append_page (GTK_NOTEBOOK (private->notebook), private->binary_vbox, gtk_label_new (_("Binary header"))); private->binary_frame = gtk_frame_new (NULL); gtk_box_pack_start (GTK_BOX (private->binary_vbox), private->binary_frame, TRUE, TRUE, 3); private->binary_scrolled = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (private->binary_scrolled), GTK_SHADOW_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (private->binary_scrolled), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER (private->binary_frame), private->binary_scrolled); private->tree_view = gtk_tree_view_new (); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (private->tree_view), TRUE); gtk_tree_view_set_reorderable (GTK_TREE_VIEW (private->tree_view), FALSE); gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (private->tree_view)), GTK_SELECTION_SINGLE); private->field_value_renderer = gtk_cell_renderer_text_new (); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (private->tree_view), 0, _("Value"), private->field_value_renderer, "text", 0, NULL); g_object_set (G_OBJECT (private->field_value_renderer), "xalign", 1.0, "xpad", 5, "ypad", 5, NULL); private->field_desc_renderer = gtk_cell_renderer_text_new (); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (private->tree_view), 1, _("Description"), private->field_desc_renderer, "text", 1, NULL); private->fields_list_store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING); gtk_tree_view_set_model (GTK_TREE_VIEW (private->tree_view), GTK_TREE_MODEL (private->fields_list_store)); gtk_tree_view_set_headers_clickable (GTK_TREE_VIEW (private->tree_view), FALSE); g_segy_file_info_fill_binary_header_list (self); gtk_container_add (GTK_CONTAINER (private->binary_scrolled), private->tree_view); } private->trace_vbox = gtk_vbox_new (FALSE, 3); gtk_container_set_border_width (GTK_CONTAINER (private->trace_vbox), 5); gtk_notebook_append_page (GTK_NOTEBOOK (private->notebook), private->trace_vbox, gtk_label_new (_("Trace header"))); private->trace_hbox = gtk_hbox_new (FALSE, 3); gtk_box_pack_start (GTK_BOX (private->trace_vbox), private->trace_hbox, FALSE, FALSE, 3); private->trace_number_label = gtk_label_new (_("Trace number")); gtk_box_pack_start (GTK_BOX (private->trace_hbox), private->trace_number_label, FALSE, FALSE, 3); private->trace_spin = gtk_spin_button_new_with_range (1, g_segy_file_accessor_get_number_of_traces (private->file_accessor), 1); gtk_spin_button_set_digits (GTK_SPIN_BUTTON (private->trace_spin), 0); gtk_spin_button_set_increments (GTK_SPIN_BUTTON (private->trace_spin), 1, 10); gtk_spin_button_set_value (GTK_SPIN_BUTTON (private->trace_spin), 1); gtk_box_pack_start (GTK_BOX (private->trace_hbox), private->trace_spin, FALSE, FALSE, 3); gtk_signal_connect (GTK_OBJECT (private->trace_spin), "value_changed", GTK_SIGNAL_FUNC (g_segy_file_info_trace_number_change_handler), (gpointer)G_OBJECT (self)); g_snprintf (gbuffer, 120, "of total %d traces", g_segy_file_accessor_get_number_of_traces (private->file_accessor)); private->trace_total_label = gtk_label_new (gbuffer); gtk_box_pack_start (GTK_BOX (private->trace_hbox), private->trace_total_label, FALSE, FALSE, 3); private->trace_frame = gtk_frame_new (NULL); gtk_box_pack_start (GTK_BOX (private->trace_vbox), private->trace_frame, TRUE, TRUE, 3); private->trace_scrolled = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (private->trace_scrolled), GTK_SHADOW_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (private->trace_scrolled), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER (private->trace_frame), private->trace_scrolled); private->trace_info = g_segy_trace_info_new (); gtk_container_add (GTK_CONTAINER (private->trace_scrolled), g_segy_trace_info_get_main_widget (private->trace_info)); gtk_box_pack_start (GTK_BOX (private->vbox), gtk_hseparator_new (), FALSE, FALSE, 5); private->button_box = gtk_hbutton_box_new (); gtk_button_box_set_layout (GTK_BUTTON_BOX (private->button_box), GTK_BUTTONBOX_SPREAD); gtk_box_pack_start (GTK_BOX (private->vbox), private->button_box, FALSE, FALSE, 5); private->close_button = gtk_button_new_from_stock (GTK_STOCK_CLOSE); gtk_container_add (GTK_CONTAINER (private->button_box), private->close_button); gtk_signal_connect (GTK_OBJECT (private->close_button), "clicked", GTK_SIGNAL_FUNC (g_segy_file_info_close_button_handler), (gpointer)G_OBJECT (self)); g_segy_file_info_fill_trace_header_list (self); g_segy_file_info_fill_trace_header_values (self); gtk_widget_show_all (private->vbox); gsegy_view_set_window_icon (GTK_WINDOW (private->window)); } return private->window;}gboolean g_segy_file_info_has_main_widget (GSEGYFileInfo *self) { GSEGYFileInfoPrivate *private = G_SEGY_FILE_INFO_GET_PRIVATE (self); return (private->tree_view != NULL);}/*void g_segy_file_info_set_fields_names (GSEGYFileInfo *self, GPtrArray *names, GPtrArray *desc) { GSEGYFileInfoPrivate *private = G_SEGY_FILE_INFO_GET_PRIVATE (self); guint i; const gchar *field_name, *field_desc; GtkTreeIter iter; if (NULL == private->tree_view) g_segy_file_info_get_main_widget (self); gtk_list_store_clear (private->fields_list_store); for (i = 0; i < names->len; i++) { field_name = (const gchar*)g_ptr_array_index (names, i); field_desc = (const gchar*)g_ptr_array_index (desc, i); if (NULL == field_name) continue; gtk_list_store_append (private->fields_list_store, &iter); gtk_list_store_set (private->fields_list_store, &iter, 0, field_name, 1, "", 2, field_desc, -1); }}void g_segy_file_info_set_fields_values (GSEGYFileInfo *self, GPtrArray *values) { GSEGYFileInfoPrivate *private = G_SEGY_FILE_INFO_GET_PRIVATE (self); guint i; const gchar *value; GtkTreeIter iter; GValue gvalue; if (NULL == private->tree_view) return; for (i = 0; i < sizeof (GValue); i++) { ((guint8*)&gvalue)[i] = 0; } g_value_init (&gvalue, G_TYPE_STRING); gtk_tree_model_get_iter_first (GTK_TREE_MODEL (private->fields_list_store), &iter); for (i = 0; i < values->len; i++) { value = (const gchar*)g_ptr_array_index (values, i); if (NULL == value) continue; g_value_set_static_string (&gvalue, value); gtk_list_store_set_value (private->fields_list_store, &iter, 1, &gvalue); if (FALSE == gtk_tree_model_iter_next (GTK_TREE_MODEL (private->fields_list_store), &iter)) break; } g_value_unset (&gvalue);}*/GSEGYFileInfo* g_segy_file_info_new (GSEGYFileAccessor *file_accessor) { GSEGYFileInfo *new_file_info = G_SEGY_FILE_INFO (g_object_new (G_SEGY_TYPE_FILE_INFO, NULL)); GSEGYFileInfoPrivate *private = G_SEGY_FILE_INFO_GET_PRIVATE (new_file_info); private->file_accessor = file_accessor; g_object_ref (G_OBJECT (private->file_accessor)); return new_file_info;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -