📄 gsegypreferences.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 "gsegypreferences.h"G_DEFINE_TYPE (GSEGYPreferences, g_segy_preferences, G_TYPE_OBJECT)#define G_SEGY_PREFERENCES_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), G_SEGY_TYPE_PREFERENCES, GSEGYPreferencesPrivate))typedef struct _GSEGYPreferencesPrivate GSEGYPreferencesPrivate;struct _GSEGYPreferencesPrivate { GtkWidget *window; GtkWidget *vbox; GtkSizeGroup *size_group; GtkWidget *table; GtkWidget *coloring_label; GtkWidget *coloring_combo; GtkWidget *signal_label; GtkWidget *signal_combo; GtkWidget *first_key_label; GtkWidget *first_key_combo; GtkWidget *second_key_label; GtkWidget *second_key_combo; GtkWidget *generate_toggle; GtkWidget *threaded_toggle; GtkWidget *button_box; GtkWidget *close_button; GSEGYDataViewPref data_view_pref;};static void g_segy_preferences_signal_combo_changed_handler (GtkComboBox *combo_box, gpointer data) { GSEGYPreferencesPrivate *private = G_SEGY_PREFERENCES_GET_PRIVATE (G_SEGY_PREFERENCES (data)); private->data_view_pref.signal = gtk_combo_box_get_active (GTK_COMBO_BOX (private->signal_combo)); if (0 == private->data_view_pref.signal) { gtk_widget_set_sensitive (private->coloring_combo, FALSE); gtk_combo_box_set_active (GTK_COMBO_BOX (private->coloring_combo), 0); private->data_view_pref.coloring = 0; } else gtk_widget_set_sensitive (private->coloring_combo, TRUE);}static void g_segy_preferences_coloring_combo_changed_handler (GtkComboBox *combo_box, gpointer data) { GSEGYPreferencesPrivate *private = G_SEGY_PREFERENCES_GET_PRIVATE (G_SEGY_PREFERENCES (data)); private->data_view_pref.coloring = gtk_combo_box_get_active (GTK_COMBO_BOX (private->coloring_combo));}static void g_segy_preferences_first_key_combo_changed_handler (GtkComboBox *combo_box, gpointer data) { GSEGYPreferencesPrivate *private = G_SEGY_PREFERENCES_GET_PRIVATE (G_SEGY_PREFERENCES (data)); private->data_view_pref.first_key_order = gtk_combo_box_get_active (GTK_COMBO_BOX (private->first_key_combo));}static void g_segy_preferences_second_key_combo_changed_handler (GtkComboBox *combo_box, gpointer data) { GSEGYPreferencesPrivate *private = G_SEGY_PREFERENCES_GET_PRIVATE (G_SEGY_PREFERENCES (data)); private->data_view_pref.second_key_order = gtk_combo_box_get_active (GTK_COMBO_BOX (private->second_key_combo));}static void g_segy_preferences_generate_toggle_handler (GtkWidget *widget, gpointer data) { GSEGYPreferencesPrivate *private = G_SEGY_PREFERENCES_GET_PRIVATE (G_SEGY_PREFERENCES (data)); private->data_view_pref.generate_wiggles = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (private->generate_toggle));}static void g_segy_preferences_threaded_toggle_handler (GtkWidget *widget, gpointer data) { GSEGYPreferencesPrivate *private = G_SEGY_PREFERENCES_GET_PRIVATE (G_SEGY_PREFERENCES (data)); private->data_view_pref.threaded = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (private->threaded_toggle));}static void g_segy_preferences_close_button_handler (GtkWidget *widget, gpointer data) { GSEGYPreferencesPrivate *private = G_SEGY_PREFERENCES_GET_PRIVATE (G_SEGY_PREFERENCES (data)); gtk_widget_hide (private->window);}static gboolean g_segy_preferences_window_close_handler (GtkWidget *widget, GdkEvent *event, gpointer data) { GSEGYPreferencesPrivate *private = G_SEGY_PREFERENCES_GET_PRIVATE (G_SEGY_PREFERENCES (data)); gtk_widget_hide (private->window); return TRUE;}GtkWidget* g_segy_preferences_get_main_widget (GSEGYPreferences *self) { GSEGYPreferencesPrivate *private = G_SEGY_PREFERENCES_GET_PRIVATE (self); if (NULL == private->window) { private->window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (private->window), 7); gtk_window_set_modal (GTK_WINDOW (private->window), FALSE); gtk_window_set_resizable (GTK_WINDOW (private->window), FALSE); gtk_window_set_title (GTK_WINDOW (private->window), _("Preferences")); gtk_signal_connect (GTK_OBJECT (private->window), "delete_event", GTK_SIGNAL_FUNC (g_segy_preferences_window_close_handler), (gpointer)G_OBJECT (self)); private->vbox = gtk_vbox_new (FALSE, 3); gtk_container_add (GTK_CONTAINER (private->window), private->vbox); private->size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); private->table = gtk_table_new (4, 2, FALSE); gtk_container_set_border_width (GTK_CONTAINER (private->table), 5); gtk_table_set_row_spacings (GTK_TABLE (private->table), 5); gtk_table_set_col_spacings (GTK_TABLE (private->table), 10); private->signal_label = gtk_label_new (_("Signal")); gtk_misc_set_alignment (GTK_MISC (private->signal_label), 0, 1); gtk_table_attach (GTK_TABLE (private->table), private->signal_label, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); private->signal_combo = gtk_combo_box_new_text (); gtk_combo_box_append_text (GTK_COMBO_BOX (private->signal_combo), _("Autodetect")); gtk_combo_box_append_text (GTK_COMBO_BOX (private->signal_combo), _("Bipolar")); gtk_combo_box_append_text (GTK_COMBO_BOX (private->signal_combo), _("Unipolar")); gtk_combo_box_set_active (GTK_COMBO_BOX (private->signal_combo), private->data_view_pref.signal); gtk_table_attach (GTK_TABLE (private->table), private->signal_combo, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); gtk_signal_connect (GTK_OBJECT (private->signal_combo), "changed", GTK_SIGNAL_FUNC (g_segy_preferences_signal_combo_changed_handler), (gpointer)G_OBJECT (self)); gtk_size_group_add_widget (GTK_SIZE_GROUP (private->size_group), private->signal_combo); private->coloring_label = gtk_label_new (_("Coloring")); gtk_misc_set_alignment (GTK_MISC (private->coloring_label), 0, 1); gtk_table_attach (GTK_TABLE (private->table), private->coloring_label, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, 0, 0, 0); private->coloring_combo = gtk_combo_box_new_text (); gtk_combo_box_append_text (GTK_COMBO_BOX (private->coloring_combo), _("Symmetric")); gtk_combo_box_append_text (GTK_COMBO_BOX (private->coloring_combo), _("Asymmetric")); gtk_combo_box_set_active (GTK_COMBO_BOX (private->coloring_combo), private->data_view_pref.coloring); gtk_table_attach (GTK_TABLE (private->table), private->coloring_combo, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 0, 0); gtk_signal_connect (GTK_OBJECT (private->coloring_combo), "changed", GTK_SIGNAL_FUNC (g_segy_preferences_coloring_combo_changed_handler), (gpointer)G_OBJECT (self)); gtk_widget_set_sensitive (private->coloring_combo, FALSE); gtk_size_group_add_widget (GTK_SIZE_GROUP (private->size_group), private->coloring_combo); private->first_key_label = gtk_label_new (_("1st key order")); gtk_misc_set_alignment (GTK_MISC (private->first_key_label), 0, 1); gtk_table_attach (GTK_TABLE (private->table), private->first_key_label, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, 0, 0, 0); private->first_key_combo = gtk_combo_box_new_text (); gtk_combo_box_append_text (GTK_COMBO_BOX (private->first_key_combo), _("Ascending")); gtk_combo_box_append_text (GTK_COMBO_BOX (private->first_key_combo), _("Descending")); gtk_combo_box_set_active (GTK_COMBO_BOX (private->first_key_combo), private->data_view_pref.first_key_order); gtk_table_attach (GTK_TABLE (private->table), private->first_key_combo, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, 0, 0, 0); gtk_signal_connect (GTK_OBJECT (private->first_key_combo), "changed", GTK_SIGNAL_FUNC (g_segy_preferences_first_key_combo_changed_handler), (gpointer)G_OBJECT (self)); gtk_size_group_add_widget (GTK_SIZE_GROUP (private->size_group), private->first_key_combo); private->second_key_label = gtk_label_new (_("2nd key order")); gtk_misc_set_alignment (GTK_MISC (private->second_key_label), 0, 1); gtk_table_attach (GTK_TABLE (private->table), private->second_key_label, 0, 1, 3, 4, GTK_EXPAND | GTK_FILL, 0, 0, 0); private->second_key_combo = gtk_combo_box_new_text (); gtk_combo_box_append_text (GTK_COMBO_BOX (private->second_key_combo), _("Ascending")); gtk_combo_box_append_text (GTK_COMBO_BOX (private->second_key_combo), _("Descending")); gtk_combo_box_set_active (GTK_COMBO_BOX (private->second_key_combo), private->data_view_pref.second_key_order); gtk_table_attach (GTK_TABLE (private->table), private->second_key_combo, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, 0, 0, 0); gtk_signal_connect (GTK_OBJECT (private->second_key_combo), "changed", GTK_SIGNAL_FUNC (g_segy_preferences_second_key_combo_changed_handler), (gpointer)G_OBJECT (self)); gtk_size_group_add_widget (GTK_SIZE_GROUP (private->size_group), private->second_key_combo); gtk_box_pack_start (GTK_BOX (private->vbox), private->table, FALSE, FALSE, 3); private->generate_toggle = gtk_check_button_new_with_label (_("Generate wiggles")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (private->generate_toggle), private->data_view_pref.generate_wiggles); gtk_box_pack_start (GTK_BOX (private->vbox), private->generate_toggle, FALSE, FALSE, 3); gtk_signal_connect (GTK_OBJECT (private->generate_toggle), "toggled", GTK_SIGNAL_FUNC (g_segy_preferences_generate_toggle_handler), (gpointer)G_OBJECT (self)); private->threaded_toggle = gtk_check_button_new_with_label (_("Threaded")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (private->threaded_toggle), private->data_view_pref.threaded); gtk_box_pack_start (GTK_BOX (private->vbox), private->threaded_toggle, FALSE, FALSE, 3); gtk_signal_connect (GTK_OBJECT (private->threaded_toggle), "toggled", GTK_SIGNAL_FUNC (g_segy_preferences_threaded_toggle_handler), (gpointer)G_OBJECT (self)); gtk_box_pack_start (GTK_BOX (private->vbox), gtk_hseparator_new (), TRUE, TRUE, 5); private->button_box = gtk_hbutton_box_new (); gtk_button_box_set_layout (GTK_BUTTON_BOX (private->button_box), GTK_BUTTONBOX_SPREAD); gtk_box_pack_start (GTK_BOX (private->vbox), private->button_box, FALSE, FALSE, 5); private->close_button = gtk_button_new_from_stock (GTK_STOCK_CLOSE); gtk_container_add (GTK_CONTAINER (private->button_box), private->close_button); gtk_signal_connect (GTK_OBJECT (private->close_button), "clicked", GTK_SIGNAL_FUNC (g_segy_preferences_close_button_handler), (gpointer)G_OBJECT (self)); gtk_widget_show_all (private->vbox); gsegy_view_set_window_icon (GTK_WINDOW (private->window)); } return private->window;}gboolean g_segy_preferences_has_main_widget (GSEGYPreferences *self) { GSEGYPreferencesPrivate *private = G_SEGY_PREFERENCES_GET_PRIVATE (self); return (private->window != NULL);}GSEGYDataViewPref* g_segy_preferences_get_data_view_pref (GSEGYPreferences *self) { GSEGYPreferencesPrivate *private = G_SEGY_PREFERENCES_GET_PRIVATE (self); return &private->data_view_pref;}GSEGYPreferences* g_segy_preferences_new (void) { return G_SEGY_PREFERENCES (g_object_new (G_SEGY_TYPE_PREFERENCES, NULL));}static void g_segy_preferences_init (GSEGYPreferences *self) { GSEGYPreferencesPrivate *private = G_SEGY_PREFERENCES_GET_PRIVATE (self); private->window = NULL; private->vbox = NULL; private->table = NULL; private->coloring_label = NULL; private->coloring_combo = NULL; private->signal_label = NULL; private->signal_combo = NULL; private->first_key_label = NULL; private->first_key_combo = NULL; private->second_key_label = NULL; private->second_key_combo = NULL; private->generate_toggle = NULL; private->threaded_toggle = NULL; private->size_group = NULL; private->data_view_pref.signal = 0; private->data_view_pref.coloring = 0; private->data_view_pref.first_key_order = 0; private->data_view_pref.second_key_order = 0; private->data_view_pref.generate_wiggles = TRUE; private->data_view_pref.threaded = TRUE;#ifdef DEBUG g_print ("<GSEGYPreferences is inited>\n");#endif}static void g_segy_preferences_finalize (GObject *object) { GSEGYPreferences *self = G_SEGY_PREFERENCES (object); GSEGYPreferencesPrivate *private = G_SEGY_PREFERENCES_GET_PRIVATE (self); if (private->window) gtk_widget_destroy (private->window);#ifdef DEBUG g_print ("<GSEGYPreferences is finalized>\n");#endif if (G_OBJECT_CLASS (g_segy_preferences_parent_class)->finalize) G_OBJECT_CLASS (g_segy_preferences_parent_class)->finalize (object);}static void g_segy_preferences_class_init (GSEGYPreferencesClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); gobject_class->finalize = g_segy_preferences_finalize; g_type_class_add_private (klass, sizeof (GSEGYPreferencesPrivate));#ifdef DEBUG g_print ("<GSEGYPreferences class is inited>\n");#endif}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -