📄 gsegyproperties.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 <gtkseisviewgl/gseisviewaxisz.h>#include <gtkseisviewgl/gseisviewaxistraces.h>#include "gsegyfileaux.h"#include "gsegyproperties.h"G_DEFINE_TYPE (GSEGYProperties, g_segy_properties, G_TYPE_OBJECT)#define G_SEGY_PROPERTIES_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), G_SEGY_TYPE_PROPERTIES, GSEGYPropertiesPrivate))typedef struct _GSEGYPropertiesPrivate GSEGYPropertiesPrivate;struct _GSEGYPropertiesPrivate { GtkWidget *window; GtkWidget *vbox; GtkWidget *notebook; GtkWidget *axes_vbox; GtkWidget *data_vbox; GtkSizeGroup *axes_size_group; GtkWidget *common_frame; GtkWidget *common_table; GtkWidget *axes_font_label; GtkWidget *axes_fg_label; GtkWidget *axes_bg_label; GtkWidget *axes_font_button; GtkWidget *axes_fg_button; GtkWidget *axes_bg_button; GtkWidget *axis_frame; GtkWidget *axes_combo; GtkWidget *axis_vbox; GtkWidget *axis_vboxs[G_SEIS_VIEW_AXES_TYPES_NUM]; GtkWidget *axis_show_toggle[G_SEIS_VIEW_AXES_TYPES_NUM]; GtkWidget *axis_hbox[G_SEIS_VIEW_AXES_TYPES_NUM]; GtkWidget *axis_label[G_SEIS_VIEW_AXES_TYPES_NUM]; GtkWidget *axis_sort_combo[G_SEIS_VIEW_AXES_TYPES_NUM]; GtkWidget *axis_precision_spin[G_SEIS_VIEW_AXES_TYPES_NUM]; GtkWidget *axis_integer_radio[G_SEIS_VIEW_AXES_TYPES_NUM]; GtkWidget *axis_float_radio[G_SEIS_VIEW_AXES_TYPES_NUM]; GtkWidget *axis_table[G_SEIS_VIEW_AXES_TYPES_NUM]; GtkWidget *axis_font_label[G_SEIS_VIEW_AXES_TYPES_NUM]; GtkWidget *axis_font_button[G_SEIS_VIEW_AXES_TYPES_NUM]; GtkWidget *axis_fg_label[G_SEIS_VIEW_AXES_TYPES_NUM]; GtkWidget *axis_fg_button[G_SEIS_VIEW_AXES_TYPES_NUM]; GtkWidget *axis_bg_label[G_SEIS_VIEW_AXES_TYPES_NUM]; GtkWidget *axis_bg_button[G_SEIS_VIEW_AXES_TYPES_NUM]; guint active_axis; gchar *default_font; GdkColor axes_fg_color; GdkColor axes_bg_color; GSeisViewAxis *axis[G_SEIS_VIEW_AXES_TYPES_NUM]; gboolean axis_is_shown[G_SEIS_VIEW_AXES_TYPES_NUM]; gboolean axis_is_float[G_SEIS_VIEW_AXES_TYPES_NUM]; guint8 axis_precision[G_SEIS_VIEW_AXES_TYPES_NUM]; GdkColor axis_fg_color[G_SEIS_VIEW_AXES_TYPES_NUM]; GdkColor axis_bg_color[G_SEIS_VIEW_AXES_TYPES_NUM]; gint16 axis_label_id[G_SEIS_VIEW_AXES_TYPES_NUM]; GStringChunk *axis_labels_chunk[G_SEIS_VIEW_AXES_TYPES_NUM]; GPtrArray *axis_labels[G_SEIS_VIEW_AXES_TYPES_NUM]; GtkSizeGroup *data_size_group; GtkWidget *data_table; GtkWidget *data_colors_frame; GtkWidget *trace_label; GtkWidget *underlayer_label; GtkWidget *highlight_label; GtkWidget *trace_button; GtkWidget *underlayer_button; GtkWidget *highlight_button; GdkColor trace_color; GdkColor underlayer_color; GdkColor highlight_color; GtkWidget *data_cursor_frame; GtkWidget *data_cursor_vbox; GtkWidget *show_cursor_toggle; GtkWidget *real_amplitude_toggle; gboolean show_cross; gboolean real_amplitude; GtkWidget *button_box; GtkWidget *close_button; GtkSeisViewGl *seis_view; GPtrArray *sort_labels; gint16 default_label_id; guint ensemble_index; GSEGYCursorPanel *cursor_panel; GSEGYSeismicAccessor *seismic_accessor;};static void g_segy_properties_set_font (GSEGYProperties *self, GSeisViewAxisType axis_num) { GSEGYPropertiesPrivate *private = G_SEGY_PROPERTIES_GET_PRIVATE (self); guint i; if (axis_num < G_SEIS_VIEW_AXES_TYPES_NUM) { if (private->axis[axis_num]) { if (private->axis_font_button[axis_num]) g_object_set (G_OBJECT (private->axis[axis_num]), "font", gtk_font_button_get_font_name (GTK_FONT_BUTTON (private->axis_font_button[axis_num])), NULL); else g_object_set (G_OBJECT (private->axis[axis_num]), "font", private->default_font, NULL); } } else { for (i = 0; i < G_SEIS_VIEW_AXES_TYPES_NUM; i++) { if (private->axis[i]) { if (private->axis_font_button[i]) g_object_set (G_OBJECT (private->axis[i]), "font", gtk_font_button_get_font_name (GTK_FONT_BUTTON (private->axis_font_button[i])), NULL); else g_object_set (G_OBJECT (private->axis[i]), "font", private->default_font, NULL); } } }}static void g_segy_properties_set_format (GSEGYProperties *self, GSeisViewAxisType axis_num) { GSEGYPropertiesPrivate *private = G_SEGY_PROPERTIES_GET_PRIVATE (self); guint i; if (axis_num < G_SEIS_VIEW_AXES_TYPES_NUM) { if (private->axis[axis_num]) g_object_set (G_OBJECT (private->axis[axis_num]), "format", private->axis_is_float[axis_num], NULL); } else { for (i = 0; i < G_SEIS_VIEW_AXES_TYPES_NUM; i++) { if (private->axis[i]) g_object_set (G_OBJECT (private->axis[i]), "format", private->axis_is_float[i], NULL); } }}static void g_segy_properties_set_precision (GSEGYProperties *self, GSeisViewAxisType axis_num) { GSEGYPropertiesPrivate *private = G_SEGY_PROPERTIES_GET_PRIVATE (self); guint i; if (axis_num < G_SEIS_VIEW_AXES_TYPES_NUM) { if (private->axis[axis_num]) g_object_set (G_OBJECT (private->axis[axis_num]), "precision", private->axis_precision[axis_num], NULL); } else { for (i = 0; i < G_SEIS_VIEW_AXES_TYPES_NUM; i++) { if (private->axis[i]) g_object_set (G_OBJECT (private->axis[i]), "precision", private->axis_precision[i], NULL); } }}static void g_segy_properties_set_fg_color (GSEGYProperties *self, GSeisViewAxisType axis_num) { GSEGYPropertiesPrivate *private = G_SEGY_PROPERTIES_GET_PRIVATE (self); GSeisColor fg_color; guint i; if (axis_num < G_SEIS_VIEW_AXES_TYPES_NUM) { if (private->axis[axis_num]) { fg_color.red = private->axis_fg_color[axis_num].red; fg_color.green = private->axis_fg_color[axis_num].green; fg_color.blue = private->axis_fg_color[axis_num].blue; g_object_set (G_OBJECT (private->axis[axis_num]), "fg_color", &fg_color, NULL); } } else { for (i = 0; i < G_SEIS_VIEW_AXES_TYPES_NUM; i++) { if (private->axis[i]) { fg_color.red = private->axis_fg_color[i].red; fg_color.green = private->axis_fg_color[i].green; fg_color.blue = private->axis_fg_color[i].blue; g_object_set (G_OBJECT (private->axis[i]), "fg_color", &fg_color, NULL); } } }}static void g_segy_properties_set_bg_color (GSEGYProperties *self, GSeisViewAxisType axis_num) { GSEGYPropertiesPrivate *private = G_SEGY_PROPERTIES_GET_PRIVATE (self); GSeisColor bg_color; guint i; if (axis_num < G_SEIS_VIEW_AXES_TYPES_NUM) { if (private->axis[axis_num]) { bg_color.red = private->axis_bg_color[axis_num].red; bg_color.green = private->axis_bg_color[axis_num].green; bg_color.blue = private->axis_bg_color[axis_num].blue; g_object_set (G_OBJECT (private->axis[axis_num]), "bg_color", &bg_color, NULL); } } else { for (i = 0; i < G_SEIS_VIEW_AXES_TYPES_NUM; i++) { if (private->axis[i]) { bg_color.red = private->axis_bg_color[i].red; bg_color.green = private->axis_bg_color[i].green; bg_color.blue = private->axis_bg_color[i].blue; g_object_set (G_OBJECT (private->axis[i]), "bg_color", &bg_color, NULL); } } }}void g_segy_properties_change_ensemble (GSEGYProperties *self, guint ensemble_index, guint32 number_of_samples, guint16 sample_interval) { GSEGYPropertiesPrivate *private = G_SEGY_PROPERTIES_GET_PRIVATE (self); gint i, j; for (i = 0; i < G_SEIS_VIEW_AXES_TYPES_NUM; i++) { if (NULL == private->axis_labels_chunk[i]) continue; gboolean is_copy = FALSE; for (j = i - 1; j >= 0; j--) { if (private->axis_labels_chunk[i] == private->axis_labels_chunk[j]) { is_copy = TRUE; break; } } if (FALSE == is_copy) { g_string_chunk_free (private->axis_labels_chunk[i]); g_ptr_array_free (private->axis_labels[i], TRUE); } } for (i = 0; i < G_SEIS_VIEW_AXES_TYPES_NUM; i++) { private->axis_labels_chunk[i] = NULL; private->axis_labels[i] = NULL; } private->ensemble_index = ensemble_index; g_segy_seismic_accessor_get_labels_for_second_level (private->seismic_accessor, ensemble_index, private->axis_label_id[G_SEIS_VIEW_AXIS_TOP] + 1, &private->axis_labels_chunk[G_SEIS_VIEW_AXIS_TOP], &private->axis_labels[G_SEIS_VIEW_AXIS_TOP]); g_seis_view_axis_traces_set_str_values (G_SEIS_VIEW_AXIS_TRACES (private->axis[G_SEIS_VIEW_AXIS_TOP]), private->axis_labels[G_SEIS_VIEW_AXIS_TOP]); if (private->axis_label_id[G_SEIS_VIEW_AXIS_TOP] != private->axis_label_id[G_SEIS_VIEW_AXIS_BOTTOM]) g_segy_seismic_accessor_get_labels_for_second_level (private->seismic_accessor, ensemble_index, private->axis_label_id[G_SEIS_VIEW_AXIS_BOTTOM] + 1, &private->axis_labels_chunk[G_SEIS_VIEW_AXIS_BOTTOM], &private->axis_labels[G_SEIS_VIEW_AXIS_BOTTOM]); else { private->axis_labels_chunk[G_SEIS_VIEW_AXIS_BOTTOM] = private->axis_labels_chunk[G_SEIS_VIEW_AXIS_TOP]; private->axis_labels[G_SEIS_VIEW_AXIS_BOTTOM] = private->axis_labels[G_SEIS_VIEW_AXIS_TOP]; } g_seis_view_axis_traces_set_str_values (G_SEIS_VIEW_AXIS_TRACES (private->axis[G_SEIS_VIEW_AXIS_BOTTOM]), private->axis_labels[G_SEIS_VIEW_AXIS_BOTTOM]); g_seis_view_axis_z_set_min_max (G_SEIS_VIEW_AXIS_Z (private->axis[G_SEIS_VIEW_AXIS_LEFT]), 0, sample_interval / 1000.0, number_of_samples); g_seis_view_axis_z_set_min_max (G_SEIS_VIEW_AXIS_Z (private->axis[G_SEIS_VIEW_AXIS_RIGHT]), 0, sample_interval / 1000.0, number_of_samples); for (i = 0; i < G_SEIS_VIEW_AXES_TYPES_NUM; i++) { g_seis_view_axis_reshape (private->axis[i], GTK_WIDGET (private->seis_view)); if (private->axis_is_shown[i]) gtk_seis_view_gl_axis_refresh (private->seis_view, i); } if (gtk_seis_view_gl_has_real_amplitudes (GTK_SEIS_VIEW_GL (private->seis_view))) { private->real_amplitude = TRUE; if (private->real_amplitude_toggle) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (private->real_amplitude_toggle), TRUE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -