📄 gsegygainpanel.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 + -