📄 gsegyfileinfo.c
字号:
/* * GTKSEISVIEWUI - Library of interface elements for GSEGYView * * Copyright (C) 2006 Vladimir Bashkardin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more av. * * You should have received a copy of the GNU General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * * Author: Vladimir Bashkardin <vovizmus@users.sourceforge.net> */#include "gsegyfileaux.h"#include "gsegyfileinfo.h"#include "gsegytraceinfo.h"G_DEFINE_TYPE (GSEGYFileInfo, g_segy_file_info, G_TYPE_OBJECT)#define G_SEGY_FILE_INFO_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), G_SEGY_TYPE_FILE_INFO, GSEGYFileInfoPrivate))typedef struct _GSEGYFileInfoPrivate GSEGYFileInfoPrivate;struct _GSEGYFileInfoPrivate { GtkWidget *window; GtkWidget *vbox; GtkWidget *notebook; GtkWidget *text_vbox; GtkWidget *text_frame; GtkWidget *text_scrolled; GtkWidget *text_view; GtkWidget *binary_vbox; GtkWidget *binary_frame; GtkWidget *binary_scrolled; GtkWidget *trace_vbox; GtkWidget *trace_hbox; GtkWidget *trace_number_label; GtkWidget *trace_spin; GtkWidget *trace_total_label; GtkWidget *trace_frame; GtkWidget *trace_scrolled; GtkWidget *tree_view; GtkWidget *button_box; GtkWidget *close_button; GtkListStore *fields_list_store; GtkCellRenderer *field_desc_renderer; GtkCellRenderer *field_value_renderer; gint trace_index; guint8 *trace_header_buffer; GStringChunk *binary_header_chunk; GPtrArray *binary_header_labels; GStringChunk *trace_header_chunk; GPtrArray *trace_header_labels; GSEGYTraceInfo *trace_info; GSEGYFileAccessor *file_accessor;};static void g_segy_file_info_init (GSEGYFileInfo *self) { GSEGYFileInfoPrivate *private = G_SEGY_FILE_INFO_GET_PRIVATE (self); private->window = NULL; private->vbox = NULL; private->notebook = NULL; private->text_vbox = NULL; private->text_frame = NULL; private->text_scrolled = NULL; private->binary_vbox = NULL; private->binary_frame = NULL; private->binary_scrolled = NULL; private->trace_vbox = NULL; private->trace_hbox = NULL; private->trace_number_label = NULL; private->trace_spin = NULL; private->trace_total_label = NULL; private->trace_frame = NULL; private->trace_scrolled = NULL; private->button_box = NULL; private->close_button = NULL; private->tree_view = NULL; private->fields_list_store = NULL; private->field_desc_renderer = NULL; private->field_value_renderer = NULL; private->binary_header_chunk = NULL; private->binary_header_labels = NULL; private->trace_header_chunk = NULL; private->trace_header_labels = NULL; private->trace_index = 0; private->trace_header_buffer = NULL;#ifdef DEBUG g_print ("<GSEGYFileInfo is inited>\n");#endif}static void g_segy_file_info_finalize (GObject *object) { GSEGYFileInfo *self = G_SEGY_FILE_INFO (object); GSEGYFileInfoPrivate *private = G_SEGY_FILE_INFO_GET_PRIVATE (self); if (private->window) gtk_widget_destroy (private->window); if (private->fields_list_store) g_object_unref (G_OBJECT (private->fields_list_store)); if (private->file_accessor) g_object_unref (G_OBJECT (private->file_accessor)); if (private->trace_info) g_object_unref (G_OBJECT (private->trace_info)); if (private->trace_header_chunk) g_string_chunk_free (private->trace_header_chunk); if (private->trace_header_labels) g_ptr_array_free (private->trace_header_labels, TRUE); if (private->binary_header_chunk) g_string_chunk_free (private->binary_header_chunk); if (private->binary_header_labels) g_ptr_array_free (private->binary_header_labels, TRUE); if (private->trace_header_buffer) g_free (private->trace_header_buffer);#ifdef DEBUG g_print ("<GSEGYFileInfo is finalized>\n");#endif if (G_OBJECT_CLASS (g_segy_file_info_parent_class)->finalize) G_OBJECT_CLASS (g_segy_file_info_parent_class)->finalize (object);}static void g_segy_file_info_class_init (GSEGYFileInfoClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); gobject_class->finalize = g_segy_file_info_finalize; g_type_class_add_private (klass, sizeof (GSEGYFileInfoPrivate));#ifdef DEBUG g_print ("<GSEGYFileInfo class is inited>\n");#endif}static void g_segy_file_info_close_button_handler (GtkWidget *widget, gpointer data) { GSEGYFileInfoPrivate *private = G_SEGY_FILE_INFO_GET_PRIVATE (G_SEGY_FILE_INFO (data)); gtk_widget_hide (private->window);}static gboolean g_segy_file_info_window_close_handler (GtkWidget *widget, GdkEvent *event, gpointer data) { GSEGYFileInfoPrivate *private = G_SEGY_FILE_INFO_GET_PRIVATE (G_SEGY_FILE_INFO (data)); gtk_widget_hide (private->window); return TRUE;}static void g_segy_file_info_fill_binary_header_list (GSEGYFileInfo *self) { GSEGYFileInfoPrivate *private = G_SEGY_FILE_INFO_GET_PRIVATE (self); GSEGYFormatWizard *format_wizard = g_segy_file_accessor_get_format_wizard (private->file_accessor); guint i; const gchar *field_desc, *value; GtkTreeIter iter; GValue gvalue; GPtrArray *binary_header_desc = g_segy_format_wizard_get_binary_header_fields_desc (format_wizard); gtk_list_store_clear (private->fields_list_store); for (i = 0; i < binary_header_desc->len; i++) { field_desc = (const gchar*)g_ptr_array_index (binary_header_desc, i); if (NULL == field_desc) continue; gtk_list_store_append (private->fields_list_store, &iter); gtk_list_store_set (private->fields_list_store, &iter, 0, "", 1, field_desc, -1); } g_segy_format_wizard_get_labels_for_binary_header (format_wizard, g_segy_file_accessor_get_binary_header (private->file_accessor), &private->binary_header_chunk, &private->binary_header_labels); 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 < private->binary_header_labels->len; i++) { value = (const gchar*)g_ptr_array_index (private->binary_header_labels, i); if (NULL == value) continue; g_value_set_static_string (&gvalue, value); gtk_list_store_set_value (private->fields_list_store, &iter, 0, &gvalue); if (FALSE == gtk_tree_model_iter_next (GTK_TREE_MODEL (private->fields_list_store), &iter)) break; } g_value_unset (&gvalue);}static void g_segy_file_info_fill_trace_header_list (GSEGYFileInfo *self) { GSEGYFileInfoPrivate *private = G_SEGY_FILE_INFO_GET_PRIVATE (self); GSEGYFormatWizard *format_wizard = g_segy_file_accessor_get_format_wizard (private->file_accessor); g_segy_trace_info_set_fields_names (private->trace_info, g_segy_format_wizard_get_trace_header_fields_names (format_wizard), g_segy_format_wizard_get_trace_header_fields_desc (format_wizard));}static void g_segy_file_info_fill_trace_header_values (GSEGYFileInfo *self) { GSEGYFileInfoPrivate *private = G_SEGY_FILE_INFO_GET_PRIVATE (self); GSEGYFormatWizard *format_wizard = g_segy_file_accessor_get_format_wizard (private->file_accessor); if (NULL == private->trace_header_buffer) private->trace_header_buffer = (guint8*)g_malloc (g_segy_format_wizard_get_trace_header_size (format_wizard)); guint8* decoded_trace_header = g_segy_file_accessor_get_trace_header (private->file_accessor, private->trace_index, private->trace_header_buffer, g_segy_format_wizard_get_trace_header_size (format_wizard)); if (NULL == decoded_trace_header) {#ifdef DEBUG g_printf ("Trace header read failed in the file info.\n");#endif return; } if (private->trace_header_chunk) { g_string_chunk_free (private->trace_header_chunk); private->trace_header_chunk = NULL; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -