EXPORT void audgui_jump_to_time (void) { if (audgui_reshow_unique_window (AUDGUI_JUMP_TO_TIME_WINDOW)) return; GtkWidget * entry = gtk_entry_new (); gtk_entry_set_activates_default ((GtkEntry *) entry, TRUE); GtkWidget * button1 = audgui_button_new (_("Jump"), "go-jump", jump_cb, entry); GtkWidget * button2 = audgui_button_new (_("Cancel"), "process-stop", NULL, NULL); GtkWidget * dialog = audgui_dialog_new (GTK_MESSAGE_OTHER, _("Jump to Time"), _("Enter time (minutes:seconds):"), button1, button2); audgui_dialog_add_widget (dialog, entry); if (aud_drct_get_playing ()) { int time = aud_drct_get_time () / 1000; SPRINTF (buf, "%u:%02u", time / 60, time % 60); gtk_entry_set_text ((GtkEntry *) entry, buf); } audgui_show_unique_window (AUDGUI_JUMP_TO_TIME_WINDOW, dialog); }
static void start_delete (void) { if (dialog) { gtk_window_present ((GtkWindow *) dialog); return; } const char * message; GtkWidget * button1, * button2; if (aud_get_bool ("delete_files", "use_trash")) { message = _("Do you want to move the selected files to the trash?"); button1 = audgui_button_new (_("Move to Trash"), "user-trash", (AudguiCallback) confirm_delete, NULL); } else { message = _("Do you want to permanently delete the selected files?"); button1 = audgui_button_new (_("Delete"), "edit-delete", (AudguiCallback) confirm_delete, NULL); } button2 = audgui_button_new (_("Cancel"), "process-stop", NULL, NULL); dialog = audgui_dialog_new (GTK_MESSAGE_QUESTION, _("Delete Files"), message, button1, button2); g_signal_connect (dialog, "destroy", (GCallback) gtk_widget_destroyed, & dialog); gtk_widget_show_all (dialog); }
static GtkWidget * create_playlist_manager (void) { GtkWidget * playman_win = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_type_hint ((GtkWindow *) playman_win, GDK_WINDOW_TYPE_HINT_DIALOG); gtk_window_set_title ((GtkWindow *) playman_win, _("Playlist Manager")); gtk_container_set_border_width ((GtkContainer *) playman_win, 6); gtk_widget_set_size_request (playman_win, 400, 250); g_signal_connect (playman_win, "destroy", (GCallback) destroy_cb, NULL); audgui_destroy_on_escape (playman_win); GtkWidget * playman_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_container_add ((GtkContainer *) playman_win, playman_vbox); /* ListView */ GtkWidget * playman_pl_lv = audgui_list_new (& callbacks, NULL, aud_playlist_count ()); audgui_list_add_column (playman_pl_lv, _("Title"), 0, G_TYPE_STRING, -1); audgui_list_add_column (playman_pl_lv, _("Entries"), 1, G_TYPE_INT, 7); audgui_list_set_highlight (playman_pl_lv, aud_playlist_get_playing ()); gtk_tree_view_set_search_equal_func ((GtkTreeView *) playman_pl_lv, search_cb, NULL, NULL); hook_associate ("playlist update", update_hook, playman_pl_lv); hook_associate ("playlist activate", activate_hook, playman_pl_lv); hook_associate ("playlist set playing", position_hook, playman_pl_lv); GtkWidget * playman_pl_lv_sw = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_shadow_type ((GtkScrolledWindow *) playman_pl_lv_sw, GTK_SHADOW_IN); gtk_scrolled_window_set_policy ((GtkScrolledWindow *) playman_pl_lv_sw, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add ((GtkContainer *) playman_pl_lv_sw, playman_pl_lv); gtk_box_pack_start ((GtkBox *) playman_vbox, playman_pl_lv_sw, TRUE, TRUE, 0); /* ButtonBox */ GtkWidget * playman_button_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); GtkWidget * new_button = audgui_button_new (_("_New"), "document-new", new_cb, NULL); GtkWidget * delete_button = audgui_button_new (_("_Remove"), "edit-delete", delete_cb, NULL); GtkWidget * rename_button = audgui_button_new (_("Ren_ame"), "insert-text", rename_cb, NULL); GtkWidget * play_button = audgui_button_new (_("_Play"), "media-playback-start", play_cb, NULL); gtk_container_add ((GtkContainer *) playman_button_hbox, new_button); gtk_container_add ((GtkContainer *) playman_button_hbox, delete_button); gtk_box_pack_end ((GtkBox *) playman_button_hbox, play_button, FALSE, FALSE, 0); gtk_box_pack_end ((GtkBox *) playman_button_hbox, rename_button, FALSE, FALSE, 0); gtk_container_add ((GtkContainer *) playman_vbox, playman_button_hbox); /* CheckButton */ GtkWidget * hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_box_pack_start ((GtkBox *) playman_vbox, hbox, FALSE, FALSE, 0); GtkWidget * check_button = gtk_check_button_new_with_mnemonic (_("_Close dialog on activating playlist")); gtk_box_pack_start ((GtkBox *) hbox, check_button, FALSE, FALSE, 0); gtk_toggle_button_set_active ((GtkToggleButton *) check_button, aud_get_bool ("audgui", "playlist_manager_close_on_activate")); g_signal_connect (check_button, "toggled", (GCallback) close_on_activate_cb, NULL); return playman_win; }
EXPORT void audgui_simple_message (GtkWidget * * widget, GtkMessageType type, const char * title, const char * text) { AUDDBG ("%s\n", text); if (* widget) { const char * old = NULL; g_object_get ((GObject *) * widget, "text", & old, NULL); g_return_if_fail (old); int messages = GPOINTER_TO_INT (g_object_get_data ((GObject *) * widget, "messages")); if (messages > 10) text = _("\n(Further messages have been hidden.)"); if (! strstr (old, text)) { SCONCAT3 (both, old, "\n", text); g_object_set ((GObject *) * widget, "text", both, NULL); g_object_set_data ((GObject *) * widget, "messages", GINT_TO_POINTER (messages + 1)); } gtk_window_present ((GtkWindow *) * widget); } else { GtkWidget * button = audgui_button_new (_("Close"), "window-close", NULL, NULL); * widget = audgui_dialog_new (type, title, text, button, NULL); g_object_set_data ((GObject *) * widget, "messages", GINT_TO_POINTER (1)); g_signal_connect (* widget, "destroy", (GCallback) gtk_widget_destroyed, widget); gtk_widget_show_all (* widget); } }
static void confirm_overwrite (ImportExportJob * job) { if (job->confirm) gtk_widget_destroy (job->confirm); SPRINTF (message, _("Overwrite %s?"), job->filename); GtkWidget * button1 = audgui_button_new (_("Overwrite"), "document-save", finish_job, job); GtkWidget * button2 = audgui_button_new (_("Cancel"), "process-stop", NULL, NULL); job->confirm = audgui_dialog_new (GTK_MESSAGE_QUESTION, _("Confirm Overwrite"), message, button1, button2); g_signal_connect (job->confirm, "destroy", (GCallback) gtk_widget_destroyed, & job->confirm); gtk_widget_show_all (job->confirm); }
static void create_selector (ImportExportJob * job, const char * filename, const char * folder) { const char * title, * verb, * icon; GtkFileChooserAction action; if (job->save) { title = _("Export Playlist"); verb = _("Export"); icon = "document-save"; action = GTK_FILE_CHOOSER_ACTION_SAVE; } else { title = _("Import Playlist"); verb = _("Import"); icon = "document-open"; action = GTK_FILE_CHOOSER_ACTION_OPEN; } job->selector = gtk_file_chooser_dialog_new (title, NULL, action, NULL, NULL); if (filename) gtk_file_chooser_set_uri ((GtkFileChooser *) job->selector, filename); else if (folder) gtk_file_chooser_set_current_folder_uri ((GtkFileChooser *) job->selector, folder); GtkWidget * button1 = audgui_button_new (verb, icon, check_overwrite, job); GtkWidget * button2 = audgui_button_new (_("Cancel"), "process-stop", (AudguiCallback) gtk_widget_destroy, job->selector); gtk_dialog_add_action_widget ((GtkDialog *) job->selector, button2, GTK_RESPONSE_NONE); gtk_dialog_add_action_widget ((GtkDialog *) job->selector, button1, GTK_RESPONSE_NONE); gtk_widget_set_can_default (button1, TRUE); gtk_widget_grab_default (button1); g_signal_connect_swapped (job->selector, "destroy", (GCallback) cleanup_job, job); gtk_widget_show_all (job->selector); }
static GtkWidget * create_url_opener (bool_t open) { const char * title, * verb, * icon; if (open) { title = _("Open URL"); verb = _("_Open"); icon = "document-open"; } else { title = _("Add URL"); verb = _("_Add"); icon = "list-add"; } GtkWidget * combo = gtk_combo_box_text_new_with_entry (); GtkWidget * entry = gtk_bin_get_child ((GtkBin *) combo); gtk_entry_set_activates_default ((GtkEntry *) entry, TRUE); const char * item; for (int i = 0; (item = aud_history_get (i)); i++) gtk_combo_box_text_append_text ((GtkComboBoxText *) combo, item); g_object_set_data ((GObject *) entry, "open", GINT_TO_POINTER (open)); GtkWidget * button1 = audgui_button_new (verb, icon, open_cb, entry); GtkWidget * button2 = audgui_button_new (_("_Cancel"), "process-stop", NULL, NULL); GtkWidget * dialog = audgui_dialog_new (GTK_MESSAGE_OTHER, title, _("Enter URL:"), button1, button2); gtk_widget_set_size_request (dialog, 400, -1); audgui_dialog_add_widget (dialog, combo); return dialog; }
void eq_preset_delete_auto (void) { if (equalizerwin_delete_auto_window) { gtk_window_present(GTK_WINDOW(equalizerwin_delete_auto_window)); return; } equalizerwin_create_list_window(equalizer_auto_presets, _("Delete auto-preset"), &equalizerwin_delete_auto_window, GTK_SELECTION_MULTIPLE, NULL, audgui_button_new (_("Delete"), "edit-delete", NULL, NULL), G_CALLBACK(equalizerwin_delete_auto_delete), NULL); }
void eq_preset_load_auto (void) { if (equalizerwin_load_auto_window) { gtk_window_present(GTK_WINDOW(equalizerwin_load_auto_window)); return; } equalizerwin_create_list_window(equalizer_auto_presets, _("Load auto-preset"), &equalizerwin_load_auto_window, GTK_SELECTION_SINGLE, NULL, audgui_button_new (_("Load"), "document-open", NULL, NULL), G_CALLBACK(equalizerwin_load_auto_ok), G_CALLBACK(equalizerwin_load_auto_select)); }
void eq_preset_save (void) { if (equalizerwin_save_window) { gtk_window_present(GTK_WINDOW(equalizerwin_save_window)); return; } equalizerwin_create_list_window(equalizer_presets, _("Save preset"), &equalizerwin_save_window, GTK_SELECTION_SINGLE, &equalizerwin_save_entry, audgui_button_new (_("Save"), "document-save", NULL, NULL), G_CALLBACK(equalizerwin_save_ok), G_CALLBACK(equalizerwin_save_select)); }
void eq_preset_save_auto (void) { if (equalizerwin_save_auto_window) gtk_window_present(GTK_WINDOW(equalizerwin_save_auto_window)); else equalizerwin_create_list_window(equalizer_auto_presets, _("Save auto-preset"), &equalizerwin_save_auto_window, GTK_SELECTION_SINGLE, &equalizerwin_save_auto_entry, audgui_button_new (_("Save"), "document-save", NULL, NULL), G_CALLBACK(equalizerwin_save_auto_ok), G_CALLBACK(equalizerwin_save_auto_select)); char * name = aud_drct_get_filename (); if (name != NULL) { char * base = g_path_get_basename (name); gtk_entry_set_text ((GtkEntry *) equalizerwin_save_auto_entry, base); g_free (base); str_unref (name); } }
void pw_col_choose (void) { if (window) { gtk_window_present ((GtkWindow *) window); return; } chosen = index_new (); avail = index_new (); bool_t added[PW_COLS]; memset (added, 0, sizeof added); for (int i = 0; i < pw_num_cols; i ++) { if (added[pw_cols[i]]) continue; added[pw_cols[i]] = TRUE; Column * column = g_slice_new (Column); column->column = pw_cols[i]; column->selected = 0; index_insert (chosen, -1, column); } for (int i = 0; i < PW_COLS; i ++) { if (added[i]) continue; Column * column = g_slice_new (Column); column->column = i; column->selected = 0; index_insert (avail, -1, column); } window = gtk_dialog_new (); gtk_window_set_title ((GtkWindow *) window, _("Set Columns")); gtk_window_set_default_size ((GtkWindow *) window, 400, 300); gtk_dialog_set_default_response ((GtkDialog *) window, GTK_RESPONSE_ACCEPT); GtkWidget * cancel_button = audgui_button_new (_("_Cancel"), "process-stop", NULL, NULL); gtk_dialog_add_action_widget ((GtkDialog *) window, cancel_button, GTK_RESPONSE_CANCEL); GtkWidget * apply_button = audgui_button_new (_("_Set"), "system-run", NULL, NULL); gtk_dialog_add_action_widget ((GtkDialog *) window, apply_button, GTK_RESPONSE_ACCEPT); g_signal_connect (window, "response", (GCallback) response_cb, NULL); g_signal_connect (window, "destroy", (GCallback) destroy_cb, NULL); GtkWidget * hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_box_pack_start ((GtkBox *) gtk_dialog_get_content_area ((GtkDialog *) window), hbox, TRUE, TRUE, 0); GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3); gtk_box_pack_start ((GtkBox *) hbox, vbox, TRUE, TRUE, 0); GtkWidget * label = gtk_label_new (_("Available:")); g_object_set ((GObject *) label, "xalign", (float) 0, NULL); gtk_box_pack_start ((GtkBox *) vbox, label, FALSE, FALSE, 0); GtkWidget * scroll = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy ((GtkScrolledWindow *) scroll, GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type ((GtkScrolledWindow *) scroll, GTK_SHADOW_IN); gtk_box_pack_start ((GtkBox *) vbox, scroll, TRUE, TRUE, 0); avail_list = audgui_list_new (& callbacks, avail, index_count (avail)); gtk_tree_view_set_headers_visible ((GtkTreeView *) avail_list, FALSE); audgui_list_add_column (avail_list, NULL, 0, G_TYPE_STRING, -1); gtk_container_add ((GtkContainer *) scroll, avail_list); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_box_pack_start ((GtkBox *) hbox, vbox, FALSE, FALSE, 0); GtkWidget * button = gtk_button_new (); gtk_container_add ((GtkContainer *) button, gtk_image_new_from_icon_name ("go-next", GTK_ICON_SIZE_BUTTON)); gtk_box_pack_start ((GtkBox *) vbox, button, TRUE, FALSE, 0); g_signal_connect_swapped (button, "clicked", (GCallback) transfer, avail); button = gtk_button_new (); gtk_container_add ((GtkContainer *) button, gtk_image_new_from_icon_name ("go-previous", GTK_ICON_SIZE_BUTTON)); gtk_box_pack_start ((GtkBox *) vbox, button, TRUE, FALSE, 0); g_signal_connect_swapped (button, "clicked", (GCallback) transfer, chosen); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3); gtk_box_pack_start ((GtkBox *) hbox, vbox, TRUE, TRUE, 0); label = gtk_label_new (_("Chosen:")); g_object_set ((GObject *) label, "xalign", (float) 0, NULL); gtk_box_pack_start ((GtkBox *) vbox, label, FALSE, FALSE, 0); scroll = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy ((GtkScrolledWindow *) scroll, GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type ((GtkScrolledWindow *) scroll, GTK_SHADOW_IN); gtk_box_pack_start ((GtkBox *) vbox, scroll, TRUE, TRUE, 0); chosen_list = audgui_list_new (& callbacks, chosen, index_count (chosen)); gtk_tree_view_set_headers_visible ((GtkTreeView *) chosen_list, FALSE); audgui_list_add_column (chosen_list, NULL, 0, G_TYPE_STRING, -1); gtk_container_add ((GtkContainer *) scroll, chosen_list); gtk_widget_show_all (window); }
static GtkWidget * equalizerwin_create_list_window (Index * preset_list, const gchar *title, GtkWidget **window, GtkSelectionMode sel_mode, GtkWidget **entry, GtkWidget *button_action, GCallback action_func, GCallback select_row_func) { GtkWidget *vbox, *scrolled_window, *bbox, *view; GtkWidget *button_cancel; GtkListStore *store; GtkTreeIter iter; GtkTreeModel *model; GtkCellRenderer *renderer; GtkTreeSelection *selection; GtkTreeSortable *sortable; *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(*window), title); gtk_window_set_type_hint(GTK_WINDOW(*window), GDK_WINDOW_TYPE_HINT_DIALOG); gtk_window_set_default_size(GTK_WINDOW(*window), 350, 300); gtk_container_set_border_width(GTK_CONTAINER(*window), 10); gtk_window_set_transient_for(GTK_WINDOW(*window), GTK_WINDOW(equalizerwin)); g_signal_connect(*window, "destroy", G_CALLBACK(gtk_widget_destroyed), window); audgui_destroy_on_escape (* window); vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10); gtk_container_add(GTK_CONTAINER(*window), vbox); scrolled_window = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_shadow_type ((GtkScrolledWindow *) scrolled_window, GTK_SHADOW_IN); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); /* fill the store with the names of all available presets */ store = gtk_list_store_new(1, G_TYPE_STRING); for (int p = 0; p < index_count (preset_list); p ++) { EqualizerPreset * preset = index_get (preset_list, p); gtk_list_store_append(store, &iter); gtk_list_store_set (store, & iter, 0, preset->name, -1); } model = GTK_TREE_MODEL(store); sortable = GTK_TREE_SORTABLE(store); gtk_tree_sortable_set_sort_column_id(sortable, 0, GTK_SORT_ASCENDING); view = gtk_tree_view_new(); renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, _("Presets"), renderer, "text", 0, NULL); gtk_tree_view_set_model(GTK_TREE_VIEW(view), model); g_object_unref(model); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view)); gtk_tree_selection_set_mode(selection, sel_mode); gtk_container_add(GTK_CONTAINER(scrolled_window), view); gtk_box_pack_start(GTK_BOX(vbox), scrolled_window, TRUE, TRUE, 0); if (entry) { *entry = gtk_entry_new(); g_signal_connect(*entry, "activate", action_func, NULL); gtk_box_pack_start(GTK_BOX(vbox), *entry, FALSE, FALSE, 0); } bbox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); gtk_box_set_spacing(GTK_BOX(bbox), 5); gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0); button_cancel = audgui_button_new (_("Cancel"), "process-stop", NULL, NULL); g_signal_connect_swapped (button_cancel, "clicked", (GCallback) gtk_widget_destroy, * window); gtk_box_pack_start(GTK_BOX(bbox), button_cancel, TRUE, TRUE, 0); g_signal_connect(button_action, "clicked", G_CALLBACK(action_func), view); gtk_widget_set_can_default (button_action, TRUE); if (select_row_func) g_signal_connect(view, "row-activated", G_CALLBACK(select_row_func), NULL); gtk_box_pack_start(GTK_BOX(bbox), button_action, TRUE, TRUE, 0); gtk_widget_grab_default(button_action); gtk_widget_show_all(*window); return *window; }