📄 gsegydataview.c
字号:
if (private->magnify_view_window) gtk_widget_hide (private->magnify_view_window); g_segy_view_scaling_enable_viewport_change (private->view_scaling, TRUE); gtk_seis_view_gl_set_active_tool (GTK_SEIS_VIEW_GL (private->seis_view_gl), G_SEIS_VIEW_TOOL (private->trace_tool)); private->show_trace_info = TRUE;}static void g_segy_data_view_fullscreen_handler (GSEGYToolPanel *tool_panel, gpointer data) { GSEGYDataViewPrivate *private = G_SEGY_DATA_VIEW_GET_PRIVATE (G_SEGY_DATA_VIEW (data)); if (private->fullscreen) gtk_window_unfullscreen (GTK_WINDOW (private->data_window)); else gtk_window_fullscreen (GTK_WINDOW (private->data_window)); private->fullscreen = !private->fullscreen;}static void g_segy_data_view_scaling_handler (GSEGYToolPanel *tool_panel, gpointer data) { GSEGYDataViewPrivate *private = G_SEGY_DATA_VIEW_GET_PRIVATE (G_SEGY_DATA_VIEW (data)); gtk_widget_show (g_segy_view_scaling_get_main_widget (private->view_scaling)); gtk_window_present (GTK_WINDOW (g_segy_view_scaling_get_main_widget (private->view_scaling)));}static void g_segy_data_view_save_image_handler (GSEGYToolPanel *tool_panel, gpointer data) { GSEGYDataViewPrivate *private = G_SEGY_DATA_VIEW_GET_PRIVATE (G_SEGY_DATA_VIEW (data)); gtk_widget_show (g_segy_save_image_get_main_widget (private->save_image)); gtk_window_present (GTK_WINDOW (g_segy_save_image_get_main_widget (private->save_image)));}static void g_segy_data_view_color_manager_handler (GSEGYToolPanel *tool_panel, gpointer data) { GSEGYDataViewPrivate *private = G_SEGY_DATA_VIEW_GET_PRIVATE (G_SEGY_DATA_VIEW (data)); gtk_widget_show (g_segy_color_manager_get_main_widget (private->color_manager)); gtk_window_present (GTK_WINDOW (g_segy_color_manager_get_main_widget (private->color_manager)));}static void g_segy_data_view_properties_handler (GSEGYToolPanel *tool_panel, gpointer data) { GSEGYDataViewPrivate *private = G_SEGY_DATA_VIEW_GET_PRIVATE (G_SEGY_DATA_VIEW (data)); gtk_widget_show (g_segy_properties_get_main_widget (private->properties)); gtk_window_present (GTK_WINDOW (g_segy_properties_get_main_widget (private->properties)));}void g_segy_data_view_show (GSEGYDataView *self) { GSEGYDataViewPrivate *private = G_SEGY_DATA_VIEW_GET_PRIVATE (self); if (NULL == private->data_window) g_segy_data_view_get_main_widget (self); if (FALSE == GTK_WIDGET_REALIZED (private->data_window)) { gtk_widget_show (private->data_window); if (FALSE == private->ensemble_select) g_segy_data_view_select_ensemble (self); else g_segy_ensemble_select_reset (private->ensemble_select); return; } gtk_window_present (GTK_WINDOW (private->data_window)); gtk_widget_show (private->handle); if (private->ensemble_select) gtk_widget_show (g_segy_ensemble_select_get_main_widget (private->ensemble_select));}void g_segy_data_view_hide (GSEGYDataView *self) { GSEGYDataViewPrivate *private = G_SEGY_DATA_VIEW_GET_PRIVATE (self); if (NULL == private->data_window) return; if (GTK_WIDGET_MAPPED (private->data_window)) { gtk_widget_hide (private->handle); gtk_widget_hide (private->data_window); if (private->ensemble_select) { g_segy_ensemble_select_stop_animation (private->ensemble_select); gtk_widget_hide (g_segy_ensemble_select_get_main_widget (private->ensemble_select)); } if (g_segy_view_scaling_has_main_widget (private->view_scaling)) gtk_widget_hide (g_segy_view_scaling_get_main_widget (private->view_scaling)); if (g_segy_save_image_has_main_widget (private->save_image)) gtk_widget_hide (g_segy_save_image_get_main_widget (private->save_image)); if (g_segy_color_manager_has_main_widget (private->color_manager)) gtk_widget_hide (g_segy_color_manager_get_main_widget (private->color_manager)); if (g_segy_properties_has_main_widget (private->properties)) gtk_widget_hide (g_segy_properties_get_main_widget (private->properties)); if (private->magnify_view_window) gtk_widget_hide (private->magnify_view_window); if (private->trace_info_window) gtk_widget_hide (private->trace_info_window); }}static gboolean g_segy_data_view_key_event_handler (GtkWidget *widget, GdkEventKey *event, gpointer data) { GSEGYDataViewPrivate *private = G_SEGY_DATA_VIEW_GET_PRIVATE (G_SEGY_DATA_VIEW (data)); if (GDK_F11 == event->keyval) g_segy_data_view_fullscreen_handler (private->tool_panel, data); return FALSE;}GtkWidget* g_segy_data_view_get_main_widget (GSEGYDataView *self) { GSEGYDataViewPrivate *private = G_SEGY_DATA_VIEW_GET_PRIVATE (self); if (NULL == private->data_window) { gint root_width, root_height; gdk_drawable_get_size (GDK_DRAWABLE (gdk_get_default_root_window ()), &root_width, &root_height); private->data_window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (private->data_window), 7); gtk_widget_set_size_request (GTK_WIDGET (private->data_window), 730, 570); if (root_height < root_width) gtk_window_set_default_size (GTK_WINDOW (private->data_window), root_height * 0.8, root_height * 0.8); else gtk_window_set_default_size (GTK_WINDOW (private->data_window), root_width * 0.8, root_width * 0.8); gtk_window_set_modal (GTK_WINDOW (private->data_window), FALSE); if (private->name) gtk_window_set_title (GTK_WINDOW (private->data_window), private->name); gtk_signal_connect (GTK_OBJECT (private->data_window), "delete_event", GTK_SIGNAL_FUNC (g_segy_data_view_close_handler), (gpointer)G_OBJECT (self)); gtk_signal_connect (GTK_OBJECT (private->data_window), "key-press-event", GTK_SIGNAL_FUNC (g_segy_data_view_key_event_handler), (gpointer)G_OBJECT (self)); private->main_vbox = gtk_vbox_new (FALSE, 2); gtk_container_add (GTK_CONTAINER (private->data_window), private->main_vbox); private->handle = gtk_handle_box_new (); gtk_handle_box_set_shadow_type (GTK_HANDLE_BOX (private->handle), GTK_SHADOW_IN); gtk_handle_box_set_handle_position (GTK_HANDLE_BOX (private->handle), GTK_POS_LEFT); gtk_handle_box_set_snap_edge (GTK_HANDLE_BOX (private->handle), GTK_POS_TOP); gtk_container_set_border_width (GTK_CONTAINER (private->handle), 0); gtk_box_pack_start (GTK_BOX (private->main_vbox), private->handle, FALSE, FALSE, 0); private->top_hbox = gtk_hbox_new (FALSE, 2); gtk_container_set_border_width (GTK_CONTAINER (private->top_hbox), 3); gtk_container_add (GTK_CONTAINER (private->handle), private->top_hbox); private->bottom_hbox = gtk_hbox_new (FALSE, 2); gtk_box_pack_start (GTK_BOX (private->main_vbox), private->bottom_hbox, TRUE, TRUE, 0); gtk_widget_show_all (private->main_vbox); private->seis_view_frame = gtk_frame_new (NULL); g_segy_seismic_accessor_get_labels_for_first_level (private->seismic_accessor, &private->ensembles_chunk, &private->ensembles_labels); if (private->data_view_pref) private->seis_view_is_threaded = private->data_view_pref->threaded; if (private->seis_view_is_threaded) private->seis_view_gl = gtk_seis_view_gl_new_threaded (); else private->seis_view_gl = gtk_seis_view_gl_new (); gtk_container_add (GTK_CONTAINER (private->seis_view_frame), private->seis_view_gl); gtk_widget_show (private->seis_view_gl); g_signal_connect (G_OBJECT (private->seis_view_gl), "data_is_set", (GCallback)g_segy_data_view_data_is_set_handler, (gpointer)self); private->motion_tool = g_seis_view_tool_motion_new (); private->hlight_tool = g_seis_view_tool_highlight_new (); private->scale_tool = g_seis_view_tool_scale_new (); private->aux_tool = g_seis_view_tool_auxilary_new (); g_seis_view_tool_set_alt_tool1 (G_SEIS_VIEW_TOOL (private->motion_tool), G_SEIS_VIEW_TOOL (private->hlight_tool)); g_seis_view_tool_set_alt_tool2 (G_SEIS_VIEW_TOOL (private->motion_tool), G_SEIS_VIEW_TOOL (private->scale_tool)); g_seis_view_tool_set_alt_tool3 (G_SEIS_VIEW_TOOL (private->motion_tool), G_SEIS_VIEW_TOOL (private->aux_tool)); gtk_seis_view_gl_set_active_tool (GTK_SEIS_VIEW_GL (private->seis_view_gl), G_SEIS_VIEW_TOOL (private->motion_tool)); if (private->ensembles_labels) { g_signal_connect (G_OBJECT (private->hlight_tool), "highlight_scroll_up", (GCallback)g_segy_data_view_hlight_scroll_up_handler, (gpointer)self); g_signal_connect (G_OBJECT (private->hlight_tool), "highlight_scroll_down", (GCallback)g_segy_data_view_hlight_scroll_down_handler, (gpointer)self); } g_signal_connect (G_OBJECT (private->aux_tool), "auxilary_scroll_up", (GCallback)g_segy_data_view_aux_scroll_up_handler, (gpointer)self); g_signal_connect (G_OBJECT (private->aux_tool), "auxilary_scroll_down", (GCallback)g_segy_data_view_aux_scroll_down_handler, (gpointer)self); private->magnify_tool = g_seis_view_tool_magnify_new (); g_seis_view_tool_set_alt_tool3 (G_SEIS_VIEW_TOOL (private->magnify_tool), G_SEIS_VIEW_TOOL (private->aux_tool)); private->trace_info = g_segy_trace_info_new (); private->trace_tool = g_seis_view_tool_highlight_new (); g_seis_view_tool_highlight_set_rubberband_selection (private->trace_tool, FALSE); g_seis_view_tool_set_alt_tool3 (G_SEIS_VIEW_TOOL (private->trace_tool), G_SEIS_VIEW_TOOL (private->aux_tool)); g_signal_connect (G_OBJECT (private->seis_view_gl), "notify::highlight-area-start", (GCallback)g_segy_data_view_hightlight_area_start_handler, (gpointer)self); g_signal_connect (G_OBJECT (private->trace_tool), "highlight_scroll_up", (GCallback)g_segy_data_view_trace_info_scroll_up_handler, (gpointer)self); g_signal_connect (G_OBJECT (private->trace_tool), "highlight_scroll_down", (GCallback)g_segy_data_view_trace_info_scroll_down_handler, (gpointer)self); private->show_trace_info = FALSE; if (private->data_view_pref->generate_wiggles) { gtk_box_pack_start (GTK_BOX (private->top_hbox), gtk_label_new (NULL), FALSE, FALSE, 0); private->wiggle_panel = g_segy_wiggle_panel_new (); gtk_box_pack_start (GTK_BOX (private->top_hbox), g_segy_wiggle_panel_get_main_widget (private->wiggle_panel), FALSE, FALSE, 0); g_signal_connect (G_OBJECT (private->wiggle_panel), "display_mode_change", (GCallback)g_segy_data_view_display_mode_change_handler, (gpointer)self); g_signal_connect (G_OBJECT (private->wiggle_panel), "va_fill_mode_change", (GCallback)g_segy_data_view_va_fill_mode_change_handler, (gpointer)self); g_signal_connect (G_OBJECT (private->wiggle_panel), "polarity_change", (GCallback)g_segy_data_view_polarity_change_handler, (gpointer)self); } private->middle_vbox = gtk_vbox_new (FALSE, 3); gtk_box_pack_start (GTK_BOX (private->top_hbox), private->middle_vbox, FALSE, FALSE, 3); gtk_box_pack_start (GTK_BOX (private->middle_vbox), gtk_vbox_new (FALSE, 0), FALSE, FALSE, 2); gtk_widget_show_all (private->middle_vbox); private->tool_panel = g_segy_tool_panel_new (); gtk_box_pack_start (GTK_BOX (private->middle_vbox), g_segy_tool_panel_get_main_widget (private->tool_panel), FALSE, FALSE, 0); g_signal_connect (G_OBJECT (private->tool_panel), "motion_tool", (GCallback)g_segy_data_view_motion_tool_handler, (gpointer)self); g_signal_connect (G_OBJECT (private->tool_panel), "magnify_tool", (GCallback)g_segy_data_view_magnify_tool_handler, (gpointer)self); g_signal_connect (G_OBJECT (private->tool_panel), "highlight_tool", (GCallback)g_segy_data_view_highlight_tool_handler, (gpointer)self); g_signal_connect (G_OBJECT (private->tool_panel), "fullscreen", (GCallback)g_segy_data_view_fullscreen_handler, (gpointer)self); g_signal_connect (G_OBJECT (private->tool_panel), "scaling", (GCallback)g_segy_data_view_scaling_handler, (gpointer)self); g_signal_connect (G_OBJECT (private->tool_panel), "save_image", (GCallback)g_segy_data_view_save_image_handler, (gpointer)self); g_signal_connect (G_OBJECT (private->tool_panel), "color_manager", (GCallback)g_segy_data_view_color_manager_handler, (gpointer)self); g_signal_connect (G_OBJECT (private->tool_panel), "properties", (GCallback)g_segy_data_view_properties_handler, (gpointer)self); private->cursor_panel = g_segy_cursor_panel_new (GTK_SEIS_VIEW_GL (private->seis_view_gl), private->seismic_accessor); gtk_box_pack_start (GTK_BOX (private->middle_vbox), g_segy_cursor_panel_get_main_widget (private->cursor_panel), TRUE, TRUE, 2); private->gain_panel = g_segy_gain_panel_new (); gtk_box_pack_start (GTK_BOX (private->top_hbox), g_segy_gain_panel_get_main_widget (private->gain_panel), FALSE, FALSE, 0); g_signal_connect (G_OBJECT (private->gain_panel), "minmax_mode_change", (GCallback)g_segy_data_view_minmax_mode_change_handler, (gpointer)self); g_signal_connect (G_OBJECT (private->gain_panel), "agc_use_change", (GCallback)g_segy_data_view_use_agc_change_handler, (gpointer)self); g_signal_connect (G_OBJECT (private->gain_panel), "reload_data_request", (GCallback)g_segy_data_view_reload_data_handler, (gpointer)self); gtk_box_pack_start (GTK_BOX (private->top_hbox), gtk_label_new (NULL), FALSE, FALSE, 0); if (private->ensembles_labels) { private->ensemble_select = g_segy_ensemble_select_new (private->ensembles_labels); gtk_box_pack_start (GTK_BOX (private->bottom_hbox), g_segy_ensemble_select_get_main_widget (private->ensemble_select), FALSE, FALSE, 0); g_signal_connect (G_OBJECT (private->ensemble_select), "ensemble_select", (GCallback)g_segy_data_view_ensemble_select_handler, (gpointer)self); GPtrArray *sort_labels = g_segy_seismic_accessor_get_sorting_fields_names (private->seismic_accessor); guint16 first_level_id = g_segy_seismic_accessor_get_first_level_sort_id (private->seismic_accessor) - 1; g_segy_ensemble_select_set_title (private->ensemble_select, g_ptr_array_index (sort_labels, first_level_id)); } private->view_scaling = g_segy_view_scaling_new (GTK_SEIS_VIEW_GL (private->seis_view_gl)); private->save_image = g_segy_save_image_new (GTK_SEIS_VIEW_GL (private->seis_view_gl), private->data_window); private->color_manager = g_segy_color_manager_new (g_seis_view_get_predefined_palettes (), GTK_SEIS_VIEW_GL (private->seis_view_gl)); private->properties = g_segy_properties_new (GTK_SEIS_VIEW_GL (private->seis_view_gl), private->seismic_accessor, private->cursor_panel, private->ensembles_labels != NULL); gtk_box_pack_start (GTK_BOX (private->bottom_hbox), private->seis_view_frame, TRUE, TRUE, 0); gtk_widget_show_all (private->seis_view_frame); gtk_widget_grab_focus (private->seis_view_gl); if (private->data_view_pref) { gtk_seis_view_gl_set_generate_wiggles (GTK_SEIS_VIEW_GL (private->seis_view_gl), private->data_view_pref->generate_wiggles); gtk_seis_view_gl_set_signal_type (GTK_SEIS_VIEW_GL (private->seis_view_gl), (GtkSeisViewSignal)private->data_view_pref->signal); gtk_seis_view_gl_set_coloring_mode (GTK_SEIS_VIEW_GL (private->seis_view_gl), (GtkSeisViewColoring)private->data_view_pref->coloring); } private->window_group = gtk_window_group_new (); gtk_window_group_add_window (private->window_group, GTK_WINDOW (private->data_window)); gsegy_view_set_window_icon (GTK_WINDOW (private->data_window)); } return private->data_window;}void g_segy_data_view_set_data_view_pref (GSEGYDataView *self, GSEGYDataViewPref *data_view_pref) { GSEGYDataViewPrivate *private = G_SEGY_DATA_VIEW_GET_PRIVATE (self); private->data_view_pref = data_view_pref; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -