⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gsegyfileinfo.c

📁 segy 显示程序!希望能给正在做这部分朋友提供一部分资料
💻 C
📖 第 1 页 / 共 2 页
字号:
/*  * 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 + -