📄 gsegyensembleselect.c
字号:
private->restart_animation = FALSE; private->time_elapsed = 0; g_timer_start (private->animation_timer); g_idle_add (g_segy_ensemble_select_animate, (gpointer)self); private->animation_timeout_source = 0; return FALSE; } private->time_elapsed = g_timer_elapsed (private->animation_timer, NULL); if (private->block_selection || private->time_elapsed < private->animation_delay / 1000.0) { if (0 == private->animation_timeout_source) { private->animation_timeout_source = g_timeout_add (MIN_ANIMATION_DELAY, g_segy_ensemble_select_animate, (gpointer)self); return FALSE; } else return TRUE; } private->time_elapsed -= private->animation_delay / 1000.0; if (private->time_elapsed < 0) private->time_elapsed = 0; gboolean result; g_timer_start (private->animation_timer); if (private->forward_animation) result = g_segy_ensemble_select_next_ensemble (self); else result = g_segy_ensemble_select_previous_ensemble (self); if (FALSE == result) { private->stop_animation = TRUE; g_timer_stop (private->animation_timer); gdk_threads_enter (); gtk_widget_set_sensitive (private->stop_ensemble_button, FALSE); gdk_threads_leave (); } else if (0 == private->animation_timeout_source) { private->animation_timeout_source = g_timeout_add (MIN_ANIMATION_DELAY, g_segy_ensemble_select_animate, (gpointer)self); return FALSE; } return result;}static void g_segy_ensemble_select_start_animation (GSEGYEnsembleSelect *self) { GSEGYEnsembleSelectPrivate *private = G_SEGY_ENSEMBLE_SELECT_GET_PRIVATE (self); if (private->stop_animation) { private->stop_animation = FALSE; gtk_widget_set_sensitive (private->stop_ensemble_button, TRUE); private->time_elapsed = 0; g_timer_start (private->animation_timer); g_idle_add (g_segy_ensemble_select_animate, (gpointer)self); } else { private->stop_animation = FALSE; private->restart_animation = TRUE; }}static void g_segy_ensemble_select_backward_animation_handler (GtkWidget *widget, gpointer data) { GSEGYEnsembleSelect *self = G_SEGY_ENSEMBLE_SELECT (data); GSEGYEnsembleSelectPrivate *private = G_SEGY_ENSEMBLE_SELECT_GET_PRIVATE (self); private->forward_animation = FALSE; g_segy_ensemble_select_start_animation (self);}static void g_segy_ensemble_select_forward_animation_handler (GtkWidget *widget, gpointer data) { GSEGYEnsembleSelect *self = G_SEGY_ENSEMBLE_SELECT (data); GSEGYEnsembleSelectPrivate *private = G_SEGY_ENSEMBLE_SELECT_GET_PRIVATE (self); private->forward_animation = TRUE; g_segy_ensemble_select_start_animation (self);}static void g_segy_ensemble_select_stop_animation_handler (GtkWidget *widget, gpointer data) { GSEGYEnsembleSelectPrivate *private = G_SEGY_ENSEMBLE_SELECT_GET_PRIVATE (G_SEGY_ENSEMBLE_SELECT (data)); private->stop_animation = TRUE;}void g_segy_ensemble_select_stop_animation (GSEGYEnsembleSelect *self) { GSEGYEnsembleSelectPrivate *private = G_SEGY_ENSEMBLE_SELECT_GET_PRIVATE (self); private->stop_animation = TRUE;}static void g_segy_ensemble_select_list_selection_handler (GtkTreeView *treeview, gpointer data) { GSEGYEnsembleSelect *self = G_SEGY_ENSEMBLE_SELECT (data); GSEGYEnsembleSelectPrivate *private = G_SEGY_ENSEMBLE_SELECT_GET_PRIVATE (self); if (FALSE == private->block_selection) { g_segy_ensemble_select_get_selection (self); g_segy_ensemble_select_ensemble_select_signal (self); }}static void g_segy_ensemble_select_animation_delay_handler (GtkWidget *widget, gpointer data) { GSEGYEnsembleSelectPrivate *private = G_SEGY_ENSEMBLE_SELECT_GET_PRIVATE (G_SEGY_ENSEMBLE_SELECT (data)); private->animation_delay = gtk_range_get_value (GTK_RANGE (widget)); if (FALSE == private->stop_animation) private->restart_animation = TRUE;}void g_segy_ensemble_select_reset (GSEGYEnsembleSelect *self) { GSEGYEnsembleSelectPrivate *private = G_SEGY_ENSEMBLE_SELECT_GET_PRIVATE (self); private->list_selection = 0; if (private->stop_animation) g_segy_ensemble_select_set_selection (self);}void g_segy_ensemble_select_set_title (GSEGYEnsembleSelect *self, const gchar *text) { GSEGYEnsembleSelectPrivate *private = G_SEGY_ENSEMBLE_SELECT_GET_PRIVATE (self); gtk_tree_view_column_set_title (gtk_tree_view_get_column (GTK_TREE_VIEW (private->tree_view), 0), text);}GtkWidget* g_segy_ensemble_select_get_main_widget (GSEGYEnsembleSelect *self) { GSEGYEnsembleSelectPrivate *private = G_SEGY_ENSEMBLE_SELECT_GET_PRIVATE (self); if (NULL == private->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_TOP); gtk_handle_box_set_snap_edge (GTK_HANDLE_BOX (private->handle), GTK_POS_LEFT); gtk_container_set_border_width (GTK_CONTAINER (private->handle), 5); private->ensemble_select_tips = gtk_tooltips_new (); g_object_ref (G_OBJECT (private->ensemble_select_tips)); gtk_object_sink (GTK_OBJECT (private->ensemble_select_tips)); private->vbox = gtk_vbox_new (FALSE, 3); gtk_container_add (GTK_CONTAINER (private->handle), private->vbox); private->scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (private->scrolled_window), GTK_SHADOW_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (private->scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_widget_set_size_request (GTK_WIDGET (private->scrolled_window), 20, 400); gtk_box_pack_start (GTK_BOX (private->vbox), private->scrolled_window, TRUE, TRUE, 0); private->tree_view = gtk_tree_view_new (); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (private->tree_view), TRUE); gtk_tree_view_set_reorderable (GTK_TREE_VIEW (private->tree_view), FALSE); gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (private->tree_view)), GTK_SELECTION_SINGLE); private->ensemble_cell_renderer = gtk_cell_renderer_text_new (); g_object_set (G_OBJECT (private->ensemble_cell_renderer), "xalign", 1.0, "xpad", 5, NULL); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (private->tree_view), -1, "Ensemble", private->ensemble_cell_renderer, "text", 0, NULL); gtk_tree_view_column_set_alignment (gtk_tree_view_get_column (GTK_TREE_VIEW (private->tree_view), 0), 0.97); private->ensemble_list_store = gtk_list_store_new (1, G_TYPE_STRING); GtkTreeIter iter; guint i; for (i = 0; i < private->labels->len; i++) { gtk_list_store_append (private->ensemble_list_store, &iter); gtk_list_store_set (private->ensemble_list_store, &iter, 0, (const gchar*)g_ptr_array_index (private->labels, i), -1); } gtk_tree_view_set_model (GTK_TREE_VIEW (private->tree_view), GTK_TREE_MODEL (private->ensemble_list_store)); gtk_tree_view_set_headers_clickable (GTK_TREE_VIEW (private->tree_view), FALSE); gtk_container_add (GTK_CONTAINER (private->scrolled_window), private->tree_view); gtk_signal_connect (GTK_OBJECT (private->tree_view), "cursor-changed", GTK_SIGNAL_FUNC (g_segy_ensemble_select_list_selection_handler), (gpointer)G_OBJECT (self)); private->animation_delay_frame = gtk_frame_new (_("Animation delay")); gtk_box_pack_start (GTK_BOX (private->vbox), private->animation_delay_frame, FALSE, FALSE, 2); private->animation_delay_vbox = gtk_vbox_new (TRUE, 3); gtk_container_set_border_width (GTK_CONTAINER (private->animation_delay_vbox), 2); gtk_container_add (GTK_CONTAINER (private->animation_delay_frame), private->animation_delay_vbox); private->animation_delay_scale = gtk_hscale_new_with_range (MIN_ANIMATION_DELAY, MIN_ANIMATION_DELAY * 20, MIN_ANIMATION_DELAY); gtk_scale_set_draw_value (GTK_SCALE (private->animation_delay_scale), FALSE); gtk_box_pack_start (GTK_BOX (private->animation_delay_vbox), private->animation_delay_scale, FALSE, FALSE, 2); gtk_signal_connect (GTK_OBJECT (private->animation_delay_scale), "value_changed", GTK_SIGNAL_FUNC (g_segy_ensemble_select_animation_delay_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->backward_ensemble_button = gtk_button_new ();#if GTK_MAJOR_VERSION == 2 && GTK_MINOR_VERSION <= 4 private->backward_ensemble_icon = gtk_image_new_from_stock (GTK_STOCK_GOTO_FIRST, GTK_ICON_SIZE_MENU);#else private->backward_ensemble_icon = gtk_image_new_from_stock (GTK_STOCK_MEDIA_REWIND, GTK_ICON_SIZE_MENU);#endif gtk_container_add (GTK_CONTAINER (private->backward_ensemble_button), private->backward_ensemble_icon); gtk_box_pack_start (GTK_BOX (private->hbox), private->backward_ensemble_button, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (private->backward_ensemble_button), "clicked", GTK_SIGNAL_FUNC (g_segy_ensemble_select_backward_animation_handler), (gpointer)G_OBJECT (self)); gtk_tooltips_set_tip (GTK_TOOLTIPS (private->ensemble_select_tips), private->backward_ensemble_button, _("Animate backward"), _("This button activates the backward" "animation of ensembles.")); private->previous_ensemble_button = gtk_button_new ();#if GTK_MAJOR_VERSION == 2 && GTK_MINOR_VERSION <= 4 private->previous_ensemble_icon = gtk_image_new_from_stock (GTK_STOCK_GO_BACK, GTK_ICON_SIZE_MENU);#else private->previous_ensemble_icon = gtk_image_new_from_stock (GTK_STOCK_MEDIA_PREVIOUS, GTK_ICON_SIZE_MENU);#endif gtk_container_add (GTK_CONTAINER (private->previous_ensemble_button), private->previous_ensemble_icon); gtk_box_pack_start (GTK_BOX (private->hbox), private->previous_ensemble_button, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (private->previous_ensemble_button), "clicked", GTK_SIGNAL_FUNC (g_segy_ensemble_select_previous_ensemble_handler), (gpointer)G_OBJECT (self)); gtk_tooltips_set_tip (GTK_TOOLTIPS (private->ensemble_select_tips), private->previous_ensemble_button, _("Previous ensemble"), _("This button selects the previous ensemble.")); private->stop_ensemble_button = gtk_button_new ();#if GTK_MAJOR_VERSION == 2 && GTK_MINOR_VERSION <= 4 private->stop_ensemble_icon = gtk_image_new_from_stock (GTK_STOCK_STOP, GTK_ICON_SIZE_MENU);#else private->stop_ensemble_icon = gtk_image_new_from_stock (GTK_STOCK_MEDIA_STOP, GTK_ICON_SIZE_MENU);#endif gtk_container_add (GTK_CONTAINER (private->stop_ensemble_button), private->stop_ensemble_icon); gtk_box_pack_start (GTK_BOX (private->hbox), private->stop_ensemble_button, FALSE, FALSE, 0); gtk_widget_set_sensitive (private->stop_ensemble_button, FALSE); gtk_signal_connect (GTK_OBJECT (private->stop_ensemble_button), "clicked", GTK_SIGNAL_FUNC (g_segy_ensemble_select_stop_animation_handler), (gpointer)G_OBJECT (self)); gtk_tooltips_set_tip (GTK_TOOLTIPS (private->ensemble_select_tips), private->stop_ensemble_button, _("Stop animation"), _("This button stops the animation.")); private->next_ensemble_button = gtk_button_new ();#if GTK_MAJOR_VERSION == 2 && GTK_MINOR_VERSION <= 4 private->next_ensemble_icon = gtk_image_new_from_stock (GTK_STOCK_GO_FORWARD, GTK_ICON_SIZE_MENU);#else private->next_ensemble_icon = gtk_image_new_from_stock (GTK_STOCK_MEDIA_NEXT, GTK_ICON_SIZE_MENU);#endif gtk_container_add (GTK_CONTAINER (private->next_ensemble_button), private->next_ensemble_icon); gtk_box_pack_start (GTK_BOX (private->hbox), private->next_ensemble_button, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (private->next_ensemble_button), "clicked", GTK_SIGNAL_FUNC (g_segy_ensemble_select_next_ensemble_handler), (gpointer)G_OBJECT (self)); gtk_tooltips_set_tip (GTK_TOOLTIPS (private->ensemble_select_tips), private->next_ensemble_button, _("Next ensemble"), _("This button selects the next ensemble.")); private->forward_ensemble_button = gtk_button_new ();#if GTK_MAJOR_VERSION == 2 && GTK_MINOR_VERSION <= 4 private->forward_ensemble_icon = gtk_image_new_from_stock (GTK_STOCK_GOTO_LAST, GTK_ICON_SIZE_MENU);#else private->forward_ensemble_icon = gtk_image_new_from_stock (GTK_STOCK_MEDIA_FORWARD, GTK_ICON_SIZE_MENU);#endif gtk_container_add (GTK_CONTAINER (private->forward_ensemble_button), private->forward_ensemble_icon); gtk_box_pack_start (GTK_BOX (private->hbox), private->forward_ensemble_button, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (private->forward_ensemble_button), "clicked", GTK_SIGNAL_FUNC (g_segy_ensemble_select_forward_animation_handler), (gpointer)G_OBJECT (self)); gtk_tooltips_set_tip (GTK_TOOLTIPS (private->ensemble_select_tips), private->forward_ensemble_button, _("Animate forward"), _("This button activates the forward" "animation of ensembles.")); gtk_widget_show_all (private->handle); } return private->handle;}GSEGYEnsembleSelect* g_segy_ensemble_select_new (GPtrArray *labels) { GSEGYEnsembleSelect *new_ensemble_select = G_SEGY_ENSEMBLE_SELECT (g_object_new (G_SEGY_TYPE_ENSEMBLE_SELECT, NULL)); GSEGYEnsembleSelectPrivate *private = G_SEGY_ENSEMBLE_SELECT_GET_PRIVATE (new_ensemble_select); private->labels = labels; return new_ensemble_select;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -