| 312 | | filesel = gtk_file_selection_new(_("Sweep: Load file")); |
|---|
| 313 | | gtk_file_selection_set_select_multiple(GTK_FILE_SELECTION(filesel), TRUE); |
|---|
| 314 | | sweep_set_window_icon (GTK_WINDOW(filesel)); |
|---|
| 315 | | gtk_window_set_position (GTK_WINDOW (filesel), GTK_WIN_POS_CENTER); |
|---|
| 316 | | gtk_widget_set_size_request (filesel, win_width, win_height); |
|---|
| 317 | | |
|---|
| 318 | | g_signal_connect (G_OBJECT(filesel), "destroy", |
|---|
| 319 | | G_CALLBACK(sample_load_destroy_cb), filesel); |
|---|
| 320 | | |
|---|
| 321 | | attach_window_close_accel(GTK_WINDOW(filesel)); |
|---|
| | 286 | dialog = gtk_file_chooser_dialog_new ("Sweep: Open File", |
|---|
| | 287 | data, |
|---|
| | 288 | GTK_FILE_CHOOSER_ACTION_OPEN, |
|---|
| | 289 | GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, |
|---|
| | 290 | GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, |
|---|
| | 291 | NULL); |
|---|
| | 292 | |
|---|
| | 293 | gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER); |
|---|
| | 294 | gtk_widget_set_size_request (dialog, win_width, win_height); |
|---|
| | 295 | |
|---|
| | 296 | sweep_set_window_icon (GTK_WINDOW(dialog)); |
|---|
| | 297 | attach_window_close_accel(GTK_WINDOW(dialog)); |
|---|
| | 298 | |
|---|
| 323 | | |
|---|
| 324 | | if(load_current_file) { |
|---|
| 325 | | gtk_file_selection_set_filename(GTK_FILE_SELECTION(filesel), |
|---|
| 326 | | load_current_file); |
|---|
| 327 | | free (load_current_file); |
|---|
| 328 | | } |
|---|
| 329 | | |
|---|
| 330 | | g_signal_connect (G_OBJECT(GTK_FILE_SELECTION(filesel)->ok_button), |
|---|
| 331 | | "clicked", G_CALLBACK(sample_load_ok_cb), filesel); |
|---|
| 332 | | |
|---|
| 333 | | |
|---|
| 334 | | g_signal_connect (G_OBJECT(GTK_FILE_SELECTION(filesel)->cancel_button), |
|---|
| 335 | | "clicked", G_CALLBACK(sample_load_cancel_cb), filesel); |
|---|
| 336 | | |
|---|
| 337 | | |
|---|
| 338 | | gtk_widget_show(filesel); |
|---|
| | 300 | |
|---|
| | 301 | if (load_current_file) { |
|---|
| | 302 | gtk_file_chooser_set_filename (GTK_FILE_CHOOSER(dialog), load_current_file); |
|---|
| | 303 | |
|---|
| | 304 | g_free(load_current_file); |
|---|
| | 305 | } |
|---|
| | 306 | |
|---|
| | 307 | if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) { |
|---|
| | 308 | |
|---|
| | 309 | char *filename; |
|---|
| | 310 | |
|---|
| | 311 | filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); |
|---|
| | 312 | sample_load (filename); |
|---|
| | 313 | g_free (filename); |
|---|
| | 314 | } |
|---|
| | 315 | |
|---|
| | 316 | gtk_widget_destroy (dialog); |
|---|
| | 317 | |
|---|
| 560 | | sample_save_as_ok_cb(GtkWidget * widget, gpointer data) |
|---|
| 561 | | { |
|---|
| 562 | | sw_view * view = (sw_view *)data; |
|---|
| 563 | | sw_sample * sample; |
|---|
| 564 | | GtkWidget * filesel; |
|---|
| 565 | | gchar * pathname; |
|---|
| 566 | | struct stat statbuf; |
|---|
| 567 | | |
|---|
| 568 | | save_as_data * sd; |
|---|
| 569 | | |
|---|
| 570 | | #undef BUF_LEN |
|---|
| 571 | | #define BUF_LEN 512 |
|---|
| 572 | | char buf[BUF_LEN]; |
|---|
| 573 | | |
|---|
| 574 | | sample = view->sample; |
|---|
| 575 | | filesel = gtk_widget_get_toplevel (widget); |
|---|
| 576 | | |
|---|
| 577 | | pathname = |
|---|
| 578 | | g_strdup (gtk_file_selection_get_filename(GTK_FILE_SELECTION(filesel))); |
|---|
| 579 | | |
|---|
| 580 | | if (!sweep_dir_exists (pathname)) { |
|---|
| 581 | | g_free (pathname); |
|---|
| 582 | | return; |
|---|
| 583 | | } |
|---|
| 584 | | |
|---|
| 585 | | sd = g_malloc (sizeof (save_as_data)); |
|---|
| 586 | | sd->sample = sample; |
|---|
| 587 | | sd->pathname = pathname; |
|---|
| 588 | | |
|---|
| 589 | | if (stat (pathname, &statbuf) == -1) { |
|---|
| 590 | | switch (errno) { |
|---|
| 591 | | case ENOENT: |
|---|
| 592 | | /* If it doesn't exist, it's ok to save as */ |
|---|
| 593 | | overwrite_ok_cb (NULL, sd); |
|---|
| 594 | | break; |
|---|
| 595 | | default: |
|---|
| 596 | | sweep_perror (errno, pathname); |
|---|
| 597 | | break; |
|---|
| 598 | | } |
|---|
| 599 | | } else { |
|---|
| 600 | | /* file exists */ |
|---|
| 601 | | if (access(pathname, W_OK) == -1) { |
|---|
| 602 | | sweep_perror (errno, _("You are not allowed to write to\n%s"), pathname); |
|---|
| 603 | | g_free (sd); |
|---|
| 604 | | } else { |
|---|
| 605 | | snprintf (buf, BUF_LEN, _("%s exists. Overwrite?"), pathname); |
|---|
| 606 | | question_dialog_new (sample, _("File exists"), buf, |
|---|
| 607 | | _("Overwrite"), _("Don't overwrite"), |
|---|
| 608 | | G_CALLBACK (overwrite_ok_cb), sd, G_CALLBACK (overwrite_cancel_cb), sd, |
|---|
| 609 | | SWEEP_EDIT_MODE_META); |
|---|
| 610 | | } |
|---|
| 611 | | } |
|---|
| 612 | | |
|---|
| 613 | | gtk_widget_destroy(GTK_WIDGET(filesel)); |
|---|
| 614 | | } |
|---|
| 615 | | |
|---|
| 616 | | static void |
|---|
| 617 | | sample_save_as_cancel_cb(GtkWidget * widget, gpointer data) |
|---|
| 618 | | { |
|---|
| 619 | | gtk_widget_destroy(GTK_WIDGET(data)); |
|---|
| 620 | | } |
|---|
| 621 | | |
|---|
| 622 | | static void |
|---|
| 769 | | filesel = gtk_file_selection_new(_("Sweep: Save file")); |
|---|
| 770 | | attach_window_close_accel(GTK_WINDOW(filesel)); |
|---|
| 771 | | sweep_set_window_icon (GTK_WINDOW(filesel)); |
|---|
| 772 | | gtk_window_set_position (GTK_WINDOW (filesel), GTK_WIN_POS_CENTER); |
|---|
| 773 | | gtk_widget_set_size_request (filesel, win_width, win_height); |
|---|
| 774 | | |
|---|
| 775 | | if (!strcmp (g_dirname (sample->pathname), ".")) { |
|---|
| 776 | | |
|---|
| 777 | | last_save = prefs_get_string (LAST_SAVE_KEY); |
|---|
| 778 | | |
|---|
| 779 | | if(last_save) { |
|---|
| 780 | | gchar * last_save_dir = g_dirname (last_save); |
|---|
| 781 | | gchar * new_pathname = |
|---|
| 782 | | g_strdup_printf ("%s%c%s", |
|---|
| 783 | | last_save_dir, G_DIR_SEPARATOR, sample->pathname); |
|---|
| 784 | | |
|---|
| 785 | | gtk_file_selection_set_filename(GTK_FILE_SELECTION(filesel), |
|---|
| 786 | | new_pathname); |
|---|
| 787 | | |
|---|
| 788 | | g_free (new_pathname); |
|---|
| 789 | | g_free (last_save_dir); |
|---|
| 790 | | g_free (last_save); |
|---|
| 791 | | } |
|---|
| 792 | | } else { |
|---|
| 793 | | gtk_file_selection_set_filename(GTK_FILE_SELECTION(filesel), |
|---|
| 794 | | sample->pathname); |
|---|
| 795 | | } |
|---|
| 796 | | |
|---|
| | 693 | dialog = gtk_file_chooser_dialog_new ("Sweep: Save file", |
|---|
| | 694 | GTK_WINDOW(view->window), |
|---|
| | 695 | GTK_FILE_CHOOSER_ACTION_SAVE, |
|---|
| | 696 | GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, |
|---|
| | 697 | GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, |
|---|
| | 698 | NULL); |
|---|
| | 699 | |
|---|
| | 700 | |
|---|
| | 701 | //gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE); |
|---|
| | 702 | attach_window_close_accel(GTK_WINDOW(dialog)); |
|---|
| | 703 | sweep_set_window_icon (GTK_WINDOW(dialog)); |
|---|
| | 704 | |
|---|
| 826 | | |
|---|
| 827 | | g_signal_connect (G_OBJECT(GTK_FILE_SELECTION(filesel)->ok_button), |
|---|
| 828 | | "clicked", G_CALLBACK(sample_save_as_ok_cb), data); |
|---|
| 829 | | |
|---|
| 830 | | g_signal_connect (G_OBJECT(GTK_FILE_SELECTION(filesel)->cancel_button), |
|---|
| 831 | | "clicked", G_CALLBACK(sample_save_as_cancel_cb), filesel); |
|---|
| 832 | | |
|---|
| 833 | | |
|---|
| 834 | | gtk_widget_show(filesel); |
|---|
| | 734 | |
|---|
| | 735 | gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER); |
|---|
| | 736 | gtk_widget_set_size_request (dialog, win_width, win_height); |
|---|
| | 737 | |
|---|
| | 738 | if (strcmp (g_path_get_dirname(sample->pathname), ".") == 0) { |
|---|
| | 739 | |
|---|
| | 740 | last_save = prefs_get_string (LAST_SAVE_KEY); |
|---|
| | 741 | |
|---|
| | 742 | if (last_save != NULL) { |
|---|
| | 743 | gchar * last_save_dir = g_dirname (last_save); |
|---|
| | 744 | |
|---|
| | 745 | gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(dialog), |
|---|
| | 746 | last_save_dir); |
|---|
| | 747 | gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER(dialog), |
|---|
| | 748 | sample->pathname); |
|---|
| | 749 | |
|---|
| | 750 | g_free (last_save_dir); |
|---|
| | 751 | g_free (last_save); |
|---|
| | 752 | |
|---|
| | 753 | } |
|---|
| | 754 | } else { |
|---|
| | 755 | retval = gtk_file_chooser_set_filename (GTK_FILE_CHOOSER(dialog), |
|---|
| | 756 | sample->pathname); |
|---|
| | 757 | /* FIXME: bug (local only?) causes gtk_file_chooser_set_filename |
|---|
| | 758 | to fail silently in some cases*/ |
|---|
| | 759 | filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); |
|---|
| | 760 | //printf("filename pre: %s\n", filename); |
|---|
| | 761 | //printf("sample->pathname: %s\n", sample->pathname); |
|---|
| | 762 | |
|---|
| | 763 | } |
|---|
| | 764 | |
|---|
| | 765 | retval = gtk_dialog_run (GTK_DIALOG (dialog)); |
|---|
| | 766 | |
|---|
| | 767 | filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); |
|---|
| | 768 | //printf("filename post: %s\n", filename); |
|---|
| | 769 | sample = view->sample; |
|---|
| | 770 | sd = g_malloc (sizeof (save_as_data)); |
|---|
| | 771 | sd->sample = sample; |
|---|
| | 772 | sd->pathname = filename; |
|---|
| | 773 | |
|---|
| | 774 | if (retval == GTK_RESPONSE_ACCEPT) { |
|---|
| | 775 | |
|---|
| | 776 | if (!sweep_dir_exists (filename)) { |
|---|
| | 777 | g_free (sd); |
|---|
| | 778 | g_free (filename); |
|---|
| | 779 | return; |
|---|
| | 780 | } |
|---|
| | 781 | |
|---|
| | 782 | if (stat (filename, &statbuf) == -1) { |
|---|
| | 783 | switch (errno) { |
|---|
| | 784 | case ENOENT: |
|---|
| | 785 | /* If it doesn't exist, it's ok to save as */ |
|---|
| | 786 | overwrite_ok_cb (NULL, sd); |
|---|
| | 787 | break; |
|---|
| | 788 | default: |
|---|
| | 789 | sweep_perror (errno, filename); |
|---|
| | 790 | break; |
|---|
| | 791 | } |
|---|
| | 792 | } else { |
|---|
| | 793 | /* file exists */ |
|---|
| | 794 | |
|---|
| | 795 | if (access(filename, W_OK) == -1) { |
|---|
| | 796 | sweep_perror (errno, _("You are not allowed to write to\n%s"), filename); |
|---|
| | 797 | } else { |
|---|
| | 798 | snprintf (buf, BUF_LEN, _("%s exists. Overwrite?"), filename); |
|---|
| | 799 | |
|---|
| | 800 | question_dialog_new (sample, _("File exists"), buf, |
|---|
| | 801 | _("Overwrite"), _("Don't overwrite"), |
|---|
| | 802 | G_CALLBACK (overwrite_ok_cb), sd, G_CALLBACK (overwrite_cancel_cb), sd, |
|---|
| | 803 | SWEEP_EDIT_MODE_META); |
|---|
| | 804 | } |
|---|
| | 805 | } |
|---|
| | 806 | /* FIXME: wrapped this due to the above gtk_file_chooser_set_filename problem */ |
|---|
| | 807 | } else if (sd->pathname != NULL) { |
|---|
| | 808 | gchar * msg; |
|---|
| | 809 | |
|---|
| | 810 | msg = g_strdup_printf (_("Save as %s cancelled"), g_basename (sd->pathname)); |
|---|
| | 811 | sample_set_tmp_message (sd->sample, msg); |
|---|
| | 812 | g_free (msg); |
|---|
| | 813 | |
|---|
| | 814 | } else { |
|---|
| | 815 | |
|---|
| | 816 | g_free (sd); |
|---|
| | 817 | g_free (filename); |
|---|
| | 818 | } |
|---|
| | 819 | gtk_widget_destroy (dialog); |
|---|
| | 820 | |
|---|
| | 821 | |
|---|