From 48a0b7962b1cb3ac4bc6359b681e0b61eb0295d4 Mon Sep 17 00:00:00 2001 From: michael Date: Fri, 17 Jun 2011 08:15:35 -0400 Subject: [PATCH] New feature: apply profile (partial) - issue 778 This patch allows to apply selected profile via a partial paste dialog. This is useful, for example, when applying stored profile to rotated or cropped images. "Apply profile partial" will allow to bypass not selected params, e.g. rotation, crop, etc. --- rtdata/languages/default | 1 + rtgui/filebrowser.cc | 37 ++++++++++++++++++++++++++++++++++++- rtgui/filebrowser.h | 2 ++ 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 879937c9c..b1baa76d5 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -54,6 +54,7 @@ EXIFPANEL_RESETHINT;Reset the selected tags to their original values EXIFPANEL_SUBDIRECTORY;Subdirectory FILEBROWSER_ADDDELTEMPLATE;Add/Del templates... FILEBROWSER_APPLYPROFILE;Apply profile +FILEBROWSER_APPLYPROFILE_PARTIAL;Apply profile (partial) FILEBROWSER_ARRANGEMENTHINT;Change between vertical/horizontal alignment of thumbnails FILEBROWSER_AUTODARKFRAME;Auto dark frame FILEBROWSER_AUTOFLATFIELD;Auto flat field diff --git a/rtgui/filebrowser.cc b/rtgui/filebrowser.cc index 58aef36fa..c8ff91e79 100644 --- a/rtgui/filebrowser.cc +++ b/rtgui/filebrowser.cc @@ -85,6 +85,7 @@ FileBrowser::FileBrowser () pmenu->attach (*Gtk::manage(pasteprof = new Gtk::MenuItem (M("FILEBROWSER_PASTEPROFILE"))), 0, 1, p, p+1); p++; pmenu->attach (*Gtk::manage(partpasteprof = new Gtk::MenuItem (M("FILEBROWSER_PARTIALPASTEPROFILE"))), 0, 1, p, p+1); p++; pmenu->attach (*Gtk::manage(applyprof = new Gtk::MenuItem (M("FILEBROWSER_APPLYPROFILE"))), 0, 1, p, p+1); p++; + pmenu->attach (*Gtk::manage(applypartprof = new Gtk::MenuItem (M("FILEBROWSER_APPLYPROFILE_PARTIAL"))), 0, 1, p, p+1); p++; pmenu->attach (*Gtk::manage(clearprof = new Gtk::MenuItem (M("FILEBROWSER_CLEARPROFILE"))), 0, 1, p, p+1); p++; pmenu->attach (*Gtk::manage(cachemenu = new Gtk::MenuItem (M("FILEBROWSER_CACHE"))), 0, 1, p, p+1); p++; @@ -119,6 +120,7 @@ FileBrowser::FileBrowser () pasteprof->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuItemActivated), pasteprof)); partpasteprof->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuItemActivated), partpasteprof)); applyprof->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuItemActivated), applyprof)); + applypartprof->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuItemActivated), applypartprof)); clearprof->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuItemActivated), clearprof)); cachemenu->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuItemActivated), cachemenu)); } @@ -158,7 +160,19 @@ void FileBrowser::rightClicked (ThumbBrowserEntryBase* entry) { mi->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::applyMenuItemActivated), profnames[i])); mi->show (); } - applyprof->set_submenu (*applmenu); + applyprof->set_submenu (*applmenu); + + // submenu applpartmenu + p = 0; + Gtk::Menu* applpartmenu = Gtk::manage (new Gtk::Menu ()); + //std::vector profnames = profileStore.getProfileNames (); // this is already created for submenu applmenu above + for (int i=0; iattach (*mi, 0, 1, p, p+1); p++; + mi->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::applyPartialMenuItemActivated), profnames[i])); + mi->show (); + } + applypartprof->set_submenu (*applpartmenu); // submenuDF Gtk::Menu* submenuDF = Gtk::manage (new Gtk::Menu ()); @@ -620,6 +634,27 @@ void FileBrowser::applyMenuItemActivated (Glib::ustring ppname) { } } +void FileBrowser::applyPartialMenuItemActivated (Glib::ustring ppname) { + + if (!tbl || selected.size()==0) + return; + + rtengine::procparams::ProcParams* pparams = profileStore.getProfile (ppname); + + if (pparams) { + if (partialPasteDlg.run ()) { + + for (int i=0; ithumbnail->getProcParams (); + partialPasteDlg.applyPaste (¶ms, pparams); + ((FileBrowserEntry*)selected[i])->thumbnail->setProcParams (params, FILEBROWSER); + } + queue_draw (); + } + partialPasteDlg.hide (); + } +} + void FileBrowser::applyFilter (const BrowserFilter& filter) { this->filter = filter; diff --git a/rtgui/filebrowser.h b/rtgui/filebrowser.h index 389f2612f..da45ed682 100644 --- a/rtgui/filebrowser.h +++ b/rtgui/filebrowser.h @@ -79,6 +79,7 @@ class FileBrowser : public ThumbBrowserBase, public LWButtonListener { Gtk::MenuItem* pasteprof; Gtk::MenuItem* partpasteprof; Gtk::MenuItem* applyprof; + Gtk::MenuItem* applypartprof; Gtk::MenuItem* clearprof; Gtk::MenuItem* cachemenu; Gtk::MenuItem* clearFromCache; @@ -116,6 +117,7 @@ class FileBrowser : public ThumbBrowserBase, public LWButtonListener { void menuItemActivated (Gtk::MenuItem* m); void applyMenuItemActivated (Glib::ustring ppname); + void applyPartialMenuItemActivated (Glib::ustring ppname); void applyFilter (const BrowserFilter& filter); int getNumFiltered(){ return numFiltered;}