📄 gui_main.c
字号:
}#else set_bps_label(disp_info.bps, 0, 0);#endif /* HAVE_MPEG */ set_mono_label(disp_info.is_mono); set_output_label(output, out_SR); set_src_type_label(src_type);}voidzero_displays(void) { disp_info.total_samples = 0; disp_info.sample_rate = 0; disp_info.is_mono = 0; disp_info.format_major = 0; disp_info.format_minor = 0; disp_info.bps = 0; disp_samples = 0; disp_pos = 0; refresh_displays();}voidsave_window_position(void) { gtk_window_get_position(GTK_WINDOW(main_window), &main_pos_x, &main_pos_y); if (!options.playlist_is_embedded && playlist_on) { gtk_window_get_position(GTK_WINDOW(playlist_window), &playlist_pos_x, &playlist_pos_y); } if (browser_on) { gtk_window_get_position(GTK_WINDOW(browser_window), &browser_pos_x, &browser_pos_y); } gtk_window_get_size(GTK_WINDOW(main_window), &main_size_x, &main_size_y); gtk_window_get_size(GTK_WINDOW(browser_window), &browser_size_x, &browser_size_y); if (!options.playlist_is_embedded) { gtk_window_get_size(GTK_WINDOW(playlist_window), &playlist_size_x, &playlist_size_y); } else { playlist_size_x = playlist_window->allocation.width; playlist_size_y = playlist_window->allocation.height; } if (!options.hide_comment_pane) { browser_paned_pos = gtk_paned_get_position(GTK_PANED(browser_paned)); }}voidrestore_window_position(void) { gtk_window_move(GTK_WINDOW(main_window), main_pos_x, main_pos_y); deflicker(); gtk_window_move(GTK_WINDOW(browser_window), browser_pos_x, browser_pos_y); deflicker(); if (!options.playlist_is_embedded) { gtk_window_move(GTK_WINDOW(playlist_window), playlist_pos_x, playlist_pos_y); deflicker(); } gtk_window_resize(GTK_WINDOW(main_window), main_size_x, main_size_y); deflicker(); gtk_window_resize(GTK_WINDOW(browser_window), browser_size_x, browser_size_y); deflicker(); if (!options.playlist_is_embedded) { gtk_window_resize(GTK_WINDOW(playlist_window), playlist_size_x, playlist_size_y); deflicker(); } if (!options.hide_comment_pane) { gtk_paned_set_position(GTK_PANED(browser_paned), browser_paned_pos); deflicker(); }}voidchange_skin(char * path) { int st_play = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(play_button)); int st_pause = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pause_button)); int st_r_track = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(repeat_button)); int st_r_all = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(repeat_all_button)); int st_shuffle = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(shuffle_button)); int st_fx = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(plugin_toggle)); int st_mstore = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(musicstore_toggle)); int st_plist = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(playlist_toggle));#ifdef HAVE_LADSPA GtkTreeIter iter; gpointer gp_instance; int i = 0;#endif /* HAVE_LADSPA */ char rcpath[MAXLEN]; GdkColor color; g_source_remove(timeout_tag); save_window_position(); gtk_widget_destroy(main_window); deflicker(); if (!options.playlist_is_embedded) { gtk_widget_destroy(playlist_window); deflicker(); } gtk_widget_destroy(browser_window); deflicker();#ifdef HAVE_LADSPA gtk_widget_destroy(fxbuilder_window); deflicker();#endif /* HAVE_LADSPA */ sprintf(rcpath, "%s/rc", path); gtk_rc_parse(rcpath); create_main_window(path); deflicker(); create_playlist(); deflicker(); create_music_browser(); deflicker();#ifdef HAVE_LADSPA create_fxbuilder(); deflicker();#endif /* HAVE_LADSPA */ g_signal_handler_block(G_OBJECT(play_button), play_id); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(play_button), st_play); g_signal_handler_unblock(G_OBJECT(play_button), play_id); g_signal_handler_block(G_OBJECT(pause_button), pause_id); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pause_button), st_pause); g_signal_handler_unblock(G_OBJECT(pause_button), pause_id); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(repeat_button), st_r_track); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(repeat_all_button), st_r_all); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(shuffle_button), st_shuffle); if (options.playlist_is_embedded) g_signal_handlers_block_by_func(G_OBJECT(playlist_toggle), playlist_toggled, NULL); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(playlist_toggle), st_plist); if (options.playlist_is_embedded) g_signal_handlers_unblock_by_func(G_OBJECT(playlist_toggle), playlist_toggled, NULL); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(musicstore_toggle), st_mstore); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(plugin_toggle), st_fx); gtk_widget_show_all(main_window); deflicker(); deflicker(); cover_show_flag = 0; gtk_widget_hide(cover_image_area); gtk_widget_hide(c_event_box); if (options.playlist_is_embedded) { if (!playlist_on) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(playlist_toggle), FALSE); gtk_widget_hide(playlist_window); deflicker(); } }#ifdef HAVE_LADSPA while (gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(running_store), &iter, NULL, i) && i < MAX_PLUGINS) { gtk_tree_model_get(GTK_TREE_MODEL(running_store), &iter, 1, &gp_instance, -1); gtk_widget_reset_rc_styles(((plugin_instance *)gp_instance)->window); gtk_widget_queue_draw(((plugin_instance *)gp_instance)->window); deflicker(); ++i; }#endif /* HAVE_LADSPA */ if (info_window) { gtk_widget_reset_rc_styles(info_window); gtk_widget_queue_draw(info_window); gtk_window_present(GTK_WINDOW(info_window)); deflicker(); } if (vol_window) { gtk_widget_reset_rc_styles(vol_window); gtk_widget_queue_draw(vol_window); deflicker(); } if (build_prog_window) { gtk_widget_reset_rc_styles(build_prog_window); gtk_widget_queue_draw(build_prog_window); deflicker(); }#ifdef HAVE_SYSTRAY gtk_widget_reset_rc_styles(systray_menu); gtk_widget_queue_draw(systray_menu); deflicker();#endif /* HAVE_SYSTRAY */ restore_window_position(); deflicker(); refresh_displays(); if (options.override_skin_settings && (gdk_color_parse(options.activesong_color, &color) == TRUE)) { /* it's temporary workaround - see playlist.c FIXME tag for details */ if (!color.red && !color.green && !color.blue) color.red++; play_list->style->fg[SELECTED].red = color.red; play_list->style->fg[SELECTED].green = color.green; play_list->style->fg[SELECTED].blue = color.blue; } set_playlist_color(); gtk_adjustment_set_value(GTK_ADJUSTMENT(adj_vol), vol); gtk_adjustment_set_value(GTK_ADJUSTMENT(adj_bal), bal); timeout_tag = g_timeout_add(TIMEOUT_PERIOD, timeout_callback, NULL); show_active_position_in_playlist(); gtk_widget_realize(play_list); if (options.playlist_is_embedded) { gtk_widget_grab_focus(GTK_WIDGET(play_list)); }}voidmain_window_close(GtkWidget * widget, gpointer data) { send_cmd = CMD_FINISH; rb_write(rb_gui2disk, &send_cmd, 1); try_waking_disk_thread(); vol_cancelled = 1; if (music_store_changed) { GtkWidget * dialog; dialog = gtk_message_dialog_new(GTK_WINDOW(main_window), GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _("One or more stores in Music Store have been modified.\n" "Do you want to save them before exiting?")); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_YES); gtk_container_set_border_width(GTK_CONTAINER(dialog), 5); if (aqualung_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_YES) { save_all_music_store(); } gtk_widget_destroy(dialog); } if (systray_main_window_on) { save_window_position(); } save_config();#ifdef HAVE_LADSPA save_plugin_data(); lrdf_cleanup();#endif /* HAVE_LADSPA */ if (options.auto_save_playlist) { char playlist_name[MAXLEN]; snprintf(playlist_name, MAXLEN-1, "%s/%s", options.confdir, "playlist.xml"); save_playlist(playlist_name); } pango_font_description_free(fd_playlist); pango_font_description_free(fd_browser); gtk_main_quit();}/***********************************************************************************/voidconf__options_cb(gpointer data) { create_options_window();}voidconf__skin_cb(gpointer data) { create_skin_window();}voidconf__jack_cb(gpointer data) {#ifdef HAVE_JACK port_setup_dialog();#endif /* HAVE_JACK */}voidconf__fileinfo_cb(gpointer data) { if (is_file_loaded) { GtkTreeIter dummy; const char * name = gtk_label_get_text(GTK_LABEL(label_title)); show_file_info((char *)name, current_file, 0, NULL, dummy); }}voidconf__about_cb(gpointer data) { create_about_window();}voidconf__quit_cb(gpointer data) { main_window_close(NULL, NULL);}gintvol_bal_timeout_callback(gpointer data) { refresh_time_label = 1; vol_bal_timeout_tag = 0; refresh_time_displays(); return FALSE;}voidmusicstore_toggled(GtkWidget * widget, gpointer data) { if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) { show_music_browser(); } else { hide_music_browser(); }}voidplaylist_toggled(GtkWidget * widget, gpointer data) { if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) { show_playlist(); } else { hide_playlist(); }}voidplugin_toggled(GtkWidget * widget, gpointer data) {#ifdef HAVE_LADSPA if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) { show_fxbuilder(); } else { hide_fxbuilder(); }#else /* XXX */ printf("Aqualung compiled without LADSPA plugin support.\n");#endif /* HAVE_LADSPA */}gintmain_window_key_pressed(GtkWidget * widget, GdkEventKey * event) { shift_state = event->state & GDK_SHIFT_MASK; switch (event->keyval) { case GDK_KP_Divide: refresh_time_label = 0; if (vol_bal_timeout_tag) { g_source_remove(vol_bal_timeout_tag); } vol_bal_timeout_tag = g_timeout_add(1000, vol_bal_timeout_callback, NULL); if(event->state & GDK_MOD1_MASK) { /* ALT + KP_Divide */ g_signal_emit_by_name(G_OBJECT(scale_bal), "move-slider", GTK_SCROLL_STEP_BACKWARD, NULL); } else { g_signal_emit_by_name(G_OBJECT(scale_vol), "move-slider", GTK_SCROLL_STEP_BACKWARD, NULL); } return TRUE; case GDK_KP_Multiply: refresh_time_label = 0; if (vol_bal_timeout_tag) { g_source_remove(vol_bal_timeout_tag); } vol_bal_timeout_tag = g_timeout_add(1000, vol_bal_timeout_callback, NULL); if(event->state & GDK_MOD1_MASK) { /* ALT + KP_Multiply */ g_signal_emit_by_name(G_OBJECT(scale_bal), "move-slider", GTK_SCROLL_STEP_FORWARD, NULL); } else { g_signal_emit_by_name(G_OBJECT(scale_vol), "move-slider", GTK_SCROLL_STEP_FORWARD, NULL); } return TRUE; case GDK_Right: if (is_file_loaded && allow_seeks) { refresh_scale = 0; g_signal_emit_by_name(G_OBJECT(scale_pos), "move-slider", GTK_SCROLL_STEP_FORWARD, NULL); } return TRUE; case GDK_Left: if (is_file_loaded && allow_seeks) { refresh_scale = 0; g_signal_emit_by_name(G_OBJECT(scale_pos), "move-slider", GTK_SCROLL_STEP_BACKWARD, NULL); } return TRUE; case GDK_b: case GDK_B: case GDK_period: next_event(NULL, NULL, NULL); return TRUE; case GDK_z: case GDK_Z: case GDK_y: case GDK_Y: case GDK_comma: prev_event(NULL, NULL, NULL); return TRUE; case GDK_s: case GDK_S: if(event->state & GDK_MOD1_MASK) { /* ALT + s */ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(musicstore_toggle), !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(musicstore_toggle))); } else { stop_event(NULL, NULL, NULL); } return TRUE; case GDK_v: case GDK_V: stop_event(NULL, NULL, NULL); return TRUE; case GDK_c: case GDK_C: case GDK_space: gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pause_button), !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pause_button))); return TRUE; case GDK_p: case GDK_P: gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(play_button), !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(play_button))); return TRUE; case GDK_i: case GDK_I: if (!options.playlist_is_embedded) { conf__fileinfo_cb(NULL); return TRUE; } break; case GDK_BackSpace: if (allow_seeks) { seek_t seek; send_cmd = CMD_SEEKTO; seek.seek_to_pos = 0.0f; rb_write(rb_gui2disk, &send_cmd, 1); rb_write(rb_gui2disk, (char *)&seek, sizeof(seek_t)); try_waking_disk_thread(); refresh_scale_suppress = 2; } if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pause_button))) gtk_adjustment_set_value(GTK_ADJUSTMENT(adj_pos), 0.0f); return TRUE; case GDK_l: case GDK_L: if(event->state & GDK_MOD1_MASK) { /* ALT + l */ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(playlist_toggle), !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(playlist_toggle))); } return TRUE; case GDK_x: case GDK_X: if(event->state & GDK_MOD1_MASK) { /* ALT + x */ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(plugin_toggle), !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(plugin_toggle))); } else { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(play_button), !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(play_button))); } return TRUE; case GDK_q: case GDK_Q: if(event->state & GDK_CONTROL_MASK) { /* CTRL + q */ main_window_close(NULL, NULL);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -