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

📄 gsegygainpanel.c

📁 segy 显示程序!希望能给正在做这部分朋友提供一部分资料
💻 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/gtkseisviewgl.h>#include "gsegyfileaux.h"#include "gsegyfileui_marshal.h"#include "gsegygainpanel.h"G_DEFINE_TYPE (GSEGYGainPanel, g_segy_gain_panel, G_TYPE_OBJECT)#define G_SEGY_GAIN_PANEL_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), G_SEGY_TYPE_GAIN_PANEL, GSEGYGainPanelPrivate))typedef struct _GSEGYGainPanelPrivate GSEGYGainPanelPrivate;struct _GSEGYGainPanelPrivate {    GtkWidget *frame;    GtkWidget *vbox;    GtkWidget *hbox;    GtkWidget *minmax_mode_combo;    GtkWidget *agc_check;    GtkWidget *agc_window_spin;    GtkWidget *reload_button;    GtkWidget *reload_data_icon;    GtkSeisViewMinMax minmax_mode;    gboolean   use_agc;    gfloat     agc_window;};static void g_segy_gain_panel_init (GSEGYGainPanel *self) {    GSEGYGainPanelPrivate *private = G_SEGY_GAIN_PANEL_GET_PRIVATE (self);    private->frame = NULL;    private->vbox = NULL;    private->hbox = NULL;    private->minmax_mode_combo = NULL;    private->agc_check = NULL;    private->agc_window_spin = NULL;    private->reload_button = NULL;    private->minmax_mode = GTK_SEIS_VIEW_MINMAX_PER_ENSEMBLE;    private->use_agc = FALSE;    private->agc_window = 0.1;#ifdef DEBUG    g_print ("<GSEGYGainPanel is inited>\n");#endif}static void g_segy_gain_panel_finalize (GObject *object) {    GSEGYGainPanel *self = G_SEGY_GAIN_PANEL (object);    GSEGYGainPanelPrivate *private = G_SEGY_GAIN_PANEL_GET_PRIVATE (self);    if (private->frame)        gtk_widget_destroy (private->frame);#ifdef DEBUG    g_print ("<GSEGYGainPanel is finalized>\n");#endif    if (G_OBJECT_CLASS (g_segy_gain_panel_parent_class)->finalize)        G_OBJECT_CLASS (g_segy_gain_panel_parent_class)->finalize (object);}static void g_segy_gain_panel_class_init (GSEGYGainPanelClass *klass) {    GObjectClass *gobject_class = G_OBJECT_CLASS (klass);    gobject_class->finalize = g_segy_gain_panel_finalize;    g_type_class_add_private (klass, sizeof (GSEGYGainPanelPrivate));    klass->minmax_mode = NULL;    klass->agc_use = NULL;    klass->reload_data = NULL;    klass->minmax_mode_id = g_signal_new ("minmax_mode_change",                                          G_TYPE_FROM_CLASS ((gpointer)G_OBJECT_CLASS (klass)),                                          G_SIGNAL_RUN_LAST,                                          G_STRUCT_OFFSET (GSEGYGainPanelClass, minmax_mode),                                          NULL, NULL,                                          g_segyui_marshal_VOID__INT,                                          G_TYPE_NONE, 1, G_TYPE_INT);    klass->agc_use_id = g_signal_new ("agc_use_change",                                      G_TYPE_FROM_CLASS ((gpointer)G_OBJECT_CLASS (klass)),                                      G_SIGNAL_RUN_LAST,                                      G_STRUCT_OFFSET (GSEGYGainPanelClass, agc_use),                                      NULL, NULL,                                      g_segyui_marshal_VOID__FLOAT,                                      G_TYPE_NONE, 1, G_TYPE_FLOAT);    klass->reload_data_id = g_signal_new ("reload_data_request",                                          G_TYPE_FROM_CLASS ((gpointer)G_OBJECT_CLASS (klass)),                                          G_SIGNAL_RUN_LAST,                                          G_STRUCT_OFFSET (GSEGYGainPanelClass, reload_data),                                          NULL, NULL,                                          g_segyui_marshal_VOID__VOID,                                          G_TYPE_NONE, 0);#ifdef DEBUG    g_print ("<GSEGYGainPanel class is inited>\n");#endif}static void g_segy_gain_panel_minmax_mode_change_signal (GSEGYGainPanel *self) {    GSEGYGainPanelPrivate *private = G_SEGY_GAIN_PANEL_GET_PRIVATE (self);    g_signal_emit (self, G_SEGY_GAIN_PANEL_GET_CLASS (self)->minmax_mode_id, 0, private->minmax_mode);}static void g_segy_gain_panel_agc_use_signal (GSEGYGainPanel *self) {    GSEGYGainPanelPrivate *private = G_SEGY_GAIN_PANEL_GET_PRIVATE (self);    if (private->use_agc)        g_signal_emit (self, G_SEGY_GAIN_PANEL_GET_CLASS (self)->agc_use_id, 0, private->agc_window);    else        g_signal_emit (self, G_SEGY_GAIN_PANEL_GET_CLASS (self)->agc_use_id, 0, -1.0);}static void g_segy_gain_panel_reload_data_signal (GSEGYGainPanel *self) {    g_signal_emit (self, G_SEGY_GAIN_PANEL_GET_CLASS (self)->reload_data_id, 0);}static void g_segy_gain_panel_minmax_mode_handler (GtkWidget *widget, gpointer data) {    GSEGYGainPanelPrivate *private = G_SEGY_GAIN_PANEL_GET_PRIVATE (G_SEGY_GAIN_PANEL (data));    private->minmax_mode = gtk_combo_box_get_active (GTK_COMBO_BOX (private->minmax_mode_combo)) == 0                           ? GTK_SEIS_VIEW_MINMAX_PER_ENSEMBLE                           : GTK_SEIS_VIEW_MINMAX_PER_TRACE;    gtk_widget_set_sensitive (private->reload_button, TRUE);    g_segy_gain_panel_minmax_mode_change_signal (G_SEGY_GAIN_PANEL (data));}static void g_segy_gain_panel_agc_use_handler (GtkWidget *widget, gpointer data) {    GSEGYGainPanelPrivate *private = G_SEGY_GAIN_PANEL_GET_PRIVATE (G_SEGY_GAIN_PANEL (data));    private->use_agc = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (private->agc_check));    gtk_widget_set_sensitive (private->agc_window_spin, private->use_agc);    gtk_widget_set_sensitive (private->reload_button, TRUE);    g_segy_gain_panel_agc_use_signal (G_SEGY_GAIN_PANEL (data));}static void g_segy_gain_panel_agc_window_change_handler (GtkWidget *widget, gpointer data) {    GSEGYGainPanelPrivate *private = G_SEGY_GAIN_PANEL_GET_PRIVATE (G_SEGY_GAIN_PANEL (data));    private->agc_window = gtk_spin_button_get_value (GTK_SPIN_BUTTON (private->agc_window_spin));    gtk_widget_set_sensitive (private->reload_button, TRUE);    g_segy_gain_panel_agc_use_signal (G_SEGY_GAIN_PANEL (data));}static void g_segy_gain_panel_reload_data_handler (GtkWidget *widget, gpointer data) {    GSEGYGainPanelPrivate *private = G_SEGY_GAIN_PANEL_GET_PRIVATE (G_SEGY_GAIN_PANEL (data));    gtk_widget_set_sensitive (private->reload_button, FALSE);    g_segy_gain_panel_reload_data_signal (G_SEGY_GAIN_PANEL (data));}GtkWidget* g_segy_gain_panel_get_main_widget (GSEGYGainPanel *self) {    GSEGYGainPanelPrivate *private = G_SEGY_GAIN_PANEL_GET_PRIVATE (self);    if (NULL == private->frame) {        private->frame = gtk_frame_new (_("Prescaling"));        gtk_container_set_border_width (GTK_CONTAINER (private->frame), 0);        private->vbox = gtk_vbox_new (TRUE, 3);        gtk_container_set_border_width (GTK_CONTAINER (private->vbox), 3);        gtk_container_add (GTK_CONTAINER (private->frame), private->vbox);        private->minmax_mode_combo = gtk_combo_box_new_text  ();        gtk_box_pack_start (GTK_BOX (private->vbox), private->minmax_mode_combo, FALSE, FALSE, 0);        gtk_combo_box_append_text (GTK_COMBO_BOX (private->minmax_mode_combo),                                   _("Min/Max per ensemble"));        gtk_combo_box_append_text (GTK_COMBO_BOX (private->minmax_mode_combo),                                   _("Min/Max per trace"));        gtk_combo_box_set_active (GTK_COMBO_BOX (private->minmax_mode_combo), 0);        gtk_signal_connect (GTK_OBJECT (private->minmax_mode_combo), "changed",                            GTK_SIGNAL_FUNC (g_segy_gain_panel_minmax_mode_handler),                            (gpointer)G_OBJECT (self));        private->hbox = gtk_hbox_new (FALSE, 3);        gtk_box_pack_start (GTK_BOX (private->vbox), private->hbox, FALSE, FALSE, 0);        private->agc_check = gtk_check_button_new_with_label (_("AGC window"));        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (private->agc_check), FALSE);        gtk_box_pack_start (GTK_BOX (private->hbox), private->agc_check, FALSE, FALSE, 0);        gtk_signal_connect (GTK_OBJECT (private->agc_check), "toggled",                            GTK_SIGNAL_FUNC (g_segy_gain_panel_agc_use_handler),                            (gpointer)G_OBJECT (self));        private->agc_window_spin = gtk_spin_button_new_with_range (0.05, 1, 0.05);        gtk_spin_button_set_value (GTK_SPIN_BUTTON (private->agc_window_spin), 0.1);        gtk_box_pack_start (GTK_BOX (private->hbox), private->agc_window_spin, FALSE, FALSE, 0);        gtk_signal_connect (GTK_OBJECT (private->agc_window_spin), "value_changed",                            GTK_SIGNAL_FUNC (g_segy_gain_panel_agc_window_change_handler),                            (gpointer)G_OBJECT (self));        gtk_widget_set_sensitive (GTK_WIDGET (private->agc_window_spin), FALSE);        private->reload_button = gtk_button_new ();        private->reload_data_icon = gtk_image_new_from_stock (GTK_STOCK_APPLY, GTK_ICON_SIZE_MENU);        gtk_container_add (GTK_CONTAINER (private->reload_button), private->reload_data_icon);        gtk_box_pack_start (GTK_BOX (private->hbox), private->reload_button, FALSE, FALSE, 0);        gtk_signal_connect (GTK_OBJECT (private->reload_button), "clicked",                            GTK_SIGNAL_FUNC (g_segy_gain_panel_reload_data_handler),                            (gpointer)G_OBJECT (self));        gtk_widget_set_sensitive (GTK_WIDGET (private->reload_button), FALSE);        gtk_widget_show_all (private->frame);    }    return private->frame;}GSEGYGainPanel* g_segy_gain_panel_new (void) {    return g_object_new (G_SEGY_TYPE_GAIN_PANEL, NULL);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -