Open batch result file with OS default program; See issue #372

This commit is contained in:
Oliver Duis 2010-12-03 19:23:43 +01:00
parent 25759b48d9
commit 411cb1470c
7 changed files with 52 additions and 6 deletions

View File

@ -292,7 +292,8 @@ rtengine::ProcessingJob* BatchQueue::imageReady (rtengine::IImage16* img) {
Glib::ustring fname; Glib::ustring fname;
SaveFormat saveFormat; SaveFormat saveFormat;
if (processing->outFileName=="") { // auto file name if (processing->outFileName=="") { // auto file name
fname = obtainFileName (processing->filename); Glib::ustring s = calcAutoFileNameBase (processing->filename);
fname = autoCompleteFileName (s, options.saveFormat.format);
saveFormat = options.saveFormat; saveFormat = options.saveFormat;
} }
else { // use the save-as filename with automatic completion for uniqueness else { // use the save-as filename with automatic completion for uniqueness
@ -300,6 +301,7 @@ rtengine::ProcessingJob* BatchQueue::imageReady (rtengine::IImage16* img) {
saveFormat = processing->saveFormat; saveFormat = processing->saveFormat;
} }
//printf ("fname=%s, %s\n", fname.c_str(), removeExtension(fname).c_str()); //printf ("fname=%s, %s\n", fname.c_str(), removeExtension(fname).c_str());
if (img && fname!="") { if (img && fname!="") {
int err = 0; int err = 0;
if (saveFormat.format=="tif") if (saveFormat.format=="tif")
@ -333,6 +335,7 @@ rtengine::ProcessingJob* BatchQueue::imageReady (rtengine::IImage16* img) {
delete processing; delete processing;
processing = NULL; processing = NULL;
fd.erase (fd.begin()); fd.erase (fd.begin());
// return next job // return next job
if (fd.size()==0) { if (fd.size()==0) {
if (listener) if (listener)
@ -371,7 +374,9 @@ rtengine::ProcessingJob* BatchQueue::imageReady (rtengine::IImage16* img) {
return processing ? processing->job : NULL; return processing ? processing->job : NULL;
} }
Glib::ustring BatchQueue::obtainFileName (const Glib::ustring& origFileName) { // Calculates automatic filename of processed batch entry, but just the base name
// example output: "c:\out\converted\dsc0121"
Glib::ustring BatchQueue::calcAutoFileNameBase (const Glib::ustring& origFileName) {
std::vector<Glib::ustring> pa; std::vector<Glib::ustring> pa;
std::vector<Glib::ustring> da; std::vector<Glib::ustring> da;
@ -445,7 +450,7 @@ Glib::ustring BatchQueue::obtainFileName (const Glib::ustring& origFileName) {
else else
path = Glib::build_filename (options.savePathFolder, filename); path = Glib::build_filename (options.savePathFolder, filename);
return autoCompleteFileName (path, options.saveFormat.format); return path;
} }
Glib::ustring BatchQueue::autoCompleteFileName (const Glib::ustring& fileName, const Glib::ustring& format) { Glib::ustring BatchQueue::autoCompleteFileName (const Glib::ustring& fileName, const Glib::ustring& format) {

View File

@ -1,7 +1,6 @@
/* /*
* This file is part of RawTherapee. * This file is part of RawTherapee.
* *
* Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
* *
* RawTherapee is free software: you can redistribute it and/or modify * RawTherapee is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -54,7 +53,6 @@ class BatchQueue : public ThumbBrowserBase,
BatchQueueListener* listener; BatchQueueListener* listener;
Glib::ustring obtainFileName (const Glib::ustring& origFileName);
Glib::ustring autoCompleteFileName (const Glib::ustring& fileName, const Glib::ustring& format); Glib::ustring autoCompleteFileName (const Glib::ustring& fileName, const Glib::ustring& format);
Glib::ustring getTempFilenameForParams( const Glib::ustring filename ); Glib::ustring getTempFilenameForParams( const Glib::ustring filename );
bool saveBatchQueue( ); bool saveBatchQueue( );
@ -81,6 +79,8 @@ class BatchQueue : public ThumbBrowserBase,
void setBatchQueueListener (BatchQueueListener* l) { listener = l; } void setBatchQueueListener (BatchQueueListener* l) { listener = l; }
void notifyListener (); void notifyListener ();
bool loadBatchQueue (); bool loadBatchQueue ();
static Glib::ustring calcAutoFileNameBase (const Glib::ustring& origFileName);
}; };
#endif #endif

View File

@ -672,6 +672,10 @@ bool EditorPanel::handleShortcutKey (GdkEventKey* event) {
case GDK_F: case GDK_F:
iarea->imageArea->zoomPanel->zoomFitClicked(); iarea->imageArea->zoomPanel->zoomFitClicked();
return true; return true;
case GDK_F5:
openThm->openBatchResultDefaultViewer();
return true;
} }
} }
else { else {

View File

@ -392,6 +392,11 @@ void FileBrowser::partPasteProfile () {
partialPasteDlg.hide (); partialPasteDlg.hide ();
} }
void FileBrowser::openBatchResultDefaultViewer () {
if (selected.size()==1)
((FileBrowserEntry*)selected[0])->thumbnail->openBatchResultDefaultViewer();
}
bool FileBrowser::keyPressed (GdkEventKey* event) { bool FileBrowser::keyPressed (GdkEventKey* event) {
if ((event->keyval==GDK_C || event->keyval==GDK_c) && event->state & GDK_CONTROL_MASK) { if ((event->keyval==GDK_C || event->keyval==GDK_c) && event->state & GDK_CONTROL_MASK) {
@ -422,6 +427,10 @@ bool FileBrowser::keyPressed (GdkEventKey* event) {
menuItemActivated (selall); menuItemActivated (selall);
return true; return true;
} }
else if (event->keyval==GDK_F5) {
openBatchResultDefaultViewer ();
return true;
}
return false; return false;
} }

View File

@ -113,6 +113,8 @@ class FileBrowser : public ThumbBrowserBase, public LWButtonListener {
void pasteProfile (); void pasteProfile ();
void partPasteProfile (); void partPasteProfile ();
void openBatchResultDefaultViewer ();
void redrawNeeded (ThumbBrowserEntryBase* entry); void redrawNeeded (ThumbBrowserEntryBase* entry);
void thumbRearrangementNeeded (); void thumbRearrangementNeeded ();
void _thumbRearrangementNeeded (); void _thumbRearrangementNeeded ();

View File

@ -1,7 +1,6 @@
/* /*
* This file is part of RawTherapee. * This file is part of RawTherapee.
* *
* Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
* *
* RawTherapee is free software: you can redistribute it and/or modify * RawTherapee is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -29,6 +28,7 @@
#include <glib/gstdio.h> #include <glib/gstdio.h>
#include <guiutils.h> #include <guiutils.h>
#include <profilestore.h> #include <profilestore.h>
#include <batchqueue.h>
using namespace rtengine::procparams; using namespace rtengine::procparams;
@ -503,3 +503,27 @@ void Thumbnail::removeThumbnailListener (ThumbnailListener* tnl) {
} }
} }
// Calculates the standard filename for the automatically named batch result
// and opens it in OS default viewer
// Return: Success?
bool Thumbnail::openBatchResultDefaultViewer() {
Glib::ustring openFName = Glib::ustring::compose ("%1.%2", BatchQueue::calcAutoFileNameBase(fname), options.saveFormat.format);
printf ("Try opening %s\n", openFName.c_str());
if (Glib::file_test (openFName, Glib::FILE_TEST_EXISTS)) {
#ifdef WIN32
ShellExecute(NULL, "open", openFName.c_str(), NULL, NULL, SW_SHOWMAXIMIZED);
return true;
#else
// TODO: Add more OSes here
printf("Automatic opening not supported on this OS\n");
return false;
#endif
} else {
printf("File not found\n");
return false;
}
}

View File

@ -127,6 +127,8 @@ class Thumbnail {
void updateCache (); void updateCache ();
void saveThumbnail (); void saveThumbnail ();
bool openBatchResultDefaultViewer();
}; };