diff --git a/src/ui-hlp/menu.cpp b/src/ui-hlp/menu.cpp index f1e4c99e..0e7b742c 100644 --- a/src/ui-hlp/menu.cpp +++ b/src/ui-hlp/menu.cpp @@ -77,7 +77,7 @@ static menudialog *uih_perturbationdialog, *uih_juliadialog, *uih_filterdialog, *uih_shiftdialog, *uih_speeddialog, *printdialog, *uih_bailoutdialog, *uih_threaddialog, *saveanimdialog, *uih_juliamodedialog, *uih_textposdialog, *uih_fastmodedialog, *uih_timedialog, *uih_numdialog, - *uih_fpdialog, *palettedialog, *uih_cyclingdialog, *loadimgdialog, *palettegradientdialog, + *uih_fpdialog, *palettedialog, *uih_cyclingdialog, *palettegradientdialog, *uih_renderimgdialog #ifdef USE_SFFE , @@ -177,17 +177,13 @@ void uih_registermenudialogs_i18n(void) NULL_I(); Register(loaddialog); - DIALOGIFILE_I(TR("Dialog", "Filename:"), "fract*.xpf"); + DIALOGIFILE_I(TR("Dialog", "Filename:"), "*.png *.xpf"); NULL_I(); Register(playdialog); DIALOGIFILE_I(TR("Dialog", "Filename:"), "anim*.xaf"); NULL_I(); - Register(loadimgdialog); - DIALOGIFILE_I(TR("Dialog", "Filename:"), "fract*.png"); - NULL_I(); - Register(saveimgdialog); DIALOGOFILE_I(TR("Dialog", "Filename:"), "fract*.png"); NULL_I(); @@ -1110,6 +1106,9 @@ void uih_registermenus_i18n(void) loaddialog); MENUDIALOG_I("file", NULL, TR("Menu", "Save"), "savepos", 0, uih_saveposfile, saveposdialog); + SUBMENU_I("file", NULL, TR("Menu", "Save as"), "saveas"); + MENUDIALOG_I("saveas", NULL, TR("Menu", "PNG"), "saveimg", 0, + uih_savepngfile, saveimgdialog); MENUSEPARATOR_I("file") MENUDIALOGCB_I("file", NULL, TR("Menu", "Record"), "record", 0, uih_saveanimfile, saveanimdialog, uih_saveanimenabled); @@ -1117,11 +1116,6 @@ void uih_registermenus_i18n(void) MENUFLAG_INTERRUPT | MENUFLAG_NOPLAY, uih_playfile, playdialog); MENUSEPARATOR_I("file"); - MENUDIALOG_I("file", NULL, TR("Menu", "Open image"), "loadimg", - MENUFLAG_INTERRUPT, uih_loadpngfile, loadimgdialog); - MENUDIALOG_I("file", NULL, TR("Menu", "Save image"), "saveimg", 0, - uih_savepngfile, saveimgdialog); - MENUSEPARATOR_I("file"); MENUDIALOG_I("file", NULL, TR("Menu", "Render"), "renderanim", UI, uih_render, uih_renderdialog); MENUDIALOG_I("file", NULL, TR("Menu", "Render Image"), "renderimg", UI, diff --git a/src/ui-hlp/ui_helper.cpp b/src/ui-hlp/ui_helper.cpp index 9c6480e0..a18a6395 100644 --- a/src/ui-hlp/ui_helper.cpp +++ b/src/ui-hlp/ui_helper.cpp @@ -537,6 +537,16 @@ void uih_cycling_continue(struct uih_context *c) void uih_loadfile(struct uih_context *c, xio_constpath d) { + int los = strlen(d); + char ext[4]; + if(los < 3) + return; + memcpy(ext, &d[los-3], 3); + if(strcmp(ext, "png") == 0) { + uih_loadpngfile(c, d); + return; + } + xio_file f; f = xio_ropen(d); if (f == NULL) { diff --git a/src/ui/customdialog.cpp b/src/ui/customdialog.cpp index c8c7b238..8cda9a8f 100644 --- a/src/ui/customdialog.cpp +++ b/src/ui/customdialog.cpp @@ -286,7 +286,7 @@ void CustomDialog::chooseInputFile() QSettings settings; QString fileLocation = settings.value("MainWindow/lastFileLocation", QDir::homePath()).toString(); QString fileName = QFileDialog::getOpenFileName( - this, sender()->objectName(), fileLocation, "*.xpf *.xaf"); + this, sender()->objectName(), fileLocation, "*.xpf *.png *.xaf"); if (!fileName.isNull()) { field->setText(fileName); settings.setValue("MainWindow/lastFileLocation", QFileInfo(fileName).absolutePath()); diff --git a/src/ui/image_qt.cpp b/src/ui/image_qt.cpp index a916a4d8..b691a854 100644 --- a/src/ui/image_qt.cpp +++ b/src/ui/image_qt.cpp @@ -70,7 +70,8 @@ const char *writepng(xio_constpath filename, const struct image *image, xio_file QString xpf_chunk = xio_getstring(xpf_data); qimage->setText("Metadata", xpf_chunk); } - qimage->save(filename); + if(!qimage->save(filename)) + return "Invalid file extension"; return NULL; } diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index fc578444..3bfb4fd8 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -826,7 +826,6 @@ void MainWindow::showDialog(const char *name) (dialog[0].type == DIALOG_IFILE || dialog[0].type == DIALOG_OFILE)) { QString filter = QString("*.%1").arg(QFileInfo(dialog[0].defstr).completeSuffix()); - QSettings settings; QString fileLocation = settings.value("MainWindow/lastFileLocation", QDir::homePath()) @@ -848,8 +847,11 @@ void MainWindow::showDialog(const char *name) if (!fileName.isNull()) { QString ext = "." + QFileInfo(dialog[0].defstr).suffix(); - if (!fileName.endsWith(ext)) + + if (!fileName.endsWith(".xpf") and !fileName.endsWith(".png") + and !fileName.endsWith(ext)) fileName += ext; + dialogparam *param = (dialogparam *)malloc(sizeof(dialogparam)); param->dstring = strdup(fileName.toUtf8()); menuActivate(item, param);