External programs plugger
see issue 1323
This commit is contained in:
@@ -51,6 +51,8 @@ EXIFPANEL_RESETALL;Alle zurücksetzen
|
||||
EXIFPANEL_RESETHINT;Gewählte Attribute zu den ursprünglichen Werten zurücksetzen
|
||||
EXIFPANEL_RESET;Zurücksetzen
|
||||
EXIFPANEL_SUBDIRECTORY;Unterverzeichnis
|
||||
EXTPROGTARGET_1;Raw
|
||||
EXTPROGTARGET_2;stapelverarbeitet
|
||||
FILEBROWSER_ADDDELTEMPLATE;Vorlagen hinzu/entfernen...
|
||||
FILEBROWSER_APPLYPROFILE;Profil anwenden
|
||||
FILEBROWSER_APPLYPROFILE_PARTIAL;Profil selektiv anwenden
|
||||
@@ -77,10 +79,12 @@ FILEBROWSER_EXIFFILTERAPPLY;Anwenden
|
||||
FILEBROWSER_EXIFFILTERLABEL;Exif Filter
|
||||
FILEBROWSER_EXIFFILTERSETTINGSHINT;Ändern der Einstellungen des Exif Filters
|
||||
FILEBROWSER_EXIFFILTERSETTINGS;Einstellungen
|
||||
FILEBROWSER_EXTPROGMENU;Öffnen mit
|
||||
FILEBROWSER_FLATFIELD;Weißbild
|
||||
FILEBROWSER_MOVETODARKFDIR;In Dunkelbild-Verzeichnis verschieben
|
||||
FILEBROWSER_MOVETOFLATFIELDDIR;In Weißbild-Verzeichnis verschieben
|
||||
FILEBROWSER_NEW_NAME;Neuer Name:
|
||||
FILEBROWSER_OPENDEFAULTVIEWER;Windows Standard Betracher (stapelverarbeitet)
|
||||
FILEBROWSER_PARTIALPASTEPROFILE;Profil selektiv einfügen
|
||||
FILEBROWSER_PASTEPROFILE;Profil einfügen
|
||||
FILEBROWSER_POPUPCANCELJOB;Job abbrechen
|
||||
@@ -446,6 +450,7 @@ MAIN_MSG_EMPTYFILENAME;Dateiname fehlt!
|
||||
MAIN_MSG_ERRORDURINGIMAGESAVING;Fehler beim Speichern des Bildes
|
||||
MAIN_MSG_EXITJOBSINQUEUEINFO;Unverarbeitete Bilder in der Warteschlange gehen beim Verlassen der Anwendung verloren.
|
||||
MAIN_MSG_EXITJOBSINQUEUEQUEST;Wollen Sie die Anwendung wirklich schließen? Es sind noch unverarbeitete Bilder in der Warteschlange.
|
||||
MAIN_MSG_IMAGEUNPROCESSED;Für diese Funktion müssen erst alle Bilder stapelverarbeitet sein.
|
||||
MAIN_MSG_JOBSINQUEUE;Job in Bearbeitung
|
||||
MAIN_MSG_NAVIGATOR;Navigator
|
||||
MAIN_MSG_PLACES;Orte
|
||||
@@ -638,6 +643,7 @@ PREFERENCES_INTENT_SATURATION;Sättigung
|
||||
PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Voransicht aus RAW, wenn noch nicht editiert
|
||||
PREFERENCES_LANGAUTODETECT;Betriebssystem-Einstellung verwenden
|
||||
PREFERENCES_LIVETHUMBNAILS;Live Voransichten (langsamer)
|
||||
PREFERENCES_MENUGROUPEXTPROGS;Untermenü "Öffnen mit"
|
||||
PREFERENCES_MENUGROUPFILEOPERATIONS;Untermenü Dateioperationen
|
||||
PREFERENCES_MENUGROUPLABEL;Untermenü Farbmarkierung
|
||||
PREFERENCES_MENUGROUPPROFILEOPERATIONS;Untermenü Profiloperationen
|
||||
|
@@ -78,6 +78,8 @@ EXPORT_MAXWIDTH;Maximum Width:
|
||||
EXPORT_PUTTOQUEUEFAST; Put to Queue for Fast Export
|
||||
EXPORT_RAW_DMETHOD;Demosaic Method
|
||||
EXPORT_RESIZEMETHOD;Resize Method
|
||||
EXTPROGTARGET_1;raw
|
||||
EXTPROGTARGET_2;queue-processed
|
||||
FILEBROWSER_ADDDELTEMPLATE;Add/Del templates...
|
||||
FILEBROWSER_APPLYPROFILE;Apply profile
|
||||
FILEBROWSER_APPLYPROFILE_PARTIAL;Apply profile (partial)
|
||||
@@ -104,10 +106,12 @@ FILEBROWSER_EXIFFILTERAPPLY;Apply
|
||||
FILEBROWSER_EXIFFILTERLABEL;Exif Filter
|
||||
FILEBROWSER_EXIFFILTERSETTINGSHINT;Change settings of the Exif Filter
|
||||
FILEBROWSER_EXIFFILTERSETTINGS;Setup
|
||||
FILEBROWSER_EXTPROGMENU;Open with
|
||||
FILEBROWSER_FLATFIELD;Flat Field
|
||||
FILEBROWSER_MOVETODARKFDIR;Move to dark frames directory
|
||||
FILEBROWSER_MOVETOFLATFIELDDIR;Move to flat fields directory
|
||||
FILEBROWSER_NEW_NAME;New name:
|
||||
FILEBROWSER_OPENDEFAULTVIEWER;Windows Default Viewer (queue-processed)
|
||||
FILEBROWSER_PARTIALPASTEPROFILE;Partial paste
|
||||
FILEBROWSER_PASTEPROFILE;Paste profile
|
||||
FILEBROWSER_POPUPCANCELJOB;Cancel job
|
||||
@@ -474,6 +478,7 @@ MAIN_MSG_EMPTYFILENAME;Filename unspecified!
|
||||
MAIN_MSG_ERRORDURINGIMAGESAVING;Error during image saving
|
||||
MAIN_MSG_EXITJOBSINQUEUEINFO;Unprocessed images in the queue will be lost on exit.
|
||||
MAIN_MSG_EXITJOBSINQUEUEQUEST;Are you sure you want to exit? There are unprocessed images waiting in the queue.
|
||||
MAIN_MSG_IMAGEUNPROCESSED;This command requires all selected images to be queue process first.
|
||||
MAIN_MSG_JOBSINQUEUE;job(s) in the queue
|
||||
MAIN_MSG_NAVIGATOR;Navigator
|
||||
MAIN_MSG_PLACES;Places
|
||||
@@ -673,6 +678,7 @@ PREFERENCES_INTENT_SATURATION;Saturation
|
||||
PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Show raw internal thumbnail if unedited
|
||||
PREFERENCES_LANGAUTODETECT;Use OS language setting
|
||||
PREFERENCES_LIVETHUMBNAILS;Live Thumbnails (slower)
|
||||
PREFERENCES_MENUGROUPEXTPROGS;Group "Open with"
|
||||
PREFERENCES_MENUGROUPFILEOPERATIONS;Group File Operations
|
||||
PREFERENCES_MENUGROUPLABEL;Group Labeling
|
||||
PREFERENCES_MENUGROUPPROFILEOPERATIONS;Group Profile Operations
|
||||
|
@@ -13,7 +13,7 @@ set (BASESOURCEFILES
|
||||
whitebalance.cc vignetting.cc rotate.cc distortion.cc
|
||||
crophandler.cc dirbrowser.cc
|
||||
curveeditor.cc curveeditorgroup.cc diagonalcurveeditorsubgroup.cc flatcurveeditorsubgroup.cc
|
||||
filecatalog.cc
|
||||
filecatalog.cc extprog.cc
|
||||
previewloader.cc rtimage.cc
|
||||
histogrampanel.cc history.cc imagearea.cc
|
||||
imageareapanel.cc iptcpanel.cc labcurve.cc main.cc
|
||||
|
@@ -25,6 +25,7 @@
|
||||
#include "clipboard.h"
|
||||
#include "profilestore.h"
|
||||
#include "procparamchangers.h"
|
||||
#include "batchqueue.h"
|
||||
#include "../rtengine/dfmanager.h"
|
||||
#include "../rtengine/ffmanager.h"
|
||||
#include "rtimage.h"
|
||||
@@ -101,6 +102,55 @@ FileBrowser::FileBrowser ()
|
||||
|
||||
pmenu->attach (*Gtk::manage(new Gtk::SeparatorMenuItem ()), 0, 1, p, p+1); p++;
|
||||
|
||||
/***********************
|
||||
* external programs
|
||||
* *********************/
|
||||
#ifdef WIN32
|
||||
Gtk::manage(miOpenDefaultViewer=new Gtk::MenuItem (M("FILEBROWSER_OPENDEFAULTVIEWER")));
|
||||
#else
|
||||
miOpenDefaultViewer=NULL;
|
||||
#endif
|
||||
|
||||
// Build a list of menu items
|
||||
mMenuExtProgs.clear(); amiExtProg=NULL;
|
||||
for (std::list<ExtProgAction*>::iterator it=extProgStore->lActions.begin();it!=extProgStore->lActions.end();it++) {
|
||||
ExtProgAction* pAct=*it;
|
||||
|
||||
if (pAct->target==1 || pAct->target==2) mMenuExtProgs[pAct->GetFullName()]=pAct;
|
||||
}
|
||||
|
||||
// Attach them to menu
|
||||
if (!mMenuExtProgs.empty() || miOpenDefaultViewer!=NULL) {
|
||||
amiExtProg=new Gtk::MenuItem*[mMenuExtProgs.size()];
|
||||
int itemNo=0;
|
||||
|
||||
if (options.menuGroupExtProg) {
|
||||
pmenu->attach (*Gtk::manage(menuExtProg = new Gtk::MenuItem (M("FILEBROWSER_EXTPROGMENU"))), 0, 1, p, p+1); p++;
|
||||
Gtk::Menu* submenuExtProg = Gtk::manage (new Gtk::Menu());
|
||||
|
||||
if (miOpenDefaultViewer!=NULL) {
|
||||
submenuExtProg->attach (*miOpenDefaultViewer, 0, 1, p, p+1); p++;
|
||||
}
|
||||
|
||||
for (std::map<Glib::ustring, ExtProgAction*>::iterator it=mMenuExtProgs.begin();it!=mMenuExtProgs.end();it++,itemNo++) {
|
||||
submenuExtProg->attach (*Gtk::manage(amiExtProg[itemNo] = new Gtk::MenuItem ((*it).first)), 0, 1, p, p+1); p++;
|
||||
}
|
||||
|
||||
submenuExtProg->show_all ();
|
||||
menuExtProg->set_submenu (*submenuExtProg);
|
||||
} else {
|
||||
if (miOpenDefaultViewer!=NULL) {
|
||||
pmenu->attach (*miOpenDefaultViewer, 0, 1, p, p+1); p++;
|
||||
}
|
||||
|
||||
for (std::map<Glib::ustring, ExtProgAction*>::iterator it=mMenuExtProgs.begin();it!=mMenuExtProgs.end();it++,itemNo++) {
|
||||
pmenu->attach (*Gtk::manage(amiExtProg[itemNo] = new Gtk::MenuItem ((*it).first)), 0, 1, p, p+1); p++;
|
||||
}
|
||||
}
|
||||
|
||||
pmenu->attach (*Gtk::manage(new Gtk::SeparatorMenuItem ()), 0, 1, p, p+1); p++;
|
||||
}
|
||||
|
||||
/***********************
|
||||
* File Operations
|
||||
* *********************/
|
||||
@@ -188,12 +238,20 @@ FileBrowser::FileBrowser ()
|
||||
pasteprof->add_accelerator ("activate", pmenu->get_accel_group(), GDK_V, Gdk::CONTROL_MASK, Gtk::ACCEL_VISIBLE);
|
||||
partpasteprof->add_accelerator ("activate", pmenu->get_accel_group(), GDK_V, Gdk::CONTROL_MASK | Gdk::SHIFT_MASK, Gtk::ACCEL_VISIBLE);
|
||||
|
||||
// Bind to event handlers
|
||||
open->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuItemActivated), open));
|
||||
for (int i=0; i<6; i++)
|
||||
rank[i]->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuItemActivated), rank[i]));
|
||||
for (int i=0; i<6; i++)
|
||||
colorlabel[i]->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuItemActivated), colorlabel[i]));
|
||||
|
||||
for (int i=0; i<mMenuExtProgs.size(); i++)
|
||||
amiExtProg[i]->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuItemActivated), amiExtProg[i]));
|
||||
|
||||
if (miOpenDefaultViewer!=NULL) {
|
||||
miOpenDefaultViewer->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuItemActivated), miOpenDefaultViewer));
|
||||
}
|
||||
|
||||
trash->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuItemActivated), trash));
|
||||
untrash->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuItemActivated), untrash));
|
||||
develop->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuItemActivated), develop));
|
||||
@@ -217,6 +275,7 @@ FileBrowser::FileBrowser ()
|
||||
FileBrowser::~FileBrowser ()
|
||||
{
|
||||
delete pmenu;
|
||||
delete[] amiExtProg;
|
||||
}
|
||||
|
||||
void FileBrowser::rightClicked (ThumbBrowserEntryBase* entry) {
|
||||
@@ -461,6 +520,27 @@ void FileBrowser::menuItemActivated (Gtk::MenuItem* m) {
|
||||
colorlabelRequested (mselected, i);
|
||||
return;
|
||||
}
|
||||
|
||||
for (int j=0; j<mMenuExtProgs.size(); j++) {
|
||||
if (m==amiExtProg[j]) {
|
||||
ExtProgAction* pAct = mMenuExtProgs[m->get_label()];
|
||||
|
||||
// Build vector of all file names
|
||||
std::vector<Glib::ustring> selFileNames;
|
||||
for (int i=0; i<selected.size(); i++) {
|
||||
Glib::ustring fn=selected[i]->thumbnail->getFileName();
|
||||
|
||||
// Maybe batch processed version
|
||||
if (pAct->target==2) fn = Glib::ustring::compose ("%1.%2", BatchQueue::calcAutoFileNameBase(fn), options.saveFormatBatch.format);
|
||||
|
||||
selFileNames.push_back(fn);
|
||||
}
|
||||
|
||||
pAct->Execute(selFileNames);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (m==open) {
|
||||
std::vector<Thumbnail*> entries;
|
||||
for (int i=0; i<mselected.size(); i++)
|
||||
@@ -616,6 +696,8 @@ void FileBrowser::menuItemActivated (Gtk::MenuItem* m) {
|
||||
for (int i=0; i<mselected.size(); i++)
|
||||
tbl->clearFromCacheRequested (mselected, true);
|
||||
//queue_draw ();
|
||||
} else if (miOpenDefaultViewer!=NULL && m==miOpenDefaultViewer) {
|
||||
openDefaultViewer(1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -684,8 +766,14 @@ void FileBrowser::partPasteProfile () {
|
||||
}
|
||||
|
||||
void FileBrowser::openDefaultViewer (int destination) {
|
||||
bool success=true;
|
||||
if (selected.size()==1)
|
||||
(static_cast<FileBrowserEntry*>(selected[0]))->thumbnail->openDefaultViewer(destination);
|
||||
success=(static_cast<FileBrowserEntry*>(selected[0]))->thumbnail->openDefaultViewer(destination);
|
||||
|
||||
if (!success) {
|
||||
Gtk::MessageDialog msgd (M("MAIN_MSG_IMAGEUNPROCESSED"), true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);
|
||||
msgd.run ();
|
||||
}
|
||||
}
|
||||
|
||||
bool FileBrowser::keyPressed (GdkEventKey* event) {
|
||||
|
@@ -20,12 +20,14 @@
|
||||
#define _FILEBROWSER_
|
||||
|
||||
#include <gtkmm.h>
|
||||
#include <map>
|
||||
#include "thumbbrowserbase.h"
|
||||
#include "exiffiltersettings.h"
|
||||
#include "filebrowserentry.h"
|
||||
#include "browserfilter.h"
|
||||
#include "partialpastedlg.h"
|
||||
#include "exportpanel.h"
|
||||
#include "extprog.h"
|
||||
|
||||
class FileBrowser;
|
||||
class FileBrowserEntry;
|
||||
@@ -76,6 +78,11 @@ class FileBrowser : public ThumbBrowserBase,
|
||||
Gtk::MenuItem* menuLabel;
|
||||
Gtk::MenuItem* menuFileOperations;
|
||||
Gtk::ImageMenuItem* menuProfileOperations;
|
||||
Gtk::MenuItem* menuExtProg;
|
||||
Gtk::MenuItem** amiExtProg;
|
||||
Gtk::MenuItem* miOpenDefaultViewer;
|
||||
std::map<Glib::ustring, ExtProgAction*> mMenuExtProgs; // key is menuitem label
|
||||
|
||||
Gtk::MenuItem* menuDF;
|
||||
Gtk::MenuItem* selectDF;
|
||||
Gtk::MenuItem* thisIsDF;
|
||||
|
@@ -34,6 +34,7 @@
|
||||
#include "soundman.h"
|
||||
#include "rtimage.h"
|
||||
#include "version.h"
|
||||
#include "extprog.h"
|
||||
|
||||
#ifndef WIN32
|
||||
#include <glibmm/fileutils.h>
|
||||
@@ -106,7 +107,7 @@ int main(int argc, char **argv)
|
||||
Gio::init ();
|
||||
|
||||
Options::load ();
|
||||
|
||||
extProgStore->init();
|
||||
SoundManager::init();
|
||||
|
||||
if (argc>1){
|
||||
|
@@ -162,6 +162,7 @@ void Options::setDefaults () {
|
||||
menuGroupLabel = true;
|
||||
menuGroupFileOperations = true;
|
||||
menuGroupProfileOperations = true;
|
||||
menuGroupExtProg = true;
|
||||
|
||||
fastexport_bypass_sharpening = true;
|
||||
fastexport_bypass_sharpenEdge = true;
|
||||
@@ -405,6 +406,7 @@ if (keyFile.has_group ("File Browser")) {
|
||||
if (keyFile.has_key ("File Browser", "menuGroupLabel")) menuGroupLabel = keyFile.get_boolean ("File Browser", "menuGroupLabel");
|
||||
if (keyFile.has_key ("File Browser", "menuGroupFileOperations")) menuGroupFileOperations = keyFile.get_boolean ("File Browser", "menuGroupFileOperations");
|
||||
if (keyFile.has_key ("File Browser", "menuGroupProfileOperations")) menuGroupProfileOperations = keyFile.get_boolean ("File Browser", "menuGroupProfileOperations");
|
||||
if (keyFile.has_key ("File Browser", "menuGroupExtProg")) menuGroupExtProg = keyFile.get_boolean ("File Browser", "menuGroupExtProg");
|
||||
}
|
||||
|
||||
if (keyFile.has_group ("Clipping Indication")) {
|
||||
@@ -594,6 +596,7 @@ int Options::saveToFile (Glib::ustring fname) {
|
||||
keyFile.set_boolean ("File Browser", "menuGroupLabel", menuGroupLabel);
|
||||
keyFile.set_boolean ("File Browser", "menuGroupFileOperations", menuGroupFileOperations);
|
||||
keyFile.set_boolean ("File Browser", "menuGroupProfileOperations", menuGroupProfileOperations);
|
||||
keyFile.set_boolean ("File Browser", "menuGroupExtProg", menuGroupExtProg);
|
||||
|
||||
keyFile.set_integer ("Clipping Indication", "HighlightThreshold", highlightThreshold);
|
||||
keyFile.set_integer ("Clipping Indication", "ShadowThreshold", shadowThreshold);
|
||||
|
@@ -163,6 +163,7 @@ class Options {
|
||||
bool menuGroupLabel;
|
||||
bool menuGroupFileOperations;
|
||||
bool menuGroupProfileOperations;
|
||||
bool menuGroupExtProg;
|
||||
|
||||
// fast export options
|
||||
bool fastexport_bypass_sharpening;
|
||||
|
@@ -773,6 +773,7 @@ Gtk::Widget* Preferences::getFileBrowserPanel () {
|
||||
ckbmenuGroupLabel = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_MENUGROUPLABEL")) );
|
||||
ckbmenuGroupFileOperations = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_MENUGROUPFILEOPERATIONS")) );
|
||||
ckbmenuGroupProfileOperations = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_MENUGROUPPROFILEOPERATIONS")) );
|
||||
ckbmenuGroupExtProg = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_MENUGROUPEXTPROGS")) );
|
||||
Gtk::VBox* vbmnu = Gtk::manage( new Gtk::VBox () );
|
||||
|
||||
vbmnu->set_border_width (4);
|
||||
@@ -780,6 +781,7 @@ Gtk::Widget* Preferences::getFileBrowserPanel () {
|
||||
vbmnu->pack_start (*ckbmenuGroupLabel, Gtk::PACK_SHRINK, 0);
|
||||
vbmnu->pack_start (*ckbmenuGroupFileOperations, Gtk::PACK_SHRINK, 0);
|
||||
vbmnu->pack_start (*ckbmenuGroupProfileOperations, Gtk::PACK_SHRINK, 0);
|
||||
vbmnu->pack_start (*ckbmenuGroupExtProg, Gtk::PACK_SHRINK, 0);
|
||||
|
||||
frmnu->add (*vbmnu);
|
||||
|
||||
@@ -974,6 +976,7 @@ void Preferences::storePreferences () {
|
||||
moptions.menuGroupLabel = ckbmenuGroupLabel->get_active();
|
||||
moptions.menuGroupFileOperations = ckbmenuGroupFileOperations->get_active();
|
||||
moptions.menuGroupProfileOperations = ckbmenuGroupProfileOperations->get_active();
|
||||
moptions.menuGroupExtProg = ckbmenuGroupExtProg->get_active();
|
||||
moptions.blinkClipped = blinkClipped->get_active ();
|
||||
moptions.highlightThreshold = (int)hlThresh->get_value ();
|
||||
moptions.shadowThreshold = (int)shThresh->get_value ();
|
||||
@@ -1120,6 +1123,8 @@ void Preferences::fillPreferences () {
|
||||
ckbmenuGroupLabel->set_active(moptions.menuGroupLabel);
|
||||
ckbmenuGroupFileOperations->set_active(moptions.menuGroupFileOperations);
|
||||
ckbmenuGroupProfileOperations->set_active(moptions.menuGroupProfileOperations);
|
||||
ckbmenuGroupExtProg->set_active(moptions.menuGroupExtProg);
|
||||
|
||||
blinkClipped->set_active (moptions.blinkClipped);
|
||||
hlThresh->set_value (moptions.highlightThreshold);
|
||||
shThresh->set_value (moptions.shadowThreshold);
|
||||
|
@@ -112,6 +112,7 @@ class Preferences : public Gtk::Dialog {
|
||||
Gtk::CheckButton* ckbmenuGroupLabel;
|
||||
Gtk::CheckButton* ckbmenuGroupFileOperations;
|
||||
Gtk::CheckButton* ckbmenuGroupProfileOperations;
|
||||
Gtk::CheckButton* ckbmenuGroupExtProg;
|
||||
|
||||
Gtk::CheckButton* chOverwriteOutputFile;
|
||||
|
||||
|
Reference in New Issue
Block a user