partial save code review

This commit is contained in:
Ingo Weyrich
2019-10-21 22:50:17 +02:00
parent 330a7807ed
commit 095b5233a9

View File

@@ -278,23 +278,24 @@ void ProfilePanel::save_clicked (GdkEventButton* event)
// If it's a partial profile, it's more intuitive to first allow the user // If it's a partial profile, it's more intuitive to first allow the user
// to choose which parameters to save before showing the Save As dialog // to choose which parameters to save before showing the Save As dialog
// #5491 // #5491
if (event->state & Gdk::CONTROL_MASK) { const auto isPartial = event->state & Gdk::CONTROL_MASK;
if(!partialProfileDlg) { if (isPartial) {
partialProfileDlg = new PartialPasteDlg (Glib::ustring (), parent); if (!partialProfileDlg) {
partialProfileDlg = new PartialPasteDlg(Glib::ustring(), parent);
} }
partialProfileDlg->set_title(M("PROFILEPANEL_SAVEPPASTE")); partialProfileDlg->set_title(M("PROFILEPANEL_SAVEPPASTE"));
int i = partialProfileDlg->run(); const auto response = partialProfileDlg->run();
partialProfileDlg->hide(); partialProfileDlg->hide();
if (i != Gtk::RESPONSE_OK) { if (response != Gtk::RESPONSE_OK) {
return; return;
} }
} }
Gtk::FileChooserDialog dialog (getToplevelWindow (this), M("PROFILEPANEL_SAVEDLGLABEL"), Gtk::FILE_CHOOSER_ACTION_SAVE); Gtk::FileChooserDialog dialog(getToplevelWindow(this), M("PROFILEPANEL_SAVEDLGLABEL"), Gtk::FILE_CHOOSER_ACTION_SAVE);
bindCurrentFolder (dialog, options.loadSaveProfilePath); bindCurrentFolder(dialog, options.loadSaveProfilePath);
dialog.set_current_name (lastFilename); dialog.set_current_name(lastFilename);
//Add the user's default (or global if multiuser=false) profile path to the Shortcut list //Add the user's default (or global if multiuser=false) profile path to the Shortcut list
try { try {
@@ -311,33 +312,32 @@ void ProfilePanel::save_clicked (GdkEventButton* event)
dialog.add_button(M("GENERAL_SAVE"), Gtk::RESPONSE_OK); dialog.add_button(M("GENERAL_SAVE"), Gtk::RESPONSE_OK);
//Add filters, so that only certain file types can be selected: //Add filters, so that only certain file types can be selected:
Glib::RefPtr<Gtk::FileFilter> filter_pp = Gtk::FileFilter::create(); auto filter_pp = Gtk::FileFilter::create();
filter_pp->set_name(M("FILECHOOSER_FILTER_PP")); filter_pp->set_name(M("FILECHOOSER_FILTER_PP"));
filter_pp->add_pattern("*" + paramFileExtension); filter_pp->add_pattern("*" + paramFileExtension);
dialog.add_filter(filter_pp); dialog.add_filter(filter_pp);
Glib::RefPtr<Gtk::FileFilter> filter_any = Gtk::FileFilter::create(); auto filter_any = Gtk::FileFilter::create();
filter_any->set_name(M("FILECHOOSER_FILTER_ANY")); filter_any->set_name(M("FILECHOOSER_FILTER_ANY"));
filter_any->add_pattern("*"); filter_any->add_pattern("*");
dialog.add_filter(filter_any); dialog.add_filter(filter_any);
bool done = false; bool done = true;
do { do {
if (dialog.run() == Gtk::RESPONSE_OK) { if (dialog.run() == Gtk::RESPONSE_OK) {
std::string fname = dialog.get_filename(); std::string fname = dialog.get_filename();
Glib::ustring ext = getExtension (fname);
if (("." + ext) != paramFileExtension) { if (("." + getExtension(fname)) != paramFileExtension) {
fname += paramFileExtension; fname += paramFileExtension;
} }
if (!confirmOverwrite (dialog, fname)) { if (!confirmOverwrite(dialog, fname)) {
continue; continue;
} }
lastFilename = Glib::path_get_basename (fname); lastFilename = Glib::path_get_basename(fname);
const PartialProfile* toSave; const PartialProfile* toSave;
@@ -347,7 +347,7 @@ void ProfilePanel::save_clicked (GdkEventButton* event)
toSave = lastsaved; toSave = lastsaved;
} else { } else {
const ProfileStoreEntry* entry = profiles->getSelectedEntry(); const ProfileStoreEntry* entry = profiles->getSelectedEntry();
toSave = entry ? ProfileStore::getInstance()->getProfile (profiles->getSelectedEntry()) : nullptr; toSave = entry ? ProfileStore::getInstance()->getProfile(entry) : nullptr;
} }
if (toSave) { if (toSave) {
@@ -355,33 +355,27 @@ void ProfilePanel::save_clicked (GdkEventButton* event)
if (event->state & Gdk::CONTROL_MASK) { if (event->state & Gdk::CONTROL_MASK) {
// Build partial profile // Build partial profile
PartialProfile ppTemp(true); PartialProfile ppTemp(true);
partialProfileDlg->applyPaste (ppTemp.pparams, ppTemp.pedited, toSave->pparams, toSave->pedited); partialProfileDlg->applyPaste(ppTemp.pparams, ppTemp.pedited, toSave->pparams, toSave->pedited);
// Save partial profile // Save partial profile
retCode = ppTemp.pparams->save (fname, "", true, ppTemp.pedited); retCode = ppTemp.pparams->save(fname, "", true, ppTemp.pedited);
// Cleanup // Cleanup
ppTemp.deleteInstance(); ppTemp.deleteInstance();
} else { } else {
// Save full profile // Save full profile
retCode = toSave->pparams->save (fname); retCode = toSave->pparams->save(fname);
} }
if (!retCode) { if (!retCode) {
done = true; const auto ccPrevState = changeconn.block(true);
bool ccPrevState = changeconn.block(true);
ProfileStore::getInstance()->parseProfiles(); ProfileStore::getInstance()->parseProfiles();
changeconn.block (ccPrevState); changeconn.block(ccPrevState);
} else { } else {
done = false;
writeFailed(dialog, fname); writeFailed(dialog, fname);
} }
} else {
done = true;
} }
} else {
done = true;
} }
} while (!done); } while (!done);
return;
} }
/* /*