--- gigedit/trunk/src/gigedit/mainwindow.cpp 2008/02/06 22:08:29 1673 +++ gigedit/trunk/src/gigedit/mainwindow.cpp 2008/04/26 08:52:15 1725 @@ -18,6 +18,7 @@ */ #include +#include #include #include @@ -623,15 +624,15 @@ Gtk::FileFilter filter; filter.add_pattern("*.gig"); dialog.set_filter(filter); - if (current_dir != "") { - dialog.set_current_folder(current_dir); + if (current_gig_dir != "") { + dialog.set_current_folder(current_gig_dir); } if (dialog.run() == Gtk::RESPONSE_OK) { std::string filename = dialog.get_filename(); printf("filename=%s\n", filename.c_str()); printf("on_action_file_open self=%x\n", Glib::Thread::self()); load_file(filename.c_str()); - current_dir = Glib::path_get_dirname(filename); + current_gig_dir = Glib::path_get_dirname(filename); } } @@ -752,12 +753,41 @@ filter.add_pattern("*.gig"); dialog.set_filter(filter); - if (Glib::path_is_absolute(filename)) { - dialog.set_filename(filename); - } else if (current_dir != "") { - dialog.set_current_folder(current_dir); + // set initial dir and filename of the Save As dialog + // and prepare that initial filename as a copy of the gig + { + std::string basename = Glib::path_get_basename(filename); + std::string dir = Glib::path_get_dirname(filename); + basename = std::string("copy_of_") + basename; + Glib::ustring copyFileName = Glib::build_filename(dir, basename); + if (Glib::path_is_absolute(filename)) { + dialog.set_filename(copyFileName); + } else { + if (current_gig_dir != "") dialog.set_current_folder(current_gig_dir); + } + dialog.set_current_name(Glib::filename_display_basename(copyFileName)); } - dialog.set_current_name(Glib::filename_display_basename(filename)); + + // show warning in the dialog + Gtk::HBox descriptionArea; + descriptionArea.set_spacing(15); + Gtk::Image warningIcon(Gtk::Stock::DIALOG_WARNING, Gtk::IconSize(Gtk::ICON_SIZE_DIALOG)); + descriptionArea.pack_start(warningIcon, Gtk::PACK_SHRINK); + warningIcon.show(); + Gtk::Label description; + description.set_markup( + _("\nCAUTION: You MUST use the " + "\"Save\" dialog instead of " + "\"Save As...\" if you want to save " + "to the same .gig file. Using " + "\"Save As...\" for writing to the " + "same .gig file will end up in corrupted sample wave data!\n") + ); + description.set_line_wrap(true); + descriptionArea.pack_start(description, Gtk::PACK_SHRINK); + description.show(); + dialog.get_vbox()->pack_start(descriptionArea, Gtk::PACK_SHRINK); + descriptionArea.show(); if (dialog.run() == Gtk::RESPONSE_OK) { file_structure_to_be_changed_signal.emit(this->file); @@ -769,7 +799,7 @@ printf("filename=%s\n", filename.c_str()); file->Save(filename); this->filename = filename; - current_dir = Glib::path_get_dirname(filename); + current_gig_dir = Glib::path_get_dirname(filename); set_title(Glib::filename_display_basename(filename)); file_has_name = true; file_is_changed = false; @@ -1385,7 +1415,11 @@ allpassfilter.set_name("All Files"); dialog.add_filter(soundfilter); dialog.add_filter(allpassfilter); + if (current_sample_dir != "") { + dialog.set_current_folder(current_sample_dir); + } if (dialog.run() == Gtk::RESPONSE_OK) { + current_sample_dir = dialog.get_current_folder(); Glib::ustring error_files; Glib::SListHandle filenames = dialog.get_filenames(); for (Glib::SListHandle::iterator iter = filenames.begin(); @@ -1535,6 +1569,9 @@ dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); dialog.add_button(_("Select"), Gtk::RESPONSE_OK); dialog.set_select_multiple(false); + if (current_sample_dir != "") { + dialog.set_current_folder(current_sample_dir); + } // fix label width (because Gtk by design doesn't // know anything about the parent's size) #if 0 //FIXME: doesn't work @@ -1546,6 +1583,7 @@ #endif if (dialog.run() == Gtk::RESPONSE_OK) { + current_sample_dir = dialog.get_current_folder(); Glib::ustring error_files; Glib::ustring folder = dialog.get_filename(); for (gig::Sample* sample = file->GetFirstSample();